MjAxMi0xMi0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIG51bWJlci4gIFJlcGxhY2UgQ09QWVJJR0hUX1lFQVIuCgkqIE1ha2VmaWxlLmFtIChkaXN0LWhvb2spOiBSZXZlcnQgMjAxMC0wOC0xMCBjaGFuZ2UuCgoyMDEyLTEyLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYXV0b2Jvb3Q6IFJlbmFtZSB0byBib290c3RyYXAuCgkqIGF1dG9ib290LmNvbmY6IFJlbmFtZSB0byBib290c3RyYXAuY29uZi4KCSogUkVBRE1FLmJvb3Q6IFJlbW92ZS4KCSogTWFrZWZpbGUuYW06IFJlbW92ZSBSRUFETUUuYm9vdCwgYWRkIGJvb3RzdHJhcCBhbmQgYm9vdHN0cmFwLmNvbmYuCgoyMDEyLTEyLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogZ251bGliOiBVcGRhdGUuCgkqIHRlc3RzdWl0ZS92ZXJzaW9uLmdpbjogUmVnZW5lcmF0ZS4KCjIwMTItMTItMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBkb2Mvc2VkLnRleGk6IFJlZ2VuZXJhdGUuCgkqIGRvYy9zZWQuMTogUmVnZW5lcmF0ZS4KCSogcG8vc2VkLnBvdDogUmVnZW5lcmF0ZS4KCjIwMTItMDctMjUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBkb2Mvc2VkLWluLnRleGk6IERvY3VtZW50IGRpZmZlcmVuY2UgYmV0d2VlbiAiZSIgYW5kICJyIgoJY29tbWFuZHMuCgoyMDEyLTA0LTI5ICBKaW0gSGlsbCAgPGdqdGhpbGxAZ21haWwuY29tPgoKCSogTWFrZWZpbGUuYW0gKG5vaW5zdF9EQVRBLCBkaXN0LWhvb2spOiBidWlsZCBmYWlsZWQgYWZ0ZXIgZ2l0CgljbGVhbiAtZGZ4IGZpbmlzaCBib290c3RyYXAuc2ggcmVtb3ZhbC4KCjIwMTItMDQtMTMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChjb252ZXJ0X251bWJlcik6IFJlbW92ZSBkZWZhdWx0X2NoYXIgYXJndW1lbnQsCglleHBlY3QgYnVmIHRvIHBvaW50IHRvIGl0LiAgUmVtb3ZlIG1heGRpZ2l0cyBhcmd1bWVudCBhbmQgY29tcHV0ZQoJaXQgb24gdGhlIGZseS4KCShub3JtYWxpemVfdGV4dCk6IFVuaWZ5IGNhbGxzIHRvIGNvbnZlcnRfbnVtYmVyIHVuZGVyIHRoZSBjb252ZXJ0CglsYWJlbC4gIEZvciBURVhUX1JFUExBQ0VNRU5UIGFkZCBhIGJhY2tzbGFzaCB0byB0aGUgb3V0cHV0IGlmCgljb252ZXJ0X251bWJlciByZXR1cm5zIGNoID09ICcmJy4KCjIwMTItMDMtMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiB0ZXN0c3VpdGUvdmVyc2lvbi5naW46IFJlZ2VuZXJhdGUuCgoyMDEyLTAzLTE2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYmFzaWNkZWZzLmggKFBfKTogUmVtb3ZlLgoJKiBzZWQvY29tcGlsZS5jOiBBZGp1c3QuCgkqIHNlZC9leGVjdXRlLmM6IExpa2V3aXNlLgoJKiBzZWQvZm10LmM6IExpa2V3aXNlLgoJKiBzZWQvc2VkLmM6IExpa2V3aXNlLgoJKiBzZWQvc2VkLmg6IExpa2V3aXNlLgoJKiBzZWQvdXRpbHMuYzogTGlrZXdpc2UuCgkqIHNlZC91dGlscy5oOiBMaWtld2lzZS4KCjIwMTItMDMtMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBiYXNpY2RlZnMuaCAoRlJFRSk6IFJlbW92ZS4KCSogc2VkL2NvbXBpbGUuYzogQWRqdXN0LgoJKiBzZWQvZXhlY3V0ZS5jOiBBZGp1c3QuCgkqIHNlZC9yZWdleHAuYzogQWRqdXN0LgoJKiBzZWQvdXRpbHMuYzogQWRqdXN0LCByZW1vdmUgY2tfZnJlZS4KCSogc2VkL3V0aWxzLmg6IEFkanVzdCwgcmVtb3ZlIGNrX2ZyZWUuCgoyMDEyLTAzLTE2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYmFzaWNkZWZzLmggKENBU1QsIFZDQVNULCBWT0lELCBNRU1DUFksIE1FTU1PVkUpOiBSaXAgb3V0LgoJKiBzZWQvY29tcGlsZS5jOiBBZGp1c3QuCgkqIHNlZC9leGVjdXRlLmM6IEFkanVzdC4KCSogc2VkL3JlZ2V4cC5jOiBBZGp1c3QuCgkqIHNlZC91dGlscy5jOiBBZGp1c3QuCgkqIHNlZC91dGlscy5oOiBBZGp1c3QuCgoyMDEyLTAzLTE2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYzogVW5jb25kaXRpb25hbGx5IGNvbXBpbGUgZm9yIE1CQ1MuCgkqIHNlZC9tYmNzLmM6IFVuY29uZGl0aW9uYWxseSBjb21waWxlIGZvciBNQkNTLgoJKiBzZWQvc2VkLmg6IFVuY29uZGl0aW9uYWxseSBjb21waWxlIGZvciBNQkNTLgoKMjAxMi0wMy0xNiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGJhc2ljZGVmcy5oOiBFbmpveSBnbnVsaWIncyBoZWFkZXJzLgoJKiBzZWQvY29tcGlsZS5jOiBMaWtld2lzZS4KCSogc2VkL2V4ZWN1dGUuYzogTGlrZXdpc2UuCgkqIHNlZC9yZWdleHAuYzogTGlrZXdpc2UuCgkqIHNlZC9zZWQuYzogTGlrZXdpc2UuCgkqIHNlZC9zZWQuaDogTGlrZXdpc2UuCgkqIHNlZC91dGlscy5jOiBMaWtld2lzZS4KCjIwMTItMDMtMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBib290c3RyYXAuc2guaW46IFJlbW92ZS4KCSogYm9vdHN0cmFwLnNoOiBSZW1vdmUuCgkqIGNvbmZpZ3VyZS5hYzogRG8gbm90IGNyZWF0ZSBib290c3RyYXAuc2guCgkqIGJhc2ljZGVmcy5oOiBSZW1vdmUgZ3VhcmRzLgoJKiBzZWQvZXhlY3V0ZS5jIFtCT09UU1RSQVBdOiBSZW1vdmUgZ3VhcmRzLgoJKiBzZWQvc2VkLmMgW0JPT1RTVFJBUF06IFJlbW92ZSBndWFyZHMuCgkqIHNlZC9zZWQuaCBbQk9PVFNUUkFQXTogUmVtb3ZlIGd1YXJkcy4KCjIwMTItMDMtMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBnbnVsaWI6IFVwZGF0ZS4KCjIwMTItMDMtMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBkb2Mvc2VkLng6IERvY3VtZW50IGFkZHJlc3MgYmVoYXZpb3IgYWNyb3NzIGlucHV0IGZpbGVzLgoJKiBkb2Mvc2VkLjE6IFJlZ2VuZXJhdGUuCgoyMDEyLTAyLTEzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBUZXN0IHdoZXRoZXIgZm9wZW4oImZvbyIsICJydCIpIHdvcmtzLgoJKiBzZWQvY29tcGlsZS5jOiBEbyBub3Qgb3BlbiBzY3JpcHRzIHdpdGggInJ0IiBtb2RlIGlmIGl0IGRvZXNuJ3QuCgkqIHNlZC9zZWQuYzogTmV2ZXIgb3BlbiBpbnB1dCBmaWxlcyB3aXRoICJydCIgbW9kZS4KCjIwMTItMDItMDUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CiAgICAgICAgICAgIEppbSBIaWxsICA8Z2p0aGlsbEBnbWFpbC5jb20+CgoJKiBhdXRvYm9vdC5jb25mOiBDaGFuZ2UgZ2V0bGluZSB0byBnZXRkZWxpbS4KCSogZG9jL3NlZC1pbi50ZXhpOiBEb2N1bWVudCAtei8tLW51bGwtZGF0YS4KCSogZG9jL3NlZC50ZXhpOiBSZWdlbmVyYXRlLgoJKiBkb2Mvc2VkLjE6IFJlZ2VuZXJhdGUuCgkqIHNlZC9leGVjdXRlLmM6IENoYW5nZSAnXG4nIHRvIGJ1ZmZlcl9kZWxpbWl0ZXIuCgkqIHNlZC9zZWQuYzogQWRkIHN1cHBvcnQgZm9yIC16Ly0tbnVsbC1kYXRhLgoJKiBzZWQvc2VkLmg6IEFkZCBidWZmZXJfZGVsaW1pdGVyLgoJKiBzZWQvdXRpbHMuYzogQ2hhbmdlIGNrX2dldGxpbmUgdG8gY2tfZ2V0ZGVsaW0uCgkqIHNlZC91dGlscy5oOiBDaGFuZ2UgY2tfZ2V0bGluZSB0byBja19nZXRkZWxpbS4KCSogTkVXUzogRG9jdW1lbnQgbmV3IG9wdGlvbi4KCjIwMTEtMTEtMjMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBkb2Mvc2VkLWluLnRleGk6IERvY3VtZW50IGhvdyBtdWx0aWxpbmUgbW9kZSBhZmZlY3RzIG1hdGNoaW5nCgluZXdsaW5lcyBhZ2FpbnN0IHBlcmlvZC4gIFJlcG9ydGVkIGJ5IERtaXRyeSBCb2xzaGFrb3YuCgoyMDExLTA4LTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3NlZC5jICh1c2FnZSk6IEZpeCBkb2N1bWVudGF0aW9uIGZvciAtaS4gIFJlcG9ydGVkIGJ5CglEZW5uaXMgQmFydGxldHQuCgoyMDExLTA3LTExICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgoKCWF2b2lkIHNpbGVudCBkYXRhIGxvc3Mgd2hlbiBhbiBpbnB1dCBsaW5lIGlzIDJeMzEgYnl0ZXMgb3IgbG9uZ2VyCglJZiBvbmUgbGluZSBpbiBhIGZpbGUgaGFzIGxlbmd0aCAoaW5jbHVkaW5nIG5ld2xpbmUpIG9mIDJeMzEsIHRoZW4KCWFwcGx5aW5nIHNlZCAtaSB0byB0aGF0IGZpbGUgdHJ1bmNhdGVzIGl0IHRvIHNpemUgMC4gIEkgZmlyc3QKCW5vdGljZWQgaXQgbGlrZSB0aGlzOiBDcmVhdGUgYSBmaWxlIHdpdGggbGluZSBvZiBsZW5ndGggMl4zMS0xCgkgICQgcGVybCAtbGUgJ3ByaW50ICJ2IngoMioqMzEtMSknID4gawoJVGhlbiBwcmVwZW5kIGEgYnl0ZSB0byB0aGF0IGxpbmU6CgkgICQgc2VkIC1pICdzL14vdi8nIGsKCVN1cnByaXNlISAgVGhlIGZpbGUgaXMgZW1wdHkuCgkqIHNlZC91dGlscy5jIChja19nZXRsaW5lKTogRGVjbGFyZSAicmVzdWx0IiB0byBiZSBvZiB0eXBlIHNzaXplX3QsCglyYXRoZXIgdGhhbiBpbnQsIHRvIG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBnZXRsaW5lLgoKMjAxMS0wNy0xNCAgUGFkcmFpZyBCcmFkeSAgPHBAZHJhaWdicmFkeS5jb20+CgoJKiBleGVjdXRlLmMgKG9wZW5fbmV4dF9maWxlKTogT25seSByZW9wZW4gc3RkaW4gb24gV2luZG93cy9ET1MuCgoyMDExLTA1LTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogZG9jL3NlZC1pbi50ZXhpOiBFeHBsYWluIGJlaGF2aW9yIG9mIFxsIGFuZCBcdSBhdCB0aGUgZW5kCglvZiB0aGUgcmVwbGFjZW1lbnQgdGV4dC4KCSogZG9jL3NlZC50ZXhpOiBSZWdlbmVyYXRlLgoJKiBzZWQvZXhlY3V0ZS5jIChhcHBlbmRfcmVwbGFjZW1lbnQsIGRvX3N1YnN0KTogRnVydGhlcgoJc2ltcGxpZmljYXRpb24uCgoyMDExLTA1LTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogZG9jL3NlZC1pbi50ZXhpOiBGaXggaW5jb3JyZWN0IGNvbW1lbnQgaW4gdGhlICJJbmNyZW1lbnQgYQoJbnVtYmVyIiBleGFtcGxlLiAgUmVwb3J0ZWQgYnkgV3UgTGlhbmcgYW5kIE1pY2FoIENvd2FuLgoJKiBkb2Mvc2VkLnRleGk6IFJlZ2VuZXJhdGUuCgoyMDExLTAzLTExICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAobm9ybWFsaXplX3RleHQpOiBDbGFuZyBhbmFseXplciBjbGVhbnVwLgoJKiBzZWQvZXhlY3V0ZS5jIChhcHBlbmRfcmVwbGFjZW1lbnQsIGRvX3N1YnN0KTogU2FtZS4KCSogc2VkL3V0aWxzLmMgKGNrX2dldGxpbmUpOiBTYW1lLgoKMjAxMC0xMS0xMyAgSmFyaSBBYWx0byAgPGphcmkuYWFsdG9AY2FudGUubmV0PgoKCSogZG9jL3NlZC54OiBPcmRlciBjb21tYW5kcyBhbHBoYWJldGljYWxseS4KCSogZG9jL3NlZC4xOiBSZWdlbmVyYXRlLgoJKiBkb2Mvc2VkLnRleGk6IFJlZ2VuZXJhdGUuCgoyMDEwLTExLTEwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogZG9jL3NlZC1pbi50ZXhpOiBGaXggZG91YmxlIG5lZ2F0aW9uIGluIGNvbW1lbnQsIGVzY2FwZQoJZmlsZSBuYW1lcy4KCjIwMTAtMTEtMDMgIEVyaWMgQmxha2UgIDxlYmxha2VAcmVkaGF0LmNvbT4KCgkqIGJhc2ljZGVmcy5oIChJU0RJR0lUKTogQXZvaWQgY29tcGlsZXIgd2FybmluZyBvbiBjeWd3aW4uCgkqIHNlZC9jb21waWxlLmMgKG5vcm1hbGl6ZV90ZXh0KTogQXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLgoKCSogc2VkL3NlZC5jIChpbmNsdWRlcyk6IFN1cHBseSBtaXNzaW5nIGhlYWRlci4KCjIwMTAtMTEtMDEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mOiBSZXBsYWNlIGdldHRleHQgd2l0aCBnZXR0ZXh0LWguICBTdWdnZXN0ZWQgYnkKCUdlcmFsZCBQZmVpZmVyIGFuZCBFcmljIEJsYWtlLgoJKiBjb25maWd1cmUuYWM6IERvd25ncmFkZSBtaW5pbXVtIHJlcXVlc3RlZCB2ZXJzaW9uIG9mIGdldHRleHQKCXRvIDAuMTcuCgoyMDEwLTEwLTMxICBHZXJhbGQgUGZlaWZlciAgPGdlcmFsZEBwZmVpZmVyLmNvbT4KCgkqIGRvYy9zZWQtaW4udGV4aSAoRXh0ZW5kZWQgcmVnZXhwcyk6IEFkZCAnfCcgdG8gdGhlIGxpc3Qgb2YKCWRpZmZlcmVuY2VzLiAgTm90ZSB0aGF0ICJcfCIgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIGJlZ2luIHdpdGguCgkqIGRvYy9zZWQudGV4aTogUmVidWlsZC4KCjIwMTAtMTAtMjAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mOiBBZGQgZndyaXRpbmcuCgkqIHNlZC91dGlscy5jOiBVc2UgaXQuCgoyMDEwLTA5LTIwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogZG9jL2NvbmZpZ3VyZS5hYzogTWVudGlvbiBidWctc2VkQGdudS5vcmcuCgkqIGRvYy9zZWQueDogTWVudGlvbiBidWctc2VkQGdudS5vcmcuCgkqIGRvYy9zZWQtaW4udGV4aTogTWVudGlvbiBidWctc2VkQGdudS5vcmcuCgoyMDEwLTA4LTMwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogTWFrZWZpbGUuYW0gKGRpc3QtaG9vayk6IFJlbW92ZSBDT1BZUklHSFRfWUVBUiBjaGVjay4KCSogYXV0b2Jvb3QuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgdmVyc2lvbi1ldGMtZnNmLgoJKiBjb25maWd1cmUuYWMgKENPUFlSSUdIVF9ZRUFSKTogUmVtb3ZlLiAgQ2hhbmdlIHBhY2thZ2UgbmFtZSB0bwoJIkdOVSBzZWQiLgoJKiBkb2Mvc2VkLjE6IFJlZ2VuZXJhdGUuCgkqIHNlZC9zZWQuYyAoQVVUSE9SUyk6IE5ldy4KCShtYWluKTogVXNlIHZlcnNpb25fZXRjLgoKMjAxMC0wNy0xOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC5jICh3cml0ZV9tb2RlKTogTmV3LgoJKG1haW4pOiBJbml0aWFsaXplIGl0IHRvICJ3YiIgaWYgLS1iaW5hcnkgaXMgcGFzc2VkLgoJKiBzZWQuaCAod3JpdGVfbW9kZSk6IE5ldy4KCSogY29tcGlsZS5jIChtYXJrX3N1YnN0X29wdHMsIGNvbXBpbGVfcHJvZ3JhbSk6IFVzZSBpdCBpbnN0ZWFkCglvZiAidyIuCgkqIGV4ZWN1dGUuYyAob3Blbl9uZXh0X2ZpbGUpOiBQYXNzIHdyaXRlX21vZGUgdG8gY2tfbWtzdGVtcC4KCSogdXRpbHMuYyAoY2tfbWtzdGVtcCk6IEFjY2VwdCBtb2RlLCBwYXNzIGl0IHRvIGZkb3Blbi4gIENvbnN0aWZ5LgoJKiB1dGlscy5oIChja19ta3N0ZW1wKTogQWRqdXN0IHByb3RvdHlwZS4KCjIwMTAtMDgtMTcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJRml4IGltcHJlY2lzaW9uIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIGBEJy4KCSogZG9jL3NlZC1pbi50ZXhpIChEIGNvbW1hbmQpOiBGaXggZG9jdW1lbnRhdGlvbiBvZiBiZWhhdmlvciBmb3IKCXBhdHRlcm4gc3BhY2UgZW5kaW5nIHdpdGggXG4gYW5kIHdpdGggbm8gb3RoZXIgbmV3bGluZS4KCVJlcG9ydGVkIGJ5IFJhbmRhbGwgQ290dG9uLgoJKiBkb2Mvc2VkLnggKEQgY29tbWFuZCk6IEZpeCBkb2N1bWVudGF0aW9uIG9mIGJlaGF2aW9yIGZvcgoJcGF0dGVybiBzcGFjZSBlbmRpbmcgd2l0aCBcbiBhbmQgd2l0aCBubyBvdGhlciBuZXdsaW5lLgoJKiBkb2Mvc2VkLnRleGk6IFJlZ2VuZXJhdGUuCgkqIGRvYy9zZWQuMTogUmVnZW5lcmF0ZS4KCjIwMTAtMDctMTkgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CgoJTGV0IC0tcG9zaXggdHVybiBvZmYgbm9ucG9ydGFibGUgc2NyaXB0cyBlbmRpbmcgaW4gYmFja3NsYXNoLgoJKiBzZWQvY29tcGlsZS5jIChlcnJvcnMsIElOQ09NUExFVEVfQ01EKTogTmV3IGVycm9yIHN0cmluZy4KCShjb21waWxlX3Byb2dyYW0pOiBJbiBzdHJpY3QgcG9zaXggbW9kZSwgY29tcGxhaW4gYWJvdXQgaW5jb21wbGV0ZQoJY29tbWFuZC4KCSogTkVXUzogVXBkYXRlLgoJUmVwb3J0IGJ5IEJydW5vIEhhaWJsZS4KCjIwMTAtMDctMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IFJlcGxhY2UgbWtzdGVtcCB3aXRoIG1rb3N0ZW1wLgoJKiBib290c3RyYXAuc2guaW46IENvbXBpbGUgbWtvc3RlbXAuYyBpbnN0ZWFkIG9mIG1rc3RlbXAuYy4KCSogZ251bGliOiBVcGRhdGUuCgkqIE5FV1M6IE1lbnRpb24gY2hhbmdlLgoJKiBzZWQvdXRpbHMuYyAoY2tfbWtzdGVtcCk6IFVzZSBta29zdGVtcCB0byB3b3JrIGFyb3VuZCBDeWd3aW4KCW9kZGl0eS4gIFJlcG9ydGVkIGJ5IFN0ZXBhbiBLYXNhbC4KCjIwMTAtMDUtMDMgIFRpbW90aHkgQmFrZXIgIDx0aW1vdGh5cGF1bGJha2VyQGdtYWlsLmNvbT4gKHRpbnkgY2hhbmdlKQoKCSogZG9jL3NlZC50ZXhpIChSZWd1bGFyIGV4cHJlc3Npb25zKTogRml4IHR5cG8uCgoyMDA5LTExLTE1ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgoKCSogZG9jL3NlZC50ZXhpIChFeHRlbmRlZCBDb21tYW5kcyk6IERvY3VtZW50IEYgY29tbWFuZC4KCSogZG9jL3NlZC1pbi50ZXhpOiBSZWdlbmVyYXRlLgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBBY2NlcHQgJ0YnIGlmIG5vdCAtLXBvc2l4LgoJKiBzZWQvZXhlY3V0ZS5jIChvcGVuX25leHRfZmlsZSk6IEFsd2F5cyBpbml0aWFsaXplIGluX2ZpbGVfbmFtZS4KCShleGVjdXRlX3Byb2dyYW0pOiBIYW5kbGUgJ0YnLgoJKiBjb25maWd1cmUuYWM6IEJ1bXAgU0VEX0ZFQVRVUkVfVkVSU0lPTi4KCSogTkVXUzogVXBkYXRlLgoKMjAwOS0xMi0wNyAgQ2xpbnQgQWRhbXMgIDxzY2hpem9AZGViaWFuLm9yZz4gICh0aW55IGNoYW5nZSkKCgkqIHNlZC9leGVjdXRlLmMgKG9wZW5fbmV4dF9maWxlKTogSWYgaXNfc2VsaW51eF9lbmFibGVkIHJldHVybnMgLTEsCgl0cmVhdCBpdCBhcyAiZGlzYWJsZWQiLgoKMjAwOS0xMC0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKGNsb3NlZG93bik6IEZpcnN0IGNoYW5nZSBvd25lciAod2hpbGUgcGVybWlzc2lvbnMKCXN0YXkgMD8wMCksIHRoZW4gbW9kZS4KCjIwMDktMTAtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgkgICAgV0FORyBZdW5mZW5nICA8dWh1cnVoQGdtYWlsLmNvbT4KCgkqIHNlZC9leGVjdXRlLmMgKHN0cl9hcHBlbmQsIHN0cl9hcHBlbmRfbW9kaWZpZWQpOiBIYW5kbGUgaW5jb21wbGV0ZQoJc2VxdWVuY2VzIGFzIGlmIHRoZXkgd2VyZSBpbnZhbGlkLgoKMjAwOS0xMC0xNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHBvL3NlZC5wb3Q6IFVwZGF0ZS4KCjIwMDktMTAtMTQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IFVzZSBjYWNoZSB2YXJpYWJsZXMgcmF0aGVyIHRoYW4gQUNfQ0hFQ0tfRlVOQy4KCjIwMDktMTAtMTQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IFJlbW92ZSBvYnNlbGV0ZSBjb25maWd1cmUgdGVzdHMuCgkqIHNlZC9mbXQuYzogQXNzdW1lIGxpbWl0cy5oIGlzIGFsd2F5cyBwcmVzZW50LgoJKiBzZWQvdXRpbHMuYzogQXNzdW1lIHZmcHJpbnRmIGlzIGFsd2F5cyBwcmVzZW50LgoKMjAwOS0xMC0xNCAgWXVyaSBHLiBLdWRyeWFzaG92ICA8dXJrdWQudXJrdWRAZ21haWwuY29tPiAodGlueSBjaGFuZ2UpCgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IE92ZXJyaWRlIExDX0FMTCwgbm90IExBTkcuCgoyMDA5LTEwLTEyICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgoKCSogZG9jL3NlZC1pbi50ZXhpIChJbnZva2luZyBzZWQpOiBBZGQgaW5kZXggZW50cmllcyBmb3IgLS1wb3NpeCwKCS1zLCAtLXNlcGFyYXRlLgoJKE90aGVyIENvbW1hbmRzKTogRml4IHR5cG8uCgkqIGRvYy9zZWQudGV4aTogUmVnZW5lcmF0ZS4KCjIwMDktMDktMDcgIERtaXRyeSBDaGlzdGlrb3YgPGRkMWVtYWlsQGdtYWlsLmNvbT4gKHRpbnkgY2hhbmdlKQoKCSogZG9jL3NlZC1pbi50ZXhpOiBEb2N1bWVudCBob3cgdG8gc2VwYXJhdGUgY29tbWFuZHMuCgkqIGRvYy9zZWQudGV4aTogUmVnZW5lcmF0ZS4KCjIwMDktMDgtMzAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mOiBBZGQgc3NpemVfdC4KCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdXNlbGVzcyBzdHVmZiwgYnVtcCBnZXR0ZXh0IHJlcXVpcmVtZW50IHRvIDAuMTcuCgoyMDA5LTA4LTEwICBCYWtlIFRpbW1vbnMgIDxiM3RpbW1vbnNAc3BlZWR5bWFpbC5vcmc+ICh0aW55IGNoYW5nZSkKCgkqIGRvYy9zZWQtaW4udGV4aTogRml4IHR5cG8uCgoyMDA5LTA2LTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24uCgkqIE5FV1M6IEJ1bXAgdmVyc2lvbi4KCSogZ251bGliOiBVcGRhdGUuCgkqIGRvYy9zZWQuMTogUmVnZW5lcmF0ZS4KCjIwMDktMDYtMjUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mOiBBZGQgc2VsaW51eC1oLgoJKiBleGVjdXRlLmM6IENvcHkgb3ZlciBmaWxlIGNyZWF0aW9uIGNvbnRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUuCgoyMDA5LTA2LTI1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogZXhlY3V0ZS5jOiBEbyBub3QgY29weSBBQ0xzIHVudGlsIHRoZSBmaWxlIGlzIGNvcGllZC4KCSogdXRpbHMuYyAoY2tfbWtzdGVtcCk6IFNldCBhIHJlc3RyaWN0aXZlIHVtYXNrIG9uIHRlbXBvcmFyeSBmaWxlcy4KCjIwMDktMDYtMjYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdDogRG8gbm90IHVzZSBHSVRfQ09ORklHX0xPQ0FMLgoKMjAwOS0wNi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGF1dG9ib290LmNvbmY6IEFkZCBtZW1jaHIgYWdhaW4uCgkqIGdudWxpYjogVXBkYXRlLgoKMjAwOS0wNi0xMSAgU2VyZ2V5IEZhcmJvdGthICA8ejhzZXJnZXk4ekBnbWFpbC5jb20+ICAodGlueSBjaGFuZ2UpCgoJKiBzZWQvZXhlY3V0ZS5jIChvcGVuX25leHRfZmlsZSk6IEZpeCBvZmYtYnktb25lIGNhdXNpbmcgcHJvYmxlbXMKCXVuZGVyIEN5Z3dpbi4KCjIwMDktMDUtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChzbmFyZl9jaGFyX2NsYXNzKTogRml4IGxvZ2ljIGJ1ZyB3aXRoIFtbWyBpbiByZWd1bGFyCglleHByZXNzaW9ucyAoYW5kIGEgcG9zc2libHkgdW5pbml0aWFsaXplZCB1c2Ugb2YgdmFyaWFibGUgZGVsaW0gc3RlbW1pbmcKCWZyb20gdGhlIGJ1ZykuICBVbmluaXRpYWxpemVkIHZhcmlhYmxlIGJ1ZyByZXBvcnRlZCBieSBaaG9uZ3hpbmcgWHUuCgkqIHRlc3RzdWl0ZS9icmFja2V0cy5nb29kOiBOZXcuCgkqIHRlc3RzdWl0ZS9icmFja2V0cy5pbnA6IE5ldy4KCSogdGVzdHN1aXRlL2JyYWNrZXRzLnNlZDogTmV3LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IEFkZCB0ZXN0LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IEFkZCB0ZXN0LgoKMjAwOS0wNS0xMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogRGVmaW5lIENPUFlSSUdIVF9ZRUFSLgoJKiBNYWtlZmlsZS5hbSAoZGlzdC1ob29rKTogVGVzdCBpdC4KCSogc2VkL21iY3MuYzogRml4IGNvcHlyaWdodCB5ZWFycy4KCSogc2VkL3NlZC5jOiBGaXggY29weXJpZ2h0IHllYXJzLiAgQ2hhbmdlIENPUFlSSUdIVF9OT1RJQ0UgdG8KCUNPUFlSSUdIVF9ZRUFSLgoJKiBzZWQvdXRpbHMuYzogRml4IGNvcHlyaWdodCB5ZWFycy4KCSogdGVzdHN1aXRlL3ZlcnNpb24uZ2luOiBVc2UgQ09QWVJJR0hUX1lFQVIuCgoyMDA5LTA0LTMwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYzogRGVjbGFyZSBib29sIGFyZ3VtZW50cyBhcyBpbnQgaW5zdGVhZCB0byBwbGVhc2UgQUlYIFhMQy4KCSogc2VkL2V4ZWN1dGUuYzogRGVjbGFyZSBib29sIGFyZ3VtZW50cyBhcyBpbnQgaW5zdGVhZCB0byBwbGVhc2UgQUlYIFhMQy4KCSogc2VkL3V0aWxzLmM6IERlY2xhcmUgYm9vbCBhcmd1bWVudHMgYXMgaW50IGluc3RlYWQgdG8gcGxlYXNlIEFJWCBYTEMuCgkqIHNlZC91dGlscy5oOiBEZWNsYXJlIGJvb2wgYXJndW1lbnRzIGFzIGludCBpbnN0ZWFkIHRvIHBsZWFzZSBBSVggWExDLgoKMjAwOS0wNC0yNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIG51bWJlci4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKMjAwOS0wNC0yNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogRG8gbm90IGNyZWF0ZSBob21vbnltb3VzIGxpbmtzIGZyb20gYnVpbGRkaXIgdG8gc3JjZGlyLgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IENyZWF0ZSByZWFkaW4uaW4yIGhlcmUuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogRG8gbm90IGRpc3RyaWJ1dGUgaXQuCgoyMDA5LTA0LTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgogCgkqIGF1dG9ib290LmNvbmY6IEFkZCByZW5hbWUuCgkqIGdudWxpYjogVXBkYXRlLgoKMjAwOS0wNC0yNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogWEZBSUwgVVRGLTggdGVzdHMgd2hlcmUgYXBwcm9wcmlhdGUuCgoyMDA5LTA0LTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBIYW5kbGUgQ1JMRiBlbmRpbmdzIGZvciBtaW5ndy4KCjIwMDktMDQtMjcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IExpbmsgcmVhZGluLmluMiBpbnRvIGJ1aWxkZGlyLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGRvYy9NYWtlZmlsZS5hbTogRG8gbm90IGRpc3RyaWJ1dGUgc2VkLmh0bWwuICBEbyBub3QgdXBkYXRlCglzZWQudGV4aSBpZiB0aGUgb3V0cHV0IGRvZXMgbm90IGNoYW5nZS4KCSogc2VkL01ha2VmaWxlLmFtOiBPcmRlciBsaWJyYXJpZXMgYWNjb3JkaW5nIHRvIHRoZWlyIGRlcGVuZGVuY2llcy4KCSogc2VkL2NvbXBpbGUuYyAoZ2V0X29wZW5maWxlKTogRGVjbGFyZSBGQUlMIGFzIGludC4KCSogc2VkL3NlZC5jOiBBdm9pZCBwcmludGYgKCIiKSBpZiBSRUdfUEVSTCBpcyBub3QgZGVmaW5lZC4KCSogdGVzdHN1aXRlL2V2YWwuaW4yOiBEbyBub3QgaW5jbHVkZSBpbiB0aGUgcmVwb3NpdG9yeS4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBDbGVhbiBhbHdheXMgZXZhbC5pbjIgYW5kIG5ldmVyIHJlYWRpbi5pbjIuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogUHJvdmlkZSBhIGRlZmF1bHQgZW1wdHkgZGVmaW5pdGlvbiBvZiBUSU1FCglhbmQgcmVtb3ZlIHJ1bGVzIGZvciByZWFkaW4uaW4yLgoKMjAwOS0wMy0zMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGJvb3RzdHJhcC5zaC5pbjogQWRkIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkLgoJKiBib290c3RyYXAuc2g6IFJlZ2VuZXJhdGUuCgkqIGJhc2ljZGVmcy5oOiBEbyBub3QgcHJvdmlkZSBib29sIGRlZmluaXRpb25zIGZvciBCT09UU1RSQVAgYXQgYWxsLgoKMjAwOS0wMy0zMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuYyAoY29udGFjdCk6IE5ldy4KCSh1c2FnZSk6IEZyb20gaGVyZS4KCShtYWluKTogVXNlIGl0IGZvciBgc2VkIC0tdmVyc2lvbicgdG9vLgoKICAgICAgICAqIGNvbmZpZ3VyZS5hYzogUG9pbnQgdG8gR05VIHByb2plY3QgbWFpbGluZyBsaXN0cy4KICAgICAgICAqIHNlZC9zZWQuYyAoY29udGFjdCk6IFVzZSBQQUNLQUdFX0JVR1JFUE9SVC4KICAgICAgICAqIHRlc3RzdWl0ZS92ZXJzaW9uLmdpbjogTGlrZXdpc2UuCiAgICAgICAgKiB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiBSZWdlbmVyYXRlLgogICAgICAgICogZG9jL3NlZC4xOiBSZWdlbmVyYXRlLgoKICAgICAgICAqIGJvb3RzdHJhcC5zaC5pbiAoUEFDS0FHRV9CVUdSRVBPUlQpOiBOZXcuCiAgICAgICAgKiBib290c3RyYXAuc2g6IFJlZ2VuZXJhdGUuCgoyMDA5LTAzLTMxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBEaXN0cmlidXRlIHV0ZjgtMyBhbmQgdXRmOC00IHRlc3QgZmlsZXMuCgoyMDA5LTAyLTE3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBSZXdyaXRlIHJ1bGUgZm9yIHV0ZjgtWzEyMzRdLgoJUmVwb3J0ZWQgYnkgUmFsZiBXaWxkZW5odWVzLgoKMjAwOS0wMi0xNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuYyAodXNhZ2UpOiBQcmludCBob21lcGFnZSBVUkwuCgkqIHRlc3RzdWl0ZS92ZXJzaW9uLmdpbjogVXBkYXRlLgoKMjAwOS0wMS0yOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuYyAodXNhZ2UpOiBPbmx5IHByaW50IHRoZSBidWcgcmVwb3J0IGFkZHJlc3MgZm9yIGBzZWQgLS1oZWxwJy4KCShtYWluKTogUHJpbnQgaXQgZm9yIGBzZWQgLS12ZXJzaW9uJyB0b28uCgkqIHRlc3RzdWl0ZS92ZXJzaW9uLmdpbjogQWRhcHQuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogUmVmaW5lIGhlbHAgbWVzc2FnZSB0ZXN0LgoKMjAwOS0wMS0yMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCSAgICBIaWRlbyBBT0tJIDxoaWRlby5hb2tpLnRrQGhpdGFjaGkuY29tPgoKCSogc2VkL2NvbXBpbGUuYyAobWF0Y2hfc2xhc2gpOiBGaXggTUJDUyBiZWhhdmlvci4KCSogc2VkL3NlZC5oIChNQlNJTklUKTogTmV3LgoKMjAwOS0wMS0yMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGF1dG9ib290LmNvbmYsIGJvb3RzdHJhcC5zaC5pbjogUmVtb3ZlIG1lbWNociwgbWVtY21wLCBtZW1tb3ZlCgljb21wYXRpYmlsaXR5IGNvZGUuCgkqIGdudWxpYjogVXBkYXRlLgoKMjAwOS0wMS0wOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzL1NQRU5DRVIudGVzdHM6IEFkZCB0ZXN0Y2FzZXMgZm9yIGdsaWJjIGJ1Z3ppbGxhIDY5Ny4KCSogZ251bGliOiBVcGRhdGUuCgoyMDA5LTAxLTA1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKICAgICAgICAqIGV4ZWN1dGUuYyAocmVhZF9wYXR0ZXJuX3NwYWNlKTogUmVzZXQgaG9sZCBzcGFjZSBhdCBlbmQtb2YtZmlsZQoJaWYgaW5wdXQtPnJlc2V0X2F0X25leHRfZmlsZS4KCjIwMDgtMTItMzEgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CgoJTGV0IC0tcG9zaXggdHVybiBvZmYgbW9yZSBHTlUgZXh0ZW5zaW9ucy4KCSogc2VkL2NvbXBpbGUuYyAobWFya19zdWJzdF9vcHRzKTogVHVybiBvZmYgc3Vic3Qgb3B0aW9ucyBpLCBJLAoJcywgUywgeCwgWCwgbSwgYW5kIE0gaW4gLS1wb3NpeCBtb2RlLgoJKGNvbXBpbGVfYWRkcmVzcyk6IERpc2FsbG93IGFkZHJlc3MgbW9kaWZpZXJzLCBgRklSU1R+U1RFUCcsCglgQUREUjEsK04nLCBhbmQgYEFERFIxLH5OJyBpbiAtLXBvc2l4IG1vZGUuCgkoY29tcGlsZV9wcm9ncmFtKTogSW4gLS1wb3NpeCBtb2RlLCBkbyBub3QgYWNjZXB0IGUgb3IgeiBjb21tYW5kczsKCWRvIG5vdCBhY2NlcHQgdGV4dCBiZXR3ZWVuIGFuIGEsIGMsIG9yIGkgY29tbWFuZCBhbmQgdGhlIGZvbGxvd2luZwoJYmFja3NsYXNoOyBkbyBub3QgYWNjZXB0IGFuIGFyZ3VtZW50IHRvIHRoZSBsIGNvbW1hbmQuCgoyMDA4LTEyLTIyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYXV0b2Jvb3QuY29uZjogUmVxdWVzdCBtb2R1bGVzIGVtdWxhdGluZyBtYiBmdW5jdGlvbnMuCgkqIGNvbmZpZ3VyZS5hYzogRG8gbm90IGxvb2sgZm9yIG1iIGZ1bmN0aW9ucyBoZXJlLgoKMjAwOC0xMC0wMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCSAgICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgoKCSogYXV0b2Jvb3QuY29uZjogQWRkIGxvY2FsY2hhcnNldC4KCSogTWFrZWZpbGUuYW06IFJlbW92ZSBpbnRsIHN1YmRpci4gIFJlcXVpcmUgQXV0b21ha2UgMS4xMC4KCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdXNlbGVzcyBtYWNyb3MsIHN3aXRjaCB0byBleHRlcm5hbCBnZXR0ZXh0LgoJKiBsaWIvTWFrZWZpbGUuYW06IFJlbW92ZSBpbnRsIHN1YmRpciBmcm9tIENQUEZMQUdTLgoJKiBzZWQvTWFrZWZpbGUuYW06IFJlbW92ZSBpbnRsIHN1YmRpciBmcm9tIENQUEZMQUdTLgoKMjAwOC0xMC0wMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGF1dG9ib290OiBTeW5jIHdpdGggZ251bGliJ3MgYnVpbGQtYXV4L2Jvb3RzdHJhcC4KCjIwMDgtMDktMjkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdDogU3luYyB3aXRoIGdudWxpYidzIGJ1aWxkLWF1eC9ib290c3RyYXAuCgoyMDA4LTA5LTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBBZGQgdGhlIHV0ZjgtezEsMiwzLDR9IHRlc3RzLgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IEFkZCB0aGUgdXRmOC17MSwyLDMsNH0gdGVzdHMuCgkqIHRlc3RzdWl0ZS9ydW50ZXN0OiBTdXBwb3J0IHNraXBwaW5nIHRlc3RzLgoJKiB0ZXN0c3VpdGUvdXRmOC0xLmdvb2Q6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtMS5pbnA6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtMS5zZWQ6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtMi5nb29kOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTIuaW5wOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTIuc2VkOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTMuZ29vZDogTmV3LgoJKiB0ZXN0c3VpdGUvdXRmOC0zLmlucDogTmV3LgoJKiB0ZXN0c3VpdGUvdXRmOC0zLnNlZDogTmV3LgoJKiB0ZXN0c3VpdGUvdXRmOC00Lmdvb2Q6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtNC5pbnA6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtNC5zZWQ6IE5ldy4KCjIwMDgtMDktMjkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBCVUdTOiBEb2N1bWVudCBzLy4qLi8vIGJlaGF2aW9yIHdpdGggaW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2VzLgoJKiBORVdTOiBEb2N1bWVudCBgeicgZXh0ZW5zaW9uLgoJKiBkb2Mvc2VkLWluLnRleGk6IERvY3VtZW50IGJvdGggdGhpbmdzLgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBSZWNvZ25pemUgYHonLgoJKiBzZWQvZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0pOiBFeGVjdXRlIGB6Jy4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBBZGQgYmFkZW5jIHRlc3QuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogQWRkIGJhZGVuYyB0ZXN0LgoJKiB0ZXN0c3VpdGUvYmFkZW5jLmdvb2Q6IE5ldy4KCSogdGVzdHN1aXRlL2JhZGVuYy5pbnA6IE5ldy4KCSogdGVzdHN1aXRlL2JhZGVuYy5zZWQ6IE5ldy4KCjIwMDgtMDktMjggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBiYXNpY2RlZnMuaDogUmVwbGFjZSBhbGxvY2EgY3J1ZnQgd2l0aCBhbGxvY2EuaC4KCSogYm9vdHN0cmFwLnNoLmluOiBVcGRhdGUgZm9yIG5ldyBnbnVsaWIuCgkqIGJvb3RzdHJhcC5zaDogVXBkYXRlIGZvciBuZXcgZ251bGliLgoJKiBjb25maWd1cmUuYWM6IE1vdmUgZ251bGliIG1hY3JvcyBlYXJsaWVyLgoJKiBzZWQvZXhlY3V0ZS5jOiBEbyBub3QgaW5jbHVkZSBhY2wuaCB3aGVuIGJvb3RzdHJhcHBpbmcuCgoyMDA4LTA4LTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAoY2xvc2Vkb3duKTogQ2xvc2UgdGhlIGlucHV0IGZpbGUhCgoyMDA4LTA4LTIwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBBZGQgZ2xfRElTQUJMRV9USFJFQURTLgoKMjAwOC0wOC0yMCAgUmFsZiBXaWxkZW5odWVzICA8cmFsZi53aWxkZW5odWVzQGdteC5kZQoKCSogZG9jL3NlZC1pbi50ZXhpOiBEcm9wIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVyZSBhcHByb3ByaWF0ZSwKCWRvIG5vdCB1c2UgVEFCcy4KCSogZG9jL3NlZC50ZXhpOiBSZWduZXJhdGUuCgoyMDA4LTA4LTE5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYzogRG8gbm90IGluY2x1ZGUgc3RydmVyc2NtcC5jLgoKMjAwOC0wNy0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGRvYy9zZWQtaW4udGV4aTogUmVtb3ZlIG5vcnRocGFyay5lZHUgYWRkcmVzcyBmb3Igc2VkIEZBUS4KCSogZG9jL3NlZC50ZXhpOiBSZWdlbmVyYXRlLgoKMjAwOC0wNy0xMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCiAgICAgICAgKiBkb2Mvc2VkLWluLnRleGk6IE1ha2UgdGhlIGRlc2NyaXB0aW9uIG9mIF4gYW5kICQgbW9yZSBwcmVjaXNlLgogICAgICAgICogZG9jL3NlZC50ZXhpOiBSZWdlbmVyYXRlLgoKMjAwOC0wNi0wNCAgVmxhZGltaXIgTWFyZWsgIDx2bGFkaW1pci5tYXJla0BzdW4uY29tPgoKCSogYmFzaWNkZWZzLmg6IERvbid0IGhhcmRjb2RlIHVzYWdlIG9mIHByb3RvdHlwZXMgb24gU3VuU3R1ZGlvLgoKMjAwOC0wNS0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGF1dG9ib290LmNvbmY6IFVwZGF0ZSBmb3IgbmV3ZXIgZ251bGliLgoKMjAwOC0wNS0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGJvb3RzdHJhcC5zaC5pbjogRGVmaW5lIGJvb2wsIHRydWUsIGZhbHNlLiAgUmVwb3J0ZWQgYnkKCUphc29uIFN0b3Zlci4gIEFkanVzdCBmb3IgZ251bGliIGNoYW5nZXMuCgkqIGJvb3RzdHJhcC5zaDogUmVnZW5lcmF0ZS4KCjIwMDgtMDQtMjQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogc2VkL2NvbXBpbGUuYyAobWF0Y2hfc2xhc2gpOiBUcmVhdCAncyZmb28mXCYmJyBjb21wYXRpYmx5IHdpdGgKCXRyYWRpdGlvbmFsICdzZWQnLgoJKiB0ZXN0c3VpdGUvYnNkLnNoOiBBZGQgdGVzdCBjYXNlIGZvciB0aGlzLgoJKiB0ZXN0c3VpdGUvYnNkLmdvb2Q6IEFkZCB0ZXN0IGNhc2Ugb3V0cHV0LgoKMjAwOC0wNC0yNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKHNldHVwX3JlcGxhY2VtZW50KTogRml4IGJ1ZyB3aXRoIFwmIGluIFBPU0lYIG1vZGUuCgoyMDA4LTAxLTE2ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgoKCSogc2VkL2V4ZWN1dGUuYyAob3Blbl9uZXh0X2ZpbGUsIGdldF9iYWNrdXBfZmlsZV9uYW1lKTogQXZvaWQKCXdhcm5pbmdzIGZyb20gZ2NjLgoKMjAwOC0wMS0xNiAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KCgkqIHNlZC9jb21waWxlLmMgKHNuYXJmX2NoYXJfY2xhc3MpOiBSZXZlcnNlIG9yZGVyIG9mIGNvbmp1bmN0cwoJc28gdGhhdCAiZGVsaW0iIGlzIG5vdCB1c2VkIHVuaW5pdGlhbGl6ZWQuCgoyMDA4LTAxLTE2ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgoKCSogc2VkL3V0aWxzLmMgKHBhbmljKTogUmVtb3ZlIGRlY2xhcmF0aW9uIG9mIHVudXNlZCBsb2NhbCwgImZkIi4KCjIwMDgtMDEtMTYgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CgoJKiBzZWQvZXhlY3V0ZS5jIChvcGVuX25leHRfZmlsZSwgZ2V0X2JhY2t1cF9maWxlX25hbWUpOiBBdm9pZAoJd2FybmluZ3MgZnJvbSBnY2MuICBBdm9pZCBzaGFkb3dpbmcgZ2xvYmFsICJwaXBlIi4KCjIwMDgtMDEtMTYgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CgoJKiBhdXRvYm9vdC5jb25mIChnbnVsaWJfbW9kdWxlcyk6IEFkZCBzdGF0LW1hY3JvcyBhbmQgcGF0aG1heC4KCjIwMDctMTAtMjUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgkgICAgTWlrZSBGcnlzaW5nZXIgICA8dmFwaWVyQGdlbnRvby5vcmc+CgoJKiBkb2Mvc2VkLnggKHEsIFEpOiBEb2N1bWVudCBhcmd1bWVudC4KCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdGV4aTJodG1sIGNoZWNrcy4KCSogZG9jL01ha2VmaWxlLmFtOiBSZW1vdmUgcnVsZXMgZm9yIHNlZC5odG1sLCBhbHdheXMgZGlzdHJpYnV0ZSBpdC4KCjIwMDctMDgtMTQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jIChvcGVuX25leHRfZmlsZSk6IEZvbGxvdyBzeW1saW5rIGhlcmUuLi4KCShjbG9zZWRvd24pOiAuLi4gbm90IGhlcmUuCgoyMDA3LTA2LTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL21iY3MuYzogVXBncmFkZSB0byBHUEx2My4KCSogc2VkL3JlZ2V4cC5jOiBVcGdyYWRlIHRvIEdQTHYzLgoJKiBzZWQvc2VkLmM6IFVwZ3JhZGUgdG8gR1BMdjMuCgkqIHNlZC9zZWQuaDogVXBncmFkZSB0byBHUEx2My4KCSogc2VkL3V0aWxzLmM6IFVwZ3JhZGUgdG8gR1BMdjMuCgkqIHNlZC91dGlscy5oOiBVcGdyYWRlIHRvIEdQTHYzLgoJKiBzZWQvY29tcGlsZS5jOiBVcGdyYWRlIHRvIEdQTHYzLgoJKiBzZWQvZXhlY3V0ZS5jOiBVcGdyYWRlIHRvIEdQTHYzLgoJKiBzZWQvZm10LmM6IFVwZ3JhZGUgdG8gR1BMdjMuCgoyMDA3LTAzLTAxICBNYXNhdGFrZSBZQU1BVE8gIDxqZXRAZ3l2ZS5vcmc+ICAodGlueSBjaGFuZ2UpCgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBBY2NlcHQgMCwvUkVHRVhQLyBhZGRyZXNzCglzcGVjaWZpY2F0aW9uIG9ubHkgaWYgLS1wb3NpeCBpcyBub3Qgc3BlY2lmaWVkLgoKMjAwNy0wMi0wNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9idWctcmVnZXgyNy5jLCB0ZXN0c3VpdGUvYnVnLXJlZ2V4MjguYzogTmV3LCBmcm9tCglnbGliYyAod3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrKS4KCjIwMDctMDEtMjYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChjaGVja19maW5hbF9wcm9ncmFtKTogRG9uJ3Qgc2V0IHRleHQgaWYgdGhlCglwZW5kaW5nX3RleHQgaXMgaW5pdGlhbGl6ZWQgYnV0IGVtcHR5LgoJKiBzZWQvZXhlY3V0ZS5jIChvdXRwdXRfbGluZSk6IERvbid0IHByaW50IHRleHQgaWYgaXQgaXMgTlVMTC4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBpbnNlcnQuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0cyAoaW5zZXJ0KTogTmV3LgoJKiB0ZXN0c3VpdGUvaW5zZXJ0Lmdvb2QsIHRlc3RzdWl0ZS9pbnNlcnQuc2VkLCB0ZXN0c3VpdGUvaW5zZXJ0LmlucDogTmV3Cgl0ZXN0Y2FzZSBmcm9tIEpvbmFzIEtvZWxrZXIuCgoyMDA2LTEyLTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYzogRml4IHdhcm5pbmdzLgoJKiBzZWQvZXhlY3V0ZS5jOiBGaXggd2FybmluZ3MuCgoyMDA2LTEyLTIyICBCcnVubyBIYWlibGUgIDxicnVub0BjbGlzcC5vcmc+CgoJKiBzZWQvdXRpbHMuYzogSW5jbHVkZSBwYXRobWF4LgoJKiBzZWQvbWJjcy5jOiBVc2UgbG9jYWxfY2hhcnNldC4KCSogc2VkL2V4ZWN1dGUuYzogQ29weSB3aXRoIHBhZGRpbmcgYWZ0ZXIgdGhlIG1ic3RhdGVfdCBtZW1iZXIuCgkKMjAwNi0xMi0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9tYmNzLmM6IEluY2x1ZGUgc3RyaW5nLmggKHJlcG9ydGVkIGJ5IEhlbm5pbmcgTmllbHNlbiBMdW5kKS4KCSogc2VkL2ZtdC5jOiBMaWtld2lzZS4KCSogc2VkL3JlZ2V4cC5jOiBMaWtld2lzZS4KCjIwMDYtMTItMTggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jIChjbG9zZWRvd24pOiBSZW1vdmUgZGVhZCBjb2RlLgoKMjAwNi0xMi0xNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC91dGlscy5jOiBJbmNsdWRlIGxpbWl0cy5oLgoKMjAwNi0xMi0xNiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGRvYy9zZWQtaW4udGV4aTogRG9jdW1lbnQgLS1mb2xsb3ctc3ltbGlua3MuCgoyMDA2LTEyLTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3JlZ2V4cC5jOiBEaXNhYmxlIGFsbCBleHRlbnNpb25zIG9uIC0tcG9zaXguCgoyMDA2LTA5LTI0ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYzogU3VwcG9ydCBBQ0xzLgoJKiBsaWIvdXRpbHMuYzogTW92ZS4uLgoJKiBzZWQvdXRpbHMuYzogLi4uIGhlcmUsIGFuZCByZW1vdmUgeG1hbGxvYy4KCjIwMDYtMDgtMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvcmVnZXhwLmM6IEFjY2VwdCBOVUwgYnl0ZXMgZm9yIGAuJy4gIEFjY2VwdCAnYVwoYicgaW4KCVBPU0lYTFlfQ09SUkVDVC9QT1NJWExZX0JBU0lDIHBvc2l4aWNpdHkuCgoyMDA2LTA4LTAzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCVJldmVydCB0aGlzIHBhcnQgb2YgdGhlIHByZXZpb3VzIGNoYW5nZToKCgkyMDA2LTA4LTAzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoZ2V0X29wZW5maWxlKTogQ2hhbmdlIHNlY29uZCBhcmd1bWVudCB0byBjaGFyCglhbmQgdHVybiBpdCBpbnRvIGEgc3RyaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24uICBBZGp1c3QgY2FsbGVycy4KCjIwMDYtMDgtMDMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgkgICAgQ29yaW5uYSBWaW5zY2hlbiAgPHZpbnNjaGVuQHJlZGhhdC5jb20+CgoJKiBsaWIvZ2V0bGluZS5jIChnZXRsaW5lKTogUmVtb3ZlIFdpbmRvd3Mgc3BlY2lhbCBjYXNpbmcuCgkqIGxpYi91dGlscy5jIChyZWdpc3Rlcl9vcGVuX2ZpbGUsIGNrX2Zkb3Blbik6IE5ldy4KCShja19mb3BlbiwgY2tfbWtzdGVtcCk6IFVzZSByZWdpc3Rlcl9vcGVuX2ZpbGUuCgkqIGxpYi91dGlscy5oIChja19mZG9wZW4pOiBOZXcuCgkqIHNlZC9leGVjdXRlLmMgKG9wZW5fbmV4dF9maWxlKTogUmVvcGVuIHN0ZGluLgoJKiBzZWQvc2VkLmggKHJlYWRfbW9kZSk6IE5ldy4KCSogc2VkL3NlZC5jIChyZWFkX21vZGUpOiBOZXcuCgkobWFpbik6IFNldCBpdCBvbiAtLWJpbmFyeS4KCSh1c2FnZSk6IERvY3VtZW50IC0tYmluYXJ5LgoJKiBzZWQvY29tcGlsZS5jIChnZXRfb3BlbmZpbGUpOiBDaGFuZ2Ugc2Vjb25kIGFyZ3VtZW50IHRvIGNoYXIKCWFuZCB0dXJuIGl0IGludG8gYSBzdHJpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gIEFkanVzdCBjYWxsZXJzLgoJKiBzZWQvZXhlY3V0ZS5jIChkdW1wX2FwcGVuZF9xdWV1ZSwgb3Blbl9uZXh0X2ZpbGUpOiBVc2UgaXQKCWFzIG1vZGUgZm9yIGNrX2ZvcGVuLgoKMjAwNi0wOC0wMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKHN0cl9hcHBlbmQpOiBVc2UgaXNfdXRmOCB0byBza2lwIHVzZWxlc3Mgd29yay4KCSogc2VkL21iY3MuYyAoaW5pdGlhbGl6ZV9tYmNzKTogTG9vayBmb3IgYSBVVEYtOCBsb2NhbGUuCgkoaXNfdXRmOCk6IE5ldy4KCSogc2VkL3NlZC5oIChpc191dGY4KTogTmV3LgoKMjAwNi0wNy0xMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGJvb3RzdHJhcC5zaC5pbjogQWRkIGEgZmV3IGF1dG9jb25meSB0ZXN0cy4KCSogTWFrZWZpbGUuYW06IFVwZGF0ZSBkaXN0cmlidXRlZCBib290c3RyYXAuc2guCgoyMDA2LTA1LTE1ICBIYW5zLUJlcm5oYXJkIEJyb2VrZXIgPGJyb2VrZXJAcGh5c2lrLnJ3dGgtYWFjaGVuLmRlPgoKCSogc2VkL2Jhc2ljZGVmcy5oIChPQl9NQUxMT0MpOiBUdXJuIFZDQVNUIGludG8gdm9pZCAqIGNhc3QuCgoyMDA2LTAyLTAzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKSA8Y2FzZSAneSc+OiBQYXNzIGZhbHNlIHRvIG1hdGNoX3NsYXNoLgoKMjAwNS0wOS0wNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGxpYi9yZWdjb21wLmM6IFVwZGF0ZSBmcm9tIHVwc3RyZWFtLgoJKiBsaWIvcmVnZXguYzogVXBkYXRlIGZyb20gdXBzdHJlYW0uCgkqIGxpYi9yZWdleF8uaDogVXBkYXRlIGZyb20gdXBzdHJlYW0uCgkqIGxpYi9yZWdleF9pbnRlcm5hbC5jOiBVcGRhdGUgZnJvbSB1cHN0cmVhbS4KCSogbGliL3JlZ2V4X2ludGVybmFsLmg6IFVwZGF0ZSBmcm9tIHVwc3RyZWFtLgoJKiBsaWIvcmVnZXhlYy5jOiBVcGRhdGUgZnJvbSB1cHN0cmVhbS4KCjIwMDUtMDgtMzAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jIChyZXNldF9hZGRyZXNzZXMpOiBOZXZlciBhY3RpdmF0ZSBBRERSX0lTX05VTV9NT0QKCWFkZHJlc3Nlcy4KCSogdGVzdHN1aXRlL21vZHVsby5nb29kLCB0ZXN0c3VpdGUvbW9kdWxvLmlucCwgdGVzdHN1aXRlL21vZHVsby5zZWQ6CglOZXcuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogQWRkIG5ldyB0ZXN0Y2FzZS4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBBZGQgbmV3IHRlc3RjYXNlLgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCgoyMDA1LTA1LTE4ICBNYWNpZWogVy4gUm96eWNraSAgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgoKCSogY29uZmlndXJlLmFjOiBVc2UgYSBjYWNoZSB2YXJpYWJsZSBmb3IgdGhlIGxpYmNQIHRlc3QuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCjIwMDUtMDUtMTYgIEVlcm8gSGFra2luZW4gIDxlZXJvMTdAYmlnZm9vdC5jb20+CgoJKiBzZWQvY29tcGlsZS5jIChzbmFyZl9jaGFyX2NsYXNzKTogRml4IGhhbmRsaW5nIG9mIAoJW15deHl6XS4KCjIwMDUtMDQtMDQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jIChwcm9jZXNzX2ZpbGVzKTogRG8gbm90IGFkZCBhIGRlZmF1bHQKCWNvbW1hbmQtbGluZSBpbiBpbi1wbGFjZSBlZGl0aW5nIG1vZGUuCgoyMDA1LTAyLTEwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBBZGQgbmV3IHRlc3RjYXNlLgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IEFkZCBuZXcgdGVzdGNhc2UuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KCSogdGVzdHN1aXRlL2FwcHF1aXQuZ29vZCwgdGVzdHN1aXRlL2FwcHF1aXQuaW5wLAoJdGVzdHN1aXRlL2FwcHF1aXQuc2VkOiBOZXcgdGVzdGNhc2UuCgkqIHRlc3RzdWl0ZS9yZWFkaW4uc2VkOiBRdWl0IGFmdGVyIHRoZSBsYXN0IHIgY29tbWFuZC4KCSogdGVzdHN1aXRlL3JlYWRpbi5nb29kOiBBZGp1c3QuCgkqIHNlZC9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IER1bXAgdGhlIHJlc3VsdHMgb2YgdGhlCglhL3IvUiBjb21tYW5kcyBqdXN0IGJlZm9yZSBxdWl0dGluZy4KCjIwMDUtMDItMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvcmVnZXhwLmM6IEZpeCBvZmYtYnktb25lIGVycm9yIGluIHRoZSAiaW52YWxpZCByZWZlcmVuY2UKCXRvIHN1YmV4cHJlc3Npb24iIG1lc3NhZ2UuICBEZWJpYW4gYnVnIDI5NDMzOS4KCjIwMDUtMDItMDggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvb2JzdGFjay5oOiBpbmNsdWRlIGNvbmZpZy5oLgoKMjAwNS0wMi0wMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogRG9uJ3QgZW5hYmxlIE1BS0VJTkZPX0hUTUwgYW5kIFRFWEkySFRNTF9IVE1MCglydWxlcyB1bmxlc3MgQlVJTERfSFRNTC4KCjIwMDUtMDEtMjUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvcmVnZXhwLmM6IEZpeCBidWlsZGluZyBvbiBHQ0MgMi45NSBhbmQgZWFybGllci4KCjIwMDQtMTItMjYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJRG8gbm90IHVzZSBsZWZ0bW9zdC1sb25nZXN0IG1hdGNoaW5nIGZvciBhZGRyZXNzZXMuCgoJKiBORVdTOiBBZGQgYSBub3RlIGFib3V0IHRoaXMuCgkqIHRlc3RzdWl0ZS9yZWNhbGwyLmdvb2QsIHRlc3RzdWl0ZS9yZWNhbGwyLmlucCwKCXRlc3RzdWl0ZS9yZWNhbGwyLnNlZDogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSwgdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBBZGQgdGhlCglyZWNhbGwyIHRlc3QuCgkqIHNlZC9zZWQuaCAoc3RydWN0IHJlZ2V4KTogTmV3LgoJKHN0cnVjdCBhZGRyLCBzdHJ1Y3Qgc3Vic3QsIGNvbXBpbGVfcmVnZXgsIG1hdGNoX3JlZ2V4LAoJcmVsZWFzZV9yZWdleCk6IFVzZSBpdCBpbnN0ZWFkIG9mIHJlZ2V4X3QuCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IFVwZGF0ZSBmb3IgbmV3IG1lYW5pbmcgb2YKCXRoZSB0aGlyZCBwYXJhbWV0ZXIgb2YgY29tcGlsZV9yZWdleC4KCSogc2VkL2V4ZWN1dGUuYyAoZG9fc3Vic3QpOiBQYXNzIGxlc3MgY29uc2VydmF0aXZlIHZhbHVlIHRvCgl0aGUgcmVnc2l6ZSBwYXJhbWV0ZXIgb2YgbWF0Y2hfcmVnZXguCgkqIHNlZC9yZWdleHAuYyAoY29tcGlsZV9yZWdleF8xKTogTmV3LCBleHRyYWN0ZWQgb3V0IG9mCgljb21waWxlX3JlZ2V4LiAgVGhlIHRoaXJkIHBhcmFtZXRlciwgbmVlZGVkX3N1Yiwgbm93IGluY2x1ZGVzCglcMCAoc28gMTAgbWVhbnMgdGhhdCBcMCAuLiBcOSBhcmUgbmVlZGVkKS4gIFBhc3MgUkVfTk9fU1VCCglpZiBuZWVkZWRfc3ViIGlzIHplcm8uCgkoY29tcGlsZV9yZWdleCk6IEFjY2VwdCBhIHN0cnVjdCByZWdleCBpbnN0ZWFkIG9mIGEgcmVnZXhfdC4KCVNhdmUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbidzIHRleHQuCgkobWF0Y2hfcmVnZXgpOiBBY2NlcHQgYSBzdHJ1Y3QgcmVnZXggaW5zdGVhZCBvZiBhIHJlZ2V4X3QuCglSZWNvbXBpbGUgdGhlIHBhdHRlcm4gaWYgaXQgd2FzIGNvbXBpbGVkIHdpdGggUkVfTk9fU1VCLgoJKHJlbGVhc2VfcmVnZXgpOiBBY2NlcHQgYSBzdHJ1Y3QgcmVnZXggaW5zdGVhZCBvZiBhIHJlZ2V4X3QuCgoJKiBkb2MvTWFrZWZpbGUuYW06IEdlbmVyYXRlIHNlZC50ZXhpIGNvcnJlY3RseSB3aGVuCglidWlsZGluZyBvdXRzaWRlIHNyY2Rpci4KCjIwMDQtMTItMjYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBCVUdTOiBBZGQgc2VjdGlvbiBhYm91dCBbYS16XSBtYXRjaGluZyB1cHBlcmNhc2UgY2hhcmFjdGVycywKCWFuZCBvdGhlciBsb2NhbGUgaXNzdWVzLgoJKiBkb2Mvc2VkLWluLnRleGkgWyFQRVJMXTogTGlrZXdpc2UuCgoyMDA0LTExLTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAoc3RyX2FwcGVuZF9tb2RpZmllZCk6IENvcHkgdGhlIGZpcnN0IGNoYXJhY3RlcgoJd2hlbiB1c2luZyBcbCBvciBcdSBpbiBhIG11bHRpLWJ5dGUgY29uZmlndXJhdGlvbi4gIFVzZQoJV0NSVE9NQiBpbnN0ZWFkIG9mIHdjcnRvbWIuCgkqIHNlZC9zZWQuaCAoV0NSVE9NQik6IE5ldy4KCjIwMDQtMTEtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiB0c3QtcnhzcGVjZXIuYzogRG8gbm90IG1peCBpbnN0cnVjdGlvbnMgYW5kCglkZWNsYXJhdGlvbnMuCgkqIGJhc2ljZGVmcy5oOiBJbmNsdWRlIGxvY2FsZS5oIGJlZm9yZSAjZGVmaW5pbmcKCWdldHRleHQsIHRvIGF2b2lkIGJyZWFrYWdlIHVuZGVyIFNvbGFyaXMuCgkqIHNlZC9zZWQuYzogZG8gbm90IGluY2x1ZGUgbG9jYWxlLmguCgoyMDA0LTExLTAzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYnVnLXJlZ2V4MTEuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogYnVnLXJlZ2V4MTIuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogYnVnLXJlZ2V4MTMuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogYnVnLXJlZ2V4MTQuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogYnVnLXJlZ2V4MjEuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogYnVnLXJlZ2V4OS5jOiBJbXByb3ZlIHBvcnRhYmlsaXR5LgoJKiB0c3QtYm9vc3QuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogdHN0LXBjcmUuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogdHN0LXJlZ2V4LmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIHRzdC1yeHNwZW5jZXIuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCjIwMDQtMTAtMDggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvdXRpbHMuYyAodXRpbHNfaWRfcyk6IFJlbmFtZWQgdG8gb3Blbl9maWxlcy4KCShzdHJ1Y3QgaWQpOiBSZW5hbWVkIHRvIHN0cnVjdCBvcGVuX2ZpbGUuCgoyMDA0LTEwLTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0cyAoYnVnLXJlZ2V4KiwgcnVuLXRlc3RzLAoJcnVuLXB0ZXN0cyk6IFVzZSAkKFNFRCkuCgkodmVyc2lvbik6IExpa2V3aXNlOyBwcmVwZW5kICQoU0VEKSBpbnZvY2F0aW9uIHdpdGggJChTRURFTlYpLgoKMjAwNC0wOC0xNiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjEuMiByZWxlYXNlZC4KCjIwMDQtMDgtMDYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChiYWRfY29tbWFuZCk6IEZpeCBvZmYtYnktb25lIGVycm9yLgoJKHNuYXJmX2NoYXJfY2xhc3MpOiBGaXggcHJvYmxlbSB3aXRoIFsuLi4uLltdIChpLmUuCglsYXN0IGNoYXIgaW4gY2xhc3MgaXMgYSBicmFja2V0LgoKMjAwNC0wNi0zMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjEuMSByZWxlYXNlZC4KCjIwMDQtMDYtMjkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChtYXJrX3N1YnN0X29wdHMpOiBSZXR1cm4gaW50LgoJKiBzZWQvZXhlY3V0ZS5jIChvcGVuX25leHRfZmlsZSk6IEZpeCB1bmluaXRpYWxpemVkCgl2YXJpYWJsZS4KCjIwMDQtMDYtMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKioqIFZlcnNpb24gNC4xIHJlbGVhc2VkLgoKMjAwNC0wMy0yNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGxpYi9vYnN0YWNrLmg6IEdldCBjdXJyZW50IHZlcnNpb24uCgoyMDA0LTAzLTEzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCUV4aXQgYXMgc29vbiBhcyBwb3NzaWJsZSBvbiBhbiBJL08gZXJyb3IsIGFuZCB3aXRoCglhIGJldHRlciBlcnJvciBtZXNzYWdlLgoKCSogbGliL3V0aWxzLmMgKGNrX21rc3RlbXAsIGNrX3JlbmFtZSwgY2tfZ2V0bGluZSk6IE5ldwoJZnVuY3Rpb25zLiAgU2F2ZSB0ZW1wb3JhcnkgZmlsZXMgaW50byB1dGlsc19pZF9zLgoJKHN0cnVjdCBpZCk6IEFkZCBhIGZpZWxkIG5hbWVkIHRlbXAuCgkoY2tfZm9wZW4pOiBJbml0IHRoZSBuZXcgdGVtcCBmaWVsZCBvZiBzdHJ1Y3QgaWQuCgkocGFuaWMpOiBVbmxpbmsgdGVtcG9yYXJ5IGZpbGVzIGJlZm9yZSBleGl0aW5nLgoJKiBzZWQvZXhlY3V0ZS5jIChyZWFkX2ZpbGVfbGluZSk6IFVzZSBja19nZXRsaW5lLgoJKGNsb3NlZG93bik6IFVzZSBja19yZW5hbWUuCgkob3Blbl9uZXh0X2ZpbGUpOiBVc2UgY2tfbWtzdGVtcC4KCjIwMDQtMDEtMjAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvc2VkLmggKGVudW0gYWRkcl9zdGF0ZSk6IE5ldyBkZWZpbml0aW9uLgoJKGVudW0gYWRkcl90eXBlKTogUmVtb3ZlIEFERFJfSVNfTlVNMi4KCShzdHJ1Y3Qgc2VkX2NtZCk6IFJlcGxhY2UgYTFfbWF0Y2hlZCB3aXRoIHJhbmdlX3N0YXRlLgoJKiBzZWQvY29tcGlsZS5jIChuZXh0X2NtZF9lbnRyeSk6IFVzZSByYW5nZV9zdGF0ZS4KCShjb21waWxlX3Byb2dyYW0pOiBEZWF0aCB0byBBRERSX0lTX05VTTIuICBDb21waWxlCglOLE1wIGFzIE5wIGlmIE4+PU0uCgkqIHNlZC9leGVjdXRlLmMgKG1hdGNoX2FkZHJlc3NfcCk6IFJld3JpdHRlbi4gIEhhbmRsZQoJQUREUl9JU19OVU0gaGVyZS4KCShtYXRjaF9hbl9hZGRyZXNzX3ApOiBTdWl0IHRvIG5ldyBtYXRjaF9hZGRyZXNzX3AuCgkoZXhlY3V0ZV9wcm9ncmFtKTogQWRqdXN0IHRvIHVzZSByYW5nZV9zdGF0ZSBpbiBgYycuCglIYW5kbGUgYWRkcl9iYW5nIGhlcmUuCgkocmVzZXRfYWRkcmVzc2VzKTogVXNlIHJhbmdlX3N0YXRlLgoKCShzdHJ1Y3QgaW5wdXQpOiBOZXcgZmllbGQgInJlc2V0X2F0X25leHRfZmlsZSIuCgkocmVhZF9wYXR0ZXJuX3NwYWNlKTogVXNlIGl0IGluc3RlYWQgb2YgInNlcGFyYXRlX2ZpbGVzIi4KCShwcm9jZXNzX2ZpbGVzKTogSW5pdGlhbGl6ZSBpdC4KCQoyMDA0LTAxLTE3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3NlZC5oOiBEbyBub3QgaW5jbHVkZSB3Y2hhci5oIGFuZCB3Y3R5cGUuaCwgYW5kIGRvCglub3QgaW5jbHVkZSB0aGUgYWxsb2NhIHN0dWZmLgoJKiBiYXNpY2RlZnMuaDogTW92ZSBhbGwgdGhhdCBoZXJlLgoKMjAwNC0wMS0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9yZWdleHAuYyBbUkVHX1BFUkxdOiBVc2UgUkVHX1NUQVJURU5EIGluc3RlYWQgb2YgcmVnZXhlYzIuCgoyMDA0LTAxLTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCSAgICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3NlZC5oIChwb3NpeGljaXR5KTogTmV3IHZhcmlhYmxlLCByZXBsYWNlcyBQT1NJWExZX0NPUlJFQ1QuCgkqIHNlZC9zZWQuYyAobWFpbik6IFNldCBpdC4KCSogc2VkL2NvbXBpbGUuYzogVXNlIGl0IGluc3RlYWQgb2YgUE9TSVhMWV9DT1JSRUNULgoJKiBzZWQvZXhlY3V0ZS5jOiBVc2UgaXQgaW5zdGVhZCBvZiBQT1NJWExZX0NPUlJFQ1QuCgkqIGRvYy9zZWQtaW4udGV4aTogRG9jdW1lbnQgaXQgYW5kIC0tcG9zaXguCgoyMDA0LTAxLTA1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCSAgICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKICAgICAgICAqIE5FV1M6IEZpeCBbXG5dIHRvIG1hdGNoIGVpdGhlciBiYWNrc2xhc2ggb3IgbiBpbiBQT1NJWExZX0NPUlJFQ1QgbW9kZS4KICAgICAgICAqIGRvYy9zZWQtaW4udGV4aTogRG9jdW1lbnQgdGhpcy4gIEFsc28sIGRvY3VtZW50IHJlZ3VsYXIgZXhwcmVzc2lvbnMKICAgICAgICBhIGJpdCBiZXR0ZXIgb3ZlcmFsbCwgdXNpbmcgdGVybWlub2xvZ3kgdGhhdCdzIG1vcmUgc2ltaWxhciB0byBQT1NJWC4KCSogc2VkL3NlZC5oIChlbnVtIHRleHRfdHlwZXMpOiBOZXcgZGVmaW5pdGlvbi4KCSogc2VkL2NvbXBpbGUuYyAobm9ybWFsaXplX3RleHQpOiBSZXBsYWNlIGZpbmFsIHBhcmFtZXRlciB3aXRoIG9uZSBvZgoJdHlwZSBub3JtYWxpemVfdGV4dC4gIElmIFRFWFRfUkVHRVggYW5kIGluIFBPU0lYTFlfQ09SUkVDVCBtb2RlLAoJZ3JvayBjaGFyYWN0ZXIgY2xhc3NlcyB3aXRob3V0IHJlcGxhY2luZyBcbiBpbnNpZGUgdGhlbS4KCjIwMDQtMDEtMDMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgogICAgICAgICogc2VkL2V4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtKTogcHJpbnQgZmluYWwgbGluZQogICAgICAgIGFmdGVyIGV4ZWN1dGluZyBOLCBpZiBub3QgUE9TSVhMWV9DT1JSRUNULgoKMjAwMy0xMi0yOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmM6IGZpeCAiXFxcbiIgaW4gUkhTIG9mIHMgY29tbWFuZC4KCVJlcG9ydGVkIGJ5IE1pa2UgQ2FzdGxlLgoJKiB0ZXN0c3VpdGUvYmtzbGFzaGVzLmlucCwgdGVzdHN1aXRlL2Jrc2xhc2hlcy5nb29kLAoJdGVzdHN1aXRlL2Jrc2xhc2hlcy5zZWQ6IE5ldyBmaWxlcy4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtLCB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IEFkZAoJdGhlIGJrc2xhc2hlcyB0ZXN0LgoKMjAwMy0xMi0xNiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjBiIHJlbGVhc2VkLgoKCSogc2VkL21iY3MuYzogTmV3IGZpbGUuCgkqIHNlZC9zZWQuaDogRGVjbGFyZSBtYWNyb3MgZm9yIG1iY3MuYy4KCSogc2VkL2NvbXBpbGUuYzogVXNlIHRoZW0uCgkoYnJsZW4pOiBNb3ZlZCB0byBtYmNzLmMuCgkqIHNlZC9leGVjdXRlLmM6IFVzZSB0aGVtLgoJKiBzZWQvc2VkLmM6IGNhbGwgaW5pdGlhbGl6ZV9tYmNzICgpLgoKMjAwMy0xMi0xNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9yZWdleC5jIChtYXRjaF9yZWdleCk6IGZpeCBtZW1vcnkgbGVhay4KCjIwMDMtMTEtMjcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jIChyZXNldF9hZGRyZXNzZXMpOiBsZWF2ZSBhZGRyZXNzZXMgMAoJYW5kIDB+U1RFUCBlbmFibGVkLgoKMjAwMy0xMS0xNSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiBzZWQvcmVnZXguYzogVXNlIGZhc3RtYXAuCgoyMDAzLTA5LTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMGEgcmVsZWFzZWQuCgoJKiBzZWQvZXhlY3V0ZS5jIChzdHJ1Y3QgbGluZSk6IEFkZCBtYnN0YXRlIGZpZWxkLgoJKHN0cl9hcHBlbmQpOiBLZWVwIG1ic3RhdGUgdXAgdG8gZGF0ZS4KCShzdHJfYXBwZW5kX21vZGlmaWVkKTogTGlrZXdpc2UsIGFuZCB1c2UgdG93dXBwZXIvdG93bG93ZXIuCgkobGluZV9pbml0KTogSW5pdGlhbGl6ZSBtYnN0YXRlLgoJKGxpbmVfY29weSk6IENvcHkgbWJzdGF0ZS4KCShsaW5lX2FwcGVuZCk6IENvcHkgbWJzdGF0ZS4KCjIwMDMtMDctMTUgIFN0ZXBhbiBLYXNhbCAgPGthc2FsQHVjdy5jej4KCSAgICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBmbnUub3JnPgoKCUNoYW5nZSB0aGUgd2F5IHdlIHRyZWF0IGxpbmVzIHdoaWNoIGFyZSBub3QgdGVybWluYXRlZCBieSBhIG5ld2xpbmUuCglTdWNoIGxpbmVzIGFyZSBwcmludGVkIHdpdGhvdXQgdGhlIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGFzIGJlZm9yZSkKCWJ1dCBhcyBzb29uIGFzIG1vcmUgdGV4dCBpcyBzZW50IHRvIHRoZSBzYW1lIG91dHB1dCBzdHJlYW0sIHRoZQoJbWlzc2luZyBuZXdsaW5lIGlzIHByaW50ZWQsIHNvIHRoYXQgdGhlIHR3byBsaW5lcyBkb24ndCBjb25jYXRlbmF0ZS4KCgkqIHNlZC9leGVjdXRlLmMgKG91dHB1dF9maWxlKTogSXMgbm93IHN0cnVjdCBvdXRwdXQ7IHVzZXJzIGFkanVzdGVkCgl0byBhY2Nlc3MgdGhlIGZwIGZpZWxkLCBjYWxsIG91dHB1dF9taXNzaW5nX25ld2xpbmUgYmVmb3JlLCBhbmQKCWNhbGwgZmx1c2hfb3V0cHV0IGFmdGVyd2FyZHMuCgkocmVhZF9maWxlX2xpbmUpOiBTZXQgbGluZS5jaG9tcGVkIEZBTFNFIGVhY2ggdGltZSB3ZSBlbmNvdW50ZXIgYQoJbGluZSB3aXRob3V0IHRoZSBuZXdsaW5lIHRlcm1pbmF0b3IsIG5vIG1hdHRlciB3aGV0aGVyIHRoaXMgaXMgdGhlCglsYXN0IGlucHV0IGZpbGUgb3Igbm90LCBhbmQgbm8gbWF0dGVyIHdoZXRoZXIgd2UgYXJlIGluCglQT1NJWExZX0NPUlJFQ1QgbW9kZSBvciBub3QuCgkob3V0cHV0X21pc3NpbmdfbmV3bGluZSk6IE5ldyBmdW5jdGlvbiB3aGljaCBwcmludHMgdGhlIHN1cHByZXNzZWQKCW5ld2xpbmUsIGlmIG5lY2Vzc2FyeS4KCShmbHVzaF9vdXRwdXQpOiBOZXcgZnVuY3Rpb24gZm9yIGEgY29tbW9uIHBhdHRlcm4uCgkob3V0cHV0X2xpbmUpOiBVc2Ugc3RydWN0IG91dHB1dCwgc2V0IGl0cyBmbGFnIGFjY29yZGluZ2x5LgoJKGR1bXBfYXBwZW5kX3F1ZXVlKTogVXNlIGBja19md3JpdGUnIGluc3RlYWQgb2Ygb3V0cHV0X2xpbmUuCgkoZG9fbGlzdCk6IEZsdXNoIHRoZSBvdXRwdXQgc3RyZWFtIGF0IHRoZSBlbmQuCgkoY2xvc2Vkb3duKTogVGhlIGNvZGUgYGBpZihzZXBhcmF0ZV9maWxlcykgcmV3aW5kX3JlYWRfZmlsZXMoKTsnJwoJKHJlYWRfcGF0dGVybl9zcGFjZSk6IC4uLiBoYXMgYmVlbiBtb3ZlZCBoZXJlLgoJKHByb2Nlc3NfZmlsZXMpOiBEb24ndCBkbyB0aGUgZGVmYXVsdCBgcCcgYXQgdGhlIGVuZCwgLi4uCgkoZXhlY3V0ZV9wcm9ncmFtKTogLi4uIGFzIHRoaXMgZnVuY3Rpb24gaXMgbm93IHJlc3BvbnNpYmxlIGZvciBpdDsKCWFkZCB0aGUgY29kZSB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBhbmQgdG8gdGhlIGNvbW1hbmQgYHEnOwoJdGhlIGNvbW1hbmRzIGBkJywgYEQnIGFuZCBgUScgdGh1cyBubyBsb25nZXIgaGF2ZSB0byBmb3JnZSBhbiBlbXB0eQoJbGluZS4KCShleGVjdXRlX3Byb2dyYW0pOiBDb21tYW5kcyBgYycgYW5kIGBpJyBubyBsb25nZXIgY2FsbCB0aGUKCWZ1bmN0aW9uIG91dHB1dF9saW5lIHdpdGggY2hvbXBlZD09RkFMU0U7IGluc3RlYWQsIHRoZXkgY2hvbXAKCXRoZSB0ZXh0IGFuZCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGNob21wZWQ9PVRSVUUuCgkoZXhlY3V0ZV9wcm9ncmFtKTogQ29tbWFuZCBgZScgbm8gbG9uZ2VyIHVzZXMgb3V0cHV0X2xpbmU7IGl0CgljYWxscyBja19md3JpdGUgZGlyZWN0bHkuICBDb21tYW5kcyBgZScsIGBMJyBhbmQgYD0nIGZsdXNoCgl0aGUgb3V0cHV0IHN0cmVhbSBhdCB0aGUgZW5kLgoJKiBzZWQvY29tcGlsZS5jIChzcGVjaWFsX2ZpbGVzKTogVXNlIGBzdHJ1Y3Qgb3V0cHV0JyBpbnN0ZWFkIG9mIHRoZQoJZmlsZSBuYW1lLgoJKGdldF9vcGVuZmlsZSk6IC4uLiBzcGVjaWFsIGZpbGVzIGFyZSBubyBsb25nZXIgY29waWVkIHRvIGZpbGVfcmVhZAoJb3IgZmlsZV93cml0ZS4KCShmcF9saXN0KTogTW92ZSB0byBzZWQuaCAodXNlcnMgYWRqdXN0ZWQpIGFuZCByZW5hbWUgYXMuLi4KCSogc2VkL3NlZC5oIChzdHJ1Y3Qgb3V0cHV0KTogLi4udGhpcy4gIE5ldyBmbGFnIG1pc3NpbmdfbmV3bGluZQoJYXNzb2NpYXRlZCB0byB0aGUgb3V0cHV0IHN0cmVhbS4KCShzdHJ1Y3Qgc2VkX2NtZCwgc3RydWN0IHN1YnN0KTogVXNlIGBzdHJ1Y3Qgb3V0cHV0IConIGluc3RlYWQgb2YgbWVyZQoJYEZJTEUgKic7IGFkanVzdCBjb21waWxlLmMgYW5kIGV4ZWN1dGUuYy4KCSogdGVzdHN1aXRlL25vZW9sdy5zZWQsIHRlc3RzdWl0ZS9ub2VvbHcuZ29vZCwgdGVzdHN1aXRlL25vZW9sdy4xZ29vZCwKCXRlc3RzdWl0ZS9ub2VvbHcuMmdvb2Q6IE5ldyB0ZXN0cwoKMjAwMy0wNy0xNSAgU3RlcGFuIEthc2FsICA8a2FzYWxAdWN3LmN6PgoKICAgICAgICAqIGxpYi91dGlscy5oLCBzZWQvc2VkLmg6ICNpbmNsdWRlICJiYXNpY2RlZnMuaCIsCiAgICAgICAgZG9uJ3QgaW5jbHVkZSBpdCBmcm9tIHZhcmlvdXMgKi5jIGZpbGVzLgogICAgICAgICogc2VkL3JlZ2V4LmM6IERvbid0IGluY2x1ZGUgcmVnZXguaCBhcyBpdCdzIGluY2x1ZGVkIHZpYSBzZWQuaC4KCjIwMDMtMDYtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvZ2V0bGluZS5jOiBEb24ndCByZWFsbG9jIHdpdGggZmlyc3QgcGFyYW0gPSBOVUxMLgoKMjAwMy0wNS0wNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmM6IE1ha2UgdHJlYXRtZW50IG9mIEFERFJfSVNfTlVNX01PRAoJc2ltcGxlciwgYW5kIGZpeCBidWdzIGluIDB+NSwrMQoJKiBzZWQvY29tcGlsZS5jOiBDb21wbGFpbiBhYm91dCBhZGRyZXNzZXMgbGlrZSAwCglhbmQgMCwzIHdoaWNoIGFyZSBzb3VyY2VzIG9mIG1pc3VuZGVyc3RhbmRpbmdzLgoJUmVwb3J0ZWQgYnkgQWtpbSBEZW1haWxsZSA8YWtpbUBlcGl0YS5mcj4KCjIwMDMtMDMtMjUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKioqIFZlcnNpb24gNC4wLjcgcmVsZWFzZWQKCgkqIHNlZC9leGVjdXRlLmMgKGFwcGVuZF9yZXBsYWNlbWVudCk6IEV4dHJhY3QgZnJvbQoJZG9fc3Vic3QKCShkb19zdWJzdCk6IERvbid0IHVwZGF0ZSBjb3VudCB3aGVuIGEgbWF0Y2ggd2FzCglza2lwcGVkLgoJKiB0ZXN0c3VpdGUveGJ4Y3gzLmdvb2QsIHRlc3RzdWl0ZS94YnhjeDMuc2VkLCAKCXRlc3RzdWl0ZS94YnhjeDMuaW5wOiBSZWdyZXNzaW9uIHRlc3RzCgoyMDAzLTAzLTIzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAoZG9fc3Vic3QpOiBGaXggc2V2ZXJhbCBidWdzIHdpdGgKCW51bWJlcmVkIG1hdGNoZXMKCSogdGVzdHN1aXRlL251bXN1YjIuZ29vZCwgdGVzdHN1aXRlL251bXN1YjIuaW5wLAoJdGVzdHN1aXRlL251bXN1YjIuc2VkLCB0ZXN0c3VpdGUvbnVtc3ViMy5nb29kLAoJdGVzdHN1aXRlL251bXN1YjMuaW5wLCB0ZXN0c3VpdGUvbnVtc3ViMy5zZWQsCgl0ZXN0c3VpdGUvbnVtc3ViNC5nb29kLCB0ZXN0c3VpdGUvbnVtc3ViNC5pbnAsCgl0ZXN0c3VpdGUvbnVtc3ViNC5zZWQsIHRlc3RzdWl0ZS9udW1zdWI1Lmdvb2QsCgl0ZXN0c3VpdGUvbnVtc3ViNS5pbnAsIHRlc3RzdWl0ZS9udW1zdWI1LnNlZDoKCXJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBidWdzCgoyMDAzLTAzLTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMC42IHJlbGVhc2VkCgoJKiBsaWIvbWtzdGVtcC5jOiBJbmNsdWRlIHN5cy9maWxlLmggaWYgYXZhaWxhYmxlIGZvciB0aGUKCWJlbmVmaXQgb2YgVWx0cml4CgoyMDAzLTAzLTE0ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYzogUmVwbGFjZSBmbGFnVCB3aXRoIGJvb2wKCSogc2VkL2V4ZWN1dGUuYzogUmVwbGFjZSBmbGFnVCB3aXRoIGJvb2wKCSogc2VkL2ZtdC5jOiBSZXBsYWNlIGZsYWdUIHdpdGggYm9vbAoJKiBzZWQvc2VkLmM6IFJlcGxhY2UgZmxhZ1Qgd2l0aCBib29sCgkqIHNlZC9yZWdleC5jOiBSZXBsYWNlIGZsYWdUIHdpdGggYm9vbAoKMjAwMy0wMy0xMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IFVuZGVyc3RhbmQgcGFyYW1ldGVyCglvZiBgdicuCgoJKiBzZWQvc2VkLmMgKHVzYWdlKTogU3BsaXQgaGVscCBtZXNzYWdlIGludG8gbXVsdGlwbGUKCXN0cmluZ3MKCShtYWluKTogRG9uJ3QgdW5kZXJzdGFuZCAtaCBhbmQgLVYKCjIwMDMtMDMtMTIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChtYXRjaF9zbGFzaCwgc25hcmZfY2hhcl9jbGFzcyk6ICBNb3JlCgltdWx0aWJ5dGUgY2hhcmFjdGVyIHN1cHBvcnQKCShicmxlbik6IE5ldyBmdW5jdGlvbgoJKiB0ZXN0c3VpdGUvY2xhc3Nlcy5nb29kLCB0ZXN0c3VpdGUvY2xhc3Nlcy5pbnAsCgl0ZXN0c3VpdGUvY2xhc3Nlcy5zZWQ6IE5ldyBmaWxlcwoKMjAwMy0wMy0xMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKG1hdGNoX3NsYXNoKTogU3RyaXAgdGhlIFwgaW4gZnJvbnQgb2YKCXNsYXNoZXMgKHNvIHRoYXQgdGhlIG1hdGNoZXIgc2VlcyB4LyBmb3Igcy94XC8vLykuICBEb24ndAoJbWF0Y2ggLyBhbmQgWyB1bmxlc3MgYXQgdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyLgoKMjAwMy0wMi0xOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9yZWdleC5jIChjb21waWxlX3JlZ2V4KTogLy8gbWF0Y2hlcyB0aGUgbGFzdCByZWd1bGFyCglleHByZXNzaW9uIGV2ZW4gaW4gUE9TSVhMWV9DT1JSRUNUIG1vZGUuCgkqIHNlZC9jb21waWxlLmMgKG5vcm1hbGl6ZV90ZXh0KTogVHJlYXQgbXVsdGlieXRlIGNoYXJhY3RlcgoJc2V0cyBjb3JyZWN0bHkKCShyZWFkX3RleHQpOiBEb24ndCBzd2FsbG93IGJhY2tzbGFzaCBzZXF1ZW5jZXMsIHJ1biB0ZXh0Cgl0aHJvdWdoIG5vcm1hbGl6ZV90ZXh0CgkoY29tcGlsZV9wcm9ncmFtKTogRGl0dG8gZm9yIHkgY29tbWFuZAoKCSogc2VkL2NvbXBpbGUuYyAobm9ybWFsaXplX3RleHQpOiBBZGQgcGFyYW1ldGVyIHRoYXQgc2F5cwoJd2hldGhlciB0aGUgdGV4dCB3aWxsIGJlIHByb2Nlc3NlZCBmdXJ0aGVyIHRvIHJlbW92ZSBtb3JlCgliYWNrc2xhc2ggZXNjYXBlcy4gIENhbGxlcnMgYWRqdXN0ZWQKCShtYXRjaF9zbGFzaCk6IFJlbW92ZSBzYW1lIHBhcmFtZXRlciBmcm9tIGhlcmUuICBDYWxsZXJzIGFkanVzdGVkLgoKMjAwMy0wMi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCiAgICAgICAgKiBzZWQvc2VkLmg6IEZpeCBwcm90b3R5cGUgZm9yIG1hdGNoX3JlZ2V4LCBkZWNsYXJlIHJlX3JlZ2lzdGVycwogICAgICAgIGlmIFJFR19QRVJMCiAgICAgICAgKiBzZWQvZXhlY3V0ZS5jIChkb19zdWJzdCk6IFVzZSByZV9yZWdpc3RlcnMKICAgICAgICAqIHNlZC9yZWdleC5jIChjb3B5X3JlZ3MpOiBOZXcgZnVuY3Rpb24KICAgICAgICBbUkVHX1BFUkxdOiBVc2UgcmVfcmVnaXN0ZXJzCiAgICAgICAgWyFSRUdfUEVSTF06IEF2b2lkIHVzaW5nIGludGVybmFsIGVudHJ5IHBvaW50cywgc3VwcG9ydCBwcmUtZ2xpYmMKCTIuMyByZWdleCBmb3IgdGhlIHNha2Ugb2YgLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4LgoKMjAwMy0wMS0wNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuaDogTW92ZSBzb21lIHN0dWZmIGZyb20gaGVyZS4uLgoJKiBzZWQvYmFzaWNkZWZzLmg6IC4uLnRvIGhlcmUKCSogbGliL3V0aWxzLmMgKGNrX2ZvcGVuKTogQWRkIEZBSUwgcGFyYW1ldGVyCgkqIGxpYi91dGlscy5oOiBBZGp1c3QgcGFyYW1ldGVyCgkqIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmMsIHNlZC9zZWQuYzogQWRqdXN0IGNhbGxlcnMKCgkqIHNlZC9iYXNpY2RlZnMuaDogQWRkIFRSVUUvRkFMU0UKCSogc2VkL2NvbXBpbGUuYywgc2VkL2V4ZWN1dGUuYywgc2VkL3NlZC5jOiBVc2UgdGhlbQoJKiBzZWQvZm10LmM6IERvIG5vdCByZWRlZmluZSB0aGVtCgoyMDAzLTAxLTAyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3NlZC5jOiBCdW1wIGNvcHlyaWdodCB5ZWFyCgoyMDAyLTEyLTI0ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3NlZC5jOiBVc2UgYmluZHRleHRkb21haW4KCSogc2VkL2Jhc2ljZGVmcy5oIFtfX0VNWF9fXTogRGVmaW5lIGluaXRpYWxpemVfbWFpbgoJKiBsaWIvZ2V0bGluZS5jIFtfX0VNWF9fXTogU3RyaXAgdHJhaWxpbmcgQ1IKCgkqIHNlZC9yZWdleC5jOiBEb24ndCB1c2UgTl8gb24gdGhlIGxpbmVzIHRoYXQgZGVmaW5lCgllcnJvciBtZXNzYWdlcywgc29tZSBjb21waWxlcnMgY29tcGxhaW4uCgoyMDAyLTEyLTE4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMC41IHJlbGVhc2VkCgoJKiBzZWQvY29tcGlsZS5jOiBEb24ndCB1c2UgTl8gb24gdGhlIGxpbmVzIHRoYXQgZGVmaW5lCgllcnJvciBtZXNzYWdlcywgc29tZSBjb21waWxlcnMgY29tcGxhaW4uCgoyMDAyLTEyLTE2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYzogSW1wcm92ZW1lbnRzIHRvIHNvbWUgZXJyb3IgbWVzc2FnZXM7CglgYScsIGBpJywgYGwnLCBgTCcsIGByJyBhY2NlcHQgdHdvIGFkZHJlc3NlcyBleGNlcHQgaW4KCVBPU0lYTFlfQ09SUkVDVCBtb2RlLgoKMjAwMi0xMi0xNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGxpYi9yZWdleF9pbnRlcm5hbC5jOiBGaXggcHJvYmxlbSBvbiBub24tZ2xpYmMKCXN5c3RlbXMsIGZyb20gSmFrdWIgSmVsaW5lawoJKiBsaWIvcmVnZXguYyAoUkVfRU5BQkxFX0kxOE4pOiBDb25kaXRpb25hbGl6ZSBvbgoJSEFWRV9NQlJUT1dDIGFuZCBIQVZFX1dDUlRPTUIuCgkqIGxpYi9nZXRsaW5lLmM6IEZpeCBjb21waWxhdGlvbiBvbiBub24tZ2xpYmMgc3lzdGVtCgkqIGxpYi9zbnByaW50Zi5jOiBGaXggY29tcGlsYXRpb24gb24gbm9uLWdsaWJjIHN5c3RlbQoJKiBsaWIvYmFzaWNkZWZzLmggW1BfXTogTWFrZSBtb3JlIHBvcnRhYmxlCgoyMDAyLTEyLTEyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMC40IHJlbGVhc2VkCgoyMDAyLTExLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMC4zIHJlbGVhc2VkCgoyMDAyLTExLTE5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMC4yIHJlbGVhc2VkCgoyMDAyLTExLTA1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMC4xIHJlbGVhc2VkCgoyMDAyLTEwLTIzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMCByZWxlYXNlZAoKMjAwMi0xMC0yOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGxpYi91dGlscy5jOiBEb24ndCBmYWlsIGZvciBFQkFERiBpbiBmZmx1c2gKCSogc3JjL3NlZC5jOiB0aGVfcHJvZ3JhbSBpcyBub3cgYSBnbG9iYWwKCjIwMDItMTAtMTkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvc2VkLmM6IFByaW50IEdOVSBzZWQgaW4gLS12ZXJzaW9uIGZvciBHTlUgc2VkLAoJYW5kIHN1cGVyLXNlZCBmb3Igc3VwZXItc2VkICh0aGFua3MgdG8gQnJ1bm8gSGFpYmxlKQoKMjAwMi0xMC0xNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjk2IHJlbGVhc2VkCgoyMDAyLTEwLTE2ICBJc2FtdSBIYXNlZ2F3YSAgPGlzYW11QHlhbWF0by5pYm0uY29tPgoKCSogc3JjL2V4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtKTogTXVsdGlieXRlICd5JwoJKiBzcmMvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBMaWtld2lzZQoJKiBzcmMvc2VkLmg6IExpa2V3aXNlCgoyMDAyLTEwLTA4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuOTUgcmVsZWFzZWQKCjIwMDItMDctMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvc2VkLmg6IHJmaWxlIC0tPiBmbmFtZSwgd2ZpbGUgLS0+IGZwCgkqIHNyYy9jb21waWxlLmMgKGNvbXBpbGVfY29tbWFuZCk6IFBhcnNlICdSJyBsaWtlICd3JywgdXNlCglzZXBhcmF0ZSBsaXN0cyBmb3IgZmlsZSByZWFkIGFuZCBmaWxlIHdyaXRlCgkqIHNyYy9jb21waWxlLmMgKGdldF9vcGVuZmlsZSk6IE5ldyBuYW1lIG9mIGdldF93cml0ZWZpbGUKCSogc3JjL2NvbXBpbGUuYyAocmV3aW5kX3JlYWRfZmlsZXMpOiBOZXcgZnVuY3Rpb24KCSogc3JjL3NlZC5oOiBEZWNsYXJlZCBoZXJlCgkqIHNyYy9leGVjdXRlLmMgKGNsb3NlZG93bik6IEFuZCBjYWxsZWQgaGVyZQoJKiBzcmMvZXhlY3V0ZS5jIChhcHBlbmRfcXVldWUpOiBBZGRlZCAnZnJlZScgZmllbGQKCSogc3JjL2V4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtKTogSW1wbGVtZW50ICdSJwoKMjAwMi0wNi0wOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNyYy9leGVjdXRlLmMgKGRvX3N1YnN0KTogUmVwbGFjZWQgZmxhZyB3YXMgc2V0IG9uIGV2ZXJ5CglyZWdleHAgbWF0Y2gsIHdoaWxlIHRoZSBmaXJzdCBtYXRjaGVzIHNob3VsZCBub3Qgc2V0IGl0Cglmb3Igcy8vL04uCgoyMDAyLTA2LTA4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc3JjL2NvbXBpbGUuYyAoY29tcGlsZV9maWxlKTogT3BlbiB0aGUgc2NyaXB0IGluIHRleHQgbW9kZQoJKiBsaWIvdXRpbHMuYyAodXRpbHNfZnBfbmFtZSk6IFNob3J0ZW4gdGhlIG91dHB1dAoJKiBsaWIvdXRpbHMuYyAoY2tfZnJlYWQsIGNrX2Z3cml0ZSwgY2tfZmZsdXNoKTogQ2xlYXJlcnIKCWFmdGVyIHByaW50aW5nIGFuIGVycm9yLgoJKiBsaWIvdXRpbHMuYyAoY2tfZmNsb3NlKTogV29yayBvbiBzdGRvdXQgYXMgd2VsbCBpZiBzdHJlYW0gPT0gTlVMTAoJYW5kIGZsdXNoIGJlZm9yZSBjbG9zaW5nIHRvIGNoZWNrIGZvciBlcnJvcnMKCjIwMDItMDUtMzAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBJbXBsZW1lbnQgVwoJKiBzcmMvZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0pOiBMaWtld2lzZQoKMjAwMi0wNC0yMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNyYy9zZWQuYyAodXNhZ2UsIG1haW4pOiBQYXJzZSAtcwoJKiBzcmMvc2VkLmggKHNlcGFyYXRlX2ZpbGVzKTogTmV3IHZhcmlhYmxlCgkqIHNyYy9leGVjdXRlLmMgKHNlcGFyYXRlX2ZpbGVzKTogTmV3IHZhcmlhYmxlCgkqIHNyYy9leGVjdXRlLmMgKHJlc2V0X2FkZHJlc3Nlcyk6IE5ldyBmdW5jdGlvbiB0byBtYWtlIHJhbmdlCglhZGRyZXNzZXMgd29yayBzZXBhcmF0ZWx5IG9uIGVhY2ggZmlsZSB3aGVuIHVzaW5nIGluLXBsYWNlCgllZGl0aW5nCgkqIHNyYy9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IFRoZSBgbicgYW5kIGBOJyB1c2UgdGVzdF9lb2YKCXNvIHRoYXQgdGhlIHNjcmlwdCByZXN0YXJ0cyBhdCBlbmQgb2YgZmlsZSwgbm90IGF0IGVuZCBvZiBpbnB1dAoJKiBzcmMvZXhlY3V0ZS5jICh0ZXN0X2RvbGxhcl9FT0YpOiBNYWtlICQgd29yayBzZXBhcmF0ZWx5CglvbiBlYWNoIGZpbGUgd2hlbiB1c2luZyAtczsgcmVuYW1lZCB0byB0ZXN0X2VvZgoJCjIwMDItMDItMjggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvc2VkLmggKHN0cnVjdCBzZWRfY21kKTogZXhpdF9zdGF0dXMgLT4gaW50X2FyZwoJKiBzcmMvY29tcGlsZS5jOiBMaWtld2lzZQoJKiBzcmMvZXhlY3V0ZS5jOiBMaWtld2lzZQoKCSogc3JjL2NvbXBpbGUuYyAoY29tcGlsZV9jb21tYW5kKTogUGFyc2UgYGwnIGxpa2UKCWBxJyBhbmQgYFEnOyBkZWZhdWx0IGZvciBpbnRfYXJnIGlzIC0xCgkqIHNyYy9leGVjdXRlLmMgKGRvX2xpc3QpOiBOZXcgYXJndW1lbnQsIHVzZWQgaW5zdGVhZAoJb2YgbGNtZF9vdXRfbGluZV9sZW4KCShleGVjdXRlX3Byb2dyYW0pOiBJbnRlcnByZXQgaW50X2FyZyBmb3IgdGhlIGBsJyBjb21tYW5kOwoJcmV0dXJuIDAgZm9yIGBxJyBhbmQgYFEnIGlmIGludF9hcmcgaXMgLTEKCgkqIHNyYy9mbXQuYzogTmV3IGZpbGUsIGxvb3RlZCBmcm9tIEdOVSB0ZXh0dXRpbHMKCSogc3JjL2NvbXBpbGUuYzogUGFyc2UgYEwnCgkqIHNyYy9leGVjdXRlLmM6IEV4ZWN1dGUgYEwnCgkKMjAwMi0wMi0xNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNyYy9leGVjdXRlLmMgKHN0cl9hcHBlbmRfbW9kaWZpZWQpOiBGaXhlZCBhIHN0dXBpZAoJYnVnIChzdG9wIGNvbmRpdGlvbiB3YXMgKnN0YXJ0ID09ICplbmQsIG1lYW50IHRvIGJlCglzdGFydCA9PSBlbmQpCgoyMDAyLTAyLTA1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogbGliL3V0aWxzLmM6IEFkZGVkIGRpcmVjdG9yeSBwYXJhbWV0ZXIgdG8KCXRlbXBfZmlsZV90ZW1wbGF0ZQoJKiBsaWIvdXRpbHMuaDogQWRqdXN0ZWQKCSogc3JjL2V4ZWN1dGUuYzogQWRqdXN0ZWQKCjIwMDItMDEtMjkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvY29tcGlsZS5jIChtYXJrX3N1YnN0X29wdHMpOiBTaWduYWwgYW4gZXJyb3IgaWYKCXRoZXJlIGFyZSBtdWx0aXBsZSBnIG9yIHAgb3B0aW9ucwoJKiBzcmMvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBSYWlzZSBhcHByb3ByaWF0ZQoJZXJyb3IgaWYgc2Vjb25kIHN0cmluZyBpbiB5IGNvbW1hbmQgaXMgbG9uZ2VyIHRoYW4KCWZpcnN0ICh1c2VkIHRvIGJlICJleGNlc3MganVuayBhZnRlciBjb21tYW5kIikKCjIwMDEtMTItMzEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvZ2V0bGluZS5jOiBTdHJpcCB0aGUgdGVybWluYXRpbmcgXHIgdW5kZXIgV2luZG93cwoJb3IgTVMtRE9TLgoJCgkqIHRlc3RzdWl0ZS94ZW1hY3Muc2VkLCB0ZXN0c3VpdGUveGVtYWNzLmlucCwKCXRlc3RzdWl0ZS94ZW1hY3MuZ29vZDogU3VibWl0dGVkIGJ5IEpvaG4gRnJlbWxpbgoJKGpvaG5AZnJlbWxpbi5kZSkKCjIwMDEtMTItMjcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgkKCSogc2VkL2V4ZWN1dGUuYyAoZG9fc3Vic3QpOiBGbGFncyBpbiBvcHRpbWl6ZWQgcy9eeHgvCgljb21tYW5kcyB3ZXJlIGRpc2NhcmRlZCAoc2VlIHRoZSBjaGFuZ2UgYmVsb3cpCgoyMDAxLTEyLTE5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAocmVzaXplX2xpbmUpOiBMaW1pdCBpbmFjdGl2ZSBzcGFjZSB0byB0d28KCXRoaXJkcyBvZiBhIGJ1ZmZlcgoJKiBzZWQvZXhlY3V0ZS5jIChsaW5lX2luaXQpOiBJbml0aWFsaXplIGJ1Zi0+YWN0aXZlCgkqIHNlZC9leGVjdXRlLmMgKHN0cl9hcHBlbmQsIHN0cl9hcHBlbmRfbW9kaWZpZWQsIGxpbmVfY29weSwKCWRvX2xpc3QsIGRvX3N1YnN0LCBleGVjdXRlX3Byb2dyYW0sIHByb2Nlc3NfZmlsZXMpOiBPcGVyYXRlCglvbiBhY3RpdmUgc3BhY2UKCgkqIHNlZC9leGVjdXRlLmMgKGRvX3N1YnN0KTogT3B0aW1pemUgcy9eeHgvLyBieSBtYWtpbmcgYSBwYXJ0CglvZiB0aGUgYnVmZmVyIGluYWN0aXZlIGFuZCBzL3h4JC8vIGJ5IHRydW5jYXRpbmcgaXQuCgkqIHNlZC9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IE9wdGltaXplIEQgYnkgbWFraW5nIGEgcGFydAoJb2YgdGhlIGJ1ZmZlciBpbmFjdGl2ZQoJCgkqIHRlc3RzdWl0ZS91bmlxLnNlZCwgdGVzdHN1aXRlL3VuaXEuaW5wLCB0ZXN0c3VpdGUvdW5pcS5nb29kOgoJYWRkZWQgdG8gdGVzdCBQIGFuZCBEIGNvbW1hbmRzLgoJKiB0ZXN0c3VpdGUvZmFzdHMuc2VkLCB0ZXN0c3VpdGUvZmFzdHMuaW5wLCB0ZXN0c3VpdGUvZmFzdHMuZ29vZDoKCWFkZGVkIHRvIHRlc3QgdGhlIG5ldyBvcHRpbWl6YXRpb24gZG9uZSBvbiB0aGUgYHMnIGNvbW1hbmQuCgoyMDAxLTEyLTE3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdGVzdHN1aXRlL2RjLmlucDogQWxzbyBjb21wdXRlIEVhc3RlciBvZiAyMDAyIDotKQoKCSogc2VkL2V4ZWN1dGUuYyBbIUhBVkVfRkNITU9EXTogRG9uJ3QgY2htb2QgdGhlIG91dHB1dCBmaWxlCglpZiB3b3JraW5nIGluLXBsYWNlCgoyMDAxLTExLTEyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3NlZC5oIChzdHJ1Y3Qgc2VkX2NtZCk6IGExIGlzIGEgcG9pbnRlciB0b28KCSogc2VkL2NvbXBpbGUuYzogTGlrZXdpc2UKCSogc2VkL2V4ZWN1dGUuYzogTGlrZXdpc2UKCgkqIHNlZC9jb21waWxlLmM6IFVzZSBvYnN0YWNrcwoJKiBzZWQvZXhlY3V0ZS5jOiBMaWtld2lzZQoKMjAwMS0xMS0wOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKG1hcmtfc3Vic3Rfb3B0cyk6IFBhcnNlIG9wdGlvbiBgZScsCglwcmVzZXJ2ZSB0d28gb2NjdXJyZW5jZXMgb2YgdGhlIGBlJyBhbmQgYHAnIG9wdGlvbnMuCgkqIHNlZC9leGVjdXRlLmMgKGRvX3N1YnN0KSBbSEFWRV9QT1BFTl06IEludGVycHJldCBvcHRpb24KCWBlJyAoZXZhbHVhdGUsIGxpa2UgUGVybCdzIGJ1dCB1c2VzIEJvdXJuZSBzaGVsbCkuCgkqIHNlZC9zZWQuaCAoc3RydWN0IHN1YnN0KTogQWRkIGFuIGBldmFsJyBmbGFnLgoKCSogc2VkL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogQ29tcGlsZSBjb21tYW5kIGBlJwoJbGlrZSBgYycuCgkqIHNlZC9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IEV4ZWN1dGUgY29tbWFuZCBgZScuCgoyMDAxLTA5LTI1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoZ2V0X3dyaXRlZmlsZSkgWyFQT1NJWExZX0NPUlJFQ1RdOgoJc3VwcG9ydCAvZGV2L3N0ZG91dAoJKiBzZWQvZXhlY3V0ZS5jIChvcGVuX25leHRfZmlsZSwgY2xvc2Vkb3duKTogU3VwcG9ydAoJaW4tcGxhY2UgZWRpdGluZwoJKiBzZWQvZXhlY3V0ZS5jIChiYWNrdXBfZmlsZV9uYW1lKTogTmV3IGZ1bmN0aW9uIHRvCglzdXBwb3J0IGluLXBsYWNlIGVkaXRpbmcKCSogc2VkL21haW4uYyAodXNhZ2UsIG1haW4pOiBQYXJzZSAtaS4KCSogc2VkL3V0aWxzLmM6IE1vdmVkIHRvIGxpYiBkaXJlY3RvcnkKCQoJKiBsaWIvdXRpbHMuYyAodGVtcF9maWxlX3RlbXBsYXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBzZWQvdXRpbHMuaDogRGVjbGFyZWQgdGVtcF9maWxlX3RlbXBsYXRlLgoKMjAwMS0wOS0wNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKGRvX3N1YnN0KTogYGJhYWFjJywgaWYgcGFzc2VkIHRocm91Z2gKCXMvYSoveC9nLCBnYXZlIGB4Ynh4Y3gnIHJhdGhlciB0aGFuIGB4YnhjeCcgKGJlY2F1c2UgYW4KCWVtcHR5IHN0cmluZyBtYXRjaGVkIGJlZm9yZSB0aGUgYGMnLiAgRml4ZWQuCgoJKiBzZWQvZXhlY3V0ZS5jOiBSZW1vdmVkIG1tYXAgc3VwcG9ydCwgSS9PIGlzIGRvbmUgdXNpbmcKCWdldGxpbmUgKHNsb3dlciBidXQgbW9yZSBidWctcHJvb2YpLgoJKiBzZWQvdXRpbHMuYzogTGlrZXdpc2UuCgkqIGxpYi9nZXRsaW5lLmM6IE5ldyBmaWxlCgoyMDAxLTAzLTIyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAobm9ybWFsaXplX3RleHQpIFtQT1NJWExZX0NPUlJFQ1RdOiBFbmFibGUKCWVzY2FwZXMgaW4gbW9kZXMgb3RoZXIgdGhhbiBCUkUuCgoyMDAxLTAzLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAobm9ybWFsaXplX3RleHQpOiBTdXBwb3J0IFxYWFggaW4gUGVybCBtb2RlLAoJXG9YWFggaW4gbm9uLVBlcmwgbW9kZS4KCjIwMDEtMDMtMTggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBGaXhlZCBtaXNzaW5nIGJyZWFrIHdoZW4KCWNvbXBpbGluZyAncScgYW5kICdRJy4KCgkqIHNlZC9jb21waWxlLmMgKGNoZWNrX2ZpbmFsX3Byb2dyYW0pOiBSZW1vdmVkIG5vdyBzcHVyaW91cwoJY2FsbCB0byBjb21waWxlX3JlZ2V4CgkqIHNlZC9yZWdleC5jIChjb21waWxlX3JlZ2V4KTogRG9uJ3QgdHJhY2sgdGhlIGxhc3QgY29tcGlsZWQKCXJlZ2V4CgkqIHNlZC9yZWdleC5jIChleGVjdXRlX3JlZ2V4KTogVHJhY2sgaGVyZSB0aGUgbGFzdCBjb21waWxlZAoJcmVnZXgKCQoyMDAxLTAzLTAyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoc2V0dXBfcmVwbGFjZW1lbnQpOiBTdXBwb3J0IFxbbEx1VUVdIGxpa2UKCVBlcmwgYW5kIHZpLgoJKiBzZWQvY29tcGlsZS5jIChuZXdfcmVwbGFjZW1lbnQpOiBBY2NlcHQgbmV3IHBhcmFtZXRlcgoJdG8gc3VwcG9ydCBcW2xMVXVFXS4KCSogc2VkL3NlZC5oIChlbnVtIHJlcGxhY2VtZW50X3R5cGVzKTogTmV3IGRlY2xhcmF0aW9uCgkqIHNlZC9leGVjdXRlLmMgKGRvX3N1YnN0KTogVXNlIG5ldyBmdW5jdGlvbiBzdHJfYXBwZW5kX21vZGlmaWVkCgl0byBhcHBseSB0aGUgY2hhbmdlcyByZXF1aXJlZCB2aWEgXFtsTFV1RV0uCgkqIHNlZC9leGVjdXRlLmMgKHN0cl9hcHBlbmRfbW9kaWZpZWQpOiBOZXcgZnVuY3Rpb24KCjIwMDEtMDMtMDIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChzZXR1cF9yZXBsYWNlbWVudCk6IENvdW50IHRoZSBudW1iZXIgb2YgYmFja3JlZmVyZW5jZXMKCXRoYXQgdGhlIFJIUyBuZWVkcwoJKiBzZWQvcmVnZXguYyAoY29tcGlsZV9yZWdleCk6IENoZWNrIGlmIHRoZXJlIGlzIGEgc3VmZmljaWVudCBudW1iZXIKCW9mIGJhY2tyZWZlcmVuY2VzIChuZXcgYXJndW1lbnQgbmVlZGVkX3N1YiByZXBsYWNlcyBub3N1YikKCSogc2VkL2NvbXBpbGUuYyAoY29tcGlsZV9hZGRyZXNzLCBjb21waWxlX3Byb2dyYW0sCgljaGVja19maW5hbF9wcm9ncmFtKTogQ2FsbGVycyBhZGp1c3RlZAoKMjAwMS0wMi0wOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IEFkZGVkIGBRJyAocXVpdCB3aXRob3V0IG91dHB1dCkKCSogc2VkL2V4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtKTogRGl0dG8KCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IEZpbGwgaW4gZXhpdF9zdGF0dXMgZm9yIGBxJyBhbmQgYFEnCgkqIHNlZC9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IFJldHVybiAtMSBmb3IgYGdvIG9uJywgMC4uMjU1Cgl0byBzZXQgdGhlIGV4aXQgc3RhdHVzCgkqIHNlZC9leGVjdXRlLmMgKHByb2Nlc3NfZmlsZXMpOiBJbnRlcnByZXQgbmV3IGNvbnZlbnRpb24gZm9yCglleGVjdXRlX3Byb2dyYW0sIHJldHVybiBzZWQncyBleGl0IGNvZGUKCSogc2VkL3NlZC5jIChtYWluKTogUmV0dXJuIHByb2Nlc3NfZmlsZXMncyBleGl0IGNvZGUKCSogc2VkL3NlZC5oIChzdHJ1Y3Qgc2VkX2NtZCk6IERlY2xhcmUgZXhpdF9zdGF0dXMKCQoyMDAxLTAxLTA3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogQWRkZWQgYFQnIChicmFuY2ggaWYgZmFpbGVkKQoJKiBzZWQvZXhlY3V0ZS5jIChzaHJpbmtfcHJvZ3JhbSwgZXhlY3V0ZV9wcm9ncmFtKTogRGl0dG8KCjIwMDEtMDEtMDQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IFVzZSBhdXRvbWFrZSdzIGltcGxlbWVudGF0aW9uCglvZiBgbWFrZSBjaGVjaycuICBSZW1vdmVkIHRoZSB0ZXN0IHRhcmdldHMKCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBNb3ZlZCB0aGUgdGVzdCB0YXJnZXRzIGhlcmUKCShuZXcgZmlsZSkuCgkqIHRlc3RzdWl0ZS9ydW50ZXN0OiBOZXcgZmlsZQoKCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBga2hhZGFmeScgdGVzdCB1c2VzIEVSRXMuCgoJKiB0ZXN0c3VpdGUvc3BlbmNlci5pbnA6IFJlbW92ZWQgdGhlIF4qIHRlc3QKCgkqIHRlc3RzdWl0ZS9zcGVuY2VyLnNoOiBEb24ndCByZWx5IG9uIGF3azsgbW9yZSBjb21tZW50cyB0b28KCQoyMDAxLTAxLTAzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgogICAKCSogc2VkL2NvbXBpbGUuYyhzbmFyZl9jaGFyX2NsYXNzKSBbUkVHX1BFUkxdOiBEb24ndCBwYXJzZQoJYFxuJyBzcGVjaWFsbHkKCSogc2VkL2NvbXBpbGUuYyhtYXRjaF9zbGFzaCkgW1JFR19QRVJMXTogRGl0dG8KCgkqIHNlZC9jb21waWxlLmMocmVhZF90ZXh0KSBbUkVHX1BFUkxdOiBTdXBwb3J0IFt4WF0gbW9kaWZpZXJzCgkqIHNlZC9jb21waWxlLmMobWFya19zdWJzdF9vcHRzKSBbUkVHX1BFUkxdOiBEaXR0bwoKMjAwMC0xMi0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGxpYi9zbnByaW50Zi5jIFtCT09UU1RSQVBdOiBEb24ndCBpbmNsdWRlIHN0ZGlvLmgKCSogbGliL3N0cmVycm9yLmMgW0JPT1RTVFJBUF06IERvbid0IGluY2x1ZGUgc3RkaW8uaAoJKiBzZWQvZXhlY3V0ZS5jIFshSEFWRV9JU0FUVFldOiBEb24ndCBidWZmZXIgc3RkaW4KCjIwMDAtMTItMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jKG1hcmtfc3Vic3Rfb3B0cyk6IFN1cHBvcnQgW21Nc1NdIGZsYWdzCgkqIHNlZC9jb21waWxlLmMocmVhZF90ZXh0KTogU3VwcG9ydCBbTVNdIGZsYWdzIGZvciAKCWFkZHJlc3NlcwoJKiBzZWQvcmVnZXguYyhjb21waWxlX3JlZ2V4KTogU3VwcG9ydCBhcmJpdHJhcnkgZmxhZ3MgZm9yCglyZWduY29tcC4KCgkqIHNlZC9yZWdleC5jKGNvbXBpbGVfcmVnZXgpIFtSRUdfUEVSTF06IERvbid0IGNhbGwKCW5vcm1hbGl6ZV90ZXh0LgoKMjAwMC0xMi0wOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGJhc2ljZGVmcy5oOiBNb3ZlZCBoZXJlIGZyb20gdGhlIGBzZWQnIHN1YmRpcmVjdG9yeS4KCQoJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgY3JhcCB0byBwaWNrIGEgcmVnZXggZW5naW5lLgoJQWRkZWQgc25wcmludGYgdG8gdGhlIEFDX1JFUExBQ0VfRlVOQ1MgY2FsbC4KCgkqIGxpYi9zbnByaW50Zi5jOiBOZXcgZmlsZS4KCQoJKiBzZWQvcmVnZXguYyhjb21waWxlX3JlZ2V4KTogVXNlIHJlZ25jb21wCgkqIHNlZC9yZWdleC5jKG1hdGNoX3JlZ2V4KTogVXNlIHJlZ2V4ZWMyCgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcHJvZ3JhbSk6IEltcGxlbWVudGVkIHRoZSBgdicgY29tbWFuZC4KCgkqIHNlZC9zZWQuYyhtYWluKTogSW1wbGVtZW50ZWQgdGhlIGByJyBhbmQgYFInIG9wdGlvbnMKCgkqIHNlZC9zZWQuaDogUmVwbGFjZWQgdXNlX2V4dGVuZGVkX3N5bnRheF90IHdpdGgKCWV4dGVuZGVkX3JlZ2V4cF9mbGFncyB0byBzdXBwb3J0IFBlcmwgcmVndWxhciBleHByZXNzaW9ucy4KCgkqIHNlZC9leGVjdXRlLmMob3Blbl9uZXh0X2ZpbGUpOiBEb24ndCBtbWFwIHN0ZGluIChiZWNhdXNlCgl3ZSBjYW5ub3Qgc2VlayBpbnRvIGl0LCBzbyBhIHJlZGlyZWN0ZWQgc3RkaW4ncyBjb250ZW50cwoJd291bGQgbm90IGJlICJlYXRlbiIgYnkgc2VkKQoKTW9uIEF1ZyAzMCAyMzo0MDowOCBQRFQgMTk5OSAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDIuODAgcmVsZWFzZWQKCQoJKiBzZWQvZXhlY3V0ZS5jKGRvX3N1YnN0KTogbGliL3JlZ2V4LmMocmVfc2VhcmNoXzIpIHNlZW1zIHRvCgl3YW50IG9uZSBleHRyYSBiYWNrcmVmZXJlbmNlIHJlZ2lzdGVyOyBodW1vciBpdC4KCgkqIHNlZC9yZWdleC5jKGNvbXBpbGVfcmVnZXgpOiB3b3JrIGFyb3VuZCBzb21lIG9kZCBhc3N1bXB0aW9ucwoJdGhhdCBsaWIvcmVnZXguYyhyZV9jb21waWxlX3BhdHRlcm4pIG1ha2VzIGFib3V0IG91ciBkZXNpcmVkCglSRSBzeW50YXguCgoJKiBjb25maWd1cmUuaW46IHR3ZWFrZWQgdmVyc2lvbiB0byAzLjAyLjgwOyBhZGRlZCBuZXcgZW50cmllcwoJdG8gdGhlIEFMTF9MSU5HVUFTIGRlZmluaXRpb24uCgoJKiBkb2Mvc2VkLjEsIGRvYy9zZWQudGV4aSwgQlVHUzogZXhwbGljaXRseSByZXF1ZXN0IHRoZSBvdXRwdXQKCW9mIHNlZCAtLXZlcnNpb24gaW4gYnVnLXJlcG9ydGluZyBpbnN0cnVjdGlvbnMuCgoJKiBkb2Mvc2VkLnRleGk6IHRoZSBvbGQgImluZm9ybWFsIHNlZGVycyBsaXN0IiBpcyBkZWFkOyBkb2N1bWVudAoJdGhlIG5ldyBzZWQtdXNlcnMgbWFpbGluZyBsaXN0IGluc3RlYWQgKHVuZGVyIE90aGVyIFJlc291cmNlcykuCgoKVGh1IEF1ZyAxOSAyMzoyNzo1NCBQRFQgMTk5OSAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoJCgkqIHNlZC9zZWQuaDogQWRkIGV4cGxpY2l0ICNpbmNsdWRlIG9mICJyZWdleC1zZWQuaCIgKHJhdGhlcgoJIHRoYW4gcmVseWluZyBvbiBwYXJlbnQgZmlsZSBkb2luZyBzbyk7IGNoYW5nZSB0aGUgImNtZF9yZWdleCIKCSBtZW1iZXIgb2Ygc2VkX2NtZDogbWFrZSBpdCBhIHBvaW50ZXIgKGluc3RlYWQgb2YgYSBzdHJ1Y3QpLAoJIGFuZCBjaGFuZ2UgaXRzIG5hbWUgdG8gY21kX3N1YnN0OyBhZGQgcHJvdG90eXBlcyBmb3IgbmV3bHkKCSBleHBvcnRlZCBmdW5jdGlvbnMgYmFkX3Byb2coKSwgbm9ybWFsaXplX3RleHQoKSwgY29tcGlsZV9yZWdleCgpLAoJIG1hdGNoX3JlZ2V4KCksIGFuZCByZWxlYXNlX3JlZ2V4KCk7IGRyb3AgcnhfdGVzdGluZyB2YXJpYWJsZS4KCgkqIHNlZC9jb21waWxlLmM6IG1vdmUgdGhlIGNvbXBpbGVfcmVnZXgoKSBmdW5jdGlvbiB0byByZWdleC5jOwoJZXhwb3J0IGJhZF9wcm9nKCkgYW5kIG5vcm1hbGl6ZV90ZXh0KCkgZnVuY3Rpb25zOyBlbGltaW5hdGUgdGhlCglyeF90ZXN0aW5nIGRlYnJpczsgcmVuYW1lIHRoZSBOT0xFQUtTIHN5bWJvbCB0byBtb3JlIGRlc2NyaXB0aXZlCglERUJVR19MRUFLUzsgbWFrZSBjbWRfcmVnZXggdG8gY21kX3N1YnN0IGZpeGVzIChzZWUgYWJvdmUpOwoJbWFrZSB1c2Ugb2YgbmV3bHkgYWJzdHJhY3RlZCByZWxlYXNlX3JlZ2V4KCkgZnVuY3Rpb24uCgoJKiBzZWQvZXhlY3V0ZS5jOiBhYnN0cmFjdCBvdXQgdGhlIHJlZ2V4IG1hdGNoaW5nIHRvCglyZWdleC5jOm1hdGNoX3JlZ2V4KCk7IE5PTEVBS1MgdG8gREVCVUdfTEVBS1MgY2hhbmdlOwoJY21kX3JlZ2V4IHRvIGNtZF9zdWJzdCBzdHJ1Y3R1cmUgbWVtYmVyIG5hbWUgY2hhbmdlLgoKCSogc2VkL2V4ZWN1dGUuYyhkb19zdWJzdCk6IHVzZSByZV9yZWdpc3RlcnMvcmVnb2ZmX3QgaW5zdGVhZCBvZgoJcmVnbWF0Y2hfdCB0byBob2xkIHRoZSBiYWNrcmVmZXJlbmNlIHJlZ2lzdGVycywgbWFrZSAib2Zmc2V0IgoJYWx3YXlzIGJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyAocmF0aGVyIHRoYW4KCWEgZGVsdGEgZnJvbSAic3RhcnQiKSwgZGVmZXIgc29tZSBtYXRjaGluZyBib29ra2VlcGluZyAoZS5nLiwKCW5vdF9ib2xfcCkgdG8gbWF0Y2hfcmVnZXgoKS4KCgkqIHNlZC9zZWQuYyhtYWluKTogbG9vc2UgcnhfdGVzdGluZyB2YXJpYWJsZTsgTk9MRUFLUwoJKGFrYSBERUJVR19MRUFLUykgY29kZSBhdHRlbXB0aW5nIHRvIHJlbGVhc2UKCV9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGlzIHByb2JsZW1hdGljLCBzbyBvbWl0IGl0LgoKCSogc2VkL3JlZ2V4LmM6IG5ldyBmaWxlIC0tLSBhYnN0cmFjdHMgb3V0IHRoZSBpbnRlcmZhY2UgdG8gdGhlCglyZWdleCBlbmdpbmUgc28gdGhhdCBsZXNzIGNvbmRpdGlvbmFsIGNvZGUgaXMgcmVxdWlyZWQgaW4KCWNvbXBpbGUuYyBhbmQgZXhlY3V0ZS5jLCBhbmQgc28gYXMgdG8gbWFrZSBhIGNoYW5nZSBvZiBlbmdpbmUKCWVhc2llcjsgaW1wbGVtZW50cyBjb21waWxlX3JlZ2V4KCkgKHdoaWNoIGxvb2tzIGFuIGF3ZnVsIGxvdAoJbGlrZSB0aGUgb25lIHRoYXQgdXNlZCB0byBsaXZlIGluIGNvbXBpbGUuYyksIG1hdGNoX3JlZ2V4KCksCglhbmQgKGlmIERFQlVHX0xFQUtTIGlzIHNldCkgcmVsZWFzZV9yZWdleCgpLgoKU3VuIEFwciAxOCAwNDo0MDo0NiBQRFQgMTk5OSAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL3NlZC5jKG1haW4pOiBjb25kaXRpb25hbGl6ZSBjYWxscyB0byBzZXRsb2NhbGUoKSBhbmQKCXRleHRkb21haW4oKSB0byBvbmx5IG9jY3VyIGlmIHRoZWlyIHN1cHBvcnQgaXMgbmVlZGVkL3dhbnRlZC4KClN1biBBcHIgMTggMDM6MDE6NDYgUERUIDE5OTkgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGJvb3RzdHJhcC5zaDogImZvbyB8fCBiYXIgJiYgYmF6IiB3YXMgbm90IGdyb3VwaW5nIGxpa2UgSQoJZXhwZWN0ZWQgKCJmb28gfHwgKGJhciAmJiBiYXopIikgdW5kZXIgYXQgbGVhc3Qgb25lIHNoZWxsLAoJc28gY2hhbmdlIHRoZSB0ZXN0IGZvciBhIHByZS1leGlzdGluZyBjb25maWcuaCBmaWxlIHRvIGFuCglpZiBzdGF0ZW1lbnQuCgoJKiBib290c3RyYXAuc2g6IGFkZGVkIC1EVVNFX1JFR0VYX0dOVV9IIG9wdGlvbiB0byB0aGUKCWNvbXBpbGVyIGludm9jYXRpb24sIHRvIGVuc3VyZSB0aGF0IHdlIGdldCBhIHVzYWJsZQoJcmVnZXggbGlicmFyeSBpbmNsdWRlZC4KClN1biBBcHIgMTggMDI6NTk6NDIgUERUIDE5OTkgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9zZWQuaCwgc2VkL3V0aWxzLmM6IGNvbmRpdGlvbmFsaXplZCBpbmNsdXNpb24gb2YgPGxpYmludGwuaD4KCXRvIG9jY3VyIG9ubHkgaWYgRU5BQkxFX05MUyBpcyBkZWZpbmVkLgoKU3VuIEFwciAxOCAwMTo0ODo0NSBQRFQgMTk5OSAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyh4b2ZhLG5vcm1hbGl6ZV90ZXh0LGNvbnZlcnRfbnVtYmVyKTogY2hhbmdlCgluYW1lIG9mIHhvZmEoKSBmdW5jdGlvbiB0byBjb252ZXJ0X251bWJlcigpOyBjaGFuZ2Ugc2VtYW50aWNzCgl0byBkbyBhbGwgb2YgdGhlIHdvcmsgb2YgdGhlIHRleHQtPm51bWJlciBjb252ZXJzaW9uLgoKCSogc2VkL2NvbXBpbGUuYyhub3JtYWxpemVfdGV4dCk6IGFkZCBuZXcgXGREREQgZGVjaW1hbAoJYW5kIFxvT09PIG9jdGFsIGVzY2FwZXMuCgpTdW4gTWFyIDI4IDIxOjA1OjA3IFBTVCAxOTk5ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvc2VkLmMobWFpbik6IGlmIE5PTEVBS1MgaXMgc2V0LCBmcmVlIHVwIGEgd29yZCB0aGF0Cgl0aGUgY2FsbCB0byB0ZXh0ZG9tYWluKCkgYWxsb2NhdGVkLgoKCSogc2VkL2V4ZWN1dGUuYyhyZWFkX2ZpbGVfbGluZSk6IHBsdWcgdXAgKG1pbm9yKSBtZW1vcnkgbGVhazoKCWlmIGJ1ZmZlci5hbGxvYz09MCB3ZSBtYXkgaGF2ZSBtYWxsb2MoKSdkIDEgYnl0ZSBhbnl3YXksCglzbyBiZSBzdXJlIHRvIEZSRUUoYnVmZmVyLnRleHQpIGJlZm9yZSBjYWxsaW5nIGxpbmVfaW5pdCgpOwoKRnJpIE1hciAyNiAxNjo1MjoxMCBQU1QgMTk5OSAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyhtYXRjaF9zbGFzaCk6IHNvbWV3aGVyZSBiZXR3ZWVuIDMuMDIKCWFuZCAzLjAyYSB3ZSBsb3N0IHRoZSBhYmlsaXR5IHRvIHVzZSBhIG5ld2xpbmUgYXMKCXRoZSBzLy8vIGRlbGltaXRlcjsgcmVzdG9yZSB0aGlzIGFiaWxpdHkuCgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcmVnZXgpOiBmb3JnZXQgYWJvdXQgdHJ5aW5nCgl0byBjYWNoZSB0aGUgY29tcGlsZWQgZm9ybSBvZiB0aGUgbGFzdCBSRSAtLS0gaXQKCWNhdXNlcyBtb3JlIHByb2JsZW1zIHRoYW4gaXRzIHdvcnRoLiAgV2Ugbm93IG9ubHkKCWNhY2hlIHRoZSBzb3VyY2UgZm9ybS4KCgkqIHRlc3RzdWl0ZS9oZWxwLmdvb2Q6IHVwZGF0ZSB0byByZWZsZWN0IG91dHB1dCBjb250YWluaW5nCgluZXcgb3B0aW9ucy4KClN1biBEZWMgIDYgMDA6NTE6MjMgUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC91dGlscy5jKGNrX2Z3cml0ZSk6IGZpeCBpMThuIGJ1ZyBvZiB1c2luZyBhIHByaW50ZgoJZnJhZ21lbnQgb2YgIml0ZW0lcyIgdG8gaGFuZGxlIHBsdXJhbCB0ZXh0LgoKTW9uIE5vdiAyMyAxMTowMzo0MCBQU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZG9jL3NlZC4xLCBkb2Mvc2VkLnRleGk6IHJhbiBpc3BlbGwgb3ZlciB0aGVzZQoJZmlsZXMgdG8gY2F0Y2ggdGhlIG1vcmUgb2J2aW91cyB0eXBvcy4uLgoKU3VuIE5vdiAgMSAwMDowOTowNyBQU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyhkb19saXN0KTogbWFrZSBhIGBsY21kX291dF9saW5lX2xlbicKCSgtLWxpbmUtbGVuZ3RoKSBvZiB6ZXJvIG1lYW4gImluZmluaXRlIGxlbmd0aCIsCglpLmUuLCAibmV2ZXIgd3JhcCIuCgpTYXQgT2N0IDMxIDIzOjA2OjUwIFBTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBleGVjdXRlLmMobWF0Y2hfYW5fYWRkcmVzc19wLHByb2Nlc3NfZmlsZXMpLAoJY29tcGlsZS5jKGNvbXBpbGVfcHJvZ3JhbSk6IGJhY2sgb3V0IHRoZSAiemVyby1hZGRyZXNzIgoJY2hhbmdlcyBvZiAxOTk4LTA5LTI3LiAgSXQgd2FzIGEgbmVhdCBpZGVhLCBidXQgdGhlcmUgYXJlCgl0b28gbWFueSBkYXJrIGNvcm5lcnMgd2hpY2ggZG9uJ3Qgd29yayB3ZWxsLiAgVGhlCglzcGVjaWFsIGNvZGUgZm9yIGhhbmRsaW5nIGxpbmUgcmFuZ2VzIHN0YXJ0aW5nIGF0CglhZGRyZXNzIHplcm8gKGZyb20gMTk5OC0wOC0zMSkgYXJlIHN0aWxsIHRoZXJlIHRob3VnaDoKCXRoaXMgc2VlbXMgdG8gd29yayBmaW5lIHdpdGggbm8gc3VycHJpc2VzLgoKU2F0IE9jdCAzMSAyMjoxODo1OSBQU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL3NlZC5jLCBzZWQvc2VkLmgsIHNlZC9leGVjdXRlLmM6IGFkZGVkIG5ldwoJYGxjbWRfb3V0X2xpbmVfbGVuJyB2YXJpYWJsZS4gIChJZGVhIHN1Z2dlc3RlZCBieQoJQ2FybG9zIEouIEcuIER1YXJ0ZSA8bDM4MDc2QGFsZmEuaXN0LnV0bC5wdD4uKQoJQWxzbyBhZGRlZCBBVE9JIG1hY3JvICh3aGljaCB1c2VzIHN0cnRvdWwoKSBpZiBhdmFpbGFibGUsCgl3aXRoIGZhbGwtYmFjayB0byBhdG9pKCkpLgoJKiBzZWQvc2VkLmMobWFpbik6IGF0dGVtcHQgdG8gdXNlIENPTFMgZW52aXJvbm1lbnQgdmFyaWFibGUKCXRvIHNldCBhIHJlYXNvbmFibGUgYGxjbWRfb3V0X2xpbmVfbGVuJzsgYWRkZWQgLWwvLS1saW5lLWxlbmd0aAoJY29tbWFuZC1saW5lIG9wdGlvbnMgdG8gc2V0IHRoZSBuZXcgYGxjbWRfb3V0X2xpbmVfbGVuJyBmbGFnLgoJKiBzZWQvc2VkLmModXNhZ2UpOiBkb2N1bWVudGVkIG5ldyAtbC8tLWxpbmUtbGVuZ3RoIG9wdGlvbnMuCgkqIHNlZC9leGVjdXRlLmMoZG9fbGlzdCk6IHVzZSBgbGNtZF9vdXRfbGluZV9sZW4nIHZhcmlhYmxlCglpbnN0ZWFkIG9mIGBMQ01EX09VVF9MSU5FX0xFTicuCgkqIHNlZC9leGVjdXRlLmM6IGRlbGV0ZWQgbm93IG9ic29sZXRlIExDTURfT1VUX0xJTkVfTEVOIGRlZmluZS4KCSogY29uZmlndXJlLmluOiBhZGRlZCBzdHJ0b3VsIHRvIHRoZSBBQ19DSEVDS19GVU5DUyBjYWxsLgoKU2F0IE9jdCAzMSAyMTozNzoxNyBQU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL3NlZC5jLCBzZWQvc2VkLmgsIHNlZC9leGVjdXRlLmM6IGFkZGVkIG5ldyBgZm9yY2VfdW5idWZmZXJlZCcKCWZsYWcuICAoSWRlYSBzdWdnZXN0ZWQgYnkgRnJhbmsgU3RyYXVzcyA8c3RyYXVzc0Blc2NhcGUuZGU+LikKCSogc2VkL3NlZC5jKG1haW4pOiBhZGRlZCAtdS8tLXVuYnVmZmVyZWQgY29tbWFuZC1saW5lIG9wdGlvbnMKCXRvIHNldCB0aGUgbmV3IGBmb3JjZV91bmJ1ZmZlcmVkJyBmbGFnLgoJKiBzZWQvc2VkLmModXNhZ2UpOiBkb2N1bWVudGVkIG5ldyAtdS8tLXVuYnVmZmVyZWQgb3B0aW9ucy4KCSogc2VkL2V4ZWN1dGUuYzogY2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUgYGlzX3R0eScgZmxhZyBpbiBzdHJ1Y3QKCWlucHV0IHRvIGEgbW9yZSBnZW5lcmljIGBub19idWZmZXJpbmcnOyBhbHNvIHJlbW92ZWQgSEFWRV9JU0FUVFkKCWNvbmRpdGlvbmFsIG9uIHRoaXMgbWVtYmVyLgoJKiBzZWQvZXhlY3V0ZS5jKHNsb3dfZ2V0bGluZSk6IHJlbW92ZWQgSEFWRV9JU0FUVFkgY29uZGl0b25hbAoJY29tcGlsYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KCSogc2VkL2V4ZWN1dGUuYyhvdXRwdXRfbGluZSk6IGlmIGZvcmNlX3VuYnVmZmVyZWQgaXMgc2V0LAoJdGhlbiBmb3JjZSBhIGZmbHVzaCgpIGV2ZW4gaWYgd3JpdGluZyB0byBzdGRvdXQuCgkqIHNlZC9leGVjdXRlLmMob3Blbl9uZXh0X2ZpbGUpOiBhZGRlZCBoYW5kbGluZyBvZiB0aGUKCW5ldyBgZm9yY2VfdW5idWZmZXJlZCcgZmxhZyBzbyB0aGF0IHNsb3dfZ2V0bGluZSgpCgl3aWxsIGFsd2F5cyBiZSB1c2VkIGZvciBpbnB1dC4KCSogc2VkL2V4ZWN1dGUuYyhyZWFkX2ZpbGVfbGluZSk6IGNoYW5nZWQgdGhlIChjb25kaXRpb25hbGx5Cgljb21waWxlZCkgdGVzdCBvZiBgaW5wdXQtPmlzX3R0eScgdG8gKHVuY29uZGl0aW9uYWxseSkKCXVzZSB0aGUgbmV3IHNwZWxsaW5nIGBpbnB1dC0+bm9fYnVmZmVyaW5nJy4KClRodSBPY3QgMTUgMTI6MDg6MDkgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogZGVsZXRlZCBBQ19BUkdfUFJPR1JBTSBjYWxsOyB0aGlzIGlzIGFscmVhZHkKCWRvbmUgZm9yIHVzIGJ5IEFNX0lOSVRfQVVUT01BS0UsIGFuZCB3ZSB3ZXJlIHdpbmRpbmcgdXAKCXdpdGggYSBkb3VibGVkLXRyYW5zZm9ybS4KClN1biBTZXAgMjcgMDE6NDI6NDIgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbXBpbGUuYyhjb21waWxlX3Byb2dyYW0pOiByZW1vdmUgc3BlY2lhbC1jYXNlIGNvZGUgZm9yIG1hdGNoaW5nCglhZGRyZXNzIHJhbmdlIHdpdGggYSBgMCcgYmVnaW5uaW5nLgoKCSogY29tcGlsZS5jKGNvbXBpbGVfYWRkcmVzcyk6IGNoYW5nZSBkZWZhdWx0IGFkZHJfbnVtYmVyIHRvCgliZSBhIHByYWdtYXRpY2FsbHkgaW1wb3NzaWJsZSBjb3VudFQgdmFsdWUsIGluc3RlYWQgb2YgemVyby4KCgkqIGV4ZWN1dGUuYzogc3BlbGwgbWFjcm8gUkVHTkVYRUMoKSB1bmNvbmRpdGlvbmFsbHkgaW5zdGVhZCBvZgoJcGxheWluZyB3aXRoIGNvbmRpdGlvbmFsIGRlZmluaXRpb24gb2YgcmVnbmV4ZWMoKSBtYWNyby4KCgkqIGV4ZWN1dGUuYyhtYXRjaF9hbl9hZGRyZXNzX3ApOiBhZGRlZCB0aGlyZCBhcmd1bWVudCAoYW5kIGNoYW5nZWQKCWNhbGxlcnMgaW4gbWF0Y2hfYWRkcmVzc19wKS4gIEFkZGVkIHNwZWNpYWwgY29kZSB0byBpZ25vcmUKCW5vbi1udW1lcmljIG1hdGNoZXMgd2hlbiBwcm9jZXNzaW5nICJsaW5lIHplcm8iLgoKCSogZXhlY3V0ZS5jKHByb2Nlc3NfZmlsZXMpOiBhZGRlZCBhICJsaW5lIHplcm8iIHBhc3MgdGhyb3VnaCB0aGUKCWNvbW1hbmRzIHNjcmlwdC4KClN1biBTZXAgMjcgMDA6MjA6NTMgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbXBpbGUuYyh4b2ZhLG5vcm1hbGl6ZV90ZXh0KTogbmV3IGZ1bmN0aW9ucy4KCSogY29tcGlsZS5jKGNvbXBpbGVfcmVnZXgpOiBjYWNoZSBsYXN0X2NvbXBpbGVkX3JlICh3aXRoIGl0cwoJYXNzb2NpYXRlZCBmbGFncyk7IGFkZCBQT1NJWExZX0NPUlJFQ1QgYmVoYXZpb3IgZm9yIGVtcHR5IFJFLgoJTWFrZSB1c2Ugb2YgdGhlIG5ldyBub3JtYWxpemVfdGV4dCgpIGZ1bmN0aW9uLgoJKiBjb21waWxlLmMoc2V0dXBfcmVwbGFjZW1lbnQpOiBNYWtlIHVzZSBvZiB0aGUgbmV3IG5vcm1hbGl6ZV90ZXh0KCkKCWZ1bmN0aW9uLgoKU2F0IFNlcCAyNiAyMjo1OToxMyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogbGliL3JlZ2V4LWdudS5oOiBhZGRlZCBtaXNzaW5nIHByb3RvdHlwZSBmb3IgcmVnbmNvbXAoKS4KCk1vbiBTZXAgMTQgMjA6NDc6MjMgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9zZWQuYyhtYWluKTogdXNlIEVYSVRfU1VDQ0VTUyBpbnN0ZWFkIG9mIDAsIGluIGNhc2UKCXdlIGFyZSBidWlsdCBvbiBhIHN5c3RlbSAoc3VjaCBhcyBWTVMpIHdoZXJlIEVYSVRfU1VDQ0VTUwoJaXMgZGlzdGluY3QgZnJvbSAwLgoKV2VkIFNlcCAgOSAyMjoxNzoyOCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL01ha2VmaWxlLmFtOiBhZGRlZCAtSS4uL2ludGwgdGhlIElOQ0xVREVTIGxpbmU7IGlmIHdlIGFyZQoJYnVpbGRpbmcgaW4gYSBkaXJlY3Rvcnkgb3V0c2lkZSB0aGUgc291cmNlIHRyZWUgYW5kIHRoZSBzeXN0ZW0KCXdlIGFyZSBidWlsZGluZyBvbiBkb2VzIG5vdCBoYXZlIGEgPGxpYmludGwuaD4gaGVhZGVyLCB0aGVuCgl0aGUgYnVpbGQgd2FzIGZhaWxpbmcsIGJlY2F1c2UgbGliaW50bC5oIGlzIGEgYnVpbGQtdGltZQoJY29uc3RydWN0ZWQgc291cmNlIGZpbGUuCgoJKiBjb25maWd1cmUuaW46IHR3ZWFrZWQgdmVyc2lvbiB0byBiZSAzLjAyYi4KCldlZCBTZXAgIDkgMTk6Mjg6MTQgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAyYSByZWxlYXNlZAoJCgkqIHNlZC9jb21waWxlLmMobWFya19zdWJzdF9vcHRzLHJlYWRfbGFiZWwsY29tcGlsZV9wcm9ncmFtKToKCXdoZXJldmVyIHdlIGFjY2VwdCBhIDsgYXMgYSBjb21tYW5kIHRlcm1pbmF0b3IsIGFsc28gYWxsb3cgYSB9IG9yCglhICMgdG8gYXBwZWFyLiAgKFRoaXMgYWxsb3dzIGZvciBsZXNzIGNsdXR0ZXJlZC1sb29raW5nIHNjcmlwdHMsCglzdWNoIGFzOiBzZWQgJy9mb28ve3g7R30nIChpbnN0ZWFkIG9mOiBzZWQgJy9mb28ve3g7Rzt9JykuKQoKV2VkIFNlcCAgOSAxODoxNzowNyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3JlZ2V4KTogdXNlIHJlZ25jb21wKCkgaW5zdGVhZAoJb2YgcmVnY29tcCgpLCBzbyB0aGF0IGEgc2NyaXB0IHdpdGggTlVMcyBpbiBpdHMgUkVzCgl3aWxsIHdvcmsgaW4gdGhlIGV4cGVjdGVkIG1hbm5lci4KCgkqIHNlZC9jb21waWxlLmMoQURETlVMLFJFR05DT01QKTogYWRkZWQgc3VwcG9ydCBtYWNyb3MKCWZvciBhYm92ZS4KCgkqIGxpYi9yZWdleC5jKHJlZ25jb21wLHJlZ2NvbXApOiBhZGRlZCByZWduY29tcCgpIGFuZAoJbWFkZSByZWdjb21wKCkgYSBzaW1wbGUgd3JhcHBlciBmdW5jdGlvbi4KCk1vbiBBdWcgMzEgMjE6NDg6MzAgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9zZWQuYyhjb21waWxlX3Byb2dyYW0pOiBpZiB0aGUgZmlyc3QgYWRkcmVzcyBvZgoJYSByYW5nZSBpcyB0aGUgbnVtYmVyIDAgKG9yIGEgMH5OIHNlcXVlbmNlKSwgc3RhcnQKCW91dCBpbiB0aGUgImExX21hdGNoZWQiIHN0YXRlLiAgVGhpcyBhbGxvd3Mgb25lCgl0byBtYXRjaCBhbiBpbml0aWFsIGNodW5rIG9mIGEgZmlsZSB3aXRob3V0IHVuZHVlCgljb252b2x1dGlvbnMgZm9yIGhhbmRsaW5nIHRoZSBjYXNlIHdoZXJlIHRoZSBtYXRjaAoJZm9yIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGhhcHBlbnMgdG8gYmUgdGhlIGZpcnN0CglsaW5lLgoKU3VuIEF1ZyAxNiAwMzozNDoyNSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyhzbmFyZl9jaGFyX2NsYXNzLG1hdGNoX3NsYXNoKTogc2ltcGxpZnkKCWhhbmRsaW5nIG9mICJwcmVtYXR1cmUgbmV3bGluZSIgZXJyb3IuIEFsc28sIGdldCB0aGUKCWxpbmUgbnVtYmVyIHJpZ2h0IGluIHRoZSBlcnJvciBtZXNzYWdlIGlmIHdlIGVuY291bnRlcgoJYSAicHJlbWF0dXJlIG5ld2xpbmUiIGR1cmluZyBjaGFyLWNsYXNzIHNuYXJmaW5nLgoKU3VuIEF1ZyAxNiAwMjo1OToyMCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYzogYWRkZWQgTl8oKSBtYXJrZXJzIGFuZCBjb3JyZXNwb25kaW5nIGdldHRleHQoKQoJKGVyLCBfKCkpIGNhbGxzLgoKCSogTWVyZ2VkIGluIGkxOG4gY29udHJpYnV0aW9uIGZyb20gRXJpY2sgQnJhbmRlcmhvcnN0Cgk8RXJpY2suQnJhbmRlcmhvcnN0QGFzbWwubmw+LiAgSGlzIENoYW5nZUxvZyBlbnRyeQoJZm9yIHRoZSBjaGFuZ2VzIEkndmUgaW5jb3Jwb3JhdGVkIHNvIGZhcjoKCjE5OTgtMDctMjQgIEVyaWNrIEJyYW5kZXJob3JzdCAgPEVyaWNrLkJyYW5kZXJob3JzdEBhc21sLm5sPgoJKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTLCBBTV9HTlVfR0VUVEVYVCk6IG5sCgkqIHNlZC97c2VkLmgsdXRpbHMuY306ICNpbmNsdWRlIDxsaWJpbnRsLmg+ICNkZWZpbmUgXyhTdHJpbmcpCglnZXR0ZXh0IChTdHJpbmcpCgkqIHNlZC9zZWQuYzogI2luY2x1ZGUgPGxvY2FsZS5oPgoJKiBwby9QT1RGSUxFUy5pbjogc2VkL3tjb21waWxlLGV4ZWN1dGUsc2VkLHV0aWxzfS5jCgkqIHJ1biBnZXR0ZXh0aXplIC1mCgkqIGFjY29uZmlnLmg6ICN1bmRlZiBMT0NBTEVESVIgRU5BQkxFX05MUyBIQVZFX0NBVEdFVFMKCUhBVkVfR0VUVEVYVCBIQVZFX0xDX01FU1NBR0VTIEhBVkVfU1RQQ1BZCgpGcmkgQXVnIDE0IDEzOjUyOjU3IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBNZXJnZWQgY29kZSBmcm9tIDMuMDIgd2l0aCBhIGJyYW5jaGVkIGRldmVsb3BtZW50Cgl0cmVlIGZyb20gbGF0ZSBNYXk7IHRoZSBmb2xsb3dpbmcgKG91dC1vZi1vcmRlcikKCWNoYW5nZWxvZyBlbnRyeSBpcyBmcm9tIHRoZSBicmFuY2hlZCB0cmVlLgoKU2F0IE1heSAzMCAxMjoyMzoxNiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYywgc2VkL2V4ZWN1dGUuYzogYWRkZWQgKGNvbmRpdGlvbmFsIG9uIE5PTEVBS1MgbWFjcm8pCgljb2RlIHRvIGZyZWUgYWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkuCgoJKiBzZWQvc2VkLmMsIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmM6IG11Y2ggc2h1ZmZsaW5nCglvZiBjb2RlIC0tLSBvcmRlcmVkIGZ1bmN0aW9ucyBzdWNoIHRoYXQgbm8gZm9yd2FyZAoJZGVjbGFyYXRpb25zIGFyZSBuZWNlc3NhcnksIGFuZCBwbGFjZWQgYWxsIHN0YXRpYyBwcm90b3R5cGVzCglpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGFjdHVhbCBmdW5jdGlvbiBkZWZpbml0aW9uLgoJVGhpcyBhY2NvbXBsaXNoZWQgdHdvIHRoaW5nczogZmlyc3QsIEkgZmluZCB0aGUgbmV3IG9yZGVyaW5nCglhIG1vcmUgbmF0dXJhbCB3YXkgdG8gcmVhZCB0aGUgY29kZSB0aGFuIHRoZSBwcmV2aW91cwoJb3JkZXJpbmcsIGFuZCBzZWNvbmQsIHRoZSBuZXcgb3JkZXJpbmcgZ2l2ZSB0aGUgY29tcGlsZXIKCWEgYmV0dGVyIG9wcG9ydHVuaXR5IHRvIGRpc2NvdmVyIGlubGluaW5nIHBvc3NpYmlsaXRpZXMuCgkoVGhlIG9kZCAicHJvdG90eXBlIGRlY2xhcmF0aW9uK29sZC1zdHlsZSBkZWZpbml0aW9uIgoJc3R5bGUgaXMgdXNlZCBiZWNhdXNlIEkgZmVlbCBpdCBpcyB0aGUgbGVhc3QgdWdseSB3YXkKCW9mIHN1cHBvcnRpbmcgSyZSMSBDIHdoaWxlIHN0aWxsIGdldHRpbmcgdGhlIGJlbmVmaXQgb2YKCXByb3RvdHlwZXMgd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuKQoKCSogc2VkL2Jhc2ljZGVmcy5oOiBhZGRlZCBNRU1DUFkoKSBtYWNybyB0byBoaWRlIHRoZSBWQ0FTVCgpcwoJdGhhdCBvdWdodCB0byBiZSB1c2VkIHdpdGggbWVtY3B5KCkuCgoJKiBzZWQvZXhlY3V0ZS5jOiBDaGFuZ2UgY2FsbHMgdG8gbWVtY3B5KCkgdG8gZ28gdGhyb3VnaCB0aGUKCW5ldyBNRU1DUFkoKSBtYWNyby4gIFZhcmlvdXMgcHJvdG90eXBlczogZWxpZGUgdmFyaWFibGUgbmFtZQoJaWYgaXQgZG9lcyBub3QgYWRkIGFueSBodW1hbi11c2VmdWwgZG9jdW1lbnRhcnkgaW5mb3JtYXRpb24KCXRvIHRoZSBiYXJlIHR5cGUuCgoJKiBzZWQvc2VkLmMobWFpbik6IFVwZGF0ZWQgY2FsbHMgdG8gY29tcGlsZV9zdHJpbmcoKSB0byBhZGQgdGhpcmQKCShsZW5ndGgpIGFyZ3VtZW50LiAgQ2hhbmdlZCBjYWxsIHRvIG9ic29sZXRlIGNsb3NlX2FsbF9maWxlcygpCgl0byBhIGNhbGwgdG8gdGhlIG5ldyBmaW5pc2hfcHJvZ3JhbSgpLgoKCSogc2VkL3NlZC5jKG1hcF9maWxlKTogQXR0ZW1wdCB0byBjbGVhbi11cCBob3cgInNpemUiIGdldHMKCWNhc3QgYW5kIHRlc3RlZDsgcmVtb3ZlIHNwdXJpb3VzIFNfSVNSRUcgdGVzdCAoanVzdCBsZXQKCW1tYXAoKSBmYWlsIGlmIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgdW5kZXJseWluZyBmaWxlIHR5cGUpLgoKCSogc2VkL3NlZC5jOiBEZWxldGVkIG9sZCBSWCBsaWJyYXJ5IHN0dWIgZGVjbGFyYXRpb25zLgoKCSogc2VkL3NlZC5jKG1hcF9maWxlLHVubWFwX2ZpbGUpOiBhZGRlZCBWQ0FTVCgpcyB0byB0aGUKCW1tYXAoKS9tdW5tYXAoKSBjYWxscy4KCgkqIHNlZC91dGlscy5jKGNrX2ZjbG9zZSk6IGFkZGVkIHN1cHBvcnQgZm9yIEFOU0kgQwoJZnVuY3Rpb25hbGl0eSB3aGVyZSBwYXNzaW5nIGEgTlVMTCBhcmd1bWVudCBtZWFucwoJdG8gZmNsb3NlKCkgX2FsbF8gb3BlbiBzdHJlYW1zLiAgKFdlbGwsIGFsbW9zdC4KCU9ubHkgY2xvc2VzIHN0cmVhbXMgd2hpY2ggd2VyZSBwcmV2aW91c2x5IGNrX2ZvcGVuKCllZCwKCWFzIEkgZG9uJ3QgY2FyZSB0byBmaWd1cmUgb3V0IGhvdyB0byBhdXRvY29uZi1kZXRlY3QKCXdoZXRoZXIgZmNsb3NlKE5VTEwpIGlzIHByb3Blcmx5IHN1cHBvcnRlZCBvbiBhIGdpdmVuCglwbGF0Zm9ybS4pCgoJKiBzZWQvc2VkLmg6IFJlbmFtZWQgYHN0cnVjdCB0ZXh0X2J1ZicgbWVtYmVyIGB0ZXh0X2xlbicKCXRvIGB0ZXh0X2xlbmd0aCcuICBBYnN0cmFjdGVkIG91dCBgZW51bSBhZGRyX3R5cGVzJwoJZnJvbSBgc3RydWN0IGFkZHInOyBhZGRlZCBuZXcgZW51bSB0eXBlcyBudW0yLHN0ZXAsc3RlcF9tb2Q7CglyZW5hbWVkIG1vZCB0byBudW1fbW9kLiAgRGUtdW5pb25pemVkIHRoZSByZWdleCxudW1iZXIsCgl7bW9kdWxvLW9mZnNldC9zdGVwfSBjb21wb25lbnRzIG9mIGBzdHJ1Y3QgYWRkcicsIGluCglhbnRpY2lwYXRpb24gb2YgbmV3IGZlYXR1cmVzLiAgQ2hhbmdlZCB0eXBlIG9mIGBhMicgbWVtYmVyCglvZiBgc3RydWN0IHNlZF9jbWQnOiBub3cgYSBwb2ludGVyIHRvIHNhdmUgc3BhY2UuCglBYnN0cmFjdGVkIG91dCBgc3RydWN0IHJlcGxhY2VtZW50JyBmcm9tIGBzdHJ1Y3Qgc3Vic3QnLgoJQ2xlYW5lZCB1cCBkZWNsYXJhdGlvbiBvZiBgeCcgdW5pb24gb2YgYHN0cnVjdCBhZGRyJy4KCUZpeGVkIHByb3RvdHlwZSBmb3IgY29tcGlsZV9zdHJpbmcoKS4gIFJlcGxhY2VkIHByb3RvdHlwZQoJZm9yIG9sZCBjbG9zZV9hbGxfZmlsZXMoKSB3aXRoIG9uZSBmb3IgbmV3IGZpbmlzaF9wcm9ncmFtKCkuCgoJKiBzZWQvc2VkLmgsIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmM6IGNoYW5nZWQgdG8KCXNpbXBsaWZ5IHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgYnJhbmNoZXMgYW5kCgljb21tYW5kIGJsb2Nrczogc2ltcGxpZmllZCBgc3RydWN0IHZlY3Rvcic7IG1hZGUKCWBzdHJ1Y3QgbGFiZWwnIGxvY2FsIHRvIGNvbXBpbGUuYzsgYHN0cnVjdCBzZWRfY21kJwoJd2FzIG1vZGlmaWVkIHRvIHN1cHBvcnQgYSBzaW1wbGVyIGRlc2lnbiBmb3IgYnJhbmNoZXMKCWFuZCBibG9ja3MuCgoJKiBzZWQvZXhlY3V0ZS5jOiBDb25kaXRpb25hbGx5IGFkZGVkIEFERE5VTCgpIG1hY3JvIHNvIHRoYXQKCXRoZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIGlzIG9ubHkgaW5jdXJyZWQgaWYgbnVsX2FwcGVuZCgpCglfbXVzdF8gYmUgY2FsbGVkLiAgTWFkZSBzb21lIGNvbW1lbnRhcnkgZWRpdHMsIGluY2x1ZGluZwoJdHlwbyBmaXhlcy4KCSogc2VkL2V4ZWN1dGUuYyhyZXNpemVfbGluZSk6IGNoYW5nZWQgc2VtYW50aWNzIG9mICJsZW4iIGFyZ3VtZW50Cglmcm9tICJhZGRpdGlvbmFsIGxlbmd0aCIgdG8gInRhcmdldCBsZW5ndGgiOyBtYWRlCglJTklUSUFMX0JVRkZFUl9TSVpFIGEgbWluaW11bSBhbGxvY2F0aW9uIGxlbmd0aC4KCSogc2VkL2V4ZWN1dGUuYyhzdHJfYXBwZW5kKTogYWRqdXN0ZWQgdG8gbmV3IHJlc2l6ZV9saW5lKCkKCXNlbWFudGljcy4KCSogc2VkL2V4ZWN1dGUuYyhsaW5lX2NvcHkpOiB1c2UgRlJFRSgpK01BTExPQygpIGluc3RlYWQgb2YKCVJFQUxMT0MoKSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb3B5aW5nIG9mIG9sZCB0ZXh0OyBhZGQgdGhlCgkidHJ5IGRvdWJsaW5nIGZpcnN0IiBhbGxvY2F0aW9uIGhldXJpc3RpYyAoanVzdCBsaWtlCglyZXNpemVfbGluZSgpIGRvZXMpLgoJKiBzZWQvZXhlY3V0ZS5jKGxpbmVfZXhjaGFuZ2UpOiBuZXcgZnVuY3Rpb24uCgkqIHNlZC9leGVjdXRlLmMobnVsX2FwcGVuZCk6IG1ha2Ugd2hvbGUgZnVuY3Rpb24gKG5vdCBqdXN0IGl0cwoJYm9keSkgY29uZGl0aW9uYWwgb24gSEFWRV9SRUdORVhFQyBtYWNybzsgYWRqdXN0IHRvIG5ldwoJcmVzaXplX2xpbmUoKSBzZW1hbnRpY3MuCgkqIHNlZC9leGVjdXRlLmMocmVhZF9tZW1fbGluZSk6IHVzZSBzdHJfYXBwZW5kKCkgaW5zdGVhZCBpZgoJY3VzdG9tIGluLWxpbmUgY29kZTsgY29tcGVuc2F0ZSBmb3IgbmV3IGRlZmF1bHQgb2YKCSJsaW5lLmNob21wZWQgPSAwIiBpbiByZWFkX3BhdHRlcm5fc3BhY2UoKSBieSBzZXR0aW5nCgkibGluZS5jaG9tcGVkID0gMSIgd2hlcmUgYXBwcm9wcmlhdGUuCgkqIHNlZC9leGVjdXRlLmMocmVhZF9maWxlX2xpbmUpOiB1c2UgZGlmZmVyZW50IHRyaWdnZXIgdG8KCWRldGVybWluZSB0aGF0ICJidWZmZXIiIGlzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkbyBhIGZ1bGwKCWluaXRpYWxpemF0aW9uIGlmIHJlcXVpcmVkOyB1c2Ugc3RyX2FwcGVuZCgpIGluc3RlYWQgb2YgY3VzdG9tCglpbi1saW5lIGNvZGUgaW4gdHdvIHBsYWNlczsgY29tcGVuc2F0ZSBmb3IgbmV3IGRlZmF1bHQgb2YKCSJsaW5lLmNob21wZWQgPSAwIiBpbiByZWFkX3BhdHRlcm5fc3BhY2UoKSBieSBzZXR0aW5nCgkibGluZS5jaG9tcGVkID0gMSIgd2hlcmUgYXBwcm9wcmlhdGUuCgkqIHNlZC9leGVjdXRlLmMob3V0cHV0X2xpbmUpOiBkb24ndCBib3RoZXIgY2FsbGluZyBja19md3JpdGUoKQoJaWYgbGVuZ3RoPT0wLgoJKiBzZWQvZXhlY3V0ZS5jKHJlbGVhc2VfYXBwZW5kX3F1ZXVlKTogbmV3IGZ1bmN0aW9uLgoJKiBzZWQvZXhlY3V0ZS5jKGR1bXBfYXBwZW5kX3F1ZXVlKTogdXNlIHJlbGVhc2VfYXBwZW5kX3F1ZXVlKCkKCWluc3RlYWQgb2YgaW4tbGluZSBlcXVpdmFsZW50LgoJKiBzZWQvZXhlY3V0ZS5jKHJlYWRfcGF0dGVybl9zcGFjZSk6IGNvbmRpdGlvbmFsaXplIGNhbGwgdG8KCWR1bXBfYXBwZW5kX3F1ZXVlKCkgZm9yIGFsbGVnZWQgcGVyZm9ybWFuY2UgcmVhc29uczsgY2hhbmdlZAoJZGVmYXVsdCAibGluZS5jaG9tcGVkIiB2YWx1ZSB0byBtb3JlIGNvbW1vbiAiMSIsIGFuZCBhZGRlZCBhbgoJYXNzaWdubWVudCBvZiAiMCIgd2hlcmUgdGhpcyBtYWRlIGEgZGlmZmVyZW5jZS4KCSogc2VkL2V4ZWN1dGUuYyhtYXRjaF9hbl9hZGRyZXNzX3ApOiBkZWxldGVkICJpc19hZGRyMl9wIgoJYXJndW1lbnQ7IHJlb3JkZXIgY2FzZXMgdG8gbWF0Y2ggb3JkZXIgaW4gZW51bSBkZWNsYXJhdGlvbjsgYWRkCgljYXNlcyBmb3IgbmV3ICJhZGRyX2lzX251bTIiLCAiYWRkcl9pc19zdGVwIiwgYW5kCgkiYWRkcl9pc19zdGVwX21vZCIgYWRkcmVzcyB0eXBlczsgYWx0ZXIgbnVsX2FwcGVuZCgpIGNhbGwgdG8gYmUKCXRocm91Z2ggQURETlVMKCkgbWFjcm87IGZpeCB0byBuZXcgc3RydWN0IG1lbWJlciBhbmQgZW51bQoJc3BlbGxpbmdzIGluIChmb3JtZXJseSBhZGRyX2lzX21vZCk7IGFkZHJfaXNfbnVtX21vZCBjYXNlLgoJKiBzZWQvZXhlY3V0ZS5jKG1hdGNoX2FkZHJlc3NfcCk6IHJlbW92ZSBvYmxzb2xldGUgdGhpcmQgYXJndW1lbnQKCXRvIGNhbGxzIHRvIG1hdGNoX2FkZHJlc3NfcCgpOyBhbHRlciByZWZlcmVuY2VzIHRvIHNlZF9jbWQKCW1lbWJlciBhMiB0byByZWZsZWN0IG5ldyBwb2ludGVyIHN0YXR1czsgYWRkIG5ldyBzdXBwb3J0IGZvcgoJYTItPmFkZHJfdHlwZSBhZGRyX2lzX3N0ZXAgYW5kIGFkZHJfaXNfc3RlcF9tb2QgY2FzZXMuCgkqIHNlZC9leGVjdXRlLmMoZG9fc3Vic3QpOiBhZGQgTk9MRUFLUyBzdXBwb3J0IGxvZ2ljOyB1c2UKCUFERE5VTCgpIHdyYXBwZXIgdG8gbnVsX2FwcGVuZCgpOyBzaW1wbGlmeSByZXBsYWNlbWVudAoJZXhwYW5zaW9uIGJ5IHVzaW5nIHRoZSBuZXcgInN0cnVjdCByZXBsYWNlbWVudCIgZGF0YSBzdHJ1Y3R1cmU7Cgl1c2UgbGluZV9leGNoYW5nZSgpIGZ1bmN0aW9uIGluc3RlYWQgb2YgY3VzdG9tIGluLWxpbmUgY29kZS4KCSogc2VkL2V4ZWN1dGUuYyhwcm9jZXNzX2ZpbGVzKTogYWRkZWQgTk9MRUFLUyBjb2RlLgoJKiBzZWQvZXhlY3V0ZS5jKGV4ZWN1dGVfcHJvZ3JhbSk6IHVwZGF0ZWQgaW1wbGVtZW50YXRpb25zCglvZiB0aGUgYHsnLCBgfScsIGA6JywgYGInLCBhbmQgYHQnIGNvbW1hbmRzOyBtb2RpZmllZAoJYGMnIGNvbW1hbmQgZ3JhdHVpdHVvc2x5OyBmaXhlZCBwb3RlbnRpYWwgbWVtb3J5CglvdmVycnVuIGluIGBEJyBjb21tYW5kLiAgU2ltcGxpZmllZCBob3cgbm9uc3RhbmRhcmQKCWBsb29wIGluY3JlbWVudHMnIHdvcmsuICBVc2UgbGluZV9leGNoYW5nZSgpIGluc3RlYWQgb2YKCWN1c3RvbSBpbi1saW5lIGNvZGUgaW4gJ3gnIGNhc2UuCgkqIHNlZC9leGVjdXRlLmNbRVhQRVJJTUVOVEFMX0RBU0hfTl9PUFRJTUlaQVRJT04gY29uZGl0aW9uYWwKCWNvZGVdOiB2YXJpb3VzIG1vZGlmaWNhdGlvbnMgaW50ZW5kZWQgdG8ga2VlcCB0aGlzCgljb2RlIGluIHN5bmMgd2l0aCB0aGUgbmV3IGNoYW5nZXMsIGJ1dCB0aGUgY29kZSBzdGlsbAoJcmV0YWlucyBpdHMgcHJldmlvdXMgYnVncy4KCgkqIHNlZC9jb21waWxlLmM6IHVzZSAiZXhpdChFWElUX0ZBSUxVUkUpIGluc3RlYWQgb2YgImV4aXQoMSkiLAoJanVzdCBpbiBjYXNlIHdlIGdldCBjb21waWxlZCB1bmRlciBWTVMuCgkqIHNlZC9jb21waWxlLmM6IENoYW5nZSB0eXBlIG9mIHByb2dfaW5mby5iYXNlIHRvIGRlY3JlYXNlIG5lZWRzCglmb3IgY2FzdGluZzsgdGhlbiBlbGltaWF0ZWQgdGhlIGNhc3RzIGluIHF1ZXN0aW9uIDstKS4KCSogc2VkL2NvbXBpbGUuYzogQWRkZWQgc3RydWN0IHNlZF9sYWJlbCAobW92ZWQgZnJvbSBzZWQuaCwgdGhlbgoJbW9kaWZpZWQpLgoJKiBzZWQvY29tcGlsZS5jOiBSZW1vdmVkICJyZWFkaXRfcCIgZmxhZyBmcm9tIHN0cnVjdCBmcF9saXN0LgoJKiBzZWQvY29tcGlsZS5jOiBBZGRlZCBtb2R1bGUtZ2xvYmFsICJibG9ja3MiIHZhcmlhYmxlLgoJKiBzZWQvY29tcGlsZS5jOiBFeHRyYWN0ZWQgbW9yZSBlcnJvci1tZXNzYWdlIGNvbnN0YW50IHN0cmluZ3MKCXRvIG5hbWVkIHZhcmlhYmxlcy4KCSogc2VkL2NvbXBpbGUuYyhjaGVja19maW5hbF9wcm9ncmFtKTogdXBkYXRlZCB0bwoJcmVmbGVjdCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB1c2UgbmV3IGZ1Y250aW9ucy4KCUFkZGVkIGNhbGwgdG8gY29tcGlsZV9yZWdleCgpIHRvIHJlbGVhc2UgdW5uZWVkZWQKCW1lbW9yeS4KCSogc2VkL2NvbXBpbGUuYzogZGVsZXRlZCBvYnNvbGV0ZSBuZXdfdmVjdG9yKCkgZnVuY3Rpb247CglhYnN0cmFjdGVkIG5ldyByZWFkX2xhYmVsKCkgZnVuY3Rpb247IGFic3RyYWN0ZWQgbmV3CglyZWxlYXNlX2xhYmVsKCkgZnVuY3Rpb247IGFkZGVkIG5ldyBgYmxvY2tzJyBtb2R1bGUtc3RhdGljCgl2YXJpYWJsZS4KCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3Byb2dyYW0pOiB1cGRhdGVkIGltcGxlbWVudGF0aW9ucwoJb2YgdGhlIGB7JywgYH0nLCBgOicsIGBiJywgYW5kIGB0JyBjb21tYW5kczsgbW9kaWZpZWQKCWluaXRpYWxpemF0aW9uIGZyb20gTlVMTCB2ZWN0b3IuCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9yZWdleCk6IGFkZGVkIG1lY2hhbmlzbSB0bwoJcmVsZWFzZSBtZW1vcnkgY29uc3VtZWQgYnkgdGhlIGNhY2hlZCBgbGFzdCcgUkUuCgkqIHNlZC9jb21waWxlLmMoc2V0dXBfanVtcCxzZXR1cF9sYWJlbCk6IHVwZGF0ZWQKCW5hbWUgKGZyb20gc2V0dXBfanVtcCB0byBzZXR1cF9sYWJlbCkgYW5kIHByb3RvdHlwZTsKCWNoYW5nZWQgYm9keSB0byByZWZsZWN0IGRhdGEgc3RydWN0dXJlIGNoYW5nZXMuCgkqIHNlZC9jb21waWxlLmM6IEFkZCBPUEVOX0JSQUNFIGFuZCBDTE9TRV9CUkFDRSBtYWNyb3MgZm9yIGJldHRlcgoJInZpIiBlZGl0aW5nIGJlaGF2aW9yLgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfZmlsZW5hbWUscmVhZF9maWxlbmFtZSxnZXRfd3JpdGVmaWxlKToKCVJlcGxhY2VkIGZ1bmN0aW9uIGNvbXBpbGVfZmlsZW5hbWUoKSB3aXRoIG1vcmUgb3J0aG9nb25hbCBmdW5jdGlvbnMKCXJlYWRfZmlsZW5hbWUoKSwgZ2V0X3dyaXRlZmlsZSgpLgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcmVnZXgpOiBBZGRlZCBhYmlsaXR5IHRvIGZyZWUgdGhlIHJlbWVtYmVyZWQKCSJsYXN0IFJFIiBpbiBjb21waWxlX3JlZ2V4IChmb3IgYmVuaWZpdCBvZiAiTk9MRUFLUyIgY29kZSkuCgkqIE1hZGUgYWRqdXN0bWVudHMgZGljdGF0ZWQgYnkgdGhlIGNoYW5nZSB0byBzdHJ1Y3Qgc2VkX2NtZCB3aGljaCBtYWRlCgl0aGUgYTIgbWVtYmVyIGEgcG9pbnRlci10by1hZGRyIGluc3RlYWQgb2YgYW4gYWRkci4KCSogc2VkL2NvbXBpbGUuYyhzZXR1cF9qdW1wLHJlYWRfbGFiZWwsc2V0dXBfbGFiZWwscmVsZWFzZV9sYWJlbCk6CglBZGRlZCBmdW5jdGlvbnMgcmVhZF9sYWJlbCgpLCBzZXR1cF9sYWJlbCgpLCByZWxlYXNlX2xhYmVsKCk7IGRlbGV0ZWQKCWZ1bmN0aW9uIHNldHVwX2p1bXAoKS4KCSogc2VkL2NvbXBpbGUuYyhuZXdfcmVwbGFjZW1lbnQsc2V0dXBfcmVwbGFjZW1lbnQscmVsZWFzZV9yZXBsYWNlbWVudCk6CgluZXcgZnVuY3Rpb25zLgoJKiBzZWQvY29tcGlsZS5jOiBBZGp1c3RlZCB0byBuZXcgc3BlbGxpbmcgb2YgdGV4dF9idWYgbWVtYmVyCgkoInRleHRfbGVuZ3RoIiBpbnN0ZWFkIG9mICJ0ZXh0X2xlbiIpLgoJKiBzZWQvY29tcGlsZS5jKG5ld192ZWN0b3IpOiBkZWxldGVkIGZ1bmN0aW9uLiAgKER1ZSB0byBuZXcgaGFuZGxpbmcKCW9mIGJsb2Nrcywgb25seSBvbmUgaW5zdGFuY2UgcmVtYWluZWQsIGFuZCB0aGF0IG9uZSB3YXMganVzdCBhcwoJY2xlYXIgaW4tbGluZWQuKQoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfc3RyaW5nKTogQWRkZWQgdGhpcmQgYXJndW1lbnQ7IGl0IG5vdwoJdGFrZXMgYSBjb3VudGVkIHN0cmluZyBpbnN0ZWFkIG9mIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfZmlsZSk6IGFkZGVkIHZhcmlhYmxlICJtYXBfYmFzZSIgdG8KCWNvbXBlbnNhdGUgZm9yIG5ldyB0eXBlIG9mIHByb2dfaW5mby5iYXNlLgoJKiBzZWQvY29tcGlsZS5jKGNoZWNrX2ZpbmFsX3Byb2dyYW0pOiByZWZsZWN0IG5ldyBzdHlsZSBvZgoJaGFuZGxpbmcgYmxvY2tzIGFuZCBzdHJ1Y3Qgc2VkX2xhYmVsLgoJKiBzZWQvY29tcGlsZS5jKGNsb3NlX2FsbF9maWxlcyxmaW5pc2hfcHJvZ3JhbSk6IHJlcGxhY2VkIGZ1bmN0aW9uCgljbG9zZV9hbGxfZmlsZXMoKSB3aXRoIG1vcmUgZ2VuZXJpYyBmaW5pc2hfcHJvZ3JhbSgpLgoJKiBzZWQvY29tcGlsZS5jKHJlYWRfdGV4dCk6IGFkZGVkIG5ldyBmZWF0dXJlOiBpZiBmaXJzdCBub24tYmxhbmsKCWNoYXJhY3RlciBhZnRlciB0aGUge2EsaSxjfSBjb21tYW5kIGNoYXJhY3RlciBpcyBub3QgIlwiLCB0aGVuCgl1c2UgdGhlIHRyYWlsaW5nIHRleHQgb24gdGhhdCBsaW5lIGFzIHRoZSAoZmlyc3QpIGxpbmUgb2YgdGV4dC4KCUFsc28gYWRkZWQgY29kZSBjb25kaXRpb25hbCBvbiBOT19JTlBVVF9JTkRFTlQgdG8gc3VwcG9ydCB0aGUKCSJmZWF0dXJlIiBvZiBzdHJpcHBpbmcgbGVhZGluZyBibGFua3MgZnJvbSBlYWNoIGlucHV0IGxpbmU7IEkKCWRvIG5vdCByZWFkIFBPU0lYIGFzIHBlcm1pdHRpbmcgdGhpcyBiZWhhdmlvciwgbm9yIGRvIEkgdGhpbmsKCWl0IGlzIGEgZ29vZCBpZGVhLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgc29tZSBoYXZlCglhcmd1ZWQgdGhhdCB0aGlzIGJsYW5rLXN0cmlwcGluZyBpcyB0aGUgImNvcnJlY3QiIGJlaGF2aW9yLCBzbwoJSSBvZmZlciB0aGVtIHRoZSBvcHRpb24gb2YgYnVpbGRpbmcgdGhlaXIgc2VkIHRoYXQgd2F5LgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfYWRkcmVzcyk6IGFkZGVkIHh4eCwrbiBhbmQgeHh4LH5uIGFkZHJlc3Npbmc7CglzaW1wbGlmaWVkIGNvZGUuCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9wcm9ncmFtKTogYWRkZWQgQkFEX1BMVVMgZXJyb3IgZGV0ZWN0aW9uOwoJYWRqdXN0ZWQgdG8gbmV3IGN1cl9jbWQtPmEyIHBvaW50ZXIgc3RhdHVzOyBhZGRlZCBhZGRyX2lzX251bTIKCWRldGVjdGlvbjsgZGVsZXRlZCBwb2ludGxlc3MgImEyLT5hZGRyX251bWJlciA8IGExLmFkZHJfbnVtYmVyIgoJY2hlY2sgKGFkZHJfaXNfbnVtMiBzZW1hbnRpY3MgaGFuZGxlIHRoaXMganVzdCBmaW5lKTsgdXBkYXRlZAoJY29kZSBmb3IgJ3snLCAnfScsICc6JywgJ2InLCBhbmQgJ3QnIHRvIHJlZmxlY3QgbmV3IGRlc2lnbgoJb2YgYnJhbmNoIGhhbmRsaW5nLCBpbmNsdWRpbmcgbWFraW5nIHVzZSBvZiBuZXcgZnVuY3Rpb25zCglyZWxhdGVkIHRvIHRoZSBuZXcgZGVzaWduKTsgYWRkZWQgc3VwcG9ydCBmb3IgZmVhdHVyZSBhbHJlYWR5CgltZW50aW9uZWQgaW4gcmVhZF90ZXh0KCkgd2hlcmUge2EsaSxjfSBjb21tYW5kcyBhcmUgYWJsZSB0byBoYXZlCgl0aGVpciB0ZXh0IHN0YXJ0IG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGNvbW1hbmQ7IGNoYW5nZWQgc29tZQoJZXJyb3IgbWVzc2FnZXMgKGhvcGVmdWxseSBmb3IgdGhlIGJldHRlcik7IGxvY2FsaXplZCB2YXJpYWJsZXMKCXNwZWNpZmljIHRvIGluZGl2aWR1YWwgY29tbWFuZHMgKHBhcnRpY3VsYXJseSAncycgYW5kICd5Jyk7CgltYWRlIHVzZSBvZiBuZXcgc2V0dXBfcmVwbGFjZW1lbnQoKSBmdW5jdGlvbiBpbiAncycgY29tbWFuZC4KCk1vbiBBdWcgMTAgMTk6NTg6NDkgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGRvYy9zZWQudGV4aSwgZG9jL3NlZC4xOiBzZWR0dXQxMC50eHQgaXMgYXBwYXJlbnRseSBkZWFkLgoJRGVsZXRlZCByZWZlcmVuY2VzIHRvIGl0IGFuZCBhZGRlZCBhIHBvaW50ZXIgdG8KCWh0dHA6Ly9zZWRlcnMuaWNoZW1lLm9yZy90dXRvcmlhbHMvLiAgKFBvaW50ZWQgb3V0IGJ5CglKb2VyZyBIZWl0a29ldHRlciA8am9lcmdAZGUudXUubmV0Pi4pCgpTYXQgQXVnICA4IDE4OjExOjU3IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBkamdwcC9jb25maWcuYnRtOiBwZXIgcmVxdWVzdCBieSBNaWNoZWwgZGUgUnVpdGVyCgkgPG1kcnVpdGVyQGNzLnZ1Lm5sPiwgYWRkZWQgIiUxIiB0byAiJTkiIHBhcmFtZXRlcnMuCgpNb24gQXVnICAzIDExOjQ0OjU1IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBkb2Mvc2VkLnRleGk6IGZpeCBhIGNvdXBsZSBvZiB0eXBvcy4gIChTdWJtaXR0ZWQgYnkKCUFsYW4gTW9kcmEgPGFsYW5Ac3ByaS5sZXZlbHMudW5pc2EuZWR1LmF1Pi4pCgpTYXQgQXVnIDAxIDE3OjQ5OjA2IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMiByZWxlYXNlZAoJCgkqIGNvbmZpZ3VyZS5pbjogQmVjYXVzZSBvZiBjb2RlIGNoYW5nZSBpbiAzLjAxYSwgYnVtcCB0aGUKCW1pbm9yIHJldmlzaW9uIG51bWJlciBmb3IgdGhlIHJlbGVhc2UgKG5vdyAzLjAyKS4KClN1biBKdWwgMjYgMTY6MDc6NTUgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxYSByZWxlYXNlZAoJCgkqIHNlZC9jb21waWxlLmMoc25hcmZfY2hhcl9jbGFzcyk6ICB0aGUgUE9TSVggY2hhci1jbGFzcwoJcmVjb2duaXRpb24gbG9vcCBmb3Jnb3QgdG8gdXBkYXRlIGl0cyBjb25jZXB0IG9mICJwcmV2IgoJYXMgdGhlIGxvb3AgcHJvZ3Jlc3NlZC4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogVGhlIGRlcGVuZGVuY3kgb2YgdmVyc2lvbi5nb29kCglvbiBbdGVzdHN1aXRlL11NYWtlZmlsZSBpbnRyb2R1Y2VkIGluIHRoZSBwcmV2aW91cwoJcmVsZWFzZSB3YXMgYm90Y2hlZCAtLSBpdCByZWZlcnJlZCB0byAiTWFrZWZpbGUiCglhcyAiJChzcmNkaXIpL01ha2VmaWxlLCB3aGljaCBvZiBjb3Vyc2UgZG9lc24ndCB3b3JrCglpZiB5b3UgYXJlbid0IGJ1aWxkaW5nIGluIHRoZSBzb3VyY2UgdHJlZS4KCgkqIGRqZ3BwL01ha2VmaWxlLmFtOiBhZGQgZm9yZ290dGVuICJjb25maWcuYnRtIiBFWFRSQV9ESVNUCgltZW1iZXIuCgoJKiBjb25maWd1cmUuaW46IHVwZGF0ZSB2ZXJzaW9uLgoKVHVlIEp1bCAyMSAwNjowNDo0MiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEgcmVsZWFzZWQKCQoJKiBjb25maWd1cmUuaW46IG1hcmsgYXMgcmVsZWFzZSB2ZXJzaW9uIQoKCSogTWFrZWZpbGUuYW06IGFkZCBCVUdTIGFuZCBUSEFOS1MgdG8gdGhlIEVYVFJBX0RJU1QgdGFyZ2V0LgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBhZGQgZGVwZW5kZW5jeSBvZiB2ZXJzaW9uLmdvb2QKCW9uIFt0ZXN0c3VpdGUvXU1ha2VmaWxlLgoKTW9uIEp1bCAyMCAxMjozODoxMCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZGpncHAvY29uZmlnLmJ0bTogTmV3IGZpbGUgdG8gc3VwcG9ydCB0aGUgNERPUyBhbHRlcm5hdGl2ZQoJdG8gY29tbWFuZC5jb20uICAoU3VtaXR0ZWQgYnkgRWxpIFphcmV0c2tpaSBvbiBiZWhhbGYgb2YKCWFuIGFub255bW91cyA0RE9TIHVzZXIuKQoKRnJpIEp1bCAxNyAwMDozNjozNCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTE4IHJlbGVhc2VkCgkKCSogZGpncHAvY29uZmlnLnNlZDogbXkgInR3ZWFrIiBpbiBiZXRhMTcgd2FzIHRvbwoJaGFzdGlseSBjb25zaWRlcmVkLiAgQmFjayBpdCBvdXQuCgoJKiBjb25maWd1cmUuaW46IHVwZGF0ZSB0byBiZXRhMTguCgpXZWQgSnVsIDE1IDAxOjAyOjE1IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhMTcgcmVsZWFzZWQKCQogICAgICAgICogZGpncHAvY29uZmlnLnNlZDogdHdlYWsvc2ltcGxpZnkgcywsLCBjb21tYW5kcyBhdCBlbmQuCgoJKiBjb25maWd1cmUuaW46IHVwZGF0ZSB0byBiZXRhMTcuCgoxOTk4LTA3LTE0ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogZGpncHAvY29uZmlnLnNlZDogRWRpdCBhbGwgdGhlIG9jY3VyZW5jZXMgb2YgPSBpbiB0aGUgY29udGV4dCBvZgoJLS1vcHRpb249dmFsdWUsIGluY2x1ZGluZyBpbiB0aGUgaGVscCBtZXNzYWdlcywgaW50bwoJLS1vcHRpb246dmFsdWUsIGJ1dCBsZWF2ZSBET1Mtc3R5bGUgZDovZm9vL2JhciBmaWxlIG5hbWVzIGludGFjdC4KCgkqIGRqZ3BwL2NvbmZpZy5iYXQ6IFVzZSAtLXNyY2Rpcjpmb28gaW5zdGVhZCBvZiAtLXNyY2Rpcj1mb28uCgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKGhlbHAsIHZlcnNpb24pOiBSZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCglleHBsaWNpdGx5LCBkb24ndCB1c2Ugc2hlbGwgd2lsZGNhcmRzLCBzbyBpdCB3b3JrcyB1bmRlciBET1MgOCszCglsaW1pdHMuCgpUaHUgSnVsICA5IDEzOjA2OjAwIFBEVCAxOTk4IDE2OjUxOjQzIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhMTYgcmVsZWFzZWQKCQoJKiBkamdwcC9jb25maWcuc2VkOiB0d2VhayB0aGUgY29uZmlndXJlIHNjcmlwdCB0byB1c2UgOgoJaW5zdGVhZCBvZiA9IGZvciAtLXdpdGgtZm9vPWJhciBvcHRpb24gcGFyc2luZywgdG8KCXdvcmsgYXJvdW5kIHByb2JsZW1zIHdpdGggaG93IGNvbW1hbmQuY29tIGhhbmRsZXMgPXMuCgpXZWQgSnVsICA4IDE2OjUxOjQzIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBkamdwcC9jb25maWcuYmF0OiBjb3JyZWN0IGluYXBwcm9wcmlhdGUgYmVoYXZpb3IgdGhhdCBJCglpbnRyb2R1Y2VkIGluIHRoZSBiZXRhMTMgY2hhbmdlcyAoaWYgZmlyc3QgYXJndW1lbnQgaXMKCWEgZGlyZWN0b3J5LCBpdCBuZWVkcyB0byBiZSBoYW5kbGVkIGFzIHRoZSAtLXNyY2RpcikuCgoJKiB0ZXN0c3VpdGUvdmVyc2lvbi5naW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2QsIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKCUFkZCB0YXJnZXQgdG8gYXV0b21ha2UgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgdmVyc2lvbi5nb29kCglmcm9tIChuZXcgZmlsZSkgdmVyc2lvbi5naW4sIGluc3RlYWQgb2YgaGFuZC1lZGl0aW5nIHRoZSB2ZXJzaW9uCgludW1iZXIgZWFjaCByZWxlYXNlLgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBtaXNjZWxsYW5lb3VzIGdyYXR1aXRpb3VzIHR3ZWFrYWdlIC0tCgltYWlubHkgYWRkaW5nICQoUk0pIGNvbW1hbmRzIGp1c3QgYmVjYXVzZSBJIGRpZG4ndCBsaWtlCglsZWF2aW5nIHRoZSB0bXAqIGZpbGVzIGZyb20gc3VjY2Vzc2Z1bCBydW5zIGxheWluZyBhYm91dC4KCUFsc28gc29tZSBlZGl0b3JpYWwgY29tbWVudHMuCgoJKiBjb25maWd1cmUuaW46IHVwZGF0ZSB0byBiZXRhMTYuICBBZGRlZCBhbmQgY29tbWVudGVkIG91dAoJZXhwZXJpbWVudCB3aXRoIEFDX09VVFBVVCgpIGZvciB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kLgoJQWRkZWQgY29kZSB0byBwcm9wZXJseSBoYW5kbGUgYmFyZSAod2l0aG91dCA9eHh4KQoJIi0td2l0aC1yZWdleCIgb3B0aW9uLgoKU3VuIEp1bCAgNSAyMTowMjoxNiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTE1IHJlbGVhc2VkCgkKCSogc2VkL3V0aWxzLmMoY2tfZmZsdXNoKSwgc2VkL3V0aWxzLmgsIHNlZC9leGVjdXRlLmMob3V0cHV0X2xpbmUpOgoJYWRkIGFuZCB1c2UgbmV3IGNrX2ZmbHVzaCgpIGZ1bmN0aW9uLgoKU3VuIEp1bCAgNSAxNToyMzo0NyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyhiYWRfcHJvZyk6IGFkZCBtb3JlIGRldGFpbCB0byBlcnJvcgoJbWVzc2FnZXMgYWJvdXQgLWUgc3RyaW5ncy4KClN1biBKdWwgIDUgMTQ6Mjk6NDUgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMobWFya19zdWJzdF9vcHRzKSwgc2VkL2V4ZWN1dGUuYyhkb19zdWJzdCk6CglEZWZpbmUgYmV0dGVyIHNlbWFudGljcyBmb3IgaW50ZXJhY3Rpb24gb2YgdGhlIGBnJyBmbGFnCgl3aXRoIGEgbnVtZXJpYyBmbGFnIHRvIHRoZSBzLy8vIGNvbW1hbmQuICBJdCB1c2VkIHRvCgliZSB0aGF0IHRoZSBgZycgY29tbWFuZCBzaWV6ZWQgY29udHJvbDsgbm93IHRoZSBmaXJzdAoJKG51bWJlci0xKSBtYXRjaGVzIGFyZSBza2lwcGVkIGFuZCB0aGVuIGBnJyBnZXRzIGNvbnRyb2wKCWFmdGVyIHRoYXQuICAoSXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhpcyBpcyBhIGZlYXR1cmUKCXNuZWFraW5nIGluIGR1cmluZyBsYXRlIGJldGEsIG9yIGEgYnVnIGZpeDsgdGhlIGNoYW5nZXMKCWludm9sdmVkIHdlcmUgdHJpdmlhbCwgc28gSSBkZWNpZGVkIHRvIHRyZWF0IGl0IGFzIGEgYnVnCglmaXguKQoKCSogY29uZmlndXJlLmluLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiB1cGRhdGUgdG8gYmV0YTE1LgoKU2F0IEp1bCAgNCAwOTo1NDo0NSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTE0IHJlbGVhc2VkCgkKCSogc2VkL2Jhc2ljZGVmcy5oLCBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jOgoJcGVyIHJlcG9ydCBieSAiS2F2ZWggUi4gR2hhemkiIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PiwKCWNvcGllZCB0aGUgSVNYWFggbWFjcm9zIGZyb20gbGliL3JlZ2V4LmMgc28gdGhhdAoJc2lsbHkgbWFjaGluZXMgd2hpY2ggcmVxdWlyZSBpc2FzY2lpKCkgdG8gYmUgdHJ1ZQoJYmVmb3JlIHRoZSBvdGhlciBpc1hYWCgpIG1hY3JvcyBhcmUgdmFsaWQgd2lsbAoJc3RpbGwgd29yay4KCgkqIGNvbmZpZ3VyZS5pbiwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvIGJldGExNC4KClRodSBKdWwgIDIgMjM6NDY6MTMgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGExMyByZWxlYXNlZAoJCgkqIGNvbmZpZ3VyZS5pbiwgYWNjb25maWcuaDogc2V0IFVTRV9SRUdFWF9HTlVfSCBzeW1ib2wgaWYgd2UKCWFyZSBnb2luZyB0byBiZSB1c2luZyBsaWIvcmVnZXguYy4KCgkqIGxpYi9NYWtlZmlsZS5hbSwgbGliL3JlZ2V4LmgsIGxpYi9yZWdleC1nbnUuaCwgbGliL3JlZ2V4LmM6CglyZW5hbWUgbGliL3JlZ2V4LmggdG8gbGliL3JlZ2V4LWdudS5oLCBzbyB0aGF0IHRob3NlIHdobwoJY2hvb3NlIHRvIHVzZSBhIGRpZmZlcmVudCByZWdleCBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdAoJcGljay11cCBsaWIvcmVnZXguaCB3aGVuIGRvaW5nICIjaW5jbHVkZSA8cmVnZXguaD4iLgoKCSogc2VkL3JlZ2V4LXNlZC5oLCBzZWQvTWFrZWZpbGUuYW0sIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmMsCglzZWQvc2VkLmM6IGNyZWF0ZSBzZWQvcmVnZXgtc2VkLmggd2hpY2ggYWN0cyBhcyBhIHN3aXRjaAoJdG8gY2hvb3NlIGVpdGhlciBsaWIvcmVnZXguaCBvciB0aGUgdXNlci1zdXBwbGllZCA8cmVnZXguaD4sCglkZXBlbmRpbmcgb24gdGhlIHZhbHVlIHBhc3NlZCB0byBjb25maWd1cmUncyAtLXdpdGgtcmVnZXg9CglvcHRpb24uCgpUaHUgSnVsICAyIDE3OjIyOjMxIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IGlmIGFuIGFsdGVybmF0aXZlIC0td2l0aC1yZWdleD0gaXMgZ2l2ZW4sCglkbyBhbiBBQ19DSEVDS19GVU5DUyhyZWduZXhlYyByZWdleGVjKSB0byBlbnN1cmUgdGhhdAoJYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBhdmFpbGFibGUuICBBbHNvLAoJcGFyYWxsZWwgY2hhbmdlcyBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KCgkqIHNlZC9leGVjdXRlLmMsIGFjY29uZmlnLmg6IHJldGlyZSB1c2Ugb2YgdGhlIFdJVEhfUkVHTkVYRUMKCXRlc3QgbWFjcm8gaW4gZmF2b3Igb2YgSEFWRV9SRUdORVhFQyB0ZXN0IG1hY3JvIGNyZWF0ZWQKCWJ5IGFib3ZlIGNoYW5nZS4KCgkqIGRqZ3BwL2NvbmZpZy5iYXQ6IFBsYXkgZ2FtZXMgdG8gaGFuZGxlICJpbnN0YWxsLXNoIiwKCURPUyBmaWxlbmFtZSByZXN0cmljdGlvbnMsIEdOVSBtYWtlZmlsZSBkZWZhdWx0IHJ1bGVzLAoJYW5kIGdldHRpbmcgYSBjb3JyZWN0IHJ1biBvZiAiY29uZmlndXJlIiAoY29udHJpYnV0ZWQKCWJ5IEVsaSBaYXJldHNraWkgPGVsaXpAaXMuZWx0YS5jby5pbD4pLgoKCSogZGpncHAvTWFrZWZpbGUuYW0sIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSwgdGVzdHN1aXRlL01ha2VmaWxlLmluLAoJTWFrZWZpbGUuYW0sIGNvbmZpZ3VyZS5pbjogVmFyaW91cyBhdXRvbWFrZSB0YXJnZXRzCgkoc3VjaCBhcyBkaXN0Y2hlY2spIGZhaWxlZCB3aXRoIG9sZCBjb25maWd1cmF0aW9uLgoJVGhlIHNpbXBsZXN0IHNvbHV0aW9uIHdhcyB0byBqdXN0IGFkZCB0aGVzZSAuYW0KCWZpbGVzLiAgKFRoZSB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4gd2FzIGp1c3QgcmVuYW1lZCB0bwoJdGVzdHN1aXRlL01ha2VmaWxlLmFtLCB0aGVuIHZhcmlvdXMgcmVkdW5kYW50IGRlZmluZXMgYW5kCgl0YXJnZXRzIHdlcmUgZGVsZXRlZC4pICAoUmVwb3J0ZWQgYnkgRXJpY2sgQnJhbmRlcmhvcnN0Cgk8RXJpY2suQnJhbmRlcmhvcnN0QGFzbWwubmw+LikKCgkqIHRlc3RzdWl0ZS9kYy5nb29kLCB0ZXN0c3VpdGUvZGMuaW5wOiBwZXIgc3VnZ2VzdGlvbiBmcm9tCglHcmVnIFViYmVuIDxnc3VAcm9tdWx1cy5uY3NjLm1pbD4sIHVzZSBiYXNlIDE2IG91dHB1dCB0bwoJZXhlcmNpc2UgZXZlbiBtb3JlIG9mIHRoZSBkYy5zZWQgc2NyaXB0LgoKCSogY29uZmlndXJlLmluLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiB1cGRhdGUgdG8gYmV0YTEzLgoKU3VuIEp1biAyOCAxNjoyMTowMiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTEyIHJlbGVhc2VkCgkKCSogZG9jL3NlZC50ZXhpOiBBdm9pZCBtaXhpbmcgQGNvZGUgYW5kIEBzYW1wIG1hcmt1cHMgdG9nZXRoZXI6Cgl0aGV5IGxvb2sgdWdseSBpbiBJbmZvLiAgVXNlIEB1cmwgYW5kIEBlbWFpbCBpbnN0ZWFkIG9mIEBleGFtcGxlLgoJQWRkIGluZGV4ZXMuICAoQmFzaXMgb2YgY2hhbmdlcyBjb250cmlidXRlZCBieSBFbGkgWmFyZXRza2lpLikKCgkqIGRqZ3BwLyosIE1ha2VmaWxlLmFtOiBhZGQgc3VwcG9ydCBmb3IgdGhlIERKR1BQIGNvbXBpbGVyLAoJY29udHJpYnV0ZWQgYnkgRWxpIFphcmV0c2tpaSA8ZWxpekBpcy5lbHRhLmNvLmlsPi4KCgkqIGRjLnNlZCwgdGVzdHN1aXRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvZGMuaW5wLCB0ZXN0c3VpdGUvZGMuZ29vZDoKCWFkZGVkIHRoaXMgcmVtYXJrYWJsZSBzY3JpcHQsIHdyaXR0ZW4gYW5kIGNvbnRyaWJ1dGVkCglieSBHcmVnIFViYmVuIDxnc3VAcm9tdWx1cy5uY3NjLm1pbD4sIGJvdGggYXMgYSB3b3JrIG9mCglhcnQgZm9yIGdlbmVyYWwgYWRtaXJhdGlvbiwgYW5kIGFsc28gZm9yIHVzZSBpbiByZWdyZXNzaW9uCgl0ZXN0aW5nLgoKCSogY29uZmlndXJlLmluLCBsaWIvTWFrZWZpbGUuYW06IGFkZCAtLXdpdGgtcmVnZXg9cmVnZXhsaWIKCW9wdGlvbiwgd2hpY2ggb3ZlcnJpZGVzIHRoZSB1c2Ugb2YgbGliL3JlZ2V4LmMuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhMTIuCgpGcmkgSnVuIDEyIDE2OjQxOjQ4IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhMTEgcmVsZWFzZWQKCQoJKiBzZWQvY29tcGlsZS5jOiBhZGQgbW9kdWxlLXN0YXRpYyB2YXJpYWJsZXMgZmlyc3Rfc2NyaXB0CgkoZm9yICNuIGNoYW5nZSBiZWxvdykgYW5kIHBlbmRpbmdfdGV4dCAoZm9yIGEvYy9pIGNoYW5nZQoJYmVsb3cpLgoKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX2ZpbGUpLCBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcHJvZ3JhbSk6CglJbnN0ZWFkIG9mIGhhdmluZyAjbiB0cmlnZ2VyIHRoZSAtbiBvcHRpb24gaW4gKmFueSBmaWxlKiwKCWhhdmUgI24gdHJpZ2dlciB0aGUgLW4gb3B0aW9uIG9ubHkgaWYgdGhleSBhcmUgdGhlIGZpcnN0Cgl0d28gYnl0ZXMgb2YgdGhlIGZpcnN0IHNjcmlwdCBvciBzY3JpcHQtZmlsZS4KCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9zdHJpbmcpLCBzZWQvY29tcGlsZS5jKGNvbXBpbGVfZmlsZSk6CgljbGVhciB0aGUgZmlyc3Rfc2NyaXB0IHZhcmlhYmxlIGF0IGVuZCBvZiB0aGVzZSBmdW5jdGlvbnMuCgoJKiBzZWQvc2VkLmg6IHRlYXNlIG91dCB0aGUgc3RydWN0IHRleHRfYnVmIGRlY2xhcmF0aW9uIGZyb20KCXN0cnVjdCBzZWRfY21kLCBzbyB0aGF0IGEgcG9pbnRlciB0byBzdWNoIGNhbiBiZSBwYXNzZWQKCXRvIG5ldyBzZWQvY29tcGlsZS5jKHJlYWRfdGV4dCkgZnVuY3Rpb24uCgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcHJvZ3JhbSksIHNlZC9jb21waWxlLmMocmVhZF90ZXh0KToKCVRlYXNlIG91dCBoYW5kbGluZyBvZiB0ZXh0IHRvIGEvYy9pIGNvbW1hbmRzIHRvIG5ldwoJcmVhZF90ZXh0KCkgZnVuY3Rpb24uICBIYW5kbGUgKHZpYSBhaWQgb2YgcGVuZGluZ190ZXh0Cgl2YXJpYWJsZSkgdGV4dHMgd2hpY2ggc3BhbiBtb3JlIHRoYW4gb25lIHNjcmlwdC9zY3JpcHQtZmlsZQoJb3B0aW9uLiAgSW4gcGFydGljdWxhciwgcmVzdG9yZSB0aGUgYWJpbGl0eSB0byBoYXZlIHRoaXMKCXdvcms6ICBzZWQgLWUgJzFpXCcgLWUgJ2ZvbycKCgkqIHNlZC9jb21waWxlLmMoY2hlY2tfZmluYWxfcHJvZ3JhbSk6IGNsb3NlIG9mZiBhbnkgZGFuZ2xpbmcKCXBlbmRpbmdfdGV4dCBhbGxvY2F0aW9uLgoKVGh1IEp1biAxMSAxMToxNzo0NiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyhkb19zdWJzdCk6IGZpeGVkIHR3byBidWdzOiBzLyAqL1gvZyB3YXMgZmFpbGluZwoJdG8gbWF0Y2ggdGhlIGZpbmFsIGVtcHR5IHN0cmluZyBhZnRlciB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuCglzcGFjZTsgYW5kIC9eZm9vJC9zL28veC8zcCB3YXMgcHJpbnRpbmcsIGRlc3BpdGUgdGhlIGZhaWx1cmUKCXRvIGRvIGEgc3Vic3RpdGlvbi4KCkZyaSBKdW4gIDUgMDQ6NDA6MjQgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogY2hhbmdlIHRoZSBBQ19BUkdfV0lUSChyZWduZXhlYywgLi4uKQoJdG8gYmUgdGhlIG1vcmUgYXBwcm9wcmlhdGUgQUNfQVJHX0VOQUJMRShyZWduZXhlYywgLi4uKS4KCgkqIGNvbmZpZ3VyZS5pbiwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvIGJldGExMS4KCkZyaSBKdW4gIDUgMDA6NTQ6MjUgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGExMCByZWxlYXNlZAoJCgkqIHNlZC9leGVjdXRlLmM6IGZvcmdvdCB0byBQXygpIHRoZSBwcm90b3R5cGUgYW5kCglvbGQtc3R5bGUgdGhlIGRlY2xhcmF0aW9uIGZvciBib290c3RyYXBfbWVtY2hyKCkhCgpUaHUgSnVuICA0IDE4OjQyOjMwIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jKHNuYXJmX2NoYXJfY2xhc3MpOiBhZGRlZCBjb2RlIHRvCglyZWNvZ25pemUgXG4gb3IgXDxuZXdsaW5lPiBzZXF1ZW5jZSB3aXRoaW4gYQoJY2hhci1jbGFzcyBhcyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIuCgpUdWUgSnVuICAyIDExOjU2OjAyIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIGNoZWNrIGZvciA8c3lzL3R5cGVzLmg+IGFuZAoJYSBBQ19BUkdfV0lUSChyZWduZXhlYywuLi4pIGNoZWNrLCB0byBzaW1wbGlmeSB1c2UKCW9mIG90aGVyIHJlZ2V4IGxpYnJhcmllcyB3aGljaCBoYXZlIHJlZ2V4ZWMoKSBidXQKCW5vdCByZWduZXhlYygpLCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGxvc3Mgb2YKCWZ1bmN0aW9uYWxpdHkgKHJlZ2V4cHMgd2lsbCBub3Qgd29yayByaWdodCBhZ2FpbnN0CglpbnB1dCBsaW5lcyB3aGljaCBjb250YWluIE5VTHMpLgoKCSogc2VkL2V4ZWN1dGUuYzogYWRkIG51bF9hcHBlbmQoKSBmdW5jdGlvbiwgYSAjZGVmaW5lCglmb3IgYSByZWduZXhlYygpIC0+IHJlZ2V4ZWMoKSBtYWNybyAoY29uZGl0aW9uYWwgb24KCXRoZSBsYWNrIG9mIHRoZSBXSVRIX1JFR05FWEVDIHN5bWJvbCksIGFuZCBhIGNvdXBsZQoJb2YgY2FsbHMgdG8gbnVsX2FwcGVuZCgpIChpbiBtYXRjaF9hbl9hZGRyZXNzX3AoKQoJYW5kIGRvX3N1YnN0KCkpIHRvIHBlcm1pdCB0aGUgdXNlIG9mIHRoZSBQT1NJWCBzdGFuZGFyZAoJcmVnZXhlYygpIGZ1bmN0aW9uIGNhbGwgaW5zdGVhZCBvZiB0aGUgc3VnZ2VzdGVkCglyZWduZXhlYygpIGNhbGwuCgoJKiBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jLCBzZWQvc2VkLmM6IGNoZWNrIGZvcgoJPHN5cy90eXBlcy5oPiBhbmQgaW5jbHVkZSBpdCAoYmVmb3JlICJyZWdleC5oIikgaWYKCWF2YWlsYWJsZS4gIFRoaXMgbWFrZXMgaXQgc2ltcGxlciB0byB1c2UgdGhlIHN5c3RlbSdzCglyZWdleCBsaWJyYXJ5IGluc3RlYWQgb2YgdGhlIG9uZSBpbiBsaWIvcmVnZXguYywgc2hvdWxkCgl0aGF0IGJlIGRlc2lyZWQuCgpUdWUgSnVuICAyIDA4OjQxOjA1IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvYmFzaWNkZWZzLmg6IGRlZmluZSBWQ0FTVCBtYWNyb3MgdG8gYWxsb3cgc2VkIHRvCgljb21waWxlIG9uIHN5c3RlbXMgd2hpY2ggcHJlZGF0ZSB0aGUgZGVmaW5pdGlvbgoJb2YgInZvaWQgKiIsIGFuZCB5ZXQgc3RpbGwgZ2V0IGZlZWRiYWNrIGFib3V0CglzdHVwaWQgcHJvZ3JhbW1pbmcgZXJyb3JzIGZyb20gc3lzdGVtcyB3aGljaCAqZG8qCglrbm93IGFib3V0ICJ2b2lkICoicy4gIEFsc28gZGVmaW5lIE1BTExPQywgUkVBTExPQywKCU1FTURVUCwgYW5kIEZSRUUgbWFjcm9zIHRvIGtlZXAgdW5kZXIgY29udHJvbCB0aGUKCWRlZ3JlZSBvZiBjb2RlIHVnbGluZXNzIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZQoJaW50cm9kdWNlZCBpbiBtYWtpbmcgdXNlIG9mIHRoZSBWQ0FTVCBtYWNyby4KCgkqIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmMsIHNlZC9zZWQuYywgc2VkL3V0aWxzLmM6CglwZXJ2YXNpdmVseSB1c2UgdGhlIG5ldyBWQ0FTVCwgTUFMTE9DLCBSRUFMTE9DLCBNRU1EVVAsCglhbmQgRlJFRSBtYWNyb3Mgd2hlcmV2ZXIgYXBwcm9wcmlhdGUuCgoJKiBzZWQvdXRpbHMuYywgc2VkL3V0aWxzLmg6IGNvcnJlY3QgdHlwZSBvZiBmaXJzdCBhcmd1bWVudHMKCXRvIGNrX2ZyZWFkKCkgYW5kIGNrX2Z3cml0ZSgpIHRvIGJlIFtjb25zdF0gVk9JRCAqLgoKCSogc2VkL2Jhc2ljZGVmcy5oLCBzZWQvZXhlY3V0ZS5jOiBwcm90ZWN0IGFnYWluc3QKCXRoZSBydW1vcmVkIHN5c3RlbXMgd2hpY2ggc3R1cGlkbHkgI2RlZmluZSBfX1NURENfXyAwLgoKCSogdGVzdHN1aXRlL2hlbHAuZ29vZCwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBtYWtlCgl0aGUgYGBoZWxwJycgdGVzdCBpbnNlbnNpdGl2ZSB0byB0aGUgc3BlbGxpbmcgb2YKCXRoZSBleGVjdXRhYmxlJ3MgbmFtZS4gIEFsc28sIGVuaGFuY2VkIGBtYWtlIGNsZWFuJwoJdGFyZ2V0LgoKCSogZG9jL3NlZC50ZXhpLCBkb2Mvc2VkLjE6IGNvcnJlY3QgZG9jdW1lbnRhdGlvbiBvZiBgcScKCWNvbW1hbmQ7IGZpeCB0eXBvcy4KCgkqIGNvbmZpZ3VyZSwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvIGJldGExMC4KClNhdCBNYXkgMzAgMTc6Mjg6MDAgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGE5IHJlbGVhc2VkCgkKCSogTWFrZWZpbGUuYW06IG1ha2UgdGVzdHN1aXRlIGEgbm9ybWFsIFNVQkRJUi4KCgkqIGNvbmZpZ3VyZS5pbjogZGlzY29udGludWUgdXNpbmcgQUNfSVNDX1BPU0lYIC0tCgljaGVjayBmb3IgLWxjcG9zaXggbGlicmFyeSBpbnN0ZWFkOyBhZGRlZAoJdGVzdHN1aXRlL01ha2VmaWxlIHRvIEFDX09VVFBVVCBsaXN0LgoKCSogbGliL21lbW1vdmUuYyhtZW1tb3ZlKTogZml4ZWQgd3Jvbmcgc2Vuc2UgdXNlZAoJZm9yIEhBVkVfQkNPUFkgdGVzdC4KCgkqIHNlZC9leGVjdXRlLmM6IGNoZWNrZWQgbW9yZSBzcGVjaWZpY2FsbHkgZm9yIGEgdmVyc2lvbgoJb2YgZ2NjIHdoaWNoIHN1cHBvcnRzIF9fYXR0cmlidXRlX18gKGkuZS4sID49IDIuNykuCgoJKiB0ZXN0c3VpdGUvKjogcmVuYW1lZCBmaWxlcyB0byBmaXQgMTQgY2hhciBsaW1pdC4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZSwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBNYWtlZmlsZQoJcmVuYW1lZCB0byBNYWtlZmlsZS5pbiBhbmQgdGhlbiBtb2RpZmllZCBzbyB0aGF0CgkibWFrZSAtaiBjaGVjayIgZnJvbSB0b3AgZGlyZWN0b3J5IHdpbGwgd29yay4KCgkqIHRlc3RzdWl0ZS9zdWJ3cml0ZS5zZWQsIHRlc3RzdWl0ZS93cml0ZW91dC5zZWQ6IGNoYW5nZWQKCWZpbGUgbmFtZSBvZiB0aGUgInciIGNvbW1hbmQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZQoJbmV3IG5hbWluZyB1c2VkIGluIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbi4KCgkqIGRvYy9zZWQuMSwgZG9jL3NlZC50ZXhpOiBmaXhlZCBzb21lIHR5cG9zLCBmb3JtYXR0aW5nCglnbGl0Y2hlcywgYW5kIHBvb3Igd29yZGluZ3MuCgpTYXQgTWF5IDMwIDA0OjAyOjI5IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IHNwZWNpZnkgdGhhdCBjb25maWcuaCBpcyB0byBiZSBkZXJpdmVkCglmcm9tIGNvbmZpZ19oLmluIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBicmFpbmRlYWQKCURPUyBmaWxlc3lzdGVtIGxpbWl0YXRpb25zLgoKRnJpIE1heSAyOSAyMTo1NjozMCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX2FkZHJlc3MpLCBkb2Mvc2VkLnRleGk6IGdhdmUKCWEgYmV0dGVyIGRlZmluaXRpb24gdG8gdGhlIG1lYW5pbmcgb2YgTn4wIGFkZHJlc3MKCWZvcm1zIC0tIE5+TSBhZGRyZXNzZXMgbm93IG1lYW4gdGhhdCBsaW5lcyBtYXRjaAoJd2hlbiB0aGVyZSBleGlzdHMgYSBub24tbmVnYXRpdmUgeCBzdWNoIHRoYXQKCWxpbmVubyA9PSBOK3gqTS4KCkZyaSBNYXkgMjkgMTI6MDc6MzggUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9hZGRyZXNzKSwKCXNlZC9leGVjdXRlLmMobWF0Y2hfYW5fYWRkcmVzc19wKTogdXBkYXRlIHNlbWFudGljcyBvZgoJTn5NIGFkZHJlc3MgZm9ybTogbm93IE4gaXMgdGhlIGZpcnN0IGxpbmUgd2hpY2ggd2lsbAoJbWF0Y2ggYW5kIE0gaXMgdGhlIHN0ZXAgYmV0d2VlbiBzdWNjZWVkaW5nIG1hdGNoZXMuCglJZiBOPE0gdGhpcyB3b3JrcyBvdXQgdG8gdGhlIHNhbWUgYXMgYmVmb3JlLCBidXQgdGhlCgluZXcgYmVoYXZpb3IgZm9yIE4+PU0gc2VlbXMgbW9yZSB1c2VmdWwuCgoJKiBkb2Mvc2VkLjEsIGRvYy9zZWQudGV4aTogdXBkYXRlIGRvY3VtZW50YXRpb24gb2YgTn5NCglhZGRyZXNzIGZvcm07IGFkZGVkICJPdGhlciBSZXNvdXJjZXMiIG5vZGUgdG8gc2VkLnRleGk7CgltaW5vciBmb3JtYXR0aW5nIGNoYW5nZXMgdG8gc29tZSBpdGVtcyBpbiBzZWQuMSB3aXRoCglhbiBleWUgdG8gaW1wcm92aW5nIGNsYXJpdHkuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhOS4KClNhdCBNYXkgMjMgMjA6MDQ6MzEgSFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGE4IHJlbGVhc2VkCgkKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3JlZ2V4KTogZm9yZ290IHRvIG1ha2UgbGFzdF9yZSBiZQoJYSAqY29weSogb2YgdGhlIGJ1ZmZlcmVkIHRleHQgaW4gdG9kYXkncyBlYXJsaWVyIGZpeC4KCgkqIHNlZC9leGVjdXRlLmMocmVhZF9maWxlX2xpbmUpOiBFT0YgY2hlY2sgd2FzIHdyb25nIC0tCglpdCBmb3Jnb3QgdG8gYWxsb3cgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHdlIHdlcmUKCWFwcGVuZGluZyB0byB0aGUgZW5kIG9mIHRoZSBgYGxpbmUnJyAoaW5zdGVhZCBvZiBtZXJlbHkKCXJlYWRpbmcgYSBmcmVzaCBsaW5lKS4KClNhdCBNYXkgMjMgMTg6MDc6MTggSFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9yZWdleCk6IGRvbid0IHRyYWNrIGNvbXBpbGVkIHZlcnNpb24KCW9mIHJlZ2V4IC0tIHRoZSBtb2RpZmllcnMgbWF5IGNoYW5nZS4gIFRyYWNrIHRoZSByZWdleAoJc291cmNlIGluc3RlYWQuICAoRm9yICJsYXN0IHJlZ2V4IiAoYWthIC8vKSBub3RhdGlvbi4pCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhOC4KClNhdCBNYXkgMjMgMTY6MDc6MDkgSFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGE3IHJlbGVhc2VkCgkKCSogc2VkL2V4ZWN1dGUuYzogI3VuZGVmJ2QgRVhQRVJJTUVOVEFMX0RBU0hfTl9PUFRJTUlaQVRJT04KCWJlY2F1c2UgaXRzIGNvZGUgaXMgYnVnZ3kuCgpUdWUgTWF5IDE5IDE3OjAzOjUyIEhTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvc2VkLmM6IGxhYmVsIHJ4IGxpYnJhcnkgY29kZSBhcyBzdWNoIHdpdGggI2lmZGVmcwoJKGluc3RlYWQgb2YganVzdCAjaWYgMCkuCgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcHJvZ3JhbSk6IG1ha2UgaW5jcmVtZW50YWwKCWltcHJvdmVtZW50IHRvIHRoZSAiVW5rbm93biBjb21tYW5kIiBlcnJvciBtZXNzYWdlLgoKU2F0IE1heSAxNiAyMzoxNjoyNiBIU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogdGVzdHN1aXRlL01ha2VmaWxlOiBzaW1wbGlmeTogZ2V0IHJpZCBvZiBhdXRvbWF0aWMgcnVuCglhZ2FpbnN0IHN5c3RlbSdzIHNlZDsgZG9uJ3QgdGltZSBieSBkZWZhdWx0OyBhbGxvdyBmb3IKCWFsdGVybmF0aXZlIGNvbXBhcmlzb24gY29tbWFuZC4KCgkqIGNvbmZpZ3VyZS5pbiwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvIGJldGE3LgoKV2VkIE1heSAxMyAyMTo0NDoyOCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTYgcmVsZWFzZWQKCQoJKiBsaWIvTWFrZWZpbGUuYW06IGZpeCBzcGVsbGluZyBvZiBsaWJzZWRfYV9MSUJBREQgaW4KCWxpYnNlZF9hX0RFUEVOREVOQ0lFUy4KCgkqIGNvbmZpZ3VyZS5pbiwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvIGJldGE2LgoKV2VkIE1heSAxMyAxNDozODowOCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTUgcmVsZWFzZWQKCQoJKiBzZWQvZXhlY3V0ZS5jKGRvX3N1YnN0KTogYWRkZWQgbm90X2JvbF9wIHZhcmlhYmxlIHRvIHRyYWNrIHdoZW4KCXdlIGhhdmUgaXRlcmF0ZWQgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXR0ZXJuLgoJW1RoYW5rcyB0byBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGFzY2VuZC5jb20+IGZvciB0aGUgYnVnIHJlcG9ydC5dCgpXZWQgTWF5IDEzIDEzOjU0OjA0IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jKGJvb3RzdHJhcF9tZW1jaHIpOiBuZXcgZnVuY3Rpb24uICBXaGVuCglib290c3RyYXBwaW5nIHdlIGRvbid0IGtub3cgaWYgd2UgYXJlIG9uIGEgNjQtYml0IG1hY2hpbmUsCglzbyBsaWIvbWVtY2hyLmMgYnJlYWtzLiAgU3VwcGx5IHRoaXMgKHNsb3cpIGltcGxlbWVudGF0aW9uCglqdXN0IHRvIGdldCB1cyBib290c3RyYXBwZWQuCgoJKiBib290c3RyYXAuc2g6IGFkZCBhICNkZWZpbmUgQk9PVFNUUkFQIHN5bWJvbDsgYWRkIC1JLgoJZm9yIGVtcGhhc2lzIGZvciB0aGUgY29tcGlsZXMgaW4gc2VkLzsgYmUgZXhwbGljaXQKCWFib3V0IHdoYXQgZmlsZXMgd2UncmUgYm90aGVyaW5nIHRvIGNvbXBpbGUuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB2ZXJzaW9uCgl0byBiZXRhNS4KCldlZCBNYXkgMTMgMDY6Mzk6MDYgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGE0IHJlbGVhc2VkCgkKCSogcmVuYW1lIHdyaXRlb3V0Lmdvb2Q/IHRvIHdydG91dD8uZ29vZCBhbmQgc3Vid3JpdGUuZ29vZD8gdG8KCXN1YndydD8uZ29vZCB0byBjb21wbHkgd2l0aCBET1MgOCszIGZpbGUgbmFtZSByZXN0cmljdGlvbnMuCglbRWxpIFphcmV0c2tpaSA8ZWxpekBpcy5lbHRhLmNvLmlsPiBzdWdnZXN0ZWQgdGhpcyB0bwoJc2ltcGxpZnkgREpHUFAgcG9ydHMsIGFuZCBpdCB3YXMgZWFzeS5dCgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGU6IHJlZmxlY3QgYWJvdmUgbmFtZSBjaGFuZ2VzLgoKV2VkIE1heSAxMiAyMTowOTozMiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL3NlZC5jKHVzYWdlKTogZml4IG5vbi1wb3J0YWJsZSBvbWlzc2lvbiBvZiBcblwgYXQgZW5kIG9mCglsaW5lcyB3aXRoaW4gbG9uZyBzdHJpbmcuCgoJKiBzZWQvc2VkLmMobWFpbik6IHJlbW92ZSBzcHVyaW91cyBhcmd1bWVudCB0byBmcHJpbnRmKCkgaW4gdGhlCgknVidlcnNpb24gb3V0cHV0LgoKCSogc2VkL2V4ZWN1dGUuYyhsaW5lX2FwcGVuZCk6IGVtYmVkIG5ld2xpbmUgYmV0d2VlbiB0aGUgdHdvCgl0ZXh0IGZyYWdtZW50cyB1bmNvbmRpdGlvbmFsbHkuCgoJKiBzZWQvZXhlY3V0ZS5jKGRvX3N1YnN0KTogY2hhbmdlIHN0cnVjdHVyZSBhc3NpZ25tZW50IHRvIG1lbWNweSgpCgkoZm9yIHBvcnRhYmlsaXR5IHJlYXNvbnMpLgoKCSogUkVBRE1FLmJvb3RzdHJhcDogc3VnZ2VzdCB1c2luZyAtdyBvcHRpb24uCgpUdWUgTWF5IDEyIDEwOjAyOjM3IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IHVzZSBBQ19SRVBMQUNFX0ZVTkNTIHdoZXJlIGFwcHJvcHJpYXRlLgoKCSogbGliL01ha2VmaWxlLmFtOiB1cGRhdGVkIHRvIHJlZmxlY3QgQUNfUkVQTEFDRV9GVU5DUyBjaGFuZ2UgaW4KCWNvbmZpZ3VyZS5pbi4KCgkqIGxpYi9tZW1jaHIuYyBsaWIvbWVtY21wLmM6IHJldmVydCB0byBzdGFuZGFyZCBHTlUgdmVyc2lvbnMuCgoJKiBsaWIvYWxsb2NhLmM6IGFkZGVkIHRoaXMgbWlzc2luZyBmaWxlLgoKCSogdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlZCBmb3IgbmV3IHZlcnNpb24gaWRlbnRpZmllci4KCk1vbiBNYXkgMTEgMTg6NTA6NTYgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCQoJKioqIFZlcnNpb24gMy4wMS1iZXRhMyByZWxlYXNlZAoJCgkqIHNlZC9NYWtlZmlsZS5hbTogZml4IElOQ0xVREVTIHRvIHdvcmsgcmlnaHQgd2l0aCBWUEFUSC4KCVtUaGFua3MgdG8gSmltIE1leWVyaW5nIDxtZXllcmluZ0Bhc2NlbmQuY29tPiBmb3IgdGhlIGJ1ZyByZXBvcnQuXQoKCSogc2VkL3NlZC5jKHVzYWdlKTogbWFrZSAtLWhlbHAgb3V0cHV0IG1vcmUgdXNlci1mcmllbmRseT8KCgkqIHNlZC9leGVjdXRlLmMoZXhlY3V0ZV9wcm9ncmFtKTogZml4IGJ1ZyBpbiAneCcgY29tbWFuZCBpbnRyb2R1Y2VkCglpbiB0aGUgYWxsZWdlZCBwb3J0YWJpbGl0eSBmaXggb2YgTWF5IDkuCgoJKiBjb25maWd1cmUuaW46IHVwZGF0ZSB2ZXJzaW9uIHRvIDMuMDEtYmV0YTMuCgoJKiB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kLCB0ZXN0c3VpdGUvaGVscC5nb29kOiBmcmVzaGVuIHdpdGgKCWxhdGVzdCBvdXRwdXQuCgpTYXQgTWF5ICA5IDIyOjM1OjQ1IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhMiByZWxlYXNlZAoJCgkqIHNlZC9zZWQuYzogYWRkICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gaW4gSEFWRV9NTUFQCglibG9jayAobmVlZGVkIG9uIHNvbWUgbWFjaGluZXMpLgoKCSogbGliL21lbW1vdmUuYzogI2luY2x1ZGUgPG1lbW9yeS5oPiwgaWYgSEFWRV9NRU1PUllfSC4KClNhdCBNYXkgIDkgMjE6Mjk6MDAgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIGRhbmdsaW5nIHJlZmVyZW5jZXMgdG8gcnggbGlicmFyeTsKCWFkZGVkIEhFQURFUiBhbmQgRlVOQyBjaGVja3MgZm9yIGl0ZW1zIHVzZWQgYnkgc291cmNlIGluCglsaWIvLgoKCSogbGliL2Fuc2lkZWNsLmgsIGxpYi9tZW1jb3B5LmgsIGxpYi9wYWdlY29weS5oLCBsaWIvc3RyaW5nLmgKCWxpYi9tZW1jcHkuYywgbGliL21lbW1vdmUuYzogZGVsZXRlcyB0aGVzZSBmaWxlcy4gIFRoZXJlCglhcmUgc3RpbGwgcGllY2VzIG9mIGdsaWJjIG1pc3NpbmcgdG8gc3VwcG9ydCB0aGVzZSwgYW5kCglpdCBpc24ndCB3b3J0aCB0aGUgaGVhZGFjaGUgcmlnaHQgbm93LgoKCSogbGliL21lbW1vdmUuYzogZGUgbm92bywgc2ltcGxlciB2ZXJzaW9uLiAgVXNlcyBiY29weSgpCglpZiBhdmFpbGFibGUsIGFuZCBzbG93LWJ1dC1zaW1wbGUgY29kZSBpZiBub3QuCgoJKiBsaWIvTWFrZWZpbGUuYW06IHJlbW92ZSByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgZmlsZXMuCglBZGRlZCBmb3Jnb3R0ZW4gcmVmZXJlbmNlIHRvIG1lbWNweS5jLiAgUmUtb3JkZXJlZAoJU09VUkNFIGVudHJpZXMgdG8gcmVmbGVjdCBkZXBlbmRlbmNpZXMgZm9yIHN5c3RlbXMKCXdoaWNoIGxhY2sgcmFubGliLgoKCSogc2VkL2Jhc2ljZGVmcy5oOiB1cGRhdGVkIHRvIHJlZmxlY3QgYWJvdmUgY2hhbmdlcyB0byBsaWIvLAoJYW5kIGV4cGVyaWVuY2Ugd2l0aCBub24tU1REQyBjb21waWxlcnMuCgoJKiBsaWIvcmVnZXguYzogbWFkZSByZWdlcnJvcigpIGZ1bmN0aW9uIHB1YmxpY2x5IHZpc2libGUuCgoJKiBsaWIvc3RyZXJyb3IuYzogdXNlIG9sZC1zdHlsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KCgkqIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmMsIHNlZC9zZWQuYywgc2VkL3V0aWxzLmMsCglzZWQvc2VkLmgsIHNlZC91dGlscy5oOiBlbnN1cmUgdGhhdCBwcml2YXRlIGRlZmluaXRpb25zIG9mCglzb21lIHN5bWJvbHMgZG8gbm90IGNhdXNlIHByb2JsZW1zIHdoZW4gI2luY2x1ZGUnaW5nIHN5c3RlbQoJaGVhZGVycyAobWFpbmx5IGJ5IHJlLW9yZGVyaW5nIHRoZSAjaW5jbHVkZSBkaXJlY3RpdmVzKS4KCShUaGlzIGlzIHBhcnRpY3VsYXJseSBhbiBpc3N1ZSBmb3IgYm9vdHN0cmFwLnNoIHJ1bnMuKQoKCSogc2VkL2V4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtKTogdXNlIG1lbWNweSgpIGluc3RlYWQgb2YKCXN0cnVjdHVyZSBhc3NpbmdtZW50ICgneCcgY29tbWFuZCksIGZvciBwb3J0YWJsaWxpdHkgdG8KCW9sZCBjb21waWxlcnMuCgoJKiBzZWQvZXhlY3V0ZS5jIChzbG93X2dldGxpbmUpOiB1c2Ugb2xkLXN0eWxlIGZ1bmN0aW9uCglkZWNsYXJhdGlvbiwgd2l0aCBhIFBfIHByb3RvdHlwZS4KCgkqIHNlZC9zZWQuYzogY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmYWxsYmFjayBNQVBfRkFJTEVECglkZWZpbml0aW9uIHRvIHdvcmsgb24gYXJjaGFpYyBzeXN0ZW1zLiAgKE1vZGVybiBzeXN0ZW1zCglzaG91bGQgYmUgZGVmaW5pbmcgaXQgdGhlbXNlbHZlcywgc28gdGhlIGNoYW5nZSBmcm9tCgl2b2lkICogc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4pCgoJKiBib290c3RyYXAuc2gsIFJFQURNRS5ib290c3RyYXA6IGFjdHVhbCB0ZXN0aW5nIG9mIGJvb3RzdHJhcAoJY29kZSByZXZlYWxlZCB0aGF0IEkgd2FzIHRvbyBvcHRpbWlzdGljLiAgUmVkZXNpZ25lZCBhbmQKCXJlcGxhY2VkIGltcGxlbWVudGF0aW9uLgoKCSogdGVzdHN1aXRlL01ha2VmaWxlOiBpZ25vcmUgZXJyb3JzIGZyb20gcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uCglzZWRzIHRoYXQgYXJlbid0IHVwIHRvIHNudWZmLgoKCSogdGVzdHN1aXRlL2hlbHAuZ29vZCwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvCgljdXJyZW50IHZlcnNpb24ncyBvdXRwdXQuCgpGcmkgTWF5ICA4IDE1OjA4OjI4IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhMSByZWxlYXNlZAoJCgkqIHNlZC9zZWQuYyAobWFpbiwgdXNhZ2UpOiBvbmNlIGFnYWluIHR3ZWFrIHRoZSAtLWhlbHAgYW5kCgktLXZlcnNpb24gb3V0cHV0IHRvIGJldHRlcnkgY29tcGx5IHdpdGggR05VIGNvZGluZyBzdGFuZGFyZHMuCgoJKiB0ZXN0c3VpdGUvaGVscC5nb29kLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiB1cGRhdGUgdG8KCXJlZmxlY3QgYWJvdmUgY2hhbmdlLgoKCSogZG9jL3NlZC50ZXhpOiBmaXggIkludm9raW5nIiBub2RlJ3Mgc3BlbGxpbmcgdG8gY29tcGx5Cgl3aXRoIEdOVSBzdGFuZGFyZHMuCgpGcmkgTWF5ICA4IDExOjQzOjEwIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBkb2Mvc2VkLjEsIGRvYy9NYWtlZmlsZS5hbTogd3JvdGUgKHZlcnkgYmFzaWMpIG1hbiBwYWdlLgoKVGh1IE1heSAgNyAyMDo0MDoyMSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogbGliL01ha2VmaWxlLmFtLCBsaWIvbWVtbW92ZS5jLCBsaWIvbWVtY2hyLmMsIGxpYi9yZWdleC5jLAoJbGliL21lbWNweS5jLCBsaWIvcmVnZXguaCwgbGliL21lbWNvcHkuaCwgbGliL3N0cmluZy5oLAoJbGliL3BhZ2Vjb3B5LmgsIGxpYi9hbnNpZGVjbC5oOiBncmFiIHlldC1hbm90aGVyLXZlcnNpb24KCWZyb20gZ251Lm9yZyBmb3IgYmFzZWxpbmUgYW5kL29yIGVkaXQgY29weXJpZ2h0IGJvaWxlcnBsYXRlCgl1c2luZyBvZmZpY2lhbCBsZ3BsMmdwbC5zZWQgc2NyaXB0LiAgVGFrZSBjYXJlIG5vdCB0bwoJbG9vc2UgcmVnbmV4ZWMoKSBpbnRlcmZhY2Ugb3Igc3BlY2lhbCBjb25kaXRpb25hbC1jb21waWxhdGlvbgoJY29kZS4KCldlZCBNYXkgIDYgMjM6MzU6MTIgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGxpYi9yZWdleC5jLCBsaWIvcmVnZXguaDogdGFrZSBmcm9tIGdyZXAtMi4xIGRpc3RyaWJ1dGlvbiwKCXRoZW4gdHJpdmlhbGx5IGFkZGVkIHRoZSByZWduZXhlYygpIGludGVyZmFjZS4KCgkqIHNlZC9zZWQuYywgc2VkL2NvbXBpbGUuYywgc2VkL2V4ZWN1dGUuYzogbWFkZSBtb2RpZmljYXRpb25zCgl0byB3b3JrIHdpdGggcmVnZXggaW5zdGVhZCBvZiByeC4KCgkqIHJ4Lyo6IGRlbGV0ZWQgZGlyZWN0b3J5OyB0aGUgY29kZSBpcyBqdXN0IHRvbyBzbG93LgoJSSB0aGluayBpdCB3aWxsIGJlIGVhc2llciB0byBleHRlbmQgcmVnZXggdG8gZnVsbHkKCXN1cHBvcnQgUE9TSVguMiB0aGFuIHRvIHR1bmUgcnggdG8gYmUgcmVhc29uYWJsZS4KCUV2ZW4gaWYgdGhpcyBzdXBwb3NpdGlvbiBpcyB3cm9uZywgSSdkIHJhdGhlciBtYWtlCgl0aGUgMy4wMSByZWxlYXNlIHdpdGggdGhlIHNsaWdodGx5IGRlZmljaWVudCByZWdleC4KCgkqIE1ha2VmaWxlLmFtIGxpYi9NYWtlZmlsZS5hbSwgc2VkL01ha2VmaWxlLmFtOiBtYWRlIGNoYW5nZXMKCXJlbGF0ZWQgdG8gdGhlIHN1YnN0aXR1dGlvbiBvZiByZWdleCBmb3IgcnguCgoJKiBsaWIvTWFrZWZpbGUuYW0sIHNlZC9NYWtlZmlsZS5hbTogc2luY2UgcmVnZXggaXMgbm90IGEKCWBgY29tcGF0YWJpbGl0eScnIG1vZHVsZSwgY2hhbmdlZCBuYW1lIG9mIGxpYnJhcnkgdG8KCWBgbGlic2VkLmEnJy4KCgkqIGxpYi9tZW1jaHIuYywgbGliL21lbWNweS5jLCBsaWIvbWVtbW92ZS5jOiBhZGQgY29uZGl0aW9uYWwKCWNvbXBpbGF0aW9uIGNvZGUgdG8gbGVhdmUgemVyby1zaXplZCAubyBmaWxlIGlmIHN5c3RlbQoJYWxyZWFkeSBzdXBwb3J0cyB0aGUgaW1wbGVtZW50ZWQgZnVuY3Rpb24uCgoJKiB0ZXN0c3VpdGUvaGVscC5nb29kLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiBicm91Z2h0Cgl1cC10by1kYXRlIChvbmNlIGFnYWluKS4KCgkqIE5FV1MsIEFOTk9VTkNFOiBjaGFuZ2VzIHRvIHJlZmxlY3QgdGhpcyBiYXRjaCBvZiBjaGFuZ2VzLgoKV2VkIE1heSAgNiAxODo0MDo0NyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYzogZGlzY292ZXJlZCBhd2Z1bCBidWcgaW4gJ30nIGhhbmRsaW5nOgoJaXQgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdmVjIChiZWNhdXNlIGBuJyB3YXMKCWJlaW5nIGRlY3JlbWVudGVkIGJlbG93IHplcm8pISAgTmVlZGVkIHRvICJjb250aW51ZSIKCWluc3RlYWQgb2YgImJyZWFrIi4KClR1ZSBNYXkgIDUgMTQ6MzQ6MzggUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGRvYy9zZWQudGV4aSwgZG9jL3ZlcnNpb24udGV4aTogd3JvdGUgc29tZSBydWRpbWVudGFyeQoJdGV4aW5mbyBkb2N1bWVudGF0aW9uLgoKCSogQU5OT1VOQ0UsIE5FV1MsIFJFQURNRSwgUkVBRE1FLnJ4LCBNYWtlZmlsZS5hbToKCW1vcmUgdXBkYXRlcyBmb3IgdGhlIHVwY29taW5nIGJldGEtcmVsZWFzZS4KCgkqIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmMsIHNlZC9zZWQuYywgc2VkL3V0aWxzLmMsCglzZWQvc2VkLmgsIGxpYi9zdHJlcnJvci5jOiB1cGRhdGUgY29weXJpZ2h0IG5vdGljZSB0ZXh0LgoKRnJpIE1heSAgMSAxNTo0MTozNyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAobWF0Y2hfYW5fYWRkcmVzc19wLCBtYXRjaF9hZGRyZXNzX3ApOiBpZgoJdGhlIHNlY29uZCBlbGVtZW50IG9mIGFuIGFkZHJlc3MgcmFuZ2UgaXMgYSBsaW5lIG51bWJlciwKCWFuZCB0aGF0IGxpbmUgbnVtYmVyIGlzICpsZXNzIHRoYW4qIChvciBlcXVhbCB0bykgdGhlCgljdXJyZW50IGxpbmUgbnVtYmVyLCB3ZSBvbmx5IG1hdGNoIHRoZSBvbmUgbGluZSAocGVyCglQT1NJWC4yLCBzZWN0aW9uIDQuNTUuNy4xKS4gIFtCdWcgZGlzY292ZXJlZCBhcyByZXBvcnRlZAoJaW4gdGhlIHNlZGVycyBtYWlsaW5nIGxpc3QgRkFRLl0KCgkqIEFVVEhPUlMsIE5FV1MsIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5pbiwgZG9jL01ha2VmaWxlLmFtLAoJbGliL01ha2VmaWxlLmFtLCBzZWQvTWFrZWZpbGUuYW0sIGxpYi9SRUFETUUsCgl0ZXN0c3VpdGUvaGVscC5nb29kLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOgoJVXBkYXRlZCBpbiBhbnRpY2lwYXRpb24gb2YgdGhlIDMuMDEtYmV0YTEgcmVsZWFzZS4KCVJlb3JnYW5pemVkIGRldmVsb3BtZW50IHNvdXJjZSB0cmVlIHRvIG1ha2UgY3JlYXRpb24KCW9mIGEgZGlzdHJpYnV0aW9uIHNpbXBsZXIuICBNb3N0IG5vdGFibGUgY2hhbmdlcyB3ZXJlCgl0byB0aGUgdmFyaW91cyBNYWtlZmlsZS5hbSBmaWxlcyBhbmQgY29uZmlndXJlLmluLCBidXQKCXNvbWUgbWlub3IgZWRpdHMgKHN1Y2ggYXMgZGVsZXRpbmcgb3IgY2hhbmdpbmcgI2luY2x1ZGUKCWRpcmVjdGl2ZXMpIGhhdmUgYmVlbiBtYWRlIGluIG1hbnkgb3RoZXIgc291cmNlIGZpbGVzLgoKCSogYm9vdHN0cmFwLnNoLCBSRUFETUUuYm9vdHN0cmFwOiBjcmVhdGVkIGEgbWVjaGFuaXNtIGZvcgoJY3JlYXRpbmcgc2VkIG9uIGEgc3lzdGVtIHdoaWNoIGxhY2tzIGEgd29ya2luZyBzZWQuCgpUaHUgQXByIDE2IDIzOjUyOjExIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQuaCwgc2VkLmMsIGV4ZWN1dGUuYywgY29tcGlsZS5jOiBkaWQgYSBzcGVsbC1jaGVjayBvbgoJdGhlIGNvbW1lbnRzOyBmaXhlZCBzZXZlcmFsIHR5cG9zLgoKVGh1IEFwciAxNiAxMzo0MzowMSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jIChkb19zdWJzdCk6IGZpeGVkIGJ1ZyB3aGVyZSB0aGUgInJlcGxhY2VkIiBmbGFnCgl3YXMgYmVpbmcgc2V0IHRvIG9uZSBpbmFwcHJvcHJpYXRlbHkgd2hlbiBhdCBsZWFzdCBvbmUKCWJ1dCBmZXdlciB0aGFuIHN1Yi0+bnVtYiBtYXRjaGVzIG9mIHRoZSByZWdleHAgd2VyZSBmb3VuZC4KCShUaGFua3MgdG8gU2ltb24gVGF5bG9yIDxzdGF5bG9yQGhlcm1lcy5pYWNjZXNzLmNvbS5hdT4KCWZvciB0aGUgYnVnIHJlcG9ydC4pCgpXZWQgQXByIDE1IDExOjM1OjMxIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQuaCwgc2VkLmMsIGNvbXBpbGUuYywgZXhlY3V0ZS5jOiBoYXZpbmcgYSBjb25jZXJuIHRoYXQKCWEgY2FzdCB3YXMgYmVpbmcgZG9uZSBpbmFwcHJvcHJpYXRlbHksIGFuZCByZWFsaXppbmcgdGhhdAoJdGhlcmUgaXMgbm8gcXVpY2sgd2F5IHRvIGxvY2F0ZSBhbGwgY2FzdHMgaW4gYSBwcm9ncmFtLCBJCgl3ZW50IHRocm91Z2ggYW5kIG1hcmtlZCBhbGwgY2FzdHMgd2l0aCBhIHNpbXBsZSBtYWNyby4KCU5vdyBpdCBpcyBhIHNpbXBsZSBtYXR0ZXIgdG8gbG9jYXRlIHRoZSBjYXN0cywgYW5kIGl0IGlzCglhbHNvIGEgc2ltcGxlIG1hdHRlciB0byB0dXJuIG9mIGNhc3RzIGZvciBhIGxpbnQgc2Vzc2lvbgoJKGlmIGl0IHNob3VsZCBiZSBkZXNpcmVkKS4KCldlZCBBcHIgMTUgMTA6Mjk6MjEgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbXBpbGUuYywgc2VkLmM6IHJlZG8gY29tcGlsZSBwaGFzZSBzbyB0aGF0IGJyYWNlCglleHByZXNzaW9ucyBjYW4gYmUgc3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4KCUZvciBleGFtcGxlOgoJICBwcmludGYgJ3snID5hOyBwcmludGYgJ2w7ZCcgPmI7IHByaW50ZiAnfScgPmMKCSAgc2VkIC1mIGEgLWYgYiAtZiBjIGZvbwoJd2lsbCBub3cgY29tcGlsZSAoYW5kIHdvcmspLCBpbnN0ZWFkIG9mIGNvbXBsYWluaW5nCglhYm91dCBhbiB1bm1hdGNoZWQgJ3snLiAgVGhlIG1lc3MgY3JlYXRlZCBpbiBjb21waWxlLmMKCWFsbG93ZWQgYSBsaXR0bGUgc2ltcGxpZmljYXRpb24gdG8gdGhlIGNvbW1hbmQtbGluZQoJcHJvY2Vzc2luZyBvZiAiLWUiIG9wdGlvbnMgaW4gc2VkLmMuCgoJc2VkLmg6IGFkZGVkIChvcGFxdWUpIGVycl9pbmZvIG1lbWJlciB0byBzdHJ1Y3QgdmVjdG9yOwoJYWRkZWQgY29tbWVudHMgdG8gdGhlIG1lbWJlcnMgb2Ygc3RydWN0IHZlY3Rvci4KCldlZCBBcHIgMTQgMjM6NTA6NTAgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC5oLCBzZWQuYywgY29tcGlsZS5jLCBleGVjdXRlLmM6IGFkZGVkIHR5cGVzIGNvdW50VCBhbmQKCWZsYWdUIGluIG9yZGVyIHRvIGNsYXJpZnkgd2hhdCB2YXJpb3VzICJpbnQicyB3ZXJlIGRvaW5nLgoJQWxzbyBtYWtlcyBpdCBlYXN5IHRvIGNoYW5nZSB0aGUgdHlwZSB1c2VkIGZvciBjb3VudHMKCShmb3IgZXhhbXBsZSwgdG8gInVuc2lnbmVkIGxvbmcgbG9uZyIpIGlmIGRlc2lyZWQsIGFsdGhvdWdoCgl0aGVyZSBhcmUgc3RpbGwgc29tZSBnb3RjaGFzIChzdWNoIGFzIHRoZSBwcmludGYoKSBmb3JtYXQKCWZvciB0aGUgJz0nIGNvbW1hbmQpLgoKVHVlIEFwciAxNCAxNzozNDo1NCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0sIHByb2Nlc3NfZmlsZXMsIGNvdW50X2JyYW5jaGVzLAoJc2hyaW5rX3Byb2dyYW0pOiBBZGRlZCBhIGZpcnN0IGF0dGVtcHQgYXQgcHJvZ3JhbSBvcHRpbWl6YXRpb24uCglXZSBub3cgY2FuIHF1aXQgZWFybHkgaWYgd2UgYXJlIHJ1bm5pbmcgd2l0aCB0aGUgIi1uIgoJYW5kIGFsbCBvZiB0aGUgY29tbWFuZHMgYXJlIGtub3duIHRvIGJlIHZhbGlkIG9ubHkgZm9yCglsaW5lcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgbGluZS4gIFRodXMgdGhlICJzZWQiIGluCgkiZm9vIHwgc2VkIC1uIDEsMnAiIHdpbGwgcHJpbnQgcmVhZCB0aHJlZSBsaW5lcywgcHJpbnRpbnQKCXRoZSBmaXJzdCB0d28sIGFuZCB0aGVuIHF1aXQsIHJlZ2FyZGxlc3Mgb2YgaG93IG11Y2ggbG9uZ2VyCgkiZm9vIiBtaWdodCBydW4gb3Igb3V0cHV0LiAgVGhpcyBvcHRpbWl6YXRpb24gZG9lcyBub3QgYnV5CgltdWNoIGluIG1vc3QgY2FzZXMgKGl0IHNvbWV0aW1lcyBldmVuIGNvc3RzIGEgbGl0dGxlKSwKCWJ1dCB3aGVuIGl0IGRvZXMgaGVscCBpdCBjYW4gaGVscCBiaWcuICBUaGUgY29kZSBpcwoJYWxsIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlCglFWFBFUklNRU5UQUxfREFTSF9OX09QVElNSVpBVElPTiBzeW1ib2wgYmVpbmcgI2RlZmluZWQsCglzbyBpdCBjYW4gYmUgZWFzaWx5IG9taXR0ZWQgaWYgaXQgY2F1c2VzIHByb2JsZW1zLgoKVHVlIEFwciAxNCAxMjoyNTowNiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jICh0ZXN0X2RvbGxhcl9FT0YsIGxhc3RfZmlsZV93aXRoX2RhdGFfcCk6Cgl0ZXN0X2RvbGxhcl9FT0YoKSB3YXMgaW5jb3JyZWN0bHkgcmV0dXJuaW5nIGEgZmFsc2UgKDApCgl3aGVuIHRoZXJlIHdlcmUgdW5wcm9jZXNzZWQgZmlsZXMsIG5vbmUgb2Ygd2hpY2ggaGFkIGFueQoJZGF0YSAoZWl0aGVyIHVub3BlbmFibGUgb3IgemVyby1sZW5ndGgpLiAgQ3JlYXRlZAoJbGFzdF9maWxlX3dpdGhfZGF0YV9wKCkgdG8gZGV0ZWN0IHRoaXMgc2l0dWF0aW9uLCBhbmQKCW1vZGlmaWVkIHRlc3RfZG9sbGFyX0VPRigpIHRvIG1ha2UgdXNlIG9mIGl0LgoKVGh1IEFwciAgMiAyMzowMjoxOCBQU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29tcGlsZS5jIChtYXRjaF9zbGFzaCk6IG1hdGNoX3NsYXNoKCkgZGlkIG5vdCBoYW5kbGUKCVsuY29sbC5dLCBbPWVxdWl2PV0sIGFuZCBbOmNsYXNzOl0gc2VxdWVuY2VzIHdpdGhpbiBhCgljaGFyYWN0ZXIgY2xhc3MuICBBZGRlZCBzbmFyZl9jaGFyX2NsYXNzKCkgW3doaWNoIGlzIGEKCXJlbW90ZSBkZXJpdmF0aXZlIG9mIHBhcnNlX2NoYXJfY2xhc3MoKSBmcm9tIEdOVSBlZC0wLjJdCgl0byBkZWFsIHdpdGggdGhlIGRldGFpbHMsIGFuZCBhbHRlcmVkIG1hdGNoX3NsYXNoKCkKCXRvIG1ha2UgdXNlIG9mIGl0LiAgQWxzbyBjcmVhdGVkIHRoZSB0cml2aWFsCglhZGRfdGhlbl9uZXh0KCkgdG8gYXZvaWQgY2x1dHRlciBpbiBzbmFyZl9jaGFyX2NsYXNzKCkuCgpUaHUgQXByICAyIDIwOjM0OjQyIFBTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBleGVjdXRlLmMsIHNlZC5jLCBzZWQuaDogVGhlcmUgd2FzIGEgc2V2ZXJlIGJ1ZyBpbgoJaG93IHRoZSBjb2RlIGhhbmRsZWQgInNlZCA1biBhIGIiIHdoZW4gImEiIGNvbnNpc3RzCglvZiBleGFjdGx5IGZpdmUgbGluZXMgLS0gaXQgYmVoYXZlZCBsaWtlICJzZWQgNXEgYSBiIiEKCglSZWFycmFuZ2VkIHdoZXJlIGZpbGVzIGdldCBvcGVuZWQgLS0gbGFyZ2Ugc2NhbGUKCWNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmluZyBtYWluKCksIHByb2Nlc3NfZmlsZXMoKSwKCWFuZCByZWFkX3BhdHRlcm5fc3BhY2UoKSwgYnV0IGFsc28gdG91Y2hpbmcgb24gc2V2ZXJhbAoJb3RoZXIgcGFydHMgb2YgZXhlY3V0ZS5jLiAgVGhlIHJlYWRfcGF0dGVybl9zcGFjZSgpCglmdW5jdGlvbiBiZWNhbWUgdW53aWVsZGx5IGFuZCBwYXJ0cyB3ZXJlIHNwbGl0IGludG8KCW9wZW5fbmV4dF9maWxlKCksIGNsb3NlZG93bigpLCByZWFkX2Fsd2F5c19mYWlsKCksCglyZWFkX21lbV9saW5lKCksIGFuZCByZWFkX2ZpbGVfbGluZSgpLiAgVGhlCglhdF9lbmRfb2ZfZmlsZV9wKCkgZnVuY3Rpb24gYmVjYW1lIG9ic29sZXRlIGFuZCB3YXMKCWVsaW1pbmF0ZWQ7IHRlc3RfZG9sbGFyX0VPRl9wKCkgd2FzIHVwZGF0ZWQuICBBIGZldwoJZ2xvYmFsIGFuZCBtb2R1bGUtc3RhdGljIHZhcmlhYmxlcyB3ZXJlIGVsbWluYXRlZCwgYW5kCgkic3RydWN0IGxpbmUiIHdhcyBleHRlbmRlZDsgY29tbWVudHMgd2VyZSBhZGRlZCB0byB0aGUKCSJzdHJ1Y3QgbGluZSIgZGVjbGFydGF0aW9uIHRvIGRvY3VtZW50IHNvbWUgaW1wb3J0YW50CglkZXBlbmRlbmNpZXMgaW4gaXQuCgoJSSB1bmRlcnRvb2sgdGhlIHJlb3JnYW5pemF0aW9uIHdpdGggZHJlYWQsIGJ1dCBJCglmZWVsIHRoYXQgdGhlIG5ldyBvcmdhbml6YXRpb24gaXMgYW4gaW1wcm92ZW1lbnQKCXdlbGwgYmV5b25kIGp1c3QgZml4aW5nIHRoZSBidWcgdGhhdCBpbnNwaXJlZCBpdC4KClRodSBBcHIgIDIgMDE6MTY6MjUgUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYyAocmVhZF9maWxlX2xpbmUsIHNsb3dfZ2V0bGluZSk6IHRoZSBmcmVhZCgpCglidWZmZXJpbmcgY29kZSBnaXZlcyBpbnN1ZmZpY2llbnQgZmVlZGJhY2sgdG8gYSB1c2VyCglydW5uaW5nIHNlZCB3aXRoIGEgdHR5IGlucHV0IGRldmljZSwgc28gSSBjcmVhdGVkCglzbG93X2dldGxpbmUoKSBmb3IgcmVhZGluZyBmcm9tIGEgdHR5IGRldmljZS4KCUFkZGl0aW9uYWxseSwgRU9GIGRldGVjdGlvbiBoYXMgYmVlbiBtYWRlIGEgbGl0dGxlIG1vcmUKCXNlbnNpdGl2ZSB0byBhdm9pZCByZXF1aXJpbmcgbXVsdGlwbGUgRU9GcyB0byBiZSBlbnRlcmVkCglmcm9tIGEgdHR5LgoKCSogY29uZmlndXJlLmluOiBhZGRlZCBpc2F0dHkoKSBjaGVjay4KCldlZCBBcHIgIDEgMTE6MDQ6MzAgUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoQ1BQRkxBR1MsIExERkxBR1MsIExJQlMpOgoJU2V0IHRvIGFwcHJvcHJpYXRlIHZhbHVlcyBpZiBsYXJnZSBmaWxlIHN1cHBvcnQgbmVlZHMKCWV4cGxpY2l0IGVuYWJsaW5nLiAgQ29kZSBmcmFnbWVudCB0YWtlbiBmcm9tIGEgMTk5Ny0xMC0yNQoJcGF0Y2ggdG8gZ2F3ayBieSBQYXVsIEVnZ2VydCA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKVGh1IEF1ZyAxNCAxNzo0MzoyNyBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogdXRpbHMuYyAoY2tfZmNsb3NlKTogbW9kaWZpZWQgdG8gaWdub3JlIE5VTEwgcGFyYW1ldGVyLgoKVGh1IEF1ZyAxNCAxMjowODo0NSBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jOiB0d2Vha2VkIGV4ZWN1dGVfcHJvZ3JhbSgpIHRvIGVsaW1pbmF0ZQoJZ3JhdHVpdG91cyAiZ290byIgdXNhZ2UuCgpUaHUgQXVnIDE0IDExOjMwOjA0IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb21waWxlLmM6IGFkZGVkIGNhc2UtaW5zZW5zaXRpdmUgbW9kaWZpZXIgKCdJJykgdG8KCWFkZHJlc3MgYW5kIHMvLy8gcmVnZXhwcy4gIFRoZSBzLy8vIGNhc2UgYWxzbyBhY2NlcHRzCgl0aGUgbW9yZSBwb3B1bGFyICdpJyBtb2RpZmllci4gIChUaGUgYWRkcmVzcyByZWdleHAKCWNhbm5vdCB1c2UgJ2knIGFzIGEgbW9kaWZpZXIsIGFzIHRoYXQgY29uZmxpY3RzIHdpdGgKCXRoZSB1c2Ugb2YgdGhlICdpJ25zZXJ0IGNvbW1hbmQuKQoKVGh1IEF1ZyAxNCAwOToyOTowNiBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29tcGlsZS5jOiBhYnN0cmFjdGVkIG91dCBtYXRjaF9zbGFzaCgpIGZyb20gdGhlIHMvLy8sIHkvLy8sCglhbmQgYWRkcmVzcy1yZWdleHAgc3BlY2lhbC1jYXNlIGNvZGVzLgoKCSogZXhlY3V0ZS5jOiBtYWRlIGR1bXBfYXBwZW5kX3F1ZXVlKCkgdXNlIGNrX2ZyZWFkKCkgaW5zdGVhZAoJb2YgaGFuZC1yb2xsZWQgZXJyb3IgY2hlY2tpbmcuCgpNb24gSnVsIDI4IDEwOjUwOjQxIFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQuYywgc2VkLmgsIGV4ZWN1dGUuYzogUE9TSVguMiwgc2VjdGlvbiA0LjU1LjcsIHNheXMgdGhhdAoJYSBuZXdsaW5lIG11c3QgZW5kICpldmVyeSogb3V0cHV0IGxpbmUuICBCdXQgSSB0aGluayB0aGF0CglpdCBpcyB1c2VmdWwgKHdoZW4gc2VkaW5nIGEgYmluYXJ5IGZpbGUpIHRvIG9taXQgYSB0cmFpbGluZwoJbmV3bGluZSBpZiB0aGUgaW5wdXQgbGFja3Mgb25lLiAgVGh1cyB0aGUgYWRkaXRpb24gb2YKCVBPU0lYTFlfQ09SUkVDVCBiZWhhdmlvci4KCgkqIGV4ZWN1dGUuYzogaG93ZXZlciwgd2hlbiBzZWRpbmcgbXVsdGlwbGUgZmlsZXMgbXkgZmVlbGluZwoJaXMgdGhhdCBpdCBtYWtlcyBzZW5zZSB0byBoYXZlIGVhY2ggZmlsZSBidXQgdGhlIGxhc3QKCWJlaGF2ZSBhcy1pZiBpdCBlbmRlZCBpbiBhIG5ld2xpbmUuICBNb2RpZmllZCByZWFkX3BhdHRlcm5fc3BhY2UoKQoJYWNjb3JkaW5nbHkuCgoJKiB1dGlscy5jOiByZWFsaXplZCB0aGF0IGFkZDFfYnVmZmVyKCksIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLAoJc2hvdWxkbid0IGJlIGNhbGxpbmcgbWVtY3B5KCkgKGluZGlyZWN0bHkgdmlhIGFkZF9idWZmZXIoKSksCglzbyByZXdyb3RlIGl0LgoKU2F0IEp1bCAyNiAyMzowODoyOCBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jOiBhdHRlbXB0ZWQgdG8gbWFrZSByZWFkX3BhdHRlcm5fc3BhY2UgbW9yZQoJZWZmaWNpZW50IGZvciB0aGUgdGhlIG5vbi1tbWFwKCkgY2FzZS4KCgkqIHV0aWxzLmMsIHV0aWxzLmgsIGV4ZWN1dGUuYzogbmV3IGZ1bmN0aW9uIGNrX2ZyZWFkKCkKCWNyZWF0ZWQgYW5kIHVzZWQuCgpTYXQgSnVsIDI2IDIwOjIyOjE0IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBleGVjdXRlLmMsIGNvbXBpbGUuYywgc2VkLmM6IGFic3RyYWN0ZWQgdGhlIG1tYXAoKQoJaW50ZXJmYWNlIGludG8gbWFwX2ZpbGUoKS91bm1hcF9maWxlKCkgW3NlZC5jXSwgYW5kCgljaGFuZ2VkIHRoZSBhZC1ob2MgY29kZSBpbiBjb21waWxlX2ZpbGUoKSBbY29tcGlsZS5jXQoJYW5kIHByb2Nlc3NfZmlsZSgpIFtleGVjdXRlLmNdIHRvIG1ha2UgdXNlIG9mIHRoZSBuZXcKCWludGVyZmFjZS4KClNhdCBKdWwgMjYgMTk6NDU6NDYgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYywgY29tcGlsZS5jLCBjb25maWd1cmUuaW46IENoZWNrIHRvIHNlZSBpZiBtbWFwKCkKCWlzIGF2YWlsYWJsZTsgaWYgc28gbWFrZSB1c2Ugb2YgaXQgb24gcmVndWxhciBmaWxlcy4KCgkqIGNvbXBpbGUuYzogY29tcGlsZV9maWxlKCkgbm93IGNsb3NlcyB0aGUgaW5wdXQgZmlsZQoJd2hlbiBpdCBpcyB0aHJvdWdoIQoKU3VuIEp1bCAyMCAyMzo1NzowMiBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29tcGlsZS5jOiBtb2RpZmllZCBwYXJzaW5nIHRvIHBlcm1pdCB3aGl0ZXNwYWNlIGluIG1vcmUKCXBsYWNlcyB3aGVyZSBpdCBtYWtlcyBzZW5zZTsKCWFkZGVkIGJhY2tzbGFzaCBlc2NhcGluZyB0byB0aGUgeS8vLyBjb21tYW5kLCBwZXIgUE9TSVguCgoJKiBleGVjdXRlLmM6IE1lcmdlZCBhcHBlbmRfcGF0dGVybl9zcGFjZSgpIGludG8gcmVhZF9wYXR0ZXJuX3NwYWNlKCk7Cgltb3ZlZCBib2R5IG9mICdzJyBjb21tYW5kIHRvIG5ldyBmdW5jdGlvbiBkb19zdWJzdCgpOwoJbW92ZWQgYm9keSBvZiAnbCcgY29tbWFuZCB0byBuZXcgZnVuY3Rpb24gZG9fbGlzdCgpOwoJY2hhbmdlZCBvdXRwdXQgb2YgJ2wnIGNvbW1hbmQgdG8gY29uZm9ybSB0byBQT1NJWC4yOwoJbWFkZSBsaW5lIGhhbmRsaW5nIGNvbmZvcm0gdG8gUE9TSVg7IGFkZGVkIG91dHB1dF9saW5lKCkgZnVuY3Rpb247CglyZWRlc2lnbmVkIGFwcGVuZC1zcGFjZSBhbGdvcml0aG07IGFkZGVkIGFwcGVuZF9xdWV1ZSBzdHJ1Y3R1cmUgYW5kCgl0aGUgbmV4dF9hcHBlbmRfc2xvdCgpIGFuZCBkdW1wX2FwcGVuZF9xdWV1ZSgpIGZ1bmN0aW9ucy4KCgkqIHNlZC5oOiBtb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZiB3aGF0IGlzIG5vdyBzdHJ1Y3Qgc3Vic3QKCW91dHNpZGUgb2YgdGhlIGRlZmluaXRpb24gb2Ygc3RydWN0IHNlZF9jbWQuCgpTYXQgSnVsIDE5IDE2OjI5OjA5IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQuYywgZXhlY3V0ZS5jLCBzZWQuaCwgTWFrZWZpbGUuYW06IFNlcGFyYXRlZCBvdXQgdGhlCglwaWVjZXMgZGVhbGluZyB3aXRoIGV4ZWN1dGluZyB0aGUgcHJvZ3JhbSBmcm9tIHRoZSB0b3AtbGV2ZWwKCXBhcmFtZXRlciBwYXJzaW5nIGFuZCBjb250cm9sLgoKU2F0IEp1bCAxOSAwMToxNjozNSBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkLmMsIGNvbXBpbGUuYywgc2VkLmgsIE1ha2VmaWxlLmFtOiBzZXBhcmF0ZSBvdXQgdGhlCglwaWVjZXMgZGVhbGluZyB3aXRoIGNvbXBpbGluZyB0aGUgcHJvZ3JhbSBmcm9tIHRoZSBwaWVjZXMKCWRlYWxpbmcgd2l0aCBpbnRlcnByZXRpbmcgdGhlIHJlc3VsdC4KCgkqIGNvbXBpbGUuYzogYWRkIGZ1bmN0aW9ucyBpbl9ub25ibGFuaygpIGFuZCBpbl9pbnRlZ2VyKCksCglhbmQgY2hhbmdlIGludGVyZmFjZSB0byBjb21waWxlX2FkZHJlc3MoKSB3aXRoIGFuIGV5ZQoJdG8gbWFraW5nIGNvZGUgY2xlYXJlci4KCkZyaSBKdWwgMTggMTM6MzU6NTAgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHV0aWxzLmM6IGF0dGVtcHQgYXQgYSBxdWFzaS11bmlmaWNhdGlvbiBvZiB0aGUKCVNUREMgYW5kIHRyYWRpdGlvbmFsIEMgYXBwcm9hY2hlcyB0byBwYW5pYygpLgoKCSogc2VkLmM6IGVsaW1pbmF0ZSBzb21lIGdyYXR1aXRvdXMgYml0IHR3aWRkbGluZy4KCShVc2luZyBmbGFnIGJpdHMgY2FuIGJlIGEgdXNlZnVsIHRlY2huaXF1ZSwgYnV0Cgl0aGlzIGNvZGUgaXMgY2xlYW5lciB3aXRob3V0IHRoZW0uKQoKCSogc2VkLmM6IHBsYWNlIG11dHVhbGx5IGV4Y2x1c2l2ZSBtZW1iZXJzIG9mIHN0cnVjdCBhZGRyCgl3aXRoaW4gYSB1bmlvbiwgbWFpbmx5IHRvIGRvY3VtZW50IHRoZSBleGNsdXNpdml0eTsKCWVsaW1pbmF0ZSB1bnVzZWQgc3RydWN0dXJlIG1lbWJlcnMgZnJvbSBzdHJ1Y3QgZnBfbGlzdDsKCWVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBtb2R1bGUtZ2xvYmFsIHZhcmlhYmxlczsKCXJlbW92ZSBzb21lICNpZiAwIGNvZGUgdGhhdCBpcyB0b28gb2RkIHRvIGtlZXA7CglhbGxlZ2VkbHkgc2ltcGxpZmllZCB0aGUgJ2wnIGNhc2Ugb2YgZXhlY3V0ZV9wcm9ncmFtKCk7CglhbGxlZ2VkbHkgc2ltcGxpZmllZCBpbmNoYXIoKTsKCWxvY2FsaXplZCBzb21lIHN0YXRpYyB2YXJpYWJsZXM7CglyZW5hbWVkIHNvbWUgdmFyaWFibGVzIHRvIGJldHRlciBkb2N1bWVudCB0aGVpciBwdXJwb3NlOwoJcmVtb3ZlZCBzb21lIGdvdG8tcyByZW5kZXJlZCBvYnNvbGV0ZSBieSBvdGhlciBjaGFuZ2VzLgoKVGh1IEp1bCAxNyAxNTozMDo0NCBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogdXRpbHMuYywgdXRpbHMuaCwgc2VkLmM6IGFkZGVkIGFuZCBtYWRlIHVzZSBvZgoJY2tfZnJlZSgpIGZ1bmN0aW9uLgoKCSogdXRpbHMuYywgdXRpbHMuaCwgc2VkLmM6IGNoYW5nZWQgYWxsIHRoZSAqX2J1ZmZlcigpCglmdW5jdGlvbnMgdG8gdGFrZS9yZXR1cm4gYW4gaW5jb21wbGV0ZSB0eXBlCgkic3RydWN0IGJ1ZmZlciAqIiBpbnN0ZWFkIG9mIHVzaW5nIFZPSUQgKi4KCgkqIHV0aWxzLmMsIHV0aWxzLmgsIHNlZC5jOiByZW5hbWVkICJmaW5pc2hfYnVmZmVyKCkiCgl0byAiZnJlZV9idWZmZXIoKSIsIG9uIHRoZSBwcmVtaXNlIHRoYXQgdGhlIG5ldwoJbmFtZSBiZXR0ZXIgZGVzY3JpYmVzIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UuCgpXZWQgSnVsIDE2IDEzOjUyOjE0IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiB1dGlscy5jLCB1dGlscy5oLCBzZWQuYzogYWRkZWQgYW5kIG1hZGUgdXNlIG9mCglja19tZW1kdXAoKSBmdW5jdGlvbi4KCgkqIHNlZC5jOiBwcm90ZWN0ZWQgYSBjYWxsIHRvIGFkZDFfYnVmZmVyKCkgaW4KCWNvbXBpbGVfcHJvZ3JhbSgpIHdoaWNoIGNvdWxkIGhhdmUgdHJpZWQgdG8KCXB1c2ggYW4gRU9GIGlmIGEgYS9pL2MgY29tbWFuZCBlbmRlZCB3aXRoCglhICdcJywgRU9GIHNlcXVlbmNlLgoKCSogdXRpbHMuYzogYWRkZWQgc2FuaXR5IGNoZWNrIHRvIGFkZDFfYnVmZmVyKCkgc28gdGhhdAoJRU9GIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBidWZmZXIuCgpXZWQgSnVsIDE2IDAzOjU2OjI2IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGNvbXBhdC5oLCBjb21wYXQuYzogYWRkZWQgbWVtY2hyLgoKCSogc2VkLmM6IGdvdCByaWQgb2YgYXJiaXRyYXJ5IE5VTV9GUFMgbGltaXQ7CgltYWRlIGdsb2JhbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyAic3RhdGljIiB3aGVyZSBhcHByb3ByaWF0ZTsKCW1ha2UgdmFyaW91cyBjb3NtZXRpYyBjaGFuZ2VzLCBob3BlZnVsbHkgaW1wcm92aW5nIHJlYWRhYmlsaXR5OwoJc2ltcGxpZmllZCBzb21lIHJlZHVuZGFudCBwcmVkaWNhdGVzOwoJc2ltcGxpZmllZCBzb21lIGNvZGUsIGJ1dCBub3RoaW5nIGZ1bmRhbWVudGFsICh5ZXQ/KS4KCldlZCBKdWwgMTYgMDA6MjQ6NTQgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGFsbG9jYS5jLCBnZXRvcHQuYywgZ2V0b3B0LmgsIGdldG9wdDEuYzogdXBkYXRlZCBmcm9tCgl2ZXJzaW9ucyBpbiB0ZXh0dXRpbHMtMS4yMi4KCgkqIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5hbSwgY29uZmlndXJlLmluOiBwdXQgaW4gYXV0b21ha2Ugc3VwcG9ydC4KCgkqIGJhc2ljZGVmcy5oLCBjb21wYXQuaCwgY29tcGF0LmMgWywgc2VkLmMsIHV0aWxzLmNdOiB0b29rIG91dAoJc29tZSB2ZXJ5IHVnbHkgY29tcGF0aWJpbGl0eSAjaWZkZWZzIGFuZCBwYWNrYWdlZCBpbnRvIG9uZQoJcGxhY2UuCgoJKiBzZWQuYywgdXRpbHMuYzogc29tZSBncmF0dWl0b3VzIGZvcm1hdHRpbmcgY2hhbmdlcy4KCgkqIHV0aWxzLmM6IGNoYW5nZWQgZGF0YXR5cGUgb2YgdXRpbHNfaWRfcyBpbiBvcmRlciB0bwoJZWxpbWluYXRlIGFyYml0cmFyeSBhcnJheSBzaXplLgoKU3VuIEp1bCAxMyAxNzowMDoyNiBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkLmMsIHV0aWxzLmMsIHV0aWxzLmg6IGRlLWxpbnRpbmcgb3JpZW50ZWQgY2xlYW51cC4KClN1biBKdWwgMTMgMDA6NDY6NDggUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC5jOiBmaXhlZCBidWcgd2hpY2ggY2F1c2VkIFNFR1YgZm9yIGZpbGVzIG1pc3NpbmcgYQoJZmluYWwgbmV3bGluZS4gIENvcnJlY3RlZCBjYWxscyB0byByZWduZXhlYyB0byBwYXNzIHRoZQoJcHJvcGVyIHBhcmFtZXRlcnMsIGluIHRoZSBwcm9wZXIgb3JkZXIuCgpTYXQgRGVjIDMwIDIwOjE2OjU5IDE5OTUgIFRvbSBMb3JkICA8bG9yZEBiZWVoaXZlPgoKCSoqKiBWZXJzaW9uIDMuMDAgcmVsZWFzZWQKCQoJKiBzZWQuYzogVXNlIHBvc2l4IGVudHJ5IHBvaW50cyB0byByZWdleHAgZnVuY3Rpb25zLgoJRml4IGVub3VnaCBidWdzIHRvIHBhc3MgdGhlIHRlc3Qtc3VpdGUuCgouLi4uLi4uIEphc29uIE1vbGVuZGEgIDxjcmFzaEBjeWdudXMuY29tPgoKCSogdGVzdHN1aXRlLzogdHJpcHB5IHRlc3Qgc3VpdGUuCgoKV2VkIE1heSAxMSAwNzo0NjoyNCAxOTk0ICBDaGlwIFNhbHplbmJlcmcgIChjaGlwQGZpbi51dWNwKQoKCSoqKiBWZXJzaW9uIDIuMDUgcmVsZWFzZWQKCQoJKiBzZWQuYyAoY29tcGlsZV9hZGRyZXNzKTogUmVjb2duaXplIG51bWVyaWMgYWRkcmVzc2VzLgoJRml4ZXMgdHlwbyBtYWRlIGR1cmluZyBpbnN0YWxsYXRpb24gb2YgIn4iIGZlYXR1cmUuCgpTYXQgQXByIDMwIDE3OjE3OjM4IDE5OTQgIFRvbSBMb3JkICAobG9yZEB4MS5jeWdudXMuY29tKQoKCSoqKiBWZXJzaW9uIDIuMDQgcmVsZWFzZWQKCgkqIHNlZC5jOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbQoJIEZyb206IGthcDFAdGFvLmNwZS51Y2hpY2Fnby5lZHUgKERpZXRyaWNoIEthcHBlKQoKCSBEaWV0cmljaCB3cml0ZXM6CgoJIEFzIG15IGNvbnRyaWJ1dGlvbiB0byB0aGUgY3JlZXBpbmcgZmVhdHVyZSBjcmVhdHVyZSBpbiBzZWQsCgkgaGVyZSBpcyBhIG5ldyB0eXBlIG9mIGFkZHJlc3MuIFRoZSBhZGRyZXNzIGhhcyBmb3JtIG5+bSwKCSB3aGljaCBtZWFucyAidGhlIGxpbmUgbnVtYmVyIGlzIGVxdWFsIHRvIG4gbW9kdWxvIG0uIiBUaGUKCSBtb2RpZmljYXRpb25zIHRvIHNlZCBhcmUgdHJpdmlhbCwgYW5kIHRoZSBnZW5lcmFsCgkgdXNlZnVsbmVzcyBvZiB0aGlzIGFkZHJlc3Mgc2hvdWxkIGJlIG9idmlvdXMuIElmIG0gaXMgMCBvcgoJIG1pc3NpbmcsIDEgaXMgdXNlZCBpbiBpdHMgcGxhY2UgKGNvdWxkIGJlIGEgYnVnIG9yIGEKCSBmZWF0dXJlIDotKS4KClNhdCBBcHIgMzAgMTc6MTc6MzggMTk5NCAgVG9tIExvcmQgIChsb3JkQHgxLmN5Z251cy5jb20pCgoJKiByeC5jIChzb2x2ZV9kZXN0aW5hdGlvbik6IHByb3RlY3QgYHNvbHV0aW9uJyBtb3JlIGNhcmVmdWxseS4KCVRoaXMgaXMgYSBjbGVhbnVwIG9mIGEgcGF0Y2ggZnJvbSBLZXZpbiBCdWV0dG5lcgoJIChrZXZAY3Vqby5nZWcubW90LmNvbSkuCgpTYXQgQXByIDMwIDE3OjE3OjM4IDE5OTQgIFRvbSBMb3JkICAobG9yZEB4MS5jeWdudXMuY29tKQoKCSogcnguYzogbWFrZSB0cmFuc2xhdGlvbiB0YWJsZXMgdW5zaWduZWQgY2hhcnMKCgkqIHNlZC5jIChtYWluKTogQ29tcGlsZSBhY2N1bXVsYXRlZCAtZSBjb21tYW5kcyBhcwoJc29vbiBhcyBhIC1mIGNvbW1hbmQgY29tZXMgYWxvbmcuICBUaGlzIGVuc3VyZXMgdGhhdAoJdGhlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBpbiB0aGUgcmlnaHQgb3JkZXIuCgpNb24gT2N0IDI1IDE0OjQxOjQ3IDE5OTMgIFRvbSBMb3JkICAobG9yZEBydGwuY3lnbnVzLmNvbSkKCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0pOiAndycgZmx1c2hlcyB0aGUgYnVmZmVyIGFmdGVyIGl0Cgl3cml0ZXMgLS0gZGlhZ25vc2VkIGJ5IGRvdWdAcmVzZWFyY2guYXR0LmNvbS4gICdyJyBhbmQgJ3cnIHRvCgl0aGUgc2FtZSBmaWxlIGlzIG5vdyBzdXBwb3J0ZWQgLS0gaG9wZWZ1bGx5IGV2ZW4gaW4gYSB3YXkgdGhhdAoJc2F0aXNmaWVzIFBvc2l4IChpdCBub3cgYmVoYXZlcyBkaWZmZXJlbnRseSBmcm9tIHNvbWUKCS9iaW4vc2VkJ3MgYW5kIHRoZSBzcGVjIGlzIGhhcmQgdG8gcmVhZCBzbyBpJ20gbm90IHN1cmUpLgoKCUFsc28sICdyJyBvZiBhIG5vbi1leGlzdGVudCBmaWxlIGlzIG5vdyBwZXJtaXR0ZWQuCgpNb24gT2N0IDExIDIxOjA2OjEwIDE5OTMgIFRvbSBMb3JkICAobG9yZEBjeWdudXMuY29tKQoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IHJlbWVtYmVyIHRoYXQgJ2InIGFuZCAndCcgYXJlIG1vcmUKCWxpa2UgbG9uZ2ptcCB0aGFuIGdvdG8uICBQYXRjaCBmcm9tIHRvbUBiYXNpbC5pY2NlLnJ1Zy5ubCAoVG9tCglSLkhhZ2VtYW4pCgoJKiByeC5jOiBwYXRjaCBmcm9tIEZyb206IGZpbiFjaGlwQHJ1dGdlcnMuZWR1IChDaGlwCglTYWx6ZW5iZXJnKSB0byBnZXQgcmlkIG9mIGNvbXBpbGVyIHdhcm5pbmdzLgoKClNhdCBBdWcgIDcgMDE6MDQ6NTkgMTk5MyAgVG9tIExvcmQgIChsb3JkQHVuaXg3LmFuZHJldy5jbXUuZWR1KQoKCSoqKiBWZXJzaW9uIDIuMDMgcmVsZWFzZWQKCQoJKiBzZWQuYyAoY29tcGlsZV9yZWdleCk6IHJlcG9ydCBlcnJvciBtZXNzYWdlcyBmb3IgYm9ndXMKCXJlZ2V4cHMuCgoJU0VFIEFMU086ICBDaGFuZ2VMb2cucngKCgwKV2VkIEp1bCAyMSAwMDoyODowMyAxOTkzICBUb20gTG9yZCAgKGxvcmRAdW5peDguYW5kcmV3LmNtdS5lZHUpCgoJKiBhbGxvY2EuYzogdXBncmFkZWQgdG8gYSBtb3JlIHJlY2VudCB2ZXJzaW9uCgoJKiByeC5jIChyZV9zZWFyY2hfMik6IHByZWZlciBtYXRjaGVzIHdpdGggbG9uZ2VyCglzdWJleHByZXNzaW9ucyB0byB0aG9zZSB3aXRoIHNob3J0ZXIgb25lcywgZ2l2aW5nIHByZWNlZGVuY2UKCXRvIGxvdyBudW1iZXJlZCBzdWJleHByZXNzaW9ucy4KCgkqIHJ4LmMgKHJlX2NvbXBpbGUpOiBkb24ndCBmcmVlIGBwYXJhbXMnIGlmIGl0cyBudWxsLgoKRnJpIEp1bCAxNiAwMToxMjowOCAxOTkzICBUb20gTG9yZCAgKGxvcmRAdW5peDguYW5kcmV3LmNtdS5lZHUpCgoJKiByeC5bY2hdLCBzZWQuYzogcnggcmVwbGFjZXMgcmVnZXguCgoKClRodSBNYXkgMjcgMTE6MTM6MDMgMTk5MyAgVG9tIExvcmQgIChsb3JkQHVuaXgzLmFuZHJldy5jbXUuZWR1KQoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSwgbWF0Y2hfYWRkcik6IGNhdWdodCBtb3JlIGNhc2VzCgl0aGF0IG5lZWQgdG8gYmUgc2Vuc2l0aXZlIHRvIGEgbWlzc2luZyBcbiBhdCBFT0YuCgpGcmkgTWF5IDIxIDAwOjM5OjIyIDE5OTMgIFRvbSBMb3JkICAobG9yZEB1bml4OC5hbmRyZXcuY211LmVkdSkKCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0pOiBhcHBseSBnYXVtb25kcCdzIHBhdGNoCgl0byBmaXggJ1x4YWJjeHMvZm9vL2Jhci8nLgoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6CglJZiBhIHNlY29uZCBhZGRyZXNzIGlzIGEgcmVnZXhwLCBuZXZlciBtYXRjaCBpdCBvbiB0aGUKCXNhbWUgbGluZSBhcyB0aGUgZmlyc3QgYWRkcmVzcy4KCgkqIHNlZC5jIChjb21waWxlX3JlZ2V4cCk6CglOdW1lcmljIHJhbmdlcyAgeCx5IHMudC4geSA8IHggYXJlIG5vdyB0cmVhdGVkIGFzIHgseC4KCVRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGF0IHRoZXkgd2VyZSBiZWluZyBoYW5kbGVkIGxpa2UgeCx4KzEuCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtLCByZWFkX3BhdHRlcm5fc3BhY2UsCglhcHBlbmRfcGF0dGVybl9zcGFjZSkgZG9uJ3QgYWRkIG5ld2xpbmVzIHRvIGxpbmVzCgl0aGF0IGRvbid0IGhhdmUgdGhlbS4KCldlZCBNYXkgMTkgMTM6MzQ6NDUgMTk5MyAgVG9tIExvcmQgIChsb3JkQHVuaXg5LmFuZHJldy5jbXUuZWR1KQoKCSogc2VkLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IGdyb2sgXFxuIGluIGNvbW1lbnRzLgoKTW9uIE1heSAxNyAxNjozNDo1MCAxOTkzICBUb20gTG9yZCAgKGxvcmRAdW5peDkuYW5kcmV3LmNtdS5lZHUpCgoJKiBhbGxvY2EuYzogbmV3IChzdGFuZGFyZCkgZmlsZQoKCSogY29uZmlndXJlLmluOiBBQ19DT05TVGlmaWVkCgoJKiBzZWQuYyAoY29tcGlsZV9wcm9ncmFtKTogcHJvcGVybHkgZGlhZ25vc2UgdGhlIGVycm9yIG9mCglhIG1pc3NpbmcgY29tbWFuZCAoZS5nLiBzZWQgL3gvKS4gKHRoYW5rcyBnYXVtb25kcCkKCgkqIHNlZC5jIChjb21waWxlX3JlZ2V4cCk6IGhhbmRsZSBjaGFyYWN0ZXIgY2xhc3NlcyBjb3JyZWN0bHkuCglUaGFua3MgZ2F1bW9uZHBARVJFLlVNb250cmVhbC5DQQoJYW5kICBzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGUuCgpUaHUgTWF5ICA2IDEyOjM3OjE4IDE5OTMgIFRvbSBMb3JkICAobG9yZEB1bml4MTAuYW5kcmV3LmNtdS5lZHUpCgoJKiBzZWQuYyAoY29tcGlsZV9maWxlbmFtZSwgZXhlY3V0ZV9wcm9ncmFtKTogZG9uJ3QgdXNlCglgYWNjZXNzJyBvciBgL2Rldi9udWxsJy4KCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0pOiAnTicgYXQgRU9GIHNob3VsZCBkZWxldGUgdGhlIHBhdCBidWYuCgoJKiBzZWQuYyAoY29tcGlsZV9maWxlbmFtZSk6IHRydW5jYXRlLCBkb24ndCBhcHBlbmQgZmlsZXMKCWJlaW5nIG9wZW5uZWQgZm9yIGB3JyBvciBgcy8vL3cnCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogLW4gc3dpdGNoIHNob3VsZG4ndCBlZmZlY3QgYGknIG9yIGBjJy4KCgkqIHNlZC5jIChjb21waWxlX3Byb2dyYW0pOiBkb24ndCBjb21waWxlIHVuZXNjYXBlZCBuZXdsaW5lcwoJaW50byB0aGUgc3Vic3RpdHV0aW9uIHN0cmluZyBvZiBhbiBgcycgY29tbWFuZCAodGhleSBhcmUgYW4gZXJyb3IpLgoKCSogc2VkLmMgKGNvbXBpbGVfcmVnZXgpOiBjb3JyZWN0bHkgc2tpcCBvdmVyIGNoYXJhY3RlcgoJc2V0cyB0aGF0IGNvbnRhaW4gYF0nLgoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IHBhdGNoIGZyb20gZ2F1bW9uZHAKCUNvcnJlY3RseSBoYW5kbGUgZW1wdHktc3RyaW5nIG1hdGNoZXMgaW4gdGhlIGNhc2Ugb2YgYW4gYHMnCgljb21tYW5kIHdpdGggYSByZXBlYXQgY291bnQuCgoJKiBzZWQuYyAoY29tcGlsZV9wcm9ncmFtKTogcGF0Y2ggZnJvbSBnYXVtb25kcEBlcmUuVU1vbnRyZWFsLmNhLgoJRG9uJ3QgY29uc3VtZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBsYWJlbCBvZiBhIGBiJywgYHQnIG9yIGA6JyBjb21tYW5kLgoKCSogc2VkLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IHVubWF0Y2hlZCBvcGVuIGJyYWNlcyBhcmUgYW4gZXJyb3IuCgoJKiBzZWQuYyAoY29tcGlsZV9maWxlKTogd2hlbiBjb25zdW1pbmcgYW4gaW5pdGlhbCBjb21tZW50LAoJY291bnQgbGluZXMgY29ycmVjdGx5LgoKV2VkIE5vdiAxOCAwMjoxMDo1OCAxOTkyICBUb20gTG9yZCAgKGxvcmRAdW5peDIuYW5kcmV3LmNtdS5lZHUpCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogTWFkZSBzLy8vcCBwcmludCBldmVuIGlmIC1uIHdhcwoJc3BlY2lmaWVkLgoKCSogc2VkLmMgKGNvbXBpbGVfc3RyaW5nKTogQ2hhbmdlZCB0aGUgdHlwZSBvZiB0aGlzIGZ1bmN0aW9uIHRvCglmaXggYSBjb21waWxlIHdhcm5pbmcuCgpXZWQgTm92ICA0IDE3OjE1OjM0IDE5OTIgIFRvbSBMb3JkICAobG9yZEB1bml4Ny5hbmRyZXcuY211LmVkdSkKCgkqIHNlZC5jIChtYWluKTogSW5pdGlhbGl6ZSB0aGUgaG9sZCBhcmVhIHRvIGNvbnRhaW4gIlxuIgoJaW5zdGVhZCBvZiAiIi4gIEluIGV4ZWN1dGVfcHJvZ3JhbSwgYWxsIGxpbmVzIGFyZSBleHBlY3RlZAoJdG8gYmUgbmV3bGluZSB0ZXJtaW5hdGVkLiAgQWxzbywgaWYgSCBpcyB0aGUgZmlyc3QgY29tbWFuZAoJaW4gdGhlIHNjcmlwdCwgdGhlIHJlc3VsdCBpcyBhIHBhdHRlcm4gYnVmZmVyIHRoYXQgYmVnaW5zCgl3aXRoIGEgYmxhbmsgbGluZS4gIFRoYW5rcyB0byBwaW5hcmRAaXJvLnVtb250cmVhbC5jYQoJKEZyYW5jb2lzIFBpbmFyZCkgZm9yIHBvaW50aW5nIG91dCB0aGlzIGFuZCBtYW55IG90aGVyIGJ1Z3MuCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogRml4ZWQgYSBjYXNlIG9mIGBEJyBjb21tYW5kLgoJVGhhbmtzIENocmlzIFdlYmVyIDx3ZWJlckBidWNrbmVsbC5lZHU+CgoJKiBzZWQuYzogYWRkZWQgbmV3IHRlc3RzIG9mIG5vX2RlZmF1bHRfb3V0cHV0IHRvIG1ha2UgLW4gd29yay4KCVRoYW5rcyBBbmRyZXcgSGVyYmVydCA8YW5kcmV3QHdlcnBsZS5hcGFuYS5vcmcuYXU+CgoJKiBzZWQuYywgY29uZmlndXJlLmluLE1ha2VmaWxlLmluOiBhdXRvY29uZmVkIGJjb3B5IGFuZCBjb25zdC4KCVRoYW5rcyAiSi5ULiBDb25rbGluIiA8anRjQGdhaW4uY29tPgoKCSogc2VkLmM6IG1hZGUgcHJvZ19jdXIsIHByb2dfc3RhcnQsIGFuZCBwcm9nX2VuZCB1bnNpZ25lZCBzbwoJdGhhdCB1c2VycyBjb3VsZCB3cml0ZSAgYHNlZCAtZSBzL/8vZm9vL2cnLgoKVHVlIE9jdCAxMyAwMDowNDowNSAxOTkyICBUb20gTG9yZCAgKGxvcmRAdW5peDMuYW5kcmV3LmNtdS5lZHUpCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogZml4ZWQgdGhlIGN5Y2xpbmcgYmVoYXZpb3Igb2YgJ0QnCgoJKiBzZWQuYzogaW50ZWdyYXRlZCBwYXRjaCB0aGF0IGNsb3NlcyBmaWxlcwoKCSogc2VkLmM6IGNoYW5nZWQgcmVnZXhwIHN5bnRheAoKRnJpIE1heSAyMiAxNToxMToxMiAxOTkyICBUb20gTG9yZCAgKGxvcmQgYXQgbW9yaWFydHkuYmguYW5kcmV3LmNtdS5lZHUpCgoJKiByZWdleC5jOiAgdGhpcyBpcyBub3QgbXkgY2hhbmdlLCBidXQgYSBwb2ludGVyIHRvIHRoZSBmYWN0Cgl0aGF0IGthcmxAZ251IGZpeGVkIHNvbWUgcmVnZXhwIGJ1Z3MgdGhhdCB3ZXJlIHBsYWd1aW5nIHNlZC4KClRodSBBcHIgMzAgMTM6MDI6MjEgMTk5MiAgVG9tIExvcmQgIChsb3JkIGF0IHVuaXgzLmFuZHJldy5jbXUuZWR1KQoKCSogc2VkLmMgKGNvbXBpbGVfcHJvZ3JhbSwgZXhlY3V0ZV9wcm9ncmFtKQoJc3VicHJvZ3JhbXMgYXJlIG5vdyBjb21waWxlZCB3aXRoIGFuIGV4cGxpY2l0IGNvbnRpbnVhdGlvbiA7KQoJcmV0dXJuX3YgYW5kIHJldHVybl9pIGluIHN0cnVjdCB2ZWN0b3IuICBleGVjdXRlX3Byb2dyYW0KCW5vIGxvbmdlciByZWN1cnNlcyB0byBleGVjdXRlIHN1YnByb2dyYW1zIChjYXNlICd7JykgYW5kIG5vdwoJdW5kZXJzdGFuZHMgYSByZXR1cm4gaW5zdHJ1Y3Rpb24gKGNhc2UgJ3snKS4KClR1ZSBBcHIgMjggMTc6MTM6MDQgMTk5MiAgVG9tIExvcmQgIChsb3JkIGF0IHVuaXg3LmFuZHJldy5jbXUuZWR1KQoKCSogc2VkLmMgKGNvbXBpbGVfYWRkcmVzcykgYWRkZWQgXD9yZWdleHA/IHN5bnRheCBmb3IgYWRkcmVzc2VzLgoKCSogc2VkLmMgKG1haW4pIGFkZGVkIHt9IGludGVydmFscyB0byB0aGUgb2JzY3VyZSByZWdleHAKCXN5bnRheC4KCgkqIHNlZC5jIChjb21waWxlX3Byb2dyYW0pICBhZnRlciBjYWxsaW5nIGNvbXBpbGVfYWRkcmVzcywKCW5vcm1hbGl6ZSBudW1lcmljIGFkZHJlc3NlcyAobWFrZSBhMi5hZGRyX251bWJlciA+IGExLmFkZHJfbnVtYmVyKS4KCVRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbGluZSBudW1iZXJzIG11c3QgbWF0Y2ggZXhhY3RseSwKCWJ1dCBzZWQgZG9lcyBub3QgdHJ5IHRvIG1hdGNoIGEyIHVudGlsIGFmdGVyIGExIGhhcyBtYXRjaGVkLAoJeWV0IGExLGEyIHdoZXJlIGEyIDw9IGExIGlzIGRlZmluZWQgdG8gYmUgZXF1aXZlbGVudCB0bwoJYTEsYTErMQoKU2F0IEZlYiAyOSAxMDo1NTo1NCAxOTkyICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam1AbnV0cmltYXQpCgoJKiBzZWQuYyAodXNhZ2UpOiBEb2N1bWVudCBsb25nIG9wdGlvbnMgYXMgc3RhcnRpbmcgd2l0aCBgLS0nLgoKTW9uIERlYyAgOSAyMzo1Njo0MCAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHNlZC5jOiBJbmNsdWRlIHN5cy90eXBlcy5oLCBmb3IgbmV3IHJlZ2V4LmguCgpUdWUgTm92ICA1IDAyOjE2OjAxIDE5OTEgIERhdmlkIEouIE1hY0tlbnppZSAgKGRqbSBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogdXRpbHMuYzogQ2hhbmdlIE5PX1ZGUFJJTlRGIHRvIFZQUklOVEZfTUlTU0lORywgZm9yCgljb21wYXRpYmlsaXR5IHdpdGggYXV0b2NvbmYuCgpNb24gU2VwICAyIDIyOjAyOjQwIDE5OTEgIERhdmlkIEouIE1hY0tlbnppZSAgKGRqbSBhdCBhcHBsZS1ndW5raWVzKQoKCSogc2VkLmMgKGNvbXBpbGVfcmVnZXgpOiBUcmVhdCBcIGFzIGEgbm9ybWFsIGNoYXJhY3RlciB3aGVuIGluCglhIGNoYXIgY2xhc3MuCgpUaHUgQXVnICA4IDAwOjE1OjMzIDE5OTEgIERhdmlkIEouIE1hY0tlbnppZSAgKGRqbSBhdCBibGVlbikKCgkqIFZlcnNpb24gMS4wOC4KCgkqIHNlZC5jIChjb21waWxlX2ZpbGVuYW1lKTogSWYgcmVhZGluZyBhIGZpbGUgZmFpbHMsIHJlYWQKCS9kZXYvbnVsbCBpbnN0ZWFkLiAgSXQncyB3aGF0IFVuaXggYW5kIFBPU0lYIGRvLCBlZmZlY3RpdmVseS4KCgkqIHNlZC5jIChjb21waWxlX3JlZ2V4KTogVGhlICdzbGFzaCcgY2hhcmFjdGVyIGRvZXNuJ3QKCXRlcm1pbmF0ZSB0aGUgcmVnZXggaWYgaXQncyBpbiBhIGNoYXJhY3RlciBjbGFzcy4KCgkqIHNlZC5jIChtYWluKTogSWYgZ2l2ZW4gbm8gYXJncywgb3IgYmFkIG9wdGlvbiwgcHJpbnQgdXNhZ2UKCW1lc3NhZ2UuCgkodXNhZ2UpOiBOZXcgZnVuY3Rpb24uCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogQW1vdW50IHdyaXR0ZW4gZm9yICdQJyBjb21tYW5kIHdhcwoJd3JvbmcuICBGcm9tIHN0ZXBoZW5kQGtzci5jb20gKFN0ZXBoZW4gRGF2aXMpLgoKV2VkIEF1ZyAgNyAxNjo1MToxNCAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgYXBwbGUtZ3Vua2llcykKCgkqIHNlZC5jIChhcHBlbmRfcGF0dGVybl9zcGFjZSk6IENoZWNrIGZvciBidWZmZXIgZnVsbCBiZWZvcmUKCWluc3RlYWQgb2YgYWZ0ZXIgd3JpdGluZyB0byBidWZmZXIuICBEb24ndCBuZWVkIHRvIHRlc3QgZm9yCglFT0YgaW5pdGlhbGx5IGFueW1vcmUsIGR1ZSB0byB0aGUgbmV4dCBjaGFuZ2UuCgkoZXhlY3V0ZV9wcm9ncmFtKTogRm9yICduJyBhbmQgJ04nIGNvbW1hbmRzLCBpZiBlb2YgaXMgcmVhY2hlZAoJaW4gaW5wdXQsIHF1aXQgdGhlIHNjcmlwdCBsaWtlIFVuaXggc2VkIGRvZXMuCglGaXggbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbXMgZm9yICdhJyBhbmQgJ3InIGNvbW1hbmRzLgoJKGNvbXBpbGVfcHJvZ3JhbSk6IEZpeCBvZmYgYnkgb25lIGVycm9yIGluIHByb2Nlc3NpbmcgY29tbWVudHMuCglBbGwgb2YgdGhlIGFib3ZlIGFyZSBmcm9tIFRhcGFuaSBUYXJ2YWluZW4sIHRhcnZhaW5lQHR1a2tpLmp5dS5maS4KCgkqIHNlZC5jIChzZXR1cF9qdW1wKTogVXNlIGlzYmxhbmsgaW5zdGVhZCBvZiB0ZXN0aW5nIGZvciAnICcKCW9yICdcdCcsIGZvciBQT1NJWCBsb2NhbGVzLgoKCSogdXRpbHMuYyAoY2tfc3RyZHVwKTogUmVuYW1lZCBmcm9tIHN0cmR1cC4KCSogc2VkLmM6IENoYW5nZSBjYWxsZXJzLgoKCSogc2VkLmMsIHV0aWxzLmM6IENsZWFuIHVwIGRlY2xhcmF0aW9ucyBhbmQgaW5jbHVkZXMgdG8gZ2V0CglyaWQgb2YgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBzZWQuYyAobWFpbik6IEFkZCBsb25nLW5hbWVkIG9wdGlvbnMuICBEb24ndCBjb21wbGFpbiBpZiAtbgoJaXMgZ2l2ZW4gdHdpY2UuCgpGcmkgQXVnICAyIDEyOjMzOjE2IDE5OTEgIERhdmlkIEouIE1hY0tlbnppZSAgKGRqbSBhdCBhcHBsZS1ndW5raWVzKQoKCSogY29uZmlndXJlOiBTdXBwb3J0ICtzcmNkaXIgYXJnLiAgQ3JlYXRlIGNvbmZpZy5zdGF0dXMgYW5kCglyZW1vdmUgaXQgYW5kIE1ha2VmaWxlIGlmIGludGVycnVwdGVkIHdoaWxlIGNyZWF0aW5nIHRoZW0uCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgREVTVERJUiB0byBwcmVmaXguCgpNb24gSnVsIDE1IDEzOjA3OjM5IDE5OTEgIERhdmlkIEouIE1hY0tlbnppZSAgKGRqbSBhdCB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogc2VkLmMgKG1haW4pOiBBZGQgLVYgb3B0aW9uIHRvIHByaW50IHZlcnNpb24gbnVtYmVyLgoJKFVTQUdFKTogTWVudGlvbiAtVi4KCk1vbiBKdWwgIDggMDE6NDI6MjIgMTk5MSAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogc2VkLmM6IERlZmluZSBiY29weSBpbiB0ZXJtcyBvZiBtZW1jcHkgaWYgU1REQ19IRUFERVJTIGFzCgl3ZWxsIGFzIGlmIFVTRy4KCShjb21waWxlX2ZpbGVuYW1lKTogRG9uJ3QgZ2xvYiBmaWxlbmFtZSAoZm9yICdyJyBhbmQgJ3cnCgljb21tYW5kcykuICBVbml4IHNlZCBkb2Vzbid0IGRvIGl0IGFuZCBpdCdzIG5vdCB2ZXJ5IHVzZWZ1bCwKCXNpbmNlIGl0IGNhbiBvbmx5IG1hdGNoIDAgb3IgMSBmaWxlcy4KCShleGVjdXRlX3Byb2dyYW0pOiBDaGFuZ2UgJ1xhJyB0byAwMDcgc2luY2Ugc29tZSBjb21waWxlcnMKCWRvbid0IHJlY29nbml6ZSBcYS4KCSogdXRpbHMuYzogTmV3IGZpbGU7IGNvZGUgbW92ZWQgZnJvbSBzZWQuYy4KCSogUmVwbGFjZSBNYWtlZmlsZSB3aXRoIE1ha2VmaWxlLmluIGFuZCBjb25maWd1cmUuCglVcGRhdGUgUkVBRE1FLgoKVHVlIE1hciAyNiAxMzowMDo0OCBFU1QgMTk5MQlKYXkgRmVubGFzb24gKGhhY2tAZ251LmFpLm1pdC5lZHUpCgoJKiBzZWQuYyAobWF0Y2hfYWRkcmVzcykgIEFkZGVkIGEgdHJpdmlhbCBjYXN0IGZvciBwb3J0YWJpbGl0eS4KCk1vbiBGZWIgMjUgMTM6MjM6MjkgRVNUIDE5OTEJSmF5IEZlbmxhc29uIChoYWNrQGFpLm1pdC5lZHUpCgoJKiBzZWQuYyAgQ2hhbmdlZCAncycgY29tbWFuZCB0byB3b3JrIHdpdGggbGF0ZXN0IHZlcnNpb24gb2YgcmVnZXgoKQoJcm91dGluZXMsIHdoaWNoIG15c3RlcmlvdXNseSBjaGFuZ2VkIHNvbWV3aGVyZSBpbiB0aGVyZS4gLiAuCglBIG9uZS1saW5lIHBhdGNoIGZyb20gRGF2aWQgRWNrZWxrYW1wIChlY2tlbGthbXBAbWNjLmNvbSkuCgoJSW5pdGlhbGl6ZSB0aGUgZmFzdG1hcCBpbiB0aGUgaG9wZXMgdGhhdCBpdCdsbCBtYWtlIHNlZCBmYXN0ZXIuCgpUaHUgRmViIDIxIDEzOjQyOjI3IEVTVCAxOTkxCUpheSBGZW5sYXNvbiAoaGFja0BhaS5tdGkuZWR1KQoKCSogc2VkLmMgQ2hhbmdlIHBhbmljIHRvIGNvbXBpbGUgd2l0aCBvdGhlciBfX1NURENfXyBjb21waWxlcnMuCgpXZWQgSmFuIDMwIDEwOjQ2OjM4IEVTVCAxOTkxCUpheSBGZW5sYXNvbiAoaGFja0BhaS5taXQuZWR1KQoKCSogc2VkLmMgIENoYW5nZWQgdmVyc2lvbiBudW1iZXIuICBNYWRlIG5ldyByZWxlYXNlLgoKVHVlIE5vdiAyNyAxNTozNDo1MSBFU1QgMTk5MAlKYXkgRmVubGFzb24gKGhhY2tAYWkubWl0LmVkdSkKCgkqIHNlZC5jIChzZXR1cF9qdW1wKSAgRG9uJ3QgYmxvdyBjaHVua3MgaWYgdGhlcmUgaXNuJ3QgYSBsYWJlbAoJYWZ0ZXIgYSBiIG9yIHQgY29tbWFuZC4KCgkJKG1haW4pIERvbid0IHBhbmljIGlmIGl0IGEgYnJhbmNoIGNvbW1hbmQgZG9lc24ndCBoYXZlCglhIGxhYmVsIHRvIGJyYW5jaCB0by4KCgkJKG1haW4pICBDb2xsZWN0IGFsbCB0aGUgLWUgYXJndW1lbnRzIHRvZ2V0aGVyIGFuZCBwYXJzZSB0aGVtCglhbGwgYXQgb25jZS4gIFRoaXMgd2F5LCAtZSB7IC1lIG11bWJsZSAtZSB9IHdpbGwgd29yay4KCglBbGwgdGhlc2Ugc21hbGwgcGF0Y2hlcyBmcm9tIERhdmlkIFNjaG1pZHQgKGRhdmlkc0Bpc2MtYnIuaXNjLWJyLmNvbSkKClR1ZSBTZXAgMTEgMTI6NTE6MzcgRURUIDE5OTAJSmF5IEZlbmxhc29uIChoYWNrQGFpLm1pdC5lZHUpCgoJKiBzZWQuYyBDaGFuZ2VkIHNvbWUgZnVuY3Rpb24gZm9yd2FyZCBkZWNsYXJhdGlvbnMgdG8gdXNlIFZPSUQgKgoJaW5zdGVhZCBvZiBjaGFyICoKCk1vbiBKdWwgMTYgMTE6MTI6NTQgRURUIDE5OTAgSmF5IEZlbmxhc29uIChoYWNrQGFpLm1pdC5lZHUpCgoJKiBzZWQuYyAoY2tfbWFsbG9jKSAgVXNlIG1hbGxvYygxKSBpbnN0ZWFkIG9mIG1hbGxvYygwKSBpZiBnaXZlbgoJYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzLgoKVHVlIEp1biAgNSAwMjowNTozNyAxOTkwICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgYWxiZXJ0LmFpLm1pdC5lZHUpCgoJKiBzZWQuYzogUmVtb3ZlIGV4Y2VzcyBuZXdsaW5lcyBmcm9tIGNhbGxzIHRvIHBhbmljLgoJUmVmb3JtYXQgc29tZSBjb21tZW50cyB0byBmaXQgaW4gNzkgY29sdW1ucy4KCUJhc2Ugd2hldGhlciB0byB1c2Ugdm9pZCAqIG9uIF9fU1REQ19fLCBub3QgX19HTlVfXy4KCShtYWluKTogQWRkIG1pc3NpbmcgYXJnIHdoZW4gcHJpbnRpbmcgdXNhZ2UgbWVzc2FnZS4KCVByaW50IHVzYWdlIGlmIGdpdmVuIGludmFsaWQgYXJnLgoJKHBhbmljKSBbX19TVERDX19dOiBBZGQgbWlzc2luZyAiLCAuLi4iLgoJKGNvbXBpbGVfZmlsZW5hbWUpOiBQcmludCBjb3JyZWN0IGVycm9yIG1lc3NhZ2UgaWYgZ2xvYl9maWxlbmFtZQoJcmV0dXJucyBOVUxMLgoKVGh1IEFwciAgNSAyMTo0MToxMiAxOTkwICBKaW0gS2luZ2RvbiAgKGtpbmdkb24gYXQgcG9nby5haS5taXQuZWR1KQoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSwgY2FzZSAncicpOiBXaGVuIG5lZWQgdG8gcmVhbGxvYyBhcHBlbmQudGV4dCwKCW11bHRpcGx5IGFwcGVuZC5hbGxvYyBieSAyIGluc3RlYWQgb2YgYWRkaW5nCgljdXJfY21kLT54LmNtZF90eHQudGV4dF9sZW4uCgpUdWUgTWFyICA2IDE1OjU1OjM1IEVTVCAxOTkwIEpheSBGZW5sYXNvbiAoaGFja0BhaS5taXQuZWR1KQoKCSogc2VkLmMgKGNvbXBpbGVfcmVnZXgpICBBbGxvY2F0ZSAxMCBieXRlcyBleHRyYSBzcGFjZSBuZWVkZWQgYnkKCXJlX2NvbXBpbGVfcGF0dGVybi4KClN1biBGZWIgMjUgMTY6MzI6MTAgMTk5MCAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IHBvZ28uYWkubWl0LmVkdSkKCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0sIGNhc2UgJ2wnKTogUHJpbnQgXDAwIGluc3RlYWQgb2YgXDAuCglQcmludCBiYWNrc2xhc2ggYXMgXFwgbm90IFwuCglQcmludCBceHggaW5zdGVhZCBvZiAveHguCgpUaHUgRmViICAxIDE0OjAyOjI4IEVTVCAxOTkwCQloYWNrQHdvb2t1bXoKCgkqIHNlZC5jIChtZW1jaHIpICBVc2UgKCkgaW5zaWRlIGlubmVyIGxvb3Agc28gaXQgd2lsbCB3b3JrIGNvcnJlY3RseS4KCUEgdHdvIGNoYXJhY3RlciBwYXRjaCBmcm9tIFJvYmVydCBBIEJydWNlIChyYWJAYWxsc3BpY2UuYmVya2VsZXkuZWR1KQoKV2VkIFNlcCAyNyAxODo0NzozOSBFRFQgMTk4OQkJaGFja0BhaS5taXQuZWR1CgoJKiBzZWQuYyAoY29tcGlsZV9yZWdleCkgIE5ldyBmdW5jdGlvbi4gIFdoZW4gY29tcGlsaW5nIHJlZ2V4LAoJdHVybiBeIGludG8gXGAgYW5kICQgaW50byBcJyBzbyB0aGF0IHRoZXkgd29uJ3QgbWF0Y2ggb24gZW1iZWRkZWQKCW5ld2xpbmVzLiAgVU4qWAlwYXR0ZXJuIG1hdGNoaW5nIGlzIGEgY3JvY2suCgkoY29tcGlsZV9wcm9ncmFtLCBjb21waWxlX2FkZHJlc3MpIGNhbGwgY29tcGlsZV9yZWdleC4KCk1vbiBTZXAgMTggMTA6MTU6MzIgRURUIDE5ODkJCWhhY2tAYWkubWl0LmVkdQoKCSogc2VkLmMgKGNvbXBpbGVfcHJvZ3JhbSk6ICBkZWZpbmUgdHJhbnNsYXRlIGFzIHVuc2lnbmVkIGNoYXIgKiBzbwoJdGhhdCB5IGNvbW1hbmQgd2lsbCB3b3JrIG9uIG5vbi1hc2NpaSBjaGFyYWN0ZXJzLgoKCUNoYW5nZWQgdmVyc2lvbiBudW1iZXIgdG8gMS4wNi4KClRodSBTZXAgMTQgMTU6NTc6MDggRURUIDE5ODkJCWhhY2tAYWkubWl0LmVkdQoKCSogc2VkLmMgIChjb21waWxlX3Byb2dyYW0pICBMZXQgcHJvZ3JhbXMgdXNlIDsgdG8gdGVybWluYXRlIH0gYXMKCXdlbGwgYXMgbmV3bGluZS4KCgkocmVhZF9maWxlKSBQcmludCBhbiBlcnJvciBtc2cgdG8gc3RkZXJyIGlmIGl0IGNhbid0IG9wZW4gYW4KCWlucHV0IGZpbGUuCgpUaHUgTWFyIDIzIDE4OjA0OjQ2IDE5ODkgIFJhbmRhbGwgU21pdGggIChyYW5keSBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCgoJKiBNYWtlZmlsZSwgc2VkLmM6IEFkZGVkIG5ldyBjb3B5cmlnaHQgbm90aWNlLgoKCSogTWFrZWZpbGU6IE1ha2UgZGlzdHJpYnV0aW9ucyB3aGljaCBmb2xsb3cgdGhlIHN5bWxpbmtzLgoKaGFja0BhaS5taXQuZWR1CgoJMS4wNQlGaXhlZCBlcnJvciBpbiAncicgKG5vdyBkb2VzIHRoaW5ncyBpbiB0aGUgcmlnaHQgb3JkZXIpCgoJMS4wNAlGaXhlZCBzL3JlL3JlcC9bbnVtYmVyXQoKCTEuMDMJRml4ZXMgZnJvbSBNaWtlIEhhZXJ0ZWwgZm9yIHJlZ2V4cHMgdGhhdCBtYXRjaCB0aGUKCQllbXB0eSBzdHJpbmcsIGFuZCBmb3IgUml0Y2hpZSBzdGRpbyAobm9uLXN0aWNreSBFT0YpCgoJMS4wMglGaXhlZCAndCcsICdiJywgJzonIHRvIHRyaW0gbGVhZGluZyBzcGFjZXMgYW5kIHRhYnMKCQlGaXhlZCBcXCBpbiByZXBsYWNlbWVudCBvZiAncycgY29tbWFuZAoJCUFkZGVkIGNvbW1lbnRzCgoJMS4wMQlBZGRlZCBzL3JlL3JlcC9bZGlnaXRzXQoJCWFkZGVkICNuIGFzIGZpcnN0IGxpbmUgb2Ygc2NyaXB0CgkJYWRkZWQgZmlsZW5hbWUgZ2xvYmJpbmcKCQlhZGRlZCAnbCcgY29tbWFuZAoJCUFsbCBpbiB0aGUgbmFtZSBvZiBQT1NJWAoKCTEuMDAJQmVnYW4gKHRoaW5raW5nIGFib3V0KSBkaXN0cmlidXRpbmcgdGhpcyBmaWxlCgwKTG9jYWwgVmFyaWFibGVzOgptb2RlOiBpbmRlbnRlZC10ZXh0CmxlZnQtbWFyZ2luOiA4CnZlcnNpb24tY29udHJvbDogbmV2ZXIKRW5kOgo=