ClJFQURNRSBmb3IgdGhlIGJ1aWxkcy9hbWlnYSBzdWJkaXJlY3RvcnkuCgpDb3B5cmlnaHQgMjAwNS0yMDE5IGJ5Cldlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KClRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKZnVsbHkuCgoKVGhlIG1ha2VmaWxlLm9zNCBpcyBmb3IgdGhlIEFtaWdhT1M0IFNESy4gIFRvIHVzZSBpdCwgdHlwZQoibWFrZSAtZiBtYWtlZmlsZS5vczQiLCBpdCBwcm9kdWNlcyBhIGxpbmsgbGlicmFyeSBsaWJmdDJfcHBjLmEuCgpUaGUgbWFrZWZpbGUgaXMgZm9yIHBwYy1tb3JwaG9zLWdjYy0yLjk1LjMtYmluLnRneiAoZ2NjIDIuOTUuMyBob3N0ZWQgb24KNjhrLUFtaWdhIHByb2R1Y2luZyBNb3JwaE9TLVBQQy1iaW5hcmllcyBmcm9tIGh0dHA6Ly93d3cubW9ycGhvcy5kZSkuClRvIHVzZSBpdCwgdHlwZSAibWFrZSBhc3NpZ24iLCB0aGVuICJtYWtlIjsgaXQgcHJvZHVjZXMgYSBsaW5rIGxpYnJhcnkKbGliZnQyX3BwYy5hLgoKVGhlIHNtYWtlZmlsZSBpcyBhIG1ha2VmaWxlIGZvciBBbWlnYSBTQVMvQyA2LjU4IChubyBsb25nZXIgYXZhaWxhYmxlLApsYXRlc3Qgc29sZCB2ZXJzaW9uIHdhcyA2LjUwLCB1cGRhdGVzIGNhbiBiZSBmb3VuZCBpbiBBbWluZXQpLiAgSXQgaXMKYmFzZWQgb24gdGhlIHZlcnNpb24gZm91bmQgaW4gdGhlIHNvdXJjZWNvZGUgb2YgdHRmLmxpYnJhcnkgMC44M2IgZm9yCkZyZWVUeXBlIDEuMy4xIGZyb20gUmljaGFyZCBHcmlmZml0aCAocmFncmlmZmlAc3ByeW5ldC5jb20sCmh0dHA6Ly9yYWdyaWZmaS5ob21lLnNwcnluZXQuY29tKS4KCllvdSB3aWxsIGFsc28gbmVlZCB0aGUgbGF0ZXN0IGluY2x1ZGUgZmlsZXMgYW5kIGFtaWdhLmxpYiBmcm9tIHRoZQpBbWlnYSB3ZWIgc2l0ZSAoaHR0cHM6Ly9vcy5hbWlnYXdvcmxkLmRlL2Rvd25sb2FkLnBocD9pZD0zKSBmb3IKQW1pZ2FPUyAzLjk7IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgd29yayB1bmRlciBBbWlnYU9TIDIuMDQgYW5kIHVwLgoKVG8gdXNlIGl0LCBjYWxsICJzbWFrZSBhc3NpZ24iIGFuZCB0aGVuICJzbWFrZSIgZnJvbSB0aGUgYnVpbGRzL2FtaWdhCmRpcmVjdG9yeS4gIFRoZSByZXN1bHRzIGFyZToKCi0gQSBsaW5rIGxpYnJhcnkgImZ0Ml82ODB4MC5saWIiICh3aGVyZSB4IGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YKICB0aGUgQ1BVIGVudHJ5IGluIHRoZSBzbWFrZWZpbGUpIGNvbnRhaW5pbmcgYWxsIEZyZWVUeXBlMiBwYXJ0cwogIGV4Y2VwdCBvZiB0aGUgaW5pdCBjb2RlLCBkZWJ1Z2dpbmcgY29kZSwgYW5kIHRoZSBzeXN0ZW0gaW50ZXJmYWNlCiAgY29kZS4KCi0gZnRzeXN0ZW0ubywgYW4gb2JqZWN0IG1vZHVsZSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZQogIHN5c3RlbSBpbnRlcmZhY2UgY29kZSB3aGljaCB1c2VzIGZvcGVuKCkgZmNsb3NlKCkgZnJlYWQoKSBmc2VlaygpCiAgZnRlbGwoKSBtYWxsb2MoKSByZWFsbG9jKCkgYW5kIGZyZWUoKSBmcm9tIGxpYjpzYy5saWIgKG5vdCBwdXJlKS4KCi0gZnRzeXN0ZW1wdXJlLm8sIGFuIG9iamVjdCBtb2R1bGUgY29udGFpbmluZyB0aGUgcHVyZSB2ZXJzaW9uIG9mIHRoZQogIHN5c3RlbSBpbnRlcmZhY2UgY29kZSB3aGljaCB1c2VzIE9wZW4oKSBDbG9zZSgpIFJlYWQoKSBTZWVrKCkKICBFeGFtaW5lRkgoKSBBc21BbGxvY1Bvb2xlZCgpIEFzbUZyZWVQb29sZWQoKSBldGMuICBUaGlzIHZlcnNpb24gY2FuCiAgYmUgdXNlZCBpbiBib3RoIG5vcm1hbCBwcm9ncmFtcyBhbmQgaW4gQW1pZ2EgcnVuLXRpbWUgc2hhcmVkIHN5c3RlbQogIGxpYnJhcnlzIChjYW4gYmUgbGlua2VkIHdpdGggbGliOmxpYmluaXQubywgbm8gY29weWluZyBvZiBEQVRBIGFuZAogIEJTUyBodW5rcyBmb3IgZWFjaCBPcGVuTGlicmFyeSgpIG5lY2Vzc2FyeSkuICBTb3VyY2UgY29kZSBpcyBpbgogIHNyYy9iYXNlL2Z0c3lzdGVtLmMuCgotIGZ0ZGVidWcubywgYW4gb2JqZWN0IG1vZHVsZSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZQogIGRlYnVnZ2luZyBjb2RlIHdoaWNoIHVzZXMgdnByaW50ZigpIGFuZCBleGl0KCkgKG5vdCBwdXJlKS4KICBEZWJ1Z2dpbmcgY2FuIGJlIHR1cm5lZCBvbiBpbiBGVDppbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCiAgYW5kIHdpdGggRlRfU2V0VHJhY2VMZXZlbCgpLgoKLSBmdGRlYnVncHVyZS5vLCBhbiBvYmplY3QgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIHB1cmUgdmVyc2lvbiBvZiB0aGUKICBkZWJ1Z2dpbmcgY29kZSB3aGljaCB1c2VzIEtWUHJpbnRmKCkgZnJvbSBsaWI6ZGVidWcubGliIGFuZCBubwogIGV4aXQoKS4gIEZvciBkZWJ1Z2dpbmcgb2YgQW1pZ2EgcnVuLXRpbWUgc2hhcmVkIHN5c3RlbSBsaWJyYXJpZXMuCiAgU291cmNlIGNvZGUgaXMgaW4gc3JjL2Jhc2UvZnRkZWJ1Zy5jLgoKLSBOTyBmdGluaXQuby4gIEJlY2F1c2UgbGlua2luZyB3aXRoIGEgbGluayBsaWJyYXJ5IHNob3VsZCByZXN1bHQgaW4KICBsaW5raW5nIG9ubHkgdGhlIG5lZWRlZCBvYmplY3QgbW9kdWxlcyBpbiBpdCwgYnV0IHN0YW5kYXJkCiAgZnRzeXN0ZW0ubyB3b3VsZCBmb3JjZSBBTEwgRnJlZVR5cGUyIG1vZHVsZXMgdG8gYmUgbGlua2VkIHRvIHlvdXIKICBwcm9ncmFtLCBJIGRlY2lkZWQgdG8gdXNlIGEgZGlmZmVyZW50IHNjaGVtZTogWW91IG11c3QgI2luY2x1ZGUKICBGVDpzcmMvYmFzZS9mdGluaXQuYyBpbiB5b3VyIHNvdXJjZWNvZGUgYW5kIHNwZWNpZnkgd2l0aCAjZGVmaW5lCiAgc3RhdGVtZW50cyB3aGljaCBtb2R1bGVzIHlvdSBuZWVkLiAgU2VlCiAgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaC4KCgpUbyB1c2UgaW4geW91ciBvd24gcHJvZ3JhbXM6CgotIEluc2VydCB0aGUgI2RlZmluZSBhbmQgI2luY2x1ZGUgc3RhdGVtZW50cyBmcm9tIHRvcCBvZgogIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmggaW4geW91ciBzb3VyY2UgY29kZSBhbmQKICB1bmNvbW1lbnQgdGhlICNkZWZpbmUgc3RhdGVtZW50cyBmb3IgdGhlIEZyZWVUeXBlMiBtb2R1bGVzIHlvdSBuZWVkLgoKLSBZb3UgY2FuIHVzZSBlaXRoZXIgUEFSQU1FVEVSUz1SRUdJU1RFUiBvciBQQVJBTUVURVJTPVNUQUNLIGZvcgogIGNhbGxpbmcgdGhlIEZyZWVUeXBlMiBmdW5jdGlvbnMsIGJlY2F1c2UgdGhlIGxpbmsgbGlicmFyeSBhbmQgdGhlCiAgb2JqZWN0IGZpbGVzIGFyZSBjb21waWxlZCB3aXRoIFBBUkFNRVRFUlM9Qk9USC4KCi0gInNtYWtlIGFzc2lnbiIgKGFzc2lnbiAiRlQ6IiB0byB0aGUgRnJlZVR5cGUyIG1haW4gZGlyZWN0b3J5KS4KCi0gQ29tcGlsZSB5b3VyIHByb2dyYW0uCgotIExpbmsgd2l0aCBlaXRoZXIgZnRzeXN0ZW0ubyBvciBmdHN5c3RlbXB1cmUubywgaWYgZGVidWdnaW5nIGVuYWJsZWQKICB3aXRoIGVpdGhlciBmdGRlYnVnLm8gb3IgKGZ0ZGVidWdwdXJlLm8gYW5kIGxpYjpkZWJ1Zy5saWIpLCBhbmQgd2l0aAogIGZ0Ml82ODB4MC5saWIgYXMgbGluayBsaWJyYXJ5LgoKClRvIGFkYXB0IHRvIG90aGVyIGNvbXBpbGVyczoKCi0gVGhlIHN0YW5kYXJkIEFOU0kgQyBtYXhpbXVtIGxlbmd0aCBvZiAzMSBzaWduaWZpY2FudCBjaGFyYWN0ZXJzIGluCiAgaWRlbnRpZmllcnMgaXMgbm90IGVub3VnaCBmb3IgRnJlZVR5cGUyLiAgQ2hlY2sgaWYgeW91ciBjb21waWxlciBoYXMKICBhIG1pbmltdW0gbGVuZ3RoIG9mIDQwIHNpZ25pZmljYW50IGNoYXJhY3RlcnMgb3IgY2FuIGJlIHN3aXRjaGVkIHRvCiAgaXQuICAiaWRsZW49NDAiIGlzIHRoZSBvcHRpb24gZm9yIFNBUy9DLiAgU2V0dGluZyAjZGVmaW5lCiAgSEFWRV9MSU1JVF9PTl9JREVOVFMgaW4gYW4gaW5jbHVkZSBmaWxlIG1heSBhbHNvIHdvcmsgKG5vdCB0ZXN0ZWQpLgoKLSBNYWtlIHN1cmUgdGhhdCB0aGUgaW5jbHVkZSBkaXJlY3RvcnkgaW4gYnVpbGRzL2FtaWdhIGlzIHNlYXJjaGVkCiAgYmVmb3JlIHRoZSBub3JtYWwgRnJlZVR5cGUyIGluY2x1ZGUgZGlyZWN0b3J5LCBzbyB5b3UgYXJlIGFibGUgdG8KICByZXBsYWNlIHByb2JsZW1hdGljIGluY2x1ZGUgZmlsZXMgd2l0aCB5b3VyIG93biB2ZXJzaW9uIChzYW1lIG1heSBiZQogIHVzZWZ1bCBmb3IgdGhlIHNyYyBkaXJlY3RvcnkpLgoKLSBBbiBleGFtcGxlIG9mIGhvdyB0byByZXBsYWNlL3dvcmthcm91bmQgYSBwcm9ibGVtYXRpYyBpbmNsdWRlIGZpbGUKICBpcyBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOyBpdCBjaGFuZ2VzIGEgI2RlZmluZSB0aGF0CiAgd291bGQgcHJldmVudCBTQVMvQyBmcm9tIGdlbmVyYXRpbmcgWERFRidzIHdoZXJlIGl0IHNob3VsZCBkbyB0aGF0IGFuZAogIHRoZW4gaW5jbHVkZXMgdGhlIHN0YW5kYXJkIEZyZWVUeXBlMiBpbmNsdWRlIGZpbGUuCgpMb2NhbCBWYXJpYWJsZXM6CmNvZGluZzogbGF0aW4tMQpFbmQ6Cg==