PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAwLjMuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAyMiBNYXkgMjAwMzoKICBGaXggcHJvYmxlbSB3aXRoIG9ubHkgcGFydGlhbGx5IGNsZWFyZWQgLmJzcyBzZWdtZW50CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMiBNYXkgMjAwMzoKICBnZXQgUENJIHRvIHdvcmsgb24gYSBNUEM4MjY2QURTIGJvYXJkOyBpbmNvcnBvcmF0ZSBjaGFuZ2UgdG8KICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwoKKiBQYXRjaCBieSBOeWUgTGl1LCAxIE1heSAyMDAzOgogIG1pbm9yIHBhdGNoZXMgZm9yIHRoZSBGQURTOHh4CgoqIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0CgoqIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzICBWRkQgY29tbWFuZDsKICBhbGxvdyB0byBwYXNzIGJvb3QgYml0bWFwIGFkZHJlc3NlcyBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7CiAgYWxsb3cgZm9yIHplcm8gYm9vdCBkZWxheQoKKiBQYXRjaCBieSBDaHJpc3RpYW4gR2Vp32luZ2VyLCAxOSBNYXkgMjAwMjoKICBPbiBUUkFCOiB3YWl0IHVudGlsIHRoZSBkdW1teSBieXRlIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudAoKKiBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDIyIEFwciAyMDAzOgogIHVwZGF0ZSBmb3IgQ3JheUwxIGJvYXJkCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyMSBBcHIgMjAwMzoKICBhZGQgYm9vdCBzdXBwb3J0IGZvciBBUlRPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTEgQXByIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMzgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyNCBKYW4gMjAwMzoKICBGaXggY291bnRpbmcgb2YgZXh0ZW5kZWQgcGFydGl0aW9ucyBpbiBkaXNrYm9vdCBjb21tYW5kCgoqIFBhdGNoIGJ5IENocmlzdG9waGUgTGluZGhlaW1lciwgMjAgTWF5IDIwMDM6CiAgYWxsb3cgdGhlIHVzZSBvZiBDRkdfTE9BRFMgd2hlbiBDRkdfTk9fRkxBU0ggaXMgc2V0CgoqIEZpeCBTRFJBTSB0aW1pbmcgb24gUHVycGxlIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggb24gQVRDIGJvYXJkCiAgKGluY2x1ZGVzIHN1cHBvcnQgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlIFBDIENhcmQgY29udHJvbGxlcnMsCiAgYW5kIFllbnRhLWNvbXBhdGlibGUgUENJLXRvLUNhcmRCdXMgY29udHJvbGxlcnMpCgoqIFBhdGNoIGJ5IE1hdGhpanMgSGFhcm1hbiwgMDggTWF5IDIwMDM6CiAgQWRkIGxhbjkxYzk2IGRyaXZlciAodGVzdGVkIG9uIEx1YmJvY2sgYW5kIGN1c3RvbSBQWEEyNTAgYm9hcmQgb25seSkKCiogRml4IHByb2JsZW0gd2l0aCB1c2FnZSBvZiAidHJ1ZSIgKHVuZGVmaW5lZCBpbiBjdXJyZW50IHZlcnNpb25zIG9mIGJmZC5oKQoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvbWVzcyBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgS2VpdGggT3V0d2F0ZXIsIDI4IEFwciAyMDAzOgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyBhbmQgYWRkaXRpb25zIHRvIEdFTjg2MFQgYm9hcmQgc3BlY2lmaWMgY29kZS4KICAtIEFkZGVkIEdFTjg2MF9TQyB2YXJpYW50IHRvIEdFTjg2MFQuCiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIHRvIEdFTjg2MFQgZG9jdW1lbnRhdGlvbi4KICAtIENvcnJlY3QgZHVwbGljYXRlIGVudHJ5IGluIFUtQm9vdCBDUkVESVRTIGZpbGUuCiAgLSBBZGQgR0VOODYwVF9TQyBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmaWxlLgogIC0gVXBkYXRlIENSRURJVFMgZmlsZSB3aXRoIEdFTjg2MFRfU0MgaW5mby4KCiogVXBkYXRlIFNtaXRocyBBZXJvc3BhY2UgYWRkcmVzc2VzIGluIE1BSU5UQUlORVJTIGZpbGUKCiogRml4IGVycm9yIGhhbmRsaW5nIGluIGh1c2gncyB2ZXJzaW9uIG9mICJydW4iIGNvbW1hbmQKCiogTFdNT04gZXh0ZW5zaW9uczoKICAtIFNwbGFzaHNjcmVlbiBzdXBwb3J0CiAgLSBtb2RlbSBzdXBwb3J0CiAgLSBzeXNtb24gc3VwcG9ydAogIC0gdGVtcGVyYXR1cmUgZGVwZW5kZW5kIGVuYWJsaW5nIG9mIExDRAoKKiBBbGxvdyBib290aW5nIGZyb20gb2xkICJQUENCb290IiBkaXNrIHBhcnRpdGlvbnMKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNTUgQm9hcmQgLyBNUEM4MjU1IENQVQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBzdXJlIEJsb2NrIExvY2sgQml0cyBnZXQgY2xlYXJlZCBpbiBSMzYwTVBJIGZsYXNoIGRyaXZlcgoKKiBNUEM4MjMgTENEIGRyaXZlcjogRmlsbCBjb2xvciBtYXAgYmFja3dhcmRzLCB0byBhbGxvdyBmb3Igc3RlYWR5CiAgZGlzcGxheSB3aGVuIExpbnV4IHRha2VzIG92ZXIKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMgKHRoaXMgdGltZSBmb3IgcmVhbCkuCgoqIEFkZCBzdXBwb3J0IGZvciAiYm1wIGluZm8iIGFuZCAiYm1wIGRpc3BsYXkiIGNvbW1hbmRzIHRvIGxvYWQKICBiaXRtYXAgaW1hZ2VzOyB0aGlzIGNhbiBiZSB1c2VkIChmb3IgZXhhbXBsZSBpbiBhICJwcmVib290IgogIGNvbW1hbmQpIHRvIGRpc3BsYXkgYSBzcGxhc2ggc2NyZWVuIHZlcnkgcXVpY2tseSBhZnRlciBwb3dlcm9uLgoKKiBBZGQgc3VwcG9ydCBmb3IgMTMzIE1IeiBjbG9jayBvbiBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxMCBBcHIgMjAwMzoKICBVcGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCiogQWRkIG5ldyBtZWFuaW5nIHRvICJhdXRvc3RhcnQiIGVudmlyb25tZW50IHZhcmlhYmxlOgogIElmIHNldCB0byAibm8iLCBhIHN0YW5kYWxvbmUgaW1hZ2UgcGFzc2VkIHRvIHRoZQogICJib290bSIgY29tbWFuZCB3aWxsIGJlIGNvcGllZCB0byB0aGUgbG9hZCBhZGRyZXNzCiAgKGFuZCBldmVudHVhbGx5IHVuY29tcHJlc3NlZCksIGJ1dCBOT1QgYmUgc3RhcnRlZC4KICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvYWQgYW5kIHVuY29tcHJlc3MgYXJiaXRyYXJ5CiAgZGF0YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBBcHIgMjAwMzoKICBDaGFuZ2VkIERIQ1AgY2xpZW50IHRvIHVzZSBJUCBhZGRyZXNzIGZyb20gc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQKICBmcm9tIHRoZSBPRkZFUiBwYWNrZXQgaW4gdGhlIHNlcnZlciBvcHRpb24gZmllbGQgIzU0IGluIHRoZSBSRVFVRVNUCiAgcGFja2V0LiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB1c2luZyBhIFdpbmRvd3MgMjAwMCBESENQIHNlcnZlciwKICB3aGVyZSB0aGUgREhDUC1zZXJ2ZXIgaXMgbm90IHRoZSBURlRQLXNlcnZlci4KCiogU2V0IG1heCBicmlnaHRuZXNzIGZvciBNTjExMjM2IGRpc3BsYXlzIG9uIFRSQUIgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgbW9kdWxlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDQgQXByIDIwMDM6CiAgQWRkIElETUEgZXhhbXBsZSBjb2RlICh0ZXN0ZWQgb24gODI2MCBvbmx5KQoKKiBBZGQgc3VwcG9ydCBmb3IgUHVycGxlIEJvYXJkIChNSVBTNjQgNUtjKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzY0IDVLYyBDUFVzCgoqIEZpeCBtaXNzaW5nIHNldHRpbmcgb2YgImxvYWRhZGRyIiBhbmQgImJvb3RmaWxlIiBvbiBBUk0gYW5kIE1JUFMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEFwciAyMDAzOgogIC0gdXBkYXRlIE1JUDQwNS00IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBBcHIgMjAwMzoKICAtIFUtQm9vdCB2ZXJzaW9uIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGFkZGVkCiAgICAoQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUpLgogIC0gQ2hhbmdlZCBQUEM0MDVHUHIgdmVyc2lvbiBmcm9tIEEgdG8gQi4KICAtIENoYW5nZWQgQ1BDSTQwNSB0byB1c2UgQ1RTIGluc3RlYWQgb2YgRFNSIG9uIFBQQzQwNSBVQVJUMS4KCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgMDMgQXByaWwgMjAwMzoKICAtIGZpeCBQQ0kgSVJRcyBvbiBNUEwgYm9hcmRzCiAgLSBmaXggdHdvIG1vcmUgdW4tcmVsb2NhdGVkIHBvaW50ZXIgcHJvYmxlbXMKCiogRml4IGJlaGF2aW91ciBvZiAicnVuIiBjb21tYW5kOgogIC0gcHJpbnQgZXJyb3IgbWVzc2FnZSBpdiB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdAogIC0gdGVybWluYXRlIHByb2Nlc3Npbmcgb2YgYXJndW1lbnRzIGluIGNhc2Ugb2YgZXJyb3IKCiogUGF0Y2hlcyBieSBQZXRlciBGaWd1bGksIDEwIE1hciAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQlRVQVJUIG9uIFBYQSBwbGF0Zm9ybQogIC0gQWRkIHN1cHBvcnQgZm9yIFdFUCBFUDI1MCAoUFhBKSBib2FyZAoKKiBGaXggZmxhc2ggcHJvYmxlbXMgb24gSU5DQS1JUDsgYWRkIHRvb2wgdG8gYWxsb3cgYnJ1bmluZyBpbWFnZXMgIHRvCiAgZmxhc2ggdXNpbmcgYSBCREkyMDAwCgoqIEltcGxlbWVudCBmaXggZm9yIEkyQyBFZGdlIENvbmRpdGlvbnMgcHJvYmxlbSBmb3IgYWxsIGJvYXJkcyB0aGF0CiAgdXNlIHRoZSBiaXQtYmFuZ2luZyBkcml2ZXIgKGNvbW1vbi9zb2Z0X2kyYy5jKQoKKiBQYXRjaCBieSBNYXJ0aW4gV2luaXN0b2VyZmVyLCAyMyBNYXIgMjAwMwogIC0gQWRkIHBvcnQgdG8gTVBDNTU1LzU1NiBtaWNyb2NvbnRyb2xsZXJzCiAgLSBBZGQgc3VwcG9ydCBmb3IgY21pIGN1c3RvbWVyIGJvYXJkIHdpdGgKICAgIEludGVsIDI4RjEyOEozQSwgMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBmbGFzaC4KCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAyOCBNYXIgMjAwMzoKICAtIGZpeCBjb21tb24vY21kX25hbmQuYwoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgMjQgTWFyIDIwMDM6CiAgLSBhZGQgdGhyZWFkcyAvIHNjaGVkdWxlciBleGFtcGxlIGNvZGUKCiogQWRkIHBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAzMSBNYXIgMjAwMzoKICAtIGFkZCBjdHJsLWMgc3VwcG9ydCBmb3Iga2VybWl0IGRvd25sb2FkCiAgLSBhbGlnbiBiZGluZm8gb3V0cHV0IG9uIEFSTQogIC0gY3NiMjI2IGJvYXJkOiBicmluZyBpbiBzeW5jIHdpdGggaW5ub2tvbS9tZW1zZXR1cC5TCiAgLSBjc2IyMjYgYm9hcmQ6IGZpeCBNRFJFRlIgaGFuZGxpbmcKICAtIG1pc2MgZG9jIGZpeGVzIC8gZXh0ZW5zaW9ucwogIC0gaW5ub2tvbSBib2FyZDogY2xlYW51cCwgTURSRUZSIGZpeCBpbiBtZW1zZXR1cC5TLCBjb25maWcgdXBkYXRlCiAgLSBhZGQgQk9PVF9QUk9HUkVTUyB0byBhcm1saW51eC5jCgoqIEFkZCBDUFUgSUQsIHZlcnNpb24sIGFuZCBjbG9jayBzcGVlZCBmb3IgSU5DQS1JUAoKKiBQYXRjaGVzIGJ5IERhdmUgRWxsaXMsIDE4IE1hciAyMDAzIGZvciBTWE5JODU1VCBib2FyZDoKICAtIGZpeCBTUkFNIGFuZCBTRFJBTSBtZW1vcnkgc2l6aW5nCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0CiAgLSBhZGQgTUFDIGFkZHJlc3MgZm9yIHNlY29uZCAoU0NDMSkgZXRoZXJuZXQgcG9ydAoKKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgVFFNODI2MCBib2FyZAoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE2IE1hciAyMDAzOgogIC0gQWRkIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgTkFORAogICAgZmxhc2ggKGNlcnRhaW4gZm9ybXMgb2Ygd2hpY2ggYXJlIGNhbGxlZCBTbWFydE1lZGlhKS4KICAtIEFkZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQuCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxOSBNYXIgMjAwMzoKICAtIHVzZSBhcm0tbGludXgtZ2NjIGFzIGRlZmF1bHQgY29tcGlsZXIgZm9yIEFSTQogIC0gZml4IGkyYyBmaXh1cCBjb2RlCiAgLSBmaXggbWlzc2luZyBiYXVkcmF0ZSBzZXR0aW5nCiAgLSBhZGRlZCAkbG9hZGFkZHIgLyBDRkdfTE9BRF9BRERSIHN1cHBvcnQgdG8gbG9hZGIKICAtIG1vdmVkICJpZ25vcmluZyB0cmFpbGluZyBjaGFyYWN0ZXJzIiBfYmVmb3JlXyB1LWJvb3Qgd2FudHMgdG8KICAgIHByaW50IG91dCBkaWFnbm9zdGljcyBtZXNzYWdlczsgcmVtb3ZlcyBib2d1cyBjaGFyYWN0ZXJzIGF0IHRoZQogICAgZW5kIG9mIHRyYW5zbWlzc2lvbgoKKiBQYXRjaCBieSBKb2huIFpoYW4sIDE4IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBib2FyZHMKCiogUGF0Y2ggYnkgUm9sZiBPZmZlcm1hbm5zLCAyMSBNYXIgMjAwMzoKICBwb3J0ZWQgdGhlIGRucDExMTAgcmVsYXRlZCBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgYXJtYm9vdCBjdnMgdG8KICBjdXJyZW50IHUtYm9vdCBjdnMuIHNtYzkxMTExIGRvZXMgbm90IHdvcmsuIHByb2JsZW0gbWFya2VkIGluCiAgc21jOTExMTEuYywgZ3JlcCBmb3IgIkZJWE1FIi4KCiogUGF0Y2ggYnkgQnJpYW4gQXVsZCwgMjUgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNUTSBmbGFzaCBjaGlwcyBvbiBlYm9ueSBib2FyZAoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIE1QQzgyNTAgQm9hcmRzIChQTTgyNSBtb2R1bGUpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjUgTWFyIDIwMDM6CiAgLSBQQ0k0MDUgdXBkYXRlLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE1hciAyMDAzOgogIC0gQ1BDSTQwNTIgdXBkYXRlIChzdXBwb3J0IGZvciByZXZpc2lvbiAzKS4KICAtIFNldCBlZGdlIGNvbmRpdGlvbmluZyBjaXJjdWl0cnkgb24gUFBDNDA1R1ByIGZvciBjb21wYXRpYmlsaXR5CiAgICB0byBleGlzdGluZyBQUEM0MDVHUCBkZXNpZ25zLgogIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KCiogRXh0ZW5kIElOQ0FJUCBib2FyZCBzdXBwb3J0OgogIC0gYWRkIGF1dG9tYXRpYyBSQU0gc2l6ZSBkZXRlY3Rpb24KICAtIGFkZCAiYmRpbmZvIiBjb21tYW5kCiAgLSBwYXNzIGZsYXNoIGFkZHJlc3MgYW5kIHNpemUgdG8gTGludXgga2VybmVsCiAgLSBzd2l0Y2ggdG8gMTUwIE1IeiBjbG9jawoKKiBBdm9pZCBmbGlja2VyIG9uIHRoZSBUUkFCJ3MgVkZEIGJ5IHN5bmNocm9uaXppbmcgdGhlIGVuYWJsZSB3aXRoCiAgdGhlIEhTWU5DL1ZTWU5DLiBSZXF1aXJlcyBuZXcgQ1BMRCBjb2RlIChWZXJzaW9uIDEwMSBmb3IgUmV2LiAxMDAKICBib2FyZHMsIHZlcnNpb24gMTUzIGZvciBSZXYuIDIwMCBib2FyZHMpLgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMTIgTWFyIDIwMDM6CiAgRml4IHJlbG9jYXRpb24gcHJvYmxlbSBvZiBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHN0cmluZyBwb2ludGVycwogIGluIGNvbW1vbi9jbWRfcGNpLmMKCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbPZtLCAxMiBNYXIgMjAwMzoKICBDbGVhbnVwICYgYnVnIGZpeGVzIGZvciBKRkZTMiBjb2RlOgogIC0gdGhlIG1lbW9yeSBtYW5nZW1lbnQgd2FzIGJyb2tlbi4gSXQgY2F1c2VkIGhhdm9jIG9uIG1hbGxvYyBieQogICAgd3JpdGluZyBiZXlvbmQgdGhlIGJsb2NrIGJvdW5kYXJpZXMuCiAgLSB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciBmaWxlcyB3YXMgd3JvbmcsIHNvbWV0aW1lcyByZXN1bHRpbmcKICAgIGluIHNob3J0IGZpbGUgcmVhZHMuCiAgLSBkYXRhIGNvcHlpbmcgbm93IG9wdGlvbmFsbHkgdGFrZXMgZnJhZ21lbnQgdmVyc2lvbiBudW1iZXJzIGludG8KICAgIGFjY291bnQsIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBvbGRlciBkYXRhLgogIFNlZSBkb2MvUkVBRE1FLkpGRlMyIGZvciBkZXRhaWxzLgoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgogIC0gMTYvMzIgTUIgYW5kIDUwLzgwIE1IeiBzdXBwb3J0IHdpdGggYXV0by1kZXRlY3Rpb24gZm9yIElQODYwCiAgLSBFVEgwNSBhbmQgQkVEQlVHIHN1cHBvcnQgZm9yIENVODI0CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQogIC0gbmV3IEJPT1RST00vRkxBU0gwIGFuZCBET0MgYmFzZSBmb3IgUE04MjYKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMiBNYXIgMjAwMzoKICBGaXggdGhlIGNocGFydCBjb21tYW5kIG9uIGlubm9rb20gYm9hcmQKCiogTmFtZSBjbGVhbnVwOgogIG12IGluY2x1ZGUvYXNtLWkzODYvcHBjYm9vdC1pMzg2LmggaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCiAgcy9QUENCb290L1UtQm9vdC8gaW4gc29tZSBmaWxlcwogIHMvcEltYWdlL3VJbWFnZS8gIGluIHNvbWUgZmlsZXMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTUgSmFuIDIwMDM6CiAgRml4ICcnIGNvbW1hbmQgbGluZSBxdW90aW5nCgoqIFBhdGNoIGJ5IFRoZSBMRU9YIHRlYW0sIDE5IEphbiAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFTFBUODYwIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgRGFsbGFzIGRzMTY0eCBSVEMKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDMxIEphbiAyMDAzOgogIC0gbWluaW1hbCBzZXR1cCBmb3IgQ2FyZEJ1cyBicmlkZ2VzCiAgLSBhZGQgRUVQUk9NIHJlYWQvd3JpdGUgc3VwcG9ydCBpbiB0aGUgQ1M4OTAwIGRyaXZlcgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIEkyQyBjb250cm9sbGVyIGluIHRoZSBTYW1zdW5nIHMzYzI0eDAgY2hpcHMKICAtIGFkZCBzdXBwb3J0IGZvciBNUEwncyBWQ01BOSAoU2Ftc3VuZyBzM2MyNDEwIGJhc2VkKSBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBGZWIgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMwNwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgNSBGZWIgMjAwMzoKICBmaXggUExQUkNSL1NDQ1IgaW5pdCBzZXF1ZW5jZSBvbiA4eHggdG8gYWxsb3cgZm9yCiAgY2hhbmdlcyBvZiBFQkRGIGJ5IHNvZnR3YXJlCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNyBGZWIgMjAwMzoKICAiQVBJLWNvbXBhdGliaWxpdHkgcGF0Y2giIGZvciA0eHggSTJDIGRyaXZlcgoKKiBUUkFCIGZpeGVzIC8gZXh0ZW5zaW9uczoKICAtIFJlc3RvcmUgVkZEIGJyaWdodG5lc3MgYXMgc2F2ZWQgaW4gZW52aXJvbm1lbnQKICAtIGFkZCBzdXBwb3J0IGZvciBGR3VqaXRzdSBmbGFzaGVzCiAgLSBtYWtlIHN1cmUgYm90aCBidXp6ZXJzIGFyZSB0dXJuZWQgb2ZmIChkcml2ZSBsb3cgbGV2ZWwpCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNiBNYXIgMjAwMzoKICAtIGZpeCBidWcgaW4gQk9PVFAgY29kZSAobXVzdCB1c2UgTmV0Q29weUlQKQogIC0gdXBkYXRlIG9mIENTQjIyNiBwb3J0CiAgLSBjbGVhciBCU1Mgc2VnbWVudCBvbiBYU2NhbGUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGkyY19pbml0X2JvYXJkKCkgZnVuY3Rpb24KICAtIHVwZGF0ZSB0byB0aGUgSW5ub2tvbSBwbGF0dGZvcm0KCiogRXh0ZW5kIHN1cHBvcnQgZm9yIHJlZHVuZGFuZCBlbnZpcm9ubWVudHMgZm9yIGNvbmZpZ3VyYXRpb25zIHdoZXJlCiAgZW52aXJvbm1lbnQgc2l6ZSA8IHNlY3RvciBzaXplCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTkgRmViIDIwMDM6CiAgcGF0Y2hlcyBmb3IgdGhlIEludGVsIGx1YmJvY2sgYm9hcmQ6CiAgbWVtc2V0dXAuUyAtIGdlbmVyYWwgY2xlYW51cCAoYmFzZWQgb24gUm9iZXJ0J3MgY3NiMjI2IGNvZGUpCiAgZmxhc2guYyAtIG92ZXJoYXVsLCBhY3R1YWxseSB3b3JrcyBub3cKICBsdWJib2NrLmMgLSBmaXggaW5pdCBmdW5jcyB0byByZXR1cm4gcHJvcGVyIHZhbHVlCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNiBGZWIgMjAwMzoKICAtIEZpeGVkIG9mZiBieSBvbmUgaW4gUkZUQSBjYWxjdWxhdGlvbi4KICAtIE5vIG5lZWQgdG8gYWJvcnQgd2hlbiBMREYgaXMgbG93ZXIgdGhhbiB3ZSBjYW4gcHJvZ3JhbSBpdCdzIG9ubHkKICAgIG1pbmltdW0gdGltaW5nIHNvIGNsYW1wIGl0IHRvIHdoYXQgd2UgY2FuIGRvLgogIC0gVGFrZXMgZnVuY3Rpb24gcG9pbnRlciB0byBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgc3BkX252cmFtLiBVc2VmdWxsCiAgICBmb3IgZmFraW5nIGRhdGEgb3IgaGFyZGNvZGUgYSBtb2R1bGUgd2l0aG91dCB0aGUgbnZyYW0uCiAgLSBmaXggb3RoZXIgdXNlciBmb3IgYWJvdmUgY2hhbmdlCiAgLSBmaXggc29tZSBjb21tZW50cy4KCiogUGF0Y2hlcyBieSBCcmlhbiBXYWl0ZSwgMjYgRmViIDIwMDM6CiAgLSBmaXggcG9ydCBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIHNjYW4KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDEgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEVNSyBUT1A4NjAgTW9kdWxlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDAyIE1hciAyMDAzOgogIEFkZCBTUEQgRUVQUk9NIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAyMSBKYW4gMjAwMzoKICAtIEFkZCBzdXBwb3J0IGZvciBJbm5va29tIGJvYXJkCiAgLSBEb24ndCBjb21wbGFpbiBpZiAiaW5zdGFsbCIgZmFpbHMKICAtIFJFQURNRSBjbGVhbnVwIChyZW1vdmUgZHVwbGljYXRlZCBsaW5lcykKICAtIFVwZGF0ZSBQWEEgaGVhZGVyIGZpbGVzCgoqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBleGlzdGluZyBQT1NUIGNvZGUgKGRvYy9SRUFETUUuUE9TVCkKCiogUGF0Y2ggYnkgTGF1ZG5leSBSZW4sIDE1IEphbiAyMDAzOgogIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOCBGZWIgMjAwMzoKICBBZGQgYmVkYnVnIHN1cHBvcnQgZm9yIDgyNHggc3lzdGVtcwoKKiBBZGQgc3VwcG9ydCBmb3IgMTYgTUIgZmxhc2ggY29uZmlndXJhdGlvbiBvZiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TCgoqIEFkZCBpbWFnZSBpbmZvcm1hdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBGZWIgMjAwMzoKICBDUENJSVNFUjQgY29uZmlndXJhdGlvbiB1cGRhdGVkLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IEZlYiAyMDAzOgogIEZpeGVkIGJ1ZyBpbiBleHQuIHNlcmlhbCBjbG9jayBzZXR1cCBvbiBQUEM0MDUgKHNpbmNlIFBQQzQ0MCBwb3J0KS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBGZWIgMjAwMzoKICBBZGQgInBjaWRlbGF5IiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gbXMsIGVuYWJsZWQgdmlhCiAgQ09ORklHX1BDSV9CT09UREVMQVkpLgogIFBDSSBzcGVjIDIuMiBkZWZpbmVzLCB0aGF0IGEgcGNpIHRhcmdldCBoYXMgMl4yNSBwY2kgY2xvY2tzIGFmdGVyCiAgUlNUIyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gY3ljbGVzICgzM01IeiAtPiAxcykuCgoqIEZpeCBkdWFsIFBDTUNJQSBzbG90IHN1cHBvcnQgKHdoZW4gcnVubmluZyB3aXRoIGp1c3Qgb25lCiAgc2xvdCBwb3B1bGF0ZWQpCgoqIEFkZCBWRkQgdHlwZSBkZXRlY3Rpb24gdG8gdHJhYiBib2FyZAoKKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUgIGV0aGFkZHIgIGVudmlyb25tZW50CiAgdmFyaWFibGUgd2l0aCB2YWx1ZSBpbiB0aGUgRUVQUk9NCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzMyIDRLYyBDUFVzCgoqIEFkZCBzdXBwb3J0IGZvciBJTkNBLUlQIEJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2CgoqIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2CgoqIFBhdGNoIGJ5IFRvcmQgQW5kZXJzc29uLCAxNiBKYW4gMjAwMzoKICBGaXggZmxhc2ggc2VjdG9yIGNvdW50IGZvciBUUU04eHhMCgoqIEZpeCBJMkMgRUVQUk9NIHByb2JsZW0gb24gSUNVODYyIGJvYXJkICh3b3VsZCBvbmx5IHdyaXRlIHRoZSBmaXJzdAogIDE2IGJ5dGVzIG91dCBvZiBlYWNoIDMyIGJ5dGUgYmxvY2spCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCiAgKHBhdGNoIGJ5IErzbiBCZW5lZGlrdHNzb24sIDExIERlYyAyMDAyKQoKKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAoKKiBBZGQgd2F0Y2hkb2cgdHJpZ2dlciBwb2ludHMgd2hpbGUgd2FpdGluZyBmb3Igc2VyaWFsIHBvcnQKICAoc28gZmFyIG9ubHkgOHh4IC0tIG5lZWRlZCBvbiBMV01PTiB3aXRoIDEwMG1zIHdhdGNoZG9nKQoKKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoZmlndXJhdGlvbiBvZiB0aGUgdXRpbGl0eSwgdXNpbmcgYSBjb25maWcgZmlsZSkKCiogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCgoqIFN3aXRjaCBMV01PTiBib2FyZCBkZWZhdWx0IGNvbmZpZyBmcm9tIEZSQU0gdG8gRUVQUk9NOwogIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXNlIDEtYnl0ZS1yZWFkIGluc3RlYWQgb2YgLXdyaXRlIGZvciBpcHJvYmUoKSBmdW5jdGlvbgogIEFkZCBpMmMgY29tbWFuZHMgdG8gUE04MjYgY29uZmlnCgoqIGV4dGVuZCBJMkMgUE9TVCBjb2RlOiBjaGVjayBmb3IgbGlzdCBvbiBrbm93biBhZGRyZXNzZXMKCiogSW1wcm92ZSBsb2cgYnVmZmVyIGNvZGU7IHVzZSAibG9nbGV2ZWwiIHRvIGRlY2lkZSB3aGljaCBtZXNzYWdlcwogIHRvIGxvZyBvbiB0aGUgY29uc29sZSwgdG9vIChsaWtlIGluIExpbnV4KTsgZ2V0IHJpZCBvZiAibG9nc3RhcnQiCgoqIEFkZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGJvYXJkLXNwZWNpZmljIGZvciBUUkFCIG5vdywgdG8gYmUgZml4ZWQgbGF0ZXIpCgoqIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKICBGaXggbWlzYyBwcm9ibGVtcyB3aXRoIEFtaWdhT25lIHN1cHBvcnQKCiogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6CiAgbWlub3IgY2xlYW51cCB0byB0aGUgTVBDODI0NSBFUElDIGRyaXZlcgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgKFNJVSkgaW50ZXJydXB0cyBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyNyBOb3YgMjAwMjoKICBmaXggb3V0cHV0IG9mICJwY2lpbmZvIiBjb21tYW5kIGZvciBDYXJkQnVzIGJyaWRnZSBkZXZpY2VzLgoKKiBGaXggYnVnIGluIFRRTTgyNjAgYm9hcmQgZGV0ZWN0aW9uIC0gYm9hcmRzIGdvdCBzdHVjayB3aGVuIGJvYXJkIElECiAgd2FzIG5vdCByZWFkYWJsZQoKKiBBZGQgTEVEIGluZGljYXRpb24gZm9yIElERSBhY3Rpdml0eSBvbiBLVVA0SyBib2FyZAoKKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjAgTm92IDIwMDIKICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCiAgQWRkIHN1cHBvcnQgZm9yIEJNUCBsb2dvcyBpbiBjZmJfY29uc29sZSBkcml2ZXIuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggUENNQ0lBIHNsb3RzIChhdCB0aGUgc2FtZSB0aW1lISkgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjEgTm92IDIwMDI6CiAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDIxIE5vdiAyMDAyCiAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQogIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gY29uZmlndXJhYmxlCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTggTm92IDIwMDI6CiAgRml4ZXMgZm9yIHg4NiBwb3J0IChtb3N0bHkgc3RyaW5ncyBpc3N1ZXMpCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKICBGaXggZm9yIG5hdHNlbWkgTklDIGNhcmRzIChEUDgzODE1KQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKICBmaXggYSBidWcgZm9yIHRoZSBNSUkgY29uZmlndXJhdGlvbiwgYW5kIHNvbWUgd2FybmluZ3MKCiogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgogIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAogIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgogIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCiAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKICAgIGJlaW5nIGRlZmluZWQuCiAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCiAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAogICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKCiogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CiAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCiAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwogIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCiAgd2FzIGZpbGxpbmcgdGhlbS4KCiogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCiAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwogIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCiAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSwogIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCiAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKICAgIGhhbmRsZXJpbmcKICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQogICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CiAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgogIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCiAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCiAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCgoqIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgogIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKCiogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMgIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogIGRyaXZlcnMKCiogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwogIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgogIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCiAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQogIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKCiogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgogIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwoKKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCiAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6CiAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKCiogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgoKSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQpQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K