PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkZWQgc3VwcG9ydCBmb3IgUENJIGJyaWRnZSBvbiBNUEM4MjcyQURTCiAgUGF0Y2ggYnkgVml0YWx5IEJvcmR1ZywgRmViIDA5IDIwMDUKCiogVXBkYXRlIG11bHRpY29yZSBDTTlYWCBzdXBwb3J0IGZvciBJbnRlZ3JhdG9yIEFQIHRvIGFsbG93IGJvb3RpbmcgZnJvbSBmbGFzaAogIFBhdGNoIGJ5IEplYW4tUGF1bCBTYW1hbiwgOCBGZWIgMjAwNQoKKiBGaXggc3Ryc3dhYigpIHRvIHJlbGlhYmx5IGZpbmQgZW5kIG9mIHN0cmluZwogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAwOCBGZWIgMjAwNQoKKiBGaXggdHlwb3MgaW4gaW5jbHVkZS9wcGM0NDAuaAogIFBhdGNoIGJ5IEFuZHJldyBFIE1pbGVza2ksIDA0IEZlYiAyMDA1CgoqIEFkZCBWaWJyZW4gKHdhcyBBY2NlbGVudCkgUFhBMjU1IElEUCBTdXBwb3J0CiAgUGF0Y2ggYnkgQ2xpZmYgQnJha2UsIDA0IEZlYiAyMDA1CgoqIEZpeCB0b29scy9ibXBfbG9nby5jIHVzaW5nIGluY29ycmVjdCBvZmZzZXQgdG8gcGl4ZWwgZGF0YQogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAzMSBKYW4gMjAwNQoKKiBBZGQgQVJNOTQ2RSBjcHUgYW5kIGNvcmUgbW9kdWxlIHRhcmdldHM7IHJlbWFwIG1lbW9yeSB0byAweDAwMDAwMDAwCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAyIEZlYiAyMDA1CgoqIEZpeCBlcnJvciBoYW5kbGluZyBpbiB0b29scy9lbnYvZndfZW52LmMKICBQYXRjaCBieSBBcmEgQXZhbmVzeWFuLCAwMSBGZWIgMjAwNQoKKiBGaXggTUdUNTEwMCBQU0MgYmF1ZHJhdGUgY2FsY3VsYXRpb24KICBQYXRjaCBieSBTZWJhc3RpYW4gU2NoYXUsIDI3IEphbiAyMDA1CgoqIE9NQVAyNDJ4IGZpeCBmb3IgR1AgZGV2aWNlIGJvb3RpbmcKICAtIEFkZCBTUkFNIHVubG9jayBmb3IgR1AgZGV2aWNlcy4KICAtIENoYW5nZSBERFIgRExMIHVubG9jayB2YWx1ZSB0byBhbGxvdyBEUExMb3V0KjEgb3BlcmF0aW9uLgogIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMjEgSmFuIDIwMDU6CgoqIEFkZCBzdXBwb3J0IGZvciBBTUQncyBQYjF4MDAgZXZhbCBib2FyZDsKICBhZGQgTUlJIHJvdXRpbmVzIHRvIHRoZSBhdTF4MDAgZXRoZXJuZXQgZHJpdmVyOwogIGFkZCBVU0Igb2hjaSBkcml2ZXIgKHdvcmsgaW4gcHJvZ3Jlc3MpCiAgUGF0Y2ggYnkgVGhvbWFzIFNhaWxlciwgMjAgSmFuIDIwMDUKCiogVXBkYXRlIG9tYXA1OTEyb3NrIGJvYXJkCiAgVXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgaW5zdGVhZCBvZiBwcml2YXRlIGZsYXNoIGRyaXZlcjsKICBSZW1vdmUgaGFyZGNvZGVkIHBlcnNvbmFsaXplZCBzZXR0aW5ncyBmcm9tIG9tYXA1OTEyb3NrLmg7CiAgRml4IHNwYWNpbmcgd2l0aCAoUk8pIG1hcmtzIGluICdmbGluZm8nIG91dHB1dC4KICBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNCBKYW4gMjAwNQoKKiBGaXggd2FybmluZ3MgZm9yIFBDSSBjb2RlIG9uIGl4cAogIFBhdGNoIGJ5IEpvZSA8bGd4dWVAeWFob28uY29tPiwgMTMgSmFuIDIwMDUKCiogdmlydGV4MiBmaXggZm9yIGJvZ3VzIGRvd25sb2FkIGVycm9yIG1lc3NhZ2VzCiAgVGhlIHZpcnRleDIgRlBHQSBkb3dubG9hZCBjb2RlIHdhdGNoZXMgZm9yIGluaXQgZ29pbmcgYWN0aXZlIGR1cmluZwogIGEgZG93bmxvYWQgb2YgY29uZmlnIGRhdGEgYXMgYW4gZXJyb3IgY29uZGl0aW9uLiBpbml0IGFsc28gZ29lcwogIGFjdGl2ZSBhZnRlciBhIGNvbmZpZ3VyYXRpb24gaXMgZmluaXNoZWQgaW4gY29uY2VydCB3aXRoIHRoZSBkb25lCiAgc2lnbmFsLiBTbyBmYXIsIHRoZSBjb2RlIGRvZXMgbm90IGNoZWNrIGZvciBkb25lIGFjdGl2ZSB1bnRpbCBhbGwKICBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIHNlbnQuIElmIGNvbmZpZ3VyYXRpb24gZGF0YSBoYXMgYSBmZXcKICBleHRyYSBwYWQgYnl0ZXMgYXQgdGhlIGVuZCwgdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvciBtZXNzYWdlIGV2ZW4KICB0aG91Z2ggdGhlIGRvd25sb2FkIGhhZCBzdWNlZWRlZC4KICBOT1RFOiB2aXJ0ZXgyIHNsYXZlIHNlcmlhbCBhbmQgc3BhcnRhbjIgdmVyc2lvbnMgbWF5IHN0aWxsIGhhdmUgdGhlCiAgc2FtZSBwcm9ibGVtLgogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMiBKYW4gMjAwNQoKKiBPcHRpbWl6ZSBmbGFzaF9tYWtlX2NtZCBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIGZvciBsaXR0bGUgZW5kaWFuCiAgRml4ICJXQVJOSU5HOiBmbGFzaF9tYWtlX2NtZDogdW5zdXBwcG9ydGVkIExpdHRsZUVuZGlhbiBtb2RlIgogIG1lc3NhZ2Ugd2hlbiBwcm9iaW5nIGZvciBub25leGlzdGVudCBmbGFzaCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCiAgQXMgYSBzaWRlIGVmZmVjdCBtb3JlIGVmZmljaWVudCBhbmQgc21hbGxlciBjb2RlIGlzIGdlbmVyYXRlZCwKICB3aGljaCBpcyBhbHdheXMgYSBHb29kIFRoaW5nIChUTSkuCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI0IFNlcCAyMDA1CgoqIFVwZGF0ZSBmb3IgVEZUUCB1c2luZyBhIGZpeGVkIFVEUCBwb3J0CiAgVXNlIHRoZSBhcHByb3ZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy4gQWRkZWQgInRmdHBkc3RwIiB0bwogIGFsbG93IHBvcnRzIG90aGVyIHRoYW4gNjkgcGVyIFRvbHVuYXkgT3JrdW4ncyByZWNvbW1lbmRhdGlvbi4KICBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDEyIEphbiAyMDA1CgoqIEFsbG93IHRvIGZvcmNlIFRGVFAgdG8gdXNlIGEgZml4ZWQgVURQIHBvcnQKICAoQWRkIGEgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX1RGVFBfUE9SVCBhbmQgb3B0aW9uYWwgZW52CiAgdmFyaWFibGUgdGZ0cHBvcnQpCiAgUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAxMCBKYW4gMjAwNQoKKiBGaXggZXRoZXJuZXQgdGltZW91dHMgb24gZGJhdTE1NTAgYW5kIG90aGVyIGF1MXgwMCBzeXN0ZW1zCiAgUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjkgRGVjIDIwMDQKCiogQ2xlYW51cDogZml4IGJyb2tlbiBidWlsZHMKCiogRml4IFBIWSBhZGRyZXNzIGFyZ3VtZW50IHBhc3Npbmcgd2l0aCBtaWkgaW5mbyBjb21tYW5kCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IERlYyAyMDA0CgoqIENsZWFudXAgKFBQQzR4eCBpcyBBTUNDIG5vdykKCiogZXNkIENQQ0kyRFAgYm9hcmQgYWRkZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKCiogZXNkIFBNQzQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIyIFNlcCAyMDA1CgoqIEFkZCBTTTUwMSBzdXBwb3J0IHRvIEhINDA1IGJvYXJkLgogIEFkZCBzdXBwb3J0IGZvciBnemlwIGNvbXByZXNzZWQgYm1wJ3MgKENPTkZJR19WSURFT19CTVBfR1pJUCkuCiAgQWRkIHN1cHBvcnQgZm9yIGVlcHJvbSB3cml0ZS1lbmFibGUgKENGR19FRVBST01fV1JFTikuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBTZXAgMjAwNQoKKiBGaXggYXV0b25lZ290aWF0aW9uIGluIHRzZWMgZXRoZXJuZXQgZHJpdmVyCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMSBTZXAgMjAwNQoKKiBGaXggYnVnIGluIGF1dG9fdXBkYXRlICh0cmFiIGJvYXJkKQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE2IFNlcCAyMDA1CgoqIEZpeCBjb21wdXRhdGlvbiBvZiBmcmFtZWJ1ZmZlciBwYWxldHRlIGZvciA4YnBwIExDRCBiaXRtYXBzCiAgUGF0Y2ggYnkgRnJhbmNlc2NvIE1hbmRyYWNjaSwgMTYgU2VwIDIwMDUKCiogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIElOS0E0eDAgYm9hcmQKCiogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBNODU0IGJvYXJkCiAgQmFzZWQgb24gcGF0Y2ggYnkgUi4gTG9lZmZsLCAyMCBKdWwgMjAwNQoKKiBBZGQgUENJIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CgoqIFVwZGF0ZSBBTUNDIFlvc2VtaXRlIHRvIGdldCBhIGNvbnNpc3RlbnQgc2V0dXAgZm9yIGFsbCBBTUNDIGV2YWwKICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CgoqIEZpeCBwcm9ibGVtIGluIDQ0MEdQIGV0aGVybmV0IGRyaXZlciAoZWJvbnkpLiBBZGQgc3VwcG9ydCBmb3IgMm5kCiAgZXRoZXJuZXQgcG9ydCBvbiBlYm9ueS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDcgU2VwIDIwMDUKCiogQWRkZWQgc3VwcG9ydCBmb3IgbXRkZGV2bnVtIGFuZCBtdGRkZXZuYW1lIHZhcmlhYmxlcyAobXRkcGFydHMgY29tbWFuZCkKCiogQ2hhbmdlIGRlZmF1bHQgY29uc29sZSBiYXVkIHJhdGUgZm9yIHN0eHh0YyBib2FyZAoKKiBBZGQgSTJDIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMgKEVFUFJPTSwgUlRDLCBMTTc1LURUVCkuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMSBBdWcgMjAwNQoKKiBGaXggZGVmYXVsdCBjb21tYW5kIHNldCAoZG9uJ3QgaW5jbHVkZSBDRkdfQ01EX0RJU1BMQVkgY29tbWFuZCkKICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgU2VwIDIwMDUKCiogQ2xlYW51cAoKKiBFbmFibGUgU003MTIgZHJpdmVyIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIEZpeCBwcm9ibGVtcyB3aXRoIGxkIHZlcnNpb24gMi4xNiAoZG90IG91dHNpZGUgc2VjdGlvbnMgcHJvYmxlbSkKICBQb2ludGVkIG91dCBieSBHZXJoYXJkIEphZWdlciwgMzEgQXVnIDIwMDU7CiAgY2YuIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA1LTA4L21zZzAwNDEyLmh0bWwKCiogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00Lng6IGZpeCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uCgoqIEFkanVzdCBDUzMgdGltaW5ncyBvbiBITUkxMDAxIGJvYXJkIGZvciBkb3QgbWF0cml4IGRpc3BsYXkgdW5kZXIgTGludXgKCiogQWRkIGtleWJvYXJkIGFuZCBkb3QgbWF0cml4IGRpc3BsYXkgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KCiogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00LngKCiogRml4ZWQgQmFtYm9vIHBvcnQgdG8gZW5hYmxlIHJ1bm5pbmcgd2l0aG91dCBERFItRElNTQogIChCYW1ib28gaGFzIGFsc28gNjRNQiBvbmJvYXJkIEREUikKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEF1ZyAyMDA1CgoqIE1lcmdlZCA0MDVncF9lbmV0LmMgYW5kIDQ0MGd4X2VuZXQuYyB0byBnZW5lcmljIDR4eF9lbmV0LmMKICBub3cgaGFuZGxpbmcgYWxsIDR4eCBjcHUncwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgQXVnIDIwMDUKCiogRml4IG1ha2UgZGVwZW5kZW5jaWVzIGZvciBhdDkxcm05MjAwIGFuZCBrczg2OTUgY3B1cwogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEF1ZyAyMDA1CgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUU01MjAwIGJvYXJkCgoqIEFkZCBlc2QgY3BjaTUyMDAgYW5kIHBmNTIwMCBib2FyZHMKICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAyMiBBdWcgMjAwNQoKKiBGaXggc3lzY2xvY2sgZm9yIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjUgSnVsIDIwMDUKCiogSW5pdGlhbGl6ZSBzZXJpYWwjIGFuZCBldGhhZGRyIGZyb20gbWFudWZhY3R1cmVyIGRhdGEgaW4gRUVQUk9NIG9uIENNQy1QVTIKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBKdW4gMjAwNQoKKiBBZGQgbmV3IGJvYXJkIHNwZWNpZmljIGNvbW1hbmRzIGZvciBUUU01MjAwL1NUSzUyWFgKICAtIFNvdW5kIGNvbW1hbmRzIChiZWVwLCB3YXYsIHNvdW5kKQogIC0gVGVzdCBjb21tYW5kcyAobGVkLCBjYW4sIGJhY2tsaWdodCwgcnMyMzIpCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDIgTWF5IDIwMDUKCiogQ2hhbmdlIG1haW4gY2xvY2sgb24gQ01DLVBVMiBib2FyZCBmcm9tIDIwNyBNSHogdG8gMTc5IE1IegogIGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIEFUOTFSTTkyMDAgQ1BVIFBMTAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIyIEFwciAyMDA1CgoqIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBhbm90aGVyIENNQ19QVTIgdmFyaWFudAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIwIEFwciAyMDA1CgoqIFJlbW92ZSBDT05GSUdfQVQ5MVJNOTIwMERLIGluIENNQy1QVTIgY29uZmlndXJhdGlvbgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE5IEFwciAyMDA1CgoqIEZpeCBpbml0aWFsaXphdGlvbiBwcm9ibGVtIG9uIFRRTTUyMDAgd2l0aG91dCBTTTUwMQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEFwciAyMDA1CgoqIEFkZCBSVEMgc3VwcG9ydCBmb3IgU1RLNTJYWC4yMDAKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgSUZNIG8yZG50IGJvYXJkCgoqIEVuYWJsZSBQQ0kgb24gaG1pMTAwMSBib2FyZAoKKiBGaXggcmV0dXJuIHZhbHVlcyBvZiB0aGUgamZmczIgY29tbWFuZHMgbHMvZnNsb2FkL2ZzaW5mbywKICBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8sIGUuZy4sIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWxlIHdpdGgKICAiaWYgbHMgZm9vOyB0aGVuIHRoaXM7IGVsc2UgdGhhdDsgZmkiIGluIHRoZSBodXNoIHNoZWxsCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTYgQXVndXN0IDIwMDUKCiogQ29kaW5nIHN0eWxlIGNsZWFudXAKCiogQWRkIHN1cHBvcnQgZm9yIFNpbGljb24gVHVybmtleSBlWHByZXNzIFhUYyAobXBjODd4Lzg4eCkgYm9hcmQuCiAgUGF0Y2ggYnkgRGFuIE1hbGVrIGFuZCBQYW50ZWxpcyBBbnRvbmlvdSwgMTUgQXVnIDIwMDUKCiogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIG1hbGxvYyBpbiA0NDBneF9lbmV0LmMKICBQYXRjaCBieSBUcmF2aXMgQi4gU2F3eWVyLCAxOCBKdWwgMjAwNQoKKiBBZGQgU2FuZGJ1cnN0IE1ldHJvYm94IGFuZCBTYW5kYnVyc3QgS2FyZWYgYm9hcmQgc3VwcG9ydCBwYWNrYWdlcy4KICBTZWNvbmQgc2VyaWFsIHBvcnQgb24gNDQwR1ggbm93IGRlZmluZWQgYXMgYSBzeXN0ZW0gZGV2aWNlLgogIEFkZCAnU2hvcnQgRXRjaCcgY29kZSBmb3IgQ2ljYWRhIFBIWSB3aXRoaW4gNDQwZ3hfZW5ldC5jCiAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTIgSnVsIDIwMDUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1pbm9yIGNvZGUgY2xlYW51cAoKKiBBZGQgZm9yZ290dGVuIG5ldyBmaWxzIGZyb20gbGF0ZXN0IFZvaWNlQmx1ZSB1cGRhdGUKCiogTWFrZSBib290cmV0cnkgZmVhdHVyZSB3b3JrIHdpdGggaHVzaCBzaGVsbC4KICBDYXZlYXQ6IHRoaXMgY3VycmVudGx5ICpyZXF1aXJlcyogQ09ORklHX1JFU0VUX1RPX1JFVFJZIHRvIGJlIHNldCwgdG9vLgogIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE5IEp1bCAyMDA1CgoqIFVwZGF0ZSBIeW1vZCBCb2FyZCBEYXRhYmFzZSBQSFAgY29kZSBpbiAidG9vbHMiIGRpcmVjdG9yeQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDAxIEp1bCAyMDA1CgoqIE1ha2UgInRyIiBjb21tYW5kIHVzZSBQT1NJWCBjb21wbGlhbnQ7IGV4cG9ydCBIT1NUT1MgbWFrZSB2YXJpYWJsZQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIEZpeCBNdXJyYXkgSmVuc2VuJ3MgbWFpbCBhZGRyZXNzLgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIFByZXNlcnZlIFBIWV9CTUNSIGR1cmluZyBhIHNvZnQgcmVzZXQuCiAgUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMjQgSnVuIDIwMDUKCiogVm9pY2VCbHVlIHVwZGF0ZTogZWVwcm9tIHRvb2wgY2FuIGFsc28gc3RvcmUgZmlybXdhcmUgdmVyc2lvbiBub3cuCiAgZWVwcm9tLmJpbiBpcyBydW5hYmxlIGJ5IGp1bXBpbmcgYXQgbG9hZCBhZGRyZXNzLgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyMyBNYXkgMjAwNQoKKiBNb3ZlIHRoZSBBVDkxUk05MjAwREsgdG8gdGhlIEFSTSBTeXN0ZW1zIGxpc3QuCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKCiogRWxpbWluYXRlIGNhbGxzIG9mIEFSTSBsaWJnY2MuYSBoZWxwZXIgZnVuY3Rpb25zIF9kaXZzaTMgYW5kIF9tb2RzaTMKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyNiBBcHIgMjAwNQoKKiBtZWFzdXJlX2djbGsoKSBpcyBuZWVkZWQgd2hlbiBERUJVRyBpcyBlbmFibGVkCiAgUGF0Y2ggYnkgQnJ5YW4gTydEb25vZ2h1ZSwgMjUgQXByIDIwMDUKCiogQWRkIFVQRC1DaGVja3N1bSBjb2RlLCBmaXggcHJvYmxlbSBpbiBuZXQuYyAocmV0dXJuIGluc3RlYWQgb2YgYnJlYWspCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMTIgQXVnIDIwMDUKCiogZXNkIFBDSTQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEp1bCAyMDA1CgoqIGVzZCBXVUg0MDUgYW5kIERVNDA1IGJvYXJkIHVwZGF0ZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjcgSnVsIDIwMDUKCiogRml4IHByb2JsZW0gaW4gY21kX25hbmQuYyAob25seSB3aGVuIGRlZmluZWQgQ0ZHX05BTkRfU0tJUF9CQURfRE9UX0kpCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDQgTWF5IDIwMDUKCiogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAogIGJvYXJkcyAoYmF1ZHJhdGUsIGVudmlyb25tZW50Li4uKS4gRmxhc2ggZHJpdmVyIGZpeGVkLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKCiogQ2hhbmdlZCBBTUNDIEJ1YmluZ2EgKDQwNUVQKSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgMm5kIGV0aCBwb3J0CiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBBZGQgTkFORCBGTEFTSCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyA0NDBFUCBldmFsIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIEFFViBGSUZPIGJvYXJkLgogIE1pbm9yIGNvZGluZyBzdHlsZSBjbGVhbnVwLgoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIFNQSSBldmFsIGJvYXJkCgoqIEZpeCBDb21wYWN0Rmxhc2ggcHJvYmxlbSBvbiBITUkxMDAxIGJvYXJkCgoqIE1ha2UgbmV3ICJtdGRwYXJ0cyIgY29kZSBidWlsZCB3aXRoIG9sZGVyIGNvbXBpbGVycwogIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMDkgQXVnIDIwMDUKCiogQ2hhbmdlZCBDT05GSUdfNDQwX0dYLCBDT05GSUdfNDQwX0VQIGFuZCBDT05GSUdfNDQwX0dSIG9wdGlvbnMgdG8KICBDT05GSUdfNDRHWCwgQ09ORklHXzQ0MEVQIGFuZCBDT05GSUdfNDQwR1IgZm9yIGEgY29uc2lzdGVudCBkZXNpZ24KICB3aXRoIHRoZSA0MDUgZGVmaW5lcyBhbmQgdGhlIGxpbnV4IGtlcm5lbCBkZWZpbmVzLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDggQXVnIDIwMDUKCiogRml4IGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggb2xkZXIgR0NDIHZlcnNpb25zCgoqIEFkZCBjb21tb24gKHdpdGggTGludXgpIE1URCBwYXJ0aXRpb24gc2NoZW1lIGFuZCAibXRkcGFydHMiIGNvbW1hbmQKCiAgT2xkLCBvYnNvbGV0ZSBhbmQgZHVwbGljYXRlZCBjb2RlIHdhcyBjbGVhbmVkIHVwIGFuZCByZXBsYWNlIGJ5IHRoZQogIG5ldyBwYXJ0aXRpb25pbmcgbWV0aG9kLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGFwcHJvYWNoZXMgbm93OgoKICBUaGUgZmlyc3Qgb25lIGlzIHRvIGRlZmluZSBhIHNpbmdsZSwgc3RhdGljIHBhcnRpdGlvbjoKCiAgI3VuZGVmIENPTkZJR19KRkZTMl9DTURMSU5FCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfREVWICAgICAgICAgICAgICAgIm5vcjAiCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFICAgICAgICAgMHhGRkZGRkZGRgkvKiB1c2Ugd2hvbGUgZGV2aWNlICovCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFICAgICAgICAgMHgwMDEwMDAwMAkvKiB1c2UgMU1CICovCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQgICAgICAgMHgwMDAwMDAwMAoKICBUaGUgc2Vjb25kIG1ldGhvZCB1c2VzIHRoZSBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBkeW5hbWljCiAgcGFydGl0aW9uaW5nOgoKICAvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLwogICNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKICAjZGVmaW5lIE1URElEU19ERUZBVUxUICAgICAgICAgIm5vcjE9enVtYS0xLG5vcjI9enVtYS0yIgogICNkZWZpbmUgTVREUEFSVFNfREVGQVVMVCAgICAgICAibXRkcGFydHM9enVtYS0xOi0oamZmczIpLHp1bWEtMjotKHVzZXIpIgoKICBDb21tYW5kIGxpbmUgb2YgY291cnNlIHByb2R1Y2VzIGJpZ2dlciBpbWFnZXMsIGFuZCBtYXkgYmUgaW5hcHByb3ByaWF0ZQogIGZvciBzb21lIHRhcmdldHMsIHNvIGJ5IGRlZmF1bHQgaXQncyBvZmYuCgoqIEZpeCBidWlsZCBwcm9ibGVtcyBmb3IgUE04NTYgQm9hcmQKCiogRml4IHNpZ24gZXh0ZW5zaW9uIGJ1ZyBpbiAnZnBnYSBsb2FkYicgY29tbWFuZDsKICBtYWtlICdmcGdhIGxvYWRiJyBhbHdheXMgcHJpbnQgdGhlIGZpbGUgaGVhZGVyIGluZm8KICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTEgSmFuIDIwMDUKCiogRml4IGVycm9ycyB0aGF0IG9jY3VyIHdoZW4gYWNjZXNzaW5nIFN5c3RlbUFDRSBDRgogIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwOSBKYW4gMjAwNQoKKiBEb2N1bWVudCBzd2l0Y2hpbmcgYmV0d2VlbiBVLUJvb3QgYW5kIFBsYW5ldENvcmUgb24gUlBYbGl0ZQogIGJ5IFNhbSBTb25nLCAyNCBEZWMgMjAwNAoKKiBGaXggUG93ZXJRVUlDQyBJSSBtYXNrIGRldGVjdGlvbi4KICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAyMCBEZWMgMjAwNAoKKiBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5JT1MgREsxQzIwIGJvYXJkCiAgUGF0Y2ggYnkgU2hsb21vIEt1dCwgMTMgRGVjIDIwMDQKCiogQWRkIHN1cHBvcnQgZm9yIGVwODI0OCBib2FyZAogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEyIERlYyAyMDA0CgogIE1pbm9yIGNvZGUgY2xlYW51cC4KCiogRml4IGJhdWRyYXRlIHNldHRpbmcgZm9yIEtHREIgb24gTVBDODI2MAogIFBhdGNoIGJ5IEhvSmluLCAxMSBEZWMgMjAwNAoKKiBGaXggJ21paSBoZWxwJyB0ZXh0IGZvcm1hdHRpbmcKICBQYXRjaCBieSBDb3J5IFR1c2FyLCAxMCBEZWMgMjAwNAoKKiBGaXggcmV0dXJuIGNvZGUgb2YgTkZTIGNvbW1hbmQKICBQYXRjaCBieSBIaXJvc2hpIEl0bywgMTEgRGVjIDIwMDQKCiogRml4IHR5cG8KCiogRml4IGNvbXBpbGVyIHdhcm5pbmdzIGluIGNwdS9wcGM0eHgvdXNiZGV2LmMKICBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAwNCBBdWcgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gUFBDNDQwRVAgZXZhbCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDQgQXVnIDIwMDUKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyCiAgRml4IHN0eWxlIGlzc3VlcyBwcmltYXJpbHkgaW4gODV4eCBhbmQgODN4eCBib2FyZHMuCiAgICAtIEMrKyBjb21tZW50cwogICAgLSBUcmFpbGluZyB3aGl0ZSBzcGFjZQogICAgLSBJbmRlbnRhdGlvbiBub3QgYnkgVEFCCiAgICAtIEV4Y2Vzc2l2ZSBhbW91bnQgb2YgZW1wdHkgbGluZXMKICAgIC0gVHJhaWxpbmcgZW1wdHkgbGluZXMKCiogUGF0Y2ggYnkgUm9uIEFsZGVyLCAxMSBKdWwgMjAwNQogICAgQWRkIFhpYW5naHVhIFhpYW8gYW5kIEx1bnNoZW5nIFdhbmcncyBzdXBwb3J0IGZvciB0aGUKICAgIEdEQSBNUEM4NTQwIEVWQUwgYm9hcmQuCgoqIFBhdGNoIGJ5IEVyYW4gTGliZXJ0eQogIEFkZCBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzgzNDlBRFMgYm9hcmQuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjUgSnVsIDIwMDUKICBNb3ZlIHRoZSBUU0VDIGRyaXZlciBvdXQgb2YgY3B1L21wYzg1eHggYXMgaXQgd2lsbCBiZSBzaGFyZWQKICBieSB0aGUgdXBjb21pbmcgbXBjODN4eCBmYW1pbHkgYXMgd2VsbC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwNSBNYXkgMjAwNQogIEltcGxlbWVudGVkIHN1cHBvcnQgZm9yIE1QQzg1NDhDRFMgYm9hcmQuCiAgQWRkZWQgRERSIElJIHN1cHBvcnQgYmFzZWQgb24gU1BEIHZhbHVlcyBmb3IgTVBDODV4eCBib2FyZHMuCiAgVGhpcyByb2xsLXVwIHBhdGNoIGFsc28gaW5jbHVkZXMgYnVnZmllcyBmb3IgdGhlIHByZXZpb3VzbHkKICBwdWJsaXNoZWQgcGF0Y2hlczoKICAgIEREUklJIENQTywgcHJlIGVUU0VDLCA4NTQ4IExCSVUsIEFuZHkncyBUU0VDLCBlVFNFQyAzJjQgSS9PCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTAgRmViIDIwMDUKICBBZGQgY29uZmlnIG9wdGlvbiBDT05GSUdfSEFTX0ZFQyBjYWxsaW5nIG91dCA4NTQwIEZFQyBmZWF0dXJlcy4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCBLdW1hciBHYWxhLCAwOCBGZWIgMjAwNQogIEZvciBNUEM4NXh4Q0RTOgogICAgQWRkcyBSZWxheGVkIFRpbWluZyBUUkxYIGJpdCB0byBGTEFTSCBPUnggcmVncyB0byBhbGxvdwogICAgZm9yIGZhc3RlciBmbGFzaCBwYXJ0cy4KICAgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBCUi9PUiBmb3IgRkxBU0guCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciAwOCBGZWIgMjAwNQogIERldGVybWluZSBMMiBDYWNoZSBzaXplIGR5bmFtaWNhbGx5IG9uIDg1WFggYm9hcmRzLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEgMDggRmViIDIwMDUKICAtIENvbnZlcnQgdGhlIENQTTIgYmFzZWQgZnVuY3Rpb25hbGl0eSB0byB1c2UgbmV3IENPTkZJR19DUE0yCiAgICBvcHRpb24gcmF0aGVyIHRoYW4gYSBteXJpYWQgb2YgQ09ORklHX01QQzg1NjAtbGlrZSB2YXJpYW50cy4KICAgIEFwcGxpZXMgdG8gTVBDODV4eCBhbmQgTVBDODI2MCBib2FyZHMsIGluY2x1ZGVzIHN0eGdwMyBhbmQgc2JjODU2MC4KICAgIEVsaW1pbmF0ZXMgdGhlIENPTkZJR19NUEM4NTYwIG9wdGlvbiBlbnRpcmVseS4gIERpc3RyaWJ1dGVzIHRoZQogICAgbmV3IENPTkZJR19DUE0yIG9wdGlvbiB0byBlYWNoIDgyNjAgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NiBib2FyZAogIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKCiogTWlub3IgZml4ZXMgdG8gUE04NTQgYm9hcmQKICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDAzIEF1ZyAyMDA1CgoqIEFkanVzdCBjb25maWd1cmF0aW9uIG9mIFhFTklBWCBib2FyZAogIChjaGlwIHNlbGVjdCBhbmQgR1BJTyByZXF1aXJlZCBmb3IgVVNCIG9wZXJhdGlvbikKCiogRml4IHR5cG9zIGluIGNwdS84NXh4L3N0YXJ0LlMgd2hpY2ggY2F1c2VkIERhdGFUTEIgZXhjZXB0aW9uIHRvIGJlCiAgcm91dGVkIHRvIHRoZSBXYXRjaGRvZyBoYW5kbGVyCiAgUGF0Y2ggYnkgRXVnZW5lIFN1cm92ZWdpbiwgMTggSnVuIDIwMDUKCiogKHJlKWVuYWJsZWQgc2NzaSBjb21tYW5kcyBkb19zY3NpKCkgYW5kIGRvX3Njc2lib290KCkKICBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDYgRGVjIDIwMDQKCiogRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIFRGVFAgLyBORlMgZGVmYXVsdCBmaWxlbmFtZXMKICBQYXRjaCBieSBIaXJvc2hpIEl0bywgMDYgRGVjIDIwMDQKCiogSWdub3JlIGJyb2FkY2FzdCBzdGF0dXMgYml0IGluIHJlY2VpdmVkIGZyYW1lcyBpbiA4MjYwIEZDQyBldGhlcm5ldAogIGxvb3BiYWNrIHRlc3QgY29kZQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE4IEp1bCAyMDA1CgoqIEZpeCB0eXBvIGluIG1rY29uZmlnIHNjcmlwdCAodXNlZCA9PSBpbnN0ZWFkIG9mID0pCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKCiogQ2xlYW51cCBidWlsZCBwcm9ibGVtcyBvbiA2NCBiaXQgYnVpbGQgaG9zdHMKCiogVXBkYXRlIE1BSU5UQUlORVJTIGZpbGUKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBBdWcgMjAwNToKICAtIE1ham9yIGNsZWFudXAgZm9yIEFNQ0MgZXZhbCBib2FyZHMgV2FsbnV0LCBCdWJpbmdhLCBFYm9ueSwgT2NvdGVhCiAgICAoZm9ybWVyIElCTSBldmFsIGJvYXJkKS4gUGxlYXNlIHNlZSAiZG9jL1JFQURNRS5BTUNDLWV2YWwtYm9hcmRzLWNsZWFudXAiCiAgICBmb3IgZGV0YWlscy4KICAtIFN5Y2Ftb3JlIChQUEM0MDVHUHIpIGV2YWwgYm9hcmQgYWRkZWQgKFdhbG51dCBwb3J0IGlzIGV4dGVuZGVkCiAgICB0byBydW4gb24gYm90aCA0MDVHUCBhbmQgNDA1R1ByIGV2YWwgYm9hcmRzKS4KCiogUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMjcgSnVsIDIwMDU6CiAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBQUEM0NDBFUC9HUi4KICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFlvc2VtaXRlIFBQQzQ0MEVQIGV2YWwgYm9hcmQuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBZZWxsb3dzdG9uZSBQUEM0NDBHUiBldmFsIGJvYXJkLgoKKiBNaW5vciBmaXhlcyBmb3IgUFBDaGFtZWxlb24gQm9hcmQ6CiAgLSBmaXggYWxpZ25tZW50IG9mIE5BTkQgc2l6ZQogIC0gbWFrZSBjb2RlIGRvIHdoYXQgdGhlIGNvbW1lbnQgc2F5cwoKKiBJbXBsZW1lbnQgaC93IHNlY3RvciBwcm90ZWN0aW9uIHN0YXR1cyBzeW5jaHJvbml6YXRpb24gYXQgYm9vdC4KICBUaGUgY29kZSBpcyBwcm92aWRlZCBmb3IsIGFuZCB3YXMgdGVzdGVkIG9uLCB0aGUgWXVrb24vQWxhc2thCiAgYW5kIFBNNTIwIGJvYXJkcyBvbmx5LgoKICBBIGJ1ZyBpbiBmbGFzaF9yZWFsX3Byb3RlY3QoKSBmb3IgdGhlIFl1a29uIGJvYXJkIHdhcyBmaXhlZCBieQogIGFkZGluZyBhIGZ1bmN0aW9uIHRoYXQgdGVsbHMgaWYgdHdvIGJhbmtzIGFyZSBvbiBvbmUgZmxhc2ggY2hpcC4KCiogRml4IHN5c21vbiBQT1NUIHByb2JsZW06IGNoZWNrIEkyQyBlcnJvciBjb2RlcwogIFRoaXMgZml4ZXMgYSBwcm9ibGVtIG9mIGRpc3BsYXlpbmcgYm9ndXMgdm9sdGFnZXMgd2hlbiB0aGUgdm9sdGFnZXMKICBhcmUgc28gbG93IHRoYXQgdGhlIEkyQyBkZXZpY2VzIHN0YXJ0IGZhaWxpbmcgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlCiAgc3lzdGVtIGtlZXBzIHJ1bm5pbmcuCgoqIFBhdGNoIGJ5IENlZHJpYyBWaW5jZW50LCA2IEp1bCAyMDA1OgogIEZpeCBDRkdfQ01EX1NFVEdFVERDUiBoYW5kbGluZyBpbiAiY29tbW9uL2NtZF9kY3IuYyIKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyMCBKdWwgMjAwNToKICBBZGQgbWlzc2luZyBQQ0kgSU8gcG9ydCBkZWZpbml0aW9ucy4KCiogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgoKKiBBZGp1c3QgcHJpbnRlZCBib2FyZCBJRCBmb3IgTFdNT04gYm9hcmQuCgoqIEZpeCBsb3ctbGV2ZWwgT0hDSSB0cmFuc2ZlcnMgZm9yIEFSTTkyMHQgYW5kIE1QQzV4eHgKCiogQWRkIG5ldyBhcmd1bWVudCBmb3JtYXQgZm9yIGZsYXNoIGNvbW1hbmRzIHRvIGFsbG93IGZvciB1c2FnZSBsaWtlCiAgImVyYXNlICQoYWRkcikgKyQoZmlsZXNpemUpIiwgaS4gZS4gYSBzaXplIGFyZ3VtZW50IGNhbiBiZSB1c2VkIGFuZAogIFUtQm9vdCB3aWxsIGF1dG9tYXRpY2lhbGx5IGZpbmQgdGhlIGVuZCBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWN0b3IuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNSBKdWwgMjAwNToKICBVcGRhdGUgdWMxMDAgYm9hcmQgUEhZIHNldHVwCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMSBKdWwgMjAwNToKICBGaXggUEhZIGFkZHJlc3MgZm9yIENBVGNlbnRlciBib2FyZCAobm93IGNvcnJlY3QhKQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMwIEp1biAyMDA1OgogIEZpeCBQSFkgYWRkcmVzc2VzIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwogIENoYW5nZSBNQUlOVEFJTkVSIGZvciBtb3N0IGVzZCBib2FyZHMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMzAgSnVuIDIwMDU6CiAgRml4IExDRCBsb2dvIGZvciBsd21vbiBib2FyZCB3aGljaCBnb3QgbG9zdCBpbiB0aGUgbWVyZ2Ugb2YgOHh4IGFuZCBQWEEgTENEIGNvZGUKCiogRml4IGJhdWRyYXRlIGNhbGN1bGF0aW9uIHByb2JsZW0gb24gTVBDNTIwMCBzeXN0ZW1zCgoqIEFkZCBFRVBST00gYW5kIFJUQyBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIwIEp1biAyMDA1OgogIEZpeCBpbml0aWFsaXphdGlvbiBvZiBsb3cgYWN0aXZlIEdQSU8gcGlucyBvbiBpbmthNHgwIGJvYXJkCgoqIEVuYWJsZSByZWR1bmRhbnQgZW52aXJvbm1lbnQsIGRpc2FibGUgSFcgZmxhc2ggcHJvdGVjdGlvbiBvZgogIEhNSTEwMDEgYm9hcmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTAgSnVuIDIwMDU6CiAgSW5pdGlhbGl6ZSBhbGxvY2F0ZWQgZGV2IGFuZCBwcml2YXRlIGh3IHN0cnVjdHVyZXMKICBhZnRlciB0aGVpciByZXNwZWN0aXZlIGFsbG9jYXRpb24gaW4gNDQwZ3hfZW5ldC5jCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIEp1biAyMDA1OgogIEZpeCBieXRlb3JkZXIgcHJvYmxlbXMgd2l0aCBzZWNvbmQgYXJndW1lbnQgb2YgImJvb3RtIiB3aXRoCiAgc3RhbmRhbG9uZSBpbWFnZXM7CgoqIEFkZCBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkCgoqIERpc2FibGUgImRhdGUiIGFuZCAic250cCIgY29tbWFuZHMgb24gVFFNODY2TQoKKiBGaXggd2F0Y2hkb2cgcmVzZXQgcHJvYmxlbXMgb24gTFdNT04gYm9hcmQKCiogUGF0Y2ggYnkgSnVlcmdlbiBTZWxlbnQsIDE3IE1heSAyMDA1OgogIEFkZCBzdXBwb3J0IGZvciBGdW5rd2VyayBWb1ZQTiBnYXRld2F5IG1vZHVsZS4KCiogQ2xlYW51cCBkZWJ1ZyBjb2RlIGZvciBNUEM4MjIwIEZFQyBkcml2ZXIKCiogRXh0ZW5kIGJ1cnN0IG1vZGUgUkFNIHRlc3QgcHJvZ3JhbSB0byB0YWtlIGEgbG9vcCBjb3VudAogICgwID0gaW5maW5pdGUpCgoqIFVzZSBDT05GSUdfRFJJVkVSX0tTODY5NUVUSCB0byBlbmFibGUgS1M4Njk1IGV0aGVybmV0IGRyaXZlciBvbgogIHRob3NlIGJvYXJkcyB0aGF0IHVzZSBpdC4KCiogUGF0Y2hlcyBieSBHcmVnIFVuZ2VyZXIsIDE5IE1heSAyMDA1OgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBLUzg2OTVQIChBUk0gOTIyIGJhc2VkKSBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgT3BlbkdlYXIgQ000MDA4LCBDTTQxMTYgYW5kIENNNDE0OCBib2FyZHMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTkgTWF5IDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIENPTkZJR19TRVJJQUxfVEFHIG9uIEFSTSBib2FyZHMKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBTb3JjZXJ5IGJvYXJkLgogIENvZGUgY2xlYW51cCAoZXNwZWNpYWxseSBTb3JjZXJ5IC8gQWxhc2thIC8gWXVrb24gc2VyaWFsIGRyaXZlcikuCgoqIEZpeCBjb21waWxlIHByb2JsZW1zIGNhdXNlZCBieSBuZXcgYnVyc3QgbW9kZSBTRFJBTSB0ZXN0OwogIG1ha2UgcG9ydCBwaW5zIHRvIHRyaWdnZXIgbG9naWMgYW5hbHl6ZXIgY29uZmlndXJhYmxlCgoqIEZpeCB0aW1lciBoYW5kbGluZyBvbiBNUEM4NXh4IHN5c3RlbXMKCiogRml4IGRlYnVnIGNvZGUgaW4gb21hcDU5MTJvc2sgZmxhc2ggZHJpdmVyCgoqIEFkZCBzdXBwb3J0IGZvciBNUEM4MjQ3IGJhc2VkICJJRFM4MjQ3IiBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIDIgeCBUU0VDIGludGVyZmFjZXMgb24gdGhlIFRRTTg1NDAgYm9hcmQuCgoqIE9uIExXTU9OIHdlIG11c3QgdXNlIHRoZSB3YXRjaGRvZyB0byByZXNldCB0aGUgYm9hcmQgYXMgdGhlIENQVQogIGdlbmVyZWF0ZWQgSFJFU0VUIHB1bHNlIGlzIHRvbyBzaG9ydCB0byByZXNldCB0aGUgZXh0ZXJuYWwKICBjaXJjdWl0cnkuCgoqIEFkZCB0ZXN0IHRvb2wgdG8gZXhlcmNpc2UgU0RSQU0gYWNjZXNzZXMgaW4gYnVyc3QgbW9kZQogIChhcyBzdGFuZGFsb25lIHByb2dyYW0sIE1QQzh4eC9Qb3dlclBDIG9ubHkpCgoqIEluY3JlYXNlIENGR19NT05JVE9SX0xFTiBmb3IgUmF0dGxlciBib2FyZCB0byBtYXRjaCBhY3R1YWwgY29kZQogIHNpemUuCgoqIE1ham9yIHVwYXRlIG9mIEpGRlMyIGNvZGU7IG5vdyBpbiBzeW5jIHdpdGggc25hcHNob3Qgb2YgTVREIENWUyBvZgogIE1hcmNoIDEzLCAyMDA1KTsgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIENPTkZJR19KRkZTMl9MWk9fTFpBUkkKICBhZGRlZCB0byBzdXBwb3J0IExaTyBhbmQgTFpBUkkgY29tcHJlc3Npb24gbW9kZXMgKHVuZGVmaW5lZCBieQogIGRlZmF1bHQpLgoKKiBGaXggcHJvYmxlbSB3aXRoIHN5bWJvbGljIGxpbmtzIGluIEpGRlMyIGNvZGUuCgoqIFVzZSBsaW5rZXIgQVNTRVJUIHN0YXRlbWVudCB0byBwcmV2ZW50IHVuZGV0ZWN0ZWQgb3ZlcmxhcHBpbmcgb2YKICBzZWN0aW9ucyBvbiBQUENoYW1lbGVvbiBib2FyZDsgb3RoZXIgYm9hcmRzIG1pZ2h0IHVzZSB0aGlzLCB0b28uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgTWF5IDIwMDU6CiAgVXBkYXRlIGZvciBQM0c0CiAgRml4IHByb2JsZW1zIGluIGNtZF91bml2ZXJzZS5jCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwMyBNYXkgMjAwNToKICBBZGRlZCBtaXNzaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIGNtZF9uYW5kLmMKICBNb2RpZmllZCBDRkdfUENJX1BUTTFNUyBpbiBjb25maWdzL1BMVTQwNS5oIHRvIG1hcCAxMjhNQiByYW0KCiogRml4IElOS0E0eDA6IHVzZSBDUzEgYXMgZ3Bpb193a3VwXzYgb3V0cHV0CgoqIEZpeCBidWcgaW4gdGhlIFNEUkFNIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGNhbm1iLCBJY2VDdWJlIGFuZAogIFBNNTIwIGJvYXJkcy4KICBGaXggUEhZIGFkZHJlc3MgZm9yIGNhbm1iIGJvYXJkLgoKKiBDbGVhbnVwIHNlcmlhbCBjb25zb2xlIGJhdWRyYXRlIGNhbGN1bGF0aW9uIG9uIEFUOTFSTTkyMDA7CiAgZ2V0IHJpZCBvZiBvYnNvbGV0ZSBDRkdfQVQ5MUNfQlJHUl9ESVZJU09SIGRlZmluaXRpb24KCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDE4IEFwciAyMDA1OgogIE1ha2UgUENJIHRhcmdldCBhZGRyZXNzIHNwYWNlcyBvbiBQTUM0MDUgYW5kIENQQ0k0MDUgYm9hcmRzCiAgY29uZmlndXJhYmxlIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKCiogQXV0by1zaXplIFJBTSBvbiBjYW5tYiBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIGNhbm1iIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgQXByIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYXBjNDA1CgoqIEZpeGVzIGZvciBUUU04NTYwIGJvYXJkOgogIC0gZml4IGNsb2NrIHJhdGVzCiAgLSByZW1vdmUgZGVidWcgbWVzc2FnZXMKICAtIGZpeCBmbGFzaCBzZWN0b3IgcHJvdGVjdGlvbgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNyBBcHIgMjAwNToKICBBZGQgaTJjX3JlZ193cml0ZSgpIGFuZCBpMmNfcmVnX3dyaXRlKCkgZm9yIGF0OTFybTkyMDAgSTJDCgoqIFBhdGNoZXMgYnkgU3RldmVuIFNjaG9seiwgMDcgQXByIDIwMDU6CiAgRml4IGNvbXBpbGVyIHdhcm5pbmcgaW4gYWx0ZXJhLmMKICBGaXggd2FybmluZyBpbiBjcHUvYXJtOTIwdC9hdDkxcm05MjAwL2kyYy5jCgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNiBBcHIgMjAwNToKICBGaXggdm9pY2VibHVlIGNvbmZpZ3VyYXRpb24uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDYgQXByIDIwMDU6CiAgVXBkYXRlcyBmb3IgT0NPVEVBIGJvYXJkOgogIC0gQ2hhbmdlZCBVLUJvb3Qgc2l6ZSBmcm9tIDUxMmtCeXRlIHRvIDI1NmtCeXRlCiAgLSBGaXhlZCBmbGFzaCBkcml2ZXIgdG8gc3VwcG9ydCBib290IGZyb20gc29sZGVyZWQgdXNlciBmbGFzaAogIC0gQWRkZWQgUkVBRE1FIGZvciBzd2l0Y2ggZnJvbSBQSUJTIGZpcm13YXJlIHRvIFUtQm9vdAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwNSBBcHIgMjAwNToKICAtIENoYW5nZSB0aW1lciBmcmVxdWVuY3kgZm9yIHBwYyA0NDAgZnJvbSAxMCBtcyB0byAxIG1zLgogICAgUHJvYmxlbSBmb3VuZCBieSBBbmRyZXcgV296bmlhay4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDYgQXByIDIwMDU6CiAgLSBjcmVhdGluZyBTb0Mgc3ViZGlyIGZvciBBdG1lbCBBVDkxUk05MjAwIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKICAtIG1vdmluZyBjb2RlIG91dCBvZiBjcHUvYXQ5MXJtOTIwMCBpbnRvIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKCiogUGF0Y2hlcyBieSBSb2JlcnQgV2hhbGV5LCAyOSBOb3YgMjAwNDoKICAtIHVwZGF0ZSB0aGUgcHhhLXJlZ3MuaCBmaWxlIGZvciBQWEEyN3ggY2hpcHMKICAtIGFkZCBQWEEyN3ggYmFzZWQgQURTVklYIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgTU1DIG9uIFBYQTI3eCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IEFuZHJldyBFLiBNaWxlc2tpLCAyOCBOb3YgMjAwNDoKICBGaXggUFBDNHh4IFNQRCBTRFJBTSBkZXRlY3Rpb24gYnVnCgoqIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAyNiBOb3YgMjAwNDoKICBGaXggbG9naWMgb2YgInRlc3QgLXoiIGFuZCAidGVzdCAtbiIgY29tbWFuZHMKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgogIEFkZCBzdXBwb3J0IGZvciBWb2ljZUJsdWUgYm9hcmQuCgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNSBBcHIgMjAwNToKICBGaXggbmV0Ym9vdF9jb21tb24oKSBwcm90b3R5cGVzLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKICBVc2UgaS5NWCB3YXRjaGRvZyB0aW1lciBmb3IgcmVzZXRfY3B1KCkKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDUgQXByIDIwMDU6CiAgTW92ZSByZXNldF9jcHUoKSBvdXQgb2YgY3B1L2FybTkyMHQvc3RhcnQuUyBpbnRvIHRoZSBTb0Mgc3BlY2lmaWMKICBzdWJkaXJlY3RvcmllcyBjcHUvYXJtOTIwdC9pbXgvIGFuZCBjcHUvYXJtOTIwdC9zM2MyNHgwLwogIChub3cgaW4gaW50ZXJ1cHRzLmMpCgoqIEFkZCBzdXBwb3J0IGZvciBNUEM4MjIwIGJhc2VkICJzb3JjZXJ5IiBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NjAgYm9hcmQuCgoqIEFkZCBGRUMgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZC4KICBJbnRlcmZhY2VzIGFyZSBuYW1lZCBhcyBmb2xsb3dzOiAiRU5FVDEiIC0gVFNFQzIsICJFTkVUMiIgLSBGRUMKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDQgQXByIDIwMDU6CiAgVXBkYXRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgQ01DX1BVMiBib2FyZC4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgQXByIDIwMDU6CiAgLSByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gQ09ORklHX0lOSVRfQ1JJVElDQUwgZm9yIEFSTSBiYXNlZCBib2FyZHMKICAtIGludHJvZHVjZSB0d28gbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnN0ZWFkOgogICAgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBhbmQgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgQXByIDIwMDU6CiAgTWFrZSBzdXJlIHRoYXQgTURJTyBjbG9jayBkb2VzIG5vdCBleGNlZWQgMi41IE1IeiBvbiBBVDkxCgoqIEZpeCB0aW1lciBjb2RlIGZvciBBUk0gc3lzdGVtczogbWFrZSBzdXJlIHRoYXQgdWRlbGF5KCkgZG9lcyBub3QKICByZXNldCB0aW1lcnMgc28gaXQncyBzYXZlIHRvIHVzZSB1ZGVsYXkoKSBpbiB0aW1lb3V0IGNvZGUuCgoqIFBhdGNoIGJ5IE1hdGhpYXMgS/xzdGVyLCAyMyBOb3YgMjAwNDoKICBhZGQgdWRlbGF5IHN1cHBvcnQgZm9yIHRoZSBtY2Y1MjgyIGNwdQoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNiBOb3ZlbWJlciAyMDA0OgogIGZpeCBpbmNvcnJlY3Qgb25ib2FyZCBYaWxpbnggQ1BMRCBiYXNlIGFkZHJlc3MKCiogUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAwOCBOb3YgMjAwNDoKICAtIEFkZCBsb3ctYm9vdCBvcHRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQgKGlmIGxvd2Jvb3QgaXMgc2VsZWN0ZWQsCiAgICB0aGUganVtcGVyIGZvciB0aGUgSFJDVyBzb3VyY2Ugc2hvdWxkIHNlbGVjdCBmbGFzaC4gSWYgbG93Ym9vdCBpcwogICAgbm90IHNlbGVjdGVkLCB0aGUganVtcGVyIGZvciB0aGUgSFJDVyBzb3VyY2Ugc2hvdWxkIHNlbGVjdCB0aGUKICAgIEJDU1IuCiAgLSBjaGFuZ2UgZGVmYXVsdCBsb2FkIGJhc2UgYWRkcmVzcyB0byAweDAwNDAwMDAwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA4IE5vdiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBBbmFsb2d1ZSAmIE1pY3JvIFJhdHRsZXIgYm9hcmRzLgogIFRlc3RlZCBvbiBSYXR0bGVyODI0OC4KCiogUGF0Y2ggYnkgQW5kcmUgUmVuYXVkLCAwOCBOb3YgMjAwNDoKICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBpbiBjb21tb24vbGNkLmMKCiogUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDA1IE5vdiAyMDAzOgogIEVuYWJsZSBhbGwgNCBQQ01CUlcgYnVmZmVycyBmb3IgdGhlIE1QQzgyNDUgcHJvY2Vzc29yIHNpbmNlIHRoZSBDUFUKICBidWcgb25seSBhZmZlY3RzIHRoZSBYUEM4MjQ1IHByb2Nlc3NvcnMKCiogUGF0Y2hlcyBieSBKb3NlZiBXYWduZXIsIDI5IE9jdCAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQVTg3IGJvYXJkCiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04NTQgYm9hcmQKCiogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMDIgTm92IDIwMDQ6CiAgQWRkIDE2LWJpdCBOQU5EIHN1cHBvcnQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMSBOb3YgMjAwNDoKICBBZGQgbWlzc2luZyBOSU9TL05JT1MyIHN1cHBvcnQgZm9yICJpbWluZm8iIGNvbW1hbmQKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjkgT2N0IDIwMDQ6CiAgQWRkIG1pc3NpbmcgTklPUy9OSU9TMiBzdXBwb3J0IGZvciAibWtpbWFnZSIgdG9vbC4KCiogUGF0Y2ggYnkgRGF2aWQgQWRhaXIsIDI3IE9jdCAyMDA0OgogIEFkZCBtaXNzaW5nIDQ0MEdYIFNEUkFNIENvbnRyb2xsZXIgcmVzZXQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgT2N0IDIwMDQ6CiAgRGVjbGFyZSByZXNldF9jcHUoKSBpbiBpbmNsdWRlL2NvbW1vbi5oIGluc3RlYWQgbG9jYWxseQoKKiBQYXRjaCBieSBZdXNkaSBTYW50b3NvLCAyMiBPY3QgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBISURERU5fRFJBR09OIGJvYXJkCiAgLSBmaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gZHJpdmVyL3J0bDE4MzkuYwoKKiBQYXRjaCBieSBBbGxlbiBDdXJ0aXMsIDIxIE9jdCAyMDA0OgogIHN1cHBvcnQgbXVsdGlwbGUgc2VyaWFsIHBvcnRzCgoqIFBhdGNoIGJ5IFJpY2hhcmQgS2xpbmdsZXIsIDAzIEFwciAyMDA1OgogIEFkZCBjYWxsIHRvIGV0aF9oYWx0KCkgaW4gbmV0L25ldC5jIHdoZW4gY2FsbGVkIGZ1bmN0aW9ucyBmYWlsCiAgYWZ0ZXIgZXRoX2luaXQoKSBoYXMgYmVlbiBjYWxsZWQuCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAzIEFwcmlsIDIwMDU6CiAgLSBVcGRhdGUgUkVBRE1FLk5ldGNvbnNvbGUKICAtIFVwZGF0ZSBSRUFETUUKCiogUHJlcGFyZSBmb3IgU29DIHJld29yayBvZiBBUk0gY29kZToKICAtIHJlbmFtZSBDT05GSUdfQk9PVEJJTkZVTkMgaW50byAgQ09ORklHX0lOSVRfQ1JJVElDQUwKICAtIHJlbmFtZSBtZW1zZXR1cCBpbnRvIGxvd2xldmVsX2luaXQgKGZ1bmN0aW9uIG5hbWUgYW5kIHNvdXJjZSBmaWxlcykKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMyBBcHIgMjAwNToKICAtIGNyZWF0ZSBTb0Mgc3BlY2lmaWMgZGlyZWN0b3JpZXMgaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14IGFuZAogICAgaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MAoKKiBGaXggcHJvYmxlbXMgd2l0aCBTTlRQIHN1cHBvcnQ7CiAgZW5hYmxlIFNOVFAgc3VwcG9ydCBpbiBzb21lIGJvYXJkcy4KCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAwMSBBcHIgMjAwNToKICAtIEZpeCBmbGFzaCBlcmFzZSB0aW1lb3V0IG9uIENNQ19QVTIKICAtIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBDTUNfUFUyIGFuZCBDTUNfQkFTSUMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgTWFyY2ggMjAwNToKICBmaXggY2FjaGUgZW5hYmxpbmcgZm9yIEFUOTFSTTkyMDAKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMzAgTWFyIDIwMDU6CiAgYWRkIFNOVFAgc3VwcG9ydCBhbmQgZXhwYW5kIHRpbWUgc2VydmVyIGFuZCB0aW1lIG9mZnNldCBmaWVsZHMgb2YKICBESENQIHN1cHBvcnQuIFNlZSBkb2MvUkVBRE1FLlNOVFAKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6CiAgRml4IGJ1ZyBpbiBhdDkxcm05MjAgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIERlYyAyMDA0OgogIFJlbW92ZSBkdXBsaWNhdGVkIGNvZGUgYnkgbWVyZ2luZyBtZW1zZXR1cC5TIGZpbGVzIGZvcgogIGF0OTFybTkyMDAgYm9hcmRzIGludG8gb25lIGNwdS9hdDkxcm05MjAwL2xvd2xldmVsLlMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMzEgTWFyIDIwMDU6CiAgQ2xlYW51cCBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiBvdmVyd3JpdGVfY29uc29sZSgpCgoqIFVwZGF0ZSBUUU01MjAwIGNvbmZpZ3VyYXRpb247CiAgcHJlcGFyZSBmb3IgUmV2LiAyMDAgc3RhcnRlciBraXQgYm9hcmRzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgT2N0IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE5pb3MtSUkgRVBDUyBDb250cm9sbGVyIGNvcmUuCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjAgT2N0IDIwMDQ6CiAgTmlvcy1JSSBjbGVhbnVwczoKICAtIEFkZCBzeXNpZCBjb21tYW5kIChOaW9zLUlJIG9ubHkpLgogIC0gTG9jYXRlIGRlZmF1bHQgZXhjZXB0aW9uIHRyYW1wb2xpbmUgYXQgcHJvcGVyIG9mZnNldC4KICAtIEltcGxlbWVudCBJL08gcm91dGluZXMgKHJlYWRiLCB3cml0ZWIsIGV0YykKICAtIEltcGxlbWVudCBkb19ib290bV9saW51eAoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDIyIE1hciAyMDA1OgogIC0gdXNlIFRRTTUyMDBfYXV0byBhcyBNQUtFQUxMIHRhcmdldCBmb3IgVFFNNTIwMCBzeXN0ZW1zCiAgLSBhZGQgc3VwcG9ydCBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlcgogIC0gYWRkIHN1cHBvcnQgZm9yIGdyYXBoaWMgY29uc29sZSBvbiBUUU01MjAwCiAgLSBhZGQgc3VwcG9ydCBmb3IgVFFNNTIwMCBSZXYgMjAwCiAgLSBjbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCgoqIFBhdGNoIGJ5IE1hbmZyZWQgQmFyYWwsIDE3IE1hciAyMDA1OgogIEZpeCB0eXBvCgoqIEZpeCBSVEMgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb24gYm9hcmQKCiogQ2xlYW51cCwgZml4IHR5cG8gaW4gaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IE1hciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIGF1dG9fdXBkYXRlIGFuZCBoaDQwNSBib2FyZAoKKiBBZGFwdCBmb3IgVS1Cb290IGltYWdlIHNpemUgKG5ldyBmZWF0dXJlcyBlbmFibGVkKSBvbiBUUU01MjAwCgoqIFVwZGF0ZSBjb2RlIGZvciBUUU04NTQwIGJvYXJkIChhbmQgODV4eCBpbiBnZW5lcmFsKToKICAtIENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgRXRoZXJuZXQgZHJpdmVyOiBNT1RPIEVORVQgLT4gRU5FVAogIC0gUmVmb3JtYXQgYm9vdCBtZXNzYWdlcwogIC0gRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudAogIC0gUmVwbGFjZSB0aGUgLU8yIG9wdGltaXphdGlvbiBmbGFnIHdpdGggLW1uby1zdHJpbmcKCiogUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1OgogIFJlc3RvcmUgY29weXJpZ2h0IHN0YXRlbWVudHMgaW4gT0hDSSBkcml2ZXJzLgoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNCBNYXIgMjAwNToKICBOQzY1MDogY2hhbmdlZCBOQU5EIGZsYXNoIGFkZHJlc3NpbmcgdG8gdXNpbmcgVVBNQgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IE1hciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIHZvaDQwNSBmcGdhIGltYWdlCgoqIElOS0E0eDA6IEFsbG93IGluaXRpYWxpemF0aW9uIG9mIExDRCBiYWNrbGlnaHQgZGltbWluZyBmcm9tCiAgImJyaWdodG5lc3MiIGVudmlyb25tZW50IHZhcmlhYmxlLgoKKiBBZGQgcG9ydCBpbml0aWFsaXphdGlvbiBmb3IgZGlnaXRhbCBJL08gb24gSU5LQTR4MAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIE1hciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIGJvYXJkcyBkcDQwNSBhbmQgaHViNDA1CgoqIEZpeCBnZXRfcGFydGl0aW9uX2luZm8oKSBwYXJhbWV0ZXIgZXJyb3IgaW4gYWxsIG90aGVyIGNhbGxzCiAgKGNvbW1vbi9jbWRfaWRlLmMsIGNvbW1vbi9jbWRfcmVpc2VyLmMsIGNvbW1vbi9jbWRfc2NzaS5jKS4KCiogRW5hYmxlIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKCiogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IEZlYiAyMDA1OgogIGZpeCBleHQybG9hZCBwYXNzaW5nIGFuIGluY29ycmVjdCBwb2ludGVyIHRvIGdldF9wYXJ0aXRpb25faW5mbygpCiAgcmVzdWx0aW5nIGluIGxvYWQgZmFpbHVyZSBmb3IgZGV2aWNlcyBvdGhlciB0aGFuIDAKCiogQWRkIHN1cHBvcnQgZm9yIFNSQU0gYW5kIDIgeCBRdWFkIFVBUlRzIG9uIElOS0E0eDAgYm9hcmQKCiogQ2xlYW51cCBVU0IgYW5kIHBhcnRpdGlvbiBkZWZpbmVzCgoqIEFkZCBzdXBwb3J0IGZvciBleHQyIGZpbGVzeXN0ZW1zIGFuZCBpbWFnZSB0aW1lc3RhbXBzIHRvIFRRTTUyMDAgYm9hcmQKCiogQWRkIHJlc2V0IGNvZGUgZm9yIENvcmFsLVAgb24gSU5LQTR4MCBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOCBKdW4gMjAwNDoKICBVcGRhdGUgZm9yIFRSQUIgYm9hcmQuCgoqIEZpeCBzb21lIG1pc3NpbmcgInZvbGF0aWxlInMgaW4gTVBDNXh4eCBGRUMgZHJpdmVyCgoqIEZpeCBjaXJydXMgdm9sdGFnZSBkZXRlY3Rpb24gKGZvciBDUEM0NSkKCiogRml4IGJ5dGVvcmRlciBwcm9ibGVtIGluIHVzYmJvb3QgYW5kIHNjc2lib290IGNvbW1hbmRzLgoKKiBQYXRjaCBieSBDYWp1cyBIYWhuLCAwNCBGZWIgMjAwNToKICAtIGRvbid0IGluc2lzdCBvbiBsZWFkaW5nICcvJyBmb3IgZmlsZW5hbWUgaW4gZXh0MmxvYWQKICAtIHNldCBkZWZhdWx0IHBhcnRpdGlvbiB0byB1c2VmdWwgdmFsdWUgKDEpIGluIGV4dDJsb2FkCgoqIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAwOCBKYW4gMjAwNToKICBmaXggd3JvbmcgcmV0dXJuIGNvZGVzIGluIGV4dDIgY29kZQoKKiBSZW1vdmVkICctLW5vLXdhcm4tbWlzbWF0Y2gnIG9wdGlvbiBmcm9tIE1ha2VmaWxlLiBUaGlzIG9wdGlvbgogIG1ha2VzICdsZCcgdG8gb3Zlcmxvb2sgYmluYXJ5IG9iamVjdHMgY29tcGF0aWJpbGl0eS4KCiogTW92ZWQgJChQTEFURk9STV9MSUJTKSBmcm9tIHRoZSBsaWJyYXJ5IGdyb3VwICgtLXN0YXJ0LWdyb3VwIC4uLgogIC0tZW5kLWdyb3VwKSBvdXRzaWRlIG9mIHRoZSBncm91cC4gVGhpcyB3aWxsIG1ha2UgJ2xkJyB0byBkbwogIF9tdWx0aXBsZV8gc2VhcmNoIGluIHRoZSBsaWJyYXJ5IGdyb3VwIHdoZW4gcmVzb2x2aW5nIHN5bWJvbAogIHJlZmVyZW5jZXMgYW5kIGRvIG9ubHkgYSBfc2luZ2xlXyBzZWFjaCBpbiBsaWJnY2MuYSBhZnRlciB0aGUgZ3JvdXAKICBzZWFyY2guCgoqIEZpeCBzdGFiaWxpdHkgcHJvYmxlbXMgb24gQ1BDNDUgYm9hcmQgYWdhaW4uCgoqIE1ha2UgaW1hZ2UgZGV0ZWN0aW9uIGZvciBkaXNrYm9vdCAvIHVzYmJvb3QgLyBzY3NpYm9vdCBtb3JlIHJvYnVzdAogIChhbHNvIGNoZWNrIGhlYWRlciBjaGVja3N1bSkKCiogVXBkYXRlIENQQzQ1IGJvYXJkIGNvbmZpZ3VyYXRpb24uCgoqIEFkZCBVU0IgYW5kIFBDSSBzdXBwb3J0IGZvciBJTktBNHgwIGJvYXJkCgoqIEZpeCBJREUgc3RhYmlsaXR5IHByb2JsZW1zIG9uIENQQzQ1IGJvYXJkIChuZWVkcyAyIHggRUlFSU8pLgoKKiBDb2RlIGNsZWFudXAKCiogUGF0Y2ggYnkgUm9iaW4gR2V0eiwgMTMgT2N0IDIwMDQ6CiAgQWRkIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gdG8gY2hhbmdlIFNNQzkxQzExMSBNQUMgYWRkcmVzc2VzLAogIHNlZSBleGFtcGxlcy9SRUFETUUuc21jOTExMTFfZWVwcm9tCgoqIFBhdGNoIGJ5IFhpYW9nZW5nIChTaGF3bikgSmluLCAxMiBPY3QgMjAwNDoKICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgQVJNIEludGVncmF0b3IgQ1AuCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEphbiAyMDA1OgogIFVwZGF0ZSBzdXBwb3J0IGZvciBPTUFQMjQyMCAoQVJNMTEpIGFuZCBINCBib2FyZDoKICBvIGNsZWFuIHVwIGFuZCBhZGQgbmV3IHR5cGVzIHRvIEg0IG1lbW9yeSBwcm9iZSBjb2RlLgogIG8gZml4IHRvIHdvcmsgd2l0aCBpbnRlcm5hbCBib290LgogIG8gYWRkZWQgUFJDTSBjb25maWcgSUlJIG9wZXJhdGlvbi4KICBvIGZpeCBtYXJnaW5hbCBmbGFzaCB0aW1pbmdzLgogIG8gYWRkIHJldmlzb24gQVRBRyB1c2FnZS4KICBvIGVuYWJsZSB2b2x0YWdlIHNjYWxpbmcgYXQgcG93ZXIgY2hpcC4KICBvIGZpeCBjb21waWxlIGVycm9yIGZvciBpMmMuCgoqIEZpeCBuZXR3b3JrIHByb2JsZW0gKGVycm9yIHdoZW4gcmVjZWl2aW5nIG11bHRpcGxlIEFSUCBwYWNrZXRzKQoKKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAxMiBPY3QgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlciBzYmM0MDUgYm9hcmQKCiogUGF0Y2ggYnkgUmFpbmVyIEJyZXN0YW4sIDEyIE9jdCAyMDA0OgogIE1ha2UgZXhhbXBsZXMvTWFrZWZpbGUgbW9yZSByb2J1c3QKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDExIE9jdG9iZXIgMjAwNDoKICAtIEFkZCBSRVNFVC9QUkVCT09UL0FVVE9CT09UIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQKICAtIEFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeSByYXRpbyAxOjEgd2hlbiBjb3JlIGZyZXF1ZW5jeQogICAgbGVzcyB0aGFuIDUwTUh6CgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAxMCBPY3QgMjAwNDoKICBGaXggYSBwYXJhbWV0ZXIgZXJyb3IgaW4gcnVuX2NvbW1hbmQoKSBpbiBtYWluLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMDEgT2N0IDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUSSBPTUFQMjQyMCBwcm9jZXNzb3IgYW5kIGl0cyBINCByZWZlcmVuY2UKICBib2FyZAoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbGVncmluLCAyNCBTZXAgMjAwNDoKICBBZGRlZCBzdXBwb3J0IGZvciBORTIwMDAgY29tcGF0aWJsZSAoRFA4MzkwLCBEUDgzOTAyKSBOSUNzLgoKKiBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyMyBTZXAgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIEFNRCBkYjE1NTAgYm9hcmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgU2VwIDIwMDQ6CiAgQWRkIENPTkZJR19TRVJJQUxfTVVMVEkgc3VwcG9ydCBmb3IgcHBjNHh4LAogIHVwZGF0ZSBSRUFETUUuc2VyaWFsX211bHRpCgoqIFBhdGNoZXMgYnkgRGF2aWQgU25vd2RvbiwgMDcgU2VwIDIwMDQ6CiAgLSBhZGQgdS1ib290LmhleCB0YXJnZXQgaW4gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZQogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBVTlNXL05JQ1RBIFBMRUIgMiBib2FyZCAocGxlYjIpCiAgLSB1c2UgLW10dW5lPXhzY2FsZSBhbmQgLW1hcmNoPWFybXY1IG9wdGlvbnMgZm9yIFBYQQoKKiBQYXRjaCBieSBGbG9yaWFuIFNjaGxvdGUsIDA4IFNlcCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBTZW5UZWMtQ09CUkE1MjcyLWJvYXJkIChDb2xkZmlyZSkuCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMDcgU2VwIDIwMDQ6CiAgbXBjODI0eDogc2V0IFBDSSBsYXRlbmN5IHRpbWVyIHRvIGEgc2FuZSB2YWx1ZQogIChpcyAwIGFmdGVyIHJlc2V0KS4KCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDAzIFNlcCAyMDA0OgogIEFkZCBiaXRzdHJlYW0gY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGZwZ2EgY29tbWFuZCAoWGlsaW54IG9ubHkpLgoKKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMDMgU2VwIDIwMDQ6CiAgQWRkIFhpbGlueCBTcGFydGFuMkUgZmFtaWx5IEZQR0Egc3VwcG9ydAoKKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDIgU2VwIDIwMDQ6CiAgQWRkIEFkZGVkIHN1cHBvcnQgZm9yIEgyIHJldmlzaW9uIG9mIHRoZSBFUDgyNjAgYm9hcmQuCiAgRml4ZWQgZm9ybWF0dGluZyBmb3Igc29tZSBvZiB0aGUgRVA4MjYwIHJlbGF0ZWQgc291cmNlIGZpbGVzLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDAyIFNlcCAyMDA0OgogIFJlc2V0IG1vbml0b3Igc2l6ZSBiYWNrIHRvIDI1NiBzbyBlbnZpcm9ubWVudCBjYW4gYmUgd3JpdHRlbgogIHRvIGZsYXNoIG9uIE1QQzg1eHggQURTIGFuZCBDRFMgcmVsZWFzZXMuCgoqIFBhdGNoIGJ5IFBhb2xvIEJyb2dnaW5pLCAwMiBTZXAgMjAwNDoKICBNYWtlIEJTUyBjbGVhcmluZyBvbiBBUk0gc3lzdGVtcyBtb3JlIHJvYnVzdAoKKiBQYXRjaCBieSBZdWUgSHUgYW5kIEpvZSwgMDEgU2VwIDIwMDQ6CiAgLSBhZGQgUENJIHN1cHBvcnQgZm9yIGl4cDQyNTsKICAtIGFkZCBFRVBSTzEwMCBzdXBwb3IgdGZvciBpeGRwNDI1IGJvYXJkLgoKKiBGaXggcHJvYmxlbSB3aXRoIHByb3RlY3RlZCBzZWN0b3IgZGV0ZWN0aW9uIGluIGRyaXZlci9jZmlfZmxhc2guYwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQ29kZSBjbGVhbnVwLCBtb3N0bHkgZm9yIEdDQy0zLjMueAoKKiBDbGVhbnVwIGNvbmZ1c2luZyB1c2Ugb2YgQ09ORklHX0VUSCpBRERSIC0gdXN0IGhpcyBvbmx5IHRvCiAgcHJlLWRlZmluZSBhIE1BQyBhZGRyZXNzOyB1c2UgQ09ORklHX0hBU19FVEgqIHRvIGVuYWJsZSBzdXBwb3J0IGZvcgogIGFkZGl0aW9uYWwgZXRoZXJuZXQgYWRkcmVzc2VzLgoKKiBDbGVhbnVwIGRyaXZlcnMvaTgyMzY1LmMgLSBhdm9pZCBkdXBsaWNhdGlvbiBvZiBjb2RlCgoqIEZpeCBib2d1cyAiY2Fubm90IHNwYW4gYWNyb3NzIGJhbmtzIiBmbGFzaCBlcnJvciBtZXNzYWdlCgoqIENvZGUgY2xlYW51cAoKKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIGZvciB0aGUgQ1BDNDUgQm9hcmQuCgoqIEZpeCBwcm9ibGVtcyB3aXRoIENNQ19QVTIgZmxhc2ggZHJpdmVyLgoKKiBDbGVhbnVwOgogIC0gYXZvaWQgdHJpZ3JhcGggd2FybmluZyBpbiBmcy9leHQyL2V4dDJmcy5jCiAgLSByZW5hbWUgVUMxMDAgLT4gdWMxMDAKCiogQWRkIHN1cHBvcnQgZm9yIFVDMTAwIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgRGV6IDIwMDQ6CiAgLSBleHQyZnMgc3VwcG9ydCBhZGRlZAogIC0gVHVuZHJhIHVuaXZlcnNlIHN1cHBvcnQgYWRkZWQKICAtIENvbGRmaXJlIE1DRjUyNDkgc3VwcG9ydCBhZGRlZCAobm8gcHJlbG9hZGVyIG5lZWRlZCEpCiAgLSBNQ0Y1MjQ5IGJvYXJkIFRBU1JFRyBhZGRlZAogIC0gUFBDIGJvYXJkcyBhZGRlZDogQVBDNDA1LCBDUENJNDA1RFQsIENQQ0k3NTAsIEcyMDAwLCBISDQwNSwKICAgIFZPTTQwNSwgV1VINDA1CiAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAogIC0gbWVtb3J5IGNvbW1hbmRzICJtZGMiIGFuZCAibXdjIiBhZGRlZCBmb3IgY3ljbGljIHJlYWQvd3JpdGUKICAgIChDT05GSUdfTVhfQ1lDTElDLCBzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKQoKKiBBZGQgc3VwcG9ydCBmb3IgSU5LQTRYMCBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMiBEZWMgMjAwNDoKICBGaXggdHlwbyBpbiBBVDkxIG1lbW9yeSBzZXR1cC4KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgIlNUSzUyeHgiIGJvYXJkIChpbmNsdWRpbmcgUFMvMiBtdWx0aXBsZXhlcikKICAtIGFkZCBoYXJkd2FyZSBkZXRlY3Rpb24gZm9yIFRRTTUyMDAKCiogQ2xlYW4gdXAgQ01DIFBVMiBmbGFzaCBkcml2ZXIKCiogVXBkYXRlIE1BSU5UQUlORVJTIGZpbGUKCiogRml4IGJ1ZyBpbiBNUEM4MjMgTENEIGRyaXZlcgoKKiBGaXggdWRlbGF5KCkgb24gQVQ5MVJNOTIwMCBmb3IgZGVsYXlzIDwgMSBtcy4KCiogRW5hYmxlIGxvbmcgaGVscCBvbiBDTUMgUFUyIGJvYXJkOwogIGZpeCByZXNldCBpc3N1ZTsKICBpbmNyZWFzZSBDUFUgc3BlZWQgZnJvbSAxNzkgdG8gMjA3IE1Iei4KCiogRml4IHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciBmb3IgWGFlbmlheCBib2FyZCAobmVlZCB0byBoYW5kbGUKICB1bmFsaWduZWQgdGFpbCBwYXJ0IHNwZWNpYWxseSkuCgoqIFVwZGF0ZSBmb3IgQVQ5MVJNOTIwMERLIGFuZCBDTUNfUFUyIGJvYXJkczoKICAtIEVuYWJsZSBib290aW5nIGRpcmVjdGx5IGZyb20gZmxhc2gKICAtIGZpeCBDTUNfUFUyIGZsYXNoIGRyaXZlcgoKKiBGaXggbWtpbWFnZSB1c2FnZSBtZXNzYWdlCgoqIE1hcCBTUkFNIG9uIE5DNjUwIGJvYXJkCgoqIFdvcmsgYXJvdW5kIGZvciBFdGhlcm5ldCBwcm9ibGVtcyBvbiBYYWVuaWF4IGJvYXJkCgoqIFBhdGNoIGJ5IFRzaUNodW5nIExpZXcsIDIzIFNlcCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgQ1BVCiAgLSBBZGQgc3VwcG9ydCBmb3IgQWxhc2thIGFuZCBZdWtvbiBib2FyZHMKCiogRml4IGNvbmZpZ3VyYXRpb24gZm9yIEVSSUMgYm9hcmQgKG5lZWRzIG1vcmUgcm9vbSkKCiogQWRqdXN0IE1JUFMgY29tcGlsZXIgb3B0aW9ucyBhdCBydW4tdGltZSBkZXBlbmRpbmcgb24gdG9vbHMgdmVyc2lvbgogICgiLW1hcmNoPTRrYyAtbXR1bmU9NGtjIC1XYSwtbWlwc19hbGxvd19icmFuY2hfdG9fdW5kZWZpbmVkIiBmb3IgbmV3LAogICItbWNwdT00a2MiIGZvciBvbGQgdG9vbHMpCgoqIEFkZCBwYXNzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUgYW5kIG1lbW9yeSBzaXplIGluZm9ybWF0aW9uIHRvICB0aGUKICBrZXJuZWwgb24geGFlbmlheCBib2FyZC4KCiogRW5hYmxlIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgTkM2NTAgYm9hcmQuCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSAwNyBPY3QgMjAwNDoKICBVcGRhdGVkIFJFQURNRSBmb3IgREJBdTF4MDAgYm9hcmRzIHRvIG1hdGNoIGN1cnJlbnQgc3RhdHVzCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyOCBTZXB0IDIwMDQ6CiAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIFZlcnNhdGlsZS4KCiogUGF0Y2ggYnkgUm9nZXIgQmxvZmVsZCwgMTYgU2VwIDIwMDQ6CiAgRml4IHRpbWVvdXQgZm9yIERIQ1AgY29tbWFuZCByZXRyeQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTQgU2VwIDIwMDQ6CiAgRml4IGVhcmx5IHNlcmlhbCBoYW5nIHdoZW4gQ09ORklHX1NFUklBTF9NVUxUSSBpcyBkZWZpbmVkLgoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTQgU2VwIDIwMDQ6CiAgS2ljayB3YXRjaGRvZyB3aGVuIGJ6LWRlY29tcHJlc3NpbmcKCiogRml4IENGR19IWiBwcm9ibGVtcyBvbiBBVDkxUk05MjAwIHN5c3RlbXMKICBbUmVtZW1iZXI6IENGR19IWiBzaG91bGQgYmUgMTAwMCBvbiBBTEwgc3lzdGVtcyFdCgoqIFBhdGNoIGJ5IEdyaWRpc2ggU2hsb21pLCAzMCBBdWcgMjAwNDoKICAtIEFkZCBzdXBwb3J0IHRvIHJldkEgdmVyc2lvbiBvZiBQUTI3IGFuZCBQUTI3RS4KICAtIFJldmVydGVkIE1QQzgyNjBBRFMgYmF1ZHJhdGUgYmFjayB0byBvcmlnaW5hbCAxMTUyMDAKCiogUGF0Y2ggYnkgSG9qaW4sIDE3IFNlcCAyMDA0OgogIEZpeCB0eXBvIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA5IFNlcHRlbWJlciAyMDA0OgogIG10ZXN0J3MgZGF0YSBsaW5lIHRlc3QgKHdpdGggQ0ZHX0FMVF9NRU1URVNUIHNldCkgcmV0dXJuZWQgYSB3cm9uZwogIGVycm9yIG1lc3NhZ2UKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMzEgQXVndXN0IDIwMDQ6CiAgQWRkZWQgb3B0aW9uIENGR19YTEJfUElQRUxJTklORyB0byBlbmFibGUgWExCIHBpcGVsaW5pbmcuIFRoaXMKICBpbXByb3ZlcyBGVFAgcGVyZm9ybWFuY2UgZm9yIE1QQzUyMDAgc3lzdGVtcy4gRW5hYmxlZCBmb3IgSWNlQ3ViZQogIGJ5IGRlZmF1bHQuCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgogIC0gSW1wcm92ZSBwbGF0Zm9ybS5TIGNvZGUgZm9yIG9tYXAxNTEwaW5uIHRoYXQgZGV0ZWN0cyB3aGV0aGVyIGNvZGUKICAgIGlzIHJ1bm5pbmcgZnJvbSBTRFJBTSBvciBub3QuIFBhdGNoIGFsbG93cyBTRFJBTSB0byBiZSBjb25maWd1cmVkCiAgICBpZiBjb2RlIGlzIHJ1bm5pbmcgb3V0IG9mIFNSQU0gYXQgMHgyMDAwMDAwMC4KCiogUGF0Y2ggYnkgRnJlZGVyaWNrIEtsYXR0LCAzMCBBdWcgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdpbmQgUml2ZXIgU0JDODU0MC9TQkM4NTYwIGJvYXJkcwoKKiBDb25maWd1cmUgU1gxIGJvYXJkIHRvIHVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jCgoqIFBhdGNoZXMgYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CiAgLSBDb25maWd1cmUgb21hcDE1MTBpbm4gYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKICAtIE1ha2UgZHJpdmVycy9jZmlfZmxhc2guYyBwcm90ZWN0IGVudmlyb25tZW50IGFuZCByZWR1bmRhbnQKICAgIGVudmlyb25tZW50LgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMyBKdW4gMjAwNDoKICAtIEFkZCBzY3JpcHQgKHRvb2xzL2ltZzJicmVjLnNoKSB0byBwcm9ncmFtbSBVLUJvb3QgaW50bwogICAgKFN5bmNoKUZsYXNoIHVzaW5nIHRoZSBCb290c3RyYXAgTW9kZSBvZiB0aGUgTUM5MzI4TVgxL0wKCiogUGF0Y2hlcyBieSBTY290dCBNY051dHQsIDI0IEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zLUlJIHByb2Nlc3NvcnMuCiAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBDSS01NDQxIGJvYXJkLgogIC0gQWRkIHN1cHBvcnQgZm9yIFBzeWVudCBQSzFDMjAgYm9hcmQuCgoqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAyNCBBdWcgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTVBDODU0MSBhbmQgTVBDODU1NSBDRFMgYm9hcmRzCiAgLSBDbGVhbnVwIGV0aD9hZGRyIGhhbmRsaW5nOiBtYWtlIGRlcGVuZGVudCBvbiBDT05GSUdfRVRIP0FERFIKICAtIENvbnZlcnQgTVBDODV4eEFEUyB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKICAtIEZpeCBQQ0kgd2luZG93IG9uIE1QQzg1eHg7IHJlbW92ZSB1bm5lZWRlZCBQQ0kgaW5pdGlhbGl6YXRpb24KICAgIGZyb20gYm9hcmRfZWFybHlfaW5pdF9mKCkKICAtIFByb3ZpZGUgU1cgd29ya2Fyb3VuZCBmb3IgUENJIGluaXRpYWxpemF0aW9uIG9uIDg1eHggQ0RTCgoqIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAyNCBBdWcgMjAwNDoKICAtIEVuYWJsZSByYW1kaXNrL2luaXRyZCB0YWdnZWQgcGFyYW0gc3VwcG9ydCBmb3Igb21hcDE2MTBoMl9jb25maWcKICAtIFJlbW92ZSBzdGF0aWMgbmV0d29yayBzZXR1cCBkZWZhdWx0cyBmcm9tIG14MWFkc19jb25maWcKICAtIHVwZGF0ZSBBUk0gYm9hcmRzIHRvIHVzZSBjb25zdGFudHMgZnJvbSBtYWNoLXR5cGVzLmgKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDA0IE9jdCAyMDA0OgogIC0gZml4IEkyQyBvbiBhdDkxcm05MjAwCiAgLSBhZGQgc3VwcG9ydCBmb3IgUmljb2ggUlM1QzM3MkEgUlRDCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwMSBPY3QgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBDTUMgUFUyIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgSTJDIG9uIGF0OTFybTkyMDAKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IFNlcCAyMDA0OgogIGZpeCBiYXVkcmF0ZSBoYW5kbGluZyBvbiBhdDkxcm05MjAwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIEF1ZyAyMDA0OgogIC0gcmVtb3ZlIFpQQy4xOTAwIGJvYXJkLXNwZWNpZmljIGZsYXNoIGRyaXZlcjsKICAgIHN3aXRjaCB0aGUgcG9ydCB0byBnZW5lcmljIENGSSBkcml2ZXI7CiAgLSBwb3J0IGNsZWFuLXVwCgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgogIEFkZCBjYWxjX2Zic2l6ZSgpIGZ1bmN0aW9uIHVzZWQgd2l0aCBWSURFT0xGQl9UQUcgb24gVFJBQgoKKiBDbGVhbiB1cCB0b29scy9ibXBfbG9nby5jIHRvIG5vdCBhZGQgdHJhaWxpbmcgd2hpdGUgc3BhY2UKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgZnVuY3Rpb25zIGluIGNvbW1vbi9sY2QuYwogIC0gR3JvdXAgY29tbW9uIGZyYW1lYnVmZmVyIG1hY3JvcyBhbmQgI2RlZmluZXMgaW4gaW5jbHVkZS9sY2QuaAogIC0gUHJvdmlkZSBjYWxjX2Zic2l6ZSgpIGZvciB2aWRlbyBBVEFHCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAyMSBBdWd1c3QgMjAwNDoKICAtIEZpeCBhIHR5cG8gaW4gUkVBRE1FCiAgLSBBbGlnbiAiKFJPKSIgb3V0cHV0IGZvciAiZmxpbmZvIiBhZnRlciAicHJvdGVjdCBvbiIKICAtIEFkZCBSRVNFVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkOyBhZGp1c3QgQ1BVOkJVUyBmcmVxdWVuY3kKICAgIHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5IGxlc3MgdGhhbiA1ME1IegoKKiBQYXRjaGVzIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgogIC0gZml4IHNvbWUgInVzZSBvZiBsYWJlbCBhdCBlbmQgb2YgY29tcG91bmQgc3RhdGVtZW50IiB3YXJuaW5ncwogIC0gRGVmaW5lIHR5cGUgb2YgTENEIHBhbmVsIG9uIGx1YmJvY2sgYm9hcmQgaWYgQ09ORklHX0xDRCBpcyB1c2VkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE2IEF1ZyAyMDA0OgogIC0gSW50cm9kdWNpbmcgdGhlIGNvbmNlcHQgb2YgU29DcyAiLi9jcHUvJChDUFUpLyQoU09DKSIKICAtIGNyZWF0aW5nIHN1YmRpcnMgZm9yIFNvQ3MgLi9jcHUvYXJtOTIwdC9pbXggYW5kIC4vY3B1L2FybTkyMHQvczNjMjR4MAogIC0gbW92aW5nIFNvQyBzcGVjaWZpYyBjb2RlIG91dCBvZiBjcHUvYXJtOTIwdC8gaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCiAgLSBtb3ZpbmcgZHJpdmVycy9zM2MyNHgwX2kyYy5jIGFuZCBkcml2ZXJzL3NlcmlhbF9pbXguYyBvdXQgb2YgZHJpdmVycy8KICAgIGludG8gY3B1L2FybTkyMHQvJChTT0MpLwoKKiBQYXRjaGVzIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgYm90aCA4IGFuZCAxNiBiaXQgbW9kZSBhY2Nlc3MgdG8gU3lzdGVtIEFDRSBDRgogICAgdGhyb3VnaCBNUFUuCiAgLSBGaXhlZCBtaXNzaW5nIFN5c3RlbSBBQ0UgQ0YgZGV2aWNlIGR1cmluZyBnZXQgRkFUIHBhcnRpdGlvbiBpbmZvCiAgICBpbiBmYXRfcmVnaXN0ZXJfZGV2aWNlIGZ1bmN0aW9uLgogIC0gRW5hYmxlZCBTeXN0ZW0gQUNFIENGIHN1cHBvcnQgb24gTUwzMDAuCgoqIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIFN5bmNoIGRlZmluZXMgZm9yIHNhdmVlbnYgYW5kIGRvX3NhdmVlbnYgZnVuY3Rpb25zIHNvIHRoZXkgZ2V0CiAgY29tcGlsZWQgdW5kZXIgdGhlIHNhbWUgc3RhdGVtZW50LgoKKiBQYXRjaCBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKICAtIEFkZGVkIEkyQyBzdXBwb3J0IGZvciBNTDMwMC4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIE1MMzAwIHRvIHJlYWQgb3V0IGl0cyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbgogICAgc3RvcmVkIG9uIHRoZSBFRVBST00uCiAgLSBBZGRlZCBzdXBwb3J0IHRvIHVzZSBib2FyZCBzcGVjaWZpYyBwYXJhbWV0ZXJzIGFzIHBhcnQgb2YKICAgIFUtQm9vdCdzIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgogIC0gVXBkYXRlZCBNTEQgZmlsZXMgdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uIGZvciBuZXcgZmVhdHVyZXMKICAgIGFib3ZlLgoKKiBQYXRjaGVzIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEF1ZyAyMDA0OgogIC0gUmVtb3ZlIGluY29ycmVjdCBicmlkZ2Ugc2V0dGluZ3MgZm9yIGV0aCBncm91cCA2CiAgLSBBZGQgY2FsbCB0byBzZXR1cCBicmlkZ2UgaW4gcHBjXzQ0MHhfZXRoX2luaXRpYWxpemUKICAtIEZpeCBwcGNfNDQweF9ldGhfaW5pdCB0byByZXNldCB0aGUgcGh5IG9ubHkgaWYgaXRzIHRoZQogICAgZmlyc3QgdGltZSB0aHJvdWdoLCBvdGhlcndpc2UsIGp1c3QgY2hlY2sgdGhlIHBoeSBmb3IgdGhlCiAgICBhdXRvbmVnb3RpYXRlZCBzcGVlZC9kdXBsZXguICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIG5ldGNvbnNvbGUKICAtIG9ubHkgcHJpbnQgdGhlIHNwZWVkL2R1cGxleCB0aGUgZmlyc3QgdGltZSB0aGUgcGh5IGlzIHJlc2V0LgoKKiBQYXRjaCBieSBTaGxvbW8gS3V0LCAyOSBNYXIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTUtTIEluc3RydW1lbnRzICJRdWFudHVtIiBib2FyZAoKKiBGaXggYnVpbGQgcHJvYmxlbSB3aXRoIENvZ2VudCBib2FyZHM7CiAgYXZvaWQgdXNpbmcgPGFzbS9ieXRlb3JkZXIuaD4gd2hlbiB1c2luZyB0aGUgaG9zdCBjb21waWxlcgoKKiBQYXRjaCBieSBHYW5hcGF0aGkgQywgMDQgQXVnIDIwMDQ6CiAgRml4IE5GUyB0aW1lb3V0IGlzc3VlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE5IEp1bCAyMDA0OgogIC0gRml4IGhvc3QgdG9vbHMgYnVpbGRpbmcgaW4gQ3lnd2luIGVudmlyb25tZW50CiAgLSBGaXggaGVhZGVyIGZpbGVzIHNlYXJjaCBvcmRlciBmb3IgaG9zdCB0b29scwoKKiBQYXRjaCBieSBUb20gQXJtaXN0ZWFkLCAxOSBKdWwgMjAwNDoKICBGaXgga2dkYi5TIHN1cHBvcnQgZm9yIDc0eHhfNzV4IGNwdQoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE1IEp1bCAyMDA0OgogIEZpeCBNUEM4NXh4IEkyQyBkcml2ZXIKCiogRml4IHByb2JsZW1zIHdpdGggQ0RST00gZHJpdmUgYXMgc2xhdmUgZGV2aWNlIG9uIExpdGU1MjAwIElERSBidXMuCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IEp1bHkgMjAwNAogIFNldCB0aGUgUENJIGNsYXNzIGNvZGUgZm9yIEpTRSBib2FyZCBhcyBwYXJ0IG9mIFBDSSBpbnRlcmZhY2Ugc2V0dXAKCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTUgSnVsIDIwMDQ6CiAgRml4IHByb2JsZW0gd2l0aCB3cml0ZXMgd2l0aCBvZGQgc2l6ZXMgaW4gZHJpdmVycy9jZmlfZmxhc2guYyB3aGVuCiAgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgaXMgc2V0CgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDA0OgogIEFsbG93IGNsb2NrIHNldHRpbmcgb24gTVBDODY2L01QQzg4NSBzZXJpZXMgY2hpcHMgYWNjb3JkaW5nIHRvCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgYGNwdWNsaycKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjAgQXByIDIwMDQ6CiAgUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZGVmaW5lIG9mIENQTV9EQVRBT05MWV9TSVpFIGZvciBNUEM4MjZ4CgoqIFBhdGNoIGJ5IFZpbmNlbnQgRHViZXksIDI0IFNlcCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB4YWVuaWF4IGJvYXJkCgoqIEFkZCBjb21tZW50IGFib3V0IG5vbi1HUEwgY2hhcmFjdGVyIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvCiAgQ09QWUlORyBmaWxlCgoqIEZpeCBGRUMgZXRoZXJuZXQgcHJvYmxlbSBvbiBOU0NVIGJvYXJkLgoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDkgU2VwIDIwMDQ6CiAgYWxsb3cgdG8gdXNlIFVTQVJUMSBhcyBjb25zb2xlIHBvcnQgb24gYXQ5MXJtOTIwMGRrIGJvYXJkcwoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IFNlcCAyMDA0OgogIFVwZGF0ZSBBUjQwNSBib2FyZC4KCiogRml4IFN5c0NsayBoYW5kbGluZyBmb3IgUFBDaGFtZWxlb24gYW5kIENBVGNlbnRlciBib2FyZHMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMDggU2VwIDIwMDQ6CiAgVXBkYXRlIGV0YWdzIGJ1aWxkIHRhcmdldAoKKiBJbXByb3ZlIE5ldENvbnNvbGUgc3VwcG9ydDogYWRkIHN1cHBvcnQgZm9yIGJyb2FkY2FzdCBkZXN0aW5hdGlvbgogIGFkZHJlc3MgYW5kIGJ1ZmZlcmVkIGlucHV0LgoKKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBHQ0MgMy4zLnggYW5kIGxhdGVyCgoqIEZpeCBwcm9ibGVtIGluIGNtZF9qZmZzMi5jIGludHJvZHVjZWQgYnkgQ0ZHX0pGRlNfU0lOR0xFX1BBUlQgcGF0Y2gKCiogQWRkIHN1cHBvcnQgZm9yIElEUyAiTkM2NTAiIGJvYXJkCgoqIEFkZCBhdXRvbWF0aWMgdXBkYXRlIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCgoqIENsZWFyIEJsb2NrIExvY2stQml0cyB3aGVuIGVyYXNpbmcgZmxhc2ggb24gTFdNT04gYm9hcmQuCgoqIEZpeCByZXR1cm4gY29kZSBvZiAiZmF0bG9hZCIgY29tbWFuZAoKKiBFbmFibGUgTVNET1MvVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDAzIEF1ZyAyMDA0OgogIGNoYW5nZSB0aW1pbmcgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIgb24gVFFNNTIwMCBtb2R1bGUKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMTMgSnVseSAyMDA0OgogIC0gVG90YWw1MjAwIExDRCBub3cgcnVuIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4gRW5kaWFuZXNzIGNvbnZlcnNpb24KICAgIGlzIGRvbmUgaW4gaGFyZHdhcmUuCiAgLSBSZW1vdmVkIGxhc3QgcmVmZXJlbmNlIHRvICJjb25zb2xlIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCiogUGF0Y2hlcyBieSBMYXJzIE11bmNoLCAxMiBKdWwgMjAwNDoKICAtIG1vdmUgYXQ0NS5jIHRvIGJvYXJkL2F0OTFybTkyMDBkay8gc2luY2UgdGhpcyBpcyBhdDkxcm05MjAwZGsKICAgIGJvYXJkIHNwZWNpZmljCiAgLSBzcGxpdCBvdXQgdGhlIExYVDk3MUEgUEhZIGZyb20gbnNfOTc1MF9ldGguaAogIC0gc3BsaXQgdGhlIGRtOTE2MSBwaHkgcGFydCBvdXQgb2YgYXQ5MXJtOTIwMF9ldGhlci5jCgoqIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDEyIEp1bCAyMDA0OgogIFJlcGxhY2VkIGhhcmRjb2RlZCBQTDAxMSBjbG9jayBmcmVxdWVuY3kgd2l0aCBjb25maWcgdmFyaWFibGUuCiAgRml4ZWQgd3JvbmcgQ09ORklHX0NNRF9ERkwgZG9jLgoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAwOSBKdW4gMjAwNDoKICBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlbW92ZSBjaHBhcnQgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0aXRpb24KCiogQWRkIHN1cHBvcnQgZm9yIGNvbnNvbGUgb3ZlciBVRFAgKGNvbXBhdGlibGUgdG8gSW5nbyBNb2xuYXIncwogIG5ldGNvbnNvbGUgcGF0Y2ggdW5kZXIgTGludXgpCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTYgSnVsIDIwMDQ6CiAgLSBzdXBwb3J0IGxhcmdlciBERFIgbWVtb3JpZXMgdXAgdG8gMkcgb24gdGhlIFBDODU0MC84NTYwQURTIGFuZAogICAgU1RYR1AzIGJvYXJkcwogIC0gTWFkZSBNUEM4NTQwLzg1NjBBRFMgYmUgMzNNaHogUENJIGJ5IGRlZmF1bHQuCiAgLSBSZW1vdmVkIG1vbGR5IENPTkZJR19SQU1fQVNfRkxBU0gsIENGR19GTEFTSF9QT1JUX1dJRFRIXzE2CiAgICBhbmQgQ09ORklHX0wyX0lOSVRfUkFNIG9wdGlvbnMuCiAgLSBSZWZhY3RvciBMb2NhbCBCdXMgaW5pdGlhbGl6YXRpb24gb3V0IG9mIFNEUkFNIHNldHVwLgogIC0gUmUtaW1wbGVtZW50IG5ldyB2ZXJzaW9uIG9mIExCQzExL0REUjExIGVycmF0YSB3b3JrYXJvdW5kcy4KICAtIE1vdmVkIGJvYXJkIHNwZWNpZmljIFBDSSBpbml0IHBhcnRzIG91dCBvZiBDUFUgZGlyZWN0b3J5LgogIC0gQWRkZWQgVExCIGVudHJ5IGZvciBQQ0ktMSBJTyBNZW1vcnkKICAtIFVwZGF0ZWQgUkVBRE1FLm1wYzg1eHhhZHMKCiogUGF0Y2ggYnkgU2FzY2hhIEhhdWVyLCAyOCBKdW46CiAgLSBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciBNb3Rvcm9sYSBpLk1YIGFyY2hpdGVjdHVyZQogIC0gYWRkIHN1cHBvcnQgZm9yIG14MWFkcywgbXgxZnMyIGFuZCBzY2I5MzI4IGJvYXJkcwoKKiBQYXRjaGVzIGJ5IE1hcmMgTGVlbWFuLCAyMyBKdWwgMjAwNDoKICAtIEFkZCBkZWZpbmUgZm9yIHRoZSBQQ0kvTWVtb3J5IEJ1ZmZlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCiAgLSBjb3JyZWN0ZWQgY29tbWVudHMgaW4gY3B1L21wYzgyNHgvY3B1X2luaXQuYwoKKiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2VyaWFsIGludGVyZmFjZXMKICAoZm9yIGV4YW1wbGUgdG8gYWxsb3cgbW9kZW0gZGlhbC1pbiAvIGRpYWwtb3V0KQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IEp1bCAyMDA0OgogIGNwdS9wcGM0eHgvc2RyYW0uYyByZXdyaXR0ZW4gbm93IHVzaW5nIGdldF9yYW1fc2l6ZSgpCgoqIEZpeCBOU0NVIGNvbmZpZzsgYWRkIGV0aGVybmV0IHdha2V1cCBjb2RlLgoKKiBBZGQgbGluayBmb3IgcHJlbG9hZGVyIGZvciBNb3Rvcm9sYSBDb2xkZmlyZSB0byBSRUFETUUubTY4awoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxMiBKdWwgMjAwNDoKICBmaXggb3V0cHV0IGZvcm1hdHRpbmcgaW4gZHJpdmVycy9jZmlfZmxhc2guYwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMiBKdWwgMjAwNDoKICBGaXggbG93Ym9vdCAoYWdhaW4pIG9uIE1QQzV4eHgKCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMDcgSnVsIDIwMDQ6CiAgcmVsb2NhdGUgZXhjZXB0aW9uIHZlY3RvcnMgb24gYXJtNzIwdCBpZiBuZWVkZWQKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAwNiBKdWwgMjAwNDoKICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QKICAtIFNldCBjb3JyZWN0IE9NQVAxNjEwIGJpX2FyY2hfbnVtYmVyIGZvciBidWlsZCB0YXJnZXQKCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMDYgSnVsIDIwMDQ6CiAgZXZiNDUxMDogYWRkIHN1cHBvcnQgZm9yIHRpbWVyIGludGVycnVwdDsgY2xlYW51cAoKKiBQYXRjaCBieSBEYW4gUG9pcm90LCAwNiBKdWwgMjAwNDoKICBGaXggc2JjODI2MCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKCiogQ2xlYW51cCByZWR1bmRhbmQgImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA1IEp1bCAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciB0aGUgVG90YWw1MTAwJ3MgYW5kIFRvdGFsNTIwMCdzIExDRCBzY3JlZW4KCiogUGF0Y2hlcyBieSBEYW4gRWlzZW5odXQsIDAxIEp1bCAyMDA0OgogIC0gUkVBRE1FIGZpeGVzLgogIC0gTW92ZSBkb2MyMDAwLmggaW5jbHVkZSB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmcgb24gc29tZSBib2FyZHMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDEgSnVsIDIwMDQ6CiAgQWRkZWQgc3VwcG9ydCBmb3IgVG90YWw1MTAwIGFuZCBUb3RhbDUyMDAgKFJldi4xIGFuZCBSZXYuMikKICBNR1Q1MTAwIGFuZCBNUEM1MjAwIGJhc2VkIEZyZWVzY2FsZSBwbGF0Zm9ybXMuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwMSBKdWwgMjAwNDoKICBBZGQgaW5pdGlhbGl6YXRpb24gZm9yIEludGVncmF0b3IgYW5kIHZlcnNhdGlsZSBib2FyZCBmaWxlcy4KCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMDEgSnVuIDIwMDQ6CiAgRml4IFZGRCBGQiBhbGxvY2F0aW9uLCBhZGQgTENEIEZCIGFsbG9jYXRpb24gb24gQVJNCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDMwIEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBUUU01MjAwIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI5IEp1biAyMDA0OgogIEFkZCBsb29wdyBjb21tYW5kOiBpbmZpbml0ZSB3cml0ZSBsb29wIG9uIGFkZHJlc3MgcmFuZ2UKCiogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyOSBKdW4gMjAwNDoKICAtIGFkZCBlbXB0eSBpbmNsdWRlL2FzbS1taWNyb2JsYXplL3Byb2Nlc3Nvci5oCiAgLSBhZGQgdG8gQ1JFRElUUyBhbmQgTUFJTlRBSU5FUlMKICAtIGFkZCBnZCBpbml0aWFsaXphdGlvbgogIC0gYWRkIE1pY3JvQmxhemUgYW5kIFNVWkFLVSBib2FyZCB0byBNQUtFQUxMIHNjcmlwdAogIC0gYWRkIHJlc2V0IHN1cHBvcnQgZm9yIFNVWkFLVQogIC0gYWRkIGZsdXNoX2NhY2hlKCkgZm9yIE1pY3JvQmxhemUKICAtIGFkZCBDRkdfRkxBU0hfU0laRSB0byBpbmNsdWRlL2NvbmZpZ3Mvc3V6YWt1Lmggc2luY2Ugd2UgaGF2ZSBmaXhlZAogICAgc2l6ZSBmbGFzaCBtZW1vcnkgb24gU1VaQUtVCgoqIFBhdGNoIGJ5IFByYWthc2ggS3VtYXIsIDI3IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgUFhBMjUwIGJhc2VkIEludHJpbnN5YyBDZXJmIGJvYXJkLgoKKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAyNyBKdW4gMjAwNDoKICBmaXggY29tbWVudCBpbiBpbmNsdWRlL2NvbW1vbi5oCgoqIFJlbmFtZSBTQkM4NTYwIGludG8gc2JjODU2MCBmb3IgY29uc2lzdGVuY3kKCiogUGF0Y2ggYnkgRGFuaWVsIFBvaXJvdCwgMjQgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFdpbmQgUml2ZXIncyBzYmM4MjQwIGJvYXJkCgoqIFBhdGNoZXMgYnkgWWFzdXNoaSBTaG9qaSwgMjYgSnVuIDIwMDQ6CiAgLSBkcml2ZXJzL3NlcmlhbF94dWFydGxpdGUuYzogZml4ICJyZXR1cm4gMCIgaW4gdm9pZCBmdW5jdGlvbgogIC0gYWRkIG1pY3JvYmxhemUgc3VwcG9ydCB0byBta2ltYWdlIHRvb2wKCiogUGF0Y2ggYnkgRnJlZCBLbGF0dCwgMjUgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFdpbmRSaXZlcidzIHNiYzg1NjAgYm9hcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMjQgSnVuIDIwMDQKICBTbWFsbCBCdWdzIGZpeGVzIGZvciAiYXQ5MXJtOTIwMGRrIiBib2FyZDoKICAtIFRpbWluZyBtb2RpZmljYXRpb25zIGZvciBTUEkgRGF0YUZsYXNoIGFjY2VzcwogIC0gRml4IE5BTkQgZmxhc2ggZGV0ZWN0aW9uIGJ1ZwoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNDoKICBBZGQgU3VwcG9ydCBmb3IgRmxhc2ggQVQ0OUJWNjQxNiBmb3IgQVQ5MVJNOTIwMERLIGJvYXJkCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTcgSnVuZSAyMDA0OgogIENvbXBsZXRpb24gb2YgdGhlIDg1NDBBRFMvODU2MEFEUyB1cGRhdGVzOgogIEZpeCBzb21lIFBDSSBhbmQgUmFwaWQgSS9PIG1lbW9yeSBtYXBzLAogIEluaXRpYWxpemUgYm90aCBUU0VDIDEgYW5kIDIsCiAgSW5pdGlhbGl6ZSBTRFJBTQogIFVwZGF0ZSBNQUlOVEFJTkVSIGZvciA4NXh4IGJvYXJkcyBhbmQgUkVBRE1FLm1wYzg1eHhhZHMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVuIDIwMDQ6CiAgUmVtb3ZlIG9ic29sZXRlIEFkZGVySUkgcG9ydCB3aGljaCB3YXMgc3VwZXJzZWRlZCBieSB1bmlmaWVkCiAgQWRkZXJJSS9BZGRlcjg3eCBwb3J0CgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNiBKdW4gMjAwNDoKICBGaXggZ2NjLTMuMy4zIHdhcm5pbmdzIGZvciBzbWM5MTExMS5jCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDIgSnVsIDIwMDQ6CiAgLSBGaXggYnVnIGluIDQwNSBldGhlcm5ldCBkcml2ZXI7IGFsbG9jYXRlZCBkYXRhIG5vdCBjbGVhcmVkIQogIC0gRml4IHByb2JsZW0gaW4gNDA1IGkyYyBkcml2ZXI7IGRvbid0IHRyeSB0byBwcmludCB3aXRob3V0IGNvbnNvbGUhCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTEgSnVuIDIwMDQ6CiAgUmVtb3ZlIGRlYnVnIGNvZGUgZnJvbSAnYm9hcmQvbHBkN2E0MHgvZmxhc2guYycKCiogUGF0Y2ggYnkgQW5kcmVhIE1hcnNvbiwgMTEgSnVuIDIwMDQ6CiAgVXBkYXRlIGZvciBQUENoYW1lbGVvbiBib2FyZDoKICAtIHN1cHBvcnQgZm9yIFN5c0NsayBAIDI1TUh6CiAgLSBzdXBwb3J0IGZvciBTaWxpY29uIE1vdGlvbiBTTTcxMiBWR0EgY29udHJvbGxlcgogIC0gc29tZSBjbGVhbiB1cHMKCiogUGF0Y2hlcyBieSBSaWNoYXJkIFdvb2RydWZmLCAxMCBKdW4gMjAwNDoKICAtIGZpeCBwcm9ibGVtcyB3aXRoIGV4YW1wbGVzL3N0dWJzLmMgZm9yIEdDQyA+PSAzLjQKICAtIGZpeCBwcm9ibGVtcyB3aXRoIGdkIGluaXRpYWxpemF0aW9uCgoqIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDE3IE1heSAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFNhbXN1bmcgUzNDNDUxMEIgQ1BVIChBUk03dGRtaSBiYXNlZCBTb0MpCiAgLSBBZGQgc3VwcG9ydCBmb3IgRVNQRC1JbmMuIEVWQjQ1MTAgQm9hcmQKCiogUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDExIE1heSAyMDA0OgogIEZpeCBmb3IgTVBDODI0NSAtIHJlYWRpbmcgUFBDIE1lbW9yeSBmcm9tIGFub3RoZXIgZGV2aWNlIHdpdGggdGhlCiAgUFBDIGFzIFBDSSB0YXJnZXQgZGV2aWNlIGNvcnJ1cHRzIGRhdGEgZHVlIHRvIGludGVyZW5hbCBoYXJkd2FyZQogIGJ1ZmZlcmluZy4KCiogRml4ICJjbHMiIGNvbW1hbmQgd2hlbiB1c2VkIHdpdGggc3BsYXNoIHNjcmVlbgoKKiBJbmNyZWFzZSBORlMgZG93bmxvYWQgdGltZW91dCAobm93IDEgbWluIC0gMTAgc2VjIGlzIHRvIHNob3J0IGZvciBhCiAgc2xvdyBkb3dubG9hZCBvZiBhIGJpZyBpbWFnZSkKCiogQWRkICJjbHMiIGZ1bmN0aW9uIHRvIE1QQzgyMyBMQ0QgZHJpdmVyIHNvIHdlIGNhbiByZWluaXRpYWxpemUgdGhlCiAgZGlzcGxheSBldmVuIGFmdGVyIHNob3dpbmcgYSBiaXRtYXAKCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwNCBKdW4gMjAwNDoKICAtIEREUiBSYW0gc3VwcG9ydCBmb3IgUE01MjAgKE1QQzUyMDApCiAgLSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgZmxhc2ggdHlwZXMgKFBNNTIwKQogIC0gVVNCIC8gSURFIC8gQ0YtQ2FyZCAvIERpc2tPbkNoaXAgc3VwcG9ydCBmb3IgUE01MjAKICAtIDggYml0IGJvb3Qgcm9tIHN1cHBvcnQgZm9yIFBNNTIwL0NFNTIwCiAgLSBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBNaWNyb1N5cyBDUEM0NSBib2FyZCAoTVBDODI0NSkKICAtIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIENQQzQ1CiAgLSBzdXBwb3J0IG9mIG5ldyBmbGFzaCB0eXBlICgyOEYxNjBDM1QpIGZvciBDUEM0NQoKKiBGaXggZmxhc2ggcGFyYW1ldGVycyBwYXNzZWQgdG8gTGludXggZm9yIFBQQ2hhbWVsZW9uIGJvYXJkCgoqIFJlbW92ZSBldGhfaW5pdCgpIGZyb20gbGliX2FybS9ib2FyZC5jOyBpdCdzIGRvbmUgaW4gbmV0Lm5ldC5jLgoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDEwIEp1biAyMDA0OgogIGZpeCBzdXBwb3J0IGZvciBMb2dpYyBTREstTEg3QTQwNCBib2FyZCBhbmQgY2xlYW4gdXAgdGhlCiAgTEg3QTQwNCByZWdpc3RlciBtYWNyb3MuCgoqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMTAgSnVuIDIwMDQ6CiAgTW9kaWZ5IGNvZGUgdG8gc2VsZWN0IGNvcnJlY3Qgc2VyaWFsIGNsb2NrIG9uIFNhbmRwb2ludDgyNDUKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgSzMgc3RyYXRhIGZsYXNoLgoKKiBQYXRjaCBieSBUaG9tYXMgQnJhbmQsIDEwIEp1biAyMDA0OgogIEZpeCAibG9hZHMiIGNvbW1hbmQgb24gREsxUzEwIGJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciA4TUIgZmxhc2ggU0lNTSBhbmQgSkZGUzIgZmlsZSBzeXN0ZW0gb24KICBNb3Rvcm9sYSBGQURTIGJvYXJkIGFuZCBpdHMgZGVyaXZhdGl2ZXMgKE1QQzg2eEFEUywgTVBDODg1QURTKS4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEFuYWxvZ3VlJk1pY3JvIEFkZGVyODd4IGFuZCB0aGUgb2xkZXIgQWRkZXJJSSBib2FyZC4KCiogUGF0Y2ggYnkgTWluZy1MZW4gV3UsIDA5IEp1biAyMDA0OgogIEFkZCBzdXBwcG9ydCBmb3IgTUM5MzI4IChEYXJnb25iYWxsKSBDUFUgYW5kIE1vdG9yb2xhIE1YMUFEUyBib2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZywgMDkgSnVuIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZAogIC0gVXBkYXRlIEZMQVNIIGRyaXZlciBmb3IgNCpBTTI5REwzMjNEQjkwVkkKICAtIEFkZCBvcHRpb24gY29uZmlndXJhdGlvbiBvZiBDRkdfRU5WX0lTX0lOX05WUkFNIG9uIFJQWGxpdGVfRFcgYm9hcmQKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDggSnVuZSAyMDA0OgogIC0gTWFrZSBNUEM1MjAwIGJvYXJkcyBldmFsdWF0ZSB0aGUgU1ZSIHRvIHByaW50IHByb2Nlc3NvciBuYW1lIGFuZAogICAgdmVyc2lvbiBpbiBjaGVja2NwdSgpIChjcHUvbXBjNXh4eC9jcHUuYykuCgoqIFBhdGNoIGJ5IEthaS1Vd2UgQmxvZW0sIDA2IE1heSAyMDA0OgogIEZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBjcmFtZnMgY29kZQoKKiBQYXRjaCBieSBUb20gQXJtaXN0ZWFkLCAwNCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTUFYNjkwMCBSVEMKCiogUGF0Y2hlcyBieSBMYWRpc2xhdiBNaWNobCwgMDMgSnVuIDIwMDQ6CiAgLSBmaXggY2ZpX2ZsYXNoLmMgb24gTEUgc3lzdGVtcwogIC0gbGV0ICdtYWtlIG1ycHJvcGVyJyBkZWxldGUgdS1ib290LmltZyBhcyB3ZWxsCiAgLSB0dXJuIHByaW50ZiBpbnRvIGRlYnVnIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAyOCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgRXh5cyBYU0VuZ2luZSBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBNYXkgMjAwNDoKICBGaXggYSBNUEM1eHh4IEkyQyB0aW1pbmcgaXNzdWUgaW4gaTJjX3Byb2JlKCkuCgoqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI3IE1heSAyMDA0OgogIEZpeCBib2FyZF9pbml0X2YoKSBmb3IgZGJhdTF4MDAgYm9hcmQuCgoqIFBhdGNoIGJ5IEltcmUgRGVhaywgMjYgTWF5IDIwMDQ6CiAgT24gT01BUDE2MTAgcGxhdGZvcm1zIGNoZWNrIGlmIGJvb3RpbmcgZnJvbSBSQU0oQ1MwKSBvciBmbGFzaChDUzMpLgogIFNldCBmbGFzaCBiYXNlIGFjY29yZGluZ2x5LCBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gZG8gb3Igc2tpcCBib2FyZAogIHNwZWNpZmljIHNldHVwIHN0ZXBzLgoKKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMjYgTWF5IDIwMDQ6CiAgQWRkIG1pc3NpbmcgZGVmaW5lIGluIGluY2x1ZGUvYXNtLW02OGsvZ2xvYmFsX2RhdGEuaAoKKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMjUgTWF5IDIwMDQ6CiAgQWRkIG1pc3NpbmcgZnVuY3Rpb25zIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBpbiBsaWJfbTY4ay90aW1lLmMKCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAyNCBNYXkgMjAwNDoKICBmaXggU0RSQU0gaW5pdGlhbGl6YXRpb24gZm9yIExQRDdBNDAwIGJvYXJkLgoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAyMCBNYXkgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgSW50ZXJwaGFzZSBpU1BBTiBib2FyZHMuCgoqIFBhdGNoZXMgYnkgUGF1bCBSdWhsYW5kLCAxNyBNYXkgMjAwNDoKICAtIEFkZCBJL08gZnVuY3Rpb25zIHRvIHRoZSBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgdG8gc3VwcG9ydCB0aGUKICAgIExvZ2ljIExQRDdBNDB4IGJvYXJkcy4KICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTG9naWMgWm9vbSBMSDdBNDB4IGJhc2VkIFNESyBib2FyZChzKSwKICAgIHNwZWNpZmljYWxseSB0aGUgTFBEN0E0MDAuCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNSBNYXkgMjAwNDoKICAtIGNhbGwgTUFDIGFkZHJlc3MgcmVhZGluZyBjb2RlIGFsc28gZm9yIFNNU0M5MUMxMTE7CiAgLSBtYWtlIFNNU0M5MUMxMTEgdGltZW91dCBjb25maWd1cmFibGUsIHJlbW92ZSBkdXBsaWNhdGUgY29kZQogIC0gZml4IGdldF90aW1lcigpIGZvciBQWEEKICAtIHVwZGF0ZSBkb2MvUkVBRE1FLkpGRlMyCiAgLSB1c2UgImJvb3RmaWxlIiBlbnYgdmFyaWFibGUgYWxzbyBmb3IgamZmczIKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTQgTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0I0NzIgYm9hcmQgKDhNQiBGbGFzaCBSZXYpCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDE0IE1heSAyMDA0OgogIC0gZmxhc2guaDogbW9yZSBmbGFzaCB0eXBlcyBhZGRlZAogIC0gaW1tYXBfODI2MC5oOiBzb21lIGJpdHMgYWRkZWQgKHVzZWZ1bCBmb3IgUk1JSSkKICAtIGNtZF9jb25pbmZvLmM6IHR5cG8gY29ycmVjdGVkLCBwcmludGYgLT4gcHV0cwogIC0gcmVkdWNlZCBzaXplIGJ5IHJlcGxhY2luZyBzcGFjZXMgd2l0aCB0YWIKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMyBNYXkgMjAwNDoKICBBZGQgJ2ltZ2V4dHJhY3QnIGNvbW1hbmQ6IGV4dHJhY3Qgb25lIHBhcnQgb2YgYSBtdWx0aSBmaWxlIGltYWdlLgoKKiBQYXRjaGVzIGJ5IEpvbiBMb2VsaWdlciwgMTEgTWF5IDIwMDQ6CiAgRHluYW1pY2FsbHkgaGFuZGxlIFJFVjEgYW5kIFJFVjIgTVBDODV4eCBwYXJ0cy4KICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KS4KICBOZXcgY29uc2lzdGVudCBtZW1vcnkgbWFwIGFuZCBMb2NhbCBBY2Nlc3MgV2luZG93IGFjcm9zcyBNUEM4NXh4IGxpbmUuCiAgTmV3IENDU1JCQVIgYXQgMHhFMDAwXzAwMDAgbm93LgogIEFkZCBSQVBJRCBJL08gbWVtb3J5IG1hcC4KICBOZXcgbWVtb3J5IG1hcCBpbiBSRUFETUUuTVBDODV4eGFkcwogICAgKEt1bWFyIEdhbGEsIDEwLU1heS0yMDA0KQogIEJldHRlciBib2FyZCBhbmQgQ1BVIGlkZW50aWZpY2F0aW9uIG9uIE1QQzg1eHggYm9hcmRzIGF0IGJvb3QuCiAgICAoSm9uIExvZWxpZ2VyLCAxMC1NYXktMjAwNCkKICBTRFJBTSBjbG9jayBjb250cm9sIGZpeGVzIG9uIE1QQzg1NDBBRFMgJiBNUEM4NTYwIGJvYXJkcy4KICBTb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTVBDODU0MEFEUyAmIE1QQzg1NjBBRFMgY2xlYW5lZCB1cC4KICAgIChKaW0gUm9iZXJ0c29uLCAxMC1NYXktMjAwNCkKICBSZXdyaXRlIG9mIHRoZSBNUEM4NXh4IFRocmVlIFNwZWVkIEV0aGVybmV0IENvbnRyb2xsZXIgKFRTRUMpIGRyaXZlci4KICBTdXBwb3J0cyBtdWx0aXBsZSBQSFlzLgogICAgKEFuZHkgRmxlbWluZywgMTAtTWF5LTIwMDQpCiAgU29tZSBSRUFETUUuTVBDODV4eGFkcyB1cGRhdGVzLgogICAgKEt1bWFyIEdhbGEsIDEwLU1heS0yMDA0KQogIENvcHlyaWdodCB1cGRhdGVzIGZvciAiRnJlZXNjYWxlIgogICAgKEFuZHkgRmxlbWluZywgMTAtTWF5LTIwMDQpCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDExIE1heSAyMDA0OgogIEFkZCBmbGFzaCBzdXBwb3J0IGZvciBTVCBNMjlXMDQwQgogIFJlZHVjZSBKU0Ugc3BlY2lmaWMgZmxhc2guYyB0byByZW1vdmUgZGVhZCBjb2RlLgoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMDQgTWF5IDIwMDQ6CiAgRml4IGNsZWFyX2JzcyBjb2RlIGZvciBBUk0gc3lzdGVtcyAoYWxsIGV4Y2VwdCBzM2M0NGIwIHdoaWNoCiAgZG9lc24ndCBjbGVhciBCU1MgYXQgYWxsPykKCiogRml4ICJwaW5nIiBwcm9ibGVtIG9uIElOQy1JUCBib2FyZC4gU3RyYW5nZSBwcm9ibGVtOgogIFNvbWV0aW1lcyB0aGUgc3RvcmUgd29yZCBpbnN0cnVjdGlvbiBoYW5ncyB3aGlsZSB3cml0aW5nIHRvIG9uZSBvZgogIHRoZSBTd2l0Y2ggcmVnaXN0ZXJzLCBidXQgb25seSBpZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyAxNi1ieXRlCiAgYWxpZ25lZC4gTW92aW5nIHRoZSBpbnN0cnVjdGlvbiBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc29tZWhvdwogIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkuCgoqIFBhdGNoIGJ5IFJpc2hpIEJoYXR0YWNoYXJ5YSwgMDggTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVA1OTEyIE9TSyBCb2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZyBNYXksIDA3IE1heSAyMDA0OgogIEZpeCB0eXBvIG9mIFVQTSB0YWJsZSBmb3Igcm11IGJvYXJkCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNSBNYXkgMjAwNDoKICAtIEludHJhY29tIGJvYXJkIHVwZGF0ZS4KICAtIEFkZCBDb2RlYyBQT1NULgoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIHNlY29uZCBFdGhlcm5ldCBpbnRlcmZhY2UgZm9yIHRoZSAnUFBDaGFtZWxlb24nCiAgYm9hcmQuCgoqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDMwIEFwciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBPTUFQNzMwIFBlcnNldXMyIERldmVsb3BtZW50IGJvYXJkCgoqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CiAgRml4IGZsYXNoIGNoaXAtc2VsZWN0IChPUjApIG9wdGlvbiByZWdpc3RlciBzZXR0aW5nIG9uIEZBRFMgYm9hcmRzLgoKKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgogIFJlcG9ydCBNSUkgbmV0d29yayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmcgcHJvcGVybHkgd2hlbgogIGF1dG8tbmVnb3RpYXRlIGlzIG5vdCBlbmFibGVkLgoKKiBQYXRjaCBieSBKYXJyZXR0IFJlZGQsIDI5IEFwciAyMDA0OgogIEZpeCBoYW5nIG9uIHJlc2V0IG9uIE9jb3RlYSBib2FyZCBkdWUgdG8gZmxhc2ggaW4gd3JvbmcgbW9kZS4KCiogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMjkgQXByIDIwMDQ6CiAgYWRkIE1BQyBhZGRyZXNzIGRldGVjdGlvbiB0byBzbWM5MTExMSBkcml2ZXIKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyOCBBcHIgMjAwNDoKICBmaXggdHlwbyBpbiBsaWJfYXJtL2JvYXJkLmMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMjAgQXByIDIwMDQ6CiAgLSBSRUFETUUgdXBkYXRlOiBhZGQgQ09ORklHX0NTQjI3MiBhbmQgY3NiMjcyX2NvbmZpZwogIC0gYWRkIGRlc2NyaXB0aW9ucyBmb3Igc29tZSBNSUkvUEhZIG9wdGlvbnMsIENPTkZJR19JMkNGQVNULCBhbmQKICAgIGkyY2Zhc3QgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgQXByIDIwMDQ6CiAgLSBSZW5hbWUgRFVFVF9BRFMgdG8gTVBDODg1QURTCiAgLSBSZW5hbWUgQ09ORklHX0RVRVQgdG8gQ09ORklHX01QQzg4NV9GQU1JTFkKICAtIFJlbmFtZSBDT05GSUdfODY2X2V0X2FsIHRvIENPTkZJR19NUEM4NjZfRkFNSUxZCiAgLSBDbGVhbiB1cCBGQURTIGZhbWlseSBwb3J0IHRvIHVzZSB0aGUgbmV3IGRlZmluZXMKCiogRml4IFBDSSBzdXBwb3J0IG9uIENQQzQ1IGJvYXJkCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjUgQXByIDIwMDQ6CiAgQWRkIE5pb3MgR0RCL0pUQUcgQ29uc29sZSBzdXBwb3J0OgogIC0gQWRkIHN0dWJzIHRvIHN1cHBvcnQgZ2RiIHZpYSBKVEFHLgogIC0gQWRkIHN1cHBvcnQgZm9yIGNvbnNvbGUgb3ZlciBKVEFHLgogIC0gTWlub3IgY2xlYW51cC4KCiogQWRkIHN1cHBvcnQgZm9yIENBVGNlbnRlciBib2FyZCAoYmFzZWQgb24gUFBDaGFtZWxlb24gTUUgbW9kdWxlKQoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMiBNYXkgMjAwNDoKICBVc2luZyBleHRlcm5hbCB3YXRjaGRvZyBmb3IgS1VQNCBib2FyZHMgaW4gbXBjOHh4L2NwdS5jOwogIGxvYWRfc2VybnVtX2V0aGFkZHIoKSBmb3IgS1VQNCBib2FyZHMgaW4gbGliX3BwYy9ib2FyZC5jOwogIHZhcmlvdXMgY2hhbmdlcyB0byBLVVA0IGJvYXJkIHNwZWNpZmljIGZpbGVzCgoqIEZpeCBtaW5vciBuZXR3b3JrIHByb2JsZW0gb24gTVBDNTIwMDogbmVlZCBzb21lIGRlbGF5IGJldHdlZW4KICByZXNldHRpbmcgdGhlIFBIWSBhbmQgc2VuZGluZyB0aGUgZmlyc3QgcGFja2V0LiBJbXBsZW1lbnRlZCBpbiBhCiAgIm5hdHVyYWwiIHdheSBieSBpbnZva2luZyB0aGUgUEhZIHJlc2V0IGFuZCBpbml0aWFsaXphdGlvbiBjb2RlCiAgb25seSBvbmNlIGFmdGVyIHBvd2VyIG9uIHZzLiBlYWNoIHRpbWUgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLgoKKiBBZGQgc29tZSBsaW1pdGVkIHN1cHBvcnQgZm9yIGxvdy1zcGVlZCBkZXZpY2VzIHRvIFNMODExIFVTQiBjb250cm9sbGVyCiAgKGF0IGxlYXN0ICJ1c2IgcmVzZXQiIG5vdyBwYXNzZXMgc3VjY2Vzc2Z1bGx5IGFuZCAidXNiIGluZm8iIGRpc3BsYXlzCiAgY29ycmVjdCBpbmZvcm1hdGlvbikKCiogQ2hhbmdlIGluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlczogaW5pdGlhbGl6ZQogIG9uLWNoaXAgaW50ZXJmYWNlcyBiZWZvcmUgZXh0ZXJuYWwgY2FyZHMuCgoqIEZpeCBtZW1vcnkgbGVhayBpbiB0aGUgTkFORC1zcGVjaWZpYyBKRkZTMiBjb2RlCgoqIEZpeCBTTDgxMSBVU0IgY29udHJvbGxlciB3aGVuIGF0dGFjaGVkIHRvIGEgVVNCIGh1YgoKKiBGaXggY29uZmlnIG9wdGlvbiBzcGVsbGluZyBpbiBQTTUyMCBjb25maWcgZmlsZQoKKiBGaXggUEhZIGRpc2NvdmVyeSBwcm9ibGVtIGluIGNwdS9tcGM4eHgvZmVjLmMgKGludHJvZHVjZWQgYnkKICBwYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAzMCBNYXIgMjAwNCkKCiogRml4IG1pbm9yIE5BTkQgSkZGUzIgcmVsYXRlZCBpc3N1ZQoKKiBGaXhlcyBmb3IgU0w4MTEgVVNCIGNvbnRyb2xsZXI6CiAgLSBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgYnJva2VuIG1lbW9yeSBzdGljawogIC0gaW1wcm92ZSBlcnJvciBoYW5kbGluZwoKKiBJbmNyZWFzZSBwYWNrZXQgc2VuZCB0aW1lb3V0IHRvIDEgbXMgaW4gY3B1L21wYzh4eC9zY2MuYyB0byBiZXR0ZXIKICBjb3BlIHdpdGggY29uZ2VzdGVkIG5ldHdvcmtzLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjMgQXByIDIwMDQ6CiAgRml4IFZTQy9DSVMgODIwMSBwaHkgZGVzY3JhbWJsZXIgaW50ZXJvcGVyYWJpbGl0eSB0aW1pbmcgZHVlIHRvCiAgZXJyYXRhIGZyb20gVml0ZXNzZSBTZW1pY29uZHVjdG9yLgoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMjIgQXByIDIwMDQ6CiAgRml4IGV0aGVybmV0IGNvbmZpZ3VyYXRpb24gZm9yICJ2ZXJzYXRpbGUiIGJvYXJkCgoqIFBhdGNoIGJ5IEtzaGl0aWogR3VwdGEsIDIxIEFwciAyMDA0OgogIFJlbW92ZSBidXN5IGxvb3AgYW5kIHVzZSBNUFUgdGltZXIgZnIgdXNsZWVwKCkgb24gT01BUDE1MTAvMTYxMCBib2FyZHMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6CiAgRml4IGEgYnVnIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyOgogIFRoZSBNSUkgaW50ZXJmYWNlIGlzIG5vdyBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBQSFkuCgoqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTkgQXByIDIwMDQ6CiAgVXNlIFUtYm9vdCdzIG1paXBoeS5oIGZvciBQSFkgcmVnaXN0ZXIgbmFtZXMsIHJhdGhlciB0aGFuCiAgaW50cm9kdWNpbmcgYSBuZXcgaGVhZGVyIGZpbGUuCgoqIFVwZGF0ZSBwY2lfaWRzLmggZnJvbSBsaW51eC0yLjQuMjYKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTkgQXByIDIwMDQ6CiAgRml4IHByb2JsZW0gY2F1c2UgYnkgVkxBTiBmdW5jdGlvbiBvbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZQogIHdpdGhvdXQgVkxBTiBlbnZpcm9ubWVudAoKKiBDbGVhbiB1cCB0aGUgVFFNOHh4X1lZTUh6IGNvbmZpZ3VyYXRpb25zOyBhbGxvdyB0byB1c2UgdGhlIHNhbWUKICBiaW5hcnkgaW1hZ2UgZm9yIGFsbCBjbG9jayBmcmVxdWVuY2llcy4gSW1wbGVtZW50IHJ1bi10aW1lCiAgb3B0aW1pemF0aW9uIG9mIGZsYXNoIGFjY2VzcyB0aW1pbmcgYmFzZWQgb24gdGhlIGFjdHVhbCBidXMKICBmcmVxdWVuY3kuCgoqIE1vZGlmeSBLVVA0WCBib2FyZCBjb25maWd1cmF0aW9uIHRvIHVzZSBTTDgxMSBkcml2ZXIgZm9yIFVTQiBtZW1vcnkKICBzdGlja3MgKGluY2x1ZGluZyBGQVQgLyBWRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCkKCiogQWRkIFNMODExIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IKCiogQWRkIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cgZGVzcmlwdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE5IEFwciAyMDA0OgogIEFsbG93IHRvIHVzZSBzaGVsbCBzdHlsZSBzeW50YXggKGkuIGUuICR7dmFyfSApIHdpdGggc3RhbmRhcmQgcGFyc2VyLgogIE1pbm9yIHBhdGNoZXMgZm9yIEludHJhY29tIGJvYXJkcy4KCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDE5IEFwciAyMDA0OgogIGNsZWFudXAgc3VwcG9ydCBmb3IgQ0YvSURFIG9uIFBDTUNJQSBmb3IgUFhBMjVYCgoqIFRlbXBvcmFyaWx5IGRpc2FibGVkIEpvaG4gS2VybCdzIGV4dGVuZGVkIE1JSSBjb21tYW5kIGNvZGUgYmVjYXVzZQogICJtaWl2YWxzLmgiIGlzIG1pc3NpbmcKCiogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxMyBBcHIgMjAwNDoKICAtIFJlbW92ZSBDUzAgY2hpcCBzZWxlY3QgdGltaW5nIHNldHRpbmcgZnJvbSBjcHUvbXBjNXh4eC9zdGFydC5TCiAgLSBBZGQgc3luYyBpbnN0cnVjdGlvbnMgdG8gSWNlQ3ViZSBTRFJBTSBpbml0IGNvZGUKICAtIE1vdmUgU0RSQU0gY2hpcCBjb25zdGFudHMgaW50byBzZXBlcmF0ZSBpbmNsdWRlIGZpbGVzCiAgLSBVbmlmeSBERFIgYW5kIFNEUiBpbml0aWFsaXphdGlvbiBjb2RlCiAgLSBVbmlmeSBhbGwgSWNlQ3ViZSAoTGl0ZTV4eHgpIHRhcmdldCBuYW1lcwoKKiBQYXRjaCBieSBKb2huIEtlcmwsIDE2IEFwciAyMDA0OgogIEVuYWJsZSByYW5nZXMgaW4gbWlpIGNvbW1hbmQsIGUuZy4gbWlpIHJlYWQgMC0xZiAwIG9yCiAgbWlpIHJlYWQgNC03IDE4LTFhLiAgQWxzbyBhZGQgbWlpIGR1bXAgc3ViY29tbWFuZCBmb3IKICBwcmV0dHktcHJpbnRpbmcgc3RhbmRhcmQgcmVncyAwLTUuCgoqIFBhdGNoIGJ5ICBTdGVwaGVuIFdpbGxpYW1zLCAxNiBBcHJpbCAyMDA0OgogIGZpeCB0eXBvIGluIEpTRS5oOyB1cGRhdGUgTUFJTlRBSU5FUlMKCiogUGF0Y2ggYnkgTWF0dGhldyBTLiBNY0NsaW50b2NrLCAxNCBBcHIgMjAwNDoKICBmaXggaW5pdGRyYW0gZnVuY3Rpb24gZm9yIHV0eDgyNDUgYm9hcmQKCiogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDE0IEFwciAyMDA0OgogIHVzZSBBVEFHX0lOSVRSRDIgaW5zdGVhZCBvZiBkZXByZWNhdGVkIEFUQUdfSU5JVFJEIHRhZwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMTggQXByIDIwMDQ6CiAgcHJvdmlkZSB0aGUgSURFIFJlc2V0IEZ1bmN0aW9uIGZvciBFTUsgNTIwMCBib2FyZHMKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTIgQXByIDIwMDQ6CiAgZml4IHBjaV9ob3NlX3dyaXRlX2NvbmZpZ197Ynl0ZSx3b3JkfV92aWFfZHdvcmQgcHJvYmxlbXMKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxMiBBcHIgMjAwNDoKICBVcGRhdGUgbWF4IFJBTSBzaXplIGZvciBkZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDggQXByIDIwMDQ6CiAgQWRkIFRMQiBlbnRyeSBmb3Igc2Vjb25kIERJTU0gc2xvdCBvbiBvY290ZWEKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggQXByIDIwMDQ6CiAgYWRkIFJUTDgxNjkgbmV0d29yayBkcml2ZXIKCiogUGF0Y2ggYnkgRGFuIE1hbGVrLCAwNyBBcHIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBSUEMvU1R4IEdQMywgTW90b3JvbGEgODU2MCBib2FyZAogIC0gVXBkYXRlIDg1eHggVFNFQyBkcml2ZXIgc28gaXQgc2VhcmNoZXMgTUlJIGZvciBmaXJzdCBhdmFpbGFibGUgUEhZCiAgICBhbmQgdXNlcyB0aGF0IG9uZS4KICAtIEFkZCBmdW5jdGlvbnMgdG8gc3VwcG9ydCBjb25zb2xlIE1JSSBjb21tYW5kcy4KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDQ6CiAgTW92ZSBpbml0aWFsaXphdGlvbiBvZiBiaV9paWNfZmFzdFtdCiAgZnJvbSBib2FyZF9pbml0X2YoKSB0byBib2FyZF9pbml0X3IoKQoKKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKICBDbGVhbnVwIG1pY3JvYmxhemUgcG9ydAoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IEFwciAyMDA0OgogIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIERlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMDYgQXByIDIwMDQ6CiAgLSBGaXggc29tZSBQQ0kgcHJvYmxlbXMgb24gdGhlIE1QQzgyNjZBRFMgYm9hcmQKICAtIEZpeCB0aGUgbG9jYXRpb24gb2Ygc29tZSBQQ0kgZW50cmllcyBpbiB0aGUgaW1tYXAgc3RydWN0dXJlCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIG1pY3JvYmxhemUgcHJvY2Vzc29ycwogIC0gYWRkIHN1cHBvcnQgZm9yIEF0bWFya1RlY2hubyAic3V6YWt1IiBib2FyZAoKKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiBmbGFzaAoKKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIEpGRlMyIE5BTkQgc3VwcG9ydC4KCiogQWRkZWQgc3VwcG9ydCBmb3IgSkZGUzIgZmlsZXN5c3RlbSAocmVhZC1vbmx5KSBvbiB0b3Agb2YgTkFORCBmbGFzaAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTYgQXByIDIwMDQ6CiAgTEJBNDggZml4ZXMKCiogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgQXByIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgYSBuZXcgdmVyc2lvbiBvZiBhbiBJbnRyYWNvbSBib2FyZCBhbmQgZml4CiAgICB2YXJpb3VzIG90aGVyIHRoaW5ncyBvbiBvdGhlcnMuCiAgLSBhZGQgdmVyaWZ5IHN1cHBvcnQgdG8gdGhlIGNyYzMyIGNvbW1hbmQgKGRlZmluZQogICAgQ09ORklHX0NSQzMyX1ZFUklGWSB0byBlbmFibGUgaXQpCiAgLSBmaXggRkVDIGRyaXZlciBmb3IgTVBDOHh4IHN5c3RlbXM6CiAgICAxLiBmaXggY29tcGlsYXRpb24gcHJvYmxlbXMgZm9yIGJvYXJkcyB0aGF0IHVzZSBkeW5hbWljCiAgICAgICBhbGxvY2F0aW9uIG9mIERQUkFNCiAgICAyLiBzaHV0IGRvd24gRkVDIGFmdGVyIG5ldHdvcmsgdHJhbnNmZXJzCiAgLSBIVVNIIHBhcnNlciBmaXhlczoKICAgIDEuIEEgbmV3IHRlc3QgY29tbWFuZCB3YXMgYWRkZWQuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YKICAgICAgIHRoZSBvbmUgaW4gdGhlIGJvdXJuZSBzaGVsbC4KICAgIDIuIEEgbmV3IGV4aXQgY29tbWFuZCB3YXMgYWRkZWQgd2hpY2ggdGVybWluYXRlcyB0aGUgY3VycmVudAogICAgICAgZXhlY3V0aW5nIHNjcmlwdC4KICAgIDMuIEZpeGVkIGhhbmRpbmcgb2YgJD8gKGV4aXQgY29kZSBvZiBsYXN0IGV4ZWN1dGVkIGNvbW1hbmQpCiAgLSBGaXggc29tZSBjb21waWxlIHByb2JsZW1zOwogICAgYWRkICJvbmNlIiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgbmV0cmV0cnkgdmFyaWFibGUKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAwMiBBcHIgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgQXNzYWJldCBib2FyZAoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwMSBBcHIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgUGljdHVyZSBFbGVtZW50cyBKU0UgYm9hcmQKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDAxIEFwciAyMDA0OgogIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgUFhBIHN5c3RlbXMuCgoqIFBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0OgogIC0gYWRkIGF1dG8tY29tcGxldGUgc3VwcG9ydCB0byB0aGUgVS1Cb290IENMSQogIC0gYWRkIHN1cHBvcnQgZm9yIE5FVFRBIGFuZCBORVRQSE9ORSBib2FyZHM7IGZpeCBORVRWSUEgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRXBzb24gMTU2eCBzZXJpZXMgb2YgZ3JhcGhpY2FsIGRpc3BsYXlzCiAgICAoVGhlc2UgZGlzcGxheXMgYXJlIHNlcmlhbCBhbmQgbm90IHN1aXRhYmxlIGZvciB1c2luZyBhIG5vcm1hbAogICAgZnJhbWVidWZmZXIgY29uc29sZSBvbiB0aGVtKQogIC0gYWRkIGluZnJhc3RydWN0dXJlIG5lZWRlZCBpbiBvcmRlciB0byBQT1NUIGFueSBEU1BzIGluIGEgYm9hcmQKICAtIGltcHJvdmUgYW5kIGZpeCB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgTVBDOHh4IEZFQyBkcml2ZXI6CiAgICAxLiBUaGUgbmV3IDg3eCBhbmQgODh4IHNlcmllcyBvZiBwcm9jZXNzb3JzIGhhdmUgdHdvIEZFQ3MsCiAgICAgICBhbmQgdGhlIG5ldyBkcml2ZXIgc3VwcG9ydHMgdGhlbSBib3RoLgogICAgMi4gQW5vdGhlciBjaGFuZ2UgaW4gdGhlIDg3eC84OHggc2VyaWVzIGlzIHN1cHBvcnQgZm9yCiAgICAgICB0aGUgUk1JSSAoUmVkdWNlZCBNSUkpIGludGVyZmFjZS4gSG93ZXZlciBudW1lcm91cwogICAgICAgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBzaW5jZSB0aGUgUEhZcwogICAgICAgYXJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBsaW5lcy4gVGhhdCBtZWFucyB0aGF0CiAgICAgICB5b3UgaGF2ZSB0byBhZGRyZXNzIHRoZW0gY29ycmVjdGx5IG92ZXIgdGhlIE1JSQogICAgICAgaW50ZXJmYWNlLgogICAgMy4gV2Ugbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgTUlJL1JNSUkgaW50ZXJmYWNlCiAgICAgICBjb25maWd1cmF0aW9uIHRvIHdoYXQgdGhlIFBIWSByZXBvcnRzLgogIC0gRml4IHByb2JsZW0gd2hlbiByZWFkaW5ndGhlIE1JSSBzdGF0dXMgcmVnaXN0ZXIuIER1ZSB0byB0aGUKICAgIGludGVybmFsIGRlc2lnbiBvZiBtYW55IFBIWXMgeW91IGhhdmUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIKICAgIHR3aWNlLiBUaGUgcHJvYmxlbSBpcyBtb3JlIGFwcGFyZW50IGluIDEwTWJpdCBtb2RlLgogIC0gYWRkIG5ldyBtb2RlICIuamZmczJzIiBmb3IgcmVhZGluZyBmcm9tIGEgTkFORCBkZXZpY2U6IGl0IGp1c3QKICAgIHNraXBzIG92ZXIgYmFkIGJsb2Nrcy4KICAtIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIFZMQU5zICg4MDIuMXEpLCBhbmQgQ0RQIChDaXNjbwogICAgRGlzY292ZXJ5IFByb3RvY29sKQogIC0gc29tZSBtaW5vciBwYXRjaGVzIC8gY2xlYW51cAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyOCBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyIGZhbWlseSBpbmNsdWRpbmcgTVBDODI0Ny84MjQ4LzgyNzEvODI3MgogIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzJBRFMgZXZhbHVhdGlvbiBib2FyZCAoYW5vdGhlciBmbGF2b3VyIG9mIE1QQzgyNjBBRFMpCiAgLSBDaGFuZ2UgY29uZmlndXJhdGlvbiBtZXRob2QgZm9yIE1QQzgyNjBBRFMgZmFtaWx5CgoqIGFkZCBzdGFydHVwIGNvZGUgdG8gY2xlYXIgdGhlIEJTUyBvZiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwoKKiBGaXggaWYgLyBlbGlmIGhhbmRsaW5nIGJ1ZyBpbiBIVVNIIHNoZWxsCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzOiBSZW1vdmUgY29uZmlnLnRtcCBmaWxlcyBvbmx5IHdoZW4KICB1bmNvbmZpZ3VyaW5nIHRoZSBib2FyZAoKKiBBZGFwdCBSTVUgYm9hcmQgZm9yIGJpZ2dlciBmbGFzaCBtZW1vcnkKCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTMgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEtVUDRYIEJvYXJkCgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBNYXIgMjAwNAogIEFkZCBSZWlzZXJmcyBzdXBwb3J0CgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIwIE1hciAyMDA0CiAgLSBBZGQgYXV0by1yZWxlYXNlIGZvciBTTVNDIExBTjkxYzExMSBkcml2ZXIKICAtIEFkZCBzYXZlL3Jlc3RvcmUgb2YgUFRSIGFuZCBQTlIgcmVncyBhcyBzdWdnZXN0ZWQgaW4gZGF0YXNoZWV0CgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE5IE1hcmNoIDIwMDQKICBJbmNyZWFzZSBzcGVlZCBvZiBzZWN0b3IgcmVhZHMgZnJvbSBTeXN0ZW1BQ0UsCiAgc2hvcnRlbiBwb2xsIHRpbWVvdXQgYW5kIHJlbW92ZSBhIHVzZWxlc3MgcmVzZXQKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTkgTWFyIDIwMDQ6CiAgTWFrZSBHaWdFIFBIWSAxMDAwTWJwcyBTcGVlZC9EdXBsZXggZGV0ZWN0aW9uIGNvbmRpdGlvbmFsCiAgKENPTkZJR19QSFlfR0lHRSkKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxOCBNYXIgMjAwNDoKICBwcmV2ZW50IG1hY2hpbmUgY2hlY2tzIGR1cmluZyBhIFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIEZpeCBzdHJpbmcgY2xlYW5pbmcgaW4gSURFIGlkZW50aWZpY2F0aW9uCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIC0gVW5pZnkgdmlkZW8gbW9kZSBoYW5kbGluZyBmb3IgQ2hpcHMgJiBUZWNobm9sb2dpZXMgNjkwMDAgVmlkZW8KICAgIGNoaXAgYW5kIFNpbGljb24gTW90aW9uIFNNSSA3MTIvNzEwLzgxMCBWaWRlbyBjaGlwCiAgLSBBZGQgc2VsZWN0aW9uIG9mIHRoZSB2aWRlbyBvdXRwdXQgKENSVCBvciBMQ0QpIHZpYSAndmlkZW9vdXQnCiAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlIFNpbGljb24gTW90aW9uCiAgLSBSRUFETUUgdXBkYXRlCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIGluY2x1ZGUvY29tbW9uLmggdHlwbyBmaXgKCiogUGF0Y2hlcyBieSBUb2x1bmF5IE9ya3VuLCAxNyBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBiZC0+YmlfaWljX2Zhc3RbXSBpbml0aWFsaXphdGlvbiB2aWEgZW52aXJvbm1lbnQKICAgIHZhcmlhYmxlICJpMmNmYXN0IiAoQ09ORklHX0kyQ0ZBU1QpCiAgLSBBZGQgImkyY2Zhc3QiIHUtYm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdXBwb3J0IGZvciBjc2IyNzIKCiogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMTcgTWFyIDIwMDQ6CiAgSWdub3JlICdcMCcgY2hhcmFjdGVycyBpbiBjb25zb2xlIGlucHV0IGZvciB1c2Ugd2l0aCB0ZWxuZXQgYW5kCiAgdGVsY28gcGFkcy4KCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxNyBNYXIgMjAwNDoKICB0eXBvIGZpeCBmb3Igc3Ryc3dhYiBwcm90b3R5cGUgI2lmZGVmCgoqIFBhdGNoZXMgYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTYgTWFyIDIwMDQ6CiAgLSBzaG93IFBDSSBjbG9jayBmcmVxdWVuY3kgb24gTVBDODI2MCBzeXN0ZW1zCiAgLSBhZGQgRkNDX1BTTVJfUk1JSSBmbGFnIGZvciBIaVA3IHByb2Nlc3NvcnMKICAtIGluIGRvX2pmZnMyX2ZzbG9hZCgpLCB0YWtlIGxvYWQgYWRkcmVzcyBmcm9tIGxvYWRfYWRkciBpZiBub3Qgc2V0CiAgICBleHBsaWNpdCwgdXBkYXRlIGxvYWRfYWRkciBvdGhlcndpc2UKICAtIHJlcGxhY2VkIHByaW50ZiBieSBwdXRjL3B1dHMgd2hlbiBubyBmb3JtYXR0aW5nIGlzIG5lZWRlZAogICAgKHNtYWxsZXIgY29kZSBzaXplLCBmYXN0ZXIgZXhlY3V0aW9uKQoKKiBQYXRjaCBieSBQaGlsbGlwcGUgUm9iaW4sIDE2IE1hciAyMDA0OgogIGF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVyIGluIGxpYl9hcm0vYXJtbGludXguYwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxNSBNYXIgMjAwNDoKICBGaXggQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGRvY3VtZW50YXRpb24KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTUgTWFyIDIwMDQ6CiAgSW5pdGlhbGl6ZSBiaV9vcGJmcmVxIHRvIHJlYWwgT1BCIGZyZXF1ZW5jeSB2aWEgZ2V0X09QQl9mcmVxKCkKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgTWFyIDIwMDQ6CiAgVXBkYXRlIENSRURJVFMgJiBNQUlOVEFJTkVSUyBmaWxlcyBmb3IgUFBDNDQwR1ggJiBPY290ZWEgcG9ydAoKKiBBZGQgc3RhcnQtdXAgZGVsYXkgdG8gbWFrZSBzdXJlIHBvd2VyIGhhcyBzdGFiaWxpemVkIGJlZm9yZQogIGF0dGVtcHRpbmcgdG8gc3dpdGNoIG9uIFVTQiBvbiBTWDEgYm9hcmQuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTggTWFyIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgWE0yNTAgYm9hcmQgKFBYQTI1NSkKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTgyOCBib2FyZCAoTVBDODI4MCkKICAtIEFkZCBzdXBwb3J0IGZvciAzMiBNQiBGbGFzaCBvbiBQTTgyNS84MjYKICAtIG5ldyBTRFJBTSByZWZyZXNoIHJhdGUgZm9yIFBNODI1L1BNODI2CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTUyMCAoTVBDNTIwMCkKICAtIHJlcGxhY2VkIFF1ZXJ5IGJ5IElkZW50aWZ5IGNvbW1hbmQgaW4gQ1BVODYvZmxhc2guYwogICAgdG8gc3VwcG9ydCAyOEYxNjBGM0IKCiogRml4IHdyYXAgYXJvdW5kIHByb2JsZW0gd2l0aCB1ZGVsYXkoKSBvbiBBUk05MjBUCgoqIEFkZCBzdXBwb3J0IGZvciBNYWNyb25peCBmbGFzaCBvbiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE1IE1hciAyMDA0OgogIEZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gSURFIGlkZW50aWZpY2F0aW9uCgoqIEZpeCBwb3dlci1vZmYgb2YgTENEIGZvciBvdXQtb2YtYmFuZCB0ZW1wZXJhdHVyZXMgb24gTFdNT04gYm9hcmQKCiogUmVtb3ZlIHJlZHVuZGFuZCAjZGVmaW5lIGluIEljZUN1YmUuaAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNyBGZWIgMjAwNDoKICAtIEFkZGluZyBnZXRfdGlja3MoKSBhbmQgZ2V0X3RiY2xrKCkgZm9yIEFUOTFSTTkyMDAKICAtIE1hbnkgd2hpdGUgc3BhY2UgZml4ZXMgaW4gY3B1L2F0OTFybTkyMDAvaW50ZXJydXB0cy5jCgoqIFBhdGNoZXMgYnkgU3RldmVuIFNjaG9seiwgMjAgRmViIDIwMDQ6CiAgc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgcmVsYXRlZCBjb2RlCgoqIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMTIgTWFyIDIwMDQ6CiAgLSBGaXggR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IGZvciA0NDBHWAogIC0gQWRkIEdpZ2FiaXQgRXRoZXJuZXQgU3VwcG9ydCB0byBNSUkgUEhZIHV0aWxpdGllcwoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDEyIE1hciAyMDA0OgogIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gQmV0dGVyIHN1cHBvcnQgZm9yIHg4L3gxNiBpbXBsZW1lbnRhdGlvbnMKICAtIEFkZGVkIGZhaWx1cmUgZm9yIEFNRCBjaGlwcyBhdHRlbXB0aW5nIHRvIHVzZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQogIC0gQWRkZWQgZGVmaW5lcyBmb3IgQU1EIGNvbW1hbmQgYW5kIGFkZHJlc3MgY29uc3RhbnRzCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgTWFyIDIwMDQ6CiAgRml4IGdldF9kZW50ZnJvbWRpcigpIHRvIGNvcnJlY3RseSBoYW5kbGUgZGVsZXRlZCBkZW50cmllcwoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgogIFJlbW92ZSBoYXJkIGNvZGVkIG5ldHdvcmsgc2V0dGluZ3MgaW4gVEkgT01BUDE2MTAgSDIKICBkZWZhdWx0IGJvYXJkIGNvbmZpZwoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBBRFMgR3JhcGhpY3NDbGllbnQrIGJvYXJkLgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMSBNYXIgMjAwNDoKICAtIGFkZCBiaXRtYXAgY29tbWFuZCBhbmQgc3BsYXNoIHNjcmVlbiBzdXBwb3J0IGluIGNmYiBjb25zb2xlCiAgLSBhZGQgW29wdGlvbmFsXSBvcmlnaW4gaW4gdGhlIGJpdG1hcCBkaXNwbGF5IGNvbW1hbmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTEgTWFyIDIwMDQ6CiAgRml4IG9jb3RlYSBib2FyZCBlYXJseSBpbml0IGludGVycnVwdCBzZXR1cC4KCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTEgTWFyIDIwMDQ6CiAgUmVtb3ZlIHJlZHVuZGFuZCBjb2RlOyBhZGQgIFBDSS1zcGVjaWZpYyBiaXRzIHRvIGluY2x1ZGUvbXBjODI2MC5oCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMDkgTWFyIDIwMDQKICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgU1NWIEFETlAvRVNDMSAoTmlvcyBTb2Z0Y29yZSkKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCA5IE1hciAyMDA0OgogIGZpeCByZWNlbnQgYnVpbGQgZmFpbHVyZSBmb3IgU0ExMTAwIHRhcmdldAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBNYXIgMjAwNDoKICBTdXBwb3J0IG5hdGl2ZSBpbnRlcnJ1cHQgbW9kZSBmb3IgdGhlIElCTTQ0MEdYLgogIFByZXZpb3VzbHkgaXQgd2FzIHJ1bm5pbmcgaW4gNDQwR1AgY29tcGF0aWJpbGl0eSBtb2RlLgoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDkgTWFyIDIwMDQ6CiAgQWRkZWQgQVJNIEludGVncmF0b3IgQVAsIENQIGFuZCBWZXJzYXRpbGUgUEI5MjZFSi1TIFJlZmVyZW5jZQogIFBsYXRmb3JtIHN1cHBvcnQuCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IE1hciAyMDA0OgogIERvbid0IG92ZXJ3cml0ZSBzZXJ2ZXIgSVAgYWRkcmVzcyBvciBib290IGZpbGUgbmFtZQogIHdoZW4gdGhlIGJvb3Qgc2VydmVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKICBSZW1vdmVkIGNvbXBpbGUgdGltZSByZXN0cmljdGlvbiBvbiBDRkdfSTJDX1NQRUVEIGZvciBEUzEzMzggUlRDCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDUgTWFyIDIwMDQ6CiAgRml4IGVhcmx5IGJvYXJkIGluaXRpYWxpemF0aW9uIGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCgoqIFBhdGNoIGJ5IEVkIE9rZXJzb24sIDMgTWFyIDIwMDQ6CiAgZml4IENGSSBmbGFzaCB3cml0ZXMgZm9yIGxpdHRsZSBlbmRpYW4gc3lzdGVtcwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDEgTWFyIDIwMDQ6CiAgZ2VuZXJhbGl6ZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBNUEM1MjAwIHdpdGggYWNjb3JkaW5nCiAgY2hhbmdlcyB0byBJY2VDdWJlLmggYW5kIFRPUDUyMDAuaAogIGFkZCBBbTI5TFYyNTYgMjU2IE1CaXQgRkxBU0ggc3VwcG9ydCBmb3IgVE9QNTIwMCBib2FyZHMKICBhZGQgaW5mbyBhYm91dCBVU0IgYW5kIElERSB0byBSRUFETUUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNCBNYXIgMjAwNDoKICBGaXggcHJvYmxlbXMgd2l0aCBHQ0MgMy4zLnggd2hpY2ggY2hhbmdlZCBoYW5kbGluZyBvZiBnbG9iYWwKICB2YXJpYWJsZXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIChub3cgaW4gLmJzcyBpbnN0ZWFkIG9mCiAgLmRhdGEgYXMgYmVmb3JlKS4KCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAwMiBNYXIgMjAwNDoKICBhZGQgc3Ryc3dhYigpIHRvIGZpeCBJREUgTEJBIGNhcGFjaXR5LCBmaXJtd2FyZSBhbmQgbW9kZWwgbnVtYmVycwogIG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDIgTWFyIDIwMDQ6CiAgLSBSZW1vdmUgZ2V0X3RpY2tzKCkgZnJvbSBORlMgY29kZQogIC0gQWRkIHZlcmlmaWNhdGlvbiBvZiBSUEMgdHJhbnNhY3Rpb24gSUQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDIgTWFyIDIwMDQ6CiAgY2xlYW51cCBmb3IgSURFIGFuZCBVU0IgZHJpdmVycyBmb3IgTVBDNTIwMAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwMSBNYXIgMjAwNDoKICBPY290ZWE6CiAgLSBBZGQgSUJNIFBQQzQ0MEdYIFJlZiBQbGF0Zm9ybSBzdXBwb3J0IChPY290ZWEpCiAgICBPcmlnaW5hbCBjb2RlIGJ5IFBhdWwgUmV5bm9sZHMgPFBhdWxSZXlub2xkc0BsaHNvbHV0aW9ucy5jb20+CiAgICBBZGFwdGVkIHRvIFUtQm9vdCBhbmQgNDQwR1ggcG9ydAogIDQ0MGd4X2VuZXQuYzoKICAtIEFkZCBncmFjaW91cyBoYW5kbGluZyBvZiBhbGwgRXRoZXJuZXQgUGluIFNlbGVjdGlvbnMgZm9yIDQ0MEdYCiAgLSBBZGQgUkdNSUkgc2VsZWN0aW9uIGZvciBDaWNhZGEgQ0lTODIwMSBHaWdhYml0IFBIWQogIHBwYzQ0MC5oOgogIC0gQWRkIG5lZWRlZCBiaXQgZGVmaW5pdGlvbnMKICAtIEZpeCBmb3JtYXR0aW5nCgoqIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDEgTWFyIDIwMDQ6CiAgQWRkIFBQQzQ0MEdYIHByYmR2MCBkaXZpZGVyIHRvIGZpeCBtZW1vcnkgY2xvY2sgY2FsY3VsYXRpb24uCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjcgRmViIDIwMDQKICAtIGF2b2lkIHByb2JsZW1zIGZvciB0YXJnZXRzIHdpdGhvdXQgTkZTIGRvd25sb2FkIHN1cHBvcnQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDI3IEZlYiAyMDA0OgogIC0gQWRkZWQgTEJBNDggc3VwcG9ydCAoQ09ORklHX0xCQTQ4ICYgQ0ZHXzY0QklUX0xCQSkKICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHByaW50aW5nIGluIHZzcHJpbnRmIChDRkdfNjRCSVRfVlNQUklOVEYpCiAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBzdHJ0b3VsIChDRkdfNjRCSVRfU1RSVE9VTCkKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjcgRmViIDIwMDQ6CiAgRml4IHJhcnBib290OiBhZGQgYXV0b2xvYWQgYnkgTkZTCgoqIFBhdGNoIGJ5IERhbiBFaXNlbmh1dCwgMjYgRmViIDIwMDQ6CiAgZml4IGZsYXNoX3dyaXRlIHJldHVybiB2YWx1ZSBpbiBzYXZlZW52CgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDMKICBleHBhbmQgY29uZmlnLm1rIHRvIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmdzIG9uIE5JT1MKCiogUmVuYW1lICJCTVMyMDAzIiBib2FyZCBpbnRvICJITUkxMCIKCiogU1gxIHBhdGNoZXM6IHVzZSAic2VyaWFsIyIgZm9yIFVTQiBzZXJpYWwgIzsgdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudAogIHN0b3JhZ2U7IGF1dG8tc2V0IGNvbnNvbGUgb24gVVNCIHBvcnQgKHVzaW5nIHByZWJvb3QgY29tbWFuZCkKCiogQWRkIHN1cHBvcnQgZm9yIFNYMSBtb2JpbGUgcGhvbmU7IGFkZCBzdXBwb3J0IGZvciBVU0ItYmFzZWQgY29uc29sZQogIChlbmFibGUgd2l0aCAic2V0ZW52IHN0ZG91dCB1c2J0dHk7IHNldGVudiBzdGRpbiB1c2J0dHkiKQoKKiBGaXggTE9XQk9PVCBjb25maWd1cmF0aW9uIGZvciBNUEM1MjAwIHdpdGggRERSIG1lbW9yeQoKKiBGaXggU0RSQU0gdGltaW5ncyBmb3IgTElURTUyMDAgLyBJY2VDdWJlIGJvYXJkCgoqIEhhbmRsZSBBdXRpLU1ESVggLyBjb25uZWN0aW9uIHN0YXR1cyBmb3IgSU5DQS1JUAoKKiBGaXggVVNCIHByb2JsZW1zIHdoZW4gYXR0ZW1wdGluZyB0byByZWFkIDAgYnl0ZXMKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjYgRmViIDIwMDQ6CiAgRml4IGJyb2tlbiBjb21waWxlIGZvciBYUEVESVRFMUsgdGFyZ2V0LgoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI2IEZlYiAyMDA0OgogIEJ1ZyBmaXggZm9yIE5GUyBjb2RlIG9uIE5JT1MgdGFyZ2V0cwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyNiBGZWIgMjAwNDoKICBCcmVhayB1cCBTeXN0ZW1BQ0UgcmVhZHMgb2YgbGFyZ2UgYmxvY2sgY291bnRzCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI2IEZlYiAyMDA0CiAgYWRkIElERSBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI2IEZlYiAyMDA0OgogIGFkZCBhdXRvbG9hZCB2aWEgTkZTCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMKICBVc2Ugb2YgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGluIGJvYXJkLmMgY29uc2lzdGVudCB3aXRoIHVzZXMKICBlbHNld2hlcmUgaW4gdGhlIHNvdXJjZS4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6CiAgLSBUaW1lb3V0cyBpbiBGUEdBIGNvZGUgc2hvdWxkIGJlIGJhc2VkIG9uIENGR19IWgogIC0gTWlub3IgY2xlYW51cCBpbiBjb2RlIGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6CiAgQ2hhbmdlZCAiRGlyZWN0b3J5IEhpZXJhcmNoeSIgc2VjdGlvbiBpbiBSRUFETUUKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjUgRmViIDIwMDQ6CiAgUmVkdWNlIGNvcHkgY291bnQgaW4gbmZzX3JlYWRfcmVwbHkoKSBvZiBORlMgY29kZQoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMjQgRmViIDIwMDQ6CiAgTlM5NzUwIERldkJvYXJkIGFkZGVkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IEZlYiAyMDA0CiAgYWRkIFVTQiBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI0IEZlYiAyMDA0OgogIC0gZml4IE1JSSBjb21tYW5kcyB0byB1c2UgdmFsdWVzIGZyb20gbGFzdCBjb21tYW5kCgoqIFBhdGNoIGJ5IFRvcnN0ZW4gRGVta2UsIDI0IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgZVhhbGlvbiBwbGF0Zm9ybSAoU1BTVy04MjQwLCBGLTMwLCBGLTMwMCkKCiogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDE5IEZlYiAyMDA0OgogIEZpeGVzIGZvciBmb3IgT01BUDE2MTAgYm9hcmQ6CiAgLSBzaGlmdCBzb21lIElSUSBzcGVjaWZpYyBjb2RlIHRvIHBsYXRmb3JtLlMgZmlsZQogIC0gcmVtb3ZlIGR1cGxpY2F0ZXdhdGNoZG9nIHJlc2V0IGNvZGUgZnJvbSBzdGFydC5TCgoqIE1ha2UgQXV0by1NRElYIFN1cHBvcnQgY29uZmlndXJhYmxlIG9uIElOQ0EtSVAgYm9hcmQKCiogRml4IGxpY2Vuc2UgZm9yIG1raW1hZ2UgdG9vbAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNCBGZWIgMjAwNDoKICBVcGRhdGUgTmV0Qm9vdEZpbGVYZmVyU2l6ZSBpbiBORlMgY29kZQoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDI0IEZlYiAyMDA0OgogIGZpeCBwYWNrZXQgbGVuZ3RoIGluIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peSwgMjIgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE5GUyBmb3IgZmlsZSBkb3dubG9hZAoKKiBQYXRjaCBieSBBbmRyZWEgU2NpYW4sIDE3IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBTM0M0NEIwIHByb2Nlc3NvciBhbmQgREFWRSBCMiBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNSUkgY29tbWFuZHMgb24gQVQ5MVJNOTIwMCBib2FyZHMKICAtIHNvbWUgY2xlYW51cCBpbiBBVDkxUk05MjAwIGV0aGVybmV0IGNvZGUKCiogUGF0Y2ggYnkgUGV0ZXIgUnlzZXIsIDIwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgWGlsaW54IE1MMzAwIHBsYXRmb3JtCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTcgRmViIDIwMDQ6CiAgRml4IHdhdGNoZG9nIHN1cHBvcnQgZm9yIE5JT1MKCiogUGF0Y2ggYnkgSm9zaCBGcnltYW4sIDE2IEZlYiAyMDA0OgogIEZpeCBieXRlLXN3YXBwaW5nIGZvciBjZmlfZmxhc2guYyBmb3IgZGlmZmVyZW50IGJ1cyB3aWR0aHMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IEplYiAyMDA0OgogIFJlbW92ZSBkdXBsaWNhdGUgIkZQR0EgU3VwcG9ydCIgbm90ZXMgZnJvbSB0aGUgUkVBRE1FIGZpbGUKCiogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgMTQgRmViIDIwMDQ6CiAgLSB1cGRhdGUgYm9hcmQvZW1rIHRyZWU7IHVzZSBjb21tb24gZmxhc2ggZHJpdmVyCiAgLSBDb3JyZWN0ZWQgdGVzdGVkIGJpdHMgaW4gbWFjaGluZSBjaGVjayBleGNlcHRpb24gaW4gY3B1L21wYzV4eHgvdHJhcHMuYwogICAgW2FkYXB0ZWQgZm9yIG90aGVyIFBQQyBDUFVzIC0tIHdkXQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE00OFQwOCBvbiB0aGUgRVZBTDUyMDAgYm9hcmQgaW4gcnRjL21rNDh0NTkuYwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTMgRmViIDIwMDQ6CiAgQ2FsbCBzaG93X2Jvb3RfcHJvZ3Jlc3MoKSB3aGVuZXZlciBQT1NUICJGQUlMRUQiIGlzIHByaW50ZWQuCgoqIFBhdGNoIGJ5IE5pc2hhbnQgS2FtYXQsIDEzIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQMTYxMCBIMiBCb2FyZAogIEZpeGVzIGZvciBjcHUvYXJtOTI2ZWpzL2ludGVycnVwdC5jCgkoYmFzZWQgb24gUmljaGFyZCBXb29kcnVmZidzIHBhdGNoIGZvciBhcm05MjUsIDE2IE9jdCAwMykKICBGaXggZm9yIGEgdGltZXIgYnVnIGluIE9NQVAxNjEwIElubm92YXRvcgogIEFkZCBzdXBwb3J0IGZvciBDUzAgKFJPTSkvQ1MzIChGbGFzaCkgYm9vdCBpbiBPTUFQMTYxMCBJbm5vdmF0b3IgYW5kIEgyCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMiBGZWIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBOSU9TIHRpbWVyIHdpdGggdmFyaWFibGUgcGVyaW9kIHByZWxvYWQgY291bnRlciB2YWx1ZQogIC0gcHJlcGFyZSBQT1NUIGZyYW1ld29yayBzdXBwb3J0IGZvciBOSU9TIHRhcmdldHMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIEZlYiAyMDA0OgogIGFkZCBQT1NUIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgYm9hcmQKCiogUGF0Y2ggYnkgTGF1cmVudCBNb2hpbiwgMTAgRmViIDIwMDQ6CiAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBjb21tb24vdXNiLmMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKCiogUGF0Y2ggYnkgVGhvbWFzIEVsc3RlLCAxMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTkVUKzUwIENQVSBhbmQgTW9kTkVUNTAgYm9hcmQKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIEZlYiAyMDA0OgogIEZpeCB0eXBvcyBpbiBjZmlfZmxhc2guYwoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEwIEZlYiAyMDA0CiAgRml4ZWQgbG9uZyBkaXIgZW50cnkgc2xvdCBpZCBjYWxjdWxhdGlvbiBpbiBnZXRfdmZhdG5hbWUKCiogUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDEwIEZlYiAyMDA0OgogIGFkZCAiaXRlc3QiIGNvbW1hbmQgKG9wZXJhdG9yczogLWVxLCAtbmUsIC1sdCwgLWd0LCAtbGUsIC1nZSwgPT0sCiAgIT0sIDw+LCA8LCA+LCA8PSwgPj0pCgoqIEZpeCBwcm9ibGVtIHdpdGggc2lkZSBlZmZlY3RzIGluIG1hY3JvcyBpbiBpbmNsdWRlL3VzYi5oCgoqIFBhdGNoIGJ5IERhdmlkIEJlbnNvbiwgMTMgTm92IDIwMDM6CiAgYnVnIDg0MTM1OCAtIGZpeCBURlRQIGRvd25sb2FkIHNpemUgbGltaXQKCiogRml4aW5nIGJ1ZyA4NTA3Njg6CiAgaW1wcm9wZXIgZmx1c2hfY2FjaGUoKSBpbiBsb2FkX3NlcmlhbCgpCgoqIEZpeGluZyBidWcgODM0OTQzOgogIE1QQzg1NDAgLSBtaXNzaW5nIHZvbGF0aWxlIGRlY2xhcmF0aW9ucwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwOSBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgWGlsaW54IFN5c3RlbUFDRSBjaGlwOgogIC0gTmV3IGZpbGVzIGNvbW1vbi9jbWRfYWNlLmMgYW5kIGluY2x1ZGUvc3lzdGVtYWNlLmgKICAtIEhvb2sgc3lzdGVtYWNlIHN1cHBvcnQgaW50byBjbWRfZmF0IGFuZCB0aGUgcGFydGl0aW9uIG1hbmFnZXIKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CiAgQWRkIGJpX29wYmZyZXEgJiBiaV9paWNfZmFzdCB0byA0NDBHWCBiZF9pbmZvIGFzIG5lZWRlZCBmb3IgTGludXgKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CiAgbyA0NDBHWDoKICAgIC0gRml4IFBDSSBJbmRpcmVjdCBhY2Nlc3MgZm9yIHR5cGUgMSBjb25maWcgY3ljbGVzIHdpdGggcHBjNDQwLgogICAgLSBBZGQgcGh5bW9kZSBmb3IgNDQwIGVuZXQKICAgIC0gZml4IHBjaSBwcmUgaW5pdAogIG8gWFBlZGl0ZTFLOgogICAgLSBDaGFuZ2UgYm9hcmRfcHJlX2luaXQgdG8gYm9hcmRfZWFybHlfaW5pdF9mCiAgICAtIEFkZCB1c2VyIGZsYXNoIHRvIGJ1cyBjb250cm9sbGVyIHNldHVwCiAgICAtIEZpeCBwY2kgcHJlIGluaXQKICAgIC0gRml4IGlzX3BjaV9ob3N0IHRvIGNoZWNrIEdQSU8gZm9yIG1vbmFyY2ggYml0CiAgICAtIEZvcmNlIHhwZWRpdGUxayB0byBwY2kgY29udmVudGlvbmFsIG1vZGUgKHZpYSAjZGVmaW5lIG9wdGlvbikKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCA0IEZlYiAyMDA0OgogIC0gaGFuZGxlIHRoZSBtYWNoaW5lIGNoZWNrIHRoYXQgaXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgUENJIHNjYW5zCiAgICBvbiA4Mnh4IHByb2Nlc3NvcnMuCiAgLSBkZWZpbmUgdGhlIHJlZ2lzdGVycyB1c2VkIGluIHRoZSBJTU1SIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtLgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMyBGZWIgMjAwNDoKICBjcHUvbXBjNXh4eC9zdGFydC5TOiBjb3B5IE1CQVIgaW50byBTUFIzMTEKCiogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAzIEZlYiAyMDA0OgogIEZpeCBjb3B5ICYgcGFzdGUgZXJyb3IgaW4gY3B1L21wYzgyNjAvcGNpLmMKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI0IEphbiAyMDA0OgogIEZpeCB0eXBvIGluIGNwdS9tcGM1eHh4L3BjaV9tcGM1MjAwLmMKCiogQWRkIEF1dG8tTURJWCBzdXBwb3J0IGZvciBJTkNBLUlQCgoqIFNvbWUgY29kZSBjbGVhbnVwCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAxMCBGZWIgMjAwNDoKICBGaXhlcyBmb3IgQ29sZGZpcmUgcG9ydAoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDExIEZlYiAyMDA0OgogIEZpeCBDRkkgZmxhc2ggZHJpdmVyIHByb2JsZW1zCgoqIE1ha2Ugc3VyZSB0byB1c2UgYSBidXMgY2xvY2sgZGl2aWRlciBvZiAyIG9ubHkgd2hlbiBydW5uaW5nIFRRTTh4eE0KICBtb2R1bGVzIGF0IENQVSBjbG9jayBmcmVxdWVuY2llcyBhYm92ZSA2NiBNSHouCgoqIE9wdGltaXplIGZsYXNoIHByb2dyYW1taW5nIHNwZWVkIGZvciBMV01PTiAoYnkgYW5vdGhlciAxMDAlIDotKQoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAzIEZlYiAyMDA0OgogIC0gQ2hhbmdlZCB0aGUgaW5jb3JyZWN0IEZBVDEyQlVGU0laRQogIC0gZGF0YV9iZWdpbiBpbiBmc2RhdGEgY2FuIGJlIG5lZ2F0aXZlLiBDaGFuZ2VkIGl0IHRvIGJlIHNob3J0LgoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMzAgSmFuIDIwMDQ6CiAgMTogLSBib2FyZC9hbHRlcmEvY29tbW9uL2ZsYXNoLmM6Zmxhc2hfZXJhc2UoKToKICAgICAgIG8gYWxsb3cgaW50ZXJydXB0cyBiZWZvciBnZXRfdGltZXIoKSBjYWxsCiAgICAgICBvIGNoZWNrLXVwIGVhY2ggZXJhc2VkIHNlY3RvciBhbmQgYXZvaWQgdW5leHBlY3RlZCB0aW1lb3V0cwogICAgIC0gYm9hcmQvYWx0ZXJhL2RrMWMyMC9kazFzMTAuYzpib2FyZF9lYXJseV9pbml0X2YoKToKICAgICAgIG8gZW5jbG9zZSBzZXZlbnNlZ19zZXQoKSBpbiBjcHAgY29uZGl0aW9uCiAgICAgLSByZW1vdmUgdGhlIEFTTUkgY29uZmlndXJhdGlvbiBmb3IgREsxUzEwX3N0YW5kYXJkXzMyIChuZXZlciBwcmVzZW50KQogICAgIC0gZml4IHNvbWUgdHlwZWQgaW4gbWlzdGFrZXMgaW4gdGhlIE5JT1MgZG9jdW1lbnRhdGlvbgogIDI6IC0gc3BsaXQgREsxQzIwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgogICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFDMjAuaAogIDM6IC0gc3BsaXQgREsxUzEwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgogICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFTMTAuaAogIDQ6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3Ryb25peCBMaW51eCBEZXZlbG9wbWVudCBLaXQKICAgICAgIE5JT1MgQ1BVIGNvbmZpZ3VyYXRpb24gYXQgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKICA1OiAtIEFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQogIDY6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIFNlcmlhbCBQZXJpcGhhcmVsIEludGVyZmFjZSAoU1BJKQogICAgICAgKG1hc3RlciBvbmx5KQogIDc6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBjb21tb24gVS1Cb290IFNQSSBmcmFtZXdvcmsgYXQKICAgICAgIFJUQyBkcml2ZXIgRFMxMzA2CgoqIFBhdGNoIGJ5IFJhaHVsIFNoYW5iaGFnLCAyOCBKYW4gMjAwNDoKICBGaXggZmxhc2ggcHJvdGVjdGlvbi9sb2NraW5nIGhhbmRsaW5nIGZvciBPTUFQMTYxMCBpbm5vdmF0b3IgYm9hcmQuCgoqIFBhdGNoIGJ5IFJvbGYgUGV1a2VydCwgMjggSmFuIDIwMDQ6CiAgZml4IGZsYXNoIHdyaXRlIHByb2JsZW1zIG9uIENTQjIyNiBib2FyZCAod3JpdGUgd2l0aCAzMiBiaXQgYnVzIHdpZHRoKQoKKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDE2IEphbiAyMDA0OgogIC0gZml4IHJvdW5kaW5nIGVycm9yIHdoZW4gY2FsY3VsYXRpbmcgYmF1ZHJhdGVzIGZvciBNUEM1MjAwIFBTQ3MKICAtIG1ha2Ugc3VyZSBDRkdfUkFNQk9PVCBhbmQgQ0ZHX0xPV0JPT1QgYXJlIG5vdCBlbmFibGVkIGF0IHRoZSBzYW1lCiAgICB0aW1lIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjYgSmFuIDIwMDQ6CiAgQWxsb3cgYnppcDIgY29tcHJlc3Npb24gZm9yIHNtYWxsIG1lbW9yeSBmb290cHJpbnQgYm9hcmRzCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMjEgSmFuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENGSSBmbGFzaCBkcml2ZXIgZm9yIGJvdGggdGhlIEludGVsIGFuZCB0aGUgQU1ECiAgY29tbWFuZCBzZXRzLgoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMCBKYW4gMjAwNDoKICBGaXggcGNpIGJyaWRnZSBhdXRvIGVudW1lcmF0aW9uIG9mIHNpYmxpbmcgcDJwIGJyaWRnZXMuCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDEyIEphbiAyMDA0OgogIEFkZCBzb21lIGRlbGF5cyBhcyBuZWVkZWQgZm9yIEludGVsIExYVDk3MUEgUEhZIHN1cHBvcnQKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDA5IEphbiAyMDA0OgogIC0gYXZvaWQgd2FybmluZzogdW51c2VkIHZhcmlhYmxlIGBwaW9wJyBpbiBib2FyZC9hbHRlcmEvY29tbW9uL3NldmVuc2VnLmMKICAtIG1ha2UgREsxQzIwIGJvYXJkIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBBU01JIGNvbmZvcm0gdG8KICAgIGRvY3VtZW50YXRpb24KCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDkgSmFuIDIwMDQ6CgogIEFSTSBtZW1vcnkgbGF5b3V0IGZpeGVzOiB0aGUgYWJvcnQtc3RhY2sgaXMgbm93IHNldCB1cCBpbiB0aGUKICBjb3JyZWN0IFJBTSBhcmVhLCBhbmQgdGhlIEJTUyBpcyB6ZXJvZWQgb3V0IGFzIGl0IHNob3VsZCBiZS4KCiAgRnVydGhlcm1vcmUsIHRoZSBtYWdpYyB2YXJpYWJsZXMgJ2FybWJvb3RfZW5kJyBhbmQgJ2FybWJvb3RfZW5kX2RhdGEnCiAgb2YgdGhlIGxpbmtlciBzY3JpcHRzIGFyZSByZXBsYWNlZCBieSAnX19ic3Nfc3RhcnQnIGFuZCAnX2VuZCcsCiAgcmVzcC4sIHdoaWNoIGlzIGEgZnVydGhlciBzdGVwIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkaWZmZXJlbmNlcwogIGJldHdlZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDUFUgYXJjaGl0ZWN0dXJlcy4KCiogUGF0Y2ggYnkgbGlhbmcgYSBsZWksIDkgSmFuIDIwMDQ6CiAgRml4IEludGVsIDI4RjEyOEozIElEIGluIGluY2x1ZGUvZmxhc2guaAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOSBKYW4gMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgVEIwMjI5IGJvYXJkIChORUMgVlI0MTMxIE1JUFMgcHJvY2Vzc29yKQoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEyIERlYyAyMDAzOgogIGNoYW5nZWQgZXh0ZXJuIF9faW5saW5lX18gaW50byBzdGF0aWMgX19pbmxpbmVfXyBpbgogIGluY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAzMCBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgSUJNIFBQQzQ0MEdYLiBNdWx0aXBsZSBFTUFDIEV0aGVybmV0IGRldmljZXMsCiAgc2VsZWN0IE1ESSBwb3J0IGJhc2VkIG9uIGVuYWJsZWQgRU1BQyBkZXZpY2UuCiAgQWRkIHN1cHBvcnQgZm9yIFhFUyBJbmMgPGh0dHA6Ly93d3cueGVzLWluYy5jb20+IFhQZWRpdGUxMDAwIDQ0MEdYCiAgYmFzZSBQclBNQyBib2FyZC4KCiogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAxNSBEZWMgMjAwMzoKICBtYWRlIENPTkZJR19TSUxFTlRfQ09OU09MRSB1c2FibGUgb24gYWxsIGFyY2hpdGVjdHVyZXMKCiogRGlzYWJsZSBkYXRlIGNvbW1hbmQgb24gVFFNODY2TSAtIHRoZXJlIGlzIG5vIFJUQyBvbiBNUEM4NjYKCiogRml4IHZhcmlhYmxlIENQVSBjbG9jayBmb3IgTVBDODU5Lzg2NiBzeXN0ZW1zIGZvciBsb3cgQ1BVIGNsb2NrcwoKKiBJbXBsZW1lbnQgYWRhcHRpdmUgU0RSQU0gdGltaW5nIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gYWN0dWFsIENQVQogIGNsb2NrIGZyZXF1ZW5jeSBmb3IgSU5DQS1JUDsgZml4IHByb2JsZW0gd2l0aCBib2FyZCBoYW5naW5nIHdoZW4KICBzd2l0Y2hpbmcgZnJvbSAxNTBNSHogdG8gMTAwTUh6CgoqIEFkZCBQQ01DSUEgQ1Mgc3VwcG9ydCBmb3IgQk1TMjAwMyBib2FyZAoKKiBBZGQgdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgKHNvIGZhciBvbmx5IFRRTTg2Nk0pOgogIHNlZSBkb2MvUkVBRE1FLk1QQzg2NiBmb3IgZGV0YWlsczsKICBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgIlNJVTQiIGFuZCAiU0lVOSIgc2lsaWNvbiBidWdzIG9uIE1QQzg2NjsKICBjYWxjdWxhdGUgQ1BVIGNsb2NrIGZyZXF1ZW5jeSBmcm9tIFBMTCByZWdpc3RlciB2YWx1ZXMuCgoqIEFkZCBzdXBwb3J0IGZvciAxMjggTUIgUkFNIG9uIFRRTTh4eEwvTSBtb2R1bGVzCgoqIEZpeCBQUy8yIGtleWJvYXJkIHByb2JsZW0gY2F1c2VkIGJ5IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdmFyaWFibGUKICBwb2ludGluZyB0byBhIGxvY2F0aW9uIGluIGZsYXNoCgoqIEZpeCBJTkNBLUlQIGNsb2NrIGNhbGN1bGF0aW9uOiA0MDAvMyA9IDEzMy4zIE1Ieiwgbm90IDEzMC4KCiogVGhlIFBTLzIgbXV4IG9uIHRoZSBCTVMyMDAzIGJvYXJkIG5lZWRzIDQ1MCBtcyBhZnRlciBwb3dlciBvbgogIGJlZm9yZSB3ZSBjYW4gYWNjZXNzIGl0OyBhZGQgZGVsYXkgaW4gY2FzZSB3ZSBhcmUgZmFzdGVyICh3aXRoIG5vCiAgQ0YgY2FyZCBpbnNlcnRlZCkKCiogQ2xlYW51cCBvZiBzb21lIGluaXQgZnVuY3Rpb25zCgoqIE1ha2Ugc3VyZSBTQ0MgRXRoZXJuZXQgaXMgYWx3YXlzIHN0b3BwZWQgYnkgdGhlIHRpbWUgd2UgYm9vdCBMaW51eAogIHRvIGF2b2lkIExpbnV4IGNyYXNoZXMgYnkgZWFybHkgcGFja2V0cyBjb21pbmcgaW4uCgoqIEFjY2VsZXJhdGUgZmxhc2ggYWNjZXNzZXMgb24gTFdNT04gYm9hcmQgYnkgdXNpbmcgYnVmZmVyZWQgd3JpdGVzCgoqIEZpeCB0eXBvIGluIE1ha2VmaWxlOwogIGZpeCBwcm9ibGVtIHdpdGggUEFSVE5VTSBkZXRlY3Rpb24KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDA5IEphbiAyMDA0OgogIC0gYWRkIFJUQyBzdXBwb3J0IGZvciBNUEM1MjAwIGJhc2VkIGJvYXJkcyAocmVxdWlyZXMgUlRDX1hUQUwpCgoqIEFkZCBzdXBwb3J0IGZvciBJREUgTEVEIG9uIEJNUzIwMDMgYm9hcmQKICAoZXhjbHVzaXZlIHdpdGggc3RhdHVzIExFRCEpCgoqIEFkZCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkICh1c2VkIHdpdGggUFMvMiBtdWx0aXBsZXhvciBvbgogIEJNUzIwMDMgYm9hcmQpCgoqIFBhdGNoZXMgYnkgUmVpbmhhcmQgTWV5ZXIsIDQgSmFuIDIwMDQgKyA3IEphbiAyMDA0OgogIEFkZCBjb21tb24gZmlsZXMgZm9yICJlbWsiIGJvYXJkcwoKKiBBZGQgYSBjb21tb24gZ2V0X3JhbV9zaXplKCkgZnVuY3Rpb24gYW5kIG1vZGlmeSB0aGUgdGhlCiAgYm9hcmQtc3BlY2lmaWMgZmlsZXMgdG8gaW52b2tlIHRoYXQgY29tbW9uIGltcGxlbWVudGF0aW9uLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogU2V0IGRlZmF1bHQgY2xvY2sgZm9yIElOQ0EtSVAgdG8gMTUwIE1IegoKKiBNYWtlIEJNUzIwMDMgdXNlIGEgc2VwYXJhdGUgY29uZmlnIGZpbGUgdG8gYXZvaWQgI2lmZGVmIG1lc3M7CiAgYWRkIEkyQyBzdXBwb3J0OyBhZGQgc3VwcG9ydCBmb3IgRFMxMzM3IFJUQwoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgIGZvciBCTVMyMDAzIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBzdGF0dXMgTEVEIG9uIEJNUzIwMDMgYm9hcmQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMiBKYW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgQWN0aXZlIFNlcmlhbCBNZW1vcnkgSW50ZXJmYWNlIChBU01JKQogIG9uIEN5Y2xvbmUgZGV2aWNlcwoKKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxNiBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBQQ2hhbWVsZW9uIE1FIGFuZCBISSBtb2R1bGVzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBEVUVUIEFEUyBib2FyZCAoTVBDODd4Lzg4eCkKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNSBEZWMgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgY3JhbWZzICh1c2VzIEpGRlMyIGNvbW1hbmQgaW50ZXJmYWNlKQoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDM6CiAgLSBtb3JlIGRvY3VtZW50YXRpb24gZm9yIE5JT1MgcG9ydAogIC0gbmV3IHN0cnVjdCBuaW9zX3Bpb190LCBzdHJ1Y3Qgbmlvc19zcGlfdAogIC0gUmVjb25maWd1cmF0aW9uIGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFDMjA6CiAgICBvIG1vdmUgYm9hcmQgcmVsYXRlZCBjb2RlIGZyb20gYm9hcmQvZGsxYzIwCiAgICAgIHRvIGJvYXJkL2FsdGVyYS9kazFjMjAKICAgIG8gY3JlYXRlIGEgbmV3IGNvbW1vbiBzb3VyY2UgcGF0aCBib2FyZC9hbHRlcmEvY29tbW9uCiAgICAgIGFuZCBtb3ZlIGdlbmVyaWMgZmxhc2ggYWNjZXNzIHN0dWZmIGludG8gaXQKICAgIG8gY2hhbmdlL2V4cGFuZCBjb25maWd1cmF0aW9uIGZpbGUgREsxQzIwLmgKICAtIEFkZCBzdXBwb3J0IGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFTMTAKICAtIEFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIE5JT1Mgc3lzdGVtcwogIC0gQWRkIGR1YWwgNy1zZWdtZW50IExFRCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBEZXZLaXRzCgoqIFBhdGNoIGJ5IFJvbmVuIFNoaXRyaXQsIDEwIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCBEQjY0MzYwIC8gREI2NDQ2MCBkZXZlbG9wbWVudCBib2FyZHMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTAgRGVjIDIwMDM6CiAgZml4IGRlcGVuZGVuY3kgcHJvYmxlbSBpbiBleGFtcGxlcy9NYWtlZmlsZQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgOCBEZWMgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBQQVRJIGJvYXJkIChNUEM1NTUpCiAgLSBhZGQgU1BJIHN1cHBvcnQgZm9yIHRoZSBNUEM1eHgKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDggRGVjIDIwMDM6CiAgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBDT05GSUdfU0VSSUFMX1RBRyBhbmQgQ09ORklHX1JFVklTSU9OX1RBRwogIHRvIHBhc3MgQVRBR19TRVJJQUwgYW5kIEFUQUdfUkVWSVNJT04sIHJlc3AuLCB0byB0aGUgQVJNIHRhcmdldDsKICBjbGVhbnVwIHNvbWUgcmVkdW5kYW5kICNkZWZpbmVzCgoqIFBhdGNoIGJ5IEFuZHLpIFNjaHdhcnosIDggRGVjIDIwMDM6CiAgZml4ZXMgZm9yIERhdmljb20gRE05MTAyQSBFdGhlcm5ldCBDaGlwICgjZGVmaW5lIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTSk6CiAgLSBUWCBhbmQgUlggZGVza3JpcHRvcnMgbXVzdCBiZSBxdWFkLXdvcmQgYWxpZ25lZAogIC0gZG9lcyBub3Qgd29yayB3aXRoIG9ubHkgb25lIFRYIGRlc2tyaXB0b3IKICAtIHN0YW5kYXJkIHJlc2V0IG1ldGhvZCBkb2VzIG5vdCB3b3JrCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IERlYyAyMDAzOgogIGFkZCBSVEw4MTM5IGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaGVzIGJ5IEVkIE9rZXJzb24sIDA3IERlYyAyMDAzOgogIC0gZml4IGV0aGVybmV0IGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgogIC0gZXh0ZW5kIG1lbXNldHVwLlMgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBCRSBhbmQgTEUgbW9kZXMKCiogTWlub3IgY29kZSBjbGVhbnVwIChjb2Rpbmcgc3R5bGUpCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAzMCBEZWMgMjAwMzoKICAtIGNwdS9tcGM1eHh4L2ZlYy5jOiBhZGRlZCBDT05GSUdfUEhZX0FERFIsIGFkZGVkIENPTkZJR19QSFlfVFlQRSwKICAtIGFkZGVkIENPTkZJR19QSFlfQUREUiB0byBpbmNsdWRlL2NvbmZpZ3MvSWNlQ3ViZS5oLAogIC0gdHVybmVkIGRlYnVnIHByaW50IG9mIFBIWSByZWdpc3RlcnMgaW50byBhIGZ1bmN0aW9uIChjYWxsZWQgaW4gdHdvIHBsYWNlcykKICAtIGFkZGVkIHN1cHBvcnQgZm9yIEVNSyBNUEM1MjAwIGJhc2VkIG1vZHVsZXMKCiogRml4IE1QQzh4eCBQTFBSQ1JfTUZEX1NISUZUIHR5cG8KCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2Nk0gbW9kdWxlcwoKKiBGaXhlcyBmb3IgVFFNODU1TSB3aXRoIDQgTUIgZmxhc2ggKEFtMjlETDE2MyA9IF9ub18gbWlycm9yIGJpdCBmbGFzaCkKCiogRml4IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyOCBEZWMgMjAwMzoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkCgoqIE1ha2UgQ1BVIGNsb2NrIG9uIElDQS1JUCBib2FyZCBjb250cm9sbGFibGUgYnkgYSAiY3B1Y2xrIgogIGVudmlyb25tZW50IHZhcmlhYmxlIHdoaWNoIGNhbiBzZXQgdG8gIjEwMCIsICIxMzMiLCBvciAiMTUwIi4gVGhlCiAgQ1BVIGNsb2NrIHdpbGwgYmUgY29uZmlndXJlZCBhY2NvcmRpbmdseSB1cG9uIG5leHQgcmVib290LiBPdGhlcgogIHZhbHVlcyBhcmUgaWdub3JlZC4gSW4gY2FzZSBvZiBhbiBpbnZhbGlkIG9yIHVuZGVmaW5lZCAiY3B1Y2xrIgogIHZhbHVlLCB0aGUgY29tcGlsZS10aW1lIGRlZmF1bHQgQ1BVIGNsb2NrIHNwZWVkIHdpbGwgYmUgdXNlZC4KCiogRW5hYmxlIFF1YWQtVUFSVCBvbiBCTVMyMDAzIGJvYXJkIChpbml0aWFsaXplIHRoZSBQQ01DSUEgbWVtb3J5CiAgd2luZG93IHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIFVBUlQgcmVnaXN0ZXJzIGJ5IHRoZSBMaW51eCBkcml2ZXIpCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyMCBEZWMgMjAwMzoKICBGaXggY2xvY2sgY2FsY3VsYXRpb24gZm9yIHRoZSBNUEM1MjAwIGZvciBoaWdoZXIgY2xvY2sgZnJlcXVlbmNpZXMKICAoYWJvdmUgMioqMzIgLyAxMCA9IDQyOS41IE1IeikuCgoqIEZpeCBDT05GSUdfUExMX1BDSV9UT19NRU1fTVVMVElQTElFUiBkaXZpZGVyIGVycm9yIGluIFNQODI0MCBjb25maWd1cmF0aW9uCgoqIEZpeCBJY2VDdWJlIENMS0lOIGNvbmZpZ3VyYXRpb24gKGl0J3MgMzMuMDAwMDAwTUh6KQoKKiBBZGQgbmV3IGNvbmZpZ3VyYXRpb24gZm9yIEljZUN1YmUgYm9hcmQgd2l0aCBERFIgbWVtb3J5CgoqIFVwZGF0ZSBUUkFCIG1lbW9yeSBjb25maWd1cmF0aW9ucwoKKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgSU5DQS1JUCBib2FyZAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMDkgRGVjIDIwMDM6CiAgLSBCVUJJTkdBNDA1RVA6IGNoYW5nZWQgZmxhc2ggZHJpdmVyIHRvIHByb3RlY3QgdG9wIHNlY3RvciBjb250YWluaW5nCiAgICBmaXJzdCBpbnN0cnVjdGlvbi4KICAtIEJVQklOR0E0MDVFUDogY29uZmlndXJlZCAiZWVwcm9tIiBjb21tYW5kIHRvIGFjY2VzcyBib290IGNvbmZpZyBFRVBST00uCiAgLSBCVUJJTkdBNDA1RVA6IGZpeGVkIFBMTCBpbml0IChpbml0IGNoaXAgc2VsZWN0cyBiZWZvcmUgRlBHQS9OVlJBTSBhY2Nlc3MpLgogIC0gNDA1RVA6IGZpeGVkIFNQRC1iYXNlZCBTRFJBTSBpbml0IChvbmx5IHVzZSBiYW5rcyAwIGFuZCAxKS4KICAtIDQwNUVQOiBhZGRlZC9maXhlZCBzdXBwb3J0IGZvciAicmVnaW5mbyIgY29tbWFuZC4KICAtIDR4eDogcmVtb3ZlZCBzcHVyaW91cyBNSUkgZXJyb3IgbWVzc2FnZXMgb24gIm1paSBpbmZvIiBjb21tYW5kLgoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgQ29sZGZpcmUgQ1BVCiAgYWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE01MjcyQzMgYW5kIE01MjgyRVZCIGJvYXJkcwoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNCBOb3YgMjAwMzoKICAtIGFkZCBhIHJldHVybiB2YWx1ZSBmb3IgdGhlIGZwZ2EgY29tbWFuZAogIC0gYWRkIGlkZV9wcmVpbml0KCkgZnVuY3Rpb24gY2FsbGVkIGluIGlkZV9pbml0IGlmIENPTkZJR19JREVfUFJFSU5JVAogICAgaXMgZGVmaW5lZC4gSWYgaWRlX3ByZWluaXQgZmFpbHMsIGlkZV9pbml0IGlzIGFib3J0ZWQuCiAgLSBmaXggYW4gZW5kaWFuZXNzIHByb2JsZW0gaW4gZmF0LmgKCiogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAwNSBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU05NQydzIFFTODUwL1FTODIzL1FTODYwVCBib2FyZHMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMyBEZWMgMjAwMzoKICAicmV2aXZlIiBVLUJvb3Qgc3VwcG9ydCBmb3Igb2xkIE1vdG9yb2xhIE1QQzg2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBDYW0oaWxvPyksIDAzIERlYyAyMDAzOgogIG1ha2UgZXhhbXBsZXMgYnVpbGQgZXZlbiB3aXRoIGJyb2tlbiBNb250YXZpc3RhIG9iamNvcHkKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDI3IE5vdiAyMDAzOgogIGZpeCBjb252ZXJzaW9uIHByb2JsZW0gd2l0aCAiYm9vdHJldHJ5IiBldmlyb25tZW50IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IEFuZHJlIFNjaHdhcnosIDI0IE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBtdmJsdWUgKG12Qmx1ZUxZTlggYW5kIG12Qmx1ZUJPWCkgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBOb3YgMjAwMzoKICBzZXQgWk1JSSBicmlkZ2Ugc3BlZWQgb24gNDQwCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IE5vdiAyMDAzOgogIEZpeCBtaXNtYXRjaGVkICNpZmRlZiAvICNlbmRpZiBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTQgTm92IDIwMDM6CiAgLSBib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMKICAgICogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEJaSVAyIGNvbXByZXNzZWQgaW1hZ2VzCiAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCiAgLSBib2FyZC9tcGwvY29tbW9uL2ZsYXNoLmMKICAgICogcmVwb3J0IGNvcnJlY3QgZXJyb3JzIHRvIHVwcGVyIGxheWVycwogICAgKiBjaGVjayB0aGUgZXJhc2UgZmFpbCBhbmQgVlBQIGxvdyBiaXRzIGluIHN0YXR1cyByZWcKICAtIGJvYXJkL21wbC92Y21hOS9jbWRfdmNtYTkuYwogIC0gYm9hcmQvbXBsL3ZjbWE5L2ZsYXNoLmMKICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKICAtIGNvbW1vbi9jbWRfdXNiLmMKICAgICogZml4IHR5cG8gaW4gY29tbWVudAogIC0gY3B1L2FybTkyMHQvdXNiX29oY2kuYwogICAgKiBzdXBwb3J0IGZvciBTM0MyNDEwIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKICAtIGRyaXZlcnMvY3M4OTAwLmMKICAgICogcmVpbml0IHNvbWUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgZXJyb3IgKGNhYmxlIG1pc3NpbmcsIC4uLikKICAtIGZzL2ZhdC9mYXQuYwogICAgKiBzdXBwb3J0IGZvciBVU0IvTU1DIGRldmljZXMgaXMgbWlzc2luZyBpbiAjaWYgbGluZQogIC0gaW5jbHVkZS9jb25maWdzL01JUDQwNS5oCiAgLSBpbmNsdWRlL2NvbmZpZ3MvUElQNDA1LmgKICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKICAtIGluY2x1ZGUvY29uZmlncy9WQ01BOS5oCiAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0CiAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CiAgICAqIGVuYWJsZSBVU0Igc3VwcG9ydAogIC0gbGliX2FybS9hcm1saW51eC5jCiAgICAqIGNoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb24gb2YgQVJNIExpbnV4IGtlcm5lbCBhcwogICAgICBkZXNjcmliZWQgb24gaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9ib290aW5nLnBocAoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgogIFNwbGl0IGRiYXUxeDAwIGludG8gZGJhdTEwMDAsIGRiYXUxMTAwIGFuZCBkYmF1MTUwMCBjb25maWdzIHRvCiAgc3VwcG9ydCBhbGwgdGhlc2UgQU1EIGJvYXJkcy4KCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKICBXb3JrYXJvdW5kIGZvciBtaXBzIGF1MXgwMCBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzZXMgKHRoZSBhdTF4MDAKICB1c2VzIGEgMzYgYml0IGJ1cyBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYWNjZXNzIHBoeXNpY2FsIG1lbW9yeQogIGRpcmVjdGx5LiBVc2UgdGhlIHVuY2FjaGVkIFNEUkFNIGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgcGh5c2ljYWwKICBvbmUuKQoKKiBQYXRjaCBieSBYdWUgTGlnb25nIChKb2UpLCAxMyBOb3YgMjAwMzoKICBhZGQgUmVhbHRlayA4MDE5IGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBOb3YgMjAwMzoKICBNUEM4MjZ4QURTL1BRMkZBRFMgIGNsZWFudXAKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTIgTm92IDIwMDM6CiAgVXBkYXRlIFJFQURNRSB0byBtYXJrIHRoZSBQT1JUSU8gY29tbWFuZHMgbm9uLXN0YW5kYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDEyIE5vdiAyMDAzOgogIHVwZGF0ZSBmb3IgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBkZXZlbG9wbWVudCBraXQ6CiAgLSBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gRGF0YUZsYXNoCiAgLSBBdG1lbCBEYXRhRmxhc2ggQVQ0NURCMTI4MiBzdXBwb3J0CgoqIFBhdGNoIGJ5IEplZmYgQ2FyciwgMTEgTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIG5ldyB2ZXJzaW9uIG9mIDgyNzAgcHJvY2Vzc29ycwoKKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDUgTm92IDIwMDM6CiAgLSBvbmx5IHBhc3MgdGhlIEFSTSBsaW51eCBpbml0cmQgdGFnIHRvIHRoZSBrZXJuZWwgd2hlbiBhbiBpbml0cmQKICAgIGlzIGFjdHVhbGx5IHByZXNlbnQKICAtIHVwZGF0ZSBvbWFwMTUxMGlubiBjb25maWd1cmF0aW9uIGZpbGUKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMgTm92IDIwMDM6CiAgLSBtb3JlIGVuZGlhbmVzcyBmaXhlcyBmb3IgTEFOOTFDMTExIGRyaXZlcgogIC0gQ0ZHX0haIGNvbmZpZ3VyYXRpb24gcGF0Y2ggZm9yIE5JT1MgQ3ljbG9uZSBib2FyZAoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgogIGZpeCBQSFlfSU5UX1JFRyB2cy4gUEhZX01BU0tfUkVHIGJ1ZyBpbiBkcml2ZXJzL3NtYzkxMTExLmMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjAgT2N0IDIwMDM6CiAgLSBtYWtlICJtaWkgaW5mbyA8YWRkcj4iIHNob3cgaW5mb3IgZm9yIFBIWSBhdCAiYWRkciIgb25seQogIC0gRW5kaWFuIGZpeCBmb3IgbWlpcGh5X2luZm8oKQoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE5IFNlcCAyMDAzOgogIE1vdmUgbW9zdCBvZiB0aGUgdGltZXIgaW50ZXJydXB0IHJlbGF0ZWQgUFBDIGNvZGUgdG8gcHBjX2xpYi9pbnRlcnJ1cHRzLmMKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CiAgQnJpbmcgQVJNIG1lbW9yeSBsYXlvdXQgaW4gc3luYyB3aXRoIHRoZSBkb2N1bWVudGF0aW9uOgogIHN0YWNrIGFuZCBtYWxsb2MtaGVhcCBhcmUgbm93IGxvY2F0ZWQgX2JlbG93XyB0aGUgVS1Cb290IGNvZGUKCiogQWNjZWxlcmF0ZSBib290aW5nIG9uIFRSQUIgYm9hcmQ6IHJlYWQgYW5kIGNoZWNrICBhdXRvdXBkYXRlICBpbWFnZQogIGhlYWRlcnMgZmlyc3QgaW5zdGVhZCBvZiBhbHdheXMgcmVhZGluZyB0aGUgd2hvbGUgaW1hZ2VzLgoKKiBGaXggdHlwZSBpbiBNUEM1WFhYIGNvZGUgKHBvaW50ZWQgb3V0IGJ5IFZpY3RvciBXcmVuKQoKKiBFbmFibGVkIHBhc3N3b3JkIGNoZWNrIG9uIFJNVSBib2FyZAoKKiBGaXggY29uZmlndXJhdGlvbiBwcm9ibGVtIHdpdGggSWNlQ3ViZSBpbiBMT1dCT09UIGNvbmZpZ3VyYXRpb246CiAgZW52cmlvbm1lbnQgZ290IGVtYmVkZGVkLCBjb3JydXB0aW5nIHRoZSBpbWFnZSBsYXlvdXQuCgoqIEZpeCBORUMgZGlzcGxheSBuYW1lcyAoaXQncyA2NDQwIFtmb3IgNjQweDQ4MF0sIG5vdCA2NjQwKS4KCiogQWRkZWQgQk1TMjAwMyBib2FyZAogIGFkZCBzdXBwb3J0IGZvciBORUMgTkw2NDQ4QkMzMy01NC4gMTAuNCIsIDY0MHg0ODAgVEZUIGRpc3BsYXkKCiogRml4IGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZCAobXVzdCB1c2UgVW5sb2NrIEJ5cGFzcyBSZXNldAogIGNvbW1hbmQgdG8gZXhpdCBVbmxvY2sgQnlwYXNzIE1vZGUpOyBhZGp1c3QgdGltaW5ncyBmb3IgZmxhc2gsIFNSQU0KICBhbmQgQ1BMRAoKKiBVc2UgIi1mUElDIiBpbnN0ZWFkIG9mICItbXJlbG9jYXRhYmxlIiB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGgKICByZWNlbnQgdG9vbHMKCiogQWRkIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiB0byAnaW1scycgY29tbWFuZAoKKiBBZGQgYmRfaW5mbyBmaWVsZHMgbmVlZGVkIGZvciA0eHggTGludXggSTJDIGRyaXZlcgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA0IE5vdi4gMjAwMzoKICBGaXggZXJyb3IgaW4gY21kX3ZmZC5jIChUUkFCIGJvYXJkOiAidmZkIC8xIiBzaG93cyBub3cgb25seSBvbmUgQml0bWFwKQoKKiBQcmludCB1c2VkIG5ldHdvcmsgaW50ZXJmYWNlIHdoZW4gQ09ORklHX05FVF9NVUxUSSBpcyBzZXQKCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggT2N0IDIwMDM6CiAgQWRkIGxvdyBib290IHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogRml4IHByb2JsZW0gd2l0aCBkdWFsIFBDTUNJQSBzdXBwb3J0IChOU0NVKQoKKiBGaXggTVBDNTIwMCBJMkMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEZpeCBwYXJhbWV0ZXIgcGFzc2luZyB0byBzdGFuZGFsb25lIGltYWdlcyB3aXRoIGJvb3RtIGNvbW1hbmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDMwIE9jdCAyMDAzOgogIEZpeCBidWlsZCBlcnJvcnMgZm9yIGl4ZHA0MjUgYm9hcmQKCiogUGF0Y2ggYnkgRGF2aWQgTS4gSG9ybiwgMjkgT2N0IDIwMDM6CiAgRml4ZXMgdG8gYnVpbGQgdW5kZXIgQ1lHV0lOCgoqIEdldCBJY2VDdWJlIE1HVDUxMDAgd29ya2luZyAoYWdhaW4pCgoqIEZpeCBwcm9ibGVtcyBpbiBtZW1vcnkgdGVzdCBvbiBzb21lIGJvYXJkcyAod2hpY2ggd2FzIG5vdAogIG5vbi1kZXN0cnVjdGl2ZSBhcyBpbnRlbmRlZCkKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IE9jdCAyMDAzOgogIENoYW5nZSBmcy9mYXQvZmF0LmMgdG8gcHV0IEkvTyBidWZmZXJzIGluIEJTUyBpbnN0ZWFkIG9uIHRoZSBzdGFjawogIHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3cgb24gQVJNIHN5c3RlbXMKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKICBmaXggaW5pdCBzZXF1ZW5jZSBlcnJvciBmb3IgTklPUyBwb3J0CgoqIEFsbG93IGxvd2VyY2FzZSBzcGVsbGluZyBmb3IgSWNlQ3ViZV81MjAwOyBzdXBwb3J0IE1QQzUyMDBMSVRFIG5hbWUKCiogQWRkIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIHRvIFRSQUIgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBYaWFvIFhpYW5naHVhLCAyMyBPY3QgMjAwMzoKICBzbWFsbCBwYXRjaCBmb3IgbXBjODV4eAoKKiBGaXggc21hbGwgcHJvYmxlbSBpbiBNUEM1MjAwIEkyQyBkcml2ZXIKCiogRml4IEZDQzMgc3VwcG9ydCBvbiBBVEMgYm9hcmQKCiogQ29ycmVjdCBoZWFkZXIgcHJpbnRpbmcgZm9yIG11bHRpLWltYWdlIGZpbGVzIGluIGRvX2Jvb3RtKCkKCiogTWFrZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUgd29yayB3aXRoIENPTkZJR19BVVRPQk9PVF9LRVlFRAoKKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE4IE9jdCAyMDAzOgogIEZpeCBBVDkxUk05MjAwIGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBOeWUgTGl1LCAxNyBPY3QgMjAwMzoKICBGaXggdHlwbyBpbiBpbmNsdWRlL21wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE2IE9jdCAwMzoKICBGaXhlcyBmb3IgY3B1L2FybTkyNS9pbnRlcnJ1cHQuYwogIC0gSW5pdGlhbGl6ZSB0aW1lc3RhbXAgJiBsYXN0ZGVjIHZhcnMuCiAgLSBmaXggdGltZXN0YW1wIG92ZXJmbG93cy4KICAtIGZpeCBsYXN0ZGVjIG92ZXJmbG93LgogIC0gc21hcnRlciBub3JtYWxpemF0aW9uIHRvIGFsbG93IHVkZWxheSgpIGJlbG93IDFtcyB0byB3b3JrLgoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDE2IE9jdAogIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgQ3ljbG9uZSBFZGl0aW9uIChESy0xQzIwKQoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgT2N0IDIwMDM6CiAgYWRkIGhpbnQgYWJvdXQgZG9jL1JFQURNRS5zaWxlbnQgdG8gUkVBRE1FIGZpbGUKCiogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBOU0NVCgoqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb25FVkIKCiogVFJBQiBhdXRvLXVwZGF0ZTogQmFzZSBkZWNpc2lvbiBpZiB3ZSBoYXZlIHRvIHN0cmlwIHRoZSBpbWFnZQogIGhlYWRlciBvbiBpbWFnZSB0eXBlIGFzIGVuY29kZWQgaW4gdGhlIGhlYWRlcgogIChpbmNsdWRlIGltYWdlIHR5cGUgcGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgT2N0IDIwMDMpCgoqIFBhdGNoZXMgYnkgWGlhbmdodWEgWGlhbywgMTUgT2N0IDIwMDM6CgogIC0gQWRkZWQgTW90b3JvbGEgQ1BVIDg1NDAvODU2MCBzdXBwb3J0IChjcHUvODV4eCkKICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NDBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU0MGFkcykKICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NjBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU2MGFkcykKCiogRml4IGZsYXNoIHRpbWluZ3Mgb24gVFJBQiBib2FyZAoKKiBNYWtlIHN1cmUgSFVTSCBpcyBpbml0aWFsaXplZCBmb3IgcnVubmluZyBhdXRvLXVwZGF0ZSBzY3JpcHRzCgoqIE1ha2UgNTIwMCByZXNldCBjb21tYW5kIF9yZWFsbHlfIHJlc2V0IHRoZSBib2FyZCwgd2l0aG91dCBydW5uaW5nCiAgYW55IG90aGVyIGNvZGUgYWZ0ZXIgaXQKCiogRml4IGVycm9ycyB3aXRoIGZsYXNoIGVyYXNlIHdoZW4gcmFuZ2Ugc3BhbnMgIGFjcm9zcyBiYW5rcwogIHRoYXQgYXJlIG1hcHBlZCBpbiByZXZlcnNlIG9yZGVyCgoqIEZpeCBmbGFzaCBtYXBwaW5nIGFuZCBkaXNwbGF5IG9uIFAzRzQgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE1IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIEludGVsIElYUDQyNSBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBJWERQNDI1IGV2YWwgYm9hcmQKCiogQWRkZWQgY29uZmlnIG9wdGlvbiBDT05GSUdfU0lMRU5UX0NPTlNPTEUuICBTZWUgZG9jL1JFQURNRS5zaWxlbnQKICBmb3IgbW9yZSBpbmZvcm1hdGlvbgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBPY3QgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaGVzIGJ5IFRob21hcyBMYW5nZSwgMDkgT2N0IDIwMDM6CiAgLSBmaXggY21kX2lkZS5jIGZvciBub24gcHBjIGJvYXJkcyAocmVhZC93cml0ZSBmdW5jdGlvbnMgZGlkIG5vdAogICAgYWRkIEFUQSBiYXNlIGFkZHJlc3MpCiAgLSBmaXggZm9yIHNoYW5ub24gYm9hcmQKICAtICNpZmRlZiBDT05GSUdfSURFXzh4eF9ESVJFQ1Qgc29tZSBvdGhlcndpc2UgdW51c2VkIGNvZGUKICAtIEVuZGlhbiBzd2FwIEFUQSBpZGVudGl0eSBmb3IgYWxsIGJpZyBlbmRpYW4gQ1BVcywgbm90IGp1c3QgUFBDCiAgLSBNSVBTIG9ubHk6IE5ldyBvcHRpb24gQ09ORklHX01FTVNJWkVfSU5fQllURVMgZm9yIHBhc3NpbmcgbWVtc2l6ZQogICAgYXJncyB0byBsaW51eAogIC0gYWRkIHN1cHBvcnQgZm9yIGRiYXUxeDAwIGJvYXJkIChNSVBTMzIpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgT2N0IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOSBPY3QgMjAwMzoKICBGaXhlcyBmb3IgVFJBQiBib2FyZAogIC0gL2JvYXJkL3RyYWIvcnM0ODUuYzogY29ycmVjdCBiYXVkcmF0ZQogIC0gL2JvYXJkL3RyYWIvY21kX3RyYWIuYzogYnVnIGZpeCBmb3IgcHJvYmxlbSB3aXRoIHRpbWVyIG92ZXJmbG93IGluCiAgICB1ZGVsYXkoKTsgZml4IHNvbWUgdGltaW5nIHByb2JsZW1zIHdpdGggYWRjIGNvbnRyb2xsZXIKICAtIC9ib2FyZC90cmFiL3RyYWJfZmt0LmM6IGFkZCBuZXcgY29tbWFuZHM6IGdhaW4sIGVlcHJvbSBhbmQgcG93ZXI7CiAgICBtb2RpZnkgY29tbWFuZHM6IHRvdWNoIGFuZCBidXp6ZXIKCiogRGlzYWJsZSBDT05GSUdfU1VQUE9SVF9WRkFUIHdoZW4gdXNlZCB3aXRoIENPTkZJR19BVVRPX1VQREFURQogIChxdWljayAmIGRpcnR5IHdvcmthcm91bmQgZm9yIHJvZ3VlIHBvaW50ZXIgcHJvYmxlbSBpbiBnZXRfdmZhdG5hbWUoKSk7CiAgVXNlIGRpcmVjdCBmdW5jdGlvbiBjYWxscyBmb3IgYXV0b191cGRhdGUgaW5zdGVhZCBvZiBodXNoIGNvbW1hbmRzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDQgT2N0IDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtMzIgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgTmlvcyBDeWNsb25lIERldmVsb3BtZW50IEtpdCAoREstMUMyMCkKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjkgU2VwIDIwMDM6CiAgLSBBIHNlY29uZCBwYXJhbWV0ZXIgZm9yIGJvb3RtIG92ZXJ3cml0ZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IKICAgICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMuCiAgLSBib290bSBzZXRzIGVudmlyb25tZW50IHZhcmlhYmxlICJmaWxlc2l6ZSIgdG8gdGhlIHJlc3VsdGluZwogICAgKHVuY29tcHJlc3NlZCkgZGF0YSBsZW5ndGggZm9yICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMKICAgIHdoZW4gYXV0b3N0YXJ0IGlzIHNldCB0byAibm8iLiBOb3cgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZQoJaWYgYm9vdG0gJGZwZ2FkYXRhICRzb21lX2ZyZWVfcmFtIDsgdGhlbgoJCWZwZ2EgbG9hZCAwICRzb21lX2ZyZWVfcmFtICRmaWxlc2l6ZQoJZmkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDI1IFNlcHQgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBSZXYuIEMgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjUgU2VwIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFplcGh5ciBFbmdpbmVlcmluZyBaUEMuMTkwMCBib2FyZAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMyBTZXAgMjAwMzoKICBhZGQgQ01EX1BPUlRJTyB0byBDRkdfQ01EX05PTlNURCAoY29tbWFuZHMgaW4gcXVlc3Rpb24gYXJlIG9ubHkKICBpbXBsZW1lbnRlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMjMgU2VwIDIwMDM6CiAgZml4IHBsbF9wY2lfdG9fbWVtX211bHRpcGxpZXIgdGFibGUgZm9yIE1QQzgyNDUKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjIgU2VwIDIwMDM6CiAgZW5hYmxlIHRpbWVkIGF1dG9ib290IG9uIFBYQQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDIyIFNlcCAyMDAzOgogIC0gYWRkICQoQ0ZMQUdTKSB0byAiLXByaW50LWxpYmdjYy1maWxlbmFtZSIgc28gY29tcGlsZXIgZHJpdmVyCiAgICByZXR1cm5zIGNvcnJlY3QgbGliZ2NjIGZpbGUgcGF0aAogIC0gImxhdGVuY3kiIHJlZHVjdGlvbiBvZiBidXN5LWxvb3Agd2FpdGluZyB0byBpbXByb3ZlICJVLUJvb3QiIGJvb3QKICAgIHRpbWUgb24gczNjMjR4MCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxOSBTZXAgMjAwMzoKICAtIEFkZCBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04gb3B0aW9uIHRvIGVjaG8gdGhlIGludmVydGVkIEV0aGVybmV0CiAgICBsaW5rIHN0YXRlIHRvIHRoZSBmYXVsdCBMRUQuCiAgLSBJbiBOZXRMb29wLCBtYWtlIHRoZSBGYXVsdCBMRUQgcmVmbGVjdCB0aGUgbGluayBzdGF0dXMuICBUaGUgbGluawogICAgc3RhdHVzIGdldHMgdXBkYXRlZCBvbiBlbnRyeSwgYW5kIG9uIHRpbWVvdXRzLgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxOCBTZXAgMjAwMzoKICBhbGxvdyBta2ltYWdlIHRvIGJ1aWxkIGFuZCBydW4gb24gQ3lnd2luLWhvc3RlZCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEZyYW5rIE38bGxlciwgMTggU2VwIDIwMDM6CiAgdXNlIGJpX2ludGZyZXEgaW5zdGVhZCBvZiBiaV9idXNmcmVxIHRvIGNvbXB1dGUgZmVjX21paV9zcGVlZCBpbgogIGNwdS9tcGM4eHgvZmVjLmMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IFNlcCAyMDAzOgogIGFkZCB0b29sIHRvIGNvbXB1dGUgZmlsZWRzIGluIHRoZSBQTFBSQ1IgcmVnaXN0ZXIgZm9yIE1QQzg2eAoKKiBVc2UgSUhfVFlQRV9GSUxFU1lTVEVNIGZvciBUUkFCICJkaXNrIiBpbWFnZXMuCgoqIEZpeCBidWlsZCBwcm9ibGVtcyB1bmRlciBGcmVlQlNECgoqIEFkZCBnZW5lcmljIGZpbGVzeXN0ZW0gaW1hZ2UgdHlwZQoKKiBNYWtlIGZhdGxvYWQgc2V0IGZpbGVzaXplIGVudmlyb25tZW50IHZhcmlhYmxlCgoqIGVuYWJsZSBiYXNpYyAvIG1lZGl1bSAvIGhpZ2gtZW5kIGNvbmZpZ3VyYXRpb25zIGZvciBQUENoYW1lbGVvbkVWQgogIGJvYXJkOyBmaXggTkFORCBjb2RlCgoqIGVuYWJsZSBURlRQIGNsaWVudCBjb2RlIHRvIHNwZWNpZnkgdG8gdGhlIHNlcnZlciB0aGUgZGVzaXJlZAogIHRpbWVvdXQgdmFsdWUgKHNlZSBSRkMtMjM0OSkKCiogSW1wcm92ZSBTRFJBTSBzZXR1cCBmb3IgVFJBQiBib2FyZAoKKiBTdXBwcmVzcyBhbGwgb3V0cHV0IHdpdGggc3BsYXNoc2NyZWVuIGNvbmZpZ3VyZWQgb25seSBpZiAic3BsYXNoaW1hZ2UiCiAgaXMgc2V0CgoqIEZpeCBwcm9ibGVtcyB3aXRoIEkyQyBzdXBwb3J0IGZvciBtcGM1MjAwCgoqIEFkYXB0IFRSQUIgY29uZmlndXJhdGlvbiBhbmQgYXV0b191cGRhdGUgdG8gbmV3IG1lbW9yeSBsYXlvdXQKCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIHd0ayBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIFNoYXJwIExRMDY1VDlEUjUxVSBMQ0QgZGlzcGxheQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBGaXhlcyBmb3IgTVBDODI2NiBkZWZhdWx0IGNvbmZpZwogIC0gQWxsb3cgZXRoX2xvb3BiYWNrX3Rlc3QoKSBvbiA4MjYwIHRvIHVzZSBhIHN1YnNldCBvZiB0aGUgRkNDJ3MKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTcgU2VwIDIwMDM6CiAgLSB1cGRhdGUgUkVBRE1FIChTSE9XX0JPT1RfUFJPR1JFU1MgdmFsdWVzIGZvciBjbWRfbmFuZC5jIGFuZAogICAgZW52X2NvbW1vbi5jKQogIC0gc2JjODI2MCB0d2Vha3MKICAtIGFkanVzdCAiaGVscCIgb3V0cHV0CgoqIFBhdGNoZXMgYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBmaXggc3BlbGxpbmcgZXJyb3JzCiAgLSBzZXQgR0RfRkxHX0RFVklOSVQgZmxhZyBvbmx5IGFmdGVyIGRldmljZSBmdW5jdGlvbiBwb2ludGVycwogICAgYXJlIHZhbGlkCiAgLSBBbGxvdyBDRkdfQUxUX01FTVRFU1Qgb24gc3lzdGVtcyB3aGVyZSBhZGRyZXNzIHplcm8gaXNuJ3QKICAgIHdyaXRlYWJsZQogIC0gZW5hYmxlIDMucmQgVUFSVCAoU1QtVUFSVCkgb24gUFhBKFhTY2FsZSkgQ1BVcwogIC0gdHJpZ2dlciB3YXRjaGRvZyB3aGlsZSB3YWl0aW5nIGluIHNlcmlhbCBkcml2ZXIKCiogQWRkIGF1dG8tdXBkYXRlIGNvZGUgZm9yIFRSQUIgYm9hcmQgdXNpbmcgVVNCIG1lbW9yeSBzdGlja3MsCiAgc3VwcG9ydCBuZXcgY29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbWVtb3J5CgoqIGRpc2FibGUgTVBDNTIwMCBidXMgcGlwZWxpbmluZyBhcyB3b3JrYXJvdW5kIGZvciBidXMgY29udGVudGlvbgoKKiBNb2RpZnkgWExCIGFyYml0ZXIgcHJpb3JpdGllcyBvbiBNUEM1MjAwIHNvIGFsbCBkZXZpY2VzIHVzZSBzYW1lCiAgcHJpb3JpdHk7IGNvbmZpZ3VyZSBjcml0aWNhbCBpbnRlcnJ1cHRzIHRvIGJlIGhhbmRsZWQgbGlrZSBleHRlcm5hbAogIGludGVycnVwdHMKCiogTWFrZSBJUEIgY2xvY2sgb24gTUdUNTEwMC9NUEM1MjAwIGNvbmZpZ3VyYWJsZSBpbiBib2FyZCBjb25maWcgZmlsZTsKICBnbyBiYWNrIHRvIDY2IE1IeiBmb3Igc3RhYmlsaXR5CgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE1IFNlcCAyMDAzOgogIC0gYWRkIGRlc2NyaXB0aW9uIGZvciBtaXNzaW5nIENGR19DTURfKiBlbnRyaWVzIGluIHRoZSBSRUFETUUgZmlsZQogIC0gc2Fjc25nIHR3ZWFrcwoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE0IFNlcCAyMDAzOgogIGVuYWJsZSB3YXRjaGRvZyBzdXBwb3J0IGZvciBhbGwgTVBDODI0eCBib2FyZHMgdGhhdCBoYXZlIGEgd2F0Y2hkb2cKCiogT24gTVBDNTIwMCwgcmVzdHJpY3QgRkVDIHRvIGEgbWF4aW11bSBvZiAxMCBNYnBzIHRvIHdvcmsgYXJvdW5kIHRoZQogICJOb24tb2N0ZXQgQWxpZ25lZCBGcmFtZSIgZXJyb3JzIHdlIHNlZSBhdCAxMDAgTWJwcwoKKiBQYXRjaCBieSBTaGFyYWQgR3VwdGEsIDE0IFNlcCAyMDAzOgogIGZpeCBTUFIgbnVtYmVycyBmb3IgdXBwZXIgQkFUIHJlZ2lzdGVyIChbSURdQkFUWzQtN11bVUxdKQoKKiBQYXRjaCBieSBsbGFuZHJlLCAxMSBTZXAgMjAwMzoKICB1cGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb25FVkIgYm9hcmQKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAxMyBTZXAgMjAwMzoKICB2YXJpb3VzIGNoYW5nZXMgdG8gVkNNQTkgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogQWRkIEkyQyBzdXBwb3J0IGZvciBNR1Q1MTAwIC8gTVBDNTIwMAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTEgU2VwIDIwMDM6CiAgQ2hhbmdlZCBkZWZhdWx0IG1lbW9yeSBvcHRpb24gb24gTVBDODI2NkFEUyB0byBOT1QgYmUgUGFnZSBCYXNlZAogIEludGVybGVhdmUsIHNpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSBzdGFuZGFyZAogIDE2TUIgRElNTQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDEyIFNlcCAyMDAzOgogIGZpeCBNYWtlZmlsZSBzZXR0aW5ncyBmb3Igc2s5OCBkcml2ZXIKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwMzoKICAtIG5ldyBib2FyZHMgYWRkZWQ6IERQNDA1LCBIVUI0MDUsIFBMVTQwNSwgVk9INDA1CiAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAogIC0gY3B1L3BwYzR4eC9zZHJhbS5jOiBkaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyIGJlZm9yZSBzZXR0aW5nCiAgICBmaXJzdCB2YWx1ZXMKICAtIGNwdS9wcGM0eHgvNDA1X3BjaS5jOiBzZXQgdmVuZG9yIGlkIG9uIFBQQzQwNUVQIHN5c3RlbXMKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTEgU2VwIDIwMDM6CiAgYWRkIGJ1cm4taW4gdGVzdHMgZm9yIFRSQUIgYm9hcmQKCiogRW5hYmxlIGluc3RydWN0aW9uIGNhY2hlIG9uIE1QQzUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIFNlcCAyMDAzOgogIC0gZml4IFVTQiBkYXRhIHBvaW50ZXIgYXNzaWdubWVudCBmb3IgYnVsayBvbmx5IHRyYW5zZmVyLgogIC0gcHJldmVudCB0byBkaXNwbGF5IGVyYXNlZCBkaXJlY3RvcmllcyBpbiBGQVQgZmlsZXN5c3RlbS4KCiogQ2hhbmdlIG91dHB1dCBmb3JtYXQgZm9yIE5BTkQgZmxhc2ggLSBtYWtlIGl0IGxvb2sgbGlrZSBmb3Igb3RoZXIKICBtZW1vcnksIHRvbwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljg6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCA5IFNlcCAyMDAzOgogIGFkZCBGQVQgc3VwcG9ydCBmb3IgSURFLCBTQ1NJIGFuZCBVU0IKCiogUGF0Y2hlcyBieSBHbGViIE5hdGFwb3YsIDIgU2VwIDIwMDM6CiAgLSBjbGVhbnVwIG9mIFBPU1QgY29kZSBmb3IgdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcwogIC0gTVBDODI0eCBsb2NrcyB3YXkwIG9mIGRhdGEgY2FjaGUgZm9yIHVzZSBhcyBpbml0aWFsIFJBTTsKICAgIHRoaXMgcGF0Y2ggdW5sb2NrcyBpdCBhZnRlciByZWxvY2F0aW9uIHRvIFJBTSBhbmQgaW52YWxpZGF0ZXMKICAgIHRoZSBsb2NrZWQgZW50cmllcy4KCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAzMCBBdWcgMjAwMzoKICBuZXcgSTJDIGRyaXZlciBmb3IgbXBjMTA3IGJyaWRnZS4gTm93IHdvcmtzIGZyb20gZmxhc2guCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDExIEF1ZyAyMDAzOgogIC0gSkZGUzI6IGZpeCB0eXBvIGluIGNvbW1vbi9jbWRfamZmczIuYwogIC0gSkZGUzI6IGZpeCBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMgb3B0aW9uCiAgLSBKRkZTMjogcmVtb3ZlIG5vZGUgdmVyc2lvbiAwIHdhcm5pbmcKICAtIEpGRlMyOiBhY2NlcHQgSkZGUzIgUEFERElORyBub2RlcwogIC0gU1hOSTg1NVQ6IGFkZCBBTTI5TFY4MDAgc3VwcG9ydAogIC0gU1hOSTg1NVQ6IG1vdmUgZW52aXJvbm1lbnQgZnJvbSBFRVBST00gdG8gZmxhc2gKICAtIFNYTkk4NTVUOiBib290IGZyb20gSkZGUzIgaW4gTk9SIG9yIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDExIEF1ZyAyMDAzOgogIGZpeGVzIGZvciBJMkMgb24gTVBDODI0MAogIC0gZml4IGkyY193cml0ZSByb3V0aW5lCiAgLSBmaXggaXByb2JlIGNvbW1hbmQKICAtIGVsaW1pbmF0ZXMgdXNlIG9mIGdsb2JhbCB2YXJpYWJsZXMsIHBsdXMgZGVhZCBjb2RlLCBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgVVNCIE1hc3MgU3RvcmFnZSBEZXZpY2VzIChCQkIpCiAgKHRlc3RlZCB3aXRoIFVTQiBtZW1vcnkgc3RpY2tzIG9ubHkpCgoqIEF2b2lkIGZsaWNrZXIgb24gVFJBQidzIFZGRAoKKiBBZGQgc3VwcG9ydCBmb3IgU0s5OHh4IGRyaXZlcgoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBTdXBwb3J0IEljZUN1YmUgYm9hcmQgY29uZmlndXJhdGlvbnMgd2l0aCAxIHggQU1EIEFNMjlMVjA2NSAoOCBNQikKICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7CiAgUnVuIElQQiBhdCAxMzMgTWh6OyBhZGp1c3QgdGhlIE1JSSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nbHkKCiogU2V0IEJSR19DTEsgb24gUE04MjUvODI2IHRvIDY0TUh6IChWQ09fT1VUIC8gNCwgaW5zdGVhZCBvZiAxNiAgTUh6KQogIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCiAgKGVycm9yIG5vdyAwLjclIGF0IDExNSBrYnBzLCBpbnN0ZWFkIG9mIDMuNSUgYmVmb3JlKQoKKiBQYXRjaCBieSBBbmRyZWFzIE1vaHIsIDQgU2VwIDIwMDM6CiAgRml4IGEgbG90IG9mIHNwZWxsaW5nIGVycm9ycwoKKiBBZGQgc3VwcG9ydCBmb3IgUFBDaGFtZWxlb24gRXZhbCBCb2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgUDNHNCBib2FyZAoKKiBGaXggcHJvYmxlbSB3aXRoIE1HVDUxMDAgRkVDIGRyaXZlcjogYWRkICJlYXJseSIgTUFDIGFkZHJlc3MKICBpbml0aWFsaXphdGlvbgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA3IEF1ZyAyMDAzOgogIGNoZWNrIEJDU1IgdG8gZGV0ZWN0IGlmIHRoZSBib2FyZCBpcyBjb25maWd1cmVkIGluIFBDSSBtb2RlCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBSYWdodSBLcmlzaG5hcHJhc2FkLCA3IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBBZGRlciBJSSBNUEM4NTJUIG1vZHVsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgogIGZpeCBUSSBJbm5vdmF0b3IvT01BUDE1MTAgcGluIGNvbmZpZ3MKCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIGFybTkyNmVqcyBjcHUgY29yZQogIC0gYWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTYxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTQgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGJ6aXAyIHVuY29tcHJlc3Npb24KCiogQWRkIEdDQyBsaWJyYXJ5IHRvIGV4YW1wbGVzL01ha2VmaWxlIHNvIEdDQyB1dGlsaXR5IGZ1bmN0aW9ucyB3aWxsCiAgYmUgcmVzb2x2ZWQsIHRvbwoKKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkIHVzaW5nIHNvZnR3YXJlIEkyQyBkcml2ZXIKICAoYmVjYXVzZSBvZiBiZXR0ZXIgcmVzcG9uc2UgdG8gaXByb2JlIGNvbW1hbmQpOyBmaXggcHJvYmxlbSB3aXRoCiAgInJlc2V0IiBjb21tYW5kCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBBdWcgMjAwMzoKICBBZGRlZCBDT05GSUdfQk9PVFBfRE5TMiBhbmQgQ09ORklHX0JPT1RQX1NFTkRfSE9TVE5BTUUgdG8KICBDT05GSUdfQk9PVFBfTUFLUyAoc2VlIFJFQURNRSkuCgoqIEZpeCBJQ1U4NjIgZW52aXJvbm1lbnQgcHJvYmxlbQoKKiBGaXggUkFNIHNpemUgZGV0ZWN0aW9uIGZvciBSTVUgYm9hcmQKCiogSW1wbGVtZW50ICJyZXNldCIgZm9yIE1HVDUxMDAvTVBDNTIwMCBzeXN0ZW1zCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIEV0aGVybmV0IGF1dG9uZWdvdGlhdGlvbiBvbiBJTkNBLUlQIHdvcmsgZm9yIGFsbCBjbG9jayByYXRlczsKICBhbGxvdyBzZWxlY3Rpb24gb2YgY2xvY2sgZnJlcXVlbmN5IGFzICJtYWtlIiB0YXJnZXQKCiogSW1wbGVtZW50IG1lbW9yeSBhdXRvc2l6aW5nIGNvZGUgZm9yIEljZUN1YmUgYm9hcmRzCgoqIENvbmZpZ3VyZSBuZXR3b3JrIHBvcnQgb24gSU5DQS1JUCBmb3IgYXV0b25lZ290aWF0aW9uCgoqIEZpeCBvdmVyZmxvdyBwcm9ibGVtIGluIG5ldHdvcmsgdGltZW91dCBjb2RlCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDggQXVnIDIwMDM6CiAgQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwIChjcmMzMl9ub19jb21wLCB0b28pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjU6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXBkYXRlIGZvciBUUU0gYm9hcmQgZGVmYXVsdHM6CiAgZGlzYWJsZSBjbG9ja3NfaW5fbWh6LCBlbmFibGUgYm9vdCBjb3VudCBsaW1pdAoKKiBSZW1vdmVkIHRvb2xzL2dkYiBmcm9tICJtYWtlIGFsbCIgdGFyZ2V0LiAgQWRkZWQgbWFrZSB0YXJnZXQgImdkYnRvb2xzIgogIGluIHRvcGxldmVsIGRpcmVjdG9yeSBpbnN0ZWFkLiAgUmVtb3ZlZCBhc3Rlc3QuYyBmcm9tIHRvb2xzL2dkYiBiZWNhdXNlCiAgaXQgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgoKKiBGaXggUENJIHN1cHBvcnQgZm9yIE1QQzUyMDAgLyBJY2VDdWJlIEJvYXJkCgoqIE1hcCBJU1AxMzYyIFVTQiBPVEcgY29udHJvbGxlciBmb3IgTlNDVSBib2FyZAoKKiBQYXRjaCBieSBCcmFkIFBhcmtlciwgMDIgQXVnIDIwMDM6CiAgZml4IHNjNTIwX2NkcCBwcm9ibGVtcwoKKiBJbXBsZW1lbnQgQm9vdCBDeWNsZSBEZXRlY3Rpb24gKFJlcS4gMi4zIG9mIE9TREwgQ0dMIFJlcWlyZW1lbnRzKQoKKiBBbGxvdyBlcmFzZSBjb21tYW5kIHRvIGNyb3NzIGZsYXNoIGJhbmsgYm91bmRhcmllcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIEp1bCAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBMeW51eFdvcmtzIEtlcm5lbCBEb3dubG9hZGFibGUgSW1hZ2VzIChLRElzKS4KICBCb3RoIEx5bnhPUyBhbmQgQmx1ZUNhdCBsaW51eCBLRElzIGFyZSBzdXBwb3J0ZWQuCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI1IEp1bCAyMDAzOgogIHVzZSBtb3JlIHJlbGlhYmxlIHJlc2V0IGZvciBPTUFQLzkyNVQKCiogUGF0Y2ggYnkgTnllIExpdSwgMjUgSnVsIDIwMDM6CiAgZml4IHR5cG8gaW4gbXBjOHh4LmgKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjQgSnVsIDIwMDM6CiAgRml4ZXMgZm9yIGNtZF9uYW5kLmM6CiAgLSBGaXhlZCBudWxsIGRlcmVmZXJlY2Ugd2hpY2ggY291bGQgcmVzdWx0IGluIGluY29ycmVjdCBFQ0MgdmFsdWVzLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgZGV2aWNlcyB3aXRoIG5vIFJlYWR5L0J1c3kgc2lnbmFsIGhvb2tlZCB1cC4KICAtIEFkZGVkIE9NQVAxNTEwIHJlYWQvd3JpdGUgcHJvdGVjdCBoYW5kbGluZy4KICAtIEZpeGVkIG5hbmQuaCdzIEVDQ1BPUy4gQSBjb25mbGljdCBleGlzdGVkIHdpdGggUE9TNSBhbmQgYmFkYmxvY2sKICAgIGZvciBub24tSkZGUzIuCiAgLSBTd2l0Y2hlZCBkZWZhdWx0IEVDQyB0byBiZSBKRkZTMi4KCiogQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwCgoqIFByb3ZpZGUgY29uc2lzdGVudCBpbnRlcmZhY2UgdG8gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8gYWNjZXNzCiAgdGhlICdnbG9iYWxfZGF0YScgc3RydWN0dXJlCiAgUHJvdmlkZSBhIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBtb3JlIHVzZWZ1bCB0byB1c2Vycy9kZXZlbG9wZXJzLgoKKiBNYWtlIEljZUN1YmUgTUdUNTEwMCBGRUMgZHJpdmVyIHdvcmsKCiogSW1wbGVtZW50IG5ldyBtZWNoYW5pc20gdG8gZXhwb3J0IFUtQm9vdCdzIGZ1bmN0aW9ucyB0byBzdGFuZGFsb25lCiAgYXBwbGljYXRpb25zOiBpbnN0ZWFkIG9mIHVzaW5nIChQUEMtc3BlY2lmaWMpIHN5c3RlbSBjYWxscyB3ZSBub3cKICB1c2UgYSBqdW1wIHRhYmxlOyBwbGVhc2Ugc2VlIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBmb3IgZGV0YWlscwoKKiBQYXRjaCBieSBEYXZlIFdlc3R3b29kLCAyNCBKdWwgMjAwMzoKICBhZGRlZCBzdXBwb3J0IGZvciBVbml0eSBPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjMgSnVsIDIwMDM6CiAgYWRkICJpbWxzIiBjb21tYW5kIHRvIHByaW50IGZsYXNoIHRhYmxlIG9mIGNvbnRlbnRzCgoqIEZpeCBjb2xkIGJvb3QgZGV0ZWN0aW9uIGZvciBsb2cgYnVmZmVyIHJlc2V0CgoqIFJldHVybiBlcnJvciBmb3IgaW52YWxpZCBsZW5ndGggc3BlY2lmaWVycyB3aXRoICJjcC5YIiBldGMuCgoqIEZpeCBzdGFydHVwIHByb2JsZW0gb24gTUlQUwoKKiBBbGxvdyBmb3IgQ09ORklHX1NQTEFTSF9TQ1JFRU4gZXZlbiB3aGVuIG5vIGV4cGxpY2l0CiAgYml0bWFwIHN1cHBvcnQgaXMgY29uZmlndXJlZAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTggSnVsIDIwMDM6CiAgLSBmaXggZW5kaW5hbmVzcyBwcm9ibGVtIGluIGNwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzEuYwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTggSnVsIDIwMDM6CiAgLSBmaXggbWVtb3J5IGNvbmZpZ3VyYXRpb24gZm9yIE1JUDQwNVQKICAtIGZpeCBwcmludG91dCBvZiBiYXVkcmF0ZSBmb3IgImxvYWRiIDxsb2FkYWRkcj4gPGJhdWRyYXRlPiIKCiogQ2xlYW51cCBvZiBUUU04Mnh4IGNvbmZpZ3VyYXRpb25zOyB1c2UgIm9mZmljaWFsIiBib2FyZCB0eXBlcwogIHRvIG1ha2Ugc2VsZWN0aW9uIGVhc2llci4KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgSnVsIDIwMDM6CiAgYWRkIGRlbGF5IHRvIGdldCBJMkMgd29ya2luZyB3aXRoICJpbW0iIGNvbW1hbmQgYW5kIHMzYzI0eDBfaTJjLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTcgSnVseSAwMzoKICAtIEZpeGVkIGJ1ZyBpbiBPTUFQMTUxMCBiYXVkIHJhdGUgZGl2aXNvciBzZXR0aW5ncy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMTYgSnVseSAyMDAzOgogIE1QQzg2MEZBRFMgZml4ZXM6CiAgLSBhZGQgTVBDODZ4QURTIHN1cHBvcnQgKHVzZXMgTVBDODZ4QURTLmgpCiAgLSBhZGQgODY2UC9UIGNvcmUgc3VwcG9ydCAoYWxzbyBNUEM4NTlUL01QQzg1OURTTC9NUEM4NTJUKQogICAgbyBQTFBSQ1IgY2hhbmdlcwogICAgbyBCUkcgY2hhbmdlcyAoRVhUQUwvWFRBTCByZXN0cmljdGVkIHRvIDEwTUh6KQogICAgbyBkb24ndCB0cnVzdCBnY2xrKCkgc29mdHdhcmUgbWVhc3VyZW1lbnQgYnkgZGVmYXVsdCwgZGVwZW5kIG9uCiAgICAgIENPTkZJR184eHhfR0NMS19GUkVRCiAgLSBhZGQgRFJBTSBTSU1NIG5vdCBpbnN0YWxsZWQgZGV0ZWN0aW9uCiAgLSB1c2UgbW9yZSAiY29ycmVjdCIgU0RSQU0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UKICAtIGFsbG93IGRpZmZlcmVudCBTRFJBTSBzaXplcyAoOHh4QURTIGhhcyA4TSkKICAtIGRlZmF1bHQgREVSIGlzIDAKICAtIHJlbW92ZSB1bnVzZWQgTUFNUiBkZWZpbmVzIGZyb20gRkFEUzg2MFQuaCAoYWxsIGRvbmUgaW4gZmFkcy5jKQogIC0gcmVuYW1lIE1BTVIvTUJNUiBkZWZpbmVzIHRvIGJlIG1vcmUgY29uc2lzdGVudC4gU2hvdWxkIGV2ZW50dWFsbHkKICAgIGJlIG1lcmdlZCBpbnRvIE14TVIgdG8gYmV0dGVyIHJlZmxlY3QgdGhlIFBvd2VyUVVJQ0MgZGF0YXNoZWV0LgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdWwgMjAwMzoKICBzdXBwb3J0IG5ldyBNb3Rvcm9sYSBQUTJGQURTLVpVIGV2YWx1YXRpb24gYm9hcmQgd2hpY2ggcmVwbGFjZWQKICBNUEM4MjYwQURTIGFuZCBNUEM4MjY2QURTCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgSWNlQ3ViZSBib2FyZCAod2l0aCBNR1Q1MTAwIGFuZCBNUEM1MjAwIENQVXMpCgoqIEFkZCBzdXBwb3J0IGZvciBNR1Q1MTAwIGFuZCBNUEM1MjAwIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDE1IEp1bCAyMDAzOgogIHVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAwNCBKdWwgMjAwMwogIC0gYWRkZWQgc3VwcG9ydCBmb3IgYXJtOTI1dCBjcHUgY29yZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNTEwIElubm92YXRvciBCb2FyZAoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDE0IEp1bCAyMDAzOgogIC0gYWRkIEkyQyBzdXBwb3J0IGZvciBzM2MyNDAwIHN5c3RlbXMgKHRyYWIgYm9hcmQpCiAgLSAocmUtKSBhZGQgInBpbmciIHRvIGNvbW1hbmQgdGFibGUKCiogRml4IGhhbmRsaW5nIG9mICJzbG93IiBQT1NUIHJvdXRpbmVzCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDM6CiAgLSBDb3JyZWN0IGZsYXNoIGFuZCBKRkZTMiBzdXBwb3J0IGZvciBNUEM4MjYwQURTCiAgLSBmaXggUFZSIHZhbHVlcyBhbmQgY2xvY2sgZ2VuZXJhdGlvbiBmb3IgUG93ZXJRVUlDQyBJSSBmYW1pbHkKICAgICg4MjcwLzgyNzUvODI4MCkKCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMDggSnVsIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTTY4SyB0YXJnZXRzCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAzIEp1bDoKICAtIEZpeCBQQ0kgY29uZmlnIHRhYmxlIGZvciBBMzAwMAogIC0gRml4IGlvYmFzZSBmb3IgbmF0c2VtaS5jCiAgICAoUENJX0JBU0VfQUREUkVTU18wIGlzIHRoZSBJTyBiYXNlIHJlZ2lzdGVyIGZvciBEUDgzODE1KQoKKiBBbGxvdyB0byBlbmFibGUgInNsb3ciIFBPU1Qgcm91dGluZXMgYnkga2V5IHByZXNzIG9uIHBvd2VyLW9uCiogRml4IHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBzd2l0Y2hpbmcgb2YgTENEIGJhY2tsaWdodCBvbiBMV01PTgoqIFR3ZWFrIG91dHB1dCBmb3JtYXQgZm9yIExXTU9OCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgSnVsIDIwMDM6CiAgLSBGaXggYnVnIGluIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFLgogIC0gQVI0MDUgY29uZmlnIHVwZGF0ZWQuCiAgLSBPQ1JUQy9PUlNHOiBic3AgY29tbWFuZCBhZGRlZC4KICAtIEFTSDQwNSBic3AgdXBkYXRlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIE5TQ1UgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyM00sIFRRTTg1ME0sIFRRTTg1NU0gYW5kIFRRTTg2ME0gbW9kdWxlcwoKKiBBZGQgc3VwcG9ydCBmb3IgQW0yOUxWMTYwTUwsIEFtMjlMVjMyME1MLCBhbmQgQW0yOUxWNjQwTUwKICBtaXJyb3IgYml0IGZsYXNoIG9uIFRRTTh4eE0gbW9kdWxlcwoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMzAgSnVuIDIwMDM6CiAgZ2V0IHJpZCBvZiBNS19DTURfRU5UUlkgbWFjcm87IHVwZGF0ZSBkb2MvUkVBRE1FLmNvbW1hbmQKCiogUGF0Y2ggYnkgU2ViIEphbWVzLCAzMCBKdW4gMjAwMzoKICBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgSTJDIGNvbmZpZ3VyYXRpb24gaW4gUkVBRE1FCgoqIEZpeCBwcm9ibGVtcyB3aXRoIHByZXZpb3VzIGxvZyBidWZmZXIgImZpeGVzIgoKKiBGaXggbWlub3IgaGVscCB0ZXh0IGlzc3VlcwoKKiAibG9nIGFwcGVuZCIgZGlkIG5vdCBhcHBlbmQgYSBuZXdsaW5lCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggc29tZSBtaXNzaW5nIGNvbW1hbmRzLCBjbGVhbnVwIGhlYWRlciBmaWxlcwogIChhdXRvc2NyaXB0LCBibXAsIGJzcCwgZmF0LCBtbWMsIG5hbmQsIHBvcnRpbywgLi4uKQoKKiBSZXdyaXRlIGNvbW1hbmQgbG9va3VwIGFuZCBoZWxwIGNvbW1hbmQgKGZpeCBwcm9ibGVtcyB3aXRoIGJ1YmJsZQogIHNvcnQgd2hlbiBzb3J0aW5nIGNvbW1hbmQgbmFtZSBsaXN0KS4gTWlub3IgY2xlYW51cCBoZXJlIGFuZCB0aGVyZS4KCiogTWVyZ2UgZnJvbSAic3RhYmxlIGJyYW5jaCIsIHRhZyBMQUJFTF8yMDAzXzA2XzI4XzE4MDAtc3RhYmxlOgogIC0gQWxsb3cgdG8gY2FsbCBzeXNtb24gZnVuY3Rpb24gaW50ZXJhY3RpdmVseQogIC0gUElDIG9uIExXTU9OIGJvYXJkIG5lZWRzIGRlbGF5IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgbWlzc2luZyBSU1IgZGVmaW5pdGlvbnMgZm9yIE1QQzh4eAogIC0gSW1wcm92ZSBsb2cgYnVmZmVyIGhhbmRsaW5nOiBndWFyYW50ZWUgY2xlYW4gcmVzZXQgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBzdXBwb3J0IGZvciBFWEJJVEdFTiBib2FyZCAoYWthICJnZW5pZSIpCiAgLSBBZGQgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIENvZGUgY2xlYW51cDoKICAtIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgdHJhaWxpbmcgZW1wdHkgbGluZXMsIEMrKyBjb21tZW50cywgZXRjLgogIC0gc3BsaXQgY21kX2Jvb3QuYyAoc2VwYXJhdGUgY21kX2JkaW5mby5jIGFuZCBjbWRfbG9hZC5jKQoKKiBQYXRjaGVzIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNSBKdW4gMjAwMzoKICAtIG1ham9yIHJld29yayBvZiBjb21tYW5kIHN0cnVjdHVyZQogICAgKHdvcmsgZG9uZSBtb3N0bHkgYnkgTWljaGFsIENlbmRyb3dza2kgYW5kIEpvYWtpbSBLcmlzdGlhbnNlbikKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAyNiBKdW4gMjAwMzoKICAtIGNzYjIyNiBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGNyZWRpdHMgZm9yIGxvZ29kbCBwb3J0IHVwZGF0ZWQKICAtIGlubm9rb20gY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBsb2dvZGwgdHJlZSB1cGRhdGUsIHN0aWxsIHdpdGggY29kaW5nIHN0eWxlIGluY29uc2lzdGVuY2llcwogIC0gYWRkZWQgT0NNIGZvciBwcGM0MDUgd2FybmluZyB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDI1IEp1biAyMDAzOgogIHVwZGF0ZSBOZXRWaWEgd2l0aCBWMiBib2FyZCBzdXBwb3J0CgoqIEhlYWRlciBmaWxlIGNsZWFudXAgZm9yIEFSTQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyNCBKdW4gMjAwMzoKICAtIG1ha2Ugc3VyZSB0byB1c2Ugb25seSBVLWJvb3QgcHJvdmlkZWQgaGVhZGVyIGZpbGVzCiAgLSBmaXggcHJvYmxlbXMgd2l0aCAiLnJvZGF0YS5zdHIxLjQiIHNlY3Rpb24gYXMgdXNlZCBieSBHQ0MtMy54CgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSnVuIDIwMDM6CiAgLSBVcGRhdGUgZXNkIEFTSDQwNSBib2FyZCBmaWxlcy4KICAtIFVwZGF0ZSBlc2QgREFTQV9TSU0gY29uZmlnIGZpbGUuCiAgLSBBZGQgcGluZyBjb21tYW5kIHRvIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjMgSnVuIDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIzIEp1biAyMDAzOgogIC0gY2xlYW51cCBvZiBHQ0MgMy54IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCA0IEp1biAyMDAzOgogIGFkZCBsYXJnZSBtZW1vcnkgc3VwcG9ydCBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRW5hYmxlZCBzdGFuZGFyZCB1LWJvb3QgZGV2aWNlIGFic3RyYWN0aW9uIGZvciBBUk0KICAtIEVuYWJsZWQgY29uc29sZSBkZXZpY2UgZm9yIEFSTQogIC0gSW5pdGlsaXplZCBiaV9iYXVkcmF0ZSBmb3IgQVJNCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAyMyBBcHIgMjAwMzoKICBmaXggYnl0ZSBvcmRlciBmb3IgODI0eCBJMkMgYWRkcmVzc2VzICh3cml0ZSBvcCkKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjAgSnVuIDIwMDM6CiAgLSBoeW1vZCB1cGRhdGUKICAtIGNsZWFudXAgKGVzcGVjaWFsbHkgZm9yIGdjYy0zLnggY29tcGlsZXJzKQoKKiBQYXRjaCBieSBUb20gR3VpbGxpYW1zLCAyMCBKdW4gMjAwMzoKICBhZGRlZCBDT05GSUdfNzUwRlggc3VwcG9ydCBmb3IgSUJNIDc1MEZYIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgRGV2aW4gQ3J1bWIsIDAyIEFwciAyMDAzOgogIEZpeCBjbG9jayBkaXZpZGVyIHJvdW5kaW5nIHByb2JsZW0gaW4gZHJpdmVycy9zZXJpYWwuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRml4ZWQgc21jOTFjMTExIGRyaXZlciB0byBzeW5jIHdpdGggdGhlIHUtYm9vdCBlbnZpcm9ubWVudAogICAgKGRyaXZlci9zbWM5MWMxMTEuYykuCiAgLSBBZGRlZCBldGhfaW5pdCBlcnJvciByZXR1cm4gY2hlY2sgaW4gTmV0TG9vcCAobmV0L25ldC5jKS4KCiogUGF0Y2ggYnkgS2VuIENob3UsIDE5IEp1bmUgMjAwMzoKICBBZGRlZCBzdXBwb3J0IGZvciBBMzAwMCBTQkMgYm9hcmQgKEFydGlzIE1pY3Jvc3lzdGVtcyBJbmMuKQoKKiBQYXRjaGVzIGJ5IE11cnJheSBKZW5zZW4sIDE3IEp1biAyMDAzOgogIC0gSHltb2QgYm9hcmQgZGF0YWJhc2UgbW9kczogYWRkICJ3aG8iIGZpZWxkIGFuZCBuZXcgeGlsaW54IGNoaXAgdHlwZXMKICAtIHByb3ZpZGUgbmV3ICJpbml0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIHNvIGNvZGUgZXh0ZXJuYWwgdG8KICAgICJjb21tb24vbWFpbi5jIiBjYW4gdXNlIHRoZSAicmVzZXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gYmVmb3JlCiAgICBlbnRlcmluZyB0aGUgbWFpbiBsb29wCiAgLSBhZGQgRFRUIHN1cHBvcnQgZm9yIGFkbTEwMjEgKG5ldyBmaWxlIGR0dC9hZG0xMDIxLmM7IGNvbmZpZwogICAgc2xpZ2h0bHkgZGlmZmVyZW50LiBzZWUgaW5jbHVkZS9jb25maWdzL2h5bW9kLmggZm9yIGFuIGV4YW1wbGUKICAgIChyZXF1aXJlcyBDT05GSUdfRFRUX0FETTEwMjEsIENPTkZJR19EVFRfU0VOU09SUywgYW5kCiAgICBDRkdfRFRUX0FETTEwMjEgZGVmaW5lZCkKICAtIGFkZCBuZXcgImVlcHJvbV9wcm9iZSgpIiBmdW5jdGlvbiB3aGljaCBoYXMgc2ltaWxhciBhcmdzIGFuZAogICAgYmVoYXZlcyBpbiBhIHNpbWlsYXIgd2F5IHRvICJlZXByb21fcmVhZCgpIiBldGMuCiAgLSBhZGQgODI2MCBGQ0MgZXRoZXJuZXQgbG9vcGJhY2sgY29kZSAobmV3ICJldGhfbG9vcGJhY2tfdGVzdCgpIgogICAgZnVuY3Rpb24gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZpbmluZyBDT05GSUdfRVRIRVJfTE9PUEJBQ0tfVEVTVCkKICAtIGdkYnRvb2xzIGNvcHlyaWdodCB1cGRhdGUKICAtIGVuc3VyZSB0aGF0IHNldF9tc3IoKSBleGVjdXRlcyB0aGUgInN5bmMiIGFuZCAiaXN5bmMiIGluc3RydWN0aW9ucwogICAgYWZ0ZXIgdGhlICJtdG1zciIgaW5zdHJ1Y3Rpb24gaW4gY3B1L21wYzgyNjAvaW50ZXJydXB0cy5jCiAgLSA4MjYwIEkvTyBwb3J0cyBmaXg6IE9wZW4gRHJhaW4gc2hvdWxkIGJlIHNldCBsYXN0IHdoZW4gY29uZmlndXJpbmcKICAtIGFkZCBTSVUgSVJRIGRlZmluZXMgZm9yIDgyNjAKICAtIGFsbG93IExEU0NSSVBUIG92ZXJyaWRlIGFuZCBPQkpDRkxBR1MgaW5pdGlhbGl6YXRpb246IGNoYW5nZSB0bwogICAgY29uZmlnLm1rIHRvIGFsbG93IGJvYXJkIGNvbmZpZ3VyYXRpb25zIHRvIG92ZXJyaWRlIHRoZSBHTlUKICAgIGxpbmtlciBzY3JpcHQsIHNlbGVjdGVkIHZpYSB0aGUgTERTQ1JJUFQsIG1ha2UgdmFyaWFibGUsIGFuZCB0bwogICAgZ2l2ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHRoZSBPQkpDRkxBR1MgbWFrZSB2YXJpYWJsZQogIC0gODI2MCBpMmMgZW5oYW5jZW1lbnQ6CiAgICBvIGNvcnJlY3RseSBleHRlbmRzIHRoZSB0aW1lb3V0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBhbGwKICAgICAgcXVldWVkIG1lc3NhZ2VzIGZvciBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlCiAgICBvIHdpbGwgbm90IGNvbnRpbnVlIHdpdGggcmVjZWl2ZSBpZiB0cmFuc21pdCB0aW1lcyBvdXQKICAgIG8gZW5zdXJlcyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayBpcyBkb25lIGZvciBhbGwgcXVldWVkIHR4CiAgICAgIGFuZCByeCBtZXNzYWdlcwogICAgbyBjb3JyZWN0bHkgZGV0ZWN0cyBib3RoIHR4IGFuZCByeCB0aW1lb3V0cywgb25seSBkZWxpdmVycyBvbmUgdG8KICAgICAgdGhlIGNhbGxiYWNrLCBhbmQgZG9lcyBub3Qgb3ZlcndyaXRlIGFuIGVhcmxpZXIgZXJyb3IKICAgIG8gbG9naWMgaW4gaTJjX3Byb2JlIG5vdyBjb3JyZWN0CiAgLSBhZGQgInZwcmludGYoKSIgZnVuY3Rpb24gc28gdGhhdCAicGFuaWMoKSIgZnVuY3Rpb24gY2FuIGJlCiAgICB0ZWNobmljYWxseSBjb3JyZWN0CiAgLSBtYW55IEh5bW9kIGJvYXJkIGNoYW5nZXMKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE0IEp1biAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIExvZ290cm9uaWMgREwgZGF0YWxvZ2dlciBib2FyZAogIC0gY2xlYW51cCBzZXJpYWwgbGluZSBhZnRlciBrZXJtaXQgYmluYXJ5IGRvd25sb2FkCiAgLSBhZGQgZGVidWdYIG1hY3JvIChkZWJ1ZyBsZXZlbCBzdXBwb3J0KQogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdC4KCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDEyIEp1biAyMDAzOgogIC0gcmV3cml0ZSBvZiB0aGUgUzNDMjRYMCByZWdpc3RlciBkZWZpbml0aW9ucyBzdHVmZgogIC0gImRyaXZlciIgZm9yIHRoZSBidWlsdC1pbiBTM0MyNFgwIFJUQwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEyIEp1biAyMDAzOgogIC0gQWRkIE1JSSBzdXBwb3J0IGFuZCBFdGhlcm5ldCBQSFkgaW5pdGlhbGl6YXRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQKICAtIEZpeCBpbmNvcnJlY3QgU0lVTUNSIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBieSB3cm9uZyBIYXJkIFJlc2V0CiAgICBjb25maWd1cmF0aW9uIHdvcmQgc3VwcGxpZWQgYnkgRlBHQSBvbiBzb21lIE1QQzgyNjBBRFMgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMCBKdW4gMjAwMzoKICBVbmlmeSBzdGF0dXMgTEVEIGludGVyZmFjZQoKKiBBZGQgc3VwcG9ydCBmb3IgRFMxMjg4NyBSVEM7IGFkZCBSVEMgc3VwcG9ydCBmb3IgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDExIEp1biAyMDAzOgogIE1vZGlmaWNhdGlvbnMgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdAogIC0gQWRkIEF0bWVsIERhdGFGbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nLgogIC0gQWRkIHBvc3NpYmlsaXR5IHRvIGJvb3QgYSBMaW51eCBmcm9tIERhdGFGbGFzaCB3aXRoIEJPT1RNIGNvbW1hbmQuCiAgLSBBZGQgRmxhc2ggZGV0ZWN0aW9uIG9uIEF0bWVsIEFUOTFSTTkyMDBESwogICAgKGJldHdlZW4gQXRtZWwgQVQ0OUJWMTYxNCBhbmQgQVQ0OUJWMTYxNEEgZmxhc2hlcykKICAtIFJlcGxhY2Ugb2xkIEV0aGVybmV0IFBIWSBsYXllciBmdW5jdGlvbnMKICAtIENoYW5nZSBsaW5rIGFkZHJlc3MKCiogUGF0Y2ggYnkgRnJhbmsgU21pdGgsIDkgSnVuIDIwMDM6CiAgdXNlIENSSVRfRVhDRVBUSU9OIGZvciBtYWNoaW5lIGNoZWNrIG9uIDR4eAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMyBKdW4gMjAwMzoKICBhZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgImNhcmluZm8iIGNvbW1hbmQgaW4gY21kX2ltbWFwLmMKCiogRml4IENPTkZJR19ORVRfTVVMVEkgc3VwcG9ydCBpbiBpbmNsdWRlL25ldC5oCgoqIFBhdGNoZXMgYnkgS3lsZSBIYXJyaXMsIDEzIE1hciAyMDAzOgogIC0gQWRkIEZBVCBwYXJ0aXRpb24gc3VwcG9ydAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgRkFUCiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIHZpZGVvCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEVuYWJsZSBNTUMgYW5kIEZBVCBmb3IgbHViYm9jayBib2FyZAogIC0gT3RoZXIgbWlzYyBjaGFuZ2VzIGZvciBsdWJib2NrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgQXByaWwgMDIsIDIwMDM6CiAgZml4IGZvciBTTVNDOTExMTEgZHJpdmVyCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNCBKdW4gMjAwMzoKICBtYWtlIHBwYzQwNSBldGhlcm5ldCBkcml2ZXIgY29tcGF0aWJsZSB3aXRoIENPTkZJR19ORVRfTVVMVEkgb3B0aW9uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgSnVuIDIwMDM6CiAgLSBQUEM0eHg6IEZpeCBidWcgZm9yIGluaXRpYWwgc3RhY2sgaW4gZGF0YSBjYWNoZSBhcyBwb2ludGVkIG91dCBieQogICAgVGhvbWFzIFNjaGFlZmVyICh0c2NoYWVmZXJAZ2lnYS1zdHJlYW0uZGUpLiBOb3cgaW5pdGFsIHN0YWNrIGluCiAgICBkYXRhIGNhY2hlIGNhbiBiZSB1c2VkIGV2ZW4gaWYgdGhlIGNoaXAgc2VsZWN0IGlzIGluIHVzZS4KICAtIENGR19SWF9FVEhfQlVGRkVSIGFkZGVkIHRvIHNldCB0aGUgZXRoZXJuZXQgcmVjZWl2ZSBidWZmZXIgY291bnQKICAgIChzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKS4KICAtIENoYW5nZWQgY29uZmlnIGZpbGVzIG9mIENPTkZJR19FRVBSTzEwMCBib2FyZHMgdG8gdXNlIHRoZQogICAgQ0ZHX1JYX0VUSF9CVUZGRVIgZGVmaW5lLgoKKiBBZGQgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIGF0IDEwMC81MCBNSHoKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIEp1biAyMDAzOgogIG1ham9yIHJlY29uc3RydWN0aW9uIG9mIG5ldHdvcmtpbmcgY29kZTsKICBhZGQgInBpbmciIHN1cHBvcnQgKG91dGdvaW5nIG9ubHkhKQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgSnVuZSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1VCBib2FyZAoKKiBQYXRjaGVzIGJ5IFVkaSBGaW5rZWxzdGVpbiwgMiBKdW5lIDIwMDM6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCiAgICBib2FyZC1zcGVjaWZpYyBkcnZfa2V5Ym9hcmRfaW5pdCBhcyB3ZWxsIGFzIGRlZmluaW5nIENPTkZJR19LRVlCT0FSRCAuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUkJDODIzIGJvYXJkLgogIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQogICAgSG9yaXpvbnRhbCBQaXhlbCBDb3VudCBmaWVsZC4KCiogRml4IGFsaWdubWVudCBwcm9ibGVtIGluIEJPT1RQIChkaGNwX2xlYXNldGltZSBvcHRpb24pCiAgW3BvaW50ZWQgb3V0IGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDIgSnVuIDIwMDNdCgoqIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBlMTAwMCBnaWcgY2FyZHMuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6CiAgZml4IGNyaXRpY2FsIHR5cG8gaW4gTUFNUiBkZWZpbml0aW9uIChpbmNsdWRlL21wYzh4eC5oKQoKKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAyIEp1biAyMDAzCiAgTWlub3IgY2hhbmdlcyBmb3IgS1VQNEsgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjkgTWF5IDIwMDM6CiAgRml4ZWQgcmFycCBib290IG1ldGhvZCBmb3IgSUEzMiBhbmQgb3RoZXIgbGl0dGxlLWVuZGlhbiBDUFVzLgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjggTWF5IDIwMDM6CiAgQWRkZWQgcG9ydCBJL08gY29tbWFuZHMuCgoqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMjggTWF5IDIwMDMKICAtIGNwdS9tcGM4MjR4L3N0YXJ0LlM6IGZpeCByZWxvY2F0aW9uIGNvZGUgd2hlbiBib290aW5nIGZyb20gUkFNCiAgLSBtaW5vciBwYXRjaGVzIGZvciB1dHg4MjQ1CgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMjggTWF5IDIwMDM6CiAgeDg2IHVwZGF0ZQoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCA5IE1heSAyMDAzICsgMjcgTWF5IDIwMDM6CiAgYWRkIG5hbmQgZmxhc2ggc3VwcG9ydCB0byBTWE5JODU1VCBjb25maWd1cmF0aW9uCiAgZml4L2V4dGVuZCBuYW5kIGZsYXNoIHN1cHBvcnQ6CiAgLSBmaXggJ25hbmQgZXJhc2UnIGNvbW1hbmQgc28gZG9lcyBub3QgZXJhc2UgYmFkIGJsb2NrcwogIC0gZml4ICduYW5kIHdyaXRlJyBjb21tYW5kIHNvIGRvZXMgbm90IHdyaXRlIHRvIGJhZCBibG9ja3MKICAtIGZpeCBuYW5kX3Byb2JlKCkgc28gaGFuZGxlcyBubyBmbGFzaCBkZXRlY3RlZCBwcm9wZXJseQogIC0gYWRkIGRvYy9SRUFETUUubmFuZAogIC0gYWRkIC5qZmZzMiBhbmQgLm9vYiBvcHRpb25zIHRvIG5hbmQgcmVhZC93cml0ZQogIC0gYWRkICduYW5kIGJhZCcgY29tbWFuZCB0byBsaXN0IGJhZCBibG9ja3MKICAtIGFkZCAnY2xlYW4nIG9wdGlvbiB0byAnbmFuZCBlcmFzZScgdG8gd3JpdGUgSkZGUzIgY2xlYW4gbWFya2VycwogIC0gbWFrZSBOQU5EIHJlYWQvd3JpdGUgZmFzdGVyCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyMyBNYXkgMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAogIGluc3RlYWQgQ0ZHX01PTklUT1JfTEVOIGlzIG5vdyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lICBfYXRfY29tcGlsZV8KICBfdGltZV8gICghKSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBVLUJvb3QgaW1hZ2UsCiAgb3IgaW4gYSBzZXBhcmF0ZSBmbGFzaCBzZWN0b3IuCgoqIENsZWFudXAgQ0ZHX0RFUiAjZGVmaW5lcyBpbiBjb25maWcgZmlsZXMgKHdkIG1haW50YWluZWQgb25seSkKCiogRml4IGRhdGEgYWJvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBhcm05MjB0IENQVQoKKiBGaXggYWxpZ25tZW50IHByb2JsZW1zIHdpdGggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IERvbmFsZCBXaGl0ZSwgMjEgTWF5IDIwMDM6CiAgZml4IGNhbGN1bGF0aW9uIG9mIGJhc2UgYWRkcmVzcyBpbiBwY2lfaG9zZV9jb25maWdfZGV2aWNlKCkKCiogRml4IGJ1ZyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZzogImNtZDE7Y21kMiIgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCiAgZXhlY3V0ZSAiY21kMiIsIGV2ZW4gaWYgImNtZDEiIGZhaWxzLiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKICB0byAicnVuIHZhcjEgdmFyMiIgd2hlcmUgdGhlIGNvbnRlbnRzIG9mICJ2YXIyIiB3aWxsIE5PVCBiZQogIGV4ZWN1dGVkIHdoZW4gYSBjb21tYW5kIGluICJ2YXIxIiBmYWlscy4KCiogQWRkIHplcm8tY29weSByYW1kaXNrIHN1cHBvcnQgKHJlcXVpcmVzIGNvcnJlc3BvbmRpbmcga2VybmVsIHN1cHBvcnQhKQoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMjAgTWF5IDIwMDM6CiAgSW4gcHJlcGFyYXRpb24gZm9yIGFuIGl4cCBwb3J0LCByZW5hbWUgY3B1L3hzY2FsZSBhbmQgYXJjaC14c2NhbGUKICBpbnRvIGNwdS9weGEgYW5kIGFyY2gtcHhhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDAzOgogIC0gSUJNIFBQQzQwNUVQIHBvcnQgYWRkZWQuCiAgLSBDT05GSUdfVUFSVDFfQ09OU09MRSBhZGRlZC4gSWYgZGVmaW5lZCBpbnRlcm5hbCBVQVJUMSAoYW5kIG5vdAogICAgVUFSVDApIGlzIHVzZWQgYXMgZGVmYXVsdCBVLUJvb3QgY29uc29sZS4gUFBDNHh4IG9ubHkhCiAgLSBlc2QgQVNINDA1IGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCkuCiAgLSBCVUJJTkdBNDA1RVAgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkIC0gSUJNIEV2YWwgQm9hcmQpLgogIC0gZXNkIENQQ0k0MDVBQiBib2FyZCBhZGRlZC4KICAtIGVzZCBQTUM0MDUgYm9hcmQgYWRkZWQuCiAgLSBVcGRhdGUgb2Ygc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTkgTWFpIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUtMyBib2FyZAoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAyMiBNYXkgMjAwMzoKICBGaXggcHJvYmxlbSB3aXRoIG9ubHkgcGFydGlhbGx5IGNsZWFyZWQgLmJzcyBzZWdtZW50CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMiBNYXkgMjAwMzoKICBnZXQgUENJIHRvIHdvcmsgb24gYSBNUEM4MjY2QURTIGJvYXJkOyBpbmNvcnBvcmF0ZSBjaGFuZ2UgdG8KICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwoKKiBQYXRjaCBieSBOeWUgTGl1LCAxIE1heSAyMDAzOgogIG1pbm9yIHBhdGNoZXMgZm9yIHRoZSBGQURTOHh4CgoqIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0CgoqIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzICBWRkQgY29tbWFuZDsKICBhbGxvdyB0byBwYXNzIGJvb3QgYml0bWFwIGFkZHJlc3NlcyBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7CiAgYWxsb3cgZm9yIHplcm8gYm9vdCBkZWxheQoKKiBQYXRjaCBieSBDaHJpc3RpYW4gR2Vp32luZ2VyLCAxOSBNYXkgMjAwMjoKICBPbiBUUkFCOiB3YWl0IHVudGlsIHRoZSBkdW1teSBieXRlIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudAoKKiBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDIyIEFwciAyMDAzOgogIHVwZGF0ZSBmb3IgQ3JheUwxIGJvYXJkCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyMSBBcHIgMjAwMzoKICBhZGQgYm9vdCBzdXBwb3J0IGZvciBBUlRPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTEgQXByIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMzgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyNCBKYW4gMjAwMzoKICBGaXggY291bnRpbmcgb2YgZXh0ZW5kZWQgcGFydGl0aW9ucyBpbiBkaXNrYm9vdCBjb21tYW5kCgoqIFBhdGNoIGJ5IENocmlzdG9waGUgTGluZGhlaW1lciwgMjAgTWF5IDIwMDM6CiAgYWxsb3cgdGhlIHVzZSBvZiBDRkdfTE9BRFMgd2hlbiBDRkdfTk9fRkxBU0ggaXMgc2V0CgoqIEZpeCBTRFJBTSB0aW1pbmcgb24gUHVycGxlIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggb24gQVRDIGJvYXJkCiAgKGluY2x1ZGVzIHN1cHBvcnQgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlIFBDIENhcmQgY29udHJvbGxlcnMsCiAgYW5kIFllbnRhLWNvbXBhdGlibGUgUENJLXRvLUNhcmRCdXMgY29udHJvbGxlcnMpCgoqIFBhdGNoIGJ5IE1hdGhpanMgSGFhcm1hbiwgMDggTWF5IDIwMDM6CiAgQWRkIGxhbjkxYzk2IGRyaXZlciAodGVzdGVkIG9uIEx1YmJvY2sgYW5kIGN1c3RvbSBQWEEyNTAgYm9hcmQgb25seSkKCiogRml4IHByb2JsZW0gd2l0aCB1c2FnZSBvZiAidHJ1ZSIgKHVuZGVmaW5lZCBpbiBjdXJyZW50IHZlcnNpb25zIG9mIGJmZC5oKQoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvbWVzcyBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgS2VpdGggT3V0d2F0ZXIsIDI4IEFwciAyMDAzOgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyBhbmQgYWRkaXRpb25zIHRvIEdFTjg2MFQgYm9hcmQgc3BlY2lmaWMgY29kZS4KICAtIEFkZGVkIEdFTjg2MF9TQyB2YXJpYW50IHRvIEdFTjg2MFQuCiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIHRvIEdFTjg2MFQgZG9jdW1lbnRhdGlvbi4KICAtIENvcnJlY3QgZHVwbGljYXRlIGVudHJ5IGluIFUtQm9vdCBDUkVESVRTIGZpbGUuCiAgLSBBZGQgR0VOODYwVF9TQyBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmaWxlLgogIC0gVXBkYXRlIENSRURJVFMgZmlsZSB3aXRoIEdFTjg2MFRfU0MgaW5mby4KCiogVXBkYXRlIFNtaXRocyBBZXJvc3BhY2UgYWRkcmVzc2VzIGluIE1BSU5UQUlORVJTIGZpbGUKCiogRml4IGVycm9yIGhhbmRsaW5nIGluIGh1c2gncyB2ZXJzaW9uIG9mICJydW4iIGNvbW1hbmQKCiogTFdNT04gZXh0ZW5zaW9uczoKICAtIFNwbGFzaHNjcmVlbiBzdXBwb3J0CiAgLSBtb2RlbSBzdXBwb3J0CiAgLSBzeXNtb24gc3VwcG9ydAogIC0gdGVtcGVyYXR1cmUgZGVwZW5kZW5kIGVuYWJsaW5nIG9mIExDRAoKKiBBbGxvdyBib290aW5nIGZyb20gb2xkICJQUENCb290IiBkaXNrIHBhcnRpdGlvbnMKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNTUgQm9hcmQgLyBNUEM4MjU1IENQVQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBzdXJlIEJsb2NrIExvY2sgQml0cyBnZXQgY2xlYXJlZCBpbiBSMzYwTVBJIGZsYXNoIGRyaXZlcgoKKiBNUEM4MjMgTENEIGRyaXZlcjogRmlsbCBjb2xvciBtYXAgYmFja3dhcmRzLCB0byBhbGxvdyBmb3Igc3RlYWR5CiAgZGlzcGxheSB3aGVuIExpbnV4IHRha2VzIG92ZXIKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMgKHRoaXMgdGltZSBmb3IgcmVhbCkuCgoqIEFkZCBzdXBwb3J0IGZvciAiYm1wIGluZm8iIGFuZCAiYm1wIGRpc3BsYXkiIGNvbW1hbmRzIHRvIGxvYWQKICBiaXRtYXAgaW1hZ2VzOyB0aGlzIGNhbiBiZSB1c2VkIChmb3IgZXhhbXBsZSBpbiBhICJwcmVib290IgogIGNvbW1hbmQpIHRvIGRpc3BsYXkgYSBzcGxhc2ggc2NyZWVuIHZlcnkgcXVpY2tseSBhZnRlciBwb3dlcm9uLgoKKiBBZGQgc3VwcG9ydCBmb3IgMTMzIE1IeiBjbG9jayBvbiBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxMCBBcHIgMjAwMzoKICBVcGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCiogQWRkIG5ldyBtZWFuaW5nIHRvICJhdXRvc3RhcnQiIGVudmlyb25tZW50IHZhcmlhYmxlOgogIElmIHNldCB0byAibm8iLCBhIHN0YW5kYWxvbmUgaW1hZ2UgcGFzc2VkIHRvIHRoZQogICJib290bSIgY29tbWFuZCB3aWxsIGJlIGNvcGllZCB0byB0aGUgbG9hZCBhZGRyZXNzCiAgKGFuZCBldmVudHVhbGx5IHVuY29tcHJlc3NlZCksIGJ1dCBOT1QgYmUgc3RhcnRlZC4KICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvYWQgYW5kIHVuY29tcHJlc3MgYXJiaXRyYXJ5CiAgZGF0YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBBcHIgMjAwMzoKICBDaGFuZ2VkIERIQ1AgY2xpZW50IHRvIHVzZSBJUCBhZGRyZXNzIGZyb20gc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQKICBmcm9tIHRoZSBPRkZFUiBwYWNrZXQgaW4gdGhlIHNlcnZlciBvcHRpb24gZmllbGQgIzU0IGluIHRoZSBSRVFVRVNUCiAgcGFja2V0LiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB1c2luZyBhIFdpbmRvd3MgMjAwMCBESENQIHNlcnZlciwKICB3aGVyZSB0aGUgREhDUC1zZXJ2ZXIgaXMgbm90IHRoZSBURlRQLXNlcnZlci4KCiogU2V0IG1heCBicmlnaHRuZXNzIGZvciBNTjExMjM2IGRpc3BsYXlzIG9uIFRSQUIgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgbW9kdWxlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDQgQXByIDIwMDM6CiAgQWRkIElETUEgZXhhbXBsZSBjb2RlICh0ZXN0ZWQgb24gODI2MCBvbmx5KQoKKiBBZGQgc3VwcG9ydCBmb3IgUHVycGxlIEJvYXJkIChNSVBTNjQgNUtjKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzY0IDVLYyBDUFVzCgoqIEZpeCBtaXNzaW5nIHNldHRpbmcgb2YgImxvYWRhZGRyIiBhbmQgImJvb3RmaWxlIiBvbiBBUk0gYW5kIE1JUFMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEFwciAyMDAzOgogIC0gdXBkYXRlIE1JUDQwNS00IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBBcHIgMjAwMzoKICAtIFUtQm9vdCB2ZXJzaW9uIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGFkZGVkCiAgICAoQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUpLgogIC0gQ2hhbmdlZCBQUEM0MDVHUHIgdmVyc2lvbiBmcm9tIEEgdG8gQi4KICAtIENoYW5nZWQgQ1BDSTQwNSB0byB1c2UgQ1RTIGluc3RlYWQgb2YgRFNSIG9uIFBQQzQwNSBVQVJUMS4KCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgMDMgQXByaWwgMjAwMzoKICAtIGZpeCBQQ0kgSVJRcyBvbiBNUEwgYm9hcmRzCiAgLSBmaXggdHdvIG1vcmUgdW4tcmVsb2NhdGVkIHBvaW50ZXIgcHJvYmxlbXMKCiogRml4IGJlaGF2aW91ciBvZiAicnVuIiBjb21tYW5kOgogIC0gcHJpbnQgZXJyb3IgbWVzc2FnZSBpdiB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdAogIC0gdGVybWluYXRlIHByb2Nlc3Npbmcgb2YgYXJndW1lbnRzIGluIGNhc2Ugb2YgZXJyb3IKCiogUGF0Y2hlcyBieSBQZXRlciBGaWd1bGksIDEwIE1hciAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQlRVQVJUIG9uIFBYQSBwbGF0Zm9ybQogIC0gQWRkIHN1cHBvcnQgZm9yIFdFUCBFUDI1MCAoUFhBKSBib2FyZAoKKiBGaXggZmxhc2ggcHJvYmxlbXMgb24gSU5DQS1JUDsgYWRkIHRvb2wgdG8gYWxsb3cgYnJ1bmluZyBpbWFnZXMgIHRvCiAgZmxhc2ggdXNpbmcgYSBCREkyMDAwCgoqIEltcGxlbWVudCBmaXggZm9yIEkyQyBFZGdlIENvbmRpdGlvbnMgcHJvYmxlbSBmb3IgYWxsIGJvYXJkcyB0aGF0CiAgdXNlIHRoZSBiaXQtYmFuZ2luZyBkcml2ZXIgKGNvbW1vbi9zb2Z0X2kyYy5jKQoKKiBQYXRjaCBieSBNYXJ0aW4gV2luaXN0b2VyZmVyLCAyMyBNYXIgMjAwMwogIC0gQWRkIHBvcnQgdG8gTVBDNTU1LzU1NiBtaWNyb2NvbnRyb2xsZXJzCiAgLSBBZGQgc3VwcG9ydCBmb3IgY21pIGN1c3RvbWVyIGJvYXJkIHdpdGgKICAgIEludGVsIDI4RjEyOEozQSwgMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBmbGFzaC4KCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAyOCBNYXIgMjAwMzoKICAtIGZpeCBjb21tb24vY21kX25hbmQuYwoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgMjQgTWFyIDIwMDM6CiAgLSBhZGQgdGhyZWFkcyAvIHNjaGVkdWxlciBleGFtcGxlIGNvZGUKCiogQWRkIHBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAzMSBNYXIgMjAwMzoKICAtIGFkZCBjdHJsLWMgc3VwcG9ydCBmb3Iga2VybWl0IGRvd25sb2FkCiAgLSBhbGlnbiBiZGluZm8gb3V0cHV0IG9uIEFSTQogIC0gY3NiMjI2IGJvYXJkOiBicmluZyBpbiBzeW5jIHdpdGggaW5ub2tvbS9tZW1zZXR1cC5TCiAgLSBjc2IyMjYgYm9hcmQ6IGZpeCBNRFJFRlIgaGFuZGxpbmcKICAtIG1pc2MgZG9jIGZpeGVzIC8gZXh0ZW5zaW9ucwogIC0gaW5ub2tvbSBib2FyZDogY2xlYW51cCwgTURSRUZSIGZpeCBpbiBtZW1zZXR1cC5TLCBjb25maWcgdXBkYXRlCiAgLSBhZGQgQk9PVF9QUk9HUkVTUyB0byBhcm1saW51eC5jCgoqIEFkZCBDUFUgSUQsIHZlcnNpb24sIGFuZCBjbG9jayBzcGVlZCBmb3IgSU5DQS1JUAoKKiBQYXRjaGVzIGJ5IERhdmUgRWxsaXMsIDE4IE1hciAyMDAzIGZvciBTWE5JODU1VCBib2FyZDoKICAtIGZpeCBTUkFNIGFuZCBTRFJBTSBtZW1vcnkgc2l6aW5nCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0CiAgLSBhZGQgTUFDIGFkZHJlc3MgZm9yIHNlY29uZCAoU0NDMSkgZXRoZXJuZXQgcG9ydAoKKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgVFFNODI2MCBib2FyZAoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE2IE1hciAyMDAzOgogIC0gQWRkIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgTkFORAogICAgZmxhc2ggKGNlcnRhaW4gZm9ybXMgb2Ygd2hpY2ggYXJlIGNhbGxlZCBTbWFydE1lZGlhKS4KICAtIEFkZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQuCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxOSBNYXIgMjAwMzoKICAtIHVzZSBhcm0tbGludXgtZ2NjIGFzIGRlZmF1bHQgY29tcGlsZXIgZm9yIEFSTQogIC0gZml4IGkyYyBmaXh1cCBjb2RlCiAgLSBmaXggbWlzc2luZyBiYXVkcmF0ZSBzZXR0aW5nCiAgLSBhZGRlZCAkbG9hZGFkZHIgLyBDRkdfTE9BRF9BRERSIHN1cHBvcnQgdG8gbG9hZGIKICAtIG1vdmVkICJpZ25vcmluZyB0cmFpbGluZyBjaGFyYWN0ZXJzIiBfYmVmb3JlXyB1LWJvb3Qgd2FudHMgdG8KICAgIHByaW50IG91dCBkaWFnbm9zdGljcyBtZXNzYWdlczsgcmVtb3ZlcyBib2d1cyBjaGFyYWN0ZXJzIGF0IHRoZQogICAgZW5kIG9mIHRyYW5zbWlzc2lvbgoKKiBQYXRjaCBieSBKb2huIFpoYW4sIDE4IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBib2FyZHMKCiogUGF0Y2ggYnkgUm9sZiBPZmZlcm1hbm5zLCAyMSBNYXIgMjAwMzoKICBwb3J0ZWQgdGhlIGRucDExMTAgcmVsYXRlZCBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgYXJtYm9vdCBjdnMgdG8KICBjdXJyZW50IHUtYm9vdCBjdnMuIHNtYzkxMTExIGRvZXMgbm90IHdvcmsuIHByb2JsZW0gbWFya2VkIGluCiAgc21jOTExMTEuYywgZ3JlcCBmb3IgIkZJWE1FIi4KCiogUGF0Y2ggYnkgQnJpYW4gQXVsZCwgMjUgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNUTSBmbGFzaCBjaGlwcyBvbiBlYm9ueSBib2FyZAoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIE1QQzgyNTAgQm9hcmRzIChQTTgyNSBtb2R1bGUpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjUgTWFyIDIwMDM6CiAgLSBQQ0k0MDUgdXBkYXRlLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE1hciAyMDAzOgogIC0gQ1BDSTQwNTIgdXBkYXRlIChzdXBwb3J0IGZvciByZXZpc2lvbiAzKS4KICAtIFNldCBlZGdlIGNvbmRpdGlvbmluZyBjaXJjdWl0cnkgb24gUFBDNDA1R1ByIGZvciBjb21wYXRpYmlsaXR5CiAgICB0byBleGlzdGluZyBQUEM0MDVHUCBkZXNpZ25zLgogIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KCiogRXh0ZW5kIElOQ0FJUCBib2FyZCBzdXBwb3J0OgogIC0gYWRkIGF1dG9tYXRpYyBSQU0gc2l6ZSBkZXRlY3Rpb24KICAtIGFkZCAiYmRpbmZvIiBjb21tYW5kCiAgLSBwYXNzIGZsYXNoIGFkZHJlc3MgYW5kIHNpemUgdG8gTGludXgga2VybmVsCiAgLSBzd2l0Y2ggdG8gMTUwIE1IeiBjbG9jawoKKiBBdm9pZCBmbGlja2VyIG9uIHRoZSBUUkFCJ3MgVkZEIGJ5IHN5bmNocm9uaXppbmcgdGhlIGVuYWJsZSB3aXRoCiAgdGhlIEhTWU5DL1ZTWU5DLiBSZXF1aXJlcyBuZXcgQ1BMRCBjb2RlIChWZXJzaW9uIDEwMSBmb3IgUmV2LiAxMDAKICBib2FyZHMsIHZlcnNpb24gMTUzIGZvciBSZXYuIDIwMCBib2FyZHMpLgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMTIgTWFyIDIwMDM6CiAgRml4IHJlbG9jYXRpb24gcHJvYmxlbSBvZiBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHN0cmluZyBwb2ludGVycwogIGluIGNvbW1vbi9jbWRfcGNpLmMKCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbPZtLCAxMiBNYXIgMjAwMzoKICBDbGVhbnVwICYgYnVnIGZpeGVzIGZvciBKRkZTMiBjb2RlOgogIC0gdGhlIG1lbW9yeSBtYW5nZW1lbnQgd2FzIGJyb2tlbi4gSXQgY2F1c2VkIGhhdm9jIG9uIG1hbGxvYyBieQogICAgd3JpdGluZyBiZXlvbmQgdGhlIGJsb2NrIGJvdW5kYXJpZXMuCiAgLSB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciBmaWxlcyB3YXMgd3JvbmcsIHNvbWV0aW1lcyByZXN1bHRpbmcKICAgIGluIHNob3J0IGZpbGUgcmVhZHMuCiAgLSBkYXRhIGNvcHlpbmcgbm93IG9wdGlvbmFsbHkgdGFrZXMgZnJhZ21lbnQgdmVyc2lvbiBudW1iZXJzIGludG8KICAgIGFjY291bnQsIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBvbGRlciBkYXRhLgogIFNlZSBkb2MvUkVBRE1FLkpGRlMyIGZvciBkZXRhaWxzLgoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgogIC0gMTYvMzIgTUIgYW5kIDUwLzgwIE1IeiBzdXBwb3J0IHdpdGggYXV0by1kZXRlY3Rpb24gZm9yIElQODYwCiAgLSBFVEgwNSBhbmQgQkVEQlVHIHN1cHBvcnQgZm9yIENVODI0CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQogIC0gbmV3IEJPT1RST00vRkxBU0gwIGFuZCBET0MgYmFzZSBmb3IgUE04MjYKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMiBNYXIgMjAwMzoKICBGaXggdGhlIGNocGFydCBjb21tYW5kIG9uIGlubm9rb20gYm9hcmQKCiogTmFtZSBjbGVhbnVwOgogIG12IGluY2x1ZGUvYXNtLWkzODYvcHBjYm9vdC1pMzg2LmggaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCiAgcy9QUENCb290L1UtQm9vdC8gaW4gc29tZSBmaWxlcwogIHMvcEltYWdlL3VJbWFnZS8gIGluIHNvbWUgZmlsZXMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTUgSmFuIDIwMDM6CiAgRml4ICcnIGNvbW1hbmQgbGluZSBxdW90aW5nCgoqIFBhdGNoIGJ5IFRoZSBMRU9YIHRlYW0sIDE5IEphbiAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFTFBUODYwIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgRGFsbGFzIGRzMTY0eCBSVEMKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDMxIEphbiAyMDAzOgogIC0gbWluaW1hbCBzZXR1cCBmb3IgQ2FyZEJ1cyBicmlkZ2VzCiAgLSBhZGQgRUVQUk9NIHJlYWQvd3JpdGUgc3VwcG9ydCBpbiB0aGUgQ1M4OTAwIGRyaXZlcgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIEkyQyBjb250cm9sbGVyIGluIHRoZSBTYW1zdW5nIHMzYzI0eDAgY2hpcHMKICAtIGFkZCBzdXBwb3J0IGZvciBNUEwncyBWQ01BOSAoU2Ftc3VuZyBzM2MyNDEwIGJhc2VkKSBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBGZWIgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMwNwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgNSBGZWIgMjAwMzoKICBmaXggUExQUkNSL1NDQ1IgaW5pdCBzZXF1ZW5jZSBvbiA4eHggdG8gYWxsb3cgZm9yCiAgY2hhbmdlcyBvZiBFQkRGIGJ5IHNvZnR3YXJlCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNyBGZWIgMjAwMzoKICAiQVBJLWNvbXBhdGliaWxpdHkgcGF0Y2giIGZvciA0eHggSTJDIGRyaXZlcgoKKiBUUkFCIGZpeGVzIC8gZXh0ZW5zaW9uczoKICAtIFJlc3RvcmUgVkZEIGJyaWdodG5lc3MgYXMgc2F2ZWQgaW4gZW52aXJvbm1lbnQKICAtIGFkZCBzdXBwb3J0IGZvciBGdWppdHN1IGZsYXNoZXMKICAtIG1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKGRyaXZlIGxvdyBsZXZlbCkKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDA2IE1hciAyMDAzOgogIC0gZml4IGJ1ZyBpbiBCT09UUCBjb2RlIChtdXN0IHVzZSBOZXRDb3B5SVApCiAgLSB1cGRhdGUgb2YgQ1NCMjI2IHBvcnQKICAtIGNsZWFyIEJTUyBzZWdtZW50IG9uIFhTY2FsZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgaTJjX2luaXRfYm9hcmQoKSBmdW5jdGlvbgogIC0gdXBkYXRlIHRvIHRoZSBJbm5va29tIHBsYXR0Zm9ybQoKKiBFeHRlbmQgc3VwcG9ydCBmb3IgcmVkdW5kYW5kIGVudmlyb25tZW50cyBmb3IgY29uZmlndXJhdGlvbnMgd2hlcmUKICBlbnZpcm9ubWVudCBzaXplIDwgc2VjdG9yIHNpemUKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEzIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxOSBGZWIgMjAwMzoKICBwYXRjaGVzIGZvciB0aGUgSW50ZWwgbHViYm9jayBib2FyZDoKICBtZW1zZXR1cC5TIC0gZ2VuZXJhbCBjbGVhbnVwIChiYXNlZCBvbiBSb2JlcnQncyBjc2IyMjYgY29kZSkKICBmbGFzaC5jIC0gb3ZlcmhhdWwsIGFjdHVhbGx5IHdvcmtzIG5vdwogIGx1YmJvY2suYyAtIGZpeCBpbml0IGZ1bmNzIHRvIHJldHVybiBwcm9wZXIgdmFsdWUKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDI2IEZlYiAyMDAzOgogIC0gRml4ZWQgb2ZmIGJ5IG9uZSBpbiBSRlRBIGNhbGN1bGF0aW9uLgogIC0gTm8gbmVlZCB0byBhYm9ydCB3aGVuIExERiBpcyBsb3dlciB0aGFuIHdlIGNhbiBwcm9ncmFtIGl0J3Mgb25seQogICAgbWluaW11bSB0aW1pbmcgc28gY2xhbXAgaXQgdG8gd2hhdCB3ZSBjYW4gZG8uCiAgLSBUYWtlcyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBzcGRfbnZyYW0uIFVzZWZ1bGwKICAgIGZvciBmYWtpbmcgZGF0YSBvciBoYXJkY29kZSBhIG1vZHVsZSB3aXRob3V0IHRoZSBudnJhbS4KICAtIGZpeCBvdGhlciB1c2VyIGZvciBhYm92ZSBjaGFuZ2UKICAtIGZpeCBzb21lIGNvbW1lbnRzLgoKKiBQYXRjaGVzIGJ5IEJyaWFuIFdhaXRlLCAyNiBGZWIgMjAwMzoKICAtIGZpeCBwb3J0IGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgc2NhbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgRU1LIFRPUDg2MCBNb2R1bGUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDIgTWFyIDIwMDM6CiAgQWRkIFNQRCBFRVBST00gc3VwcG9ydCBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDIxIEphbiAyMDAzOgogIC0gQWRkIHN1cHBvcnQgZm9yIElubm9rb20gYm9hcmQKICAtIERvbid0IGNvbXBsYWluIGlmICJpbnN0YWxsIiBmYWlscwogIC0gUkVBRE1FIGNsZWFudXAgKHJlbW92ZSBkdXBsaWNhdGVkIGxpbmVzKQogIC0gVXBkYXRlIFBYQSBoZWFkZXIgZmlsZXMKCiogQWRkIGRvY3VtZW50YXRpb24gZm9yIGV4aXN0aW5nIFBPU1QgY29kZSAoZG9jL1JFQURNRS5QT1NUKQoKKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6CiAgRml4IGhhbmRsaW5nIG9mIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiAidG9vbHMvZW52Y3JjLmMiCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI4IEZlYiAyMDAzOgogIEFkZCBiZWRidWcgc3VwcG9ydCBmb3IgODI0eCBzeXN0ZW1zCgoqIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMKCiogQWRkIGltYWdlIGluZm9ybWF0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEZlYiAyMDAzOgogIENQQ0lJU0VSNCBjb25maWd1cmF0aW9uIHVwZGF0ZWQuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgRmViIDIwMDM6CiAgRml4ZWQgYnVnIGluIGV4dC4gc2VyaWFsIGNsb2NrIHNldHVwIG9uIFBQQzQwNSAoc2luY2UgUFBDNDQwIHBvcnQpLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEZlYiAyMDAzOgogIEFkZCAicGNpZGVsYXkiIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiBtcywgZW5hYmxlZCB2aWEKICBDT05GSUdfUENJX0JPT1RERUxBWSkuCiAgUENJIHNwZWMgMi4yIGRlZmluZXMsIHRoYXQgYSBwY2kgdGFyZ2V0IGhhcyAyXjI1IHBjaSBjbG9ja3MgYWZ0ZXIKICBSU1QjIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiBjeWNsZXMgKDMzTUh6IC0+IDFzKS4KCiogRml4IGR1YWwgUENNQ0lBIHNsb3Qgc3VwcG9ydCAod2hlbiBydW5uaW5nIHdpdGgganVzdCBvbmUKICBzbG90IHBvcHVsYXRlZCkKCiogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCgoqIGV4dGVuZCBkcml2ZXJzL2NzODkwMC5jIGRyaXZlciB0byBzeW5jaHJvbml6ZSAgZXRoYWRkciAgZW52aXJvbm1lbnQKICB2YXJpYWJsZSB3aXRoIHZhbHVlIGluIHRoZSBFRVBST00KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgNE1CIGFuZCAxMjhNQiBvbmJvYXJkIFNEUkFNIChjcHUvcHBjNHh4L3NkcmFtLmMpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTMzIgNEtjIENQVXMKCiogQWRkIHN1cHBvcnQgZm9yIElOQ0EtSVAgQm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBkdWFsIGV0aGVybmV0IHN1cHBvcnQgb24gUE04MjYKCiogQWRkIHN1cHBvcnQgZm9yIExYVDk3MSBQSFkgb24gUE04MjYKCiogUGF0Y2ggYnkgVG9yZCBBbmRlcnNzb24sIDE2IEphbiAyMDAzOgogIEZpeCBmbGFzaCBzZWN0b3IgY291bnQgZm9yIFRRTTh4eEwKCiogRml4IEkyQyBFRVBST00gcHJvYmxlbSBvbiBJQ1U4NjIgYm9hcmQgKHdvdWxkIG9ubHkgd3JpdGUgdGhlIGZpcnN0CiAgMTYgYnl0ZXMgb3V0IG9mIGVhY2ggMzIgYnl0ZSBibG9jaykKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBWMzcgYm9hcmQKICAocGF0Y2ggYnkgSvNuIEJlbmVkaWt0c3NvbiwgMTEgRGVjIDIwMDIpCgoqIFVwZGF0ZSBiYXVkcmF0ZSBpbiBiZF9pbmZvIHdoZW4gaXQgZ2V0cyBjaGFuZ2VkCgoqIEFkZCB3YXRjaGRvZyB0cmlnZ2VyIHBvaW50cyB3aGlsZSB3YWl0aW5nIGZvciBzZXJpYWwgcG9ydAogIChzbyBmYXIgb25seSA4eHggLS0gbmVlZGVkIG9uIExXTU9OIHdpdGggMTAwbXMgd2F0Y2hkb2cpCgoqIEltcHJvdmUgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChmaWd1cmF0aW9uIG9mIHRoZSB1dGlsaXR5LCB1c2luZyBhIGNvbmZpZyBmaWxlKQoKKiBBZGQgc2luZ2xlIHF1b3RlIHN1cHBvcnQgZm9yIChvbGQpIGNvbW1hbmQgbGluZSBwYXJzZXIKCiogU3dpdGNoIExXTU9OIGJvYXJkIGRlZmF1bHQgY29uZmlnIGZyb20gRlJBTSB0byBFRVBST007CiAgaW4gUE9TVCwgRUVQUk9NIHNob3dzIHVwIG9uIDggYWRkcmVzc2VzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVc2UgMS1ieXRlLXJlYWQgaW5zdGVhZCBvZiAtd3JpdGUgZm9yIGlwcm9iZSgpIGZ1bmN0aW9uCiAgQWRkIGkyYyBjb21tYW5kcyB0byBQTTgyNiBjb25maWcKCiogZXh0ZW5kIEkyQyBQT1NUIGNvZGU6IGNoZWNrIGZvciBsaXN0IG9uIGtub3duIGFkZHJlc3NlcwoKKiBJbXByb3ZlIGxvZyBidWZmZXIgY29kZTsgdXNlICJsb2dsZXZlbCIgdG8gZGVjaWRlIHdoaWNoIG1lc3NhZ2VzCiAgdG8gbG9nIG9uIHRoZSBjb25zb2xlLCB0b28gKGxpa2UgaW4gTGludXgpOyBnZXQgcmlkIG9mICJsb2dzdGFydCIKCiogQWRkIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoYm9hcmQtc3BlY2lmaWMgZm9yIFRSQUIgbm93LCB0byBiZSBmaXhlZCBsYXRlcikKCiogUGF0Y2ggYnkgSGFucy1Kb2VyZyBGcmllZGVuLCAwNiBEZWMgMjAwMgogIEZpeCBtaXNjIHByb2JsZW1zIHdpdGggQW1pZ2FPbmUgc3VwcG9ydAoKKiBQYXRjaCBieSBDaHJpcyBIYWxsaW5hbiwgMyBEZWMgMjAwMjoKICBtaW5vciBjbGVhbnVwIHRvIHRoZSBNUEM4MjQ1IEVQSUMgZHJpdmVyCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBleHRlcm5hbCAoU0lVKSBpbnRlcnJ1cHRzIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBGaXggbmVzdGVkIHN5c2NhbGxzIGJ1ZyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI3IE5vdiAyMDAyOgogIGZpeCBvdXRwdXQgb2YgInBjaWluZm8iIGNvbW1hbmQgZm9yIENhcmRCdXMgYnJpZGdlIGRldmljZXMuCgoqIEZpeCBidWcgaW4gVFFNODI2MCBib2FyZCBkZXRlY3Rpb24gLSBib2FyZHMgZ290IHN0dWNrIHdoZW4gYm9hcmQgSUQKICB3YXMgbm90IHJlYWRhYmxlCgoqIEFkZCBMRUQgaW5kaWNhdGlvbiBmb3IgSURFIGFjdGl2aXR5IG9uIEtVUDRLIGJvYXJkCgoqIEZpeCBzdGFydHVwIHByb2JsZW1zIHdpdGggVkZEIGRpc3BsYXkgb24gVFJBQgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyMCBOb3YgMjAwMgogIEFkZCBkcml2ZXIgZm9yIEVwc29uIFNFRDEzODA2IGdyYXBoaWMgY29udHJvbGxlci4KICBBZGQgc3VwcG9ydCBmb3IgQk1QIGxvZ29zIGluIGNmYl9jb25zb2xlIGRyaXZlci4KCiogQWRkZWQgc3VwcG9ydCBmb3IgYm90aCBQQ01DSUEgc2xvdHMgKGF0IHRoZSBzYW1lIHRpbWUhKSBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyMSBOb3YgMjAwMjoKICBmaXggUENNQ0lBIG9uIE1CWDh4eCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjEgTm92IDIwMDIKICBBZGQgQ0ZHX0NQTV9QT1NUX1dPUkRfQUREUiB0byBtYWtlIHRoZSBvZmZzZXQgb2YgdGhlCiAgYm9vdG1vZGUgd29yZCBpbiBEUFJBTSBjb25maWd1cmFibGUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxOCBOb3YgMjAwMjoKICBGaXhlcyBmb3IgeDg2IHBvcnQgKG1vc3RseSBzdHJpbmdzIGlzc3VlcykKCiogUGF0Y2ggYnkgS2VuIENob3UsIDE4IE5vdiAyMDAyOgogIEZpeCBmb3IgbmF0c2VtaSBOSUMgY2FyZHMgKERQODM4MTUpCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE5IE5vdiAyMDAyOgogIGZpeCBhIGJ1ZyBmb3IgdGhlIE1JSSBjb25maWd1cmF0aW9uLCBhbmQgc29tZSB3YXJuaW5ncwoKKiBQYXRjaCBieSBUaG9tYXMgRnJpZWRlbiwgMTMgTm92IDIwMDI6CiAgQWRkIGNvZGUgZm9yIEFtaWdhT25lIGJvYXJkCiAgKHByZWxpbWluYXJ5IG1lcmdlIHRvIFUtQm9vdCwgc3RpbGwgV0lQKQoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTIgTm92IDIwMDI6CiAgLSBBZGRpbmcgVVJMIGZvciBJRUVFIE9VSSBsb29rdXAKICAtIE1ha2luZyB0aGUgYXV0b2Jvb3QgI2RlZmluZXMgZGVwZW5kZW50IG9uIENPTkZJR19BVVRPQk9PVF9LRVlFRAogICAgYmVpbmcgZGVmaW5lZC4KICAtIEluIHRoZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICNkZWZpbmUsIHRoZSByb290LW9uLWluaXRyZCBhbmQKICAgIHJvb3Qtb24tbmZzIG1hY3JvcyBhcmUgZGVzaWduZWQgdG8gc3dpdGNoIGhvdyB0aGUgZGVmYXVsdCBib290CiAgICBtZXRob2QgZ2V0cyBkZWZpbmVkLgoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDEzIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBpMzg2IGFyY2hpdGVjdHVyZSBhbmQgQU1EIFNDNTIwIGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDEyIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBET1MgZmlsZXN5c3RlbSBhbmQgYm9vdGluZyBmcm9tIERPUyBmbG9wcHkgZGlzawoKKiBQYXRjaCBieSBKaW0gU2FuZG96LCAwNyBOb3YgMjAwMjoKICBJbmNyZWFzZSBudW1iZXIgb2YgbmV0d29yayBSWCBidWZmZXJzIChQS1RCVUZTUlggaW4KICAiaW5jbHVkZS9uZXQuaCIpIGZvciBFRVBSTzEwMCBiYXNlZCBib2FyZHMgKGVzcGVjaWFsbHkgU1A4MjQwKQogIHdoaWNoIHNob3dlZCAiUmVjZWl2ZXIgaXMgbm90IHJlYWR5IiBlcnJvcnMgd2hlbiBVLUJvb3Qgd2FzCiAgcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZSBidWZmZXJzIHNsb3dlciB0aGFuIHRoZSBuZXR3b3JrIGNvbnRyb2xsZXIKICB3YXMgZmlsbGluZyB0aGVtLgoKKiBQYXRjaCBieSBBbmRyZWFzIE9iZXJyaXR0ZXIsIDA5IE5vdiAyMDAyOgogIENoYW5nZSBiZWhhdmlvdXIgb2YgTmV0TG9vcCgpOiByZXR1cm4gLTEgZm9yIGVycm9ycywgZmlsZXNpemUKICBvdGhlcndpc2U7IHJldHVybiBjb2RlIDAgaXMgdmFsaWQgYW4gbWVhbnMgbm8gZmlsZSBsb2FkZWQgLSBpbiB0aGlzCiAgY2FzZSB0aGUgZW52aXJvbm1lbnQgc3RpbGwgZ2V0cyB1cGRhdGVkIQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCA5IE5vdiAyMDAyOgogIC0gaW1wcm92ZSBBREMvREFDIGNsb2NraW5nIG9uIHRoZSBTQUNTbmcgYm9hcmQgdG8gYWxpZ24KICAgIHRoZSBmYWlsaW5nIGVkZ2VzIG9mIExSQ0xLIGFuZCBTQ0xLCiAgLSBzYmM4MjYwIGNvbmZpZ3VyYXRpb24gdHdlYWtzCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciA4Mnh4IHN5c3RlbXMKICAtIHdpcmUgc3NwaS9zc3BvIGNvbW1hbmRzIGludG8gY29tbWFuZCBoYW5kbGVyOyBpbXByb3ZlZCBlcnJvcgogICAgaGFuZGxlcmluZwogIC0gYWRkIHRpbWVzdGFtcCBzdXBwb3J0IGFuZCBhbHRlcm5hdGUgbWVtb3J5IHRlc3QgdG8gdGhlCiAgICBTQUNTbmcgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBWaW5jZSBIdXNvdnNreSwgNyBOb3YgMjAwMjoKICBBZGQgIi1uIiB0byBsaW5rZXIgb3B0aW9ucyB0byBnZXQgcmlkIG9mICJOb3QgZW5vdWdoIHJvb20gZm9yCiAgcHJvZ3JhbSBoZWFkZXJzIiBwcm9ibGVtCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMDUgTm92IDIwMDIKICBSZW5hbWUgQ09ORklHX1BMTF9JTlBVVF9GUkVRIHRvIENPTkZJR19TWVNfQ0xLX0ZSRVEKICBzbyB3ZSBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgbmFtZQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEhhcmR3YXJlIHJlbGF0aWVkIGltcHJvdm1lbnRzIGluIEZEQyBib290IGNvZGUKCiogUGF0Y2ggYnkgSG9sZ2VyIFNjaHVyaWcsIDUgTm92IDIwMDI6CiAgTWFrZSB0aGUgUFhBIHJlYWxseSBjaGFuZ2UgaXQncyBmcmVxdWVuY3kKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3Igc2xhdmUgc2VyaWFsIFNwYXJ0YW4gMiBGUEdBcwoKKiBGaXggdW5pbml0aWFsaXplZCBtZW1vcnkgKE1BQyAgYWRkcmVzcykgIGluICA4eHggIFNDQy9GRUMgIGV0aGVybmV0CiAgZHJpdmVycwoKKiBBZGQgc3VwcG9ydCBmb3IgbG9nIGJ1ZmZlciB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIExpbnV4IGtlcm5lbCdzCiAgc3lzbG9nIG1lY2hhbmlzbTsgdXNlZCBlc3BlY2lhbGx5IGZvciBQT1NUIHJlc3VsdHMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDMxIE9jdCAyMDAyOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGt1cDRrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDQgTm92IDIwMDI6CiAgLSB1c2Ugd2F0Y2hkb2cgdG8gcmVzZXQgUFhBMjUwIHN5c3RlbXMKICAtIGFkZGVkIHByb2dyZXNzIGNhbGxiYWNrcyB0byAoc29tZSBvZiB0aGUpIEFSTSBjb2RlCiAgLSB1cGRhdGUgZm9yIENvZ2VudCBDU0IyMjYgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIEZQUzg2MCBib2FyZAoKKiBQYXRjaCBieSBHdWlsbGF1bWUgQWxleGFuZHJlLCwgMDQgTm92IDIwMDI6CiAgSW1wcm92ZSBQQ0kgYWNjZXNzIG9uIDMyLWJpdHMgQ29tcGFjdCBQQ0kgYnVzCgoqIEZpeCBtZGVsYXkoKSBvbiBUUkFCIC0gdGhpcyB3YXMgc3RpbGwgdGhlIGRlYnVnZ2luZyB2ZXJzaW9uIHdpdGgKICBzZWNvbmRzIGluc3RlYWQgb2YgbXMuCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMSBOb3YgMjAwMjoKICBYU2NhbGUgcmVsYXRlZCBjbGVhbnVwIChhZmZlY3RzIGFsbCBBUk0gYm9hcmRzKQoKKiBDbGVhbnVwIG9mIG5hbWVzIGFuZCBSRUFETUUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck5vdGVzIGZvciBVLUJvb3QgMC4xLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiAiRGFzIFUtQm9vdCIsIHRoZSBVbml2ZXJzYWwgQm9vdCBMb2FkZXIuCgpJdCBpcyBiYXNlZCBvbiB2ZXJzaW9uIDIuMC4wICh0aGUgIkhhbGxvd2VlbiBSZWxlYXNlIikgb2YgUFBDQm9vdC4KRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0IHBsZWFzZSBzZWUgdGhlClBQQ0Jvb3QgcHJvamVjdCBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHBjYm9vdAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo=