MjAwOS0wNi0yNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uLgoJKiBORVdTOiBCdW1wIHZlcnNpb24uCgkqIGdudWxpYjogVXBkYXRlLgoJKiBkb2Mvc2VkLjE6IFJlZ2VuZXJhdGUuCgoyMDA5LTA2LTI1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYXV0b2Jvb3QuY29uZjogQWRkIHNlbGludXgtaC4KCSogZXhlY3V0ZS5jOiBDb3B5IG92ZXIgZmlsZSBjcmVhdGlvbiBjb250ZXh0IGJlZm9yZSBjcmVhdGluZyBhIG5ldyBmaWxlLgoKMjAwOS0wNi0yNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYzogRG8gbm90IGNvcHkgQUNMcyB1bnRpbCB0aGUgZmlsZSBpcyBjb3BpZWQuCgkqIHV0aWxzLmMgKGNrX21rc3RlbXApOiBTZXQgYSByZXN0cmljdGl2ZSB1bWFzayBvbiB0ZW1wb3JhcnkgZmlsZXMuCgoyMDA5LTA2LTI2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYXV0b2Jvb3Q6IERvIG5vdCB1c2UgR0lUX0NPTkZJR19MT0NBTC4KCjIwMDktMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mOiBBZGQgbWVtY2hyIGFnYWluLgoJKiBnbnVsaWI6IFVwZGF0ZS4KCjIwMDktMDYtMTEgIFNlcmdleSBGYXJib3RrYSAgPHo4c2VyZ2V5OHpAZ21haWwuY29tPiAgKHRpbnkgY2hhbmdlKQoKCSogc2VkL2V4ZWN1dGUuYyAob3Blbl9uZXh0X2ZpbGUpOiBGaXggb2ZmLWJ5LW9uZSBjYXVzaW5nIHByb2JsZW1zCgl1bmRlciBDeWd3aW4uCgoyMDA5LTA1LTExICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoc25hcmZfY2hhcl9jbGFzcyk6IEZpeCBsb2dpYyBidWcgd2l0aCBbW1sgaW4gcmVndWxhcgoJZXhwcmVzc2lvbnMgKGFuZCBhIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgdXNlIG9mIHZhcmlhYmxlIGRlbGltIHN0ZW1taW5nCglmcm9tIHRoZSBidWcpLiAgVW5pbml0aWFsaXplZCB2YXJpYWJsZSBidWcgcmVwb3J0ZWQgYnkgWmhvbmd4aW5nIFh1LgoJKiB0ZXN0c3VpdGUvYnJhY2tldHMuZ29vZDogTmV3LgoJKiB0ZXN0c3VpdGUvYnJhY2tldHMuaW5wOiBOZXcuCgkqIHRlc3RzdWl0ZS9icmFja2V0cy5zZWQ6IE5ldy4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBBZGQgdGVzdC4KCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBBZGQgdGVzdC4KCjIwMDktMDUtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IERlZmluZSBDT1BZUklHSFRfWUVBUi4KCSogTWFrZWZpbGUuYW0gKGRpc3QtaG9vayk6IFRlc3QgaXQuCgkqIHNlZC9tYmNzLmM6IEZpeCBjb3B5cmlnaHQgeWVhcnMuCgkqIHNlZC9zZWQuYzogRml4IGNvcHlyaWdodCB5ZWFycy4gIENoYW5nZSBDT1BZUklHSFRfTk9USUNFIHRvCglDT1BZUklHSFRfWUVBUi4KCSogc2VkL3V0aWxzLmM6IEZpeCBjb3B5cmlnaHQgeWVhcnMuCgkqIHRlc3RzdWl0ZS92ZXJzaW9uLmdpbjogVXNlIENPUFlSSUdIVF9ZRUFSLgoKMjAwOS0wNC0zMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmM6IERlY2xhcmUgYm9vbCBhcmd1bWVudHMgYXMgaW50IGluc3RlYWQgdG8gcGxlYXNlIEFJWCBYTEMuCgkqIHNlZC9leGVjdXRlLmM6IERlY2xhcmUgYm9vbCBhcmd1bWVudHMgYXMgaW50IGluc3RlYWQgdG8gcGxlYXNlIEFJWCBYTEMuCgkqIHNlZC91dGlscy5jOiBEZWNsYXJlIGJvb2wgYXJndW1lbnRzIGFzIGludCBpbnN0ZWFkIHRvIHBsZWFzZSBBSVggWExDLgoJKiBzZWQvdXRpbHMuaDogRGVjbGFyZSBib29sIGFyZ3VtZW50cyBhcyBpbnQgaW5zdGVhZCB0byBwbGVhc2UgQUlYIFhMQy4KCjIwMDktMDQtMjcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiBudW1iZXIuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCjIwMDktMDQtMjcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IERvIG5vdCBjcmVhdGUgaG9tb255bW91cyBsaW5rcyBmcm9tIGJ1aWxkZGlyIHRvIHNyY2Rpci4KCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBDcmVhdGUgcmVhZGluLmluMiBoZXJlLgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IERvIG5vdCBkaXN0cmlidXRlIGl0LgoKMjAwOS0wNC0yNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KIAoJKiBhdXRvYm9vdC5jb25mOiBBZGQgcmVuYW1lLgoJKiBnbnVsaWI6IFVwZGF0ZS4KCjIwMDktMDQtMjcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IFhGQUlMIFVURi04IHRlc3RzIHdoZXJlIGFwcHJvcHJpYXRlLgoKMjAwOS0wNC0yNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogSGFuZGxlIENSTEYgZW5kaW5ncyBmb3IgbWluZ3cuCgoyMDA5LTA0LTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBMaW5rIHJlYWRpbi5pbjIgaW50byBidWlsZGRpci4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoJKiBkb2MvTWFrZWZpbGUuYW06IERvIG5vdCBkaXN0cmlidXRlIHNlZC5odG1sLiAgRG8gbm90IHVwZGF0ZQoJc2VkLnRleGkgaWYgdGhlIG91dHB1dCBkb2VzIG5vdCBjaGFuZ2UuCgkqIHNlZC9NYWtlZmlsZS5hbTogT3JkZXIgbGlicmFyaWVzIGFjY29yZGluZyB0byB0aGVpciBkZXBlbmRlbmNpZXMuCgkqIHNlZC9jb21waWxlLmMgKGdldF9vcGVuZmlsZSk6IERlY2xhcmUgRkFJTCBhcyBpbnQuCgkqIHNlZC9zZWQuYzogQXZvaWQgcHJpbnRmICgiIikgaWYgUkVHX1BFUkwgaXMgbm90IGRlZmluZWQuCgkqIHRlc3RzdWl0ZS9ldmFsLmluMjogRG8gbm90IGluY2x1ZGUgaW4gdGhlIHJlcG9zaXRvcnkuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogQ2xlYW4gYWx3YXlzIGV2YWwuaW4yIGFuZCBuZXZlciByZWFkaW4uaW4yLgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IFByb3ZpZGUgYSBkZWZhdWx0IGVtcHR5IGRlZmluaXRpb24gb2YgVElNRQoJYW5kIHJlbW92ZSBydWxlcyBmb3IgcmVhZGluLmluMi4KCjIwMDktMDMtMzEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBib290c3RyYXAuc2guaW46IEFkZCBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZC4KCSogYm9vdHN0cmFwLnNoOiBSZWdlbmVyYXRlLgoJKiBiYXNpY2RlZnMuaDogRG8gbm90IHByb3ZpZGUgYm9vbCBkZWZpbml0aW9ucyBmb3IgQk9PVFNUUkFQIGF0IGFsbC4KCjIwMDktMDMtMzEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvc2VkLmMgKGNvbnRhY3QpOiBOZXcuCgkodXNhZ2UpOiBGcm9tIGhlcmUuCgkobWFpbik6IFVzZSBpdCBmb3IgYHNlZCAtLXZlcnNpb24nIHRvby4KCiAgICAgICAgKiBjb25maWd1cmUuYWM6IFBvaW50IHRvIEdOVSBwcm9qZWN0IG1haWxpbmcgbGlzdHMuCiAgICAgICAgKiBzZWQvc2VkLmMgKGNvbnRhY3QpOiBVc2UgUEFDS0FHRV9CVUdSRVBPUlQuCiAgICAgICAgKiB0ZXN0c3VpdGUvdmVyc2lvbi5naW46IExpa2V3aXNlLgogICAgICAgICogdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogUmVnZW5lcmF0ZS4KICAgICAgICAqIGRvYy9zZWQuMTogUmVnZW5lcmF0ZS4KCiAgICAgICAgKiBib290c3RyYXAuc2guaW4gKFBBQ0tBR0VfQlVHUkVQT1JUKTogTmV3LgogICAgICAgICogYm9vdHN0cmFwLnNoOiBSZWdlbmVyYXRlLgoKMjAwOS0wMy0zMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogRGlzdHJpYnV0ZSB1dGY4LTMgYW5kIHV0ZjgtNCB0ZXN0IGZpbGVzLgoKMjAwOS0wMi0xNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogUmV3cml0ZSBydWxlIGZvciB1dGY4LVsxMjM0XS4KCVJlcG9ydGVkIGJ5IFJhbGYgV2lsZGVuaHVlcy4KCjIwMDktMDItMTcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvc2VkLmMgKHVzYWdlKTogUHJpbnQgaG9tZXBhZ2UgVVJMLgoJKiB0ZXN0c3VpdGUvdmVyc2lvbi5naW46IFVwZGF0ZS4KCjIwMDktMDEtMjggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvc2VkLmMgKHVzYWdlKTogT25seSBwcmludCB0aGUgYnVnIHJlcG9ydCBhZGRyZXNzIGZvciBgc2VkIC0taGVscCcuCgkobWFpbik6IFByaW50IGl0IGZvciBgc2VkIC0tdmVyc2lvbicgdG9vLgoJKiB0ZXN0c3VpdGUvdmVyc2lvbi5naW46IEFkYXB0LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IFJlZmluZSBoZWxwIG1lc3NhZ2UgdGVzdC4KCjIwMDktMDEtMjMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgkgICAgSGlkZW8gQU9LSSA8aGlkZW8uYW9raS50a0BoaXRhY2hpLmNvbT4KCgkqIHNlZC9jb21waWxlLmMgKG1hdGNoX3NsYXNoKTogRml4IE1CQ1MgYmVoYXZpb3IuCgkqIHNlZC9zZWQuaCAoTUJTSU5JVCk6IE5ldy4KCjIwMDktMDEtMjAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mLCBib290c3RyYXAuc2guaW46IFJlbW92ZSBtZW1jaHIsIG1lbWNtcCwgbWVtbW92ZQoJY29tcGF0aWJpbGl0eSBjb2RlLgoJKiBnbnVsaWI6IFVwZGF0ZS4KCjIwMDktMDEtMDkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiB0ZXN0cy9TUEVOQ0VSLnRlc3RzOiBBZGQgdGVzdGNhc2VzIGZvciBnbGliYyBidWd6aWxsYSA2OTcuCgkqIGdudWxpYjogVXBkYXRlLgoKMjAwOS0wMS0wNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCiAgICAgICAgKiBleGVjdXRlLmMgKHJlYWRfcGF0dGVybl9zcGFjZSk6IFJlc2V0IGhvbGQgc3BhY2UgYXQgZW5kLW9mLWZpbGUKCWlmIGlucHV0LT5yZXNldF9hdF9uZXh0X2ZpbGUuCgoyMDA4LTEyLTMxICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgoKCUxldCAtLXBvc2l4IHR1cm4gb2ZmIG1vcmUgR05VIGV4dGVuc2lvbnMuCgkqIHNlZC9jb21waWxlLmMgKG1hcmtfc3Vic3Rfb3B0cyk6IFR1cm4gb2ZmIHN1YnN0IG9wdGlvbnMgaSwgSSwKCXMsIFMsIHgsIFgsIG0sIGFuZCBNIGluIC0tcG9zaXggbW9kZS4KCShjb21waWxlX2FkZHJlc3MpOiBEaXNhbGxvdyBhZGRyZXNzIG1vZGlmaWVycywgYEZJUlNUflNURVAnLAoJYEFERFIxLCtOJywgYW5kIGBBRERSMSx+TicgaW4gLS1wb3NpeCBtb2RlLgoJKGNvbXBpbGVfcHJvZ3JhbSk6IEluIC0tcG9zaXggbW9kZSwgZG8gbm90IGFjY2VwdCBlIG9yIHogY29tbWFuZHM7CglkbyBub3QgYWNjZXB0IHRleHQgYmV0d2VlbiBhbiBhLCBjLCBvciBpIGNvbW1hbmQgYW5kIHRoZSBmb2xsb3dpbmcKCWJhY2tzbGFzaDsgZG8gbm90IGFjY2VwdCBhbiBhcmd1bWVudCB0byB0aGUgbCBjb21tYW5kLgoKMjAwOC0xMi0yMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGF1dG9ib290LmNvbmY6IFJlcXVlc3QgbW9kdWxlcyBlbXVsYXRpbmcgbWIgZnVuY3Rpb25zLgoJKiBjb25maWd1cmUuYWM6IERvIG5vdCBsb29rIGZvciBtYiBmdW5jdGlvbnMgaGVyZS4KCjIwMDgtMTAtMDMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgkgICAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KCgkqIGF1dG9ib290LmNvbmY6IEFkZCBsb2NhbGNoYXJzZXQuCgkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgaW50bCBzdWJkaXIuICBSZXF1aXJlIEF1dG9tYWtlIDEuMTAuCgkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIHVzZWxlc3MgbWFjcm9zLCBzd2l0Y2ggdG8gZXh0ZXJuYWwgZ2V0dGV4dC4KCSogbGliL01ha2VmaWxlLmFtOiBSZW1vdmUgaW50bCBzdWJkaXIgZnJvbSBDUFBGTEFHUy4KCSogc2VkL01ha2VmaWxlLmFtOiBSZW1vdmUgaW50bCBzdWJkaXIgZnJvbSBDUFBGTEFHUy4KCjIwMDgtMTAtMDIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdDogU3luYyB3aXRoIGdudWxpYidzIGJ1aWxkLWF1eC9ib290c3RyYXAuCgoyMDA4LTA5LTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYXV0b2Jvb3Q6IFN5bmMgd2l0aCBnbnVsaWIncyBidWlsZC1hdXgvYm9vdHN0cmFwLgoKMjAwOC0wOS0yOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogQWRkIHRoZSB1dGY4LXsxLDIsMyw0fSB0ZXN0cy4KCSogdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBBZGQgdGhlIHV0ZjgtezEsMiwzLDR9IHRlc3RzLgoJKiB0ZXN0c3VpdGUvcnVudGVzdDogU3VwcG9ydCBza2lwcGluZyB0ZXN0cy4KCSogdGVzdHN1aXRlL3V0ZjgtMS5nb29kOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTEuaW5wOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTEuc2VkOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTIuZ29vZDogTmV3LgoJKiB0ZXN0c3VpdGUvdXRmOC0yLmlucDogTmV3LgoJKiB0ZXN0c3VpdGUvdXRmOC0yLnNlZDogTmV3LgoJKiB0ZXN0c3VpdGUvdXRmOC0zLmdvb2Q6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtMy5pbnA6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtMy5zZWQ6IE5ldy4KCSogdGVzdHN1aXRlL3V0ZjgtNC5nb29kOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTQuaW5wOiBOZXcuCgkqIHRlc3RzdWl0ZS91dGY4LTQuc2VkOiBOZXcuCgoyMDA4LTA5LTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogQlVHUzogRG9jdW1lbnQgcy8uKi4vLyBiZWhhdmlvciB3aXRoIGludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlcy4KCSogTkVXUzogRG9jdW1lbnQgYHonIGV4dGVuc2lvbi4KCSogZG9jL3NlZC1pbi50ZXhpOiBEb2N1bWVudCBib3RoIHRoaW5ncy4KCSogc2VkL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogUmVjb2duaXplIGB6Jy4KCSogc2VkL2V4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtKTogRXhlY3V0ZSBgeicuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogQWRkIGJhZGVuYyB0ZXN0LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IEFkZCBiYWRlbmMgdGVzdC4KCSogdGVzdHN1aXRlL2JhZGVuYy5nb29kOiBOZXcuCgkqIHRlc3RzdWl0ZS9iYWRlbmMuaW5wOiBOZXcuCgkqIHRlc3RzdWl0ZS9iYWRlbmMuc2VkOiBOZXcuCgoyMDA4LTA5LTI4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogYmFzaWNkZWZzLmg6IFJlcGxhY2UgYWxsb2NhIGNydWZ0IHdpdGggYWxsb2NhLmguCgkqIGJvb3RzdHJhcC5zaC5pbjogVXBkYXRlIGZvciBuZXcgZ251bGliLgoJKiBib290c3RyYXAuc2g6IFVwZGF0ZSBmb3IgbmV3IGdudWxpYi4KCSogY29uZmlndXJlLmFjOiBNb3ZlIGdudWxpYiBtYWNyb3MgZWFybGllci4KCSogc2VkL2V4ZWN1dGUuYzogRG8gbm90IGluY2x1ZGUgYWNsLmggd2hlbiBib290c3RyYXBwaW5nLgoKMjAwOC0wOC0yNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKGNsb3NlZG93bik6IENsb3NlIHRoZSBpbnB1dCBmaWxlIQoKMjAwOC0wOC0yMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogQWRkIGdsX0RJU0FCTEVfVEhSRUFEUy4KCjIwMDgtMDgtMjAgIFJhbGYgV2lsZGVuaHVlcyAgPHJhbGYud2lsZGVuaHVlc0BnbXguZGUKCgkqIGRvYy9zZWQtaW4udGV4aTogRHJvcCBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlcmUgYXBwcm9wcmlhdGUsCglkbyBub3QgdXNlIFRBQnMuCgkqIGRvYy9zZWQudGV4aTogUmVnbmVyYXRlLgoKMjAwOC0wOC0xOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmM6IERvIG5vdCBpbmNsdWRlIHN0cnZlcnNjbXAuYy4KCjIwMDgtMDctMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBkb2Mvc2VkLWluLnRleGk6IFJlbW92ZSBub3J0aHBhcmsuZWR1IGFkZHJlc3MgZm9yIHNlZCBGQVEuCgkqIGRvYy9zZWQudGV4aTogUmVnZW5lcmF0ZS4KCjIwMDgtMDctMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgogICAgICAgICogZG9jL3NlZC1pbi50ZXhpOiBNYWtlIHRoZSBkZXNjcmlwdGlvbiBvZiBeIGFuZCAkIG1vcmUgcHJlY2lzZS4KICAgICAgICAqIGRvYy9zZWQudGV4aTogUmVnZW5lcmF0ZS4KCjIwMDgtMDYtMDQgIFZsYWRpbWlyIE1hcmVrICA8dmxhZGltaXIubWFyZWtAc3VuLmNvbT4KCgkqIGJhc2ljZGVmcy5oOiBEb24ndCBoYXJkY29kZSB1c2FnZSBvZiBwcm90b3R5cGVzIG9uIFN1blN0dWRpby4KCjIwMDgtMDUtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBhdXRvYm9vdC5jb25mOiBVcGRhdGUgZm9yIG5ld2VyIGdudWxpYi4KCjIwMDgtMDUtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBib290c3RyYXAuc2guaW46IERlZmluZSBib29sLCB0cnVlLCBmYWxzZS4gIFJlcG9ydGVkIGJ5CglKYXNvbiBTdG92ZXIuICBBZGp1c3QgZm9yIGdudWxpYiBjaGFuZ2VzLgoJKiBib290c3RyYXAuc2g6IFJlZ2VuZXJhdGUuCgoyMDA4LTA0LTI0ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIHNlZC9jb21waWxlLmMgKG1hdGNoX3NsYXNoKTogVHJlYXQgJ3MmZm9vJlwmJicgY29tcGF0aWJseSB3aXRoCgl0cmFkaXRpb25hbCAnc2VkJy4KCSogdGVzdHN1aXRlL2JzZC5zaDogQWRkIHRlc3QgY2FzZSBmb3IgdGhpcy4KCSogdGVzdHN1aXRlL2JzZC5nb29kOiBBZGQgdGVzdCBjYXNlIG91dHB1dC4KCjIwMDgtMDQtMjQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChzZXR1cF9yZXBsYWNlbWVudCk6IEZpeCBidWcgd2l0aCBcJiBpbiBQT1NJWCBtb2RlLgoKMjAwOC0wMS0xNiAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KCgkqIHNlZC9leGVjdXRlLmMgKG9wZW5fbmV4dF9maWxlLCBnZXRfYmFja3VwX2ZpbGVfbmFtZSk6IEF2b2lkCgl3YXJuaW5ncyBmcm9tIGdjYy4KCjIwMDgtMDEtMTYgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQHJlZGhhdC5jb20+CgoJKiBzZWQvY29tcGlsZS5jIChzbmFyZl9jaGFyX2NsYXNzKTogUmV2ZXJzZSBvcmRlciBvZiBjb25qdW5jdHMKCXNvIHRoYXQgImRlbGltIiBpcyBub3QgdXNlZCB1bmluaXRpYWxpemVkLgoKMjAwOC0wMS0xNiAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KCgkqIHNlZC91dGlscy5jIChwYW5pYyk6IFJlbW92ZSBkZWNsYXJhdGlvbiBvZiB1bnVzZWQgbG9jYWwsICJmZCIuCgoyMDA4LTAxLTE2ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgoKCSogc2VkL2V4ZWN1dGUuYyAob3Blbl9uZXh0X2ZpbGUsIGdldF9iYWNrdXBfZmlsZV9uYW1lKTogQXZvaWQKCXdhcm5pbmdzIGZyb20gZ2NjLiAgQXZvaWQgc2hhZG93aW5nIGdsb2JhbCAicGlwZSIuCgoyMDA4LTAxLTE2ICBKaW0gTWV5ZXJpbmcgIDxtZXllcmluZ0ByZWRoYXQuY29tPgoKCSogYXV0b2Jvb3QuY29uZiAoZ251bGliX21vZHVsZXMpOiBBZGQgc3RhdC1tYWNyb3MgYW5kIHBhdGhtYXguCgoyMDA3LTEwLTI1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoJICAgIE1pa2UgRnJ5c2luZ2VyICAgPHZhcGllckBnZW50b28ub3JnPgoKCSogZG9jL3NlZC54IChxLCBRKTogRG9jdW1lbnQgYXJndW1lbnQuCgkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIHRleGkyaHRtbCBjaGVja3MuCgkqIGRvYy9NYWtlZmlsZS5hbTogUmVtb3ZlIHJ1bGVzIGZvciBzZWQuaHRtbCwgYWx3YXlzIGRpc3RyaWJ1dGUgaXQuCgoyMDA3LTA4LTE0ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAob3Blbl9uZXh0X2ZpbGUpOiBGb2xsb3cgc3ltbGluayBoZXJlLi4uCgkoY2xvc2Vkb3duKTogLi4uIG5vdCBoZXJlLgoKMjAwNy0wNi0yOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9tYmNzLmM6IFVwZ3JhZGUgdG8gR1BMdjMuCgkqIHNlZC9yZWdleHAuYzogVXBncmFkZSB0byBHUEx2My4KCSogc2VkL3NlZC5jOiBVcGdyYWRlIHRvIEdQTHYzLgoJKiBzZWQvc2VkLmg6IFVwZ3JhZGUgdG8gR1BMdjMuCgkqIHNlZC91dGlscy5jOiBVcGdyYWRlIHRvIEdQTHYzLgoJKiBzZWQvdXRpbHMuaDogVXBncmFkZSB0byBHUEx2My4KCSogc2VkL2NvbXBpbGUuYzogVXBncmFkZSB0byBHUEx2My4KCSogc2VkL2V4ZWN1dGUuYzogVXBncmFkZSB0byBHUEx2My4KCSogc2VkL2ZtdC5jOiBVcGdyYWRlIHRvIEdQTHYzLgoKMjAwNy0wMy0wMSAgTWFzYXRha2UgWUFNQVRPICA8amV0QGd5dmUub3JnPiAgKHRpbnkgY2hhbmdlKQoKCSogc2VkL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogQWNjZXB0IDAsL1JFR0VYUC8gYWRkcmVzcwoJc3BlY2lmaWNhdGlvbiBvbmx5IGlmIC0tcG9zaXggaXMgbm90IHNwZWNpZmllZC4KCjIwMDctMDItMDUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiB0ZXN0c3VpdGUvYnVnLXJlZ2V4MjcuYywgdGVzdHN1aXRlL2J1Zy1yZWdleDI4LmM6IE5ldywgZnJvbQoJZ2xpYmMgKHdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5laykuCgoyMDA3LTAxLTI2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoY2hlY2tfZmluYWxfcHJvZ3JhbSk6IERvbid0IHNldCB0ZXh0IGlmIHRoZQoJcGVuZGluZ190ZXh0IGlzIGluaXRpYWxpemVkIGJ1dCBlbXB0eS4KCSogc2VkL2V4ZWN1dGUuYyAob3V0cHV0X2xpbmUpOiBEb24ndCBwcmludCB0ZXh0IGlmIGl0IGlzIE5VTEwuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgaW5zZXJ0LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHMgKGluc2VydCk6IE5ldy4KCSogdGVzdHN1aXRlL2luc2VydC5nb29kLCB0ZXN0c3VpdGUvaW5zZXJ0LnNlZCwgdGVzdHN1aXRlL2luc2VydC5pbnA6IE5ldwoJdGVzdGNhc2UgZnJvbSBKb25hcyBLb2Vsa2VyLgoKMjAwNi0xMi0yOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmM6IEZpeCB3YXJuaW5ncy4KCSogc2VkL2V4ZWN1dGUuYzogRml4IHdhcm5pbmdzLgoKMjAwNi0xMi0yMiAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AY2xpc3Aub3JnPgoKCSogc2VkL3V0aWxzLmM6IEluY2x1ZGUgcGF0aG1heC4KCSogc2VkL21iY3MuYzogVXNlIGxvY2FsX2NoYXJzZXQuCgkqIHNlZC9leGVjdXRlLmM6IENvcHkgd2l0aCBwYWRkaW5nIGFmdGVyIHRoZSBtYnN0YXRlX3QgbWVtYmVyLgoJCjIwMDYtMTItMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvbWJjcy5jOiBJbmNsdWRlIHN0cmluZy5oIChyZXBvcnRlZCBieSBIZW5uaW5nIE5pZWxzZW4gTHVuZCkuCgkqIHNlZC9mbXQuYzogTGlrZXdpc2UuCgkqIHNlZC9yZWdleHAuYzogTGlrZXdpc2UuCgoyMDA2LTEyLTE4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAoY2xvc2Vkb3duKTogUmVtb3ZlIGRlYWQgY29kZS4KCjIwMDYtMTItMTcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvdXRpbHMuYzogSW5jbHVkZSBsaW1pdHMuaC4KCjIwMDYtMTItMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBkb2Mvc2VkLWluLnRleGk6IERvY3VtZW50IC0tZm9sbG93LXN5bWxpbmtzLgoKMjAwNi0xMi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9yZWdleHAuYzogRGlzYWJsZSBhbGwgZXh0ZW5zaW9ucyBvbiAtLXBvc2l4LgoKMjAwNi0wOS0yNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmM6IFN1cHBvcnQgQUNMcy4KCSogbGliL3V0aWxzLmM6IE1vdmUuLi4KCSogc2VkL3V0aWxzLmM6IC4uLiBoZXJlLCBhbmQgcmVtb3ZlIHhtYWxsb2MuCgoyMDA2LTA4LTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3JlZ2V4cC5jOiBBY2NlcHQgTlVMIGJ5dGVzIGZvciBgLicuICBBY2NlcHQgJ2FcKGInIGluCglQT1NJWExZX0NPUlJFQ1QvUE9TSVhMWV9CQVNJQyBwb3NpeGljaXR5LgoKMjAwNi0wOC0wMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCglSZXZlcnQgdGhpcyBwYXJ0IG9mIHRoZSBwcmV2aW91cyBjaGFuZ2U6CgoJMjAwNi0wOC0wMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKGdldF9vcGVuZmlsZSk6IENoYW5nZSBzZWNvbmQgYXJndW1lbnQgdG8gY2hhcgoJYW5kIHR1cm4gaXQgaW50byBhIHN0cmluZyB3aXRoaW4gdGhlIGZ1bmN0aW9uLiAgQWRqdXN0IGNhbGxlcnMuCgoyMDA2LTA4LTAzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoJICAgIENvcmlubmEgVmluc2NoZW4gIDx2aW5zY2hlbkByZWRoYXQuY29tPgoKCSogbGliL2dldGxpbmUuYyAoZ2V0bGluZSk6IFJlbW92ZSBXaW5kb3dzIHNwZWNpYWwgY2FzaW5nLgoJKiBsaWIvdXRpbHMuYyAocmVnaXN0ZXJfb3Blbl9maWxlLCBja19mZG9wZW4pOiBOZXcuCgkoY2tfZm9wZW4sIGNrX21rc3RlbXApOiBVc2UgcmVnaXN0ZXJfb3Blbl9maWxlLgoJKiBsaWIvdXRpbHMuaCAoY2tfZmRvcGVuKTogTmV3LgoJKiBzZWQvZXhlY3V0ZS5jIChvcGVuX25leHRfZmlsZSk6IFJlb3BlbiBzdGRpbi4KCSogc2VkL3NlZC5oIChyZWFkX21vZGUpOiBOZXcuCgkqIHNlZC9zZWQuYyAocmVhZF9tb2RlKTogTmV3LgoJKG1haW4pOiBTZXQgaXQgb24gLS1iaW5hcnkuCgkodXNhZ2UpOiBEb2N1bWVudCAtLWJpbmFyeS4KCSogc2VkL2NvbXBpbGUuYyAoZ2V0X29wZW5maWxlKTogQ2hhbmdlIHNlY29uZCBhcmd1bWVudCB0byBjaGFyCglhbmQgdHVybiBpdCBpbnRvIGEgc3RyaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24uICBBZGp1c3QgY2FsbGVycy4KCSogc2VkL2V4ZWN1dGUuYyAoZHVtcF9hcHBlbmRfcXVldWUsIG9wZW5fbmV4dF9maWxlKTogVXNlIGl0CglhcyBtb2RlIGZvciBja19mb3Blbi4KCjIwMDYtMDgtMDMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jIChzdHJfYXBwZW5kKTogVXNlIGlzX3V0ZjggdG8gc2tpcCB1c2VsZXNzIHdvcmsuCgkqIHNlZC9tYmNzLmMgKGluaXRpYWxpemVfbWJjcyk6IExvb2sgZm9yIGEgVVRGLTggbG9jYWxlLgoJKGlzX3V0ZjgpOiBOZXcuCgkqIHNlZC9zZWQuaCAoaXNfdXRmOCk6IE5ldy4KCjIwMDYtMDctMTMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBib290c3RyYXAuc2guaW46IEFkZCBhIGZldyBhdXRvY29uZnkgdGVzdHMuCgkqIE1ha2VmaWxlLmFtOiBVcGRhdGUgZGlzdHJpYnV0ZWQgYm9vdHN0cmFwLnNoLgoKMjAwNi0wNS0xNSAgSGFucy1CZXJuaGFyZCBCcm9la2VyIDxicm9la2VyQHBoeXNpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHNlZC9iYXNpY2RlZnMuaCAoT0JfTUFMTE9DKTogVHVybiBWQ0FTVCBpbnRvIHZvaWQgKiBjYXN0LgoKMjAwNi0wMi0wMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfcHJvZ3JhbSkgPGNhc2UgJ3knPjogUGFzcyBmYWxzZSB0byBtYXRjaF9zbGFzaC4KCjIwMDUtMDktMDcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvcmVnY29tcC5jOiBVcGRhdGUgZnJvbSB1cHN0cmVhbS4KCSogbGliL3JlZ2V4LmM6IFVwZGF0ZSBmcm9tIHVwc3RyZWFtLgoJKiBsaWIvcmVnZXhfLmg6IFVwZGF0ZSBmcm9tIHVwc3RyZWFtLgoJKiBsaWIvcmVnZXhfaW50ZXJuYWwuYzogVXBkYXRlIGZyb20gdXBzdHJlYW0uCgkqIGxpYi9yZWdleF9pbnRlcm5hbC5oOiBVcGRhdGUgZnJvbSB1cHN0cmVhbS4KCSogbGliL3JlZ2V4ZWMuYzogVXBkYXRlIGZyb20gdXBzdHJlYW0uCgoyMDA1LTA4LTMwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAocmVzZXRfYWRkcmVzc2VzKTogTmV2ZXIgYWN0aXZhdGUgQUREUl9JU19OVU1fTU9ECglhZGRyZXNzZXMuCgkqIHRlc3RzdWl0ZS9tb2R1bG8uZ29vZCwgdGVzdHN1aXRlL21vZHVsby5pbnAsIHRlc3RzdWl0ZS9tb2R1bG8uc2VkOgoJTmV3LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHM6IEFkZCBuZXcgdGVzdGNhc2UuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogQWRkIG5ldyB0ZXN0Y2FzZS4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgoKMjAwNS0wNS0xOCAgTWFjaWVqIFcuIFJvenlja2kgIDxtYWNyb0BsaW51eC1taXBzLm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogVXNlIGEgY2FjaGUgdmFyaWFibGUgZm9yIHRoZSBsaWJjUCB0ZXN0LgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgoyMDA1LTA1LTE2ICBFZXJvIEhha2tpbmVuICA8ZWVybzE3QGJpZ2Zvb3QuY29tPgoKCSogc2VkL2NvbXBpbGUuYyAoc25hcmZfY2hhcl9jbGFzcyk6IEZpeCBoYW5kbGluZyBvZiAKCVteXXh5el0uCgoyMDA1LTA0LTA0ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAocHJvY2Vzc19maWxlcyk6IERvIG5vdCBhZGQgYSBkZWZhdWx0Cgljb21tYW5kLWxpbmUgaW4gaW4tcGxhY2UgZWRpdGluZyBtb2RlLgoKMjAwNS0wMi0xMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogQWRkIG5ldyB0ZXN0Y2FzZS4KCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBBZGQgbmV3IHRlc3RjYXNlLgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCgkqIHRlc3RzdWl0ZS9hcHBxdWl0Lmdvb2QsIHRlc3RzdWl0ZS9hcHBxdWl0LmlucCwKCXRlc3RzdWl0ZS9hcHBxdWl0LnNlZDogTmV3IHRlc3RjYXNlLgoJKiB0ZXN0c3VpdGUvcmVhZGluLnNlZDogUXVpdCBhZnRlciB0aGUgbGFzdCByIGNvbW1hbmQuCgkqIHRlc3RzdWl0ZS9yZWFkaW4uZ29vZDogQWRqdXN0LgoJKiBzZWQvZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0pOiBEdW1wIHRoZSByZXN1bHRzIG9mIHRoZQoJYS9yL1IgY29tbWFuZHMganVzdCBiZWZvcmUgcXVpdHRpbmcuCgoyMDA1LTAyLTEwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3JlZ2V4cC5jOiBGaXggb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgImludmFsaWQgcmVmZXJlbmNlCgl0byBzdWJleHByZXNzaW9uIiBtZXNzYWdlLiAgRGViaWFuIGJ1ZyAyOTQzMzkuCgoyMDA1LTAyLTA4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogbGliL29ic3RhY2suaDogaW5jbHVkZSBjb25maWcuaC4KCjIwMDUtMDItMDEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBkb2MvTWFrZWZpbGUuYW06IERvbid0IGVuYWJsZSBNQUtFSU5GT19IVE1MIGFuZCBURVhJMkhUTUxfSFRNTAoJcnVsZXMgdW5sZXNzIEJVSUxEX0hUTUwuCgoyMDA1LTAxLTI1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3JlZ2V4cC5jOiBGaXggYnVpbGRpbmcgb24gR0NDIDIuOTUgYW5kIGVhcmxpZXIuCgoyMDA0LTEyLTI2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCURvIG5vdCB1c2UgbGVmdG1vc3QtbG9uZ2VzdCBtYXRjaGluZyBmb3IgYWRkcmVzc2VzLgoKCSogTkVXUzogQWRkIGEgbm90ZSBhYm91dCB0aGlzLgoJKiB0ZXN0c3VpdGUvcmVjYWxsMi5nb29kLCB0ZXN0c3VpdGUvcmVjYWxsMi5pbnAsCgl0ZXN0c3VpdGUvcmVjYWxsMi5zZWQ6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0sIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogQWRkIHRoZQoJcmVjYWxsMiB0ZXN0LgoJKiBzZWQvc2VkLmggKHN0cnVjdCByZWdleCk6IE5ldy4KCShzdHJ1Y3QgYWRkciwgc3RydWN0IHN1YnN0LCBjb21waWxlX3JlZ2V4LCBtYXRjaF9yZWdleCwKCXJlbGVhc2VfcmVnZXgpOiBVc2UgaXQgaW5zdGVhZCBvZiByZWdleF90LgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBVcGRhdGUgZm9yIG5ldyBtZWFuaW5nIG9mCgl0aGUgdGhpcmQgcGFyYW1ldGVyIG9mIGNvbXBpbGVfcmVnZXguCgkqIHNlZC9leGVjdXRlLmMgKGRvX3N1YnN0KTogUGFzcyBsZXNzIGNvbnNlcnZhdGl2ZSB2YWx1ZSB0bwoJdGhlIHJlZ3NpemUgcGFyYW1ldGVyIG9mIG1hdGNoX3JlZ2V4LgoJKiBzZWQvcmVnZXhwLmMgKGNvbXBpbGVfcmVnZXhfMSk6IE5ldywgZXh0cmFjdGVkIG91dCBvZgoJY29tcGlsZV9yZWdleC4gIFRoZSB0aGlyZCBwYXJhbWV0ZXIsIG5lZWRlZF9zdWIsIG5vdyBpbmNsdWRlcwoJXDAgKHNvIDEwIG1lYW5zIHRoYXQgXDAgLi4gXDkgYXJlIG5lZWRlZCkuICBQYXNzIFJFX05PX1NVQgoJaWYgbmVlZGVkX3N1YiBpcyB6ZXJvLgoJKGNvbXBpbGVfcmVnZXgpOiBBY2NlcHQgYSBzdHJ1Y3QgcmVnZXggaW5zdGVhZCBvZiBhIHJlZ2V4X3QuCglTYXZlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24ncyB0ZXh0LgoJKG1hdGNoX3JlZ2V4KTogQWNjZXB0IGEgc3RydWN0IHJlZ2V4IGluc3RlYWQgb2YgYSByZWdleF90LgoJUmVjb21waWxlIHRoZSBwYXR0ZXJuIGlmIGl0IHdhcyBjb21waWxlZCB3aXRoIFJFX05PX1NVQi4KCShyZWxlYXNlX3JlZ2V4KTogQWNjZXB0IGEgc3RydWN0IHJlZ2V4IGluc3RlYWQgb2YgYSByZWdleF90LgoKCSogZG9jL01ha2VmaWxlLmFtOiBHZW5lcmF0ZSBzZWQudGV4aSBjb3JyZWN0bHkgd2hlbgoJYnVpbGRpbmcgb3V0c2lkZSBzcmNkaXIuCgoyMDA0LTEyLTI2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogQlVHUzogQWRkIHNlY3Rpb24gYWJvdXQgW2Etel0gbWF0Y2hpbmcgdXBwZXJjYXNlIGNoYXJhY3RlcnMsCglhbmQgb3RoZXIgbG9jYWxlIGlzc3Vlcy4KCSogZG9jL3NlZC1pbi50ZXhpIFshUEVSTF06IExpa2V3aXNlLgoKMjAwNC0xMS0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKHN0cl9hcHBlbmRfbW9kaWZpZWQpOiBDb3B5IHRoZSBmaXJzdCBjaGFyYWN0ZXIKCXdoZW4gdXNpbmcgXGwgb3IgXHUgaW4gYSBtdWx0aS1ieXRlIGNvbmZpZ3VyYXRpb24uICBVc2UKCVdDUlRPTUIgaW5zdGVhZCBvZiB3Y3J0b21iLgoJKiBzZWQvc2VkLmggKFdDUlRPTUIpOiBOZXcuCgoyMDA0LTExLTExICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdHN0LXJ4c3BlY2VyLmM6IERvIG5vdCBtaXggaW5zdHJ1Y3Rpb25zIGFuZAoJZGVjbGFyYXRpb25zLgoJKiBiYXNpY2RlZnMuaDogSW5jbHVkZSBsb2NhbGUuaCBiZWZvcmUgI2RlZmluaW5nCglnZXR0ZXh0LCB0byBhdm9pZCBicmVha2FnZSB1bmRlciBTb2xhcmlzLgoJKiBzZWQvc2VkLmM6IGRvIG5vdCBpbmNsdWRlIGxvY2FsZS5oLgoKMjAwNC0xMS0wMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGJ1Zy1yZWdleDExLmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIGJ1Zy1yZWdleDEyLmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIGJ1Zy1yZWdleDEzLmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIGJ1Zy1yZWdleDE0LmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIGJ1Zy1yZWdleDIxLmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIGJ1Zy1yZWdleDkuYzogSW1wcm92ZSBwb3J0YWJpbGl0eS4KCSogdHN0LWJvb3N0LmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIHRzdC1wY3JlLmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgkqIHRzdC1yZWdleC5jOiBJbXByb3ZlIHBvcnRhYmlsaXR5LgoJKiB0c3QtcnhzcGVuY2VyLmM6IEltcHJvdmUgcG9ydGFiaWxpdHkuCgoyMDA0LTEwLTA4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogbGliL3V0aWxzLmMgKHV0aWxzX2lkX3MpOiBSZW5hbWVkIHRvIG9wZW5fZmlsZXMuCgkoc3RydWN0IGlkKTogUmVuYW1lZCB0byBzdHJ1Y3Qgb3Blbl9maWxlLgoKMjAwNC0xMC0wOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUudGVzdHMgKGJ1Zy1yZWdleCosIHJ1bi10ZXN0cywKCXJ1bi1wdGVzdHMpOiBVc2UgJChTRUQpLgoJKHZlcnNpb24pOiBMaWtld2lzZTsgcHJlcGVuZCAkKFNFRCkgaW52b2NhdGlvbiB3aXRoICQoU0VERU5WKS4KCjIwMDQtMDgtMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKioqIFZlcnNpb24gNC4xLjIgcmVsZWFzZWQuCgoyMDA0LTA4LTA2ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoYmFkX2NvbW1hbmQpOiBGaXggb2ZmLWJ5LW9uZSBlcnJvci4KCShzbmFyZl9jaGFyX2NsYXNzKTogRml4IHByb2JsZW0gd2l0aCBbLi4uLi5bXSAoaS5lLgoJbGFzdCBjaGFyIGluIGNsYXNzIGlzIGEgYnJhY2tldC4KCjIwMDQtMDYtMzAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKioqIFZlcnNpb24gNC4xLjEgcmVsZWFzZWQuCgoyMDA0LTA2LTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAobWFya19zdWJzdF9vcHRzKTogUmV0dXJuIGludC4KCSogc2VkL2V4ZWN1dGUuYyAob3Blbl9uZXh0X2ZpbGUpOiBGaXggdW5pbml0aWFsaXplZAoJdmFyaWFibGUuCgoyMDA0LTA2LTEwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMSByZWxlYXNlZC4KCjIwMDQtMDMtMjUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvb2JzdGFjay5oOiBHZXQgY3VycmVudCB2ZXJzaW9uLgoKMjAwNC0wMy0xMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCglFeGl0IGFzIHNvb24gYXMgcG9zc2libGUgb24gYW4gSS9PIGVycm9yLCBhbmQgd2l0aAoJYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4KCgkqIGxpYi91dGlscy5jIChja19ta3N0ZW1wLCBja19yZW5hbWUsIGNrX2dldGxpbmUpOiBOZXcKCWZ1bmN0aW9ucy4gIFNhdmUgdGVtcG9yYXJ5IGZpbGVzIGludG8gdXRpbHNfaWRfcy4KCShzdHJ1Y3QgaWQpOiBBZGQgYSBmaWVsZCBuYW1lZCB0ZW1wLgoJKGNrX2ZvcGVuKTogSW5pdCB0aGUgbmV3IHRlbXAgZmllbGQgb2Ygc3RydWN0IGlkLgoJKHBhbmljKTogVW5saW5rIHRlbXBvcmFyeSBmaWxlcyBiZWZvcmUgZXhpdGluZy4KCSogc2VkL2V4ZWN1dGUuYyAocmVhZF9maWxlX2xpbmUpOiBVc2UgY2tfZ2V0bGluZS4KCShjbG9zZWRvd24pOiBVc2UgY2tfcmVuYW1lLgoJKG9wZW5fbmV4dF9maWxlKTogVXNlIGNrX21rc3RlbXAuCgoyMDA0LTAxLTIwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL3NlZC5oIChlbnVtIGFkZHJfc3RhdGUpOiBOZXcgZGVmaW5pdGlvbi4KCShlbnVtIGFkZHJfdHlwZSk6IFJlbW92ZSBBRERSX0lTX05VTTIuCgkoc3RydWN0IHNlZF9jbWQpOiBSZXBsYWNlIGExX21hdGNoZWQgd2l0aCByYW5nZV9zdGF0ZS4KCSogc2VkL2NvbXBpbGUuYyAobmV4dF9jbWRfZW50cnkpOiBVc2UgcmFuZ2Vfc3RhdGUuCgkoY29tcGlsZV9wcm9ncmFtKTogRGVhdGggdG8gQUREUl9JU19OVU0yLiAgQ29tcGlsZQoJTixNcCBhcyBOcCBpZiBOPj1NLgoJKiBzZWQvZXhlY3V0ZS5jIChtYXRjaF9hZGRyZXNzX3ApOiBSZXdyaXR0ZW4uICBIYW5kbGUKCUFERFJfSVNfTlVNIGhlcmUuCgkobWF0Y2hfYW5fYWRkcmVzc19wKTogU3VpdCB0byBuZXcgbWF0Y2hfYWRkcmVzc19wLgoJKGV4ZWN1dGVfcHJvZ3JhbSk6IEFkanVzdCB0byB1c2UgcmFuZ2Vfc3RhdGUgaW4gYGMnLgoJSGFuZGxlIGFkZHJfYmFuZyBoZXJlLgoJKHJlc2V0X2FkZHJlc3Nlcyk6IFVzZSByYW5nZV9zdGF0ZS4KCgkoc3RydWN0IGlucHV0KTogTmV3IGZpZWxkICJyZXNldF9hdF9uZXh0X2ZpbGUiLgoJKHJlYWRfcGF0dGVybl9zcGFjZSk6IFVzZSBpdCBpbnN0ZWFkIG9mICJzZXBhcmF0ZV9maWxlcyIuCgkocHJvY2Vzc19maWxlcyk6IEluaXRpYWxpemUgaXQuCgkKMjAwNC0wMS0xNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuaDogRG8gbm90IGluY2x1ZGUgd2NoYXIuaCBhbmQgd2N0eXBlLmgsIGFuZCBkbwoJbm90IGluY2x1ZGUgdGhlIGFsbG9jYSBzdHVmZi4KCSogYmFzaWNkZWZzLmg6IE1vdmUgYWxsIHRoYXQgaGVyZS4KCjIwMDQtMDEtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvcmVnZXhwLmMgW1JFR19QRVJMXTogVXNlIFJFR19TVEFSVEVORCBpbnN0ZWFkIG9mIHJlZ2V4ZWMyLgoKMjAwNC0wMS0wOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuaCAocG9zaXhpY2l0eSk6IE5ldyB2YXJpYWJsZSwgcmVwbGFjZXMgUE9TSVhMWV9DT1JSRUNULgoJKiBzZWQvc2VkLmMgKG1haW4pOiBTZXQgaXQuCgkqIHNlZC9jb21waWxlLmM6IFVzZSBpdCBpbnN0ZWFkIG9mIFBPU0lYTFlfQ09SUkVDVC4KCSogc2VkL2V4ZWN1dGUuYzogVXNlIGl0IGluc3RlYWQgb2YgUE9TSVhMWV9DT1JSRUNULgoJKiBkb2Mvc2VkLWluLnRleGk6IERvY3VtZW50IGl0IGFuZCAtLXBvc2l4LgoKMjAwNC0wMS0wNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCiAgICAgICAgKiBORVdTOiBGaXggW1xuXSB0byBtYXRjaCBlaXRoZXIgYmFja3NsYXNoIG9yIG4gaW4gUE9TSVhMWV9DT1JSRUNUIG1vZGUuCiAgICAgICAgKiBkb2Mvc2VkLWluLnRleGk6IERvY3VtZW50IHRoaXMuICBBbHNvLCBkb2N1bWVudCByZWd1bGFyIGV4cHJlc3Npb25zCiAgICAgICAgYSBiaXQgYmV0dGVyIG92ZXJhbGwsIHVzaW5nIHRlcm1pbm9sb2d5IHRoYXQncyBtb3JlIHNpbWlsYXIgdG8gUE9TSVguCgkqIHNlZC9zZWQuaCAoZW51bSB0ZXh0X3R5cGVzKTogTmV3IGRlZmluaXRpb24uCgkqIHNlZC9jb21waWxlLmMgKG5vcm1hbGl6ZV90ZXh0KTogUmVwbGFjZSBmaW5hbCBwYXJhbWV0ZXIgd2l0aCBvbmUgb2YKCXR5cGUgbm9ybWFsaXplX3RleHQuICBJZiBURVhUX1JFR0VYIGFuZCBpbiBQT1NJWExZX0NPUlJFQ1QgbW9kZSwKCWdyb2sgY2hhcmFjdGVyIGNsYXNzZXMgd2l0aG91dCByZXBsYWNpbmcgXG4gaW5zaWRlIHRoZW0uCgoyMDA0LTAxLTAzICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKICAgICAgICAqIHNlZC9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IHByaW50IGZpbmFsIGxpbmUKICAgICAgICBhZnRlciBleGVjdXRpbmcgTiwgaWYgbm90IFBPU0lYTFlfQ09SUkVDVC4KCjIwMDMtMTItMjggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jOiBmaXggIlxcXG4iIGluIFJIUyBvZiBzIGNvbW1hbmQuCglSZXBvcnRlZCBieSBNaWtlIENhc3RsZS4KCSogdGVzdHN1aXRlL2Jrc2xhc2hlcy5pbnAsIHRlc3RzdWl0ZS9ia3NsYXNoZXMuZ29vZCwKCXRlc3RzdWl0ZS9ia3NsYXNoZXMuc2VkOiBOZXcgZmlsZXMuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSwgdGVzdHN1aXRlL01ha2VmaWxlLnRlc3RzOiBBZGQKCXRoZSBia3NsYXNoZXMgdGVzdC4KCjIwMDMtMTItMTYgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKioqIFZlcnNpb24gNC4wYiByZWxlYXNlZC4KCgkqIHNlZC9tYmNzLmM6IE5ldyBmaWxlLgoJKiBzZWQvc2VkLmg6IERlY2xhcmUgbWFjcm9zIGZvciBtYmNzLmMuCgkqIHNlZC9jb21waWxlLmM6IFVzZSB0aGVtLgoJKGJybGVuKTogTW92ZWQgdG8gbWJjcy5jLgoJKiBzZWQvZXhlY3V0ZS5jOiBVc2UgdGhlbS4KCSogc2VkL3NlZC5jOiBjYWxsIGluaXRpYWxpemVfbWJjcyAoKS4KCjIwMDMtMTItMTQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvcmVnZXguYyAobWF0Y2hfcmVnZXgpOiBmaXggbWVtb3J5IGxlYWsuCgoyMDAzLTExLTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyAocmVzZXRfYWRkcmVzc2VzKTogbGVhdmUgYWRkcmVzc2VzIDAKCWFuZCAwflNURVAgZW5hYmxlZC4KCjIwMDMtMTEtMTUgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogc2VkL3JlZ2V4LmM6IFVzZSBmYXN0bWFwLgoKMjAwMy0wOS0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjBhIHJlbGVhc2VkLgoKCSogc2VkL2V4ZWN1dGUuYyAoc3RydWN0IGxpbmUpOiBBZGQgbWJzdGF0ZSBmaWVsZC4KCShzdHJfYXBwZW5kKTogS2VlcCBtYnN0YXRlIHVwIHRvIGRhdGUuCgkoc3RyX2FwcGVuZF9tb2RpZmllZCk6IExpa2V3aXNlLCBhbmQgdXNlIHRvd3VwcGVyL3Rvd2xvd2VyLgoJKGxpbmVfaW5pdCk6IEluaXRpYWxpemUgbWJzdGF0ZS4KCShsaW5lX2NvcHkpOiBDb3B5IG1ic3RhdGUuCgkobGluZV9hcHBlbmQpOiBDb3B5IG1ic3RhdGUuCgoyMDAzLTA3LTE1ICBTdGVwYW4gS2FzYWwgIDxrYXNhbEB1Y3cuY3o+CgkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZm51Lm9yZz4KCglDaGFuZ2UgdGhlIHdheSB3ZSB0cmVhdCBsaW5lcyB3aGljaCBhcmUgbm90IHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLgoJU3VjaCBsaW5lcyBhcmUgcHJpbnRlZCB3aXRob3V0IHRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lIChhcyBiZWZvcmUpCglidXQgYXMgc29vbiBhcyBtb3JlIHRleHQgaXMgc2VudCB0byB0aGUgc2FtZSBvdXRwdXQgc3RyZWFtLCB0aGUKCW1pc3NpbmcgbmV3bGluZSBpcyBwcmludGVkLCBzbyB0aGF0IHRoZSB0d28gbGluZXMgZG9uJ3QgY29uY2F0ZW5hdGUuCgoJKiBzZWQvZXhlY3V0ZS5jIChvdXRwdXRfZmlsZSk6IElzIG5vdyBzdHJ1Y3Qgb3V0cHV0OyB1c2VycyBhZGp1c3RlZAoJdG8gYWNjZXNzIHRoZSBmcCBmaWVsZCwgY2FsbCBvdXRwdXRfbWlzc2luZ19uZXdsaW5lIGJlZm9yZSwgYW5kCgljYWxsIGZsdXNoX291dHB1dCBhZnRlcndhcmRzLgoJKHJlYWRfZmlsZV9saW5lKTogU2V0IGxpbmUuY2hvbXBlZCBGQUxTRSBlYWNoIHRpbWUgd2UgZW5jb3VudGVyIGEKCWxpbmUgd2l0aG91dCB0aGUgbmV3bGluZSB0ZXJtaW5hdG9yLCBubyBtYXR0ZXIgd2hldGhlciB0aGlzIGlzIHRoZQoJbGFzdCBpbnB1dCBmaWxlIG9yIG5vdCwgYW5kIG5vIG1hdHRlciB3aGV0aGVyIHdlIGFyZSBpbgoJUE9TSVhMWV9DT1JSRUNUIG1vZGUgb3Igbm90LgoJKG91dHB1dF9taXNzaW5nX25ld2xpbmUpOiBOZXcgZnVuY3Rpb24gd2hpY2ggcHJpbnRzIHRoZSBzdXBwcmVzc2VkCgluZXdsaW5lLCBpZiBuZWNlc3NhcnkuCgkoZmx1c2hfb3V0cHV0KTogTmV3IGZ1bmN0aW9uIGZvciBhIGNvbW1vbiBwYXR0ZXJuLgoJKG91dHB1dF9saW5lKTogVXNlIHN0cnVjdCBvdXRwdXQsIHNldCBpdHMgZmxhZyBhY2NvcmRpbmdseS4KCShkdW1wX2FwcGVuZF9xdWV1ZSk6IFVzZSBgY2tfZndyaXRlJyBpbnN0ZWFkIG9mIG91dHB1dF9saW5lLgoJKGRvX2xpc3QpOiBGbHVzaCB0aGUgb3V0cHV0IHN0cmVhbSBhdCB0aGUgZW5kLgoJKGNsb3NlZG93bik6IFRoZSBjb2RlIGBgaWYoc2VwYXJhdGVfZmlsZXMpIHJld2luZF9yZWFkX2ZpbGVzKCk7JycKCShyZWFkX3BhdHRlcm5fc3BhY2UpOiAuLi4gaGFzIGJlZW4gbW92ZWQgaGVyZS4KCShwcm9jZXNzX2ZpbGVzKTogRG9uJ3QgZG8gdGhlIGRlZmF1bHQgYHAnIGF0IHRoZSBlbmQsIC4uLgoJKGV4ZWN1dGVfcHJvZ3JhbSk6IC4uLiBhcyB0aGlzIGZ1bmN0aW9uIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgaXQ7CglhZGQgdGhlIGNvZGUgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gYW5kIHRvIHRoZSBjb21tYW5kIGBxJzsKCXRoZSBjb21tYW5kcyBgZCcsIGBEJyBhbmQgYFEnIHRodXMgbm8gbG9uZ2VyIGhhdmUgdG8gZm9yZ2UgYW4gZW1wdHkKCWxpbmUuCgkoZXhlY3V0ZV9wcm9ncmFtKTogQ29tbWFuZHMgYGMnIGFuZCBgaScgbm8gbG9uZ2VyIGNhbGwgdGhlCglmdW5jdGlvbiBvdXRwdXRfbGluZSB3aXRoIGNob21wZWQ9PUZBTFNFOyBpbnN0ZWFkLCB0aGV5IGNob21wCgl0aGUgdGV4dCBhbmQgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBjaG9tcGVkPT1UUlVFLgoJKGV4ZWN1dGVfcHJvZ3JhbSk6IENvbW1hbmQgYGUnIG5vIGxvbmdlciB1c2VzIG91dHB1dF9saW5lOyBpdAoJY2FsbHMgY2tfZndyaXRlIGRpcmVjdGx5LiAgQ29tbWFuZHMgYGUnLCBgTCcgYW5kIGA9JyBmbHVzaAoJdGhlIG91dHB1dCBzdHJlYW0gYXQgdGhlIGVuZC4KCSogc2VkL2NvbXBpbGUuYyAoc3BlY2lhbF9maWxlcyk6IFVzZSBgc3RydWN0IG91dHB1dCcgaW5zdGVhZCBvZiB0aGUKCWZpbGUgbmFtZS4KCShnZXRfb3BlbmZpbGUpOiAuLi4gc3BlY2lhbCBmaWxlcyBhcmUgbm8gbG9uZ2VyIGNvcGllZCB0byBmaWxlX3JlYWQKCW9yIGZpbGVfd3JpdGUuCgkoZnBfbGlzdCk6IE1vdmUgdG8gc2VkLmggKHVzZXJzIGFkanVzdGVkKSBhbmQgcmVuYW1lIGFzLi4uCgkqIHNlZC9zZWQuaCAoc3RydWN0IG91dHB1dCk6IC4uLnRoaXMuICBOZXcgZmxhZyBtaXNzaW5nX25ld2xpbmUKCWFzc29jaWF0ZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0uCgkoc3RydWN0IHNlZF9jbWQsIHN0cnVjdCBzdWJzdCk6IFVzZSBgc3RydWN0IG91dHB1dCAqJyBpbnN0ZWFkIG9mIG1lcmUKCWBGSUxFIConOyBhZGp1c3QgY29tcGlsZS5jIGFuZCBleGVjdXRlLmMuCgkqIHRlc3RzdWl0ZS9ub2VvbHcuc2VkLCB0ZXN0c3VpdGUvbm9lb2x3Lmdvb2QsIHRlc3RzdWl0ZS9ub2VvbHcuMWdvb2QsCgl0ZXN0c3VpdGUvbm9lb2x3LjJnb29kOiBOZXcgdGVzdHMKCjIwMDMtMDctMTUgIFN0ZXBhbiBLYXNhbCAgPGthc2FsQHVjdy5jej4KCiAgICAgICAgKiBsaWIvdXRpbHMuaCwgc2VkL3NlZC5oOiAjaW5jbHVkZSAiYmFzaWNkZWZzLmgiLAogICAgICAgIGRvbid0IGluY2x1ZGUgaXQgZnJvbSB2YXJpb3VzICouYyBmaWxlcy4KICAgICAgICAqIHNlZC9yZWdleC5jOiBEb24ndCBpbmNsdWRlIHJlZ2V4LmggYXMgaXQncyBpbmNsdWRlZCB2aWEgc2VkLmguCgoyMDAzLTA2LTExICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogbGliL2dldGxpbmUuYzogRG9uJ3QgcmVhbGxvYyB3aXRoIGZpcnN0IHBhcmFtID0gTlVMTC4KCjIwMDMtMDUtMDcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jOiBNYWtlIHRyZWF0bWVudCBvZiBBRERSX0lTX05VTV9NT0QKCXNpbXBsZXIsIGFuZCBmaXggYnVncyBpbiAwfjUsKzEKCSogc2VkL2NvbXBpbGUuYzogQ29tcGxhaW4gYWJvdXQgYWRkcmVzc2VzIGxpa2UgMAoJYW5kIDAsMyB3aGljaCBhcmUgc291cmNlcyBvZiBtaXN1bmRlcnN0YW5kaW5ncy4KCVJlcG9ydGVkIGJ5IEFraW0gRGVtYWlsbGUgPGFraW1AZXBpdGEuZnI+CgoyMDAzLTAzLTI1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDQuMC43IHJlbGVhc2VkCgoJKiBzZWQvZXhlY3V0ZS5jIChhcHBlbmRfcmVwbGFjZW1lbnQpOiBFeHRyYWN0IGZyb20KCWRvX3N1YnN0CgkoZG9fc3Vic3QpOiBEb24ndCB1cGRhdGUgY291bnQgd2hlbiBhIG1hdGNoIHdhcwoJc2tpcHBlZC4KCSogdGVzdHN1aXRlL3hieGN4My5nb29kLCB0ZXN0c3VpdGUveGJ4Y3gzLnNlZCwgCgl0ZXN0c3VpdGUveGJ4Y3gzLmlucDogUmVncmVzc2lvbiB0ZXN0cwoKMjAwMy0wMy0yMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKGRvX3N1YnN0KTogRml4IHNldmVyYWwgYnVncyB3aXRoCgludW1iZXJlZCBtYXRjaGVzCgkqIHRlc3RzdWl0ZS9udW1zdWIyLmdvb2QsIHRlc3RzdWl0ZS9udW1zdWIyLmlucCwKCXRlc3RzdWl0ZS9udW1zdWIyLnNlZCwgdGVzdHN1aXRlL251bXN1YjMuZ29vZCwKCXRlc3RzdWl0ZS9udW1zdWIzLmlucCwgdGVzdHN1aXRlL251bXN1YjMuc2VkLAoJdGVzdHN1aXRlL251bXN1YjQuZ29vZCwgdGVzdHN1aXRlL251bXN1YjQuaW5wLAoJdGVzdHN1aXRlL251bXN1YjQuc2VkLCB0ZXN0c3VpdGUvbnVtc3ViNS5nb29kLAoJdGVzdHN1aXRlL251bXN1YjUuaW5wLCB0ZXN0c3VpdGUvbnVtc3ViNS5zZWQ6CglyZWdyZXNzaW9uIHRlc3RzIGZvciB0aGUgYnVncwoKMjAwMy0wMy0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjAuNiByZWxlYXNlZAoKCSogbGliL21rc3RlbXAuYzogSW5jbHVkZSBzeXMvZmlsZS5oIGlmIGF2YWlsYWJsZSBmb3IgdGhlCgliZW5lZml0IG9mIFVsdHJpeAoKMjAwMy0wMy0xNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmM6IFJlcGxhY2UgZmxhZ1Qgd2l0aCBib29sCgkqIHNlZC9leGVjdXRlLmM6IFJlcGxhY2UgZmxhZ1Qgd2l0aCBib29sCgkqIHNlZC9mbXQuYzogUmVwbGFjZSBmbGFnVCB3aXRoIGJvb2wKCSogc2VkL3NlZC5jOiBSZXBsYWNlIGZsYWdUIHdpdGggYm9vbAoJKiBzZWQvcmVnZXguYzogUmVwbGFjZSBmbGFnVCB3aXRoIGJvb2wKCjIwMDMtMDMtMTMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBVbmRlcnN0YW5kIHBhcmFtZXRlcgoJb2YgYHYnLgoKCSogc2VkL3NlZC5jICh1c2FnZSk6IFNwbGl0IGhlbHAgbWVzc2FnZSBpbnRvIG11bHRpcGxlCglzdHJpbmdzCgkobWFpbik6IERvbid0IHVuZGVyc3RhbmQgLWggYW5kIC1WCgoyMDAzLTAzLTEyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAobWF0Y2hfc2xhc2gsIHNuYXJmX2NoYXJfY2xhc3MpOiAgTW9yZQoJbXVsdGlieXRlIGNoYXJhY3RlciBzdXBwb3J0CgkoYnJsZW4pOiBOZXcgZnVuY3Rpb24KCSogdGVzdHN1aXRlL2NsYXNzZXMuZ29vZCwgdGVzdHN1aXRlL2NsYXNzZXMuaW5wLAoJdGVzdHN1aXRlL2NsYXNzZXMuc2VkOiBOZXcgZmlsZXMKCjIwMDMtMDMtMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChtYXRjaF9zbGFzaCk6IFN0cmlwIHRoZSBcIGluIGZyb250IG9mCglzbGFzaGVzIChzbyB0aGF0IHRoZSBtYXRjaGVyIHNlZXMgeC8gZm9yIHMveFwvLy8pLiAgRG9uJ3QKCW1hdGNoIC8gYW5kIFsgdW5sZXNzIGF0IHRoZSBzdGFydCBvZiBhIGNoYXJhY3Rlci4KCjIwMDMtMDItMTggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvcmVnZXguYyAoY29tcGlsZV9yZWdleCk6IC8vIG1hdGNoZXMgdGhlIGxhc3QgcmVndWxhcgoJZXhwcmVzc2lvbiBldmVuIGluIFBPU0lYTFlfQ09SUkVDVCBtb2RlLgoJKiBzZWQvY29tcGlsZS5jIChub3JtYWxpemVfdGV4dCk6IFRyZWF0IG11bHRpYnl0ZSBjaGFyYWN0ZXIKCXNldHMgY29ycmVjdGx5CgkocmVhZF90ZXh0KTogRG9uJ3Qgc3dhbGxvdyBiYWNrc2xhc2ggc2VxdWVuY2VzLCBydW4gdGV4dAoJdGhyb3VnaCBub3JtYWxpemVfdGV4dAoJKGNvbXBpbGVfcHJvZ3JhbSk6IERpdHRvIGZvciB5IGNvbW1hbmQKCgkqIHNlZC9jb21waWxlLmMgKG5vcm1hbGl6ZV90ZXh0KTogQWRkIHBhcmFtZXRlciB0aGF0IHNheXMKCXdoZXRoZXIgdGhlIHRleHQgd2lsbCBiZSBwcm9jZXNzZWQgZnVydGhlciB0byByZW1vdmUgbW9yZQoJYmFja3NsYXNoIGVzY2FwZXMuICBDYWxsZXJzIGFkanVzdGVkCgkobWF0Y2hfc2xhc2gpOiBSZW1vdmUgc2FtZSBwYXJhbWV0ZXIgZnJvbSBoZXJlLiAgQ2FsbGVycyBhZGp1c3RlZC4KCjIwMDMtMDItMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgogICAgICAgICogc2VkL3NlZC5oOiBGaXggcHJvdG90eXBlIGZvciBtYXRjaF9yZWdleCwgZGVjbGFyZSByZV9yZWdpc3RlcnMKICAgICAgICBpZiBSRUdfUEVSTAogICAgICAgICogc2VkL2V4ZWN1dGUuYyAoZG9fc3Vic3QpOiBVc2UgcmVfcmVnaXN0ZXJzCiAgICAgICAgKiBzZWQvcmVnZXguYyAoY29weV9yZWdzKTogTmV3IGZ1bmN0aW9uCiAgICAgICAgW1JFR19QRVJMXTogVXNlIHJlX3JlZ2lzdGVycwogICAgICAgIFshUkVHX1BFUkxdOiBBdm9pZCB1c2luZyBpbnRlcm5hbCBlbnRyeSBwb2ludHMsIHN1cHBvcnQgcHJlLWdsaWJjCgkyLjMgcmVnZXggZm9yIHRoZSBzYWtlIG9mIC0td2l0aG91dC1pbmNsdWRlZC1yZWdleC4KCjIwMDMtMDEtMDQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvc2VkLmg6IE1vdmUgc29tZSBzdHVmZiBmcm9tIGhlcmUuLi4KCSogc2VkL2Jhc2ljZGVmcy5oOiAuLi50byBoZXJlCgkqIGxpYi91dGlscy5jIChja19mb3Blbik6IEFkZCBGQUlMIHBhcmFtZXRlcgoJKiBsaWIvdXRpbHMuaDogQWRqdXN0IHBhcmFtZXRlcgoJKiBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jLCBzZWQvc2VkLmM6IEFkanVzdCBjYWxsZXJzCgoJKiBzZWQvYmFzaWNkZWZzLmg6IEFkZCBUUlVFL0ZBTFNFCgkqIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmMsIHNlZC9zZWQuYzogVXNlIHRoZW0KCSogc2VkL2ZtdC5jOiBEbyBub3QgcmVkZWZpbmUgdGhlbQoKMjAwMy0wMS0wMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuYzogQnVtcCBjb3B5cmlnaHQgeWVhcgoKMjAwMi0xMi0yNCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuYzogVXNlIGJpbmR0ZXh0ZG9tYWluCgkqIHNlZC9iYXNpY2RlZnMuaCBbX19FTVhfX106IERlZmluZSBpbml0aWFsaXplX21haW4KCSogbGliL2dldGxpbmUuYyBbX19FTVhfX106IFN0cmlwIHRyYWlsaW5nIENSCgoJKiBzZWQvcmVnZXguYzogRG9uJ3QgdXNlIE5fIG9uIHRoZSBsaW5lcyB0aGF0IGRlZmluZQoJZXJyb3IgbWVzc2FnZXMsIHNvbWUgY29tcGlsZXJzIGNvbXBsYWluLgoKMjAwMi0xMi0xOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjAuNSByZWxlYXNlZAoKCSogc2VkL2NvbXBpbGUuYzogRG9uJ3QgdXNlIE5fIG9uIHRoZSBsaW5lcyB0aGF0IGRlZmluZQoJZXJyb3IgbWVzc2FnZXMsIHNvbWUgY29tcGlsZXJzIGNvbXBsYWluLgoKMjAwMi0xMi0xNiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmM6IEltcHJvdmVtZW50cyB0byBzb21lIGVycm9yIG1lc3NhZ2VzOwoJYGEnLCBgaScsIGBsJywgYEwnLCBgcicgYWNjZXB0IHR3byBhZGRyZXNzZXMgZXhjZXB0IGluCglQT1NJWExZX0NPUlJFQ1QgbW9kZS4KCjIwMDItMTItMTQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvcmVnZXhfaW50ZXJuYWwuYzogRml4IHByb2JsZW0gb24gbm9uLWdsaWJjCglzeXN0ZW1zLCBmcm9tIEpha3ViIEplbGluZWsKCSogbGliL3JlZ2V4LmMgKFJFX0VOQUJMRV9JMThOKTogQ29uZGl0aW9uYWxpemUgb24KCUhBVkVfTUJSVE9XQyBhbmQgSEFWRV9XQ1JUT01CLgoJKiBsaWIvZ2V0bGluZS5jOiBGaXggY29tcGlsYXRpb24gb24gbm9uLWdsaWJjIHN5c3RlbQoJKiBsaWIvc25wcmludGYuYzogRml4IGNvbXBpbGF0aW9uIG9uIG5vbi1nbGliYyBzeXN0ZW0KCSogbGliL2Jhc2ljZGVmcy5oIFtQX106IE1ha2UgbW9yZSBwb3J0YWJsZQoKMjAwMi0xMi0xMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjAuNCByZWxlYXNlZAoKMjAwMi0xMS0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjAuMyByZWxlYXNlZAoKMjAwMi0xMS0xOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjAuMiByZWxlYXNlZAoKMjAwMi0xMS0wNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjAuMSByZWxlYXNlZAoKMjAwMi0xMC0yMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiA0LjAgcmVsZWFzZWQKCjIwMDItMTAtMjggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvdXRpbHMuYzogRG9uJ3QgZmFpbCBmb3IgRUJBREYgaW4gZmZsdXNoCgkqIHNyYy9zZWQuYzogdGhlX3Byb2dyYW0gaXMgbm93IGEgZ2xvYmFsCgoyMDAyLTEwLTE5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc3JjL3NlZC5jOiBQcmludCBHTlUgc2VkIGluIC0tdmVyc2lvbiBmb3IgR05VIHNlZCwKCWFuZCBzdXBlci1zZWQgZm9yIHN1cGVyLXNlZCAodGhhbmtzIHRvIEJydW5vIEhhaWJsZSkKCjIwMDItMTAtMTcgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy45NiByZWxlYXNlZAoKMjAwMi0xMC0xNiAgSXNhbXUgSGFzZWdhd2EgIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4KCgkqIHNyYy9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IE11bHRpYnl0ZSAneScKCSogc3JjL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogTGlrZXdpc2UKCSogc3JjL3NlZC5oOiBMaWtld2lzZQoKMjAwMi0xMC0wOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjk1IHJlbGVhc2VkCgoyMDAyLTA3LTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc3JjL3NlZC5oOiByZmlsZSAtLT4gZm5hbWUsIHdmaWxlIC0tPiBmcAoJKiBzcmMvY29tcGlsZS5jIChjb21waWxlX2NvbW1hbmQpOiBQYXJzZSAnUicgbGlrZSAndycsIHVzZQoJc2VwYXJhdGUgbGlzdHMgZm9yIGZpbGUgcmVhZCBhbmQgZmlsZSB3cml0ZQoJKiBzcmMvY29tcGlsZS5jIChnZXRfb3BlbmZpbGUpOiBOZXcgbmFtZSBvZiBnZXRfd3JpdGVmaWxlCgkqIHNyYy9jb21waWxlLmMgKHJld2luZF9yZWFkX2ZpbGVzKTogTmV3IGZ1bmN0aW9uCgkqIHNyYy9zZWQuaDogRGVjbGFyZWQgaGVyZQoJKiBzcmMvZXhlY3V0ZS5jIChjbG9zZWRvd24pOiBBbmQgY2FsbGVkIGhlcmUKCSogc3JjL2V4ZWN1dGUuYyAoYXBwZW5kX3F1ZXVlKTogQWRkZWQgJ2ZyZWUnIGZpZWxkCgkqIHNyYy9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IEltcGxlbWVudCAnUicKCjIwMDItMDYtMDkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvZXhlY3V0ZS5jIChkb19zdWJzdCk6IFJlcGxhY2VkIGZsYWcgd2FzIHNldCBvbiBldmVyeQoJcmVnZXhwIG1hdGNoLCB3aGlsZSB0aGUgZmlyc3QgbWF0Y2hlcyBzaG91bGQgbm90IHNldCBpdAoJZm9yIHMvLy9OLgoKMjAwMi0wNi0wOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNyYy9jb21waWxlLmMgKGNvbXBpbGVfZmlsZSk6IE9wZW4gdGhlIHNjcmlwdCBpbiB0ZXh0IG1vZGUKCSogbGliL3V0aWxzLmMgKHV0aWxzX2ZwX25hbWUpOiBTaG9ydGVuIHRoZSBvdXRwdXQKCSogbGliL3V0aWxzLmMgKGNrX2ZyZWFkLCBja19md3JpdGUsIGNrX2ZmbHVzaCk6IENsZWFyZXJyCglhZnRlciBwcmludGluZyBhbiBlcnJvci4KCSogbGliL3V0aWxzLmMgKGNrX2ZjbG9zZSk6IFdvcmsgb24gc3Rkb3V0IGFzIHdlbGwgaWYgc3RyZWFtID09IE5VTEwKCWFuZCBmbHVzaCBiZWZvcmUgY2xvc2luZyB0byBjaGVjayBmb3IgZXJyb3JzCgoyMDAyLTA1LTMwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc3JjL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogSW1wbGVtZW50IFcKCSogc3JjL2V4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtKTogTGlrZXdpc2UKCjIwMDItMDQtMjMgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvc2VkLmMgKHVzYWdlLCBtYWluKTogUGFyc2UgLXMKCSogc3JjL3NlZC5oIChzZXBhcmF0ZV9maWxlcyk6IE5ldyB2YXJpYWJsZQoJKiBzcmMvZXhlY3V0ZS5jIChzZXBhcmF0ZV9maWxlcyk6IE5ldyB2YXJpYWJsZQoJKiBzcmMvZXhlY3V0ZS5jIChyZXNldF9hZGRyZXNzZXMpOiBOZXcgZnVuY3Rpb24gdG8gbWFrZSByYW5nZQoJYWRkcmVzc2VzIHdvcmsgc2VwYXJhdGVseSBvbiBlYWNoIGZpbGUgd2hlbiB1c2luZyBpbi1wbGFjZQoJZWRpdGluZwoJKiBzcmMvZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0pOiBUaGUgYG4nIGFuZCBgTicgdXNlIHRlc3RfZW9mCglzbyB0aGF0IHRoZSBzY3JpcHQgcmVzdGFydHMgYXQgZW5kIG9mIGZpbGUsIG5vdCBhdCBlbmQgb2YgaW5wdXQKCSogc3JjL2V4ZWN1dGUuYyAodGVzdF9kb2xsYXJfRU9GKTogTWFrZSAkIHdvcmsgc2VwYXJhdGVseQoJb24gZWFjaCBmaWxlIHdoZW4gdXNpbmcgLXM7IHJlbmFtZWQgdG8gdGVzdF9lb2YKCQoyMDAyLTAyLTI4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc3JjL3NlZC5oIChzdHJ1Y3Qgc2VkX2NtZCk6IGV4aXRfc3RhdHVzIC0+IGludF9hcmcKCSogc3JjL2NvbXBpbGUuYzogTGlrZXdpc2UKCSogc3JjL2V4ZWN1dGUuYzogTGlrZXdpc2UKCgkqIHNyYy9jb21waWxlLmMgKGNvbXBpbGVfY29tbWFuZCk6IFBhcnNlIGBsJyBsaWtlCglgcScgYW5kIGBRJzsgZGVmYXVsdCBmb3IgaW50X2FyZyBpcyAtMQoJKiBzcmMvZXhlY3V0ZS5jIChkb19saXN0KTogTmV3IGFyZ3VtZW50LCB1c2VkIGluc3RlYWQKCW9mIGxjbWRfb3V0X2xpbmVfbGVuCgkoZXhlY3V0ZV9wcm9ncmFtKTogSW50ZXJwcmV0IGludF9hcmcgZm9yIHRoZSBgbCcgY29tbWFuZDsKCXJldHVybiAwIGZvciBgcScgYW5kIGBRJyBpZiBpbnRfYXJnIGlzIC0xCgoJKiBzcmMvZm10LmM6IE5ldyBmaWxlLCBsb290ZWQgZnJvbSBHTlUgdGV4dHV0aWxzCgkqIHNyYy9jb21waWxlLmM6IFBhcnNlIGBMJwoJKiBzcmMvZXhlY3V0ZS5jOiBFeGVjdXRlIGBMJwoJCjIwMDItMDItMTQgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzcmMvZXhlY3V0ZS5jIChzdHJfYXBwZW5kX21vZGlmaWVkKTogRml4ZWQgYSBzdHVwaWQKCWJ1ZyAoc3RvcCBjb25kaXRpb24gd2FzICpzdGFydCA9PSAqZW5kLCBtZWFudCB0byBiZQoJc3RhcnQgPT0gZW5kKQoKMjAwMi0wMi0wNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIGxpYi91dGlscy5jOiBBZGRlZCBkaXJlY3RvcnkgcGFyYW1ldGVyIHRvCgl0ZW1wX2ZpbGVfdGVtcGxhdGUKCSogbGliL3V0aWxzLmg6IEFkanVzdGVkCgkqIHNyYy9leGVjdXRlLmM6IEFkanVzdGVkCgoyMDAyLTAxLTI5ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc3JjL2NvbXBpbGUuYyAobWFya19zdWJzdF9vcHRzKTogU2lnbmFsIGFuIGVycm9yIGlmCgl0aGVyZSBhcmUgbXVsdGlwbGUgZyBvciBwIG9wdGlvbnMKCSogc3JjL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogUmFpc2UgYXBwcm9wcmlhdGUKCWVycm9yIGlmIHNlY29uZCBzdHJpbmcgaW4geSBjb21tYW5kIGlzIGxvbmdlciB0aGFuCglmaXJzdCAodXNlZCB0byBiZSAiZXhjZXNzIGp1bmsgYWZ0ZXIgY29tbWFuZCIpCgoyMDAxLTEyLTMxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogbGliL2dldGxpbmUuYzogU3RyaXAgdGhlIHRlcm1pbmF0aW5nIFxyIHVuZGVyIFdpbmRvd3MKCW9yIE1TLURPUy4KCQoJKiB0ZXN0c3VpdGUveGVtYWNzLnNlZCwgdGVzdHN1aXRlL3hlbWFjcy5pbnAsCgl0ZXN0c3VpdGUveGVtYWNzLmdvb2Q6IFN1Ym1pdHRlZCBieSBKb2huIEZyZW1saW4KCShqb2huQGZyZW1saW4uZGUpCgoyMDAxLTEyLTI3ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoJCgkqIHNlZC9leGVjdXRlLmMgKGRvX3N1YnN0KTogRmxhZ3MgaW4gb3B0aW1pemVkIHMvXnh4LwoJY29tbWFuZHMgd2VyZSBkaXNjYXJkZWQgKHNlZSB0aGUgY2hhbmdlIGJlbG93KQoKMjAwMS0xMi0xOSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKHJlc2l6ZV9saW5lKTogTGltaXQgaW5hY3RpdmUgc3BhY2UgdG8gdHdvCgl0aGlyZHMgb2YgYSBidWZmZXIKCSogc2VkL2V4ZWN1dGUuYyAobGluZV9pbml0KTogSW5pdGlhbGl6ZSBidWYtPmFjdGl2ZQoJKiBzZWQvZXhlY3V0ZS5jIChzdHJfYXBwZW5kLCBzdHJfYXBwZW5kX21vZGlmaWVkLCBsaW5lX2NvcHksCglkb19saXN0LCBkb19zdWJzdCwgZXhlY3V0ZV9wcm9ncmFtLCBwcm9jZXNzX2ZpbGVzKTogT3BlcmF0ZQoJb24gYWN0aXZlIHNwYWNlCgoJKiBzZWQvZXhlY3V0ZS5jIChkb19zdWJzdCk6IE9wdGltaXplIHMvXnh4Ly8gYnkgbWFraW5nIGEgcGFydAoJb2YgdGhlIGJ1ZmZlciBpbmFjdGl2ZSBhbmQgcy94eCQvLyBieSB0cnVuY2F0aW5nIGl0LgoJKiBzZWQvZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0pOiBPcHRpbWl6ZSBEIGJ5IG1ha2luZyBhIHBhcnQKCW9mIHRoZSBidWZmZXIgaW5hY3RpdmUKCQoJKiB0ZXN0c3VpdGUvdW5pcS5zZWQsIHRlc3RzdWl0ZS91bmlxLmlucCwgdGVzdHN1aXRlL3VuaXEuZ29vZDoKCWFkZGVkIHRvIHRlc3QgUCBhbmQgRCBjb21tYW5kcy4KCSogdGVzdHN1aXRlL2Zhc3RzLnNlZCwgdGVzdHN1aXRlL2Zhc3RzLmlucCwgdGVzdHN1aXRlL2Zhc3RzLmdvb2Q6CglhZGRlZCB0byB0ZXN0IHRoZSBuZXcgb3B0aW1pemF0aW9uIGRvbmUgb24gdGhlIGBzJyBjb21tYW5kLgoKMjAwMS0xMi0xNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9kYy5pbnA6IEFsc28gY29tcHV0ZSBFYXN0ZXIgb2YgMjAwMiA6LSkKCgkqIHNlZC9leGVjdXRlLmMgWyFIQVZFX0ZDSE1PRF06IERvbid0IGNobW9kIHRoZSBvdXRwdXQgZmlsZQoJaWYgd29ya2luZyBpbi1wbGFjZQoKMjAwMS0xMS0xMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9zZWQuaCAoc3RydWN0IHNlZF9jbWQpOiBhMSBpcyBhIHBvaW50ZXIgdG9vCgkqIHNlZC9jb21waWxlLmM6IExpa2V3aXNlCgkqIHNlZC9leGVjdXRlLmM6IExpa2V3aXNlCgoJKiBzZWQvY29tcGlsZS5jOiBVc2Ugb2JzdGFja3MKCSogc2VkL2V4ZWN1dGUuYzogTGlrZXdpc2UKCjIwMDEtMTEtMDkgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChtYXJrX3N1YnN0X29wdHMpOiBQYXJzZSBvcHRpb24gYGUnLAoJcHJlc2VydmUgdHdvIG9jY3VycmVuY2VzIG9mIHRoZSBgZScgYW5kIGBwJyBvcHRpb25zLgoJKiBzZWQvZXhlY3V0ZS5jIChkb19zdWJzdCkgW0hBVkVfUE9QRU5dOiBJbnRlcnByZXQgb3B0aW9uCglgZScgKGV2YWx1YXRlLCBsaWtlIFBlcmwncyBidXQgdXNlcyBCb3VybmUgc2hlbGwpLgoJKiBzZWQvc2VkLmggKHN0cnVjdCBzdWJzdCk6IEFkZCBhbiBgZXZhbCcgZmxhZy4KCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IENvbXBpbGUgY29tbWFuZCBgZScKCWxpa2UgYGMnLgoJKiBzZWQvZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0pOiBFeGVjdXRlIGNvbW1hbmQgYGUnLgoKMjAwMS0wOS0yNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKGdldF93cml0ZWZpbGUpIFshUE9TSVhMWV9DT1JSRUNUXToKCXN1cHBvcnQgL2Rldi9zdGRvdXQKCSogc2VkL2V4ZWN1dGUuYyAob3Blbl9uZXh0X2ZpbGUsIGNsb3NlZG93bik6IFN1cHBvcnQKCWluLXBsYWNlIGVkaXRpbmcKCSogc2VkL2V4ZWN1dGUuYyAoYmFja3VwX2ZpbGVfbmFtZSk6IE5ldyBmdW5jdGlvbiB0bwoJc3VwcG9ydCBpbi1wbGFjZSBlZGl0aW5nCgkqIHNlZC9tYWluLmMgKHVzYWdlLCBtYWluKTogUGFyc2UgLWkuCgkqIHNlZC91dGlscy5jOiBNb3ZlZCB0byBsaWIgZGlyZWN0b3J5CgkKCSogbGliL3V0aWxzLmMgKHRlbXBfZmlsZV90ZW1wbGF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogc2VkL3V0aWxzLmg6IERlY2xhcmVkIHRlbXBfZmlsZV90ZW1wbGF0ZS4KCjIwMDEtMDktMDUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvZXhlY3V0ZS5jIChkb19zdWJzdCk6IGBiYWFhYycsIGlmIHBhc3NlZCB0aHJvdWdoCglzL2EqL3gvZywgZ2F2ZSBgeGJ4eGN4JyByYXRoZXIgdGhhbiBgeGJ4Y3gnIChiZWNhdXNlIGFuCgllbXB0eSBzdHJpbmcgbWF0Y2hlZCBiZWZvcmUgdGhlIGBjJy4gIEZpeGVkLgoKCSogc2VkL2V4ZWN1dGUuYzogUmVtb3ZlZCBtbWFwIHN1cHBvcnQsIEkvTyBpcyBkb25lIHVzaW5nCglnZXRsaW5lIChzbG93ZXIgYnV0IG1vcmUgYnVnLXByb29mKS4KCSogc2VkL3V0aWxzLmM6IExpa2V3aXNlLgoJKiBsaWIvZ2V0bGluZS5jOiBOZXcgZmlsZQoKMjAwMS0wMy0yMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKG5vcm1hbGl6ZV90ZXh0KSBbUE9TSVhMWV9DT1JSRUNUXTogRW5hYmxlCgllc2NhcGVzIGluIG1vZGVzIG90aGVyIHRoYW4gQlJFLgoKMjAwMS0wMy0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKG5vcm1hbGl6ZV90ZXh0KTogU3VwcG9ydCBcWFhYIGluIFBlcmwgbW9kZSwKCVxvWFhYIGluIG5vbi1QZXJsIG1vZGUuCgoyMDAxLTAzLTE4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoY29tcGlsZV9wcm9ncmFtKTogRml4ZWQgbWlzc2luZyBicmVhayB3aGVuCgljb21waWxpbmcgJ3EnIGFuZCAnUScuCgoJKiBzZWQvY29tcGlsZS5jIChjaGVja19maW5hbF9wcm9ncmFtKTogUmVtb3ZlZCBub3cgc3B1cmlvdXMKCWNhbGwgdG8gY29tcGlsZV9yZWdleAoJKiBzZWQvcmVnZXguYyAoY29tcGlsZV9yZWdleCk6IERvbid0IHRyYWNrIHRoZSBsYXN0IGNvbXBpbGVkCglyZWdleAoJKiBzZWQvcmVnZXguYyAoZXhlY3V0ZV9yZWdleCk6IFRyYWNrIGhlcmUgdGhlIGxhc3QgY29tcGlsZWQKCXJlZ2V4CgkKMjAwMS0wMy0wMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKHNldHVwX3JlcGxhY2VtZW50KTogU3VwcG9ydCBcW2xMdVVFXSBsaWtlCglQZXJsIGFuZCB2aS4KCSogc2VkL2NvbXBpbGUuYyAobmV3X3JlcGxhY2VtZW50KTogQWNjZXB0IG5ldyBwYXJhbWV0ZXIKCXRvIHN1cHBvcnQgXFtsTFV1RV0uCgkqIHNlZC9zZWQuaCAoZW51bSByZXBsYWNlbWVudF90eXBlcyk6IE5ldyBkZWNsYXJhdGlvbgoJKiBzZWQvZXhlY3V0ZS5jIChkb19zdWJzdCk6IFVzZSBuZXcgZnVuY3Rpb24gc3RyX2FwcGVuZF9tb2RpZmllZAoJdG8gYXBwbHkgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdmlhIFxbbExVdUVdLgoJKiBzZWQvZXhlY3V0ZS5jIChzdHJfYXBwZW5kX21vZGlmaWVkKTogTmV3IGZ1bmN0aW9uCgoyMDAxLTAzLTAyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyAoc2V0dXBfcmVwbGFjZW1lbnQpOiBDb3VudCB0aGUgbnVtYmVyIG9mIGJhY2tyZWZlcmVuY2VzCgl0aGF0IHRoZSBSSFMgbmVlZHMKCSogc2VkL3JlZ2V4LmMgKGNvbXBpbGVfcmVnZXgpOiBDaGVjayBpZiB0aGVyZSBpcyBhIHN1ZmZpY2llbnQgbnVtYmVyCglvZiBiYWNrcmVmZXJlbmNlcyAobmV3IGFyZ3VtZW50IG5lZWRlZF9zdWIgcmVwbGFjZXMgbm9zdWIpCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfYWRkcmVzcywgY29tcGlsZV9wcm9ncmFtLAoJY2hlY2tfZmluYWxfcHJvZ3JhbSk6IENhbGxlcnMgYWRqdXN0ZWQKCjIwMDEtMDItMDggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBBZGRlZCBgUScgKHF1aXQgd2l0aG91dCBvdXRwdXQpCgkqIHNlZC9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IERpdHRvCgoJKiBzZWQvY29tcGlsZS5jIChjb21waWxlX3Byb2dyYW0pOiBGaWxsIGluIGV4aXRfc3RhdHVzIGZvciBgcScgYW5kIGBRJwoJKiBzZWQvZXhlY3V0ZS5jIChleGVjdXRlX3Byb2dyYW0pOiBSZXR1cm4gLTEgZm9yIGBnbyBvbicsIDAuLjI1NQoJdG8gc2V0IHRoZSBleGl0IHN0YXR1cwoJKiBzZWQvZXhlY3V0ZS5jIChwcm9jZXNzX2ZpbGVzKTogSW50ZXJwcmV0IG5ldyBjb252ZW50aW9uIGZvcgoJZXhlY3V0ZV9wcm9ncmFtLCByZXR1cm4gc2VkJ3MgZXhpdCBjb2RlCgkqIHNlZC9zZWQuYyAobWFpbik6IFJldHVybiBwcm9jZXNzX2ZpbGVzJ3MgZXhpdCBjb2RlCgkqIHNlZC9zZWQuaCAoc3RydWN0IHNlZF9jbWQpOiBEZWNsYXJlIGV4aXRfc3RhdHVzCgkKMjAwMS0wMS0wNyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IEFkZGVkIGBUJyAoYnJhbmNoIGlmIGZhaWxlZCkKCSogc2VkL2V4ZWN1dGUuYyAoc2hyaW5rX3Byb2dyYW0sIGV4ZWN1dGVfcHJvZ3JhbSk6IERpdHRvCgoyMDAxLTAxLTA0ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBVc2UgYXV0b21ha2UncyBpbXBsZW1lbnRhdGlvbgoJb2YgYG1ha2UgY2hlY2snLiAgUmVtb3ZlZCB0aGUgdGVzdCB0YXJnZXRzCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogTW92ZWQgdGhlIHRlc3QgdGFyZ2V0cyBoZXJlCgkobmV3IGZpbGUpLgoJKiB0ZXN0c3VpdGUvcnVudGVzdDogTmV3IGZpbGUKCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS50ZXN0czogYGtoYWRhZnknIHRlc3QgdXNlcyBFUkVzLgoKCSogdGVzdHN1aXRlL3NwZW5jZXIuaW5wOiBSZW1vdmVkIHRoZSBeKiB0ZXN0CgoJKiB0ZXN0c3VpdGUvc3BlbmNlci5zaDogRG9uJ3QgcmVseSBvbiBhd2s7IG1vcmUgY29tbWVudHMgdG9vCgkKMjAwMS0wMS0wMyAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KICAgCgkqIHNlZC9jb21waWxlLmMoc25hcmZfY2hhcl9jbGFzcykgW1JFR19QRVJMXTogRG9uJ3QgcGFyc2UKCWBcbicgc3BlY2lhbGx5CgkqIHNlZC9jb21waWxlLmMobWF0Y2hfc2xhc2gpIFtSRUdfUEVSTF06IERpdHRvCgoJKiBzZWQvY29tcGlsZS5jKHJlYWRfdGV4dCkgW1JFR19QRVJMXTogU3VwcG9ydCBbeFhdIG1vZGlmaWVycwoJKiBzZWQvY29tcGlsZS5jKG1hcmtfc3Vic3Rfb3B0cykgW1JFR19QRVJMXTogRGl0dG8KCjIwMDAtMTItMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBsaWIvc25wcmludGYuYyBbQk9PVFNUUkFQXTogRG9uJ3QgaW5jbHVkZSBzdGRpby5oCgkqIGxpYi9zdHJlcnJvci5jIFtCT09UU1RSQVBdOiBEb24ndCBpbmNsdWRlIHN0ZGlvLmgKCSogc2VkL2V4ZWN1dGUuYyBbIUhBVkVfSVNBVFRZXTogRG9uJ3QgYnVmZmVyIHN0ZGluCgoyMDAwLTEyLTExICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyhtYXJrX3N1YnN0X29wdHMpOiBTdXBwb3J0IFttTXNTXSBmbGFncwoJKiBzZWQvY29tcGlsZS5jKHJlYWRfdGV4dCk6IFN1cHBvcnQgW01TXSBmbGFncyBmb3IgCglhZGRyZXNzZXMKCSogc2VkL3JlZ2V4LmMoY29tcGlsZV9yZWdleCk6IFN1cHBvcnQgYXJiaXRyYXJ5IGZsYWdzIGZvcgoJcmVnbmNvbXAuCgoJKiBzZWQvcmVnZXguYyhjb21waWxlX3JlZ2V4KSBbUkVHX1BFUkxdOiBEb24ndCBjYWxsCglub3JtYWxpemVfdGV4dC4KCjIwMDAtMTItMDggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CgoJKiBiYXNpY2RlZnMuaDogTW92ZWQgaGVyZSBmcm9tIHRoZSBgc2VkJyBzdWJkaXJlY3RvcnkuCgkKCSogY29uZmlndXJlLmluOiBSZW1vdmVkIGNyYXAgdG8gcGljayBhIHJlZ2V4IGVuZ2luZS4KCUFkZGVkIHNucHJpbnRmIHRvIHRoZSBBQ19SRVBMQUNFX0ZVTkNTIGNhbGwuCgoJKiBsaWIvc25wcmludGYuYzogTmV3IGZpbGUuCgkKCSogc2VkL3JlZ2V4LmMoY29tcGlsZV9yZWdleCk6IFVzZSByZWduY29tcAoJKiBzZWQvcmVnZXguYyhtYXRjaF9yZWdleCk6IFVzZSByZWdleGVjMgoKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3Byb2dyYW0pOiBJbXBsZW1lbnRlZCB0aGUgYHYnIGNvbW1hbmQuCgoJKiBzZWQvc2VkLmMobWFpbik6IEltcGxlbWVudGVkIHRoZSBgcicgYW5kIGBSJyBvcHRpb25zCgoJKiBzZWQvc2VkLmg6IFJlcGxhY2VkIHVzZV9leHRlbmRlZF9zeW50YXhfdCB3aXRoCglleHRlbmRlZF9yZWdleHBfZmxhZ3MgdG8gc3VwcG9ydCBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCgoJKiBzZWQvZXhlY3V0ZS5jKG9wZW5fbmV4dF9maWxlKTogRG9uJ3QgbW1hcCBzdGRpbiAoYmVjYXVzZQoJd2UgY2Fubm90IHNlZWsgaW50byBpdCwgc28gYSByZWRpcmVjdGVkIHN0ZGluJ3MgY29udGVudHMKCXdvdWxkIG5vdCBiZSAiZWF0ZW4iIGJ5IHNlZCkKCk1vbiBBdWcgMzAgMjM6NDA6MDggUERUIDE5OTkgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAyLjgwIHJlbGVhc2VkCgkKCSogc2VkL2V4ZWN1dGUuYyhkb19zdWJzdCk6IGxpYi9yZWdleC5jKHJlX3NlYXJjaF8yKSBzZWVtcyB0bwoJd2FudCBvbmUgZXh0cmEgYmFja3JlZmVyZW5jZSByZWdpc3RlcjsgaHVtb3IgaXQuCgoJKiBzZWQvcmVnZXguYyhjb21waWxlX3JlZ2V4KTogd29yayBhcm91bmQgc29tZSBvZGQgYXNzdW1wdGlvbnMKCXRoYXQgbGliL3JlZ2V4LmMocmVfY29tcGlsZV9wYXR0ZXJuKSBtYWtlcyBhYm91dCBvdXIgZGVzaXJlZAoJUkUgc3ludGF4LgoKCSogY29uZmlndXJlLmluOiB0d2Vha2VkIHZlcnNpb24gdG8gMy4wMi44MDsgYWRkZWQgbmV3IGVudHJpZXMKCXRvIHRoZSBBTExfTElOR1VBUyBkZWZpbml0aW9uLgoKCSogZG9jL3NlZC4xLCBkb2Mvc2VkLnRleGksIEJVR1M6IGV4cGxpY2l0bHkgcmVxdWVzdCB0aGUgb3V0cHV0CglvZiBzZWQgLS12ZXJzaW9uIGluIGJ1Zy1yZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zLgoKCSogZG9jL3NlZC50ZXhpOiB0aGUgb2xkICJpbmZvcm1hbCBzZWRlcnMgbGlzdCIgaXMgZGVhZDsgZG9jdW1lbnQKCXRoZSBuZXcgc2VkLXVzZXJzIG1haWxpbmcgbGlzdCBpbnN0ZWFkICh1bmRlciBPdGhlciBSZXNvdXJjZXMpLgoKClRodSBBdWcgMTkgMjM6Mjc6NTQgUERUIDE5OTkgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCQoJKiBzZWQvc2VkLmg6IEFkZCBleHBsaWNpdCAjaW5jbHVkZSBvZiAicmVnZXgtc2VkLmgiIChyYXRoZXIKCSB0aGFuIHJlbHlpbmcgb24gcGFyZW50IGZpbGUgZG9pbmcgc28pOyBjaGFuZ2UgdGhlICJjbWRfcmVnZXgiCgkgbWVtYmVyIG9mIHNlZF9jbWQ6IG1ha2UgaXQgYSBwb2ludGVyIChpbnN0ZWFkIG9mIGEgc3RydWN0KSwKCSBhbmQgY2hhbmdlIGl0cyBuYW1lIHRvIGNtZF9zdWJzdDsgYWRkIHByb3RvdHlwZXMgZm9yIG5ld2x5CgkgZXhwb3J0ZWQgZnVuY3Rpb25zIGJhZF9wcm9nKCksIG5vcm1hbGl6ZV90ZXh0KCksIGNvbXBpbGVfcmVnZXgoKSwKCSBtYXRjaF9yZWdleCgpLCBhbmQgcmVsZWFzZV9yZWdleCgpOyBkcm9wIHJ4X3Rlc3RpbmcgdmFyaWFibGUuCgoJKiBzZWQvY29tcGlsZS5jOiBtb3ZlIHRoZSBjb21waWxlX3JlZ2V4KCkgZnVuY3Rpb24gdG8gcmVnZXguYzsKCWV4cG9ydCBiYWRfcHJvZygpIGFuZCBub3JtYWxpemVfdGV4dCgpIGZ1bmN0aW9uczsgZWxpbWluYXRlIHRoZQoJcnhfdGVzdGluZyBkZWJyaXM7IHJlbmFtZSB0aGUgTk9MRUFLUyBzeW1ib2wgdG8gbW9yZSBkZXNjcmlwdGl2ZQoJREVCVUdfTEVBS1M7IG1ha2UgY21kX3JlZ2V4IHRvIGNtZF9zdWJzdCBmaXhlcyAoc2VlIGFib3ZlKTsKCW1ha2UgdXNlIG9mIG5ld2x5IGFic3RyYWN0ZWQgcmVsZWFzZV9yZWdleCgpIGZ1bmN0aW9uLgoKCSogc2VkL2V4ZWN1dGUuYzogYWJzdHJhY3Qgb3V0IHRoZSByZWdleCBtYXRjaGluZyB0bwoJcmVnZXguYzptYXRjaF9yZWdleCgpOyBOT0xFQUtTIHRvIERFQlVHX0xFQUtTIGNoYW5nZTsKCWNtZF9yZWdleCB0byBjbWRfc3Vic3Qgc3RydWN0dXJlIG1lbWJlciBuYW1lIGNoYW5nZS4KCgkqIHNlZC9leGVjdXRlLmMoZG9fc3Vic3QpOiB1c2UgcmVfcmVnaXN0ZXJzL3JlZ29mZl90IGluc3RlYWQgb2YKCXJlZ21hdGNoX3QgdG8gaG9sZCB0aGUgYmFja3JlZmVyZW5jZSByZWdpc3RlcnMsIG1ha2UgIm9mZnNldCIKCWFsd2F5cyBiZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgKHJhdGhlciB0aGFuCglhIGRlbHRhIGZyb20gInN0YXJ0IiksIGRlZmVyIHNvbWUgbWF0Y2hpbmcgYm9va2tlZXBpbmcgKGUuZy4sCglub3RfYm9sX3ApIHRvIG1hdGNoX3JlZ2V4KCkuCgoJKiBzZWQvc2VkLmMobWFpbik6IGxvb3NlIHJ4X3Rlc3RpbmcgdmFyaWFibGU7IE5PTEVBS1MKCShha2EgREVCVUdfTEVBS1MpIGNvZGUgYXR0ZW1wdGluZyB0byByZWxlYXNlCglfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBpcyBwcm9ibGVtYXRpYywgc28gb21pdCBpdC4KCgkqIHNlZC9yZWdleC5jOiBuZXcgZmlsZSAtLS0gYWJzdHJhY3RzIG91dCB0aGUgaW50ZXJmYWNlIHRvIHRoZQoJcmVnZXggZW5naW5lIHNvIHRoYXQgbGVzcyBjb25kaXRpb25hbCBjb2RlIGlzIHJlcXVpcmVkIGluCgljb21waWxlLmMgYW5kIGV4ZWN1dGUuYywgYW5kIHNvIGFzIHRvIG1ha2UgYSBjaGFuZ2Ugb2YgZW5naW5lCgllYXNpZXI7IGltcGxlbWVudHMgY29tcGlsZV9yZWdleCgpICh3aGljaCBsb29rcyBhbiBhd2Z1bCBsb3QKCWxpa2UgdGhlIG9uZSB0aGF0IHVzZWQgdG8gbGl2ZSBpbiBjb21waWxlLmMpLCBtYXRjaF9yZWdleCgpLAoJYW5kIChpZiBERUJVR19MRUFLUyBpcyBzZXQpIHJlbGVhc2VfcmVnZXgoKS4KClN1biBBcHIgMTggMDQ6NDA6NDYgUERUIDE5OTkgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9zZWQuYyhtYWluKTogY29uZGl0aW9uYWxpemUgY2FsbHMgdG8gc2V0bG9jYWxlKCkgYW5kCgl0ZXh0ZG9tYWluKCkgdG8gb25seSBvY2N1ciBpZiB0aGVpciBzdXBwb3J0IGlzIG5lZWRlZC93YW50ZWQuCgpTdW4gQXByIDE4IDAzOjAxOjQ2IFBEVCAxOTk5ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBib290c3RyYXAuc2g6ICJmb28gfHwgYmFyICYmIGJheiIgd2FzIG5vdCBncm91cGluZyBsaWtlIEkKCWV4cGVjdGVkICgiZm9vIHx8IChiYXIgJiYgYmF6KSIpIHVuZGVyIGF0IGxlYXN0IG9uZSBzaGVsbCwKCXNvIGNoYW5nZSB0aGUgdGVzdCBmb3IgYSBwcmUtZXhpc3RpbmcgY29uZmlnLmggZmlsZSB0byBhbgoJaWYgc3RhdGVtZW50LgoKCSogYm9vdHN0cmFwLnNoOiBhZGRlZCAtRFVTRV9SRUdFWF9HTlVfSCBvcHRpb24gdG8gdGhlCgljb21waWxlciBpbnZvY2F0aW9uLCB0byBlbnN1cmUgdGhhdCB3ZSBnZXQgYSB1c2FibGUKCXJlZ2V4IGxpYnJhcnkgaW5jbHVkZWQuCgpTdW4gQXByIDE4IDAyOjU5OjQyIFBEVCAxOTk5ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvc2VkLmgsIHNlZC91dGlscy5jOiBjb25kaXRpb25hbGl6ZWQgaW5jbHVzaW9uIG9mIDxsaWJpbnRsLmg+Cgl0byBvY2N1ciBvbmx5IGlmIEVOQUJMRV9OTFMgaXMgZGVmaW5lZC4KClN1biBBcHIgMTggMDE6NDg6NDUgUERUIDE5OTkgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMoeG9mYSxub3JtYWxpemVfdGV4dCxjb252ZXJ0X251bWJlcik6IGNoYW5nZQoJbmFtZSBvZiB4b2ZhKCkgZnVuY3Rpb24gdG8gY29udmVydF9udW1iZXIoKTsgY2hhbmdlIHNlbWFudGljcwoJdG8gZG8gYWxsIG9mIHRoZSB3b3JrIG9mIHRoZSB0ZXh0LT5udW1iZXIgY29udmVyc2lvbi4KCgkqIHNlZC9jb21waWxlLmMobm9ybWFsaXplX3RleHQpOiBhZGQgbmV3IFxkREREIGRlY2ltYWwKCWFuZCBcb09PTyBvY3RhbCBlc2NhcGVzLgoKU3VuIE1hciAyOCAyMTowNTowNyBQU1QgMTk5OSAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL3NlZC5jKG1haW4pOiBpZiBOT0xFQUtTIGlzIHNldCwgZnJlZSB1cCBhIHdvcmQgdGhhdAoJdGhlIGNhbGwgdG8gdGV4dGRvbWFpbigpIGFsbG9jYXRlZC4KCgkqIHNlZC9leGVjdXRlLmMocmVhZF9maWxlX2xpbmUpOiBwbHVnIHVwIChtaW5vcikgbWVtb3J5IGxlYWs6CglpZiBidWZmZXIuYWxsb2M9PTAgd2UgbWF5IGhhdmUgbWFsbG9jKCknZCAxIGJ5dGUgYW55d2F5LAoJc28gYmUgc3VyZSB0byBGUkVFKGJ1ZmZlci50ZXh0KSBiZWZvcmUgY2FsbGluZyBsaW5lX2luaXQoKTsKCkZyaSBNYXIgMjYgMTY6NTI6MTAgUFNUIDE5OTkgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMobWF0Y2hfc2xhc2gpOiBzb21ld2hlcmUgYmV0d2VlbiAzLjAyCglhbmQgMy4wMmEgd2UgbG9zdCB0aGUgYWJpbGl0eSB0byB1c2UgYSBuZXdsaW5lIGFzCgl0aGUgcy8vLyBkZWxpbWl0ZXI7IHJlc3RvcmUgdGhpcyBhYmlsaXR5LgoKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3JlZ2V4KTogZm9yZ2V0IGFib3V0IHRyeWluZwoJdG8gY2FjaGUgdGhlIGNvbXBpbGVkIGZvcm0gb2YgdGhlIGxhc3QgUkUgLS0tIGl0CgljYXVzZXMgbW9yZSBwcm9ibGVtcyB0aGFuIGl0cyB3b3J0aC4gIFdlIG5vdyBvbmx5CgljYWNoZSB0aGUgc291cmNlIGZvcm0uCgoJKiB0ZXN0c3VpdGUvaGVscC5nb29kOiB1cGRhdGUgdG8gcmVmbGVjdCBvdXRwdXQgY29udGFpbmluZwoJbmV3IG9wdGlvbnMuCgpTdW4gRGVjICA2IDAwOjUxOjIzIFBTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvdXRpbHMuYyhja19md3JpdGUpOiBmaXggaTE4biBidWcgb2YgdXNpbmcgYSBwcmludGYKCWZyYWdtZW50IG9mICJpdGVtJXMiIHRvIGhhbmRsZSBwbHVyYWwgdGV4dC4KCk1vbiBOb3YgMjMgMTE6MDM6NDAgUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGRvYy9zZWQuMSwgZG9jL3NlZC50ZXhpOiByYW4gaXNwZWxsIG92ZXIgdGhlc2UKCWZpbGVzIHRvIGNhdGNoIHRoZSBtb3JlIG9idmlvdXMgdHlwb3MuLi4KClN1biBOb3YgIDEgMDA6MDk6MDcgUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMoZG9fbGlzdCk6IG1ha2UgYSBgbGNtZF9vdXRfbGluZV9sZW4nCgkoLS1saW5lLWxlbmd0aCkgb2YgemVybyBtZWFuICJpbmZpbml0ZSBsZW5ndGgiLAoJaS5lLiwgIm5ldmVyIHdyYXAiLgoKU2F0IE9jdCAzMSAyMzowNjo1MCBQU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jKG1hdGNoX2FuX2FkZHJlc3NfcCxwcm9jZXNzX2ZpbGVzKSwKCWNvbXBpbGUuYyhjb21waWxlX3Byb2dyYW0pOiBiYWNrIG91dCB0aGUgInplcm8tYWRkcmVzcyIKCWNoYW5nZXMgb2YgMTk5OC0wOS0yNy4gIEl0IHdhcyBhIG5lYXQgaWRlYSwgYnV0IHRoZXJlIGFyZQoJdG9vIG1hbnkgZGFyayBjb3JuZXJzIHdoaWNoIGRvbid0IHdvcmsgd2VsbC4gIFRoZQoJc3BlY2lhbCBjb2RlIGZvciBoYW5kbGluZyBsaW5lIHJhbmdlcyBzdGFydGluZyBhdAoJYWRkcmVzcyB6ZXJvIChmcm9tIDE5OTgtMDgtMzEpIGFyZSBzdGlsbCB0aGVyZSB0aG91Z2g6Cgl0aGlzIHNlZW1zIHRvIHdvcmsgZmluZSB3aXRoIG5vIHN1cnByaXNlcy4KClNhdCBPY3QgMzEgMjI6MTg6NTkgUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9zZWQuYywgc2VkL3NlZC5oLCBzZWQvZXhlY3V0ZS5jOiBhZGRlZCBuZXcKCWBsY21kX291dF9saW5lX2xlbicgdmFyaWFibGUuICAoSWRlYSBzdWdnZXN0ZWQgYnkKCUNhcmxvcyBKLiBHLiBEdWFydGUgPGwzODA3NkBhbGZhLmlzdC51dGwucHQ+LikKCUFsc28gYWRkZWQgQVRPSSBtYWNybyAod2hpY2ggdXNlcyBzdHJ0b3VsKCkgaWYgYXZhaWxhYmxlLAoJd2l0aCBmYWxsLWJhY2sgdG8gYXRvaSgpKS4KCSogc2VkL3NlZC5jKG1haW4pOiBhdHRlbXB0IHRvIHVzZSBDT0xTIGVudmlyb25tZW50IHZhcmlhYmxlCgl0byBzZXQgYSByZWFzb25hYmxlIGBsY21kX291dF9saW5lX2xlbic7IGFkZGVkIC1sLy0tbGluZS1sZW5ndGgKCWNvbW1hbmQtbGluZSBvcHRpb25zIHRvIHNldCB0aGUgbmV3IGBsY21kX291dF9saW5lX2xlbicgZmxhZy4KCSogc2VkL3NlZC5jKHVzYWdlKTogZG9jdW1lbnRlZCBuZXcgLWwvLS1saW5lLWxlbmd0aCBvcHRpb25zLgoJKiBzZWQvZXhlY3V0ZS5jKGRvX2xpc3QpOiB1c2UgYGxjbWRfb3V0X2xpbmVfbGVuJyB2YXJpYWJsZQoJaW5zdGVhZCBvZiBgTENNRF9PVVRfTElORV9MRU4nLgoJKiBzZWQvZXhlY3V0ZS5jOiBkZWxldGVkIG5vdyBvYnNvbGV0ZSBMQ01EX09VVF9MSU5FX0xFTiBkZWZpbmUuCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgc3RydG91bCB0byB0aGUgQUNfQ0hFQ0tfRlVOQ1MgY2FsbC4KClNhdCBPY3QgMzEgMjE6Mzc6MTcgUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9zZWQuYywgc2VkL3NlZC5oLCBzZWQvZXhlY3V0ZS5jOiBhZGRlZCBuZXcgYGZvcmNlX3VuYnVmZmVyZWQnCglmbGFnLiAgKElkZWEgc3VnZ2VzdGVkIGJ5IEZyYW5rIFN0cmF1c3MgPHN0cmF1c3NAZXNjYXBlLmRlPi4pCgkqIHNlZC9zZWQuYyhtYWluKTogYWRkZWQgLXUvLS11bmJ1ZmZlcmVkIGNvbW1hbmQtbGluZSBvcHRpb25zCgl0byBzZXQgdGhlIG5ldyBgZm9yY2VfdW5idWZmZXJlZCcgZmxhZy4KCSogc2VkL3NlZC5jKHVzYWdlKTogZG9jdW1lbnRlZCBuZXcgLXUvLS11bmJ1ZmZlcmVkIG9wdGlvbnMuCgkqIHNlZC9leGVjdXRlLmM6IGNoYW5nZWQgdGhlIG5hbWUgb2YgdGhlIGBpc190dHknIGZsYWcgaW4gc3RydWN0CglpbnB1dCB0byBhIG1vcmUgZ2VuZXJpYyBgbm9fYnVmZmVyaW5nJzsgYWxzbyByZW1vdmVkIEhBVkVfSVNBVFRZCgljb25kaXRpb25hbCBvbiB0aGlzIG1lbWJlci4KCSogc2VkL2V4ZWN1dGUuYyhzbG93X2dldGxpbmUpOiByZW1vdmVkIEhBVkVfSVNBVFRZIGNvbmRpdG9uYWwKCWNvbXBpbGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCgkqIHNlZC9leGVjdXRlLmMob3V0cHV0X2xpbmUpOiBpZiBmb3JjZV91bmJ1ZmZlcmVkIGlzIHNldCwKCXRoZW4gZm9yY2UgYSBmZmx1c2goKSBldmVuIGlmIHdyaXRpbmcgdG8gc3Rkb3V0LgoJKiBzZWQvZXhlY3V0ZS5jKG9wZW5fbmV4dF9maWxlKTogYWRkZWQgaGFuZGxpbmcgb2YgdGhlCgluZXcgYGZvcmNlX3VuYnVmZmVyZWQnIGZsYWcgc28gdGhhdCBzbG93X2dldGxpbmUoKQoJd2lsbCBhbHdheXMgYmUgdXNlZCBmb3IgaW5wdXQuCgkqIHNlZC9leGVjdXRlLmMocmVhZF9maWxlX2xpbmUpOiBjaGFuZ2VkIHRoZSAoY29uZGl0aW9uYWxseQoJY29tcGlsZWQpIHRlc3Qgb2YgYGlucHV0LT5pc190dHknIHRvICh1bmNvbmRpdGlvbmFsbHkpCgl1c2UgdGhlIG5ldyBzcGVsbGluZyBgaW5wdXQtPm5vX2J1ZmZlcmluZycuCgpUaHUgT2N0IDE1IDEyOjA4OjA5IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IGRlbGV0ZWQgQUNfQVJHX1BST0dSQU0gY2FsbDsgdGhpcyBpcyBhbHJlYWR5Cglkb25lIGZvciB1cyBieSBBTV9JTklUX0FVVE9NQUtFLCBhbmQgd2Ugd2VyZSB3aW5kaW5nIHVwCgl3aXRoIGEgZG91YmxlZC10cmFuc2Zvcm0uCgpTdW4gU2VwIDI3IDAxOjQyOjQyIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb21waWxlLmMoY29tcGlsZV9wcm9ncmFtKTogcmVtb3ZlIHNwZWNpYWwtY2FzZSBjb2RlIGZvciBtYXRjaGluZwoJYWRkcmVzcyByYW5nZSB3aXRoIGEgYDAnIGJlZ2lubmluZy4KCgkqIGNvbXBpbGUuYyhjb21waWxlX2FkZHJlc3MpOiBjaGFuZ2UgZGVmYXVsdCBhZGRyX251bWJlciB0bwoJYmUgYSBwcmFnbWF0aWNhbGx5IGltcG9zc2libGUgY291bnRUIHZhbHVlLCBpbnN0ZWFkIG9mIHplcm8uCgoJKiBleGVjdXRlLmM6IHNwZWxsIG1hY3JvIFJFR05FWEVDKCkgdW5jb25kaXRpb25hbGx5IGluc3RlYWQgb2YKCXBsYXlpbmcgd2l0aCBjb25kaXRpb25hbCBkZWZpbml0aW9uIG9mIHJlZ25leGVjKCkgbWFjcm8uCgoJKiBleGVjdXRlLmMobWF0Y2hfYW5fYWRkcmVzc19wKTogYWRkZWQgdGhpcmQgYXJndW1lbnQgKGFuZCBjaGFuZ2VkCgljYWxsZXJzIGluIG1hdGNoX2FkZHJlc3NfcCkuICBBZGRlZCBzcGVjaWFsIGNvZGUgdG8gaWdub3JlCglub24tbnVtZXJpYyBtYXRjaGVzIHdoZW4gcHJvY2Vzc2luZyAibGluZSB6ZXJvIi4KCgkqIGV4ZWN1dGUuYyhwcm9jZXNzX2ZpbGVzKTogYWRkZWQgYSAibGluZSB6ZXJvIiBwYXNzIHRocm91Z2ggdGhlCgljb21tYW5kcyBzY3JpcHQuCgpTdW4gU2VwIDI3IDAwOjIwOjUzIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb21waWxlLmMoeG9mYSxub3JtYWxpemVfdGV4dCk6IG5ldyBmdW5jdGlvbnMuCgkqIGNvbXBpbGUuYyhjb21waWxlX3JlZ2V4KTogY2FjaGUgbGFzdF9jb21waWxlZF9yZSAod2l0aCBpdHMKCWFzc29jaWF0ZWQgZmxhZ3MpOyBhZGQgUE9TSVhMWV9DT1JSRUNUIGJlaGF2aW9yIGZvciBlbXB0eSBSRS4KCU1ha2UgdXNlIG9mIHRoZSBuZXcgbm9ybWFsaXplX3RleHQoKSBmdW5jdGlvbi4KCSogY29tcGlsZS5jKHNldHVwX3JlcGxhY2VtZW50KTogTWFrZSB1c2Ugb2YgdGhlIG5ldyBub3JtYWxpemVfdGV4dCgpCglmdW5jdGlvbi4KClNhdCBTZXAgMjYgMjI6NTk6MTMgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGxpYi9yZWdleC1nbnUuaDogYWRkZWQgbWlzc2luZyBwcm90b3R5cGUgZm9yIHJlZ25jb21wKCkuCgpNb24gU2VwIDE0IDIwOjQ3OjIzIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvc2VkLmMobWFpbik6IHVzZSBFWElUX1NVQ0NFU1MgaW5zdGVhZCBvZiAwLCBpbiBjYXNlCgl3ZSBhcmUgYnVpbHQgb24gYSBzeXN0ZW0gKHN1Y2ggYXMgVk1TKSB3aGVyZSBFWElUX1NVQ0NFU1MKCWlzIGRpc3RpbmN0IGZyb20gMC4KCldlZCBTZXAgIDkgMjI6MTc6MjggUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9NYWtlZmlsZS5hbTogYWRkZWQgLUkuLi9pbnRsIHRoZSBJTkNMVURFUyBsaW5lOyBpZiB3ZSBhcmUKCWJ1aWxkaW5nIGluIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIHNvdXJjZSB0cmVlIGFuZCB0aGUgc3lzdGVtCgl3ZSBhcmUgYnVpbGRpbmcgb24gZG9lcyBub3QgaGF2ZSBhIDxsaWJpbnRsLmg+IGhlYWRlciwgdGhlbgoJdGhlIGJ1aWxkIHdhcyBmYWlsaW5nLCBiZWNhdXNlIGxpYmludGwuaCBpcyBhIGJ1aWxkLXRpbWUKCWNvbnN0cnVjdGVkIHNvdXJjZSBmaWxlLgoKCSogY29uZmlndXJlLmluOiB0d2Vha2VkIHZlcnNpb24gdG8gYmUgMy4wMmIuCgpXZWQgU2VwICA5IDE5OjI4OjE0IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMmEgcmVsZWFzZWQKCQoJKiBzZWQvY29tcGlsZS5jKG1hcmtfc3Vic3Rfb3B0cyxyZWFkX2xhYmVsLGNvbXBpbGVfcHJvZ3JhbSk6Cgl3aGVyZXZlciB3ZSBhY2NlcHQgYSA7IGFzIGEgY29tbWFuZCB0ZXJtaW5hdG9yLCBhbHNvIGFsbG93IGEgfSBvcgoJYSAjIHRvIGFwcGVhci4gIChUaGlzIGFsbG93cyBmb3IgbGVzcyBjbHV0dGVyZWQtbG9va2luZyBzY3JpcHRzLAoJc3VjaCBhczogc2VkICcvZm9vL3t4O0d9JyAoaW5zdGVhZCBvZjogc2VkICcvZm9vL3t4O0c7fScpLikKCldlZCBTZXAgIDkgMTg6MTc6MDcgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9yZWdleCk6IHVzZSByZWduY29tcCgpIGluc3RlYWQKCW9mIHJlZ2NvbXAoKSwgc28gdGhhdCBhIHNjcmlwdCB3aXRoIE5VTHMgaW4gaXRzIFJFcwoJd2lsbCB3b3JrIGluIHRoZSBleHBlY3RlZCBtYW5uZXIuCgoJKiBzZWQvY29tcGlsZS5jKEFERE5VTCxSRUdOQ09NUCk6IGFkZGVkIHN1cHBvcnQgbWFjcm9zCglmb3IgYWJvdmUuCgoJKiBsaWIvcmVnZXguYyhyZWduY29tcCxyZWdjb21wKTogYWRkZWQgcmVnbmNvbXAoKSBhbmQKCW1hZGUgcmVnY29tcCgpIGEgc2ltcGxlIHdyYXBwZXIgZnVuY3Rpb24uCgpNb24gQXVnIDMxIDIxOjQ4OjMwIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvc2VkLmMoY29tcGlsZV9wcm9ncmFtKTogaWYgdGhlIGZpcnN0IGFkZHJlc3Mgb2YKCWEgcmFuZ2UgaXMgdGhlIG51bWJlciAwIChvciBhIDB+TiBzZXF1ZW5jZSksIHN0YXJ0CglvdXQgaW4gdGhlICJhMV9tYXRjaGVkIiBzdGF0ZS4gIFRoaXMgYWxsb3dzIG9uZQoJdG8gbWF0Y2ggYW4gaW5pdGlhbCBjaHVuayBvZiBhIGZpbGUgd2l0aG91dCB1bmR1ZQoJY29udm9sdXRpb25zIGZvciBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSB0aGUgbWF0Y2gKCWZvciB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSBoYXBwZW5zIHRvIGJlIHRoZSBmaXJzdAoJbGluZS4KClN1biBBdWcgMTYgMDM6MzQ6MjUgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMoc25hcmZfY2hhcl9jbGFzcyxtYXRjaF9zbGFzaCk6IHNpbXBsaWZ5CgloYW5kbGluZyBvZiAicHJlbWF0dXJlIG5ld2xpbmUiIGVycm9yLiBBbHNvLCBnZXQgdGhlCglsaW5lIG51bWJlciByaWdodCBpbiB0aGUgZXJyb3IgbWVzc2FnZSBpZiB3ZSBlbmNvdW50ZXIKCWEgInByZW1hdHVyZSBuZXdsaW5lIiBkdXJpbmcgY2hhci1jbGFzcyBzbmFyZmluZy4KClN1biBBdWcgMTYgMDI6NTk6MjAgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmM6IGFkZGVkIE5fKCkgbWFya2VycyBhbmQgY29ycmVzcG9uZGluZyBnZXR0ZXh0KCkKCShlciwgXygpKSBjYWxscy4KCgkqIE1lcmdlZCBpbiBpMThuIGNvbnRyaWJ1dGlvbiBmcm9tIEVyaWNrIEJyYW5kZXJob3JzdAoJPEVyaWNrLkJyYW5kZXJob3JzdEBhc21sLm5sPi4gIEhpcyBDaGFuZ2VMb2cgZW50cnkKCWZvciB0aGUgY2hhbmdlcyBJJ3ZlIGluY29ycG9yYXRlZCBzbyBmYXI6CgoxOTk4LTA3LTI0ICBFcmljayBCcmFuZGVyaG9yc3QgIDxFcmljay5CcmFuZGVyaG9yc3RAYXNtbC5ubD4KCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUywgQU1fR05VX0dFVFRFWFQpOiBubAoJKiBzZWQve3NlZC5oLHV0aWxzLmN9OiAjaW5jbHVkZSA8bGliaW50bC5oPiAjZGVmaW5lIF8oU3RyaW5nKQoJZ2V0dGV4dCAoU3RyaW5nKQoJKiBzZWQvc2VkLmM6ICNpbmNsdWRlIDxsb2NhbGUuaD4KCSogcG8vUE9URklMRVMuaW46IHNlZC97Y29tcGlsZSxleGVjdXRlLHNlZCx1dGlsc30uYwoJKiBydW4gZ2V0dGV4dGl6ZSAtZgoJKiBhY2NvbmZpZy5oOiAjdW5kZWYgTE9DQUxFRElSIEVOQUJMRV9OTFMgSEFWRV9DQVRHRVRTCglIQVZFX0dFVFRFWFQgSEFWRV9MQ19NRVNTQUdFUyBIQVZFX1NUUENQWQoKRnJpIEF1ZyAxNCAxMzo1Mjo1NyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogTWVyZ2VkIGNvZGUgZnJvbSAzLjAyIHdpdGggYSBicmFuY2hlZCBkZXZlbG9wbWVudAoJdHJlZSBmcm9tIGxhdGUgTWF5OyB0aGUgZm9sbG93aW5nIChvdXQtb2Ytb3JkZXIpCgljaGFuZ2Vsb2cgZW50cnkgaXMgZnJvbSB0aGUgYnJhbmNoZWQgdHJlZS4KClNhdCBNYXkgMzAgMTI6MjM6MTYgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmM6IGFkZGVkIChjb25kaXRpb25hbCBvbiBOT0xFQUtTIG1hY3JvKQoJY29kZSB0byBmcmVlIGFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LgoKCSogc2VkL3NlZC5jLCBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jOiBtdWNoIHNodWZmbGluZwoJb2YgY29kZSAtLS0gb3JkZXJlZCBmdW5jdGlvbnMgc3VjaCB0aGF0IG5vIGZvcndhcmQKCWRlY2xhcmF0aW9ucyBhcmUgbmVjZXNzYXJ5LCBhbmQgcGxhY2VkIGFsbCBzdGF0aWMgcHJvdG90eXBlcwoJaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBhY3R1YWwgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCVRoaXMgYWNjb21wbGlzaGVkIHR3byB0aGluZ3M6IGZpcnN0LCBJIGZpbmQgdGhlIG5ldyBvcmRlcmluZwoJYSBtb3JlIG5hdHVyYWwgd2F5IHRvIHJlYWQgdGhlIGNvZGUgdGhhbiB0aGUgcHJldmlvdXMKCW9yZGVyaW5nLCBhbmQgc2Vjb25kLCB0aGUgbmV3IG9yZGVyaW5nIGdpdmUgdGhlIGNvbXBpbGVyCglhIGJldHRlciBvcHBvcnR1bml0eSB0byBkaXNjb3ZlciBpbmxpbmluZyBwb3NzaWJpbGl0aWVzLgoJKFRoZSBvZGQgInByb3RvdHlwZSBkZWNsYXJhdGlvbitvbGQtc3R5bGUgZGVmaW5pdGlvbiIKCXN0eWxlIGlzIHVzZWQgYmVjYXVzZSBJIGZlZWwgaXQgaXMgdGhlIGxlYXN0IHVnbHkgd2F5CglvZiBzdXBwb3J0aW5nIEsmUjEgQyB3aGlsZSBzdGlsbCBnZXR0aW5nIHRoZSBiZW5lZml0IG9mCglwcm90b3R5cGVzIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlLikKCgkqIHNlZC9iYXNpY2RlZnMuaDogYWRkZWQgTUVNQ1BZKCkgbWFjcm8gdG8gaGlkZSB0aGUgVkNBU1QoKXMKCXRoYXQgb3VnaHQgdG8gYmUgdXNlZCB3aXRoIG1lbWNweSgpLgoKCSogc2VkL2V4ZWN1dGUuYzogQ2hhbmdlIGNhbGxzIHRvIG1lbWNweSgpIHRvIGdvIHRocm91Z2ggdGhlCgluZXcgTUVNQ1BZKCkgbWFjcm8uICBWYXJpb3VzIHByb3RvdHlwZXM6IGVsaWRlIHZhcmlhYmxlIG5hbWUKCWlmIGl0IGRvZXMgbm90IGFkZCBhbnkgaHVtYW4tdXNlZnVsIGRvY3VtZW50YXJ5IGluZm9ybWF0aW9uCgl0byB0aGUgYmFyZSB0eXBlLgoKCSogc2VkL3NlZC5jKG1haW4pOiBVcGRhdGVkIGNhbGxzIHRvIGNvbXBpbGVfc3RyaW5nKCkgdG8gYWRkIHRoaXJkCgkobGVuZ3RoKSBhcmd1bWVudC4gIENoYW5nZWQgY2FsbCB0byBvYnNvbGV0ZSBjbG9zZV9hbGxfZmlsZXMoKQoJdG8gYSBjYWxsIHRvIHRoZSBuZXcgZmluaXNoX3Byb2dyYW0oKS4KCgkqIHNlZC9zZWQuYyhtYXBfZmlsZSk6IEF0dGVtcHQgdG8gY2xlYW4tdXAgaG93ICJzaXplIiBnZXRzCgljYXN0IGFuZCB0ZXN0ZWQ7IHJlbW92ZSBzcHVyaW91cyBTX0lTUkVHIHRlc3QgKGp1c3QgbGV0CgltbWFwKCkgZmFpbCBpZiBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlIHVuZGVybHlpbmcgZmlsZSB0eXBlKS4KCgkqIHNlZC9zZWQuYzogRGVsZXRlZCBvbGQgUlggbGlicmFyeSBzdHViIGRlY2xhcmF0aW9ucy4KCgkqIHNlZC9zZWQuYyhtYXBfZmlsZSx1bm1hcF9maWxlKTogYWRkZWQgVkNBU1QoKXMgdG8gdGhlCgltbWFwKCkvbXVubWFwKCkgY2FsbHMuCgoJKiBzZWQvdXRpbHMuYyhja19mY2xvc2UpOiBhZGRlZCBzdXBwb3J0IGZvciBBTlNJIEMKCWZ1bmN0aW9uYWxpdHkgd2hlcmUgcGFzc2luZyBhIE5VTEwgYXJndW1lbnQgbWVhbnMKCXRvIGZjbG9zZSgpIF9hbGxfIG9wZW4gc3RyZWFtcy4gIChXZWxsLCBhbG1vc3QuCglPbmx5IGNsb3NlcyBzdHJlYW1zIHdoaWNoIHdlcmUgcHJldmlvdXNseSBja19mb3BlbigpZWQsCglhcyBJIGRvbid0IGNhcmUgdG8gZmlndXJlIG91dCBob3cgdG8gYXV0b2NvbmYtZGV0ZWN0Cgl3aGV0aGVyIGZjbG9zZShOVUxMKSBpcyBwcm9wZXJseSBzdXBwb3J0ZWQgb24gYSBnaXZlbgoJcGxhdGZvcm0uKQoKCSogc2VkL3NlZC5oOiBSZW5hbWVkIGBzdHJ1Y3QgdGV4dF9idWYnIG1lbWJlciBgdGV4dF9sZW4nCgl0byBgdGV4dF9sZW5ndGgnLiAgQWJzdHJhY3RlZCBvdXQgYGVudW0gYWRkcl90eXBlcycKCWZyb20gYHN0cnVjdCBhZGRyJzsgYWRkZWQgbmV3IGVudW0gdHlwZXMgbnVtMixzdGVwLHN0ZXBfbW9kOwoJcmVuYW1lZCBtb2QgdG8gbnVtX21vZC4gIERlLXVuaW9uaXplZCB0aGUgcmVnZXgsbnVtYmVyLAoJe21vZHVsby1vZmZzZXQvc3RlcH0gY29tcG9uZW50cyBvZiBgc3RydWN0IGFkZHInLCBpbgoJYW50aWNpcGF0aW9uIG9mIG5ldyBmZWF0dXJlcy4gIENoYW5nZWQgdHlwZSBvZiBgYTInIG1lbWJlcgoJb2YgYHN0cnVjdCBzZWRfY21kJzogbm93IGEgcG9pbnRlciB0byBzYXZlIHNwYWNlLgoJQWJzdHJhY3RlZCBvdXQgYHN0cnVjdCByZXBsYWNlbWVudCcgZnJvbSBgc3RydWN0IHN1YnN0Jy4KCUNsZWFuZWQgdXAgZGVjbGFyYXRpb24gb2YgYHgnIHVuaW9uIG9mIGBzdHJ1Y3QgYWRkcicuCglGaXhlZCBwcm90b3R5cGUgZm9yIGNvbXBpbGVfc3RyaW5nKCkuICBSZXBsYWNlZCBwcm90b3R5cGUKCWZvciBvbGQgY2xvc2VfYWxsX2ZpbGVzKCkgd2l0aCBvbmUgZm9yIG5ldyBmaW5pc2hfcHJvZ3JhbSgpLgoKCSogc2VkL3NlZC5oLCBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jOiBjaGFuZ2VkIHRvCglzaW1wbGlmeSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIGJyYW5jaGVzIGFuZAoJY29tbWFuZCBibG9ja3M6IHNpbXBsaWZpZWQgYHN0cnVjdCB2ZWN0b3InOyBtYWRlCglgc3RydWN0IGxhYmVsJyBsb2NhbCB0byBjb21waWxlLmM7IGBzdHJ1Y3Qgc2VkX2NtZCcKCXdhcyBtb2RpZmllZCB0byBzdXBwb3J0IGEgc2ltcGxlciBkZXNpZ24gZm9yIGJyYW5jaGVzCglhbmQgYmxvY2tzLgoKCSogc2VkL2V4ZWN1dGUuYzogQ29uZGl0aW9uYWxseSBhZGRlZCBBREROVUwoKSBtYWNybyBzbyB0aGF0Cgl0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCBpcyBvbmx5IGluY3VycmVkIGlmIG51bF9hcHBlbmQoKQoJX211c3RfIGJlIGNhbGxlZC4gIE1hZGUgc29tZSBjb21tZW50YXJ5IGVkaXRzLCBpbmNsdWRpbmcKCXR5cG8gZml4ZXMuCgkqIHNlZC9leGVjdXRlLmMocmVzaXplX2xpbmUpOiBjaGFuZ2VkIHNlbWFudGljcyBvZiAibGVuIiBhcmd1bWVudAoJZnJvbSAiYWRkaXRpb25hbCBsZW5ndGgiIHRvICJ0YXJnZXQgbGVuZ3RoIjsgbWFkZQoJSU5JVElBTF9CVUZGRVJfU0laRSBhIG1pbmltdW0gYWxsb2NhdGlvbiBsZW5ndGguCgkqIHNlZC9leGVjdXRlLmMoc3RyX2FwcGVuZCk6IGFkanVzdGVkIHRvIG5ldyByZXNpemVfbGluZSgpCglzZW1hbnRpY3MuCgkqIHNlZC9leGVjdXRlLmMobGluZV9jb3B5KTogdXNlIEZSRUUoKStNQUxMT0MoKSBpbnN0ZWFkIG9mCglSRUFMTE9DKCkgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29weWluZyBvZiBvbGQgdGV4dDsgYWRkIHRoZQoJInRyeSBkb3VibGluZyBmaXJzdCIgYWxsb2NhdGlvbiBoZXVyaXN0aWMgKGp1c3QgbGlrZQoJcmVzaXplX2xpbmUoKSBkb2VzKS4KCSogc2VkL2V4ZWN1dGUuYyhsaW5lX2V4Y2hhbmdlKTogbmV3IGZ1bmN0aW9uLgoJKiBzZWQvZXhlY3V0ZS5jKG51bF9hcHBlbmQpOiBtYWtlIHdob2xlIGZ1bmN0aW9uIChub3QganVzdCBpdHMKCWJvZHkpIGNvbmRpdGlvbmFsIG9uIEhBVkVfUkVHTkVYRUMgbWFjcm87IGFkanVzdCB0byBuZXcKCXJlc2l6ZV9saW5lKCkgc2VtYW50aWNzLgoJKiBzZWQvZXhlY3V0ZS5jKHJlYWRfbWVtX2xpbmUpOiB1c2Ugc3RyX2FwcGVuZCgpIGluc3RlYWQgaWYKCWN1c3RvbSBpbi1saW5lIGNvZGU7IGNvbXBlbnNhdGUgZm9yIG5ldyBkZWZhdWx0IG9mCgkibGluZS5jaG9tcGVkID0gMCIgaW4gcmVhZF9wYXR0ZXJuX3NwYWNlKCkgYnkgc2V0dGluZwoJImxpbmUuY2hvbXBlZCA9IDEiIHdoZXJlIGFwcHJvcHJpYXRlLgoJKiBzZWQvZXhlY3V0ZS5jKHJlYWRfZmlsZV9saW5lKTogdXNlIGRpZmZlcmVudCB0cmlnZ2VyIHRvCglkZXRlcm1pbmUgdGhhdCAiYnVmZmVyIiBpcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gYSBmdWxsCglpbml0aWFsaXphdGlvbiBpZiByZXF1aXJlZDsgdXNlIHN0cl9hcHBlbmQoKSBpbnN0ZWFkIG9mIGN1c3RvbQoJaW4tbGluZSBjb2RlIGluIHR3byBwbGFjZXM7IGNvbXBlbnNhdGUgZm9yIG5ldyBkZWZhdWx0IG9mCgkibGluZS5jaG9tcGVkID0gMCIgaW4gcmVhZF9wYXR0ZXJuX3NwYWNlKCkgYnkgc2V0dGluZwoJImxpbmUuY2hvbXBlZCA9IDEiIHdoZXJlIGFwcHJvcHJpYXRlLgoJKiBzZWQvZXhlY3V0ZS5jKG91dHB1dF9saW5lKTogZG9uJ3QgYm90aGVyIGNhbGxpbmcgY2tfZndyaXRlKCkKCWlmIGxlbmd0aD09MC4KCSogc2VkL2V4ZWN1dGUuYyhyZWxlYXNlX2FwcGVuZF9xdWV1ZSk6IG5ldyBmdW5jdGlvbi4KCSogc2VkL2V4ZWN1dGUuYyhkdW1wX2FwcGVuZF9xdWV1ZSk6IHVzZSByZWxlYXNlX2FwcGVuZF9xdWV1ZSgpCglpbnN0ZWFkIG9mIGluLWxpbmUgZXF1aXZhbGVudC4KCSogc2VkL2V4ZWN1dGUuYyhyZWFkX3BhdHRlcm5fc3BhY2UpOiBjb25kaXRpb25hbGl6ZSBjYWxsIHRvCglkdW1wX2FwcGVuZF9xdWV1ZSgpIGZvciBhbGxlZ2VkIHBlcmZvcm1hbmNlIHJlYXNvbnM7IGNoYW5nZWQKCWRlZmF1bHQgImxpbmUuY2hvbXBlZCIgdmFsdWUgdG8gbW9yZSBjb21tb24gIjEiLCBhbmQgYWRkZWQgYW4KCWFzc2lnbm1lbnQgb2YgIjAiIHdoZXJlIHRoaXMgbWFkZSBhIGRpZmZlcmVuY2UuCgkqIHNlZC9leGVjdXRlLmMobWF0Y2hfYW5fYWRkcmVzc19wKTogZGVsZXRlZCAiaXNfYWRkcjJfcCIKCWFyZ3VtZW50OyByZW9yZGVyIGNhc2VzIHRvIG1hdGNoIG9yZGVyIGluIGVudW0gZGVjbGFyYXRpb247IGFkZAoJY2FzZXMgZm9yIG5ldyAiYWRkcl9pc19udW0yIiwgImFkZHJfaXNfc3RlcCIsIGFuZAoJImFkZHJfaXNfc3RlcF9tb2QiIGFkZHJlc3MgdHlwZXM7IGFsdGVyIG51bF9hcHBlbmQoKSBjYWxsIHRvIGJlCgl0aHJvdWdoIEFERE5VTCgpIG1hY3JvOyBmaXggdG8gbmV3IHN0cnVjdCBtZW1iZXIgYW5kIGVudW0KCXNwZWxsaW5ncyBpbiAoZm9ybWVybHkgYWRkcl9pc19tb2QpOyBhZGRyX2lzX251bV9tb2QgY2FzZS4KCSogc2VkL2V4ZWN1dGUuYyhtYXRjaF9hZGRyZXNzX3ApOiByZW1vdmUgb2Jsc29sZXRlIHRoaXJkIGFyZ3VtZW50Cgl0byBjYWxscyB0byBtYXRjaF9hZGRyZXNzX3AoKTsgYWx0ZXIgcmVmZXJlbmNlcyB0byBzZWRfY21kCgltZW1iZXIgYTIgdG8gcmVmbGVjdCBuZXcgcG9pbnRlciBzdGF0dXM7IGFkZCBuZXcgc3VwcG9ydCBmb3IKCWEyLT5hZGRyX3R5cGUgYWRkcl9pc19zdGVwIGFuZCBhZGRyX2lzX3N0ZXBfbW9kIGNhc2VzLgoJKiBzZWQvZXhlY3V0ZS5jKGRvX3N1YnN0KTogYWRkIE5PTEVBS1Mgc3VwcG9ydCBsb2dpYzsgdXNlCglBREROVUwoKSB3cmFwcGVyIHRvIG51bF9hcHBlbmQoKTsgc2ltcGxpZnkgcmVwbGFjZW1lbnQKCWV4cGFuc2lvbiBieSB1c2luZyB0aGUgbmV3ICJzdHJ1Y3QgcmVwbGFjZW1lbnQiIGRhdGEgc3RydWN0dXJlOwoJdXNlIGxpbmVfZXhjaGFuZ2UoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGN1c3RvbSBpbi1saW5lIGNvZGUuCgkqIHNlZC9leGVjdXRlLmMocHJvY2Vzc19maWxlcyk6IGFkZGVkIE5PTEVBS1MgY29kZS4KCSogc2VkL2V4ZWN1dGUuYyhleGVjdXRlX3Byb2dyYW0pOiB1cGRhdGVkIGltcGxlbWVudGF0aW9ucwoJb2YgdGhlIGB7JywgYH0nLCBgOicsIGBiJywgYW5kIGB0JyBjb21tYW5kczsgbW9kaWZpZWQKCWBjJyBjb21tYW5kIGdyYXR1aXR1b3NseTsgZml4ZWQgcG90ZW50aWFsIG1lbW9yeQoJb3ZlcnJ1biBpbiBgRCcgY29tbWFuZC4gIFNpbXBsaWZpZWQgaG93IG5vbnN0YW5kYXJkCglgbG9vcCBpbmNyZW1lbnRzJyB3b3JrLiAgVXNlIGxpbmVfZXhjaGFuZ2UoKSBpbnN0ZWFkIG9mCgljdXN0b20gaW4tbGluZSBjb2RlIGluICd4JyBjYXNlLgoJKiBzZWQvZXhlY3V0ZS5jW0VYUEVSSU1FTlRBTF9EQVNIX05fT1BUSU1JWkFUSU9OIGNvbmRpdGlvbmFsCgljb2RlXTogdmFyaW91cyBtb2RpZmljYXRpb25zIGludGVuZGVkIHRvIGtlZXAgdGhpcwoJY29kZSBpbiBzeW5jIHdpdGggdGhlIG5ldyBjaGFuZ2VzLCBidXQgdGhlIGNvZGUgc3RpbGwKCXJldGFpbnMgaXRzIHByZXZpb3VzIGJ1Z3MuCgoJKiBzZWQvY29tcGlsZS5jOiB1c2UgImV4aXQoRVhJVF9GQUlMVVJFKSBpbnN0ZWFkIG9mICJleGl0KDEpIiwKCWp1c3QgaW4gY2FzZSB3ZSBnZXQgY29tcGlsZWQgdW5kZXIgVk1TLgoJKiBzZWQvY29tcGlsZS5jOiBDaGFuZ2UgdHlwZSBvZiBwcm9nX2luZm8uYmFzZSB0byBkZWNyZWFzZSBuZWVkcwoJZm9yIGNhc3Rpbmc7IHRoZW4gZWxpbWlhdGVkIHRoZSBjYXN0cyBpbiBxdWVzdGlvbiA7LSkuCgkqIHNlZC9jb21waWxlLmM6IEFkZGVkIHN0cnVjdCBzZWRfbGFiZWwgKG1vdmVkIGZyb20gc2VkLmgsIHRoZW4KCW1vZGlmaWVkKS4KCSogc2VkL2NvbXBpbGUuYzogUmVtb3ZlZCAicmVhZGl0X3AiIGZsYWcgZnJvbSBzdHJ1Y3QgZnBfbGlzdC4KCSogc2VkL2NvbXBpbGUuYzogQWRkZWQgbW9kdWxlLWdsb2JhbCAiYmxvY2tzIiB2YXJpYWJsZS4KCSogc2VkL2NvbXBpbGUuYzogRXh0cmFjdGVkIG1vcmUgZXJyb3ItbWVzc2FnZSBjb25zdGFudCBzdHJpbmdzCgl0byBuYW1lZCB2YXJpYWJsZXMuCgkqIHNlZC9jb21waWxlLmMoY2hlY2tfZmluYWxfcHJvZ3JhbSk6IHVwZGF0ZWQgdG8KCXJlZmxlY3QgbmV3IGRhdGEgc3RydWN0dXJlcyBhbmQgdXNlIG5ldyBmdWNudGlvbnMuCglBZGRlZCBjYWxsIHRvIGNvbXBpbGVfcmVnZXgoKSB0byByZWxlYXNlIHVubmVlZGVkCgltZW1vcnkuCgkqIHNlZC9jb21waWxlLmM6IGRlbGV0ZWQgb2Jzb2xldGUgbmV3X3ZlY3RvcigpIGZ1bmN0aW9uOwoJYWJzdHJhY3RlZCBuZXcgcmVhZF9sYWJlbCgpIGZ1bmN0aW9uOyBhYnN0cmFjdGVkIG5ldwoJcmVsZWFzZV9sYWJlbCgpIGZ1bmN0aW9uOyBhZGRlZCBuZXcgYGJsb2NrcycgbW9kdWxlLXN0YXRpYwoJdmFyaWFibGUuCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9wcm9ncmFtKTogdXBkYXRlZCBpbXBsZW1lbnRhdGlvbnMKCW9mIHRoZSBgeycsIGB9JywgYDonLCBgYicsIGFuZCBgdCcgY29tbWFuZHM7IG1vZGlmaWVkCglpbml0aWFsaXphdGlvbiBmcm9tIE5VTEwgdmVjdG9yLgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcmVnZXgpOiBhZGRlZCBtZWNoYW5pc20gdG8KCXJlbGVhc2UgbWVtb3J5IGNvbnN1bWVkIGJ5IHRoZSBjYWNoZWQgYGxhc3QnIFJFLgoJKiBzZWQvY29tcGlsZS5jKHNldHVwX2p1bXAsc2V0dXBfbGFiZWwpOiB1cGRhdGVkCgluYW1lIChmcm9tIHNldHVwX2p1bXAgdG8gc2V0dXBfbGFiZWwpIGFuZCBwcm90b3R5cGU7CgljaGFuZ2VkIGJvZHkgdG8gcmVmbGVjdCBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLgoJKiBzZWQvY29tcGlsZS5jOiBBZGQgT1BFTl9CUkFDRSBhbmQgQ0xPU0VfQlJBQ0UgbWFjcm9zIGZvciBiZXR0ZXIKCSJ2aSIgZWRpdGluZyBiZWhhdmlvci4KCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX2ZpbGVuYW1lLHJlYWRfZmlsZW5hbWUsZ2V0X3dyaXRlZmlsZSk6CglSZXBsYWNlZCBmdW5jdGlvbiBjb21waWxlX2ZpbGVuYW1lKCkgd2l0aCBtb3JlIG9ydGhvZ29uYWwgZnVuY3Rpb25zCglyZWFkX2ZpbGVuYW1lKCksIGdldF93cml0ZWZpbGUoKS4KCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3JlZ2V4KTogQWRkZWQgYWJpbGl0eSB0byBmcmVlIHRoZSByZW1lbWJlcmVkCgkibGFzdCBSRSIgaW4gY29tcGlsZV9yZWdleCAoZm9yIGJlbmlmaXQgb2YgIk5PTEVBS1MiIGNvZGUpLgoJKiBNYWRlIGFkanVzdG1lbnRzIGRpY3RhdGVkIGJ5IHRoZSBjaGFuZ2UgdG8gc3RydWN0IHNlZF9jbWQgd2hpY2ggbWFkZQoJdGhlIGEyIG1lbWJlciBhIHBvaW50ZXItdG8tYWRkciBpbnN0ZWFkIG9mIGFuIGFkZHIuCgkqIHNlZC9jb21waWxlLmMoc2V0dXBfanVtcCxyZWFkX2xhYmVsLHNldHVwX2xhYmVsLHJlbGVhc2VfbGFiZWwpOgoJQWRkZWQgZnVuY3Rpb25zIHJlYWRfbGFiZWwoKSwgc2V0dXBfbGFiZWwoKSwgcmVsZWFzZV9sYWJlbCgpOyBkZWxldGVkCglmdW5jdGlvbiBzZXR1cF9qdW1wKCkuCgkqIHNlZC9jb21waWxlLmMobmV3X3JlcGxhY2VtZW50LHNldHVwX3JlcGxhY2VtZW50LHJlbGVhc2VfcmVwbGFjZW1lbnQpOgoJbmV3IGZ1bmN0aW9ucy4KCSogc2VkL2NvbXBpbGUuYzogQWRqdXN0ZWQgdG8gbmV3IHNwZWxsaW5nIG9mIHRleHRfYnVmIG1lbWJlcgoJKCJ0ZXh0X2xlbmd0aCIgaW5zdGVhZCBvZiAidGV4dF9sZW4iKS4KCSogc2VkL2NvbXBpbGUuYyhuZXdfdmVjdG9yKTogZGVsZXRlZCBmdW5jdGlvbi4gIChEdWUgdG8gbmV3IGhhbmRsaW5nCglvZiBibG9ja3MsIG9ubHkgb25lIGluc3RhbmNlIHJlbWFpbmVkLCBhbmQgdGhhdCBvbmUgd2FzIGp1c3QgYXMKCWNsZWFyIGluLWxpbmVkLikKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3N0cmluZyk6IEFkZGVkIHRoaXJkIGFyZ3VtZW50OyBpdCBub3cKCXRha2VzIGEgY291bnRlZCBzdHJpbmcgaW5zdGVhZCBvZiBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX2ZpbGUpOiBhZGRlZCB2YXJpYWJsZSAibWFwX2Jhc2UiIHRvCgljb21wZW5zYXRlIGZvciBuZXcgdHlwZSBvZiBwcm9nX2luZm8uYmFzZS4KCSogc2VkL2NvbXBpbGUuYyhjaGVja19maW5hbF9wcm9ncmFtKTogcmVmbGVjdCBuZXcgc3R5bGUgb2YKCWhhbmRsaW5nIGJsb2NrcyBhbmQgc3RydWN0IHNlZF9sYWJlbC4KCSogc2VkL2NvbXBpbGUuYyhjbG9zZV9hbGxfZmlsZXMsZmluaXNoX3Byb2dyYW0pOiByZXBsYWNlZCBmdW5jdGlvbgoJY2xvc2VfYWxsX2ZpbGVzKCkgd2l0aCBtb3JlIGdlbmVyaWMgZmluaXNoX3Byb2dyYW0oKS4KCSogc2VkL2NvbXBpbGUuYyhyZWFkX3RleHQpOiBhZGRlZCBuZXcgZmVhdHVyZTogaWYgZmlyc3Qgbm9uLWJsYW5rCgljaGFyYWN0ZXIgYWZ0ZXIgdGhlIHthLGksY30gY29tbWFuZCBjaGFyYWN0ZXIgaXMgbm90ICJcIiwgdGhlbgoJdXNlIHRoZSB0cmFpbGluZyB0ZXh0IG9uIHRoYXQgbGluZSBhcyB0aGUgKGZpcnN0KSBsaW5lIG9mIHRleHQuCglBbHNvIGFkZGVkIGNvZGUgY29uZGl0aW9uYWwgb24gTk9fSU5QVVRfSU5ERU5UIHRvIHN1cHBvcnQgdGhlCgkiZmVhdHVyZSIgb2Ygc3RyaXBwaW5nIGxlYWRpbmcgYmxhbmtzIGZyb20gZWFjaCBpbnB1dCBsaW5lOyBJCglkbyBub3QgcmVhZCBQT1NJWCBhcyBwZXJtaXR0aW5nIHRoaXMgYmVoYXZpb3IsIG5vciBkbyBJIHRoaW5rCglpdCBpcyBhIGdvb2QgaWRlYSwgc28gaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IHNvbWUgaGF2ZQoJYXJndWVkIHRoYXQgdGhpcyBibGFuay1zdHJpcHBpbmcgaXMgdGhlICJjb3JyZWN0IiBiZWhhdmlvciwgc28KCUkgb2ZmZXIgdGhlbSB0aGUgb3B0aW9uIG9mIGJ1aWxkaW5nIHRoZWlyIHNlZCB0aGF0IHdheS4KCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX2FkZHJlc3MpOiBhZGRlZCB4eHgsK24gYW5kIHh4eCx+biBhZGRyZXNzaW5nOwoJc2ltcGxpZmllZCBjb2RlLgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcHJvZ3JhbSk6IGFkZGVkIEJBRF9QTFVTIGVycm9yIGRldGVjdGlvbjsKCWFkanVzdGVkIHRvIG5ldyBjdXJfY21kLT5hMiBwb2ludGVyIHN0YXR1czsgYWRkZWQgYWRkcl9pc19udW0yCglkZXRlY3Rpb247IGRlbGV0ZWQgcG9pbnRsZXNzICJhMi0+YWRkcl9udW1iZXIgPCBhMS5hZGRyX251bWJlciIKCWNoZWNrIChhZGRyX2lzX251bTIgc2VtYW50aWNzIGhhbmRsZSB0aGlzIGp1c3QgZmluZSk7IHVwZGF0ZWQKCWNvZGUgZm9yICd7JywgJ30nLCAnOicsICdiJywgYW5kICd0JyB0byByZWZsZWN0IG5ldyBkZXNpZ24KCW9mIGJyYW5jaCBoYW5kbGluZywgaW5jbHVkaW5nIG1ha2luZyB1c2Ugb2YgbmV3IGZ1bmN0aW9ucwoJcmVsYXRlZCB0byB0aGUgbmV3IGRlc2lnbik7IGFkZGVkIHN1cHBvcnQgZm9yIGZlYXR1cmUgYWxyZWFkeQoJbWVudGlvbmVkIGluIHJlYWRfdGV4dCgpIHdoZXJlIHthLGksY30gY29tbWFuZHMgYXJlIGFibGUgdG8gaGF2ZQoJdGhlaXIgdGV4dCBzdGFydCBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBjb21tYW5kOyBjaGFuZ2VkIHNvbWUKCWVycm9yIG1lc3NhZ2VzIChob3BlZnVsbHkgZm9yIHRoZSBiZXR0ZXIpOyBsb2NhbGl6ZWQgdmFyaWFibGVzCglzcGVjaWZpYyB0byBpbmRpdmlkdWFsIGNvbW1hbmRzIChwYXJ0aWN1bGFybHkgJ3MnIGFuZCAneScpOwoJbWFkZSB1c2Ugb2YgbmV3IHNldHVwX3JlcGxhY2VtZW50KCkgZnVuY3Rpb24gaW4gJ3MnIGNvbW1hbmQuCgpNb24gQXVnIDEwIDE5OjU4OjQ5IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBkb2Mvc2VkLnRleGksIGRvYy9zZWQuMTogc2VkdHV0MTAudHh0IGlzIGFwcGFyZW50bHkgZGVhZC4KCURlbGV0ZWQgcmVmZXJlbmNlcyB0byBpdCBhbmQgYWRkZWQgYSBwb2ludGVyIHRvCglodHRwOi8vc2VkZXJzLmljaGVtZS5vcmcvdHV0b3JpYWxzLy4gIChQb2ludGVkIG91dCBieQoJSm9lcmcgSGVpdGtvZXR0ZXIgPGpvZXJnQGRlLnV1Lm5ldD4uKQoKU2F0IEF1ZyAgOCAxODoxMTo1NyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZGpncHAvY29uZmlnLmJ0bTogcGVyIHJlcXVlc3QgYnkgTWljaGVsIGRlIFJ1aXRlcgoJIDxtZHJ1aXRlckBjcy52dS5ubD4sIGFkZGVkICIlMSIgdG8gIiU5IiBwYXJhbWV0ZXJzLgoKTW9uIEF1ZyAgMyAxMTo0NDo1NSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZG9jL3NlZC50ZXhpOiBmaXggYSBjb3VwbGUgb2YgdHlwb3MuICAoU3VibWl0dGVkIGJ5CglBbGFuIE1vZHJhIDxhbGFuQHNwcmkubGV2ZWxzLnVuaXNhLmVkdS5hdT4uKQoKU2F0IEF1ZyAwMSAxNzo0OTowNiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDIgcmVsZWFzZWQKCQoJKiBjb25maWd1cmUuaW46IEJlY2F1c2Ugb2YgY29kZSBjaGFuZ2UgaW4gMy4wMWEsIGJ1bXAgdGhlCgltaW5vciByZXZpc2lvbiBudW1iZXIgZm9yIHRoZSByZWxlYXNlIChub3cgMy4wMikuCgpTdW4gSnVsIDI2IDE2OjA3OjU1IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMWEgcmVsZWFzZWQKCQoJKiBzZWQvY29tcGlsZS5jKHNuYXJmX2NoYXJfY2xhc3MpOiAgdGhlIFBPU0lYIGNoYXItY2xhc3MKCXJlY29nbml0aW9uIGxvb3AgZm9yZ290IHRvIHVwZGF0ZSBpdHMgY29uY2VwdCBvZiAicHJldiIKCWFzIHRoZSBsb29wIHByb2dyZXNzZWQuCgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IFRoZSBkZXBlbmRlbmN5IG9mIHZlcnNpb24uZ29vZAoJb24gW3Rlc3RzdWl0ZS9dTWFrZWZpbGUgaW50cm9kdWNlZCBpbiB0aGUgcHJldmlvdXMKCXJlbGVhc2Ugd2FzIGJvdGNoZWQgLS0gaXQgcmVmZXJyZWQgdG8gIk1ha2VmaWxlIgoJYXMgIiQoc3JjZGlyKS9NYWtlZmlsZSwgd2hpY2ggb2YgY291cnNlIGRvZXNuJ3Qgd29yawoJaWYgeW91IGFyZW4ndCBidWlsZGluZyBpbiB0aGUgc291cmNlIHRyZWUuCgoJKiBkamdwcC9NYWtlZmlsZS5hbTogYWRkIGZvcmdvdHRlbiAiY29uZmlnLmJ0bSIgRVhUUkFfRElTVAoJbWVtYmVyLgoKCSogY29uZmlndXJlLmluOiB1cGRhdGUgdmVyc2lvbi4KClR1ZSBKdWwgMjEgMDY6MDQ6NDIgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxIHJlbGVhc2VkCgkKCSogY29uZmlndXJlLmluOiBtYXJrIGFzIHJlbGVhc2UgdmVyc2lvbiEKCgkqIE1ha2VmaWxlLmFtOiBhZGQgQlVHUyBhbmQgVEhBTktTIHRvIHRoZSBFWFRSQV9ESVNUIHRhcmdldC4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogYWRkIGRlcGVuZGVuY3kgb2YgdmVyc2lvbi5nb29kCglvbiBbdGVzdHN1aXRlL11NYWtlZmlsZS4KCk1vbiBKdWwgMjAgMTI6Mzg6MTAgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGRqZ3BwL2NvbmZpZy5idG06IE5ldyBmaWxlIHRvIHN1cHBvcnQgdGhlIDRET1MgYWx0ZXJuYXRpdmUKCXRvIGNvbW1hbmQuY29tLiAgKFN1bWl0dGVkIGJ5IEVsaSBaYXJldHNraWkgb24gYmVoYWxmIG9mCglhbiBhbm9ueW1vdXMgNERPUyB1c2VyLikKCkZyaSBKdWwgMTcgMDA6MzY6MzQgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGExOCByZWxlYXNlZAoJCgkqIGRqZ3BwL2NvbmZpZy5zZWQ6IG15ICJ0d2VhayIgaW4gYmV0YTE3IHdhcyB0b28KCWhhc3RpbHkgY29uc2lkZXJlZC4gIEJhY2sgaXQgb3V0LgoKCSogY29uZmlndXJlLmluOiB1cGRhdGUgdG8gYmV0YTE4LgoKV2VkIEp1bCAxNSAwMTowMjoxNSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTE3IHJlbGVhc2VkCgkKICAgICAgICAqIGRqZ3BwL2NvbmZpZy5zZWQ6IHR3ZWFrL3NpbXBsaWZ5IHMsLCwgY29tbWFuZHMgYXQgZW5kLgoKCSogY29uZmlndXJlLmluOiB1cGRhdGUgdG8gYmV0YTE3LgoKMTk5OC0wNy0xNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGRqZ3BwL2NvbmZpZy5zZWQ6IEVkaXQgYWxsIHRoZSBvY2N1cmVuY2VzIG9mID0gaW4gdGhlIGNvbnRleHQgb2YKCS0tb3B0aW9uPXZhbHVlLCBpbmNsdWRpbmcgaW4gdGhlIGhlbHAgbWVzc2FnZXMsIGludG8KCS0tb3B0aW9uOnZhbHVlLCBidXQgbGVhdmUgRE9TLXN0eWxlIGQ6L2Zvby9iYXIgZmlsZSBuYW1lcyBpbnRhY3QuCgoJKiBkamdwcC9jb25maWcuYmF0OiBVc2UgLS1zcmNkaXI6Zm9vIGluc3RlYWQgb2YgLS1zcmNkaXI9Zm9vLgoKCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChoZWxwLCB2ZXJzaW9uKTogUmVtb3ZlIHRlbXBvcmFyeSBmaWxlcwoJZXhwbGljaXRseSwgZG9uJ3QgdXNlIHNoZWxsIHdpbGRjYXJkcywgc28gaXQgd29ya3MgdW5kZXIgRE9TIDgrMwoJbGltaXRzLgoKVGh1IEp1bCAgOSAxMzowNjowMCBQRFQgMTk5OCAxNjo1MTo0MyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTE2IHJlbGVhc2VkCgkKCSogZGpncHAvY29uZmlnLnNlZDogdHdlYWsgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gdXNlIDoKCWluc3RlYWQgb2YgPSBmb3IgLS13aXRoLWZvbz1iYXIgb3B0aW9uIHBhcnNpbmcsIHRvCgl3b3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIGhvdyBjb21tYW5kLmNvbSBoYW5kbGVzID1zLgoKV2VkIEp1bCAgOCAxNjo1MTo0MyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZGpncHAvY29uZmlnLmJhdDogY29ycmVjdCBpbmFwcHJvcHJpYXRlIGJlaGF2aW9yIHRoYXQgSQoJaW50cm9kdWNlZCBpbiB0aGUgYmV0YTEzIGNoYW5nZXMgKGlmIGZpcnN0IGFyZ3VtZW50IGlzCglhIGRpcmVjdG9yeSwgaXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBhcyB0aGUgLS1zcmNkaXIpLgoKCSogdGVzdHN1aXRlL3ZlcnNpb24uZ2luLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kLCB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06CglBZGQgdGFyZ2V0IHRvIGF1dG9tYWtlIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHZlcnNpb24uZ29vZAoJZnJvbSAobmV3IGZpbGUpIHZlcnNpb24uZ2luLCBpbnN0ZWFkIG9mIGhhbmQtZWRpdGluZyB0aGUgdmVyc2lvbgoJbnVtYmVyIGVhY2ggcmVsZWFzZS4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogbWlzY2VsbGFuZW91cyBncmF0dWl0aW91cyB0d2Vha2FnZSAtLQoJbWFpbmx5IGFkZGluZyAkKFJNKSBjb21tYW5kcyBqdXN0IGJlY2F1c2UgSSBkaWRuJ3QgbGlrZQoJbGVhdmluZyB0aGUgdG1wKiBmaWxlcyBmcm9tIHN1Y2Nlc3NmdWwgcnVucyBsYXlpbmcgYWJvdXQuCglBbHNvIHNvbWUgZWRpdG9yaWFsIGNvbW1lbnRzLgoKCSogY29uZmlndXJlLmluOiB1cGRhdGUgdG8gYmV0YTE2LiAgQWRkZWQgYW5kIGNvbW1lbnRlZCBvdXQKCWV4cGVyaW1lbnQgd2l0aCBBQ19PVVRQVVQoKSBmb3IgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZC4KCUFkZGVkIGNvZGUgdG8gcHJvcGVybHkgaGFuZGxlIGJhcmUgKHdpdGhvdXQgPXh4eCkKCSItLXdpdGgtcmVnZXgiIG9wdGlvbi4KClN1biBKdWwgIDUgMjE6MDI6MTYgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGExNSByZWxlYXNlZAoJCgkqIHNlZC91dGlscy5jKGNrX2ZmbHVzaCksIHNlZC91dGlscy5oLCBzZWQvZXhlY3V0ZS5jKG91dHB1dF9saW5lKToKCWFkZCBhbmQgdXNlIG5ldyBja19mZmx1c2goKSBmdW5jdGlvbi4KClN1biBKdWwgIDUgMTU6MjM6NDcgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMoYmFkX3Byb2cpOiBhZGQgbW9yZSBkZXRhaWwgdG8gZXJyb3IKCW1lc3NhZ2VzIGFib3V0IC1lIHN0cmluZ3MuCgpTdW4gSnVsICA1IDE0OjI5OjQ1IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jKG1hcmtfc3Vic3Rfb3B0cyksIHNlZC9leGVjdXRlLmMoZG9fc3Vic3QpOgoJRGVmaW5lIGJldHRlciBzZW1hbnRpY3MgZm9yIGludGVyYWN0aW9uIG9mIHRoZSBgZycgZmxhZwoJd2l0aCBhIG51bWVyaWMgZmxhZyB0byB0aGUgcy8vLyBjb21tYW5kLiAgSXQgdXNlZCB0bwoJYmUgdGhhdCB0aGUgYGcnIGNvbW1hbmQgc2llemVkIGNvbnRyb2w7IG5vdyB0aGUgZmlyc3QKCShudW1iZXItMSkgbWF0Y2hlcyBhcmUgc2tpcHBlZCBhbmQgdGhlbiBgZycgZ2V0cyBjb250cm9sCglhZnRlciB0aGF0LiAgKEl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIHRoaXMgaXMgYSBmZWF0dXJlCglzbmVha2luZyBpbiBkdXJpbmcgbGF0ZSBiZXRhLCBvciBhIGJ1ZyBmaXg7IHRoZSBjaGFuZ2VzCglpbnZvbHZlZCB3ZXJlIHRyaXZpYWwsIHNvIEkgZGVjaWRlZCB0byB0cmVhdCBpdCBhcyBhIGJ1ZwoJZml4LikKCgkqIGNvbmZpZ3VyZS5pbiwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvIGJldGExNS4KClNhdCBKdWwgIDQgMDk6NTQ6NDUgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGExNCByZWxlYXNlZAoJCgkqIHNlZC9iYXNpY2RlZnMuaCwgc2VkL2NvbXBpbGUuYywgc2VkL2V4ZWN1dGUuYzoKCXBlciByZXBvcnQgYnkgIkthdmVoIFIuIEdoYXppIiA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4sCgljb3BpZWQgdGhlIElTWFhYIG1hY3JvcyBmcm9tIGxpYi9yZWdleC5jIHNvIHRoYXQKCXNpbGx5IG1hY2hpbmVzIHdoaWNoIHJlcXVpcmUgaXNhc2NpaSgpIHRvIGJlIHRydWUKCWJlZm9yZSB0aGUgb3RoZXIgaXNYWFgoKSBtYWNyb3MgYXJlIHZhbGlkIHdpbGwKCXN0aWxsIHdvcmsuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhMTQuCgpUaHUgSnVsICAyIDIzOjQ2OjEzIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhMTMgcmVsZWFzZWQKCQoJKiBjb25maWd1cmUuaW4sIGFjY29uZmlnLmg6IHNldCBVU0VfUkVHRVhfR05VX0ggc3ltYm9sIGlmIHdlCglhcmUgZ29pbmcgdG8gYmUgdXNpbmcgbGliL3JlZ2V4LmMuCgoJKiBsaWIvTWFrZWZpbGUuYW0sIGxpYi9yZWdleC5oLCBsaWIvcmVnZXgtZ251LmgsIGxpYi9yZWdleC5jOgoJcmVuYW1lIGxpYi9yZWdleC5oIHRvIGxpYi9yZWdleC1nbnUuaCwgc28gdGhhdCB0aG9zZSB3aG8KCWNob29zZSB0byB1c2UgYSBkaWZmZXJlbnQgcmVnZXggaW1wbGVtZW50YXRpb24gd2lsbCBub3QKCXBpY2stdXAgbGliL3JlZ2V4Lmggd2hlbiBkb2luZyAiI2luY2x1ZGUgPHJlZ2V4Lmg+Ii4KCgkqIHNlZC9yZWdleC1zZWQuaCwgc2VkL01ha2VmaWxlLmFtLCBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jLAoJc2VkL3NlZC5jOiBjcmVhdGUgc2VkL3JlZ2V4LXNlZC5oIHdoaWNoIGFjdHMgYXMgYSBzd2l0Y2gKCXRvIGNob29zZSBlaXRoZXIgbGliL3JlZ2V4Lmggb3IgdGhlIHVzZXItc3VwcGxpZWQgPHJlZ2V4Lmg+LAoJZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBwYXNzZWQgdG8gY29uZmlndXJlJ3MgLS13aXRoLXJlZ2V4PQoJb3B0aW9uLgoKVGh1IEp1bCAgMiAxNzoyMjozMSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBpZiBhbiBhbHRlcm5hdGl2ZSAtLXdpdGgtcmVnZXg9IGlzIGdpdmVuLAoJZG8gYW4gQUNfQ0hFQ0tfRlVOQ1MocmVnbmV4ZWMgcmVnZXhlYykgdG8gZW5zdXJlIHRoYXQKCWF0IGxlYXN0IG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgYXZhaWxhYmxlLiAgQWxzbywKCXBhcmFsbGVsIGNoYW5nZXMgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCgoJKiBzZWQvZXhlY3V0ZS5jLCBhY2NvbmZpZy5oOiByZXRpcmUgdXNlIG9mIHRoZSBXSVRIX1JFR05FWEVDCgl0ZXN0IG1hY3JvIGluIGZhdm9yIG9mIEhBVkVfUkVHTkVYRUMgdGVzdCBtYWNybyBjcmVhdGVkCglieSBhYm92ZSBjaGFuZ2UuCgoJKiBkamdwcC9jb25maWcuYmF0OiBQbGF5IGdhbWVzIHRvIGhhbmRsZSAiaW5zdGFsbC1zaCIsCglET1MgZmlsZW5hbWUgcmVzdHJpY3Rpb25zLCBHTlUgbWFrZWZpbGUgZGVmYXVsdCBydWxlcywKCWFuZCBnZXR0aW5nIGEgY29ycmVjdCBydW4gb2YgImNvbmZpZ3VyZSIgKGNvbnRyaWJ1dGVkCglieSBFbGkgWmFyZXRza2lpIDxlbGl6QGlzLmVsdGEuY28uaWw+KS4KCgkqIGRqZ3BwL01ha2VmaWxlLmFtLCB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwKCU1ha2VmaWxlLmFtLCBjb25maWd1cmUuaW46IFZhcmlvdXMgYXV0b21ha2UgdGFyZ2V0cwoJKHN1Y2ggYXMgZGlzdGNoZWNrKSBmYWlsZWQgd2l0aCBvbGQgY29uZmlndXJhdGlvbi4KCVRoZSBzaW1wbGVzdCBzb2x1dGlvbiB3YXMgdG8ganVzdCBhZGQgdGhlc2UgLmFtCglmaWxlcy4gIChUaGUgdGVzdHN1aXRlL01ha2VmaWxlLmluIHdhcyBqdXN0IHJlbmFtZWQgdG8KCXRlc3RzdWl0ZS9NYWtlZmlsZS5hbSwgdGhlbiB2YXJpb3VzIHJlZHVuZGFudCBkZWZpbmVzIGFuZAoJdGFyZ2V0cyB3ZXJlIGRlbGV0ZWQuKSAgKFJlcG9ydGVkIGJ5IEVyaWNrIEJyYW5kZXJob3JzdAoJPEVyaWNrLkJyYW5kZXJob3JzdEBhc21sLm5sPi4pCgoJKiB0ZXN0c3VpdGUvZGMuZ29vZCwgdGVzdHN1aXRlL2RjLmlucDogcGVyIHN1Z2dlc3Rpb24gZnJvbQoJR3JlZyBVYmJlbiA8Z3N1QHJvbXVsdXMubmNzYy5taWw+LCB1c2UgYmFzZSAxNiBvdXRwdXQgdG8KCWV4ZXJjaXNlIGV2ZW4gbW9yZSBvZiB0aGUgZGMuc2VkIHNjcmlwdC4KCgkqIGNvbmZpZ3VyZS5pbiwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvIGJldGExMy4KClN1biBKdW4gMjggMTY6MjE6MDIgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGExMiByZWxlYXNlZAoJCgkqIGRvYy9zZWQudGV4aTogQXZvaWQgbWl4aW5nIEBjb2RlIGFuZCBAc2FtcCBtYXJrdXBzIHRvZ2V0aGVyOgoJdGhleSBsb29rIHVnbHkgaW4gSW5mby4gIFVzZSBAdXJsIGFuZCBAZW1haWwgaW5zdGVhZCBvZiBAZXhhbXBsZS4KCUFkZCBpbmRleGVzLiAgKEJhc2lzIG9mIGNoYW5nZXMgY29udHJpYnV0ZWQgYnkgRWxpIFphcmV0c2tpaS4pCgoJKiBkamdwcC8qLCBNYWtlZmlsZS5hbTogYWRkIHN1cHBvcnQgZm9yIHRoZSBESkdQUCBjb21waWxlciwKCWNvbnRyaWJ1dGVkIGJ5IEVsaSBaYXJldHNraWkgPGVsaXpAaXMuZWx0YS5jby5pbD4uCgoJKiBkYy5zZWQsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL2RjLmlucCwgdGVzdHN1aXRlL2RjLmdvb2Q6CglhZGRlZCB0aGlzIHJlbWFya2FibGUgc2NyaXB0LCB3cml0dGVuIGFuZCBjb250cmlidXRlZAoJYnkgR3JlZyBVYmJlbiA8Z3N1QHJvbXVsdXMubmNzYy5taWw+LCBib3RoIGFzIGEgd29yayBvZgoJYXJ0IGZvciBnZW5lcmFsIGFkbWlyYXRpb24sIGFuZCBhbHNvIGZvciB1c2UgaW4gcmVncmVzc2lvbgoJdGVzdGluZy4KCgkqIGNvbmZpZ3VyZS5pbiwgbGliL01ha2VmaWxlLmFtOiBhZGQgLS13aXRoLXJlZ2V4PXJlZ2V4bGliCglvcHRpb24sIHdoaWNoIG92ZXJyaWRlcyB0aGUgdXNlIG9mIGxpYi9yZWdleC5jLgoKCSogY29uZmlndXJlLmluLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiB1cGRhdGUgdG8gYmV0YTEyLgoKRnJpIEp1biAxMiAxNjo0MTo0OCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTExIHJlbGVhc2VkCgkKCSogc2VkL2NvbXBpbGUuYzogYWRkIG1vZHVsZS1zdGF0aWMgdmFyaWFibGVzIGZpcnN0X3NjcmlwdAoJKGZvciAjbiBjaGFuZ2UgYmVsb3cpIGFuZCBwZW5kaW5nX3RleHQgKGZvciBhL2MvaSBjaGFuZ2UKCWJlbG93KS4KCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9maWxlKSwgc2VkL2NvbXBpbGUuYyhjb21waWxlX3Byb2dyYW0pOgoJSW5zdGVhZCBvZiBoYXZpbmcgI24gdHJpZ2dlciB0aGUgLW4gb3B0aW9uIGluICphbnkgZmlsZSosCgloYXZlICNuIHRyaWdnZXIgdGhlIC1uIG9wdGlvbiBvbmx5IGlmIHRoZXkgYXJlIHRoZSBmaXJzdAoJdHdvIGJ5dGVzIG9mIHRoZSBmaXJzdCBzY3JpcHQgb3Igc2NyaXB0LWZpbGUuCgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfc3RyaW5nKSwgc2VkL2NvbXBpbGUuYyhjb21waWxlX2ZpbGUpOgoJY2xlYXIgdGhlIGZpcnN0X3NjcmlwdCB2YXJpYWJsZSBhdCBlbmQgb2YgdGhlc2UgZnVuY3Rpb25zLgoKCSogc2VkL3NlZC5oOiB0ZWFzZSBvdXQgdGhlIHN0cnVjdCB0ZXh0X2J1ZiBkZWNsYXJhdGlvbiBmcm9tCglzdHJ1Y3Qgc2VkX2NtZCwgc28gdGhhdCBhIHBvaW50ZXIgdG8gc3VjaCBjYW4gYmUgcGFzc2VkCgl0byBuZXcgc2VkL2NvbXBpbGUuYyhyZWFkX3RleHQpIGZ1bmN0aW9uLgoKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3Byb2dyYW0pLCBzZWQvY29tcGlsZS5jKHJlYWRfdGV4dCk6CglUZWFzZSBvdXQgaGFuZGxpbmcgb2YgdGV4dCB0byBhL2MvaSBjb21tYW5kcyB0byBuZXcKCXJlYWRfdGV4dCgpIGZ1bmN0aW9uLiAgSGFuZGxlICh2aWEgYWlkIG9mIHBlbmRpbmdfdGV4dAoJdmFyaWFibGUpIHRleHRzIHdoaWNoIHNwYW4gbW9yZSB0aGFuIG9uZSBzY3JpcHQvc2NyaXB0LWZpbGUKCW9wdGlvbi4gIEluIHBhcnRpY3VsYXIsIHJlc3RvcmUgdGhlIGFiaWxpdHkgdG8gaGF2ZSB0aGlzCgl3b3JrOiAgc2VkIC1lICcxaVwnIC1lICdmb28nCgoJKiBzZWQvY29tcGlsZS5jKGNoZWNrX2ZpbmFsX3Byb2dyYW0pOiBjbG9zZSBvZmYgYW55IGRhbmdsaW5nCglwZW5kaW5nX3RleHQgYWxsb2NhdGlvbi4KClRodSBKdW4gMTEgMTE6MTc6NDYgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMoZG9fc3Vic3QpOiBmaXhlZCB0d28gYnVnczogcy8gKi9YL2cgd2FzIGZhaWxpbmcKCXRvIG1hdGNoIHRoZSBmaW5hbCBlbXB0eSBzdHJpbmcgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgcGF0dGVybgoJc3BhY2U7IGFuZCAvXmZvbyQvcy9vL3gvM3Agd2FzIHByaW50aW5nLCBkZXNwaXRlIHRoZSBmYWlsdXJlCgl0byBkbyBhIHN1YnN0aXRpb24uCgpGcmkgSnVuICA1IDA0OjQwOjI0IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IGNoYW5nZSB0aGUgQUNfQVJHX1dJVEgocmVnbmV4ZWMsIC4uLikKCXRvIGJlIHRoZSBtb3JlIGFwcHJvcHJpYXRlIEFDX0FSR19FTkFCTEUocmVnbmV4ZWMsIC4uLikuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhMTEuCgpGcmkgSnVuICA1IDAwOjU0OjI1IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhMTAgcmVsZWFzZWQKCQoJKiBzZWQvZXhlY3V0ZS5jOiBmb3Jnb3QgdG8gUF8oKSB0aGUgcHJvdG90eXBlIGFuZAoJb2xkLXN0eWxlIHRoZSBkZWNsYXJhdGlvbiBmb3IgYm9vdHN0cmFwX21lbWNocigpIQoKVGh1IEp1biAgNCAxODo0MjozMCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2NvbXBpbGUuYyhzbmFyZl9jaGFyX2NsYXNzKTogYWRkZWQgY29kZSB0bwoJcmVjb2duaXplIFxuIG9yIFw8bmV3bGluZT4gc2VxdWVuY2Ugd2l0aGluIGEKCWNoYXItY2xhc3MgYXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLgoKVHVlIEp1biAgMiAxMTo1NjowMiBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBhZGRlZCBjaGVjayBmb3IgPHN5cy90eXBlcy5oPiBhbmQKCWEgQUNfQVJHX1dJVEgocmVnbmV4ZWMsLi4uKSBjaGVjaywgdG8gc2ltcGxpZnkgdXNlCglvZiBvdGhlciByZWdleCBsaWJyYXJpZXMgd2hpY2ggaGF2ZSByZWdleGVjKCkgYnV0Cglub3QgcmVnbmV4ZWMoKSwgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBsb3NzIG9mCglmdW5jdGlvbmFsaXR5IChyZWdleHBzIHdpbGwgbm90IHdvcmsgcmlnaHQgYWdhaW5zdAoJaW5wdXQgbGluZXMgd2hpY2ggY29udGFpbiBOVUxzKS4KCgkqIHNlZC9leGVjdXRlLmM6IGFkZCBudWxfYXBwZW5kKCkgZnVuY3Rpb24sIGEgI2RlZmluZQoJZm9yIGEgcmVnbmV4ZWMoKSAtPiByZWdleGVjKCkgbWFjcm8gKGNvbmRpdGlvbmFsIG9uCgl0aGUgbGFjayBvZiB0aGUgV0lUSF9SRUdORVhFQyBzeW1ib2wpLCBhbmQgYSBjb3VwbGUKCW9mIGNhbGxzIHRvIG51bF9hcHBlbmQoKSAoaW4gbWF0Y2hfYW5fYWRkcmVzc19wKCkKCWFuZCBkb19zdWJzdCgpKSB0byBwZXJtaXQgdGhlIHVzZSBvZiB0aGUgUE9TSVggc3RhbmRhcmQKCXJlZ2V4ZWMoKSBmdW5jdGlvbiBjYWxsIGluc3RlYWQgb2YgdGhlIHN1Z2dlc3RlZAoJcmVnbmV4ZWMoKSBjYWxsLgoKCSogc2VkL2NvbXBpbGUuYywgc2VkL2V4ZWN1dGUuYywgc2VkL3NlZC5jOiBjaGVjayBmb3IKCTxzeXMvdHlwZXMuaD4gYW5kIGluY2x1ZGUgaXQgKGJlZm9yZSAicmVnZXguaCIpIGlmCglhdmFpbGFibGUuICBUaGlzIG1ha2VzIGl0IHNpbXBsZXIgdG8gdXNlIHRoZSBzeXN0ZW0ncwoJcmVnZXggbGlicmFyeSBpbnN0ZWFkIG9mIHRoZSBvbmUgaW4gbGliL3JlZ2V4LmMsIHNob3VsZAoJdGhhdCBiZSBkZXNpcmVkLgoKVHVlIEp1biAgMiAwODo0MTowNSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2Jhc2ljZGVmcy5oOiBkZWZpbmUgVkNBU1QgbWFjcm9zIHRvIGFsbG93IHNlZCB0bwoJY29tcGlsZSBvbiBzeXN0ZW1zIHdoaWNoIHByZWRhdGUgdGhlIGRlZmluaXRpb24KCW9mICJ2b2lkICoiLCBhbmQgeWV0IHN0aWxsIGdldCBmZWVkYmFjayBhYm91dAoJc3R1cGlkIHByb2dyYW1taW5nIGVycm9ycyBmcm9tIHN5c3RlbXMgd2hpY2ggKmRvKgoJa25vdyBhYm91dCAidm9pZCAqInMuICBBbHNvIGRlZmluZSBNQUxMT0MsIFJFQUxMT0MsCglNRU1EVVAsIGFuZCBGUkVFIG1hY3JvcyB0byBrZWVwIHVuZGVyIGNvbnRyb2wgdGhlCglkZWdyZWUgb2YgY29kZSB1Z2xpbmVzcyB3aGljaCB3b3VsZCBvdGhlcndpc2UgYmUKCWludHJvZHVjZWQgaW4gbWFraW5nIHVzZSBvZiB0aGUgVkNBU1QgbWFjcm8uCgoJKiBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jLCBzZWQvc2VkLmMsIHNlZC91dGlscy5jOgoJcGVydmFzaXZlbHkgdXNlIHRoZSBuZXcgVkNBU1QsIE1BTExPQywgUkVBTExPQywgTUVNRFVQLAoJYW5kIEZSRUUgbWFjcm9zIHdoZXJldmVyIGFwcHJvcHJpYXRlLgoKCSogc2VkL3V0aWxzLmMsIHNlZC91dGlscy5oOiBjb3JyZWN0IHR5cGUgb2YgZmlyc3QgYXJndW1lbnRzCgl0byBja19mcmVhZCgpIGFuZCBja19md3JpdGUoKSB0byBiZSBbY29uc3RdIFZPSUQgKi4KCgkqIHNlZC9iYXNpY2RlZnMuaCwgc2VkL2V4ZWN1dGUuYzogcHJvdGVjdCBhZ2FpbnN0Cgl0aGUgcnVtb3JlZCBzeXN0ZW1zIHdoaWNoIHN0dXBpZGx5ICNkZWZpbmUgX19TVERDX18gMC4KCgkqIHRlc3RzdWl0ZS9oZWxwLmdvb2QsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogbWFrZQoJdGhlIGBgaGVscCcnIHRlc3QgaW5zZW5zaXRpdmUgdG8gdGhlIHNwZWxsaW5nIG9mCgl0aGUgZXhlY3V0YWJsZSdzIG5hbWUuICBBbHNvLCBlbmhhbmNlZCBgbWFrZSBjbGVhbicKCXRhcmdldC4KCgkqIGRvYy9zZWQudGV4aSwgZG9jL3NlZC4xOiBjb3JyZWN0IGRvY3VtZW50YXRpb24gb2YgYHEnCgljb21tYW5kOyBmaXggdHlwb3MuCgoJKiBjb25maWd1cmUsIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhMTAuCgpTYXQgTWF5IDMwIDE3OjI4OjAwIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhOSByZWxlYXNlZAoJCgkqIE1ha2VmaWxlLmFtOiBtYWtlIHRlc3RzdWl0ZSBhIG5vcm1hbCBTVUJESVIuCgoJKiBjb25maWd1cmUuaW46IGRpc2NvbnRpbnVlIHVzaW5nIEFDX0lTQ19QT1NJWCAtLQoJY2hlY2sgZm9yIC1sY3Bvc2l4IGxpYnJhcnkgaW5zdGVhZDsgYWRkZWQKCXRlc3RzdWl0ZS9NYWtlZmlsZSB0byBBQ19PVVRQVVQgbGlzdC4KCgkqIGxpYi9tZW1tb3ZlLmMobWVtbW92ZSk6IGZpeGVkIHdyb25nIHNlbnNlIHVzZWQKCWZvciBIQVZFX0JDT1BZIHRlc3QuCgoJKiBzZWQvZXhlY3V0ZS5jOiBjaGVja2VkIG1vcmUgc3BlY2lmaWNhbGx5IGZvciBhIHZlcnNpb24KCW9mIGdjYyB3aGljaCBzdXBwb3J0cyBfX2F0dHJpYnV0ZV9fIChpLmUuLCA+PSAyLjcpLgoKCSogdGVzdHN1aXRlLyo6IHJlbmFtZWQgZmlsZXMgdG8gZml0IDE0IGNoYXIgbGltaXQuCgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTWFrZWZpbGUKCXJlbmFtZWQgdG8gTWFrZWZpbGUuaW4gYW5kIHRoZW4gbW9kaWZpZWQgc28gdGhhdAoJIm1ha2UgLWogY2hlY2siIGZyb20gdG9wIGRpcmVjdG9yeSB3aWxsIHdvcmsuCgoJKiB0ZXN0c3VpdGUvc3Vid3JpdGUuc2VkLCB0ZXN0c3VpdGUvd3JpdGVvdXQuc2VkOiBjaGFuZ2VkCglmaWxlIG5hbWUgb2YgdGhlICJ3IiBjb21tYW5kIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUKCW5ldyBuYW1pbmcgdXNlZCBpbiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4uCgoJKiBkb2Mvc2VkLjEsIGRvYy9zZWQudGV4aTogZml4ZWQgc29tZSB0eXBvcywgZm9ybWF0dGluZwoJZ2xpdGNoZXMsIGFuZCBwb29yIHdvcmRpbmdzLgoKU2F0IE1heSAzMCAwNDowMjoyOSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBzcGVjaWZ5IHRoYXQgY29uZmlnLmggaXMgdG8gYmUgZGVyaXZlZAoJZnJvbSBjb25maWdfaC5pbiBpbiBvcmRlciB0byBhdm9pZCB0aGUgYnJhaW5kZWFkCglET1MgZmlsZXN5c3RlbSBsaW1pdGF0aW9ucy4KCkZyaSBNYXkgMjkgMjE6NTY6MzAgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9hZGRyZXNzKSwgZG9jL3NlZC50ZXhpOiBnYXZlCglhIGJldHRlciBkZWZpbml0aW9uIHRvIHRoZSBtZWFuaW5nIG9mIE5+MCBhZGRyZXNzCglmb3JtcyAtLSBOfk0gYWRkcmVzc2VzIG5vdyBtZWFuIHRoYXQgbGluZXMgbWF0Y2gKCXdoZW4gdGhlcmUgZXhpc3RzIGEgbm9uLW5lZ2F0aXZlIHggc3VjaCB0aGF0CglsaW5lbm8gPT0gTit4Kk0uCgpGcmkgTWF5IDI5IDEyOjA3OjM4IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfYWRkcmVzcyksCglzZWQvZXhlY3V0ZS5jKG1hdGNoX2FuX2FkZHJlc3NfcCk6IHVwZGF0ZSBzZW1hbnRpY3Mgb2YKCU5+TSBhZGRyZXNzIGZvcm06IG5vdyBOIGlzIHRoZSBmaXJzdCBsaW5lIHdoaWNoIHdpbGwKCW1hdGNoIGFuZCBNIGlzIHRoZSBzdGVwIGJldHdlZW4gc3VjY2VlZGluZyBtYXRjaGVzLgoJSWYgTjxNIHRoaXMgd29ya3Mgb3V0IHRvIHRoZSBzYW1lIGFzIGJlZm9yZSwgYnV0IHRoZQoJbmV3IGJlaGF2aW9yIGZvciBOPj1NIHNlZW1zIG1vcmUgdXNlZnVsLgoKCSogZG9jL3NlZC4xLCBkb2Mvc2VkLnRleGk6IHVwZGF0ZSBkb2N1bWVudGF0aW9uIG9mIE5+TQoJYWRkcmVzcyBmb3JtOyBhZGRlZCAiT3RoZXIgUmVzb3VyY2VzIiBub2RlIHRvIHNlZC50ZXhpOwoJbWlub3IgZm9ybWF0dGluZyBjaGFuZ2VzIHRvIHNvbWUgaXRlbXMgaW4gc2VkLjEgd2l0aAoJYW4gZXllIHRvIGltcHJvdmluZyBjbGFyaXR5LgoKCSogY29uZmlndXJlLmluLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiB1cGRhdGUgdG8gYmV0YTkuCgpTYXQgTWF5IDIzIDIwOjA0OjMxIEhTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhOCByZWxlYXNlZAoJCgkqIHNlZC9jb21waWxlLmMoY29tcGlsZV9yZWdleCk6IGZvcmdvdCB0byBtYWtlIGxhc3RfcmUgYmUKCWEgKmNvcHkqIG9mIHRoZSBidWZmZXJlZCB0ZXh0IGluIHRvZGF5J3MgZWFybGllciBmaXguCgoJKiBzZWQvZXhlY3V0ZS5jKHJlYWRfZmlsZV9saW5lKTogRU9GIGNoZWNrIHdhcyB3cm9uZyAtLQoJaXQgZm9yZ290IHRvIGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB3ZSB3ZXJlCglhcHBlbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYGBsaW5lJycgKGluc3RlYWQgb2YgbWVyZWx5CglyZWFkaW5nIGEgZnJlc2ggbGluZSkuCgpTYXQgTWF5IDIzIDE4OjA3OjE4IEhTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQvY29tcGlsZS5jKGNvbXBpbGVfcmVnZXgpOiBkb24ndCB0cmFjayBjb21waWxlZCB2ZXJzaW9uCglvZiByZWdleCAtLSB0aGUgbW9kaWZpZXJzIG1heSBjaGFuZ2UuICBUcmFjayB0aGUgcmVnZXgKCXNvdXJjZSBpbnN0ZWFkLiAgKEZvciAibGFzdCByZWdleCIgKGFrYSAvLykgbm90YXRpb24uKQoKCSogY29uZmlndXJlLmluLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiB1cGRhdGUgdG8gYmV0YTguCgpTYXQgTWF5IDIzIDE2OjA3OjA5IEhTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhNyByZWxlYXNlZAoJCgkqIHNlZC9leGVjdXRlLmM6ICN1bmRlZidkIEVYUEVSSU1FTlRBTF9EQVNIX05fT1BUSU1JWkFUSU9OCgliZWNhdXNlIGl0cyBjb2RlIGlzIGJ1Z2d5LgoKVHVlIE1heSAxOSAxNzowMzo1MiBIU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL3NlZC5jOiBsYWJlbCByeCBsaWJyYXJ5IGNvZGUgYXMgc3VjaCB3aXRoICNpZmRlZnMKCShpbnN0ZWFkIG9mIGp1c3QgI2lmIDApLgoKCSogc2VkL2NvbXBpbGUuYyhjb21waWxlX3Byb2dyYW0pOiBtYWtlIGluY3JlbWVudGFsCglpbXByb3ZlbWVudCB0byB0aGUgIlVua25vd24gY29tbWFuZCIgZXJyb3IgbWVzc2FnZS4KClNhdCBNYXkgMTYgMjM6MTY6MjYgSFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZTogc2ltcGxpZnk6IGdldCByaWQgb2YgYXV0b21hdGljIHJ1bgoJYWdhaW5zdCBzeXN0ZW0ncyBzZWQ7IGRvbid0IHRpbWUgYnkgZGVmYXVsdDsgYWxsb3cgZm9yCglhbHRlcm5hdGl2ZSBjb21wYXJpc29uIGNvbW1hbmQuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhNy4KCldlZCBNYXkgMTMgMjE6NDQ6MjggUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGE2IHJlbGVhc2VkCgkKCSogbGliL01ha2VmaWxlLmFtOiBmaXggc3BlbGxpbmcgb2YgbGlic2VkX2FfTElCQUREIGluCglsaWJzZWRfYV9ERVBFTkRFTkNJRVMuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0byBiZXRhNi4KCldlZCBNYXkgMTMgMTQ6Mzg6MDggUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqKiogVmVyc2lvbiAzLjAxLWJldGE1IHJlbGVhc2VkCgkKCSogc2VkL2V4ZWN1dGUuYyhkb19zdWJzdCk6IGFkZGVkIG5vdF9ib2xfcCB2YXJpYWJsZSB0byB0cmFjayB3aGVuCgl3ZSBoYXZlIGl0ZXJhdGVkIHBhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0dGVybi4KCVtUaGFua3MgdG8gSmltIE1leWVyaW5nIDxtZXllcmluZ0Bhc2NlbmQuY29tPiBmb3IgdGhlIGJ1ZyByZXBvcnQuXQoKV2VkIE1heSAxMyAxMzo1NDowNCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkL2V4ZWN1dGUuYyhib290c3RyYXBfbWVtY2hyKTogbmV3IGZ1bmN0aW9uLiAgV2hlbgoJYm9vdHN0cmFwcGluZyB3ZSBkb24ndCBrbm93IGlmIHdlIGFyZSBvbiBhIDY0LWJpdCBtYWNoaW5lLAoJc28gbGliL21lbWNoci5jIGJyZWFrcy4gIFN1cHBseSB0aGlzIChzbG93KSBpbXBsZW1lbnRhdGlvbgoJanVzdCB0byBnZXQgdXMgYm9vdHN0cmFwcGVkLgoKCSogYm9vdHN0cmFwLnNoOiBhZGQgYSAjZGVmaW5lIEJPT1RTVFJBUCBzeW1ib2w7IGFkZCAtSS4KCWZvciBlbXBoYXNpcyBmb3IgdGhlIGNvbXBpbGVzIGluIHNlZC87IGJlIGV4cGxpY2l0CglhYm91dCB3aGF0IGZpbGVzIHdlJ3JlIGJvdGhlcmluZyB0byBjb21waWxlLgoKCSogY29uZmlndXJlLmluLCB0ZXN0c3VpdGUvdmVyc2lvbi5nb29kOiB1cGRhdGUgdmVyc2lvbgoJdG8gYmV0YTUuCgpXZWQgTWF5IDEzIDA2OjM5OjA2IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKioqIFZlcnNpb24gMy4wMS1iZXRhNCByZWxlYXNlZAoJCgkqIHJlbmFtZSB3cml0ZW91dC5nb29kPyB0byB3cnRvdXQ/Lmdvb2QgYW5kIHN1YndyaXRlLmdvb2Q/IHRvCglzdWJ3cnQ/Lmdvb2QgdG8gY29tcGx5IHdpdGggRE9TIDgrMyBmaWxlIG5hbWUgcmVzdHJpY3Rpb25zLgoJW0VsaSBaYXJldHNraWkgPGVsaXpAaXMuZWx0YS5jby5pbD4gc3VnZ2VzdGVkIHRoaXMgdG8KCXNpbXBsaWZ5IERKR1BQIHBvcnRzLCBhbmQgaXQgd2FzIGVhc3kuXQoKCSogdGVzdHN1aXRlL01ha2VmaWxlOiByZWZsZWN0IGFib3ZlIG5hbWUgY2hhbmdlcy4KCldlZCBNYXkgMTIgMjE6MDk6MzIgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9zZWQuYyh1c2FnZSk6IGZpeCBub24tcG9ydGFibGUgb21pc3Npb24gb2YgXG5cIGF0IGVuZCBvZgoJbGluZXMgd2l0aGluIGxvbmcgc3RyaW5nLgoKCSogc2VkL3NlZC5jKG1haW4pOiByZW1vdmUgc3B1cmlvdXMgYXJndW1lbnQgdG8gZnByaW50ZigpIGluIHRoZQoJJ1YnZXJzaW9uIG91dHB1dC4KCgkqIHNlZC9leGVjdXRlLmMobGluZV9hcHBlbmQpOiBlbWJlZCBuZXdsaW5lIGJldHdlZW4gdGhlIHR3bwoJdGV4dCBmcmFnbWVudHMgdW5jb25kaXRpb25hbGx5LgoKCSogc2VkL2V4ZWN1dGUuYyhkb19zdWJzdCk6IGNoYW5nZSBzdHJ1Y3R1cmUgYXNzaWdubWVudCB0byBtZW1jcHkoKQoJKGZvciBwb3J0YWJpbGl0eSByZWFzb25zKS4KCgkqIFJFQURNRS5ib290c3RyYXA6IHN1Z2dlc3QgdXNpbmcgLXcgb3B0aW9uLgoKVHVlIE1heSAxMiAxMDowMjozNyBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiB1c2UgQUNfUkVQTEFDRV9GVU5DUyB3aGVyZSBhcHByb3ByaWF0ZS4KCgkqIGxpYi9NYWtlZmlsZS5hbTogdXBkYXRlZCB0byByZWZsZWN0IEFDX1JFUExBQ0VfRlVOQ1MgY2hhbmdlIGluCgljb25maWd1cmUuaW4uCgoJKiBsaWIvbWVtY2hyLmMgbGliL21lbWNtcC5jOiByZXZlcnQgdG8gc3RhbmRhcmQgR05VIHZlcnNpb25zLgoKCSogbGliL2FsbG9jYS5jOiBhZGRlZCB0aGlzIG1pc3NpbmcgZmlsZS4KCgkqIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZWQgZm9yIG5ldyB2ZXJzaW9uIGlkZW50aWZpZXIuCgpNb24gTWF5IDExIDE4OjUwOjU2IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgkKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTMgcmVsZWFzZWQKCQoJKiBzZWQvTWFrZWZpbGUuYW06IGZpeCBJTkNMVURFUyB0byB3b3JrIHJpZ2h0IHdpdGggVlBBVEguCglbVGhhbmtzIHRvIEppbSBNZXllcmluZyA8bWV5ZXJpbmdAYXNjZW5kLmNvbT4gZm9yIHRoZSBidWcgcmVwb3J0Ll0KCgkqIHNlZC9zZWQuYyh1c2FnZSk6IG1ha2UgLS1oZWxwIG91dHB1dCBtb3JlIHVzZXItZnJpZW5kbHk/CgoJKiBzZWQvZXhlY3V0ZS5jKGV4ZWN1dGVfcHJvZ3JhbSk6IGZpeCBidWcgaW4gJ3gnIGNvbW1hbmQgaW50cm9kdWNlZAoJaW4gdGhlIGFsbGVnZWQgcG9ydGFiaWxpdHkgZml4IG9mIE1heSA5LgoKCSogY29uZmlndXJlLmluOiB1cGRhdGUgdmVyc2lvbiB0byAzLjAxLWJldGEzLgoKCSogdGVzdHN1aXRlL3ZlcnNpb24uZ29vZCwgdGVzdHN1aXRlL2hlbHAuZ29vZDogZnJlc2hlbiB3aXRoCglsYXRlc3Qgb3V0cHV0LgoKU2F0IE1heSAgOSAyMjozNTo0NSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTIgcmVsZWFzZWQKCQoJKiBzZWQvc2VkLmM6IGFkZCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IGluIEhBVkVfTU1BUAoJYmxvY2sgKG5lZWRlZCBvbiBzb21lIG1hY2hpbmVzKS4KCgkqIGxpYi9tZW1tb3ZlLmM6ICNpbmNsdWRlIDxtZW1vcnkuaD4sIGlmIEhBVkVfTUVNT1JZX0guCgpTYXQgTWF5ICA5IDIxOjI5OjAwIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IHJlbW92ZSBkYW5nbGluZyByZWZlcmVuY2VzIHRvIHJ4IGxpYnJhcnk7CglhZGRlZCBIRUFERVIgYW5kIEZVTkMgY2hlY2tzIGZvciBpdGVtcyB1c2VkIGJ5IHNvdXJjZSBpbgoJbGliLy4KCgkqIGxpYi9hbnNpZGVjbC5oLCBsaWIvbWVtY29weS5oLCBsaWIvcGFnZWNvcHkuaCwgbGliL3N0cmluZy5oCglsaWIvbWVtY3B5LmMsIGxpYi9tZW1tb3ZlLmM6IGRlbGV0ZXMgdGhlc2UgZmlsZXMuICBUaGVyZQoJYXJlIHN0aWxsIHBpZWNlcyBvZiBnbGliYyBtaXNzaW5nIHRvIHN1cHBvcnQgdGhlc2UsIGFuZAoJaXQgaXNuJ3Qgd29ydGggdGhlIGhlYWRhY2hlIHJpZ2h0IG5vdy4KCgkqIGxpYi9tZW1tb3ZlLmM6IGRlIG5vdm8sIHNpbXBsZXIgdmVyc2lvbi4gIFVzZXMgYmNvcHkoKQoJaWYgYXZhaWxhYmxlLCBhbmQgc2xvdy1idXQtc2ltcGxlIGNvZGUgaWYgbm90LgoKCSogbGliL01ha2VmaWxlLmFtOiByZW1vdmUgcmVmZXJlbmNlcyB0byBkZWxldGVkIGZpbGVzLgoJQWRkZWQgZm9yZ290dGVuIHJlZmVyZW5jZSB0byBtZW1jcHkuYy4gIFJlLW9yZGVyZWQKCVNPVVJDRSBlbnRyaWVzIHRvIHJlZmxlY3QgZGVwZW5kZW5jaWVzIGZvciBzeXN0ZW1zCgl3aGljaCBsYWNrIHJhbmxpYi4KCgkqIHNlZC9iYXNpY2RlZnMuaDogdXBkYXRlZCB0byByZWZsZWN0IGFib3ZlIGNoYW5nZXMgdG8gbGliLywKCWFuZCBleHBlcmllbmNlIHdpdGggbm9uLVNUREMgY29tcGlsZXJzLgoKCSogbGliL3JlZ2V4LmM6IG1hZGUgcmVnZXJyb3IoKSBmdW5jdGlvbiBwdWJsaWNseSB2aXNpYmxlLgoKCSogbGliL3N0cmVycm9yLmM6IHVzZSBvbGQtc3R5bGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uCgoJKiBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jLCBzZWQvc2VkLmMsIHNlZC91dGlscy5jLAoJc2VkL3NlZC5oLCBzZWQvdXRpbHMuaDogZW5zdXJlIHRoYXQgcHJpdmF0ZSBkZWZpbml0aW9ucyBvZgoJc29tZSBzeW1ib2xzIGRvIG5vdCBjYXVzZSBwcm9ibGVtcyB3aGVuICNpbmNsdWRlJ2luZyBzeXN0ZW0KCWhlYWRlcnMgKG1haW5seSBieSByZS1vcmRlcmluZyB0aGUgI2luY2x1ZGUgZGlyZWN0aXZlcykuCgkoVGhpcyBpcyBwYXJ0aWN1bGFybHkgYW4gaXNzdWUgZm9yIGJvb3RzdHJhcC5zaCBydW5zLikKCgkqIHNlZC9leGVjdXRlLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IHVzZSBtZW1jcHkoKSBpbnN0ZWFkIG9mCglzdHJ1Y3R1cmUgYXNzaW5nbWVudCAoJ3gnIGNvbW1hbmQpLCBmb3IgcG9ydGFibGlsaXR5IHRvCglvbGQgY29tcGlsZXJzLgoKCSogc2VkL2V4ZWN1dGUuYyAoc2xvd19nZXRsaW5lKTogdXNlIG9sZC1zdHlsZSBmdW5jdGlvbgoJZGVjbGFyYXRpb24sIHdpdGggYSBQXyBwcm90b3R5cGUuCgoJKiBzZWQvc2VkLmM6IGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZmFsbGJhY2sgTUFQX0ZBSUxFRAoJZGVmaW5pdGlvbiB0byB3b3JrIG9uIGFyY2hhaWMgc3lzdGVtcy4gIChNb2Rlcm4gc3lzdGVtcwoJc2hvdWxkIGJlIGRlZmluaW5nIGl0IHRoZW1zZWx2ZXMsIHNvIHRoZSBjaGFuZ2UgZnJvbQoJdm9pZCAqIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uKQoKCSogYm9vdHN0cmFwLnNoLCBSRUFETUUuYm9vdHN0cmFwOiBhY3R1YWwgdGVzdGluZyBvZiBib290c3RyYXAKCWNvZGUgcmV2ZWFsZWQgdGhhdCBJIHdhcyB0b28gb3B0aW1pc3RpYy4gIFJlZGVzaWduZWQgYW5kCglyZXBsYWNlZCBpbXBsZW1lbnRhdGlvbi4KCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZTogaWdub3JlIGVycm9ycyBmcm9tIHJlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbgoJc2VkcyB0aGF0IGFyZW4ndCB1cCB0byBzbnVmZi4KCgkqIHRlc3RzdWl0ZS9oZWxwLmdvb2QsIHRlc3RzdWl0ZS92ZXJzaW9uLmdvb2Q6IHVwZGF0ZSB0bwoJY3VycmVudCB2ZXJzaW9uJ3Mgb3V0cHV0LgoKRnJpIE1heSAgOCAxNTowODoyOCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSoqKiBWZXJzaW9uIDMuMDEtYmV0YTEgcmVsZWFzZWQKCQoJKiBzZWQvc2VkLmMgKG1haW4sIHVzYWdlKTogb25jZSBhZ2FpbiB0d2VhayB0aGUgLS1oZWxwIGFuZAoJLS12ZXJzaW9uIG91dHB1dCB0byBiZXR0ZXJ5IGNvbXBseSB3aXRoIEdOVSBjb2Rpbmcgc3RhbmRhcmRzLgoKCSogdGVzdHN1aXRlL2hlbHAuZ29vZCwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogdXBkYXRlIHRvCglyZWZsZWN0IGFib3ZlIGNoYW5nZS4KCgkqIGRvYy9zZWQudGV4aTogZml4ICJJbnZva2luZyIgbm9kZSdzIHNwZWxsaW5nIHRvIGNvbXBseQoJd2l0aCBHTlUgc3RhbmRhcmRzLgoKRnJpIE1heSAgOCAxMTo0MzoxMCBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZG9jL3NlZC4xLCBkb2MvTWFrZWZpbGUuYW06IHdyb3RlICh2ZXJ5IGJhc2ljKSBtYW4gcGFnZS4KClRodSBNYXkgIDcgMjA6NDA6MjEgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGxpYi9NYWtlZmlsZS5hbSwgbGliL21lbW1vdmUuYywgbGliL21lbWNoci5jLCBsaWIvcmVnZXguYywKCWxpYi9tZW1jcHkuYywgbGliL3JlZ2V4LmgsIGxpYi9tZW1jb3B5LmgsIGxpYi9zdHJpbmcuaCwKCWxpYi9wYWdlY29weS5oLCBsaWIvYW5zaWRlY2wuaDogZ3JhYiB5ZXQtYW5vdGhlci12ZXJzaW9uCglmcm9tIGdudS5vcmcgZm9yIGJhc2VsaW5lIGFuZC9vciBlZGl0IGNvcHlyaWdodCBib2lsZXJwbGF0ZQoJdXNpbmcgb2ZmaWNpYWwgbGdwbDJncGwuc2VkIHNjcmlwdC4gIFRha2UgY2FyZSBub3QgdG8KCWxvb3NlIHJlZ25leGVjKCkgaW50ZXJmYWNlIG9yIHNwZWNpYWwgY29uZGl0aW9uYWwtY29tcGlsYXRpb24KCWNvZGUuCgpXZWQgTWF5ICA2IDIzOjM1OjEyIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBsaWIvcmVnZXguYywgbGliL3JlZ2V4Lmg6IHRha2UgZnJvbSBncmVwLTIuMSBkaXN0cmlidXRpb24sCgl0aGVuIHRyaXZpYWxseSBhZGRlZCB0aGUgcmVnbmV4ZWMoKSBpbnRlcmZhY2UuCgoJKiBzZWQvc2VkLmMsIHNlZC9jb21waWxlLmMsIHNlZC9leGVjdXRlLmM6IG1hZGUgbW9kaWZpY2F0aW9ucwoJdG8gd29yayB3aXRoIHJlZ2V4IGluc3RlYWQgb2YgcnguCgoJKiByeC8qOiBkZWxldGVkIGRpcmVjdG9yeTsgdGhlIGNvZGUgaXMganVzdCB0b28gc2xvdy4KCUkgdGhpbmsgaXQgd2lsbCBiZSBlYXNpZXIgdG8gZXh0ZW5kIHJlZ2V4IHRvIGZ1bGx5CglzdXBwb3J0IFBPU0lYLjIgdGhhbiB0byB0dW5lIHJ4IHRvIGJlIHJlYXNvbmFibGUuCglFdmVuIGlmIHRoaXMgc3VwcG9zaXRpb24gaXMgd3JvbmcsIEknZCByYXRoZXIgbWFrZQoJdGhlIDMuMDEgcmVsZWFzZSB3aXRoIHRoZSBzbGlnaHRseSBkZWZpY2llbnQgcmVnZXguCgoJKiBNYWtlZmlsZS5hbSBsaWIvTWFrZWZpbGUuYW0sIHNlZC9NYWtlZmlsZS5hbTogbWFkZSBjaGFuZ2VzCglyZWxhdGVkIHRvIHRoZSBzdWJzdGl0dXRpb24gb2YgcmVnZXggZm9yIHJ4LgoKCSogbGliL01ha2VmaWxlLmFtLCBzZWQvTWFrZWZpbGUuYW06IHNpbmNlIHJlZ2V4IGlzIG5vdCBhCglgYGNvbXBhdGFiaWxpdHknJyBtb2R1bGUsIGNoYW5nZWQgbmFtZSBvZiBsaWJyYXJ5IHRvCglgYGxpYnNlZC5hJycuCgoJKiBsaWIvbWVtY2hyLmMsIGxpYi9tZW1jcHkuYywgbGliL21lbW1vdmUuYzogYWRkIGNvbmRpdGlvbmFsCgljb21waWxhdGlvbiBjb2RlIHRvIGxlYXZlIHplcm8tc2l6ZWQgLm8gZmlsZSBpZiBzeXN0ZW0KCWFscmVhZHkgc3VwcG9ydHMgdGhlIGltcGxlbWVudGVkIGZ1bmN0aW9uLgoKCSogdGVzdHN1aXRlL2hlbHAuZ29vZCwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDogYnJvdWdodAoJdXAtdG8tZGF0ZSAob25jZSBhZ2FpbikuCgoJKiBORVdTLCBBTk5PVU5DRTogY2hhbmdlcyB0byByZWZsZWN0IHRoaXMgYmF0Y2ggb2YgY2hhbmdlcy4KCldlZCBNYXkgIDYgMTg6NDA6NDcgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmM6IGRpc2NvdmVyZWQgYXdmdWwgYnVnIGluICd9JyBoYW5kbGluZzoKCWl0IGNvdWxkIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHZlYyAoYmVjYXVzZSBgbicgd2FzCgliZWluZyBkZWNyZW1lbnRlZCBiZWxvdyB6ZXJvKSEgIE5lZWRlZCB0byAiY29udGludWUiCglpbnN0ZWFkIG9mICJicmVhayIuCgpUdWUgTWF5ICA1IDE0OjM0OjM4IFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBkb2Mvc2VkLnRleGksIGRvYy92ZXJzaW9uLnRleGk6IHdyb3RlIHNvbWUgcnVkaW1lbnRhcnkKCXRleGluZm8gZG9jdW1lbnRhdGlvbi4KCgkqIEFOTk9VTkNFLCBORVdTLCBSRUFETUUsIFJFQURNRS5yeCwgTWFrZWZpbGUuYW06Cgltb3JlIHVwZGF0ZXMgZm9yIHRoZSB1cGNvbWluZyBiZXRhLXJlbGVhc2UuCgoJKiBzZWQvY29tcGlsZS5jLCBzZWQvZXhlY3V0ZS5jLCBzZWQvc2VkLmMsIHNlZC91dGlscy5jLAoJc2VkL3NlZC5oLCBsaWIvc3RyZXJyb3IuYzogdXBkYXRlIGNvcHlyaWdodCBub3RpY2UgdGV4dC4KCkZyaSBNYXkgIDEgMTU6NDE6MzcgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC9leGVjdXRlLmMgKG1hdGNoX2FuX2FkZHJlc3NfcCwgbWF0Y2hfYWRkcmVzc19wKTogaWYKCXRoZSBzZWNvbmQgZWxlbWVudCBvZiBhbiBhZGRyZXNzIHJhbmdlIGlzIGEgbGluZSBudW1iZXIsCglhbmQgdGhhdCBsaW5lIG51bWJlciBpcyAqbGVzcyB0aGFuKiAob3IgZXF1YWwgdG8pIHRoZQoJY3VycmVudCBsaW5lIG51bWJlciwgd2Ugb25seSBtYXRjaCB0aGUgb25lIGxpbmUgKHBlcgoJUE9TSVguMiwgc2VjdGlvbiA0LjU1LjcuMSkuICBbQnVnIGRpc2NvdmVyZWQgYXMgcmVwb3J0ZWQKCWluIHRoZSBzZWRlcnMgbWFpbGluZyBsaXN0IEZBUS5dCgoJKiBBVVRIT1JTLCBORVdTLCBhY2NvbmZpZy5oLCBjb25maWd1cmUuaW4sIGRvYy9NYWtlZmlsZS5hbSwKCWxpYi9NYWtlZmlsZS5hbSwgc2VkL01ha2VmaWxlLmFtLCBsaWIvUkVBRE1FLAoJdGVzdHN1aXRlL2hlbHAuZ29vZCwgdGVzdHN1aXRlL3ZlcnNpb24uZ29vZDoKCVVwZGF0ZWQgaW4gYW50aWNpcGF0aW9uIG9mIHRoZSAzLjAxLWJldGExIHJlbGVhc2UuCglSZW9yZ2FuaXplZCBkZXZlbG9wbWVudCBzb3VyY2UgdHJlZSB0byBtYWtlIGNyZWF0aW9uCglvZiBhIGRpc3RyaWJ1dGlvbiBzaW1wbGVyLiAgTW9zdCBub3RhYmxlIGNoYW5nZXMgd2VyZQoJdG8gdGhlIHZhcmlvdXMgTWFrZWZpbGUuYW0gZmlsZXMgYW5kIGNvbmZpZ3VyZS5pbiwgYnV0Cglzb21lIG1pbm9yIGVkaXRzIChzdWNoIGFzIGRlbGV0aW5nIG9yIGNoYW5naW5nICNpbmNsdWRlCglkaXJlY3RpdmVzKSBoYXZlIGJlZW4gbWFkZSBpbiBtYW55IG90aGVyIHNvdXJjZSBmaWxlcy4KCgkqIGJvb3RzdHJhcC5zaCwgUkVBRE1FLmJvb3RzdHJhcDogY3JlYXRlZCBhIG1lY2hhbmlzbSBmb3IKCWNyZWF0aW5nIHNlZCBvbiBhIHN5c3RlbSB3aGljaCBsYWNrcyBhIHdvcmtpbmcgc2VkLgoKVGh1IEFwciAxNiAyMzo1MjoxMSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkLmgsIHNlZC5jLCBleGVjdXRlLmMsIGNvbXBpbGUuYzogZGlkIGEgc3BlbGwtY2hlY2sgb24KCXRoZSBjb21tZW50czsgZml4ZWQgc2V2ZXJhbCB0eXBvcy4KClRodSBBcHIgMTYgMTM6NDM6MDEgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYyAoZG9fc3Vic3QpOiBmaXhlZCBidWcgd2hlcmUgdGhlICJyZXBsYWNlZCIgZmxhZwoJd2FzIGJlaW5nIHNldCB0byBvbmUgaW5hcHByb3ByaWF0ZWx5IHdoZW4gYXQgbGVhc3Qgb25lCglidXQgZmV3ZXIgdGhhbiBzdWItPm51bWIgbWF0Y2hlcyBvZiB0aGUgcmVnZXhwIHdlcmUgZm91bmQuCgkoVGhhbmtzIHRvIFNpbW9uIFRheWxvciA8c3RheWxvckBoZXJtZXMuaWFjY2Vzcy5jb20uYXU+Cglmb3IgdGhlIGJ1ZyByZXBvcnQuKQoKV2VkIEFwciAxNSAxMTozNTozMSBQRFQgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkLmgsIHNlZC5jLCBjb21waWxlLmMsIGV4ZWN1dGUuYzogaGF2aW5nIGEgY29uY2VybiB0aGF0CglhIGNhc3Qgd2FzIGJlaW5nIGRvbmUgaW5hcHByb3ByaWF0ZWx5LCBhbmQgcmVhbGl6aW5nIHRoYXQKCXRoZXJlIGlzIG5vIHF1aWNrIHdheSB0byBsb2NhdGUgYWxsIGNhc3RzIGluIGEgcHJvZ3JhbSwgSQoJd2VudCB0aHJvdWdoIGFuZCBtYXJrZWQgYWxsIGNhc3RzIHdpdGggYSBzaW1wbGUgbWFjcm8uCglOb3cgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIHRvIGxvY2F0ZSB0aGUgY2FzdHMsIGFuZCBpdCBpcwoJYWxzbyBhIHNpbXBsZSBtYXR0ZXIgdG8gdHVybiBvZiBjYXN0cyBmb3IgYSBsaW50IHNlc3Npb24KCShpZiBpdCBzaG91bGQgYmUgZGVzaXJlZCkuCgpXZWQgQXByIDE1IDEwOjI5OjIxIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb21waWxlLmMsIHNlZC5jOiByZWRvIGNvbXBpbGUgcGhhc2Ugc28gdGhhdCBicmFjZQoJZXhwcmVzc2lvbnMgY2FuIGJlIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMuCglGb3IgZXhhbXBsZToKCSAgcHJpbnRmICd7JyA+YTsgcHJpbnRmICdsO2QnID5iOyBwcmludGYgJ30nID5jCgkgIHNlZCAtZiBhIC1mIGIgLWYgYyBmb28KCXdpbGwgbm93IGNvbXBpbGUgKGFuZCB3b3JrKSwgaW5zdGVhZCBvZiBjb21wbGFpbmluZwoJYWJvdXQgYW4gdW5tYXRjaGVkICd7Jy4gIFRoZSBtZXNzIGNyZWF0ZWQgaW4gY29tcGlsZS5jCglhbGxvd2VkIGEgbGl0dGxlIHNpbXBsaWZpY2F0aW9uIHRvIHRoZSBjb21tYW5kLWxpbmUKCXByb2Nlc3Npbmcgb2YgIi1lIiBvcHRpb25zIGluIHNlZC5jLgoKCXNlZC5oOiBhZGRlZCAob3BhcXVlKSBlcnJfaW5mbyBtZW1iZXIgdG8gc3RydWN0IHZlY3RvcjsKCWFkZGVkIGNvbW1lbnRzIHRvIHRoZSBtZW1iZXJzIG9mIHN0cnVjdCB2ZWN0b3IuCgpXZWQgQXByIDE0IDIzOjUwOjUwIFBEVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQuaCwgc2VkLmMsIGNvbXBpbGUuYywgZXhlY3V0ZS5jOiBhZGRlZCB0eXBlcyBjb3VudFQgYW5kCglmbGFnVCBpbiBvcmRlciB0byBjbGFyaWZ5IHdoYXQgdmFyaW91cyAiaW50InMgd2VyZSBkb2luZy4KCUFsc28gbWFrZXMgaXQgZWFzeSB0byBjaGFuZ2UgdGhlIHR5cGUgdXNlZCBmb3IgY291bnRzCgkoZm9yIGV4YW1wbGUsIHRvICJ1bnNpZ25lZCBsb25nIGxvbmciKSBpZiBkZXNpcmVkLCBhbHRob3VnaAoJdGhlcmUgYXJlIHN0aWxsIHNvbWUgZ290Y2hhcyAoc3VjaCBhcyB0aGUgcHJpbnRmKCkgZm9ybWF0Cglmb3IgdGhlICc9JyBjb21tYW5kKS4KClR1ZSBBcHIgMTQgMTc6MzQ6NTQgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYyAoZXhlY3V0ZV9wcm9ncmFtLCBwcm9jZXNzX2ZpbGVzLCBjb3VudF9icmFuY2hlcywKCXNocmlua19wcm9ncmFtKTogQWRkZWQgYSBmaXJzdCBhdHRlbXB0IGF0IHByb2dyYW0gb3B0aW1pemF0aW9uLgoJV2Ugbm93IGNhbiBxdWl0IGVhcmx5IGlmIHdlIGFyZSBydW5uaW5nIHdpdGggdGhlICItbiIKCWFuZCBhbGwgb2YgdGhlIGNvbW1hbmRzIGFyZSBrbm93biB0byBiZSB2YWxpZCBvbmx5IGZvcgoJbGluZXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGxpbmUuICBUaHVzIHRoZSAic2VkIiBpbgoJImZvbyB8IHNlZCAtbiAxLDJwIiB3aWxsIHByaW50IHJlYWQgdGhyZWUgbGluZXMsIHByaW50aW50Cgl0aGUgZmlyc3QgdHdvLCBhbmQgdGhlbiBxdWl0LCByZWdhcmRsZXNzIG9mIGhvdyBtdWNoIGxvbmdlcgoJImZvbyIgbWlnaHQgcnVuIG9yIG91dHB1dC4gIFRoaXMgb3B0aW1pemF0aW9uIGRvZXMgbm90IGJ1eQoJbXVjaCBpbiBtb3N0IGNhc2VzIChpdCBzb21ldGltZXMgZXZlbiBjb3N0cyBhIGxpdHRsZSksCglidXQgd2hlbiBpdCBkb2VzIGhlbHAgaXQgY2FuIGhlbHAgYmlnLiAgVGhlIGNvZGUgaXMKCWFsbCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZQoJRVhQRVJJTUVOVEFMX0RBU0hfTl9PUFRJTUlaQVRJT04gc3ltYm9sIGJlaW5nICNkZWZpbmVkLAoJc28gaXQgY2FuIGJlIGVhc2lseSBvbWl0dGVkIGlmIGl0IGNhdXNlcyBwcm9ibGVtcy4KClR1ZSBBcHIgMTQgMTI6MjU6MDYgUERUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYyAodGVzdF9kb2xsYXJfRU9GLCBsYXN0X2ZpbGVfd2l0aF9kYXRhX3ApOgoJdGVzdF9kb2xsYXJfRU9GKCkgd2FzIGluY29ycmVjdGx5IHJldHVybmluZyBhIGZhbHNlICgwKQoJd2hlbiB0aGVyZSB3ZXJlIHVucHJvY2Vzc2VkIGZpbGVzLCBub25lIG9mIHdoaWNoIGhhZCBhbnkKCWRhdGEgKGVpdGhlciB1bm9wZW5hYmxlIG9yIHplcm8tbGVuZ3RoKS4gIENyZWF0ZWQKCWxhc3RfZmlsZV93aXRoX2RhdGFfcCgpIHRvIGRldGVjdCB0aGlzIHNpdHVhdGlvbiwgYW5kCgltb2RpZmllZCB0ZXN0X2RvbGxhcl9FT0YoKSB0byBtYWtlIHVzZSBvZiBpdC4KClRodSBBcHIgIDIgMjM6MDI6MTggUFNUIDE5OTggIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbXBpbGUuYyAobWF0Y2hfc2xhc2gpOiBtYXRjaF9zbGFzaCgpIGRpZCBub3QgaGFuZGxlCglbLmNvbGwuXSwgWz1lcXVpdj1dLCBhbmQgWzpjbGFzczpdIHNlcXVlbmNlcyB3aXRoaW4gYQoJY2hhcmFjdGVyIGNsYXNzLiAgQWRkZWQgc25hcmZfY2hhcl9jbGFzcygpIFt3aGljaCBpcyBhCglyZW1vdGUgZGVyaXZhdGl2ZSBvZiBwYXJzZV9jaGFyX2NsYXNzKCkgZnJvbSBHTlUgZWQtMC4yXQoJdG8gZGVhbCB3aXRoIHRoZSBkZXRhaWxzLCBhbmQgYWx0ZXJlZCBtYXRjaF9zbGFzaCgpCgl0byBtYWtlIHVzZSBvZiBpdC4gIEFsc28gY3JlYXRlZCB0aGUgdHJpdmlhbAoJYWRkX3RoZW5fbmV4dCgpIHRvIGF2b2lkIGNsdXR0ZXIgaW4gc25hcmZfY2hhcl9jbGFzcygpLgoKVGh1IEFwciAgMiAyMDozNDo0MiBQU1QgMTk5OCAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jLCBzZWQuYywgc2VkLmg6IFRoZXJlIHdhcyBhIHNldmVyZSBidWcgaW4KCWhvdyB0aGUgY29kZSBoYW5kbGVkICJzZWQgNW4gYSBiIiB3aGVuICJhIiBjb25zaXN0cwoJb2YgZXhhY3RseSBmaXZlIGxpbmVzIC0tIGl0IGJlaGF2ZWQgbGlrZSAic2VkIDVxIGEgYiIhCgoJUmVhcnJhbmdlZCB3aGVyZSBmaWxlcyBnZXQgb3BlbmVkIC0tIGxhcmdlIHNjYWxlCgljaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZpbmcgbWFpbigpLCBwcm9jZXNzX2ZpbGVzKCksCglhbmQgcmVhZF9wYXR0ZXJuX3NwYWNlKCksIGJ1dCBhbHNvIHRvdWNoaW5nIG9uIHNldmVyYWwKCW90aGVyIHBhcnRzIG9mIGV4ZWN1dGUuYy4gIFRoZSByZWFkX3BhdHRlcm5fc3BhY2UoKQoJZnVuY3Rpb24gYmVjYW1lIHVud2llbGRseSBhbmQgcGFydHMgd2VyZSBzcGxpdCBpbnRvCglvcGVuX25leHRfZmlsZSgpLCBjbG9zZWRvd24oKSwgcmVhZF9hbHdheXNfZmFpbCgpLAoJcmVhZF9tZW1fbGluZSgpLCBhbmQgcmVhZF9maWxlX2xpbmUoKS4gIFRoZQoJYXRfZW5kX29mX2ZpbGVfcCgpIGZ1bmN0aW9uIGJlY2FtZSBvYnNvbGV0ZSBhbmQgd2FzCgllbGltaW5hdGVkOyB0ZXN0X2RvbGxhcl9FT0ZfcCgpIHdhcyB1cGRhdGVkLiAgQSBmZXcKCWdsb2JhbCBhbmQgbW9kdWxlLXN0YXRpYyB2YXJpYWJsZXMgd2VyZSBlbG1pbmF0ZWQsIGFuZAoJInN0cnVjdCBsaW5lIiB3YXMgZXh0ZW5kZWQ7IGNvbW1lbnRzIHdlcmUgYWRkZWQgdG8gdGhlCgkic3RydWN0IGxpbmUiIGRlY2xhcnRhdGlvbiB0byBkb2N1bWVudCBzb21lIGltcG9ydGFudAoJZGVwZW5kZW5jaWVzIGluIGl0LgoKCUkgdW5kZXJ0b29rIHRoZSByZW9yZ2FuaXphdGlvbiB3aXRoIGRyZWFkLCBidXQgSQoJZmVlbCB0aGF0IHRoZSBuZXcgb3JnYW5pemF0aW9uIGlzIGFuIGltcHJvdmVtZW50Cgl3ZWxsIGJleW9uZCBqdXN0IGZpeGluZyB0aGUgYnVnIHRoYXQgaW5zcGlyZWQgaXQuCgpUaHUgQXByICAyIDAxOjE2OjI1IFBTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBleGVjdXRlLmMgKHJlYWRfZmlsZV9saW5lLCBzbG93X2dldGxpbmUpOiB0aGUgZnJlYWQoKQoJYnVmZmVyaW5nIGNvZGUgZ2l2ZXMgaW5zdWZmaWNpZW50IGZlZWRiYWNrIHRvIGEgdXNlcgoJcnVubmluZyBzZWQgd2l0aCBhIHR0eSBpbnB1dCBkZXZpY2UsIHNvIEkgY3JlYXRlZAoJc2xvd19nZXRsaW5lKCkgZm9yIHJlYWRpbmcgZnJvbSBhIHR0eSBkZXZpY2UuCglBZGRpdGlvbmFsbHksIEVPRiBkZXRlY3Rpb24gaGFzIGJlZW4gbWFkZSBhIGxpdHRsZSBtb3JlCglzZW5zaXRpdmUgdG8gYXZvaWQgcmVxdWlyaW5nIG11bHRpcGxlIEVPRnMgdG8gYmUgZW50ZXJlZAoJZnJvbSBhIHR0eS4KCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgaXNhdHR5KCkgY2hlY2suCgpXZWQgQXByICAxIDExOjA0OjMwIFBTVCAxOTk4ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4gKENQUEZMQUdTLCBMREZMQUdTLCBMSUJTKToKCVNldCB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgaWYgbGFyZ2UgZmlsZSBzdXBwb3J0IG5lZWRzCglleHBsaWNpdCBlbmFibGluZy4gIENvZGUgZnJhZ21lbnQgdGFrZW4gZnJvbSBhIDE5OTctMTAtMjUKCXBhdGNoIHRvIGdhd2sgYnkgUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4KClRodSBBdWcgMTQgMTc6NDM6MjcgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHV0aWxzLmMgKGNrX2ZjbG9zZSk6IG1vZGlmaWVkIHRvIGlnbm9yZSBOVUxMIHBhcmFtZXRlci4KClRodSBBdWcgMTQgMTI6MDg6NDUgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYzogdHdlYWtlZCBleGVjdXRlX3Byb2dyYW0oKSB0byBlbGltaW5hdGUKCWdyYXR1aXRvdXMgImdvdG8iIHVzYWdlLgoKVGh1IEF1ZyAxNCAxMTozMDowNCBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29tcGlsZS5jOiBhZGRlZCBjYXNlLWluc2Vuc2l0aXZlIG1vZGlmaWVyICgnSScpIHRvCglhZGRyZXNzIGFuZCBzLy8vIHJlZ2V4cHMuICBUaGUgcy8vLyBjYXNlIGFsc28gYWNjZXB0cwoJdGhlIG1vcmUgcG9wdWxhciAnaScgbW9kaWZpZXIuICAoVGhlIGFkZHJlc3MgcmVnZXhwCgljYW5ub3QgdXNlICdpJyBhcyBhIG1vZGlmaWVyLCBhcyB0aGF0IGNvbmZsaWN0cyB3aXRoCgl0aGUgdXNlIG9mIHRoZSAnaSduc2VydCBjb21tYW5kLikKClRodSBBdWcgMTQgMDk6Mjk6MDYgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbXBpbGUuYzogYWJzdHJhY3RlZCBvdXQgbWF0Y2hfc2xhc2goKSBmcm9tIHRoZSBzLy8vLCB5Ly8vLAoJYW5kIGFkZHJlc3MtcmVnZXhwIHNwZWNpYWwtY2FzZSBjb2Rlcy4KCgkqIGV4ZWN1dGUuYzogbWFkZSBkdW1wX2FwcGVuZF9xdWV1ZSgpIHVzZSBja19mcmVhZCgpIGluc3RlYWQKCW9mIGhhbmQtcm9sbGVkIGVycm9yIGNoZWNraW5nLgoKTW9uIEp1bCAyOCAxMDo1MDo0MSBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkLmMsIHNlZC5oLCBleGVjdXRlLmM6IFBPU0lYLjIsIHNlY3Rpb24gNC41NS43LCBzYXlzIHRoYXQKCWEgbmV3bGluZSBtdXN0IGVuZCAqZXZlcnkqIG91dHB1dCBsaW5lLiAgQnV0IEkgdGhpbmsgdGhhdAoJaXQgaXMgdXNlZnVsICh3aGVuIHNlZGluZyBhIGJpbmFyeSBmaWxlKSB0byBvbWl0IGEgdHJhaWxpbmcKCW5ld2xpbmUgaWYgdGhlIGlucHV0IGxhY2tzIG9uZS4gIFRodXMgdGhlIGFkZGl0aW9uIG9mCglQT1NJWExZX0NPUlJFQ1QgYmVoYXZpb3IuCgoJKiBleGVjdXRlLmM6IGhvd2V2ZXIsIHdoZW4gc2VkaW5nIG11bHRpcGxlIGZpbGVzIG15IGZlZWxpbmcKCWlzIHRoYXQgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBlYWNoIGZpbGUgYnV0IHRoZSBsYXN0CgliZWhhdmUgYXMtaWYgaXQgZW5kZWQgaW4gYSBuZXdsaW5lLiAgTW9kaWZpZWQgcmVhZF9wYXR0ZXJuX3NwYWNlKCkKCWFjY29yZGluZ2x5LgoKCSogdXRpbHMuYzogcmVhbGl6ZWQgdGhhdCBhZGQxX2J1ZmZlcigpLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywKCXNob3VsZG4ndCBiZSBjYWxsaW5nIG1lbWNweSgpIChpbmRpcmVjdGx5IHZpYSBhZGRfYnVmZmVyKCkpLAoJc28gcmV3cm90ZSBpdC4KClNhdCBKdWwgMjYgMjM6MDg6MjggUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGV4ZWN1dGUuYzogYXR0ZW1wdGVkIHRvIG1ha2UgcmVhZF9wYXR0ZXJuX3NwYWNlIG1vcmUKCWVmZmljaWVudCBmb3IgdGhlIHRoZSBub24tbW1hcCgpIGNhc2UuCgoJKiB1dGlscy5jLCB1dGlscy5oLCBleGVjdXRlLmM6IG5ldyBmdW5jdGlvbiBja19mcmVhZCgpCgljcmVhdGVkIGFuZCB1c2VkLgoKU2F0IEp1bCAyNiAyMDoyMjoxNCBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogZXhlY3V0ZS5jLCBjb21waWxlLmMsIHNlZC5jOiBhYnN0cmFjdGVkIHRoZSBtbWFwKCkKCWludGVyZmFjZSBpbnRvIG1hcF9maWxlKCkvdW5tYXBfZmlsZSgpIFtzZWQuY10sIGFuZAoJY2hhbmdlZCB0aGUgYWQtaG9jIGNvZGUgaW4gY29tcGlsZV9maWxlKCkgW2NvbXBpbGUuY10KCWFuZCBwcm9jZXNzX2ZpbGUoKSBbZXhlY3V0ZS5jXSB0byBtYWtlIHVzZSBvZiB0aGUgbmV3CglpbnRlcmZhY2UuCgpTYXQgSnVsIDI2IDE5OjQ1OjQ2IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBleGVjdXRlLmMsIGNvbXBpbGUuYywgY29uZmlndXJlLmluOiBDaGVjayB0byBzZWUgaWYgbW1hcCgpCglpcyBhdmFpbGFibGU7IGlmIHNvIG1ha2UgdXNlIG9mIGl0IG9uIHJlZ3VsYXIgZmlsZXMuCgoJKiBjb21waWxlLmM6IGNvbXBpbGVfZmlsZSgpIG5vdyBjbG9zZXMgdGhlIGlucHV0IGZpbGUKCXdoZW4gaXQgaXMgdGhyb3VnaCEKClN1biBKdWwgMjAgMjM6NTc6MDIgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIGNvbXBpbGUuYzogbW9kaWZpZWQgcGFyc2luZyB0byBwZXJtaXQgd2hpdGVzcGFjZSBpbiBtb3JlCglwbGFjZXMgd2hlcmUgaXQgbWFrZXMgc2Vuc2U7CglhZGRlZCBiYWNrc2xhc2ggZXNjYXBpbmcgdG8gdGhlIHkvLy8gY29tbWFuZCwgcGVyIFBPU0lYLgoKCSogZXhlY3V0ZS5jOiBNZXJnZWQgYXBwZW5kX3BhdHRlcm5fc3BhY2UoKSBpbnRvIHJlYWRfcGF0dGVybl9zcGFjZSgpOwoJbW92ZWQgYm9keSBvZiAncycgY29tbWFuZCB0byBuZXcgZnVuY3Rpb24gZG9fc3Vic3QoKTsKCW1vdmVkIGJvZHkgb2YgJ2wnIGNvbW1hbmQgdG8gbmV3IGZ1bmN0aW9uIGRvX2xpc3QoKTsKCWNoYW5nZWQgb3V0cHV0IG9mICdsJyBjb21tYW5kIHRvIGNvbmZvcm0gdG8gUE9TSVguMjsKCW1hZGUgbGluZSBoYW5kbGluZyBjb25mb3JtIHRvIFBPU0lYOyBhZGRlZCBvdXRwdXRfbGluZSgpIGZ1bmN0aW9uOwoJcmVkZXNpZ25lZCBhcHBlbmQtc3BhY2UgYWxnb3JpdGhtOyBhZGRlZCBhcHBlbmRfcXVldWUgc3RydWN0dXJlIGFuZAoJdGhlIG5leHRfYXBwZW5kX3Nsb3QoKSBhbmQgZHVtcF9hcHBlbmRfcXVldWUoKSBmdW5jdGlvbnMuCgoJKiBzZWQuaDogbW92ZWQgdGhlIGRlZmluaXRpb24gb2Ygd2hhdCBpcyBub3cgc3RydWN0IHN1YnN0CglvdXRzaWRlIG9mIHRoZSBkZWZpbml0aW9uIG9mIHN0cnVjdCBzZWRfY21kLgoKU2F0IEp1bCAxOSAxNjoyOTowOSBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogc2VkLmMsIGV4ZWN1dGUuYywgc2VkLmgsIE1ha2VmaWxlLmFtOiBTZXBhcmF0ZWQgb3V0IHRoZQoJcGllY2VzIGRlYWxpbmcgd2l0aCBleGVjdXRpbmcgdGhlIHByb2dyYW0gZnJvbSB0aGUgdG9wLWxldmVsCglwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29udHJvbC4KClNhdCBKdWwgMTkgMDE6MTY6MzUgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC5jLCBjb21waWxlLmMsIHNlZC5oLCBNYWtlZmlsZS5hbTogc2VwYXJhdGUgb3V0IHRoZQoJcGllY2VzIGRlYWxpbmcgd2l0aCBjb21waWxpbmcgdGhlIHByb2dyYW0gZnJvbSB0aGUgcGllY2VzCglkZWFsaW5nIHdpdGggaW50ZXJwcmV0aW5nIHRoZSByZXN1bHQuCgoJKiBjb21waWxlLmM6IGFkZCBmdW5jdGlvbnMgaW5fbm9uYmxhbmsoKSBhbmQgaW5faW50ZWdlcigpLAoJYW5kIGNoYW5nZSBpbnRlcmZhY2UgdG8gY29tcGlsZV9hZGRyZXNzKCkgd2l0aCBhbiBleWUKCXRvIG1ha2luZyBjb2RlIGNsZWFyZXIuCgpGcmkgSnVsIDE4IDEzOjM1OjUwIFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiB1dGlscy5jOiBhdHRlbXB0IGF0IGEgcXVhc2ktdW5pZmljYXRpb24gb2YgdGhlCglTVERDIGFuZCB0cmFkaXRpb25hbCBDIGFwcHJvYWNoZXMgdG8gcGFuaWMoKS4KCgkqIHNlZC5jOiBlbGltaW5hdGUgc29tZSBncmF0dWl0b3VzIGJpdCB0d2lkZGxpbmcuCgkoVXNpbmcgZmxhZyBiaXRzIGNhbiBiZSBhIHVzZWZ1bCB0ZWNobmlxdWUsIGJ1dAoJdGhpcyBjb2RlIGlzIGNsZWFuZXIgd2l0aG91dCB0aGVtLikKCgkqIHNlZC5jOiBwbGFjZSBtdXR1YWxseSBleGNsdXNpdmUgbWVtYmVycyBvZiBzdHJ1Y3QgYWRkcgoJd2l0aGluIGEgdW5pb24sIG1haW5seSB0byBkb2N1bWVudCB0aGUgZXhjbHVzaXZpdHk7CgllbGltaW5hdGUgdW51c2VkIHN0cnVjdHVyZSBtZW1iZXJzIGZyb20gc3RydWN0IGZwX2xpc3Q7CgllbGltaW5hdGUgdW5uZWNlc3NhcnkgbW9kdWxlLWdsb2JhbCB2YXJpYWJsZXM7CglyZW1vdmUgc29tZSAjaWYgMCBjb2RlIHRoYXQgaXMgdG9vIG9kZCB0byBrZWVwOwoJYWxsZWdlZGx5IHNpbXBsaWZpZWQgdGhlICdsJyBjYXNlIG9mIGV4ZWN1dGVfcHJvZ3JhbSgpOwoJYWxsZWdlZGx5IHNpbXBsaWZpZWQgaW5jaGFyKCk7Cglsb2NhbGl6ZWQgc29tZSBzdGF0aWMgdmFyaWFibGVzOwoJcmVuYW1lZCBzb21lIHZhcmlhYmxlcyB0byBiZXR0ZXIgZG9jdW1lbnQgdGhlaXIgcHVycG9zZTsKCXJlbW92ZWQgc29tZSBnb3RvLXMgcmVuZGVyZWQgb2Jzb2xldGUgYnkgb3RoZXIgY2hhbmdlcy4KClRodSBKdWwgMTcgMTU6MzA6NDQgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHV0aWxzLmMsIHV0aWxzLmgsIHNlZC5jOiBhZGRlZCBhbmQgbWFkZSB1c2Ugb2YKCWNrX2ZyZWUoKSBmdW5jdGlvbi4KCgkqIHV0aWxzLmMsIHV0aWxzLmgsIHNlZC5jOiBjaGFuZ2VkIGFsbCB0aGUgKl9idWZmZXIoKQoJZnVuY3Rpb25zIHRvIHRha2UvcmV0dXJuIGFuIGluY29tcGxldGUgdHlwZQoJInN0cnVjdCBidWZmZXIgKiIgaW5zdGVhZCBvZiB1c2luZyBWT0lEICouCgoJKiB1dGlscy5jLCB1dGlscy5oLCBzZWQuYzogcmVuYW1lZCAiZmluaXNoX2J1ZmZlcigpIgoJdG8gImZyZWVfYnVmZmVyKCkiLCBvbiB0aGUgcHJlbWlzZSB0aGF0IHRoZSBuZXcKCW5hbWUgYmV0dGVyIGRlc2NyaWJlcyB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlLgoKV2VkIEp1bCAxNiAxMzo1MjoxNCBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogdXRpbHMuYywgdXRpbHMuaCwgc2VkLmM6IGFkZGVkIGFuZCBtYWRlIHVzZSBvZgoJY2tfbWVtZHVwKCkgZnVuY3Rpb24uCgoJKiBzZWQuYzogcHJvdGVjdGVkIGEgY2FsbCB0byBhZGQxX2J1ZmZlcigpIGluCgljb21waWxlX3Byb2dyYW0oKSB3aGljaCBjb3VsZCBoYXZlIHRyaWVkIHRvCglwdXNoIGFuIEVPRiBpZiBhIGEvaS9jIGNvbW1hbmQgZW5kZWQgd2l0aAoJYSAnXCcsIEVPRiBzZXF1ZW5jZS4KCgkqIHV0aWxzLmM6IGFkZGVkIHNhbml0eSBjaGVjayB0byBhZGQxX2J1ZmZlcigpIHNvIHRoYXQKCUVPRiB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgYnVmZmVyLgoKV2VkIEp1bCAxNiAwMzo1NjoyNiBQRFQgMTk5NyAgS2VuIFBpenppbmkgPGtlbkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluLCBjb21wYXQuaCwgY29tcGF0LmM6IGFkZGVkIG1lbWNoci4KCgkqIHNlZC5jOiBnb3QgcmlkIG9mIGFyYml0cmFyeSBOVU1fRlBTIGxpbWl0OwoJbWFkZSBnbG9iYWwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgInN0YXRpYyIgd2hlcmUgYXBwcm9wcmlhdGU7CgltYWtlIHZhcmlvdXMgY29zbWV0aWMgY2hhbmdlcywgaG9wZWZ1bGx5IGltcHJvdmluZyByZWFkYWJpbGl0eTsKCXNpbXBsaWZpZWQgc29tZSByZWR1bmRhbnQgcHJlZGljYXRlczsKCXNpbXBsaWZpZWQgc29tZSBjb2RlLCBidXQgbm90aGluZyBmdW5kYW1lbnRhbCAoeWV0PykuCgpXZWQgSnVsIDE2IDAwOjI0OjU0IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBhbGxvY2EuYywgZ2V0b3B0LmMsIGdldG9wdC5oLCBnZXRvcHQxLmM6IHVwZGF0ZWQgZnJvbQoJdmVyc2lvbnMgaW4gdGV4dHV0aWxzLTEuMjIuCgoJKiBNYWtlZmlsZS5pbiwgTWFrZWZpbGUuYW0sIGNvbmZpZ3VyZS5pbjogcHV0IGluIGF1dG9tYWtlIHN1cHBvcnQuCgoJKiBiYXNpY2RlZnMuaCwgY29tcGF0LmgsIGNvbXBhdC5jIFssIHNlZC5jLCB1dGlscy5jXTogdG9vayBvdXQKCXNvbWUgdmVyeSB1Z2x5IGNvbXBhdGliaWxpdHkgI2lmZGVmcyBhbmQgcGFja2FnZWQgaW50byBvbmUKCXBsYWNlLgoKCSogc2VkLmMsIHV0aWxzLmM6IHNvbWUgZ3JhdHVpdG91cyBmb3JtYXR0aW5nIGNoYW5nZXMuCgoJKiB1dGlscy5jOiBjaGFuZ2VkIGRhdGF0eXBlIG9mIHV0aWxzX2lkX3MgaW4gb3JkZXIgdG8KCWVsaW1pbmF0ZSBhcmJpdHJhcnkgYXJyYXkgc2l6ZS4KClN1biBKdWwgMTMgMTc6MDA6MjYgUERUIDE5OTcgIEtlbiBQaXp6aW5pIDxrZW5AZ251Lm9yZz4KCgkqIHNlZC5jLCB1dGlscy5jLCB1dGlscy5oOiBkZS1saW50aW5nIG9yaWVudGVkIGNsZWFudXAuCgpTdW4gSnVsIDEzIDAwOjQ2OjQ4IFBEVCAxOTk3ICBLZW4gUGl6emluaSA8a2VuQGdudS5vcmc+CgoJKiBzZWQuYzogZml4ZWQgYnVnIHdoaWNoIGNhdXNlZCBTRUdWIGZvciBmaWxlcyBtaXNzaW5nIGEKCWZpbmFsIG5ld2xpbmUuICBDb3JyZWN0ZWQgY2FsbHMgdG8gcmVnbmV4ZWMgdG8gcGFzcyB0aGUKCXByb3BlciBwYXJhbWV0ZXJzLCBpbiB0aGUgcHJvcGVyIG9yZGVyLgoKU2F0IERlYyAzMCAyMDoxNjo1OSAxOTk1ICBUb20gTG9yZCAgPGxvcmRAYmVlaGl2ZT4KCgkqKiogVmVyc2lvbiAzLjAwIHJlbGVhc2VkCgkKCSogc2VkLmM6IFVzZSBwb3NpeCBlbnRyeSBwb2ludHMgdG8gcmVnZXhwIGZ1bmN0aW9ucy4KCUZpeCBlbm91Z2ggYnVncyB0byBwYXNzIHRoZSB0ZXN0LXN1aXRlLgoKLi4uLi4uLiBKYXNvbiBNb2xlbmRhICA8Y3Jhc2hAY3lnbnVzLmNvbT4KCgkqIHRlc3RzdWl0ZS86IHRyaXBweSB0ZXN0IHN1aXRlLgoKCldlZCBNYXkgMTEgMDc6NDY6MjQgMTk5NCAgQ2hpcCBTYWx6ZW5iZXJnICAoY2hpcEBmaW4udXVjcCkKCgkqKiogVmVyc2lvbiAyLjA1IHJlbGVhc2VkCgkKCSogc2VkLmMgKGNvbXBpbGVfYWRkcmVzcyk6IFJlY29nbml6ZSBudW1lcmljIGFkZHJlc3Nlcy4KCUZpeGVzIHR5cG8gbWFkZSBkdXJpbmcgaW5zdGFsbGF0aW9uIG9mICJ+IiBmZWF0dXJlLgoKU2F0IEFwciAzMCAxNzoxNzozOCAxOTk0ICBUb20gTG9yZCAgKGxvcmRAeDEuY3lnbnVzLmNvbSkKCgkqKiogVmVyc2lvbiAyLjA0IHJlbGVhc2VkCgoJKiBzZWQuYzogYXBwbGllZCBhIHBhdGNoIGZyb20KCSBGcm9tOiBrYXAxQHRhby5jcGUudWNoaWNhZ28uZWR1IChEaWV0cmljaCBLYXBwZSkKCgkgRGlldHJpY2ggd3JpdGVzOgoKCSBBcyBteSBjb250cmlidXRpb24gdG8gdGhlIGNyZWVwaW5nIGZlYXR1cmUgY3JlYXR1cmUgaW4gc2VkLAoJIGhlcmUgaXMgYSBuZXcgdHlwZSBvZiBhZGRyZXNzLiBUaGUgYWRkcmVzcyBoYXMgZm9ybSBufm0sCgkgd2hpY2ggbWVhbnMgInRoZSBsaW5lIG51bWJlciBpcyBlcXVhbCB0byBuIG1vZHVsbyBtLiIgVGhlCgkgbW9kaWZpY2F0aW9ucyB0byBzZWQgYXJlIHRyaXZpYWwsIGFuZCB0aGUgZ2VuZXJhbAoJIHVzZWZ1bG5lc3Mgb2YgdGhpcyBhZGRyZXNzIHNob3VsZCBiZSBvYnZpb3VzLiBJZiBtIGlzIDAgb3IKCSBtaXNzaW5nLCAxIGlzIHVzZWQgaW4gaXRzIHBsYWNlIChjb3VsZCBiZSBhIGJ1ZyBvciBhCgkgZmVhdHVyZSA6LSkuCgpTYXQgQXByIDMwIDE3OjE3OjM4IDE5OTQgIFRvbSBMb3JkICAobG9yZEB4MS5jeWdudXMuY29tKQoKCSogcnguYyAoc29sdmVfZGVzdGluYXRpb24pOiBwcm90ZWN0IGBzb2x1dGlvbicgbW9yZSBjYXJlZnVsbHkuCglUaGlzIGlzIGEgY2xlYW51cCBvZiBhIHBhdGNoIGZyb20gS2V2aW4gQnVldHRuZXIKCSAoa2V2QGN1am8uZ2VnLm1vdC5jb20pLgoKU2F0IEFwciAzMCAxNzoxNzozOCAxOTk0ICBUb20gTG9yZCAgKGxvcmRAeDEuY3lnbnVzLmNvbSkKCgkqIHJ4LmM6IG1ha2UgdHJhbnNsYXRpb24gdGFibGVzIHVuc2lnbmVkIGNoYXJzCgoJKiBzZWQuYyAobWFpbik6IENvbXBpbGUgYWNjdW11bGF0ZWQgLWUgY29tbWFuZHMgYXMKCXNvb24gYXMgYSAtZiBjb21tYW5kIGNvbWVzIGFsb25nLiAgVGhpcyBlbnN1cmVzIHRoYXQKCXRoZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgaW4gdGhlIHJpZ2h0IG9yZGVyLgoKTW9uIE9jdCAyNSAxNDo0MTo0NyAxOTkzICBUb20gTG9yZCAgKGxvcmRAcnRsLmN5Z251cy5jb20pCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogJ3cnIGZsdXNoZXMgdGhlIGJ1ZmZlciBhZnRlciBpdAoJd3JpdGVzIC0tIGRpYWdub3NlZCBieSBkb3VnQHJlc2VhcmNoLmF0dC5jb20uICAncicgYW5kICd3JyB0bwoJdGhlIHNhbWUgZmlsZSBpcyBub3cgc3VwcG9ydGVkIC0tIGhvcGVmdWxseSBldmVuIGluIGEgd2F5IHRoYXQKCXNhdGlzZmllcyBQb3NpeCAoaXQgbm93IGJlaGF2ZXMgZGlmZmVyZW50bHkgZnJvbSBzb21lCgkvYmluL3NlZCdzIGFuZCB0aGUgc3BlYyBpcyBoYXJkIHRvIHJlYWQgc28gaSdtIG5vdCBzdXJlKS4KCglBbHNvLCAncicgb2YgYSBub24tZXhpc3RlbnQgZmlsZSBpcyBub3cgcGVybWl0dGVkLgoKTW9uIE9jdCAxMSAyMTowNjoxMCAxOTkzICBUb20gTG9yZCAgKGxvcmRAY3lnbnVzLmNvbSkKCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0pOiByZW1lbWJlciB0aGF0ICdiJyBhbmQgJ3QnIGFyZSBtb3JlCglsaWtlIGxvbmdqbXAgdGhhbiBnb3RvLiAgUGF0Y2ggZnJvbSB0b21AYmFzaWwuaWNjZS5ydWcubmwgKFRvbQoJUi5IYWdlbWFuKQoKCSogcnguYzogcGF0Y2ggZnJvbSBGcm9tOiBmaW4hY2hpcEBydXRnZXJzLmVkdSAoQ2hpcAoJU2FsemVuYmVyZykgdG8gZ2V0IHJpZCBvZiBjb21waWxlciB3YXJuaW5ncy4KCgpTYXQgQXVnICA3IDAxOjA0OjU5IDE5OTMgIFRvbSBMb3JkICAobG9yZEB1bml4Ny5hbmRyZXcuY211LmVkdSkKCgkqKiogVmVyc2lvbiAyLjAzIHJlbGVhc2VkCgkKCSogc2VkLmMgKGNvbXBpbGVfcmVnZXgpOiByZXBvcnQgZXJyb3IgbWVzc2FnZXMgZm9yIGJvZ3VzCglyZWdleHBzLgoKCVNFRSBBTFNPOiAgQ2hhbmdlTG9nLnJ4CgoMCldlZCBKdWwgMjEgMDA6Mjg6MDMgMTk5MyAgVG9tIExvcmQgIChsb3JkQHVuaXg4LmFuZHJldy5jbXUuZWR1KQoKCSogYWxsb2NhLmM6IHVwZ3JhZGVkIHRvIGEgbW9yZSByZWNlbnQgdmVyc2lvbgoKCSogcnguYyAocmVfc2VhcmNoXzIpOiBwcmVmZXIgbWF0Y2hlcyB3aXRoIGxvbmdlcgoJc3ViZXhwcmVzc2lvbnMgdG8gdGhvc2Ugd2l0aCBzaG9ydGVyIG9uZXMsIGdpdmluZyBwcmVjZWRlbmNlCgl0byBsb3cgbnVtYmVyZWQgc3ViZXhwcmVzc2lvbnMuCgoJKiByeC5jIChyZV9jb21waWxlKTogZG9uJ3QgZnJlZSBgcGFyYW1zJyBpZiBpdHMgbnVsbC4KCkZyaSBKdWwgMTYgMDE6MTI6MDggMTk5MyAgVG9tIExvcmQgIChsb3JkQHVuaXg4LmFuZHJldy5jbXUuZWR1KQoKCSogcnguW2NoXSwgc2VkLmM6IHJ4IHJlcGxhY2VzIHJlZ2V4LgoKCgpUaHUgTWF5IDI3IDExOjEzOjAzIDE5OTMgIFRvbSBMb3JkICAobG9yZEB1bml4My5hbmRyZXcuY211LmVkdSkKCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0sIG1hdGNoX2FkZHIpOiBjYXVnaHQgbW9yZSBjYXNlcwoJdGhhdCBuZWVkIHRvIGJlIHNlbnNpdGl2ZSB0byBhIG1pc3NpbmcgXG4gYXQgRU9GLgoKRnJpIE1heSAyMSAwMDozOToyMiAxOTkzICBUb20gTG9yZCAgKGxvcmRAdW5peDguYW5kcmV3LmNtdS5lZHUpCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogYXBwbHkgZ2F1bW9uZHAncyBwYXRjaAoJdG8gZml4ICdceGFiY3hzL2Zvby9iYXIvJy4KCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0pOgoJSWYgYSBzZWNvbmQgYWRkcmVzcyBpcyBhIHJlZ2V4cCwgbmV2ZXIgbWF0Y2ggaXQgb24gdGhlCglzYW1lIGxpbmUgYXMgdGhlIGZpcnN0IGFkZHJlc3MuCgoJKiBzZWQuYyAoY29tcGlsZV9yZWdleHApOgoJTnVtZXJpYyByYW5nZXMgIHgseSBzLnQuIHkgPCB4IGFyZSBub3cgdHJlYXRlZCBhcyB4LHguCglUaGVyZSB3YXMgYSBidWcgaW4gdGhhdCB0aGV5IHdlcmUgYmVpbmcgaGFuZGxlZCBsaWtlIHgseCsxLgoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSwgcmVhZF9wYXR0ZXJuX3NwYWNlLAoJYXBwZW5kX3BhdHRlcm5fc3BhY2UpIGRvbid0IGFkZCBuZXdsaW5lcyB0byBsaW5lcwoJdGhhdCBkb24ndCBoYXZlIHRoZW0uCgpXZWQgTWF5IDE5IDEzOjM0OjQ1IDE5OTMgIFRvbSBMb3JkICAobG9yZEB1bml4OS5hbmRyZXcuY211LmVkdSkKCgkqIHNlZC5jIChjb21waWxlX3Byb2dyYW0pOiBncm9rIFxcbiBpbiBjb21tZW50cy4KCk1vbiBNYXkgMTcgMTY6MzQ6NTAgMTk5MyAgVG9tIExvcmQgIChsb3JkQHVuaXg5LmFuZHJldy5jbXUuZWR1KQoKCSogYWxsb2NhLmM6IG5ldyAoc3RhbmRhcmQpIGZpbGUKCgkqIGNvbmZpZ3VyZS5pbjogQUNfQ09OU1RpZmllZAoKCSogc2VkLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IHByb3Blcmx5IGRpYWdub3NlIHRoZSBlcnJvciBvZgoJYSBtaXNzaW5nIGNvbW1hbmQgKGUuZy4gc2VkIC94LykuICh0aGFua3MgZ2F1bW9uZHApCgoJKiBzZWQuYyAoY29tcGlsZV9yZWdleHApOiBoYW5kbGUgY2hhcmFjdGVyIGNsYXNzZXMgY29ycmVjdGx5LgoJVGhhbmtzIGdhdW1vbmRwQEVSRS5VTW9udHJlYWwuQ0EKCWFuZCAgc2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlLgoKVGh1IE1heSAgNiAxMjozNzoxOCAxOTkzICBUb20gTG9yZCAgKGxvcmRAdW5peDEwLmFuZHJldy5jbXUuZWR1KQoKCSogc2VkLmMgKGNvbXBpbGVfZmlsZW5hbWUsIGV4ZWN1dGVfcHJvZ3JhbSk6IGRvbid0IHVzZQoJYGFjY2Vzcycgb3IgYC9kZXYvbnVsbCcuCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtKTogJ04nIGF0IEVPRiBzaG91bGQgZGVsZXRlIHRoZSBwYXQgYnVmLgoKCSogc2VkLmMgKGNvbXBpbGVfZmlsZW5hbWUpOiB0cnVuY2F0ZSwgZG9uJ3QgYXBwZW5kIGZpbGVzCgliZWluZyBvcGVubmVkIGZvciBgdycgb3IgYHMvLy93JwoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IC1uIHN3aXRjaCBzaG91bGRuJ3QgZWZmZWN0IGBpJyBvciBgYycuCgoJKiBzZWQuYyAoY29tcGlsZV9wcm9ncmFtKTogZG9uJ3QgY29tcGlsZSB1bmVzY2FwZWQgbmV3bGluZXMKCWludG8gdGhlIHN1YnN0aXR1dGlvbiBzdHJpbmcgb2YgYW4gYHMnIGNvbW1hbmQgKHRoZXkgYXJlIGFuIGVycm9yKS4KCgkqIHNlZC5jIChjb21waWxlX3JlZ2V4KTogY29ycmVjdGx5IHNraXAgb3ZlciBjaGFyYWN0ZXIKCXNldHMgdGhhdCBjb250YWluIGBdJy4KCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0pOiBwYXRjaCBmcm9tIGdhdW1vbmRwCglDb3JyZWN0bHkgaGFuZGxlIGVtcHR5LXN0cmluZyBtYXRjaGVzIGluIHRoZSBjYXNlIG9mIGFuIGBzJwoJY29tbWFuZCB3aXRoIGEgcmVwZWF0IGNvdW50LgoKCSogc2VkLmMgKGNvbXBpbGVfcHJvZ3JhbSk6IHBhdGNoIGZyb20gZ2F1bW9uZHBAZXJlLlVNb250cmVhbC5jYS4KCURvbid0IGNvbnN1bWUgY2hhcmFjdGVycyBhZnRlciB0aGUgbGFiZWwgb2YgYSBgYicsIGB0JyBvciBgOicgY29tbWFuZC4KCgkqIHNlZC5jIChjb21waWxlX3Byb2dyYW0pOiB1bm1hdGNoZWQgb3BlbiBicmFjZXMgYXJlIGFuIGVycm9yLgoKCSogc2VkLmMgKGNvbXBpbGVfZmlsZSk6IHdoZW4gY29uc3VtaW5nIGFuIGluaXRpYWwgY29tbWVudCwKCWNvdW50IGxpbmVzIGNvcnJlY3RseS4KCldlZCBOb3YgMTggMDI6MTA6NTggMTk5MiAgVG9tIExvcmQgIChsb3JkQHVuaXgyLmFuZHJldy5jbXUuZWR1KQoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IE1hZGUgcy8vL3AgcHJpbnQgZXZlbiBpZiAtbiB3YXMKCXNwZWNpZmllZC4KCgkqIHNlZC5jIChjb21waWxlX3N0cmluZyk6IENoYW5nZWQgdGhlIHR5cGUgb2YgdGhpcyBmdW5jdGlvbiB0bwoJZml4IGEgY29tcGlsZSB3YXJuaW5nLgoKV2VkIE5vdiAgNCAxNzoxNTozNCAxOTkyICBUb20gTG9yZCAgKGxvcmRAdW5peDcuYW5kcmV3LmNtdS5lZHUpCgoJKiBzZWQuYyAobWFpbik6IEluaXRpYWxpemUgdGhlIGhvbGQgYXJlYSB0byBjb250YWluICJcbiIKCWluc3RlYWQgb2YgIiIuICBJbiBleGVjdXRlX3Byb2dyYW0sIGFsbCBsaW5lcyBhcmUgZXhwZWN0ZWQKCXRvIGJlIG5ld2xpbmUgdGVybWluYXRlZC4gIEFsc28sIGlmIEggaXMgdGhlIGZpcnN0IGNvbW1hbmQKCWluIHRoZSBzY3JpcHQsIHRoZSByZXN1bHQgaXMgYSBwYXR0ZXJuIGJ1ZmZlciB0aGF0IGJlZ2lucwoJd2l0aCBhIGJsYW5rIGxpbmUuICBUaGFua3MgdG8gcGluYXJkQGlyby51bW9udHJlYWwuY2EKCShGcmFuY29pcyBQaW5hcmQpIGZvciBwb2ludGluZyBvdXQgdGhpcyBhbmQgbWFueSBvdGhlciBidWdzLgoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IEZpeGVkIGEgY2FzZSBvZiBgRCcgY29tbWFuZC4KCVRoYW5rcyBDaHJpcyBXZWJlciA8d2ViZXJAYnVja25lbGwuZWR1PgoKCSogc2VkLmM6IGFkZGVkIG5ldyB0ZXN0cyBvZiBub19kZWZhdWx0X291dHB1dCB0byBtYWtlIC1uIHdvcmsuCglUaGFua3MgQW5kcmV3IEhlcmJlcnQgPGFuZHJld0B3ZXJwbGUuYXBhbmEub3JnLmF1PgoKCSogc2VkLmMsIGNvbmZpZ3VyZS5pbixNYWtlZmlsZS5pbjogYXV0b2NvbmZlZCBiY29weSBhbmQgY29uc3QuCglUaGFua3MgIkouVC4gQ29ua2xpbiIgPGp0Y0BnYWluLmNvbT4KCgkqIHNlZC5jOiBtYWRlIHByb2dfY3VyLCBwcm9nX3N0YXJ0LCBhbmQgcHJvZ19lbmQgdW5zaWduZWQgc28KCXRoYXQgdXNlcnMgY291bGQgd3JpdGUgIGBzZWQgLWUgcy//L2Zvby9nJy4KClR1ZSBPY3QgMTMgMDA6MDQ6MDUgMTk5MiAgVG9tIExvcmQgIChsb3JkQHVuaXgzLmFuZHJldy5jbXUuZWR1KQoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IGZpeGVkIHRoZSBjeWNsaW5nIGJlaGF2aW9yIG9mICdEJwoKCSogc2VkLmM6IGludGVncmF0ZWQgcGF0Y2ggdGhhdCBjbG9zZXMgZmlsZXMKCgkqIHNlZC5jOiBjaGFuZ2VkIHJlZ2V4cCBzeW50YXgKCkZyaSBNYXkgMjIgMTU6MTE6MTIgMTk5MiAgVG9tIExvcmQgIChsb3JkIGF0IG1vcmlhcnR5LmJoLmFuZHJldy5jbXUuZWR1KQoKCSogcmVnZXguYzogIHRoaXMgaXMgbm90IG15IGNoYW5nZSwgYnV0IGEgcG9pbnRlciB0byB0aGUgZmFjdAoJdGhhdCBrYXJsQGdudSBmaXhlZCBzb21lIHJlZ2V4cCBidWdzIHRoYXQgd2VyZSBwbGFndWluZyBzZWQuCgpUaHUgQXByIDMwIDEzOjAyOjIxIDE5OTIgIFRvbSBMb3JkICAobG9yZCBhdCB1bml4My5hbmRyZXcuY211LmVkdSkKCgkqIHNlZC5jIChjb21waWxlX3Byb2dyYW0sIGV4ZWN1dGVfcHJvZ3JhbSkKCXN1YnByb2dyYW1zIGFyZSBub3cgY29tcGlsZWQgd2l0aCBhbiBleHBsaWNpdCBjb250aW51YXRpb24gOykKCXJldHVybl92IGFuZCByZXR1cm5faSBpbiBzdHJ1Y3QgdmVjdG9yLiAgZXhlY3V0ZV9wcm9ncmFtCglubyBsb25nZXIgcmVjdXJzZXMgdG8gZXhlY3V0ZSBzdWJwcm9ncmFtcyAoY2FzZSAneycpIGFuZCBub3cKCXVuZGVyc3RhbmRzIGEgcmV0dXJuIGluc3RydWN0aW9uIChjYXNlICd7JykuCgpUdWUgQXByIDI4IDE3OjEzOjA0IDE5OTIgIFRvbSBMb3JkICAobG9yZCBhdCB1bml4Ny5hbmRyZXcuY211LmVkdSkKCgkqIHNlZC5jIChjb21waWxlX2FkZHJlc3MpIGFkZGVkIFw/cmVnZXhwPyBzeW50YXggZm9yIGFkZHJlc3Nlcy4KCgkqIHNlZC5jIChtYWluKSBhZGRlZCB7fSBpbnRlcnZhbHMgdG8gdGhlIG9ic2N1cmUgcmVnZXhwCglzeW50YXguCgoJKiBzZWQuYyAoY29tcGlsZV9wcm9ncmFtKSAgYWZ0ZXIgY2FsbGluZyBjb21waWxlX2FkZHJlc3MsCglub3JtYWxpemUgbnVtZXJpYyBhZGRyZXNzZXMgKG1ha2UgYTIuYWRkcl9udW1iZXIgPiBhMS5hZGRyX251bWJlcikuCglUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGxpbmUgbnVtYmVycyBtdXN0IG1hdGNoIGV4YWN0bHksCglidXQgc2VkIGRvZXMgbm90IHRyeSB0byBtYXRjaCBhMiB1bnRpbCBhZnRlciBhMSBoYXMgbWF0Y2hlZCwKCXlldCBhMSxhMiB3aGVyZSBhMiA8PSBhMSBpcyBkZWZpbmVkIHRvIGJlIGVxdWl2ZWxlbnQgdG8KCWExLGExKzEKClNhdCBGZWIgMjkgMTA6NTU6NTQgMTk5MiAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptQG51dHJpbWF0KQoKCSogc2VkLmMgKHVzYWdlKTogRG9jdW1lbnQgbG9uZyBvcHRpb25zIGFzIHN0YXJ0aW5nIHdpdGggYC0tJy4KCk1vbiBEZWMgIDkgMjM6NTY6NDAgMTk5MSAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBzZWQuYzogSW5jbHVkZSBzeXMvdHlwZXMuaCwgZm9yIG5ldyByZWdleC5oLgoKVHVlIE5vdiAgNSAwMjoxNjowMSAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHV0aWxzLmM6IENoYW5nZSBOT19WRlBSSU5URiB0byBWUFJJTlRGX01JU1NJTkcsIGZvcgoJY29tcGF0aWJpbGl0eSB3aXRoIGF1dG9jb25mLgoKTW9uIFNlcCAgMiAyMjowMjo0MCAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgYXBwbGUtZ3Vua2llcykKCgkqIHNlZC5jIChjb21waWxlX3JlZ2V4KTogVHJlYXQgXCBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIgd2hlbiBpbgoJYSBjaGFyIGNsYXNzLgoKVGh1IEF1ZyAgOCAwMDoxNTozMyAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgYmxlZW4pCgoJKiBWZXJzaW9uIDEuMDguCgoJKiBzZWQuYyAoY29tcGlsZV9maWxlbmFtZSk6IElmIHJlYWRpbmcgYSBmaWxlIGZhaWxzLCByZWFkCgkvZGV2L251bGwgaW5zdGVhZC4gIEl0J3Mgd2hhdCBVbml4IGFuZCBQT1NJWCBkbywgZWZmZWN0aXZlbHkuCgoJKiBzZWQuYyAoY29tcGlsZV9yZWdleCk6IFRoZSAnc2xhc2gnIGNoYXJhY3RlciBkb2Vzbid0Cgl0ZXJtaW5hdGUgdGhlIHJlZ2V4IGlmIGl0J3MgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuCgoJKiBzZWQuYyAobWFpbik6IElmIGdpdmVuIG5vIGFyZ3MsIG9yIGJhZCBvcHRpb24sIHByaW50IHVzYWdlCgltZXNzYWdlLgoJKHVzYWdlKTogTmV3IGZ1bmN0aW9uLgoKCSogc2VkLmMgKGV4ZWN1dGVfcHJvZ3JhbSk6IEFtb3VudCB3cml0dGVuIGZvciAnUCcgY29tbWFuZCB3YXMKCXdyb25nLiAgRnJvbSBzdGVwaGVuZEBrc3IuY29tIChTdGVwaGVuIERhdmlzKS4KCldlZCBBdWcgIDcgMTY6NTE6MTQgMTk5MSAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptIGF0IGFwcGxlLWd1bmtpZXMpCgoJKiBzZWQuYyAoYXBwZW5kX3BhdHRlcm5fc3BhY2UpOiBDaGVjayBmb3IgYnVmZmVyIGZ1bGwgYmVmb3JlCglpbnN0ZWFkIG9mIGFmdGVyIHdyaXRpbmcgdG8gYnVmZmVyLiAgRG9uJ3QgbmVlZCB0byB0ZXN0IGZvcgoJRU9GIGluaXRpYWxseSBhbnltb3JlLCBkdWUgdG8gdGhlIG5leHQgY2hhbmdlLgoJKGV4ZWN1dGVfcHJvZ3JhbSk6IEZvciAnbicgYW5kICdOJyBjb21tYW5kcywgaWYgZW9mIGlzIHJlYWNoZWQKCWluIGlucHV0LCBxdWl0IHRoZSBzY3JpcHQgbGlrZSBVbml4IHNlZCBkb2VzLgoJRml4IG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW1zIGZvciAnYScgYW5kICdyJyBjb21tYW5kcy4KCShjb21waWxlX3Byb2dyYW0pOiBGaXggb2ZmIGJ5IG9uZSBlcnJvciBpbiBwcm9jZXNzaW5nIGNvbW1lbnRzLgoJQWxsIG9mIHRoZSBhYm92ZSBhcmUgZnJvbSBUYXBhbmkgVGFydmFpbmVuLCB0YXJ2YWluZUB0dWtraS5qeXUuZmkuCgoJKiBzZWQuYyAoc2V0dXBfanVtcCk6IFVzZSBpc2JsYW5rIGluc3RlYWQgb2YgdGVzdGluZyBmb3IgJyAnCglvciAnXHQnLCBmb3IgUE9TSVggbG9jYWxlcy4KCgkqIHV0aWxzLmMgKGNrX3N0cmR1cCk6IFJlbmFtZWQgZnJvbSBzdHJkdXAuCgkqIHNlZC5jOiBDaGFuZ2UgY2FsbGVycy4KCgkqIHNlZC5jLCB1dGlscy5jOiBDbGVhbiB1cCBkZWNsYXJhdGlvbnMgYW5kIGluY2x1ZGVzIHRvIGdldAoJcmlkIG9mIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogc2VkLmMgKG1haW4pOiBBZGQgbG9uZy1uYW1lZCBvcHRpb25zLiAgRG9uJ3QgY29tcGxhaW4gaWYgLW4KCWlzIGdpdmVuIHR3aWNlLgoKRnJpIEF1ZyAgMiAxMjozMzoxNiAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgYXBwbGUtZ3Vua2llcykKCgkqIGNvbmZpZ3VyZTogU3VwcG9ydCArc3JjZGlyIGFyZy4gIENyZWF0ZSBjb25maWcuc3RhdHVzIGFuZAoJcmVtb3ZlIGl0IGFuZCBNYWtlZmlsZSBpZiBpbnRlcnJ1cHRlZCB3aGlsZSBjcmVhdGluZyB0aGVtLgoJKiBNYWtlZmlsZS5pbjogQ2hhbmdlIERFU1RESVIgdG8gcHJlZml4LgoKTW9uIEp1bCAxNSAxMzowNzozOSAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHNlZC5jIChtYWluKTogQWRkIC1WIG9wdGlvbiB0byBwcmludCB2ZXJzaW9uIG51bWJlci4KCShVU0FHRSk6IE1lbnRpb24gLVYuCgpNb24gSnVsICA4IDAxOjQyOjIyIDE5OTEgIERhdmlkIEouIE1hY0tlbnppZSAgKGRqbSBhdCBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHNlZC5jOiBEZWZpbmUgYmNvcHkgaW4gdGVybXMgb2YgbWVtY3B5IGlmIFNURENfSEVBREVSUyBhcwoJd2VsbCBhcyBpZiBVU0cuCgkoY29tcGlsZV9maWxlbmFtZSk6IERvbid0IGdsb2IgZmlsZW5hbWUgKGZvciAncicgYW5kICd3JwoJY29tbWFuZHMpLiAgVW5peCBzZWQgZG9lc24ndCBkbyBpdCBhbmQgaXQncyBub3QgdmVyeSB1c2VmdWwsCglzaW5jZSBpdCBjYW4gb25seSBtYXRjaCAwIG9yIDEgZmlsZXMuCgkoZXhlY3V0ZV9wcm9ncmFtKTogQ2hhbmdlICdcYScgdG8gMDA3IHNpbmNlIHNvbWUgY29tcGlsZXJzCglkb24ndCByZWNvZ25pemUgXGEuCgkqIHV0aWxzLmM6IE5ldyBmaWxlOyBjb2RlIG1vdmVkIGZyb20gc2VkLmMuCgkqIFJlcGxhY2UgTWFrZWZpbGUgd2l0aCBNYWtlZmlsZS5pbiBhbmQgY29uZmlndXJlLgoJVXBkYXRlIFJFQURNRS4KClR1ZSBNYXIgMjYgMTM6MDA6NDggRVNUIDE5OTEJSmF5IEZlbmxhc29uIChoYWNrQGdudS5haS5taXQuZWR1KQoKCSogc2VkLmMgKG1hdGNoX2FkZHJlc3MpICBBZGRlZCBhIHRyaXZpYWwgY2FzdCBmb3IgcG9ydGFiaWxpdHkuCgpNb24gRmViIDI1IDEzOjIzOjI5IEVTVCAxOTkxCUpheSBGZW5sYXNvbiAoaGFja0BhaS5taXQuZWR1KQoKCSogc2VkLmMgIENoYW5nZWQgJ3MnIGNvbW1hbmQgdG8gd29yayB3aXRoIGxhdGVzdCB2ZXJzaW9uIG9mIHJlZ2V4KCkKCXJvdXRpbmVzLCB3aGljaCBteXN0ZXJpb3VzbHkgY2hhbmdlZCBzb21ld2hlcmUgaW4gdGhlcmUuIC4gLgoJQSBvbmUtbGluZSBwYXRjaCBmcm9tIERhdmlkIEVja2Vsa2FtcCAoZWNrZWxrYW1wQG1jYy5jb20pLgoKCUluaXRpYWxpemUgdGhlIGZhc3RtYXAgaW4gdGhlIGhvcGVzIHRoYXQgaXQnbGwgbWFrZSBzZWQgZmFzdGVyLgoKVGh1IEZlYiAyMSAxMzo0MjoyNyBFU1QgMTk5MQlKYXkgRmVubGFzb24gKGhhY2tAYWkubXRpLmVkdSkKCgkqIHNlZC5jIENoYW5nZSBwYW5pYyB0byBjb21waWxlIHdpdGggb3RoZXIgX19TVERDX18gY29tcGlsZXJzLgoKV2VkIEphbiAzMCAxMDo0NjozOCBFU1QgMTk5MQlKYXkgRmVubGFzb24gKGhhY2tAYWkubWl0LmVkdSkKCgkqIHNlZC5jICBDaGFuZ2VkIHZlcnNpb24gbnVtYmVyLiAgTWFkZSBuZXcgcmVsZWFzZS4KClR1ZSBOb3YgMjcgMTU6MzQ6NTEgRVNUIDE5OTAJSmF5IEZlbmxhc29uIChoYWNrQGFpLm1pdC5lZHUpCgoJKiBzZWQuYyAoc2V0dXBfanVtcCkgIERvbid0IGJsb3cgY2h1bmtzIGlmIHRoZXJlIGlzbid0IGEgbGFiZWwKCWFmdGVyIGEgYiBvciB0IGNvbW1hbmQuCgoJCShtYWluKSBEb24ndCBwYW5pYyBpZiBpdCBhIGJyYW5jaCBjb21tYW5kIGRvZXNuJ3QgaGF2ZQoJYSBsYWJlbCB0byBicmFuY2ggdG8uCgoJCShtYWluKSAgQ29sbGVjdCBhbGwgdGhlIC1lIGFyZ3VtZW50cyB0b2dldGhlciBhbmQgcGFyc2UgdGhlbQoJYWxsIGF0IG9uY2UuICBUaGlzIHdheSwgLWUgeyAtZSBtdW1ibGUgLWUgfSB3aWxsIHdvcmsuCgoJQWxsIHRoZXNlIHNtYWxsIHBhdGNoZXMgZnJvbSBEYXZpZCBTY2htaWR0IChkYXZpZHNAaXNjLWJyLmlzYy1ici5jb20pCgpUdWUgU2VwIDExIDEyOjUxOjM3IEVEVCAxOTkwCUpheSBGZW5sYXNvbiAoaGFja0BhaS5taXQuZWR1KQoKCSogc2VkLmMgQ2hhbmdlZCBzb21lIGZ1bmN0aW9uIGZvcndhcmQgZGVjbGFyYXRpb25zIHRvIHVzZSBWT0lEICoKCWluc3RlYWQgb2YgY2hhciAqCgpNb24gSnVsIDE2IDExOjEyOjU0IEVEVCAxOTkwIEpheSBGZW5sYXNvbiAoaGFja0BhaS5taXQuZWR1KQoKCSogc2VkLmMgKGNrX21hbGxvYykgIFVzZSBtYWxsb2MoMSkgaW5zdGVhZCBvZiBtYWxsb2MoMCkgaWYgZ2l2ZW4KCWEgcmVxdWVzdCBmb3IgemVybyBieXRlcy4KClR1ZSBKdW4gIDUgMDI6MDU6MzcgMTk5MCAgRGF2aWQgSi4gTWFjS2VuemllICAoZGptIGF0IGFsYmVydC5haS5taXQuZWR1KQoKCSogc2VkLmM6IFJlbW92ZSBleGNlc3MgbmV3bGluZXMgZnJvbSBjYWxscyB0byBwYW5pYy4KCVJlZm9ybWF0IHNvbWUgY29tbWVudHMgdG8gZml0IGluIDc5IGNvbHVtbnMuCglCYXNlIHdoZXRoZXIgdG8gdXNlIHZvaWQgKiBvbiBfX1NURENfXywgbm90IF9fR05VX18uCgkobWFpbik6IEFkZCBtaXNzaW5nIGFyZyB3aGVuIHByaW50aW5nIHVzYWdlIG1lc3NhZ2UuCglQcmludCB1c2FnZSBpZiBnaXZlbiBpbnZhbGlkIGFyZy4KCShwYW5pYykgW19fU1REQ19fXTogQWRkIG1pc3NpbmcgIiwgLi4uIi4KCShjb21waWxlX2ZpbGVuYW1lKTogUHJpbnQgY29ycmVjdCBlcnJvciBtZXNzYWdlIGlmIGdsb2JfZmlsZW5hbWUKCXJldHVybnMgTlVMTC4KClRodSBBcHIgIDUgMjE6NDE6MTIgMTk5MCAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IHBvZ28uYWkubWl0LmVkdSkKCgkqIHNlZC5jIChleGVjdXRlX3Byb2dyYW0sIGNhc2UgJ3InKTogV2hlbiBuZWVkIHRvIHJlYWxsb2MgYXBwZW5kLnRleHQsCgltdWx0aXBseSBhcHBlbmQuYWxsb2MgYnkgMiBpbnN0ZWFkIG9mIGFkZGluZwoJY3VyX2NtZC0+eC5jbWRfdHh0LnRleHRfbGVuLgoKVHVlIE1hciAgNiAxNTo1NTozNSBFU1QgMTk5MCBKYXkgRmVubGFzb24gKGhhY2tAYWkubWl0LmVkdSkKCgkqIHNlZC5jIChjb21waWxlX3JlZ2V4KSAgQWxsb2NhdGUgMTAgYnl0ZXMgZXh0cmEgc3BhY2UgbmVlZGVkIGJ5CglyZV9jb21waWxlX3BhdHRlcm4uCgpTdW4gRmViIDI1IDE2OjMyOjEwIDE5OTAgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBwb2dvLmFpLm1pdC5lZHUpCgoJKiBzZWQuYyAoZXhlY3V0ZV9wcm9ncmFtLCBjYXNlICdsJyk6IFByaW50IFwwMCBpbnN0ZWFkIG9mIFwwLgoJUHJpbnQgYmFja3NsYXNoIGFzIFxcIG5vdCBcLgoJUHJpbnQgXHh4IGluc3RlYWQgb2YgL3h4LgoKVGh1IEZlYiAgMSAxNDowMjoyOCBFU1QgMTk5MAkJaGFja0B3b29rdW16CgoJKiBzZWQuYyAobWVtY2hyKSAgVXNlICgpIGluc2lkZSBpbm5lciBsb29wIHNvIGl0IHdpbGwgd29yayBjb3JyZWN0bHkuCglBIHR3byBjaGFyYWN0ZXIgcGF0Y2ggZnJvbSBSb2JlcnQgQSBCcnVjZSAocmFiQGFsbHNwaWNlLmJlcmtlbGV5LmVkdSkKCldlZCBTZXAgMjcgMTg6NDc6MzkgRURUIDE5ODkJCWhhY2tAYWkubWl0LmVkdQoKCSogc2VkLmMgKGNvbXBpbGVfcmVnZXgpICBOZXcgZnVuY3Rpb24uICBXaGVuIGNvbXBpbGluZyByZWdleCwKCXR1cm4gXiBpbnRvIFxgIGFuZCAkIGludG8gXCcgc28gdGhhdCB0aGV5IHdvbid0IG1hdGNoIG9uIGVtYmVkZGVkCgluZXdsaW5lcy4gIFVOKlgJcGF0dGVybiBtYXRjaGluZyBpcyBhIGNyb2NrLgoJKGNvbXBpbGVfcHJvZ3JhbSwgY29tcGlsZV9hZGRyZXNzKSBjYWxsIGNvbXBpbGVfcmVnZXguCgpNb24gU2VwIDE4IDEwOjE1OjMyIEVEVCAxOTg5CQloYWNrQGFpLm1pdC5lZHUKCgkqIHNlZC5jIChjb21waWxlX3Byb2dyYW0pOiAgZGVmaW5lIHRyYW5zbGF0ZSBhcyB1bnNpZ25lZCBjaGFyICogc28KCXRoYXQgeSBjb21tYW5kIHdpbGwgd29yayBvbiBub24tYXNjaWkgY2hhcmFjdGVycy4KCglDaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHRvIDEuMDYuCgpUaHUgU2VwIDE0IDE1OjU3OjA4IEVEVCAxOTg5CQloYWNrQGFpLm1pdC5lZHUKCgkqIHNlZC5jICAoY29tcGlsZV9wcm9ncmFtKSAgTGV0IHByb2dyYW1zIHVzZSA7IHRvIHRlcm1pbmF0ZSB9IGFzCgl3ZWxsIGFzIG5ld2xpbmUuCgoJKHJlYWRfZmlsZSkgUHJpbnQgYW4gZXJyb3IgbXNnIHRvIHN0ZGVyciBpZiBpdCBjYW4ndCBvcGVuIGFuCglpbnB1dCBmaWxlLgoKVGh1IE1hciAyMyAxODowNDo0NiAxOTg5ICBSYW5kYWxsIFNtaXRoICAocmFuZHkgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQoKCSogTWFrZWZpbGUsIHNlZC5jOiBBZGRlZCBuZXcgY29weXJpZ2h0IG5vdGljZS4KCgkqIE1ha2VmaWxlOiBNYWtlIGRpc3RyaWJ1dGlvbnMgd2hpY2ggZm9sbG93IHRoZSBzeW1saW5rcy4KCmhhY2tAYWkubWl0LmVkdQoKCTEuMDUJRml4ZWQgZXJyb3IgaW4gJ3InIChub3cgZG9lcyB0aGluZ3MgaW4gdGhlIHJpZ2h0IG9yZGVyKQoKCTEuMDQJRml4ZWQgcy9yZS9yZXAvW251bWJlcl0KCgkxLjAzCUZpeGVzIGZyb20gTWlrZSBIYWVydGVsIGZvciByZWdleHBzIHRoYXQgbWF0Y2ggdGhlCgkJZW1wdHkgc3RyaW5nLCBhbmQgZm9yIFJpdGNoaWUgc3RkaW8gKG5vbi1zdGlja3kgRU9GKQoKCTEuMDIJRml4ZWQgJ3QnLCAnYicsICc6JyB0byB0cmltIGxlYWRpbmcgc3BhY2VzIGFuZCB0YWJzCgkJRml4ZWQgXFwgaW4gcmVwbGFjZW1lbnQgb2YgJ3MnIGNvbW1hbmQKCQlBZGRlZCBjb21tZW50cwoKCTEuMDEJQWRkZWQgcy9yZS9yZXAvW2RpZ2l0c10KCQlhZGRlZCAjbiBhcyBmaXJzdCBsaW5lIG9mIHNjcmlwdAoJCWFkZGVkIGZpbGVuYW1lIGdsb2JiaW5nCgkJYWRkZWQgJ2wnIGNvbW1hbmQKCQlBbGwgaW4gdGhlIG5hbWUgb2YgUE9TSVgKCgkxLjAwCUJlZ2FuICh0aGlua2luZyBhYm91dCkgZGlzdHJpYnV0aW5nIHRoaXMgZmlsZQoMCkxvY2FsIFZhcmlhYmxlczoKbW9kZTogaW5kZW50ZWQtdGV4dApsZWZ0LW1hcmdpbjogOAp2ZXJzaW9uLWNvbnRyb2w6IG5ldmVyCkVuZDoK