ClJFQURNRSBmb3IgdGhlIGJ1aWxkcy9hbWlnYSBzdWJkaXJlY3RvcnkuCgpDb3B5cmlnaHQgMjAwNSBieQpXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuCgpUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAphbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCkxJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CmluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CmZ1bGx5LgoKClRoZSBtYWtlZmlsZS5vczQgaXMgZm9yIHRoZSBBbWlnYU9TNCBTREsuICBUbyB1c2UgaXQsIHR5cGUKIm1ha2UgLWYgbWFrZWZpbGUub3M0IiwgaXQgcHJvZHVjZXMgYSBsaW5rIGxpYnJhcnkgbGliZnQyX3BwYy5hLgoKVGhlIG1ha2VmaWxlIGlzIGZvciBwcGMtbW9ycGhvcy1nY2MtMi45NS4zLWJpbi50Z3ogKGdjYyAyLjk1LjMgaG9zdGVkIG9uCjY4ay1BbWlnYSBwcm9kdWNpbmcgTW9ycGhPUy1QUEMtYmluYXJpZXMgZnJvbSBodHRwOi8vd3d3Lm1vcnBob3MuZGUpLgpUbyB1c2UgaXQsIHR5cGUgIm1ha2UgYXNzaWduIiwgdGhlbiAibWFrZSI7IGl0IHByb2R1Y2VzIGEgbGluayBsaWJyYXJ5CmxpYmZ0Ml9wcGMuYS4KClRoZSBzbWFrZWZpbGUgaXMgYSBtYWtlZmlsZSBmb3IgQW1pZ2EgU0FTL0MgNi41OCAobm8gbG9uZ2VyIGF2YWlsYWJsZSwKbGF0ZXN0IHNvbGQgdmVyc2lvbiB3YXMgNi41MCwgdXBkYXRlcyBjYW4gYmUgZm91bmQgaW4gQW1pbmV0KS4gIEl0IGlzCmJhc2VkIG9uIHRoZSB2ZXJzaW9uIGZvdW5kIGluIHRoZSBzb3VyY2Vjb2RlIG9mIHR0Zi5saWJyYXJ5IDAuODNiIGZvcgpGcmVlVHlwZSAxLjMuMSBmcm9tIFJpY2hhcmQgR3JpZmZpdGggKHJhZ3JpZmZpQHNwcnluZXQuY29tLApodHRwOi8vcmFncmlmZmkuaG9tZS5zcHJ5bmV0LmNvbSkuCgpZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIGxhdGVzdCBpbmNsdWRlIGZpbGVzIGFuZCBhbWlnYS5saWIgZnJvbSB0aGUKQW1pZ2Egd2ViIHNpdGUgKGh0dHA6Ly93d3cuYW1pZ2EuY29tLzMuOS9kb3dubG9hZC9OREszLjkubGhhKSBmb3IKQW1pZ2FPUyAzLjk7IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgd29yayB1bmRlciBBbWlnYU9TIDIuMDQgYW5kIHVwLgoKVG8gdXNlIGl0LCBjYWxsICJzbWFrZSBhc3NpZ24iIGFuZCB0aGVuICJzbWFrZSIgZnJvbSB0aGUgYnVpbGRzL2FtaWdhCmRpcmVjdG9yeS4gIFRoZSByZXN1bHRzIGFyZToKCi0gQSBsaW5rIGxpYnJhcnkgImZ0Ml82ODB4MC5saWIiICh3aGVyZSB4IGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YKICB0aGUgQ1BVIGVudHJ5IGluIHRoZSBzbWFrZWZpbGUpIGNvbnRhaW5pbmcgYWxsIEZyZWVUeXBlMiBwYXJ0cwogIGV4Y2VwdCBvZiB0aGUgaW5pdCBjb2RlLCBkZWJ1Z2dpbmcgY29kZSwgYW5kIHRoZSBzeXN0ZW0gaW50ZXJmYWNlCiAgY29kZS4KCi0gZnRzeXN0ZW0ubywgYW4gb2JqZWN0IG1vZHVsZSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZQogIHN5c3RlbSBpbnRlcmZhY2UgY29kZSB3aGljaCB1c2VzIGZvcGVuKCkgZmNsb3NlKCkgZnJlYWQoKSBmc2VlaygpCiAgZnRlbGwoKSBtYWxsb2MoKSByZWFsbG9jKCkgYW5kIGZyZWUoKSBmcm9tIGxpYjpzYy5saWIgKG5vdCBwdXJlKS4KCi0gZnRzeXN0ZW1wdXJlLm8sIGFuIG9iamVjdCBtb2R1bGUgY29udGFpbmluZyB0aGUgcHVyZSB2ZXJzaW9uIG9mIHRoZQogIHN5c3RlbSBpbnRlcmZhY2UgY29kZSB3aGljaCB1c2VzIE9wZW4oKSBDbG9zZSgpIFJlYWQoKSBTZWVrKCkKICBFeGFtaW5lRkgoKSBBc21BbGxvY1Bvb2xlZCgpIEFzbUZyZWVQb29sZWQoKSBldGMuICBUaGlzIHZlcnNpb24gY2FuCiAgYmUgdXNlZCBpbiBib3RoIG5vcm1hbCBwcm9ncmFtcyBhbmQgaW4gQW1pZ2EgcnVuLXRpbWUgc2hhcmVkIHN5c3RlbQogIGxpYnJhcnlzIChjYW4gYmUgbGlua2VkIHdpdGggbGliOmxpYmluaXQubywgbm8gY29weWluZyBvZiBEQVRBIGFuZAogIEJTUyBodW5rcyBmb3IgZWFjaCBPcGVuTGlicmFyeSgpIG5lY2Vzc2FyeSkuICBTb3VyY2UgY29kZSBpcyBpbgogIHNyYy9iYXNlL2Z0c3lzdGVtLmMuCgotIGZ0ZGVidWcubywgYW4gb2JqZWN0IG1vZHVsZSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZQogIGRlYnVnZ2luZyBjb2RlIHdoaWNoIHVzZXMgdnByaW50ZigpIGFuZCBleGl0KCkgKG5vdCBwdXJlKS4KICBEZWJ1Z2dpbmcgY2FuIGJlIHR1cm5lZCBvbiBpbiBGVDppbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCiAgYW5kIHdpdGggRlRfU2V0VHJhY2VMZXZlbCgpLgoKLSBmdGRlYnVncHVyZS5vLCBhbiBvYmplY3QgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIHB1cmUgdmVyc2lvbiBvZiB0aGUKICBkZWJ1Z2dpbmcgY29kZSB3aGljaCB1c2VzIEtWUHJpbnRmKCkgZnJvbSBsaWI6ZGVidWcubGliIGFuZCBubwogIGV4aXQoKS4gIEZvciBkZWJ1Z2dpbmcgb2YgQW1pZ2EgcnVuLXRpbWUgc2hhcmVkIHN5c3RlbSBsaWJyYXJpZXMuCiAgU291cmNlIGNvZGUgaXMgaW4gc3JjL2Jhc2UvZnRkZWJ1Zy5jLgoKLSBOTyBmdGluaXQuby4gIEJlY2F1c2UgbGlua2luZyB3aXRoIGEgbGluayBsaWJyYXJ5IHNob3VsZCByZXN1bHQgaW4KICBsaW5raW5nIG9ubHkgdGhlIG5lZWRlZCBvYmplY3QgbW9kdWxlcyBpbiBpdCwgYnV0IHN0YW5kYXJkCiAgZnRzeXN0ZW0ubyB3b3VsZCBmb3JjZSBBTEwgRnJlZVR5cGUyIG1vZHVsZXMgdG8gYmUgbGlua2VkIHRvIHlvdXIKICBwcm9ncmFtLCBJIGRlY2lkZWQgdG8gdXNlIGEgZGlmZmVyZW50IHNjaGVtZTogWW91IG11c3QgI2luY2x1ZGUKICBGVDpzcmMvYmFzZS9mdGluaXQuYyBpbiB5b3VyIHNvdXJjZWNvZGUgYW5kIHNwZWNpZnkgd2l0aCAjZGVmaW5lCiAgc3RhdGVtZW50cyB3aGljaCBtb2R1bGVzIHlvdSBuZWVkLiAgU2VlCiAgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaC4KCgpUbyB1c2UgaW4geW91ciBvd24gcHJvZ3JhbXM6CgotIEluc2VydCB0aGUgI2RlZmluZSBhbmQgI2luY2x1ZGUgc3RhdGVtZW50cyBmcm9tIHRvcCBvZgogIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmggaW4geW91ciBzb3VyY2UgY29kZSBhbmQgdW5jb21tZW50CiAgdGhlICNkZWZpbmUgc3RhdGVtZW50cyBmb3IgdGhlIEZyZWVUeXBlMiBtb2R1bGVzIHlvdSBuZWVkLgoKLSBZb3UgY2FuIHVzZSBlaXRoZXIgUEFSQU1FVEVSUz1SRUdJU1RFUiBvciBQQVJBTUVURVJTPVNUQUNLIGZvcgogIGNhbGxpbmcgdGhlIEZyZWVUeXBlMiBmdW5jdGlvbnMsIGJlY2F1c2UgdGhlIGxpbmsgbGlicmFyeSBhbmQgdGhlCiAgb2JqZWN0IGZpbGVzIGFyZSBjb21waWxlZCB3aXRoIFBBUkFNRVRFUlM9Qk9USC4KCi0gInNtYWtlIGFzc2lnbiIgKGFzc2lnbiAiRlQ6IiB0byB0aGUgRnJlZVR5cGUyIG1haW4gZGlyZWN0b3J5KS4KCi0gQ29tcGlsZSB5b3VyIHByb2dyYW0uCgotIExpbmsgd2l0aCBlaXRoZXIgZnRzeXN0ZW0ubyBvciBmdHN5c3RlbXB1cmUubywgaWYgZGVidWdnaW5nIGVuYWJsZWQKICB3aXRoIGVpdGhlciBmdGRlYnVnLm8gb3IgKGZ0ZGVidWdwdXJlLm8gYW5kIGxpYjpkZWJ1Zy5saWIpLCBhbmQgd2l0aAogIGZ0Ml82ODB4MC5saWIgYXMgbGluayBsaWJyYXJ5LgoKClRvIGFkYXB0IHRvIG90aGVyIGNvbXBpbGVyczoKCi0gVGhlIHN0YW5kYXJkIEFOU0kgQyBtYXhpbXVtIGxlbmd0aCBvZiAzMSBzaWduaWZpY2FudCBjaGFyYWN0ZXJzIGluCiAgaWRlbnRpZmllcnMgaXMgbm90IGVub3VnaCBmb3IgRnJlZVR5cGUyLiAgQ2hlY2sgaWYgeW91ciBjb21waWxlciBoYXMKICBhIG1pbmltdW0gbGVuZ3RoIG9mIDQwIHNpZ25pZmljYW50IGNoYXJhY3RlcnMgb3IgY2FuIGJlIHN3aXRjaGVkIHRvCiAgaXQuICAiaWRsZW49NDAiIGlzIHRoZSBvcHRpb24gZm9yIFNBUy9DLiAgU2V0dGluZyAjZGVmaW5lCiAgSEFWRV9MSU1JVF9PTl9JREVOVFMgaW4gYW4gaW5jbHVkZSBmaWxlIG1heSBhbHNvIHdvcmsgKG5vdCB0ZXN0ZWQpLgoKLSBNYWtlIHN1cmUgdGhhdCB0aGUgaW5jbHVkZSBkaXJlY3RvcnkgaW4gYnVpbGRzL2FtaWdhIGlzIHNlYXJjaGVkCiAgYmVmb3JlIHRoZSBub3JtYWwgRnJlZVR5cGUyIGluY2x1ZGUgZGlyZWN0b3J5LCBzbyB5b3UgYXJlIGFibGUgdG8KICByZXBsYWNlIHByb2JsZW1hdGljIGluY2x1ZGUgZmlsZXMgd2l0aCB5b3VyIG93biB2ZXJzaW9uIChzYW1lIG1heSBiZQogIHVzZWZ1bCBmb3IgdGhlIHNyYyBkaXJlY3RvcnkpLgoKLSBBbiBleGFtcGxlIG9mIGhvdyB0byByZXBsYWNlL3dvcmthcm91bmQgYSBwcm9ibGVtYXRpYyBpbmNsdWRlIGZpbGUKICBpcyBpbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oOyBpdCBjaGFuZ2VzIGEgI2RlZmluZSB0aGF0IHdvdWxkCiAgcHJldmVudCBTQVMvQyBmcm9tIGdlbmVyYXRpbmcgWERFRidzIHdoZXJlIGl0IHNob3VsZCBkbyB0aGF0IGFuZAogIHRoZW4gaW5jbHVkZXMgdGhlIHN0YW5kYXJkIEZyZWVUeXBlMiBpbmNsdWRlIGZpbGUuCgpMb2NhbCBWYXJpYWJsZXM6CmNvZGluZzogbGF0aW4tMQpFbmQ6Cg==