U3VuIEp1bCAyNSAyMzo0MDo1MSBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NjLTIuOTUgUmVsZWFzZWQuCgoxOTk5LTA0LTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3BsYXktdHJlZS5oIChzcGxheV90cmVlX2NvbXBhcmVfcG9pbnRlcnMpOiBEZWNsYXJlLgoKMTk5OS0wMy0zMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNwbGF5LXRyZWUuaCAoc3BsYXlfdHJlZV9jb21wYXJlX2ludHMpOiBEZWNsYXJlLgoKV2VkIE1hciAyNCAxMjo0NjoyOSAxOTk5ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGFteS5jeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKGJhc2VuYW1lKTogQ3lnd2lueywzMn0gc2hvdWxkIGhhdmUgdGhlIHByb3RvdHlwZS4KCk1vbiBEZWMgMTQgMDk6NTM6MzEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZGVtYW5nbGUuaDogRG9uJ3QgY2hlY2sgSU5fR0NDIGFueW1vcmUuCgkqIHNwbGF5LXRyZWUuaDogTGlrZXdpc2UuCgpUdWUgRGVjICA4IDAwOjMwOjMxIDE5OTggIEVsZW5hIFphbm5vbmkgIDxlemFubm9uaUBrd2lrZW1hcnQuY3lnbnVzLmNvbT4gCgogICAgICAgICogZGVtYW5nbGUuaDogKERNR0xfRURHKTogbmV3IG1hY3JvIGZvciBLdWNrIGFuZCBBc3NvY2lhdGVzCiAgICAgICAgKERNR0xfU1RZTEVfTUFTSyk6IG1vZGlmeSB0byBpbmNsdWRlIEt1Y2sgYW5kIEFzc29jIHN0eWxlCiAgICAgICAgKGRlbWFuZ2xpbmdfc3R5bGVzKTogYWRkIG5ldyBlZGdfZGVtYW5nbGluZyBzdHlsZQogICAgICAgIChFREdfREVNQU5HTElOR19TVFlMRV9TVFJJTkcpOiBuZXcgbWFjcm8KICAgICAgICAoRURHX0RFTUFOR0xJTkcpOiBuZXcgbWFjcm8KCiAgICAgICAgKiBkZW1hbmdsZS5oIChETUdMX0hQKTogbmV3IG1hY3JvLCBmb3IgSFAvYUNDIGNvbXBpbGVyLgogICAgICAgIChETUdMX1NUWUxFX01BU0spOiBtb2RpZnkgdG8gaW5jbHVkZSBuZXcgSFAncyBzdHlsZS4KICAgICAgICAoZGVtYW5nbGluZ19zdHlsZXMpOiBhZGQgbmV3IGhwX2RlbWFuZ2xpbmcgdmFsdWUuCiAgICAgICAgKEhQX0RFTUFOR0xJTkdfU1RZTEVfU1RSSU5HKTogbmV3IG1hY3JvLgogICAgICAgIChBUk1fREVNQU5HTElORyk6IGNvZXJjZSB0byBpbnQuCiAgICAgICAgKEhQX0RFTUFOR0xJTkcpOiBuZXcgbWFjcm8uCgpGcmkgTm92IDIwIDEzOjE0OjAwIDE5OTggIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChiYXNlbmFtZSk6IEFkZCBwcm90b3R5cGUgZm9yIEZyZWVCU0QuCgpGcmkgTm92IDEzIDE5OjE5OjExIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxpYmliZXJ0eS5oOiBQcm90b3R5cGUgeGNhbGxvYy4KClN1biBOb3YgIDggMTc6NDI6MjUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYW5zaWRlY2wuaDogV3JhcCBwcm9ibGVtYXRpYyBtYWNyb3Mgd2l0aCAhSU5fR0NDLgoKCSogZGVtYW5nbGUuaDogTmV2ZXIgZGVmaW5lIFBBUkFNUygpLgoJKiBzcGxheS10cmVlLmg6IExpa2V3aXNlLgoKU2F0IE5vdiAgNyAxNjowNDowMyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBkZW1hbmdsZS5oOiBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoJKiBzcGxheS10cmVlLmg6IExpa2V3aXNlLgoKVGh1IE9jdCAyMiAxOTo1ODowMCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzcGxheS10cmVlLmg6IFdyYXAgZnVuY3Rpb24gcG9pbnRlciBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGluCglQQVJBTVMoKSBtYWNyby4KCjE5OTgtMTAtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzcGxheS10cmVlLmg6IE5ldyBmaWxlLgoKRnJpIE9jdCAgOSAwMDowMjowMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNZXJnZSBkZXZvIGFuZCBlZ2NzIGluY2x1ZGUgZGlyZWN0b3JpZXMuCgpTYXQgU2VwICA1IDEyOjE2OjMzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5oLCBvYnN0YWNrLmg6IFVwZGF0ZWQgZnJvbSBnY2MuCgoxOTk4LTA4LTAzICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBsaWJpYmVydHkuaCAoeGV4aXQpOiBDaGFuZ2UgZGVjbCB0byB1c2UgbW9kZXJuIEdDQyBhdHRyaWJ1dGUKCXRvIGluZGljYXRlIGV4aXQgZG9lcyBub3QgcmV0dXJuLgoKTW9uIEp1biAgMSAxMzo0ODozMiAxOTk4ICBKYXNvbiBNb2xlbmRhICAoY3Jhc2hAYnVnc2hhY2suY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suaDogVXBkYXRlIHRvIGxhdGVzdCBGU0YgdmVyc2lvbi4KClR1ZSBGZWIgMjQgMTM6MDU6MDIgMTk5OCAgRG91ZyBFdmFucyAgPGRldmFuc0BjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoZGlzYXNzZW1ibGVfaW5mbyk6IE1lbWJlciBgc3ltYm9sJyByZW5hbWVkIHRvIGBzeW1ib2xzJwoJYW5kIG1hZGUgYW4gImFzeW1ib2wgKioiLiAgTmV3IG1lbWJlciBudW1fc3ltYm9scy4KCShJTklUX0RJU0FTU0VNQkxFX0lORk9fTk9fQVJDSCk6IFVwZGF0ZS4KClR1ZSBGZWIgMTcgMTI6MzI6MTggMTk5OCAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fZmV0Y2hfcmVnaXN0ZXIsIHNpbV9zdG9yZV9yZWdpc3Rlcik6IEFkZAogCXJlZ2lzdGVyIGxlbmd0aCBwYXJhbWV0ZXIuICBGdW5jdGlvbnMgcmV0dXJuIGFjdHVhbCBsZW5ndGggb2YKIAlyZWdpc3Rlci4KClRodSBGZWIgMTIgMTY6Mjk6MDEgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZ2V0b3B0Lmg6IFVwZGF0ZSB0byBsYXRlc3QgRlNGIHZlcnNpb24uCgpXZWQgRmViIDExIDE2OjU2OjA2IDE5OTggIERvdWcgRXZhbnMgIDxkZXZhbnNAY2FudWNrLmN5Z251cy5jb20+CgoJKiBzeW1jYXQuaDogTmV3IGZpbGUuCgpNb24gRmViICAyIDE3OjEzOjMxIDE5OTggIFN0ZXZlIEhhd29ydGggIDxzdGV2ZUBwbS5jc2Uucm1pdC5FRFUuQVU+CgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fdGljMzApOiBEZWNsYXJlLgoKVGh1IEphbiAyMiAxNjoyMzo1OSAxOTk4ICBGcmVkIEZpc2ggPGZuZkBjeWdudXMuY29tPgoKCSogZGlzLWFzbS5oOiBBZGQgZmxhZyBJTlNOX0hBU19SRUxPQyB0byB0ZWxsIGRpc2Fzc2VtYmx5CglmdW5jdGlvbiB0aGVyZSBpcyBhIHJlbG9jIG9uIHRoaXMgbGluZS4KCk1vbiBEZWMgIDggMTE6MjI6MjMgMTk5NyAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaDogUmVtb3ZlIHByb3RvdHlwZSBvZiBkaXNhc21fc3ltYWRkcigpIGFzIHRoaXMgZnVuY3Rpb24KCW5vIGxvbmdlciBleGlzdHMuCgpUdWUgRGVjICAyIDEwOjIwOjUzIDE5OTcgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKGRpc2FzbV9zeW1hZGRyKTogTmV3IHByb3RvdHlwZS4KCk1vbiBEZWMgIDEgMjA6MjQ6MTggMTk5NyAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY29mZi9zaC5oIChSX1NIX1NXSVRDSDgpOiBOZXcuCgpNb24gRGVjICAxIDExOjI5OjM1IDE5OTcgIERvdWcgRXZhbnMgIDxkZXZhbnNAY2FudWNrLmN5Z251cy5jb20+CgoJKiBjYWxsYmFjay5oIChDQl9TWVNDQUxMKTogQ29tbWVudCBvdXQgYXJnIG5hbWVzIGluIHByb3RvdHlwZXMuCgpXZWQgTm92IDI2IDE2OjQ3OjU4IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogY2FsbGJhY2suaCAoQ0JfU1lTQ0FMTCk6IENvbnNpc3RhbnRseSB1c2UgbmFtZXMgZm9yIHByb3RvdHlwZQoJYXJndW1lbnRzLgoKV2VkIE5vdiAyNiAxMTozOTozMCAxOTk3ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGNhbnVjay5jeWdudXMuY29tPgoKCSogY2FsbGJhY2suaCAoQ0JfU1lTQ0FMTCk6IENoYW5nZSBieXRlIGNvdW50IGFyZ3VtZW50cyB0bwoJe3JlYWQsd3JpdGV9X21lbSB0byBgaW50Jy4gIE5ldyBtZW1iZXIgYG1hZ2ljJy4KCShDQl9TWVNDQUxMX01BR0lDLENCX1NZU0NBTExfSU5JVCk6IE5ldyBtYWNyb3MuCgpUdWUgTm92IDI1IDAxOjM1OjUyIDE5OTcgIERvdWcgRXZhbnMgIDxkZXZhbnNAc2ViYS5jeWdudXMuY29tPgoKCSogY2FsbGJhY2suaCAoc3RydWN0IHN0YXQpOiBNb3ZlIGZvcndhcmQgZGVjbCB1cC4KCShob3N0X2NhbGxiYWNrKTogUGFzcyBzdGF0IHN0cnVjdCBwb2ludGVyIHRvIHN0YXQsZnN0YXQuCgkoQ0JfU1lTX25ubik6IFJlb3JnYW5pemUuCgkoQ0JfU1lTQ0FMTCk6IE5ldyBtZW1iZXJzIHAxLHAyLgoJKGNiX2hvc3RfdG9fdGFyZ2V0X3N0YXQpOiBEZWxldGUgZm91cnRoIGFyZy4KClNhdCBOb3YgMjIgMjM6MzQ6MTUgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fc3RvcF9yZWFzb24pOiBDbGFyaWZ5IHNpbV9zaWduYWxsZWQgU0lHUkMKIAlhcmd1bWVudC4KCk1vbiBOb3YgMTcgMTQ6MDA6NTEgMTk5NyAgRG91ZyBFdmFucyAgPGRldmFuc0BzZWJhLmN5Z251cy5jb20+CgoJKiBjYWxsYmFjay5oIChDQl9UQVJHRVRfREVGU19NQVApOiBSZW5hbWVkIGZyb20gdGFyZ2V0X2RlZnNfbWFwLgoJKGhvc3RfY2FsbGJhY2spOiBBZGQgc3RhdCwgZnN0YXQsIHN5c2NhbGxfbWFwLCBlcnJub19tYXAsIG9wZW5fbWFwLAoJc2lnbmFsX21hcCwgc3RhdF9tYXAuCgkoZXJybl9tYXAsb3Blbl9tYXApOiBSZW5hbWVkIHRvIGNiX2luaXRfZm9vX21hcC4KCShjYl9ob3N0X3RvX3RhcmdldF9lcnJubyxjYl90YXJnZXRfdG9faG9zdF9vcGVuKTogUmVuYW1lZCBmcm9tCglob3N0X3RvX3RhcmdldF9lcnJubyx0YXJnZXRfdG9faG9zdF9vcGVuLgoJKGNiX3JlYWRfdGFyZ2V0X3N5c2NhbGxfbWFwcyk6IEFkZCBwcm90b3R5cGUuCgkoY2JfdGFyZ2V0X3RvX2hvc3Rfc3lzY2FsbCk6IExpa2V3aXNlLgoJKGNiX2hvc3RfdG9fdGFyZ2V0X3N0YXQpOiBMaWtld2lzZS4KCShjYl9zeXNjYWxsKTogTGlrZXdpc2UuCgkoQ0JfU1lTX3tleGl0LG9wZW4sY2xvc2UscmVhZCx3cml0ZSxsc2Vlayx1bmxpbmssZ2V0cGlkLGtpbGwsZnN0YXQsCglhcmd2bGVuLGFyZ3YsY2hkaXIsc3RhdCxjaG1vZCx1dGltZSx0aW1lfSk6IERlZmluZS4KCShDQl9TWVNDQUxMKTogTmV3IHR5cGUuCgkoQ0JfUkMpOiBOZXcgZW51bS4KCkZyaSBOb3YgIDcgMTA6MzQ6MDkgMTk5NyAgUm9iIFNhdm95ZSAgPHJvYkBkYXJrc3Rhci5jeWdudXMuY29tPgoKCSogbGliaWJlcnR5Lmg6IEFkZCBleHRlcm4gIkMiIHsgc28gaXQgY2FuIGJlIHVzZWQgd2l0aCBDKysKCXByb2dyYW1zLgoJKiByZW1vdGUtc2ltLmg6ICBBZGQgZXh0ZXJuICJDIiB7IHNvIGl0IGNhbiBiZSB1c2VkIHdpdGggQysrCglwcm9ncmFtcy4KClR1ZSBPY3QgMTQgMTY6MDc6NTEgMTk5NyAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8pOiBOZXcgZmllbGQKCSdzeW1ib2xfYXRfYWRkcmVzc19mdW5jJy4KCShJTklUX0RJU0FTU0VNQkxFX0lORk9fTk9fQVJDSCk6IEluaXRpYWxpc2UgbmV3IGZpZWxkIHdpdGgKCWdlbmVyaWNfc3ltYm9sX2F0X2FkZHJlc3MuCgpNb24gT2N0IDEzIDEwOjE3OjE1IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHJlbW90ZS1zaW0uaDogQ2xhcmlmeSBzaW1fcmVhZCwgc2ltX3dyaXRlIE1FTSBhcmd1bWVudC4KCldlZCBTZXAgMjQgMTg6MDM6MTAgMTk5NyAgU3R1IEdyb3NzbWFuICA8Z3Jvc3NtYW5AYmFieWxvbi01LmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmggKFNJTV9SQyk6ICBBZGQgYSBidW5jaCBvZiBuZXcgcmV0dXJuIGNvZGVzIGZvcgoJYnJlYWtwb2ludCBzdHVmZi4KCSogQWRkIGZ1bmN0aW9ucyB0byB0ZWxsIHRoZSBzaW11bGF0b3IgdG8gc2V0L2NsZWFyL2VuYWJsZS9kaXNhYmxlCglpbnRyaW5zaWMgYnJlYWtwb2ludHMuCgpUaHUgQXVnIDI4IDE5OjQxOjQyIDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChkdXBhcmd2KTogQWRkIHByb3RvdHlwZS4KClR1ZSBBdWcgMjYgMTI6MjU6NDkgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fY3JlYXRlX2luZmVyaW9yKTogQWRkIEFCRkQgYXJnLiBEb2N1bWVudC4KCk1vbiBBdWcgMjUgMTA6NTA6NTEgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fb3Blbik6IEFkZCBBQkZEIGFyZy4gRG9jdW1lbnQuCgpGcmkgQXVnICA4IDE2OjQzOjU2IDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKGFyY19nZXRfZGlzYXNzZW1ibGVyKTogRGVjbGFyZS4KCldlZCBKdWwgMzAgMTE6Mzk6NTAgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGRlbmViLmN5Z251cy5jb20+CgoJKiBkZW1hbmdsZS5oIChETUdMX0pBVkEpOiAgTmV3IG9wdGlvbiB0byByZXF1ZXN0IEphdmEgZGVtYW5nbGluZy4KClR1ZSBKdWwgMjIgMTc6NTk6NTQgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKFBFWEVDVVRFXyopOiBEZWZpbmUuCgkocGV4ZWN1dGUsIHB3YWl0KTogRGVjbGFyZS4KCkZyaSBKdW4gIDYgMTM6MDI6MzMgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fa2lsbCk6IE1hcmsgYXMgZGVwcmVjaWF0ZWQuCgpGcmkgTWF5IDIzIDEzOjQzOjQxIDE5OTcgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyk6IEFkZCB0YXNrX2xpbmsgbWVtYmVyLgoKVGh1IE1heSAyMiAxMTozMjo0OSAxOTk3ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmg6IFJldmlldyBkb2N1bWVudGF0aW9uLiAgQ2xhcmlmeSByZXN0cmljdGlvbnMgb24KIAl3aGVuIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkLgoKV2VkIE1heSAyMSAxNjo0Nzo1MyAxOTk3ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmggKHNpbV9zZXRfcHJvZmlsZV9zaXplKTogQWRkIHByb3RvdHlwZSwgZG9jdW1lbnQgYXMKIAlkZXByZWNpYXRlZC4KClR1ZSBNYXkgMjAgMDk6MzI6MjIgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fb3Blbik6IEFkZCBjYWxsYmFjayBzdHJ1Y3QuCgkoc2ltX3NldF9jYWxsYmFja3MpOiBEcm9wIFNJTV9ERVNDIGFyZ3VtZW50LiBEb2N1bWVudC4KCShzaW1fc2l6ZSk6IFJlbW92ZSByZWNlbnRseSBhZGRlZCBTSU1fREVTQyBhcmd1bWVudC4gRG9jdW1lbnQuCgpNb24gTWF5IDE5IDE5OjE0OjQ0IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHJlbW90ZS1zaW0uaDogUGFzcyBTRCBpbnRvIHNpbV9zaXplLgoKVGh1IE1heSAxNSAwMToyNDoxNiAxOTk3ICBNYXJrIEFsZXhhbmRlciAgPG1hcmthQGN5Z251cy5jb20+CgoJKiBvYnN0YWNrLmggKG9ic3RhY2tfc3BlY2lmeV9hbGxvY2F0aW9uX3dpdGhfYXJnLCBvYnN0YWNrX2NodW5rZnVuLAoJb2JzdGFja19mcmVlZnVuKTogRWxpbWluYXRlIGNvbXBpbGUgd2FybmluZ3MgaW4gZ2RiLgoKVHVlIE1heSAxMyAxMDoyMToxNCAxOTk3ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29mZi9hcm0uaCAoY29uc3RhbnRzKTogICBBZGRlZCBuZXcgZmxhZyBiaXRzIEZfQVBDU18yNiBhbmQKCUZfQVBDU19TRVQgZm9yIHRoZSBmX2ZsYWdzIGZpZWxkIG9mIHRoZSBmaWxlaGRyIHN0cnVjdHVyZS4gIEFkZGVkIG5ldwoJZmxhZ3M6IEZfQVBDUzI2LCBGX0FSTV8yLCBGX0FSTV8zLCBGX0FSTV83LCBGX0FSTV83VCB0byBzdG9yZQoJaW5mb3JtYXRpb24gaW4gdGhlIGZsYWdzIGZpZWxkIG9mIHRoZSBpbnRlcm5hbF9mIHN0cnVjdHVyZSB1c2VkIGJ5IEJGRAoJcm91dGluZXMuCgpUdWUgQXByIDIyIDEwOjI0OjM0IDE5OTcgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogZmxvYXRmb3JtYXQuaCAoZmxvYXRmb3JtYXRfYnl0ZW9yZGVycyk6IEFkZCBjb21tZW50cyBmb3IgcHJldmlvdXMKCWZvcm1hdHMgYW5kIGFkZCBmbG9hdGZvcm1hdF9saXR0bGVieXRlX2JpZ3dvcmQsIHByaW1hcmlseSBmb3IgQVJNLgoJQWRkIGRlY2xhcmF0aW9uIGZvciBmbG9hdGZvcm1hdF9pZWVlX2RvdWJsZV9saXR0bGVieXRlX2JpZ3dvcmQuCgpGcmkgQXByIDE4IDEzOjA0OjQ5IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHJlbW90ZS1zaW0uaCAoc2ltX3N0b3ApOiBOZXcgaW50ZXJmYWNlIC0gYXN5bmNocm9ub3VzCiAJbm90aWZpY2F0aW9uIG9mIGEgcmVxdWVzdCB0byBzdG9wIC8gc3VzcGVuZCB0aGUgcnVubmluZwogCXNpbXVsYXRpb24uCgoJKiByZW1vdGUtc2ltLmggKGVudW0gc2ltX3N0b3ApOiBBZGQgc2ltX3J1bm5pbmcgYW5kIHNpbV9wb2xsaW5nIGFzCiAJc3RhdGVzIGZvciB1c2UgaW50ZXJuYWwgdG8gc2ltdWxhdG9ycy4KCgkqIGNhbGxiYWNrLmggKHN0cnVjdCBob3N0X2NhbGxiYWNrX3N0cnV0KTogUHV0IGEgbWFnaWMgbnVtYmVyIGF0CiAJdGhlIGVuZCBvZiB0aGUgc3RydWN0IHRvIGFsbG93IGJhc2ljIGNoZWNraW5nLgoJKHN0cnVjdCBob3N0X2NhbGxiYWNrX3N0cnVjdCApOiBBZGQgcG9sbF9xdWl0IC0gc28KIAl0aGF0IHRoZSBjb25zb2xlIGV0YyBjYW4gYmUgcG9sbGVkIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLgoKVGh1IEFwciAxNyAwMjoxNzoxMiAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzdHJ1Y3QgX2JmZCk6IERlY2xhcmUuCgkoc2ltX2xvYWQpOiBSZXR1cm4gU0lNX1JDLiAgTmV3IGFyZyBgYWJmZCcuCgkoc2ltX2NyZWF0ZV9pbmZlcmlvcik6IFJldHVybiBTSU1fUkMuICBEZWxldGUgYXJnIGBzdGFydF9hZGRyZXNzJy4KCldlZCBBcHIgIDIgMTc6MDk6MTIgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBrcmVtdmF4LmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmggKHNpbV90cmFjZSwgc2ltX3NpemUpOiBNYWtlIHRoZXNlIGdsb2JhbC4gIFRoZXkKIAl3aWxsIGdvIGF3YXkgc2hvcnRseS4KCldlZCBBcHIgIDIgMTU6MjM6NDkgMTk5NyAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIHJlbW90ZS1zaW0uaCAoU0lNX09QRU5fS0lORCwgU0lNX1JDKTogTmV3IGVudW1zLgoJKHNpbV9vcGVuKTogTmV3IGFyZ3VtZW50IGBraW5kJy4KCldlZCBBcHIgIDIgMTQ6NDU6NTEgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogQ09QWUlORzogVXBkYXRlIEZTRiBhZGRyZXNzLgoKRnJpIE1hciAyOCAxNToyOTo1NCAxOTk3ICBNaWtlIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGNhbGxiYWNrLmggKHRvcCBsZXZlbCk6IEluY2x1ZGUgc3RkYXJnLmggb3IgdmFyYXJncy5oIGlmCgl2YV9zdGFydCBpcyBub3QgZGVmaW5lZC4KCShob3N0X2NhbGxiYWNrX3N0cnVjdCk6IE1ha2UgeyxlfXZwcmludGZfZmlsdGVyZWQgdGFrZSBhIHZhX2xpc3QKCWluc3RlYWQgb2Ygdm9pZCAqLCBzaW5jZSB2YV9saXN0IG1pZ2h0IGJlIGFuIGFycmF5IG9yIHN0cnVjdHVyZQoJdHlwZS4KCkZyaSBNYXIgMjggMTU6NDQ6NDEgMTk5NyAgSC5KLiBMdSAgPGhqbEBnbnUuYWkubWl0LmVkdT4KCgkqIGxpYmliZXJ0eS5oIChiYXNlbmFtZSk6IEFkZCBwcm90b3R5cGUgZm9yIGdsaWJjIGFuZCBsaW51eC4KCk1vbiBNYXIgMTcgMTk6MjI6MTIgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogb2JqYWxsb2MuaDogTmV3IGZpbGUuCgpNb24gTWFyIDE3IDE0OjU3OjU1IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAa3JlbXZheC5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oOiBOZXcgZmlsZSwgY29waWVkIGluIGZyb20gZ2RiL3JlbW90ZS1zaW0uaC4gIE9uZQogCWRheSB0aGlzIHdpbGwgYmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IG9mIGl0cyBvd24uCgpTYXQgTWFyIDE1IDE5OjAwOjE0IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIG9ic3RhY2suaDogVXBkYXRlIHRvIGN1cnJlbnQgRlNGIHZlcnNpb24uCgpUaHUgTWFyICA2IDE1OjQ2OjU5IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAa3JlbXZheC5jeWdudXMuY29tPgoKCSogY2FsbGJhY2suaCAoc3RydWN0IGhvc3RfY2FsbGJhY2tfc3RydWN0KTogQWRkIGNhbGxiYWNrcyAtCiAJZmx1c2hfc3Rkb3V0LCB3cml0ZV9zdGRlcnIsIGZsdXNoX3N0ZGVyciwgdnByaW50Zl9maWx0ZXJlZCwKIAlldnByaW50Zl9maWx0ZXJlZC4gIERlbGV0ZSByZWR1bmRhbnQgY2FsbGJhY2tzIC0gcHJpbnRmX2ZpbHRlcmVkLgoKVGh1IEZlYiAyNyAyMzoxODoyNyAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogUmVtb3ZlIGxwcmVmaXggYW5kIGxwcmVmaXhfbGVuCglmaWVsZHMuCgpUdWUgRmViIDI1IDAwOjEwOjQ5IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoSU5JVF9ESVNBU1NFTUJMRV9JTkZPX05PX0FSQ0gpOiBJbml0aWFsaXplCglieXRlc19wZXJfY2h1bmsgYW5kIGRpc3BsYXlfZW5kaWFuLgoKTW9uIEZlYiAyNCAxNzo0NzowMiAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJRnJvbSBFcmljIFlvdW5nZGFsZSA8ZXJpY0BhbmRhbnRlLmppYy5jb20+OgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfZWxmX3ZlcnNpb25fZXhwcik6IERlZmluZS4KCShzdHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX2RlcHMpOiBEZWZpbmUuCgkoc3RydWN0IGJmZF9lbGZfdmVyc2lvbl90cmVlKTogRGVmaW5lLgoKVGh1IEZlYiAgNiAxNDoyMDowMSAxOTk3ICBNYXJ0aW4gTS4gSHVudCAgPGh1bnRAcGl6emEuY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaDogKGRpc2Fzc2VtYmxlX2luZm8pOiAgQWRkIG5ldyBmaWVsZHMKCWJ5dGVzX3Blcl9jaHVuayBhbmQgZGlzcGxheV9lbmRpYW4gdG8gY29udHJvbCB0aGUKCWRpc3BsYXkgb2YgcmF3IGluc3RydWN0aW9ucy4KClN1biBEZWMgIDggMTc6MTE6MTIgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGNhbGxiYWNrLmggKGhvc3RfY2FsbGJhY2spOiBOZXcgbWVtYmVyIGBlcnJvcicuCgpXZWQgTm92IDIwIDAwOjQwOjIzIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBjYWxsYmFjay5oOiBOZXcgZmlsZSwgbW92ZWQgaGVyZSBmcm9tIGdkYi4KCk1vbiBOb3YgMTggMTY6MzQ6MDAgMTk5NiAgRGF3biBQZXJjaGlrICA8ZGF3bkBjcml0dGVycy5jeWdudXMuY29tPgoKCSogbGliaWJlcnR5Lmg6IENoZWNraW4gYWdhaW47IGxhc3QgY2hlY2tpbiBmYWlsZWQgZHVlIHRvIHN0aWNreSB0YWcuCgpXZWQgTm92IDEzIDA4OjIyOjAwIDE5OTYgIERhd24gUGVyY2hpayAgPGRhd25AY3JpdHRlcnMuY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oOiBSZXZlcnQgbGFzdCBjb21taXQgZHVlIHRvIGNvbmZsaWN0cyB3aXRoIGhwdXgKCXN5c3RlbSBoZWFkZXJzLgoKVHVlIE5vdiAxMiAxNjozMTowMCAxOTk2ICBEYXduIFBlcmNoaWsgIDxkYXduQGNyaXR0ZXJzLmN5Z251cy5jb20+CgoJKiBsaWJpYmVydHkuaDogTW92ZSBwcm90b3R5cGVzIGZyb20gYXJndi5jIGhlcmUuCgpUaHUgT2N0IDMxIDE0OjU2OjE4IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBhbnNpZGVjbC5oIChWUEFSQU1TLFZBX1NUQVJUKTogRGVmaW5lLgoKRnJpIE9jdCAyNSAxMjowODowNCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKGRpc2Fzc2VtYmxlX2luZm8pOiBBZGQgYnl0ZXNfcGVyX2xpbmUgZmllbGQuCgkoSU5JVF9ESVNBU1NFTUJMRV9JTkZPX05PX0FSQ0gpOiBJbml0aWFsaXplIGJ5dGVzX3Blcl9saW5lIGZpZWxkLgoKVGh1IE9jdCAyNCAxNzoxMDowMSAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKGRpc2Fzc2VtYmxlX2luZm8pOiBBZGQgc3ltYm9sIGZpZWxkLgoJKElOSVRfRElTQVNTRU1CTEVfSU5GT19OT19BUkNIKTogSW5pdGlhbGl6ZSBzeW1ib2wgZmllbGQuCgpUaHUgT2N0IDE3IDExOjE3OjQwIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fbTMycik6IERlY2xhcmUuCgpNb24gT2N0IDE0IDIzOjU2OjUyIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oOiBEZWNsYXJlIHBhcmFtZXRlciB0eXBlcyBmb3IgeG1hbGxvYyBhbmQgeHJlYWxsb2MuCgpUaHUgT2N0ICAzIDEzOjQ1OjI3IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGZubWF0Y2guaDogTmV3IGZpbGUuCgpUaHUgT2N0ICAzIDEwOjMzOjE0IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9tbjEweDAwKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKHByaW50X2luc25fbW4xMDIwMCwgcHJpbnRfaW5zbl9tbjEwMzAwKTogRGVjbGFyZS4KCldlZCBPY3QgIDIgMjE6MjQ6NDMgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX21uMTB4MDApOiBEZWNsYXJlLgoKTW9uIFNlcCAzMCAxMzo1NjoxMSAxOTk2ICBGcmVkIEZpc2ggIDxmbmZAY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oOiBSZW1vdmUgI2lmbmRlZiBQUklWQVRFX1hNQUxMT0MuCgpTYXQgQXVnIDMxIDEzOjI3OjA2IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl92ODUwKTogRGVjbGFyZS4KClR1ZSBBdWcgMTMgMTY6MTA6MzAgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suaDogIENoYW5nZSBiY29weSB0byBtZW1jcHkuICBXb3JrcyBiZXR0ZXIgb24gUG9zaXgKCXN5c3RlbXMsIHdoaWNoIGdlbmVyYWxseSBsYWNrIGJjb3B5LgoKTW9uIEF1ZyAxMiAxNzowMzoxOCAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogYW5zaWRlY2wuaDogIENoYW5nZSBXSU4zMiB0byBfV0lOMzIuCgpGcmkgSnVsIDI2IDEzOjU4OjE4IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaDogQWRkIGZsYXZvdXIgZmllbGQuCgkocHJpbnRfaW5zbl9hbHBoYSk6IERlY2xhcmUuCgkocHJpbnRfaW5zbl9hbHBoYV9vc2YsIHByaW50X2luc25fYWxwaGFfdm1zKTogRG9uJ3QgZGVjbGFyZS4KCShJTklUX0RJU0FTU0VNQkxFX0lORk8pOiBJbml0aWFsaXplIGZsYXZvdXIgZmllbGQuCgpUdWUgSnVsIDIzIDE3OjM3OjU4IDE5OTYgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKFBSSVZBVEVfWE1BTExPQyk6IEVuY2xvc2UgeG1hbGxvYy94cmVhbGxvYwoJZGVmaW5pdGlvbnMgaW5zaWRlICNpZm5kZWYgc28gdGhhdCBwcm9ncmFtcyB0aGF0IHdhbnQgdG8KCWNhbiBkZWZpbmUgUFJJVkFURV9YTUFMTE9DIGFuZCB0aGVuIGRlZmluZSB4bWFsbG9jIGFuZAoJeHJlYWxsb2MgYW55d2F5IHRoZXkgd2FudC4KCShiYXNlbmFtZSk6IERvY3VtZW50IGluIHNvdXJjZSB0aGF0IHdlIGNhbid0IGRlY2xhcmUgdGhlCiAJcGFyYW1ldGVyIHR5cGUgYmVjYXVzZSBpdCBpcyBkZWNsYXJlZCBpbmNvbnNpc3RlbnRseSBhY3Jvc3MKCWRpZmZlcmVudCBzeXN0ZW1zLgoKTW9uIEp1bCAyMiAxMzoxNjoxMyAxOTk2ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEB0YW11LmVkdT4KCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9hbHBoYSk6IERvbid0IGRlY2xhcmUuCgkocHJpbnRfaW5zbl9hbHBoYV9vc2YsIHByaW50X2luc25fYWxwaGFfdm1zKTogRGVjbGFyZS4KCldlZCBKdWwgMTcgMTQ6NDU6MTIgMTk5NiAgTWFydGluIE0uIEh1bnQgIDxodW50QHBpenphLmN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmg6IChwcmludF9pbnNuX2QxMHYpOiBEZWNsYXJlLgoKTW9uIEp1bCAxNSAxNjo1NTozOCAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oOiAgR2V0IHJpZCBvZiBkZWNscyBmb3IgcHJpbnRfaW5zbl9pODA4NiwKCXByaW50X2luc25fc3BhcmM2NCBhbmQgcHJpbnRfaW5zbl9zcGFyY2xpdGUuCgkqIChJTklUX0RJU0FTU0VNQkxFX0lORk8pOiAgU3BsaXQgaW50byB0d28gcGllY2VzLiAgT25lLAoJSU5JVF9ESVNBU1NFTUJMRV9JTkZPX05PX0FSQ0ggaW5pdHMgZXZlcnl0aGluZyBleGNlcHQgZm9yIGVuZGlhbiwKCW1hY2gsIGFuZCBhcmNoLgoKRnJpIEp1bCAxMiAxMDoxOToyNyAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX2k4MDg2KTogIERlY2xhcmUuCgpXZWQgSnVsICAzIDE2OjAyOjM5IDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fc3BhcmNsaXRlKTogIERlY2xhcmUuCgpUdWUgSnVuIDE4IDE2OjAyOjQ2IDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QHJ0bC5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX2g4MzAwcyk6IERlY2xhcmUuCgpUdWUgSnVuIDE4IDE1OjExOjMzIDE5OTYgIEtsYXVzIEthZW1wZiAgPGtrYWVtcGZAcHJvZ2lzLmRlPgoKCSogZm9wZW4tdm1zLmg6IE5ldyBmaWxlLgoKVHVlIEp1biAgNCAxODo1ODoxNiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkIG5vdGljZV9hbGwgZmllbGQuCgpGcmkgQXByIDI2IDEwOjMzOjEyIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBkZW1hbmdsZS5oICgjaWZkZWYgSU5fR0NDKTogI2luY2x1ZGUgImdhbnNpZGVjbC5oIi4KCShQUk9UTyxQVFIsY29uc3QpOiBEZWxldGUuCgpNb24gQXByIDIyIDE3OjI3OjQyIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBBZGQgdHJhZGl0aW9uYWxfZm9ybWF0IGZpZWxkLgoKTW9uIEFwciAxNSAxNToxNjo1NiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKGNob29zZV90ZW1wX2Jhc2UpOiBBZGQgcHJvdG90eXBlLgoKVHVlIE1hciAxMiAxNzoyOTo0NiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKGJmZF93cmFwcGVkX2xpbmtfaGFzaF9sb29rdXApOiBEZWNsYXJlLgoJKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkIHdyYXBfaGFzaCBmaWVsZC4KCldlZCBGZWIgMTQgMTY6NDk6MTcgMTk5NiAgTWFydGluIEFuYW50aGFyYW1hbiAgPG1hcnRpbkBtYWlsLmltZWNoLnVuaS1kdWlzYnVyZy5kZT4KCgkqIGllZWUuaCAoaWVlZV9yZWNvcmRfZW51bV90eXBlKTogRGVmaW5lCglpZWVlX2V4dGVybmFsX3JlZmVyZW5jZV9pbmZvX2VudW0uCgpGcmkgRmViICAyIDE3OjA5OjI1IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChESVNBU01fUkFXX0lOU04pOiBEZWxldGUuCgpUdWUgSmFuIDIzIDA5OjIxOjQ3IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChJTklUX0RJU0FTU0VNQkxFX0lORk8pOiBTZXQgZW5kaWFuIHRvIEJGRF9FTkRJQU5fVU5LTk9XTi4KCU5ldyBhcmd1bWVudCBGUFJJTlRGX0ZVTkMuCgpNb24gSmFuIDIyIDE2OjM3OjU5IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChkaXNhc3NlbWJsZV9pbmZvKTogTmV3IG1lbWJlcnMgYXJjaCwgbWFjaCwgZW5kaWFuLgoJKElOSVRfRElTQVNTRU1CTEVfSU5GTyk6IEluaXRpYWxpemUgdGhlbS4KCShESVNBU01fUkFXX0lOU057LEZMQUd9KTogRGVmaW5lLgoKVGh1IEphbiAxOCAxMTozMjozOCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBkZW1hbmdsZS5oIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBDaGFuZ2Ugb3BuYW1lIHBhcmFtZXRlciB0bwoJY29uc3QgY2hhciAqLgoJKGNwbHVzX21hbmdsZV9vcG5hbWUpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgYW5kIG9wbmFtZSBwYXJhbWV0ZXIgdG8KCWNvbnN0IGNoYXIgKi4KCkZyaSBKYW4gIDUgMDA6MDE6MjIgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogaWVlZS5oIChlbnVtIGllZWVfcmVjb3JkKTogQWRkIGllZWVfYXNuX3JlY29yZF9lbnVtLAoJaWVlZV9hdF9yZWNvcmRfZW51bSwgaWVlZV90eV9yZWNvcmRfZW51bSwgaWVlZV9hdG5fcmVjb3JkX2VudW0sCglpZWVlX2JiX3JlY29yZF9lbnVtLCBhbmQgaWVlZV9iZV9yZWNvcmRfZW51bS4KCldlZCBKYW4gIDMgMTM6MTI6MDkgMTk5NiAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBvYnN0YWNrLmg6IFVwZGF0ZSBjb3B5cmlnaHQgdG8gMTk5Ni4KCShfb2JzdGFja19tZW1vcnlfdXNlZCk6IERlY2xhcmUuCgkob2JzdGFja19tZW1vcnlfdXNlZCk6IERlZmluZSBtYWNyby4KClRodSBEZWMgMjggMTE6NDI6MTIgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKHhzdHJkdXApOiBEZWNsYXJlLgoKVGh1IERlYyAyMSAxNDo0NzoxNyAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiB3YWl0Lmg6IFByb3RlY3QgYWxsIG1hY3JvcyB3aXRoICNpZm5kZWYuCgpUdWUgT2N0IDI0IDIxOjQ1OjQwIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBBZGQgc3RhdGljX2xpbmsgZmllbGQuCgpUdWUgU2VwIDEyIDE2OjI4OjA0IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2NhbGxiYWNrcyk6IEFkZCBzeW1ib2wgcGFyYW1ldGVyIHRvCgl3YXJuaW5nIGNhbGxiYWNrLgoKRnJpIFNlcCAgMSAxMzoxMTo1MSAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19jYWxsYmFja3MpOiBDaGFuZ2Ugd2FybmluZyBjYWxsYmFjawoJdG8gdGFrZSBCRkQsIHNlY3Rpb24sIGFuZCBhZGRyZXNzIGFyZ3VtZW50cy4KClRodSBBdWcgMzEgMTY6NDU6MTIgMTk5NSAgc3RldmUgY2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBSZW1vdmUgUEUgc3R1ZmYuCgpUdWUgQXVnIDIyIDAzOjE4OjIzIDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBrci1sYXB0b3AuY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oOiBEZWNsYXJlIHhzdHJlcnJvci4gIEZyb20gUGF0IFJhbmtpbi4KCk1vbiBBdWcgMjEgMTg6MTE6MzYgMTk5NSAgc3RldmUgY2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBSZW1vdmUgUEUgc3R1ZmYuCgpXZWQgQXVnICAyIDA4OjE0OjEyIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fc3BhcmM2NCk6IERlY2xhcmUuCgpNb24gSnVsIDEwIDEzOjI2OjQ5IDE5OTUgIEVyaWMgWW91bmdkYWxlICA8ZXJpY0BhaWIuY29tPgoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyk6IEFkZCBuZXcgZmllbGQgc3ltYm9saWMuCgpTdW4gSnVsICAyIDE3OjQ4OjQwIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBDaGFuZ2UgdHlwZSBvZiBiYXNlX2ZpbGUgdG8KCVBUUi4KClRodSBKdW4gMjkgMDA6MDI6NDUgMTk5NSAgU3RldmUgQ2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBBZGRlZCBiYXNlX2ZpbGUgbWVtYmVyLgoKVHVlIEp1biAyMCAxNjo0MDowNCAxOTk1ICBTdGV2ZSBDaGFtYmVybGFpbiAgPHNhY0BzbGFzaC5jeWdudXMuY29tPgoKCSogYW5zaWRlY2wuaDogd2luMzJzIGlzIEFOU0kgZW5vdWdoLgoKVGh1IE1heSAxOCAwNDoyNTo1MCAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5Aa3ItbGFwdG9wLmN5Z251cy5jb20+CgoJV2VkIE1heSAxMCAxNDoyODoxNiAxOTk1IFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybWx0ZC5jby51aykKCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9hcm0pOiBEZWxldGUgZGVjbGFyYXRpb24uCgkocHJpbnRfaW5zbl97bGl0dGxlLGJpZ31fYXJtKTogTmV3IGRlY2xhcmF0aW9ucy4KCgkqIGZsb2F0Zm9ybWF0LmggKGZsb2F0Zm9ybWF0X2FybV9leHQpOiBEZWNsYXJlLgoKU2F0IE1heSAxMyAxMDoxNDowOCAxOTk1ICBTdGV2ZSBDaGFtYmVybGFpbiAgPHNhY0BzbGFzaC5jeWdudXMuY29tPgoKCSogY29mZi9wZS5oOiBOZXcgZmlsZS4KCSogYmZkbGluay5oIChzdWJzeXRlbSwgc3RhY2tfaGVhcF9wYXJhbWV0ZXJzKTogTmV3LgoJKiBjb2ZmL2kzODYuaCAoTlRfU0VDVElPTl9BTElHTk1FTlQsIE5UX0ZJTEVfQUxJR05NRU5ULAoJTlRfREVGX1JFU0VSVkUsIE5UX0RFRl9DT01NSVQpOiBOZXcuCgkqIGNvZmYvaW50ZXJuYWwuaCAoaW50ZXJuYWxfZmlsZWhkcik6ICBOZXcgZmllbGRzIGZvciBQRS4KCShJTUFHRV9EQVRBX0RJUkVDVE9SWSk6IE5ldy4KCShpbnRlcm5hbF9hb3V0aGRyKTogTmV3IGZpZWxkcyBmb3IgUEUuCgpUaHUgTWF5ICA0IDE0OjM2OjQyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogZGVtYW5nbGUuaDogRG9uJ3QgaW5jbHVkZSBhbnNpZGVjbC5oIGlmIElOX0dDQy4KClR1ZSBGZWIgMjEgMDA6Mzc6MjggMTk5NSAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBocC1zeW10YWIuaDogRG9uJ3QgdXNlIGJpdGZpZWxkIGVudW1lcmF0aW9ucywgdGhlIEhQIEMgY29tcGlsZXIKCWRvZXMgbm90IGhhbmRsZSB0aGVtIGNvcnJlY3RseS4KClRodSBGZWIgIDkgMTQ6MjA6MjcgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKGJhc2VuYW1lKTogRG9uJ3QgZGVjbGFyZSBwYXJhbWV0ZXIgdHlwZTsgc29tZQoJc3lzdGVtcyBoYXZlIHRoaXMgaW4gdGhlaXIgaGVhZGVyIGZpbGVzLgoKV2VkIEZlYiAgOCAxNzozNTozOCAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5KTogQ2hhbmdlIGZvcm1hdCBvZiBjb21tb24KCXN5bWJvbCBpbmZvcm1hdGlvbiwgdG8gcmVtb3ZlIHJlc3RyaWN0aW9ucyBvbiBtYXhpbXVtIHNpemUgYW5kCglhbGlnbm1lbnQgcG93ZXIsIGJ5IHVzaW5nIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBpbnN0ZWFkLgoKTW9uIEZlYiAgNiAxNDo1NTozMiAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKGVudW0gYmZkX2xpbmtfaGFzaF90eXBlKTogUmVuYW1lIGJmZF9saW5rX2hhc2hfd2VhawoJdG8gYmZkX2xpbmtfaGFzaF91bmRlZndlYWsuICBBZGQgYmZkX2xpbmtfaGFzaF9kZWZ3ZWFrLgoKTW9uIEphbiAxNiAyMTowMDoyMyAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKEdEQl9JTklUX0RJU0FTU0VNQkxFX0lORk8sIGV0Yyk6IFJlbW92ZSBhbGwKCUdEQi1zcGVjaWZpYyBkZWZpbml0aW9ucy4KClN1biBKYW4gMTUgMTg6Mzk6MzUgMTk5NSAgU3RldmUgQ2hhbWJlcmxhaW4gIDxzYWNAc3BsYXQ+CgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fdzY1KTogRGVjbGFyZS4KClRodSBKYW4gMTIgMTc6NTE6MTcgMTk5NSAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN1am8uY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChoZXhfcCk6IEZpeCBzZW5zZSBvZiB0ZXN0LgoKV2VkIEphbiAxMSAyMjozNjo0MCAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3Vqby5jeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKF9oZXhfYXJyYXlfc2l6ZSwgX2hleF9iYWQsIF9oZXhfdmFsdWUsIGhleF9pbml0LAoJaGV4X3AsIGhleF92YWx1ZSk6IE5ldyBtYWNyb3MgYW5kIGRlY2xhcmF0aW9ucywgZm9yIGhleC5jLgoKRnJpIEphbiAgNiAxNzo0NDoxNCAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHNhbmd1aW5lLmN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmg6IE1ha2UgaWRlbXBvdGVudC4KCldlZCBEZWMgMTQgMTM6MDg6NDMgMTk5NCAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogcHJvZ3Jlc3MuaDogTmV3IGZpbGUsIGVtcHR5IGRlZmluaXRpb25zIGZvciBwcm9ncmVzcyBtYWNyb3MuCgpGcmkgTm92IDI1IDAwOjE0OjA1IDE5OTQgIEplZmYgTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogaHAtc3ltdGFiLmg6IE5ldyBmaWxlIGRlc2NyaWJpbmcgdGhlIGRlYnVnIHN5bWJvbHMgZW1pdHRlZAoJYnkgdGhlIEhQIEMgY29tcGlsZXJzLgoKRnJpIE5vdiAxMSAxNTo0ODozNyAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHNhbmd1aW5lLmN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5KTogQ2hhbmdlIHUuYy5zaXplIGZyb20gMjQKCXRvIDI2IGJpdHMsIGFuZCBjaGFuZ2UgdS5jLmFsaWdubWVudF9wb3dlciBmcm9tIDggdG8gNiBiaXRzLiAgNgoJYml0IGluIHRoZSBhbGlnbm1lbnQgcG93ZXIgaXMgZW5vdWdoIGZvciBhIDY0IGJpdCBhZGRyZXNzIHNwYWNlLgoKTW9uIE9jdCAzMSAxMzowMjo1MSAxOTk0ICBTdGFuIFNoZWJzICAoc2hlYnNAYW5kcm9zLmN5Z251cy5jb20pCgoJKiBkZW1hbmdsZS5oIChjcGx1c19tYW5nbGVfb3BuYW1lKTogRGVjbGFyZS4KClR1ZSBPY3QgMjUgMTE6Mzg6MDIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBzYW5ndWluZS5jeWdudXMuY29tPgoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfY2FsbGJhY2tzKTogRml4IGNvbW1lbnRzIGZvcgoJbXVsdGlwbGVfY29tbW9uIGZpZWxkLgoKU3VuIFNlcCAwNCAxNzo1ODoxMCAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3IChyd2VAcGVnYXN1cy5lc3ByaXQuZWMub3JnKQoKCSogYW91dC9hb3V0NjQuaDogT25seSBkZWZpbmUgUU1BR0lDIGlmIGl0IGlzbid0IGFscmVhZHkgZGVmaW5lZC4KCgkqIGRpcy1hc20uaDogQWRkIHN1cHBvcnQgZm9yIHRoZSBBUk0uCgpXZWQgQXVnIDEwIDEyOjUxOjQxIDE5OTQgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCgoJKiBsaWJpYmVydHkuaCAoc3Ryc2lnbmFsKTogRG9jdW1lbnQgaXRzIGV4aXN0ZW5jZSBldmVuIGlmIHdlCgljYW4ndCBkZWNsYXJlIGl0LgoKVHVlIEF1ZyAgMiAxNDo0MDowMyAxOTk0ICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIG9zOWsuaDogUmVtb3ZlIHVfaW50MTYsIHVfaW50MzIsIGFuZCBvd25lcl9pZCB0eXBlZGVmcyBhbmQKCWV4cGFuZCB0aGVpciB1c2VzLiAgVGhvc2UgbmFtZXMgY29uZmxpY3Qgd2l0aCBNYWNoIGhlYWRlcnMuCgpGcmkgSnVsIDIyIDE0OjE3OjEyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbSkKCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkpOiBDaGFuZ2UgdS5jLnNpemUgaW50byBhCgliaXRmaWVsZC4gIEFkZCBmaWVsZCB1LmMuYWxpZ25tZW50X3Bvd2VyLgoKU3VuIEp1bCAxMCAwMDoyNjozOSAxOTk0ICBJYW4gRGFsbCAgKGRhbGxAaGZyZC5kc3RvLmdvdi5hdSkKCgkqIGRpcy1hc20uaDogQWRkIHByaW50X2luc25fbnMzMmsgZGVjbGFyYXRpb24uCgpNb24gSnVuIDIwIDE3OjEzOjI5IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbSkKCgkqIGJmZGxpbmsuaCAoYmZkX2xpbmtfaGFzaF90YWJsZSk6IE1ha2UgY3JlYXRvciBhIGNvbnN0IHBvaW50ZXIuCgpTYXQgSnVuIDE4IDE2OjA5OjMyIDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKCgkqIGRlbWFuZ2xlLmggKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IERlY2xhcmUuCgpUaHUgSnVuIDE2IDE1OjE5OjAzIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBBZGQgbmV3IGZpZWxkIHNoYXJlZC4KCk1vbiBKdW4gIDYgMTQ6Mzk6NDQgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSk6IFJlbW92ZSB3cml0dGVuIGZpZWxkOgoJbm90IG5lZWRlZCBmb3IgYWxsIGJhY2tlbmRzLgoKVGh1IEFwciAyOCAxOTowNjo1MCAxOTk0ICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3Vqby5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChkaXNhc3NlbWJsZXIpOiBEZWNsYXJlLgoKRnJpIEFwciAgMSAwMDozODoxNyAxOTk0ICBKaW0gV2lsc29uICAod2lsc29uQG1vbGUuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogb2JzdGFjay5oOiBEZWxldGUgdXNlIG9mIElOX0dDQyB0byBjb250cm9sIHdoZXRoZXIKICAgICAgICBzdGRkZWYuaCBvciBnc3RkZGVmLmggaXMgaW5jbHVkZWQuCgpUdWUgTWFyIDIyIDEzOjA2OjAyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZGxpbmsuaCAoZW51bSBiZmRfbGlua19vcmRlcl90eXBlKTogQWRkIGJmZF9kYXRhX2xpbmtfb3JkZXIuCgkoc3RydWN0IGJmZF9saW5rX29yZGVyKTogQWRkIGRhdGEgZmllbGQgdG8gdW5pb24uCgpNb24gTWFyIDIxIDE4OjQ1OjI2IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2NhbGxiYWNrcyk6IENoYW5nZSBiaXRzaXplIGFyZ3VtZW50Cgl0byBhZGRfdG9fc2V0IHRvIHJlbG9jLiAgUmVtb3ZlIGJpdHNpemUgYXJndW1lbnQgZnJvbSBjb25zdHJ1Y3Rvci4KCUNvbW1lbnQgdGhhdCByZWxvY19vdmVyZmxvdywgcmVsb2NfZGFuZ2Vyb3VzIGFuZCB1bmF0dGFjaGVkX3JlbG9jCgltdXN0IGhhbmRsZSBOVUxMIHBvaW50ZXJzIGZvciByZWxvYyBsb2NhdGlvbi4KCShlbnVtIGJmZF9saW5rX29yZGVyX3R5cGUpOiBBZGQgYmZkX3NlY3Rpb25fcmVsb2NfbGlua19vcmRlciBhbmQKCWJmZF9zeW1ib2xfcmVsb2NfbGlua19vcmRlci4KCShzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIpOiBBZGQgcmVsb2MgZmllbGQgdG8gdW5pb24uCgkoc3RydWN0IGJmZF9saW5rX29yZGVyX3JlbG9jKTogRGVmaW5lLgoKTW9uIE1hciAxNCAxMjoyNzo1MCAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBpZWVlLWZsb2F0Lmg6IFJlbW92ZWQ7IG5vIGxvbmdlciB1c2VkLgoKVHVlIE1hciAgMSAxODoxMDo0OSAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogb3M5ay5oOiBvczkwMDAgdGFyZ2V0IHNwZWNpZmljIGhlYWRlciBmaWxlLCB0aGUgaGVhZGVyIG9mIHRoZQoJb2JqZWN0IGZpbGUgaXMgdXNlZCBub3cuCgpTdW4gRmViIDI3IDIxOjUyOjI2IDE5OTQgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogZmxvYXRmb3JtYXQuaDogTmV3IGZpbGUsIGludGVuZGVkIHRvIHJlcGxhY2UgaWVlZS1mbG9hdC5oLgoKU3VuIEZlYiAyMCAxNzoxNTo0MiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGxpc2EuY3lnbnVzLmNvbSkKCgkqIGFuc2lkZWNsLmggKEFOU0lfUFJPVE9UWVBFUyk6IERlZmluZSBpZiB1c2luZyBBTlNJIHByb3RvdHlwZXMuCgpXZWQgRmViIDE2IDAxOjA3OjEyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGxpYmliZXJ0eS5oOiBEb24ndCBkZWNsYXJlIHN0cnNpZ25hbCwgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGgKCVNvbGFyaXMgc3lzdGVtIGhlYWRlciBmaWxlcy4KClNhdCBGZWIgMTIgMjI6MTE6MzIgMTk5NCAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBsaWJpYmVydHkuaCAoeGV4aXQpOiBVc2UgX192b2xhdGlsZV9fIHRvIGF2b2lkIGxvc2luZyBpZgoJY29tcGlsaW5nIHdpdGggZ2NjIC10cmFkaXRpb25hbC4KClRodSBGZWIgMTAgMTQ6MDU6NDEgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogbGliaWJlcnR5Lmg6IE5ldyBmaWxlLiAgRGVjbGFyZXMgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5CglsaWJpYmVydHkuCgpUdWUgRmViICA4IDA1OjE5OjUyIDE5OTQgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCglIYW5kbGUgb2JzdGFja19jaHVua19hbGxvYyByZXR1cm5pbmcgTlVMTC4gIFRoaXMgYWxsb3dzCglvYnN0YWNrcyB0byBiZSB1c2VkIGJ5IGxpYnJhcmllcywgd2l0aG91dCBmb3JjaW5nIHRoZW0KCXRvIGNhbGwgZXhpdCBvciBsb25nam1wLgoJKiBvYnN0YWNrLmggKHN0cnVjdCBvYnN0YWNrKTogQWRkIGFsbG9jX2ZhaWxlZCBmbGFnLgoJX29ic3RhY2tfYmVnaW4sIF9vYnN0YWNrX2JlZ2luXzEpOiBEZWNsYXJlIHRvIHJldHVybiBpbnQsIG5vdCB2b2lkLgoJKG9ic3RhY2tfZmluaXNoKTogSWYgYWxsb2NfZmFpbGVkLCByZXR1cm4gTlVMTC4KCShvYnN0YWNrX2Jhc2UsIG9ic3RhY2tfbmV4dF9mcmVlLCBvYmpzdGFja19vYmplY3Rfc2l6ZSk6CglJZiBhbGxvY19mYWlsZWQsIHJldHVybiAwLgoJKG9ic3RhY2tfZ3Jvdywgb2JzdGFja19ncm93MCwgb2JzdGFja18xZ3Jvdywgb2JzdGFja19wdHJfZ3JvdywKCW9ic3RhY2tfaW50X2dyb3csIG9ic3RhY2tfYmxhbmspOiBJZiBhbGxvY19mYWlsZWQsIGRvIG5vdGhpbmcgdGhhdAoJY291bGQgY29ycnVwdCB0aGUgb2JzdGFjay4KCk1vbiBKYW4gMjQgMTU6MDY6MDUgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfY2FsbGJhY2tzKTogQWRkIG5hbWUsIHJlbG9jX25hbWUgYW5kCglhZGRlbmQgYXJnbWVudHMgdG8gcmVsb2Nfb3ZlcmZsb3cgY2FsbGJhY2suCgpGcmkgSmFuIDIxIDE5OjEzOjEyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9iaWdfcG93ZXJwYywgcHJpbnRfaW5zbl9saXR0bGVfcG93ZXJwYywKCXByaW50X2luc25fcnM2MDAwKTogRGVjbGFyZS4KClRodSBKYW4gIDYgMTQ6MTU6NTUgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfY2FsbGJhY2tzKTogQWRkIGJpdHNpemUgYXJndW1lbnQgdG8KCWFkZF90b19zZXQgZmllbGQuICBBZGQgbmV3IGNhbGxiYWNrIG5hbWVkIGNvbnN0cnVjdG9yLgoKVGh1IERlYyAzMCAxMDo0NDowNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHJ0bC5jeWdudXMuY29tKQoKCSogYmZkbGluay5oOiBOZXcgZmlsZSBmb3IgbmV3IEJGRCBsaW5rZXIgYmFja2VuZCByb3V0aW5lcy4KCk1vbiBOb3YgMjkgMTA6NDM6NTcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChlbnVtIGRpc19pbnNuX3R5dXBlKTogUmVtb3ZlIG5vbi1BTlNJIHRyYWlsaW5nIGNvbW1hLgoKU2F0IE9jdCAgMiAyMDo0MjoyNiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaDogTW92ZSBjb21tZW50IHRvIHJpZ2h0IHBsYWNlLgoKTW9uIEF1ZyAgOSAxOTowMzozNSAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmggKG9ic3RhY2tfY2h1bmtmdW4sIG9ic3RhY2tfZnJlZWZ1bik6IEFkZCBkZWZucyBmcm9tCglwcmV2aW91cyB2ZXJzaW9uLiAgQXJlIHRoZXNlIEN5Z251cyBsb2NhbCBjaGFuZ2VzPwoKRnJpIEF1ZyAgNiAxNzowNTo0NyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBnZXRvcHQuaCwgb2JzdGFjay5oOiBVcGRhdGUgdG8gbGF0ZXN0IEZTRiB2ZXJzaW9uLgoKTW9uIEF1ZyAgMiAxNjozNzoxNCAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogY29mZi9pMzg2Lmg6ICBBZGQgTHlueCBtYWdpYyBudW1iZXIuCgpNb24gQXVnICAyIDE0OjQ1OjI5IDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogZGlzLWFzbS5oOiAgTW92ZSBlbnVtIG91dHNpZGUgb2Ygc3RydWN0IGRlZm4gdG8gYXZvaWQgd2FybmluZ3MuCgpNb24gQXVnICAyIDA4OjQ5OjMwIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiB3YWl0LmggKFdFWElUU1RBVFVTLCBXU1RPUFNJRyk6IE1hc2sgZG93biB0byA4IGJpdHMuICBUaGlzIGlzCglmb3Igc3lzdGVtcyB0aGF0IHN0b3JlIHN0dWZmIGludG8gdGhlIGhpZ2ggMTYgYml0cyBvZiBhIHdhaXQKCXN0YXR1cy4KCkZyaSBKdWwgMzAgMTg6Mzg6MDIgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmg6ICBBZGQgbmV3IGZpZWxkcyBpbnNuX2luZm9fdmFsaWQsIGJyYW5jaF9kZWxheV9pbnNucywKCWRhdGFfc2l6ZSwgaW5zbl90eXBlLCB0YXJnZXQsIHRhcmdldDIuICBUaGVzZSBhcmUgdXNlZCB0byByZXR1cm4KCWluZm9ybWF0aW9uIGZyb20gdGhlIGluc3RydWN0aW9uIGRlY29kZXJzIGJhY2sgdG8gdGhlIGNhbGxpbmcKCXByb2dyYW0uICBBZGQgY29tbWVudHMsIG1ha2UgbW9yZSByZWFkYWJsZS4KCk1vbiBKdWwgMTkgMjI6MTQ6MTQgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGRlbmViLmN5Z251cy5jb20pCgoJKiBubG06ICBOZXcgZGlyZWN0b3J5IGNvbnRhaW5pbmcgTkxNL05ldFdhcmUgaW5jbHVkZXMuCgpUaHUgSnVsIDE1IDEyOjEwOjA0IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaCAoc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8pOiBOZXcgZmllbGQgYXBwbGljYXRpb25fZGF0YS4KClRodSBKdWwgMTUgMTI6NDE6MTUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oOiBBZGRlZCBkZWNsYXJhdGlvbiBvZiBwcmludF9pbnNuX204OGsuCgpUaHUgSnVsICA4IDA5OjA1OjI2IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCgoJKiBvcGNvZGUvaDgzMDAuaDogTG90cyBvZiBsaXR0bGUgZml4ZXMgZm9yIHRoZSBoOC8zMDBoLgoKRnJpIEp1bCAgMiAxMDozMTo1OSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBhbnNpZGVjbC5oOiBVc2UgQU5TSSBtYWNyb3MgaWYgX19taXBzIGFuZCBfU1lTVFlQRV9TVlI0IGFyZQoJZGVmaW5lZCwgc2luY2UgUklTQy9PUyBjYyBoYW5kbGVzIEFOU0kgZGVjbGFyYXRpb25zIGluIFNWUjQgbW9kZQoJYnV0IGRvZXMgbm90IGRlZmluZSBfX1NURENfXy4KClN1biBKdW4gMjAgMTg6Mjc6NTIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHBvc2VpZG9uLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmg6IERvbid0IG5lZWQgdG8gaW5jbHVkZSBhbnNpZGVjbC5oIGFueSBtb3JlLgoKRnJpIEp1biAxOCAwMzoyMjoxMCAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIG9hc3lzLmg6ICBFbGltaW5hdGUgImludDhfdHlwZSIsICJpbnQxNl90eXBlIiwgImludDMyX3R5cGUiLCBhbmQKCXRoZWlyIHZhcmlhbnRzLiAgVGhlc2UgY2hhbmdlcyBhcmUgY29vcmRpbmF0ZWQgd2l0aCBjb3JyZXNwb25kaW5nCgljaGFuZ2VzIGluIC4uL2JmZC9vYXN5cy5jLgoKV2VkIEp1biAxNiAxMDo0MzowOCAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIHJlbW92ZWQuCgpUdWUgSnVuICA4IDEyOjE2OjAzIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJIFN1cHBvcnQgZm9yIEg4LzMwMC1ICgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9oODMwMCwgcHJpbnRfaW5zbl9oODMwMGgpOiBEZWNsYXJlIGl0LgoJKiBjb2ZmL2g4MzAwLmg6IE5ldyBtYWdpYyBudW1iZXIuCgkqIGNvZmYvaW50ZXJuYWwuaDogTmV3IHJlbG9jYXRpb25zLgoJKiBvcGNvZGUvaDgzMDAuaDogTG90cyBvZiBuZXcgb3Bjb2Rlcy4KClR1ZSBKdW4gIDEgMDc6MzU6MDMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGtyLXBjLmN5Z251cy5jb20pCgoJKiBhbnNpZGVjbC5oIChjb25zdCk6IERvbid0IGRlZmluZSBpdCBpZiBpdCdzIGFscmVhZHkgZGVmaW5lZC4KClRodSBNYXkgMjcgMTg6MTk6NTEgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX2hwcGEpOiBEZWNsYXJlIGl0LgoKCSogYmZkLmg6IE1vdmVkIHRvIGJmZCBkaXJlY3RvcnkuICBTbWFsbCBzdHViIGhlcmUgaW5jbHVkZXMgaXQKCXdpdGhvdXQgcmVxdWlyaW5nICItSS4uL2JmZCIuCgpUaHUgQXByIDI5IDEyOjA2OjEzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBkZW5lYi5jeWdudXMuY29tKQoKCSogYmZkLmg6IFVwZGF0ZWQgd2l0aCBCU0ZfRlVOQ1RJT04uCgpNb24gQXByIDI2IDE4OjE1OjUwIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYmZkLmgsIGRpcy1hc20uaDogVXBkYXRlZCB3aXRoIEhpdGFjaGkgU0guCgpGcmkgQXByIDIzIDE4OjQxOjM4IDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYmZkLmg6IFVwZGF0ZWQgd2l0aCBhbHBoYSBjaGFuZ2VzLgoJKiBkaXMtYXNtLmg6IEFkZGVkIGFscGhhLgoKRnJpIEFwciAxNiAxNzozNTozMCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGUgZm9yIHNpZ25lZCBiZmRfKmdldF8qLgoKVGh1IEFwciAxNSAwOToyNDoyMSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGVkIGZvciBmaWxlX3RydW5jYXRlZCBlcnJvci4KClRodSBBcHIgIDggMTA6NTM6NDcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogYW5zaWRlY2wuaDogSWYgbm8gQU5TSSwgZGVmaW5lIGNvbnN0IHRvIGJlIGVtcHR5LgoKVGh1IEFwciAgMSAwOTowMDoxMCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaDogRGVjbGFyZSBhMjlrIGFuZCBpOTYwIHByaW50X2luc25fKi4KCgkqIGRpcy1hc20uaDogQWRkIHByaW50X2FkZHJlc3NfZnVuYyBhbmQgcmVsYXRlZCBzdHVmZi4KCgkqIGRpcy1hc20uaCAoZGlzX2FzbV9yZWFkX21lbW9yeSk6IEZpeCBwcm90b3R5cGUuCgpXZWQgTWFyIDMxIDE3OjQwOjE2IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oOiBBZGQgcHJpbnRfaW5zbl9zcGFyYy4KCldlZCBNYXIgMzEgMTc6NTE6NDIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogYmZkLmg6IFVwZGF0ZWQgZm9yIEJGRF9SRUxPQ19NSVBTX0dQUkVMIGFuZCBiZmRfW2dzXWV0X2dwX3NpemUKCXByb3RvdHlwZXMuCgpXZWQgTWFyIDMxIDE2OjM1OjEyIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmg6IChkaXNhc3NlbWJsZV9pbmZvKTogIEZpeCB0eXBvIGluIHByb3RvdHlwZSBvZgoJZGlzX2FzbV9tZW1vcnlfZXJyb3IoKS4KClR1ZSBNYXIgMzAgMTk6MDk6MjMgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmggKGRpc2Fzc2VtYmxlcl9pbmZvKTogQWRkIHJlYWRfbWVtb3J5X2Z1bmMsCgltZW1vcnlfZXJyb3JfZnVuYywgYnVmZmVyLCBhbmQgbGVuZ3RoLgoJKHtHREJfLH1JTklUX0RJU0FTU0VNQkxFX0lORk8pOiBTZXQgdGhlbS4KCXByaW50X2luc25fKjogUmVtb3ZlIHNlY29uZCBhcmd1bWVudC4KClR1ZSBNYXIgMzAgMTQ6NDg6NTUgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuaDogVXBkYXRlIGZvciBsbWEgZmllbGQgb2Ygc2VjdGlvbi4KClR1ZSBNYXIgMzAgMTI6MjI6NTUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBhbnNpZGVjbC5oOiBVc2UgQU5TSSB2ZXJzaW9ucyBvbiBBSVggcmVnYXJkbGVzcyBvZiBfX1NURENfXy4KCkZyaSBNYXIgMTkgMTQ6NDk6NDkgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmg6IEFkZCBoODUwMC4KClRodSBNYXIgMTggMTM6NDk6MDkgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogaWVlZS1mbG9hdC5oOiAgTW92ZWQgZnJvbSAuLi9nZGIuCgkqIGRpcy1hc20uaDogIE5ldyBmaWxlLiAgSW50ZXJmYWNlIHRvIGRpcy1hc3NlbWJsZXIuCgpUaHUgTWFyIDExIDEwOjUyOjU3IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZGVtYW5nbGUuaCAoRE1HTF9OT19PUFRTKTogIEFkZCBkZWZpbmUgKHNldCB0byAwKSB0byB1c2UKCWluIHBsYWNlIG9mIGJhcmUgMCwgZm9yIHJlYWRhYmlsaXR5IHJlYXNvbnMuCgpUdWUgTWFyICAyIDE3OjUwOjExIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZGVtYW5nbGUuaDogIFJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gY2Zyb250IHdpdGggQVJNLgoKVHVlIEZlYiAyMyAxMjoyMToxNCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBiZmQuaDogVXBkYXRlIGZvciBuZXcgZWxlbWVudHMgaW4gSlVNUF9UQUJMRS4KClR1ZSBGZWIgMTYgMDA6NTE6MzAgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBiZmQuaDogIFVwZGF0ZSBmb3IgQkZEX1ZFUlNJT04gMi4xLgoKVHVlIEphbiAyNiAxMTo0OToyMCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBiZmQuaDogVXBkYXRlIGZvciBTRUNfSVNfQ09NTU9OIGZsYWcuCgpUdWUgSmFuIDE5IDEyOjI1OjEyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGUgZm9yIGJmZF9hc3ltYm9sX3ZhbHVlIGJ1ZyBmaXguCgpGcmkgSmFuICA4IDE2OjM3OjE4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGUgdG8gaW5jbHVkZSBFQ09GRiB0ZGF0YSBhbmQgdGFyZ2V0X2ZsYXZvdXIuCgpTdW4gRGVjIDI3IDE3OjUyOjMwIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogYmZkLmg6ICBBZGQgZGVjbGFyYXRpb24gZm9yIGJmZF9nZXRfc2l6ZSgpLgoKVHVlIERlYyAyMiAyMjo0Mjo0NiAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGRlbWFuZ2xlLmg6ICBQcm90ZWN0IGZpbGUgZnJvbSBtdWx0aXBsZSBpbmNsdXNpb25zIHdpdGgKCSNpZiAhZGVmaW5lZChERU1BTkdMRV9IKS4uLiNkZWZpbmUgREVNQU5HTEVfSC4uLiNlbmRpZi4KCk1vbiBEZWMgMjEgMjE6MjU6NTAgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgVXBkYXRlIHRvIGdldCBocHBhX2NvcmVfc3RydWN0IGZyb20gYmZkLmMuCgpUaHUgRGVjIDE3IDAwOjQyOjM1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogYmZkLmg6ICBVcGRhdGUgdG8gZ2V0IHRla2hleCB0ZGF0YSBuYW1lIGNoYW5nZSBmcm9tIGJmZC4KCk1vbiBOb3YgIDkgMjM6NTU6NDIgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBhbnNpZGVjbC5oOiAgVXBkYXRlIGNvbW1lbnRzIHRvIGRpc2NvdXJhZ2UgdXNlIG9mIEVYRlVOLgoKVGh1IE5vdiAgNSAxNjozNTo0NCAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBiZmQuaDogVXBkYXRlIHRvIGJyaW5nIGluIFNFQ19TSEFSRURfTElCUkFSWS4KClRodSBOb3YgIDUgMDM6MjE6MzIgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBiZmQuaDogIFVwZGF0ZSB0byBtYXRjaCBFWEZVTiwgYmZkX3NlY2xldF9zdHJ1Y3QsIGFuZCBTREVGCgljbGVhbnVwcyBpbiBiZmQuCgpXZWQgTm92ICA0IDA3OjI4OjA1IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogYm91dC5oIChOX0NBTExOQU1FLCBOX0JBTE5BTUUpOiBEZWZpbmUgYXMgY2hhci10eXBlIHZhbHVlcywgc28KCXdpZGVuaW5nIHdvcmtzIGNvbnNpc3RlbnRseS4KCkZyaSBPY3QgMTYgMDM6MTc6MDggMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBnZXRvcHQuaDogIFVwZGF0ZSB0byBSZXZpc2VkIFN0YW5kYXJkIEZTRiBWZXJzaW9uLgoKVGh1IE9jdCAxNSAyMTo0MzoyMiAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAc2VuZGFpLmN5Z251cy5jb20pCgoJKiBnZXRvcHQuaCAoc3RydWN0IG9wdGlvbik6IHVzZSB0aGUgcHJvdmlkZWQgZW51bSBmb3IgaGFzX2FyZy4KCgkqIGRlbWFuZ2xlLmggKEFVVE9fREVNQU5HTElORywgR05VX0RFTUFOR0xJTkcsCgkgIExVQ0lEX0RFTUFOR0xJTkcpOiB1bHRyaXggY29tcGlsZXJzIHJlcXVpcmUgZW51bXMgdG8gYmUKCSAgZW51bXMgYW5kIGludHMgdG8gYmUgaW50cyBhbmQgY2FzdHMgd2hlcmUgdGhleSBtZWV0LiAgY2FzdCBzb21lCgkgIGVudW1zIGludG8gaW50cy4KClRodSBPY3QgMTUgMDQ6MzU6NTEgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBiZmQuaDogIFVwZGF0ZSBhZnRlciBjb21tZW50IGNoYW5nZXMuCgpUaHUgT2N0ICA4IDA5OjAzOjAyIDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYmZkLmggKGJmZF9nZXRfc3ltYm9sX2xlYWRpbmdfY2hhcik6IG5ldyBtYWNybyBmb3IgZ2V0dGluZyBpbiB4dmVjCgpUaHUgU2VwICAzIDA5OjEwOjUwIDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBiZmQuaCAoc3RydWN0IHJlbG9jX2hvd3RvX3N0cnVjdCk6ICBzaXplIG5lZWRzIHRvIGJlIHNpZ25lZCBpZgoJaXQncyBnb2luZyB0byBob2xkIG5lZ2F0aXZlIHZhbHVlcy4KClN1biBBdWcgMzAgMTc6NTA6MjcgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogZGVtYW5nbGUuaDogIE5ldyBmaWxlLCBtb3ZlZCBmcm9tIC4uL2dkYi4gIE1hZGUgaW5kZXBlbmRlbnQKCW9mIGdkYi4gIEFsbG93IGRlbWFuZ2xpbmcgc3R5bGUgb3B0aW9uIHRvIGJlIHBhc3NlZCBhcyBhCglwYXJhbWV0ZXIgdG8gY3BsdXNfZGVtYW5nbGUoKSwgYnV0IHVzaW5nIHRoZQoJY3VycmVudF9kZW1hbmdsaW5nX3N0eWxlIGdsb2JhbCBhcyB0aGUgZGVmYXVsdC4KClNhdCBBdWcgMjkgMTA6MDc6NTUgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmg6ICBNZXJnZSBjb21tZW50IGNoYW5nZSBmcm9tIGN1cnJlbnQgRlNGIHZlcnNpb24uCgpUaHUgQXVnIDI3IDEyOjU5OjI5IDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCgoJKiBiZmQuaDogYWRkIHdlMzJrCgpUdWUgQXVnIDI1IDE1OjA3OjQ3IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYmZkLmg6IG5ldyBhZnRlciBaODAwMCBzdHVmZgoKTW9uIEF1ZyAxNyAwOTowMToyMyAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBSZWdlbmVyYXRlZCBhZnRlciBwYWdlL3NlZ21lbnQgc2l6ZSBjaGFuZ2VzLgoKU2F0IEF1ZyAgMSAxMzo0NjozMSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suaDogTWVyZ2UgY2hhbmdlcyBmcm9tIGN1cnJlbnQgRlNGIHZlcnNpb24uCgpNb24gSnVsIDIwIDIxOjA2OjIzIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogb2JzdGFjay5oIChhcmVhX2lkLCBmbGFncyk6ICBSZW1vdmUsIHJlcGxhY2Ugd2l0aCBleHRyYV9hcmcsCgl1c2VfZXh0cmFfYXJnLCBhbmQgbWF5YmVfZW1wdHlfb2JqZWN0LgoJKiBvYnN0YWNrLmggKE9CU1RBQ0tfTUFZQkVfRU1QVFlfT0JKRUNULCBPQlNUQUNLX01NQUxMT0NfTElLRSk6CglSZW1vdmUsIHJlcGxhY2VkIGJ5IG1heWJlX2VtcHR5X29iamVjdCBhbmQgdXNlX2V4dHJhX2FyZyBiaXRmaWVsZHMuCgkqIG9ic3RhY2suaCAob2JzdGFja19mdWxsX2JlZ2luLCBfb2JzdGFja19iZWdpbik6ICBSZW1vdmUgYXJlYV9pZAoJYW5kIGZsYWdzIGFyZ3VtZW50cy4KCSogb2JzdGFjay5oIChvYnN0YWNrX2FsbG9jX2FyZyk6ICBOZXcgbWFjcm8gdG8gc2V0IGV4dHJhX2FyZy4KClRodSBKdWwgMTYgMDg6MTI6NDQgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuaDogbmV3IGFmdGVyIGFkZGluZyBCRkRfSVNfUkVMQVhBQkxFCgpTYXQgSnVsICA0IDAzOjIyOjIzIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLmg6ICBSZWdlbiBhZnRlciBhZGRpbmcgQlNGX0ZJTEUuCgpNb24gSnVuIDI5IDE0OjE4OjM2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBzdW5maXNoKQoKCSogb2JzdGFjay5oOiAgQ29udmVydCBiY29weSgpIHVzZSB0byBtZW1jcHkoKSwgd2hpY2ggaXMgbW9yZQoJcG9ydGFibGUsIG1vcmUgc3RhbmRhcmQsIGFuZCBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgZ2NjJ3MgYnVpbHRpbgoJZnVuY3Rpb25zIGZvciBpbmNyZWFzZWQgcGVyZm9ybWFuY2UuCgpUaHUgSnVuIDI1IDA0OjQ2OjA4IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW5zaWRlY2wuaCAoUEFSQU1TKTogIEluY29ycG9yYXRlIHRoaXMgbWFjcm8gZnJvbSBnZGIncyBkZWZzLmguCglJdCdzIGEgY2xlYW5lciB3YXkgdG8gZm9yd2FyZC1kZWNsYXJlIGZ1bmN0aW9uIHByb3RvdHlwZXMuCgpGcmkgSnVuIDE5IDE1OjQ2OjMyIDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBiZmQuaDogIEhQUEEgbWVyZ2UuCgpUdWUgSnVuIDE2IDIxOjMwOjU2IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogZ2V0b3B0Lmg6IGdyYXR1aXRvdXMgd2hpdGUgc3BhY2UgY2hhbmdlcyBtZXJnZWQgZnJvbSBvdGhlciBwcmVwCgkgIHJlbGVhc2VzLgoKVGh1IEp1biAxMSAwMToxMDo1NSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgUmVnZW4nZCBmcm9tIGJmZC5jIGFmdGVyIHJlbW92aW5nIGVsZl9jb3JlX3RkYXRhX3N0cnVjdC4KCk1vbiBNYXkgMTggMTc6Mjk6MDMgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBnZXRvcHQuaDogbWVyZ2VkIGNoYW5nZXMgZnJvbSBtYWtlLTMuNjIuMTEuCgoJKiBnZXRvcHQuaDogbWVyZ2VkIGNoYW5nZXMgZnJvbSBncmVwLTEuNiAoYWxwaGEpLgoKRnJpIE1heSAgOCAxNDo1MzozMiAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5oOiBtZXJnZWQgY2hhbmdlcyBmcm9tIGJpc29uLTEuMTguCgpTYXQgTWFyIDE0IDE3OjI1OjIwIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogb2JzdGFjay5oOiAgQWRkICJhcmVhX2lkIiBhbmQgImZsYWdzIiBtZW1iZXJzIHRvIG9ic3RhY2sKCXN0cnVjdHVyZS4gIEFkZCBvYnN0YWNrX2NodW5rZnVuKCkgYW5kIG9ic3RhY2tfZnJlZWZ1bigpIHRvCglzZXQgZnVuY3Rpb25zIGV4cGxpY2l0bHkuICBDb252ZXJ0IG1heWJlX2VtcHR5X29iamVjdCB0bwoJYSBiaXQgaW4gImZsYWdzIi4KClRodSBGZWIgMjcgMjI6MDE6MDIgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiB3YWl0LmggKFdJRlNUT1BQRUQpOiAgQWRkIElCTSByczYwMDAtc3BlY2lmaWMgdmVyc2lvbi4KCkZyaSBGZWIgMjEgMjA6NDk6MjAgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmg6ICBBZGQgb2JzdGFja19mdWxsX2JlZ2luLgoJKiBiZmQuaCwgb2JzdGFjay5oOiAgUHJvdG9saW50LgoKVGh1IEphbiAzMCAwMToxODo0MiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgUmVtb3ZlIGNvbW1hIGZyb20gZW51bSBkZWNsYXJhdGlvbi4KCk1vbiBKYW4gMjcgMjI6MDE6MTMgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oIDogbmV3IHRhcmdldCBlbnRyLCBiZmRfcmVsYXhfc2VjdGlvbgoKV2VkIERlYyAxOCAxNzoxOTo0NCAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYmZkLmgsIGllZWUuaCwgb3Bjb2RlL202OGsuaCwgb3Bjb2RlL3NwYXJjLmg6ICBBTlNJZnkgZW51bXMuCgpUaHUgRGVjIDEyIDIwOjU5OjU2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogZm9wZW4tc2FtZS5oLCBmb3Blbi1iaW4uaDogIE5ldyBmaWxlcyBmb3IgY29uZmlndXJpbmcKCXdoZXRoZXIgZm9wZW4gZGlzdGluZ3Vpc2hlcyBiaW5hcnkgZmlsZXMgb3Igbm90LiAgRm9yIHVzZQoJYnkgaG9zdC1kZXBlbmRlbnQgY29uZmlnIGZpbGVzLgoKU2F0IE5vdiAzMCAyMDo0Njo0MyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBjaGFuZ2UgdGhlIGRvY3VtZW50YXRpb24gZm9ybWF0LgoKCSogY3JlYXRlZCBjb2ZmLCBlbGYgYW5kIG9wY29kZSBhbmQgYW91dCBkaXJlY3Rvcmllcy4gTW92ZWQ6CgoJYW91dDY0LmgJPT0+IGFvdXQvYW91dDY0LmgKCWFyLmgJCT09PiBhb3V0L2FyLmgKCWEub3V0LmVuY2FwLmgJPT0+IGFvdXQvZW5jYXAuaAoJYS5vdXQuaG9zdC5oCT09PiBhb3V0L2hvc3QuaAoJYS5vdXQuaHAuaAk9PT4gYW91dC9ocC5oCglhLm91dC5zdW40LmgJPT0+IGFvdXQvc3VuNC5oCglyYW5saWIuaAk9PT4gYW91dC9yYW5saWIuaAoJcmVsb2MuaAkJPT0+IGFvdXQvcmVsb2MuaAoJc3RhYi5kZWYJPT0+IGFvdXQvc3RhYi5kZWYKCXN0YWIuZ251LmgJPT0+IGFvdXQvc3RhYl9nbnUuaAoKCWNvZmYtYTI5ay5oCT09PiBjb2ZmL2EyOWsuaAoJY29mZi1oODMwMC5oCT09PiBjb2ZmL2g4MzAwLmgKCWNvZmYtaTM4Ni5oCT09PiBjb2ZmL2kzODYuaAoJY29mZi1pOTYwLmgJPT0+IGNvZmYvaTk2MC5oCglpbnRlcm5hbGNvZmYuaAk9PT4gY29mZi9pbnRlcm5hbC5oCgljb2ZmLW02OGsuaAk9PT4gY29mZi9tNjhrLmgKCWNvZmYtbTg4ay5oCT09PiBjb2ZmL204OGsuaAoJY29mZi1taXBzLmgJPT0+IGNvZmYvbWlwcy5oCgljb2ZmLXJzNjAwMC5oCT09PiBjb2ZmL3JzNjAwMC5oCgoJZWxmLWNvbW1vbi5oCT09PiBlbGYvY29tbW9uLmgKCWR3YXJmLmgJCT09PiBlbGYvZHdhcmYuaAoJZWxmLWV4dGVybmFsLmgJPT0+IGVsZi9leHRlcm5hbC5oCgllbGYtaW50ZXJuYWwuaCAgPT0+IGVsZi9pbnRlcm5hbC5oCgoJYTI5ay1vcGNvZGUuaAk9PT4gb3Bjb2RlL2EyOWsuaAoJYXJtLW9wY29kZS5oCT09PiBvcGNvZGUvYXJtLmgKCWg4MzAwLW9wY29kZS5oCT09PiBvcGNvZGUvaDgzMDAuaAoJaTM4Ni1vcGNvZGUuaAk9PT4gb3Bjb2RlL2kzODYuaAoJaTg2MC1vcGNvZGUuaAk9PT4gb3Bjb2RlL2k4NjAuaAoJaTk2MC1vcGNvZGUuaAk9PT4gb3Bjb2RlL2k5NjAuaAoJbTY4ay1vcGNvZGUuaAk9PT4gb3Bjb2RlL202OGsuaAoJbTg4ay1vcGNvZGUuaAk9PT4gb3Bjb2RlL204OGsuaAoJbWlwcy1vcGNvZGUuaAk9PT4gb3Bjb2RlL21pcHMuaAoJbnAxLW9wY29kZS5oCT09PiBvcGNvZGUvbnAxLmgKCW5zMzJrLW9wY29kZS5oCT09PiBvcGNvZGUvbnMzMmsuaAoJcG4tb3Bjb2RlLmgJPT0+IG9wY29kZS9wbi5oCglweXItb3Bjb2RlLmgJPT0+IG9wY29kZS9weXIuaAoJc3BhcmMtb3Bjb2RlLmgJPT0+IG9wY29kZS9zcGFyYy5oCgl0YWhvZS1vcGNvZGUuaAk9PT4gb3Bjb2RlL3RhaG9lLmgKCXZheC1vcGNvZGUuaAk9PT4gb3Bjb2RlL3ZheC5oCgoKCldlZCBOb3YgMjcgMTA6Mzg6MzEgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBpbnRlcm5hbGNvZmYuaDogKGludGVybmFsX3NjbmhkcikgdG9vayBvdXQgI2RlZiBkZXBlbmRlbmN5LCBub3cKCXNfbnJlbG9jIGFuZCBzX25sbm5vIGFyZSBhbHdheXMgbG9uZy4gCShpbnRlcm5hbF9yZWxvYyk6IGFsbHdheXMKCWhhcyBhbiBvZmZzZXQgZmllbGQgbm93LgoKRnJpIE5vdiAyMiAwODoxMjo1OCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYtcnM2MDAwLmg6ICBMaW50OyB1c2UgdW5zaWduZWQgY2hhcnMgZm9yIGV4dGVybmFsIGZpZWxkcy4KCSogaW50ZXJuYWxjb2ZmLmg6ICBMaW50OyBjYXN0IHN0b3JhZ2UgY2xhc3NlcyB0byBzaWduZWQgY2hhci4KClRodSBOb3YgMjEgMjE6MDE6MDUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBzdGFiLmRlZjogUmVtb3ZlIHRoZSBHTlUgZXh0ZW5kZWQgdHlwZSBjb2RlcyAoZS5nLiBOX1NFVFQpLgoJKiBhb3V0NjQuaDogIFRoZSBoZXVyaXN0aWMgZm9yIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4KCXN1bm9zLXN0eWxlIGFuZCBic2Qtc3R5bGUgWk1BR0lDIGZpbGVzICh3cnQuIHdoZXJlIHRoZQoJdGV4dCBzZWdtZW50IHN0YXJ0cykgaXMgbW92ZWQgaW50byAodGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZikKCXRoZSBtYWNybyBOX0hFQURFUl9JTl9URVhULiAgVGhpcyBkZWZpbml0aW9uIGlzIG9ubHkgdXNlZAoJaWYgbm8gb3RoZXIgZGVmaW5pdGlvbiBpcyB1c2VkIC0gZS5nLiBiZmQvbmV3c29zMy5jIGRlZmluZXMKCU5fSEVBREVSX0lOX1RFWFQoeCkgdG8gYmUgYWx3YXlzIDAgKGFzIGJlZm9yZSkuCgpUaHUgTm92IDIxIDExOjUzOjAzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW91dDY0LmggKE5fVFhUQUREUiwgTl9UWFRPRkYsIE5fVFhUU0laRSk6ICBOZXcgZGVmaW5pdGlvbnMKCXRoYXQgc2hvdWxkIGhhbmRsZSBhbGwgdXNlcy4gIExPR0lDQUxfIHZlcnNpb25zIGRlbGV0ZWQuCglFbGltaW5hdGUgTl9IRUFERVJfSU5fVEVYVCwgdXNpbmcgYV9lbnRyeSB0byBkZXRlcm1pbmUgd2hpY2gKCWtpbmQgb2Ygem1hZ2ljIGEub3V0IGZpbGUgd2UgYXJlIGxvb2tpbmcgYXQuCgkqIGNvZmYtcnM2MDAwLmg6ICBUeXBvLgoKVHVlIE5vdiAxOSAxODo0MzozNyAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkoTm90ZTogIFRoaXMgaXMgYSByZXZpc2VkIGVudHJ5LCBhcyB3YXMgYW91dDY0LmguKQoJKiBhb3V0NjQuaDogIFNvbWUgY2xlYW51cHMgb2YgTl9UWFRBRERSIGFuZCBOX1RYVE9GRjoKCVdpbGwgbm93IHdvcmsgZm9yIGJvdGggb2xkLSBhbmQgbmV3LXN0eWxlIFpNQUdJQyBmaWxlcywKCWRlcGVuZGluZyBvbiBOX0hFQURFUl9JTl9URVhUIG1hY3JvLgoJQWRkIExPR0lDQUxfVFhUQUREUiwgTE9JQ0FMX1RYVE9GRiBhbmQgTE9HSUNBTF9UWFRTSVpFCgl0aGF0IGRvbid0IGNvdW50IHRoZSBleGVjIGhlYWRlciBhcyBwYXJ0CglvZiB0aGUgdGV4dCBzZWdtZW50LCB0byBiZSBjb25zaXN0ZW50IHdpdGggYmZkLgoJKiBhLm91dC5zdW40Lmg6ICBTaW1wbGlmaWVkL2ZpeGVkIGZvciBwcmV2aW91cyBjaGFuZ2UuCgpNb24gTm92IDE4IDAwOjAyOjA2IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmYuaDogIFVwZGF0ZSB0byBEV0FSRiBkcmFmdCA1IHZlcnNpb24gZnJvbSBnY2MyLgoKVGh1IE5vdiAxNCAxOTo0NDo1OSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN0YWIuZGVmOiAgQWRkZWQgZGVmcyBmb3IgZXh0ZW5kZWQgR05VIHN5bWJvbCB0eXBlcywKCXN1Y2ggYXMgTl9TRVRULiAgVGhlc2UgYXJlIG5vcm1hbGx5IGlmZGVmJ2Qgb3V0IChiZWNhdXNlCglvZiBjb25mbGljdHMgd2l0aCBhLm91dC5nbnUuaCksIGJ1dCBhcmUgdXNlZCBieSBiZmJfc3RhYl9uYW1lKCkuCgpUaHUgTm92IDE0IDE5OjE3OjAzIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLWNvbW1vbi5oOiAgQWRkIGRlZmluZXMgdG8gc3VwcG9ydCBFTEYgc3ltYm9sIHRhYmxlIGNvZGUuCgpNb24gTm92IDExIDE5OjAxOjA2IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLWludGVybmFsLmgsIGVsZi1leHRlcm5hbC5oLCBlbGYtY29tbW9uLmg6ICBBZGQgc3VwcG9ydCBmb3IKCW5vdGUgc2VjdGlvbnMsIHdoaWNoIGFyZSB1c2VkIGluIEVMRiBjb3JlIGZpbGVzIHRvIGhvbGQgY29waWVzCglvZiB2YXJpb3VzIC9wcm9jIHN0cnVjdHVyZXMuCgpUaHUgTm92ICA3IDA4OjU4OjI2IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IGN5Z251cy5jb20pCgoJKiBpbnRlcm5hbGNvZmYuaDogdG9vayBvdXQgdGhlIE04OCBkZXBlbmRlbmN5IGluIHRoZSBsaW5lbm8KCXN0cnVjdC4KCSogY29mZi1tODhrLmg6IGRlZmluZXMgR0VUX0xJTkVOT19MTk5PIGFuZCBQVVRfTElORU5PX0xOTk8gdG8gdXNlCgkzMmJpdCBsaW5ubyBlbnRyaWVzLgoJKiBhMjlrLW9wY29kZS5oOiBmaXhlZCBlbmNvZGluZyBvZiBtdGFjYwoKU3VuIE5vdiAgMyAxMTo1NDoyMiAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGVkIGZyb20gLi4vYmZkL2JmZC1pbi5oIChxLnYpLgoKRnJpIE5vdiAgMSAxMToxMzo1MyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGludGVybmFsY29mZi5oOiAgQWRkIHhfY3NlY3QgZGVmaW5lcy4KCkZyaSBPY3QgMjUgMDM6MTg6MjAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBSZW5hbWUgQ09GRi1yZWxhdGVkIGZpbGVzIGluIGBjb2ZmLUFSQ0guaCcgZm9ybS4KCWNvZmYtYTI5ay5oLCBjb2ZmLWkzODYuaCwgY29mZi1pOTYwLmgsIGNvZmYtbTY4ay5oLCBjb2ZmLW04OGsuaCwKCWNvZmYtbWlwcy5oLCBjb2ZmLXJzNjAwMC5oIHRvIGJlIGV4YWN0LgoKVGh1IE9jdCAyNCAyMjoxMToxMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglSUy82MDAwIHN1cHBvcnQsIGJ5IE1ldGluIEcuIE96aXNpaywgTWltaSBQaPv0bmctVGjlbyBW9SwgYW5kCglKb2huIEdpbG1vcmUuCgoJKiBhLm91dC5nbnUuaDogIFVwZGF0ZSBzbGlnaHRseS4KCSogYmZkLmg6ICBBZGQgbmV3IGVycm9yIGNvZGUsIGZpeCBkb2MsIGFkZCBiZmRfYXJjaF9yczYwMDAuCgkqIGludGVybmFsY29mZi5oOiAgQWRkIG1vcmUgRl8gY29kZXMgZm9yIGZpbGVoZHIuICBBZGQKCXJzLzYwMDAtZGVwZW5kZW50IGZpZWxkcyB0byBhb3V0aGRyLiAgQWRkIHN0b3JhZ2UgY2xhc3NlcwoJdG8gc3ltZW50cy4gIEFkZCA2MDAwLXNwZWNpZmljIGF1eGVudC4gIEFkZCByX3NpemUgaW4gcmVsb2MuCgkqIHJzNjAwMGNvZmYuYzogIE5ldyBmaWxlLgoKVGh1IE9jdCAyNCAwNDoxMzoyMCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGR3YXJmLmg6IE5ldyBmaWxlIGZvciBkd2FyZiBzdXBwb3J0LiAgQ29waWVkIGZyb20gZ2NjMgoJZGlzdHJpYnV0aW9uLgoKV2VkIE9jdCAxNiAxMzozMTo0NSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXQ2NC5oOiAgUmVtb3ZlIFBBR0VfU0laRSBkZWZpbmVzOyB0aGV5IGFyZSB0YXJnZXQtZGVwZW5kZW50LgoJQWRkIE5fRk5fU0VRIGZvciBOX0ZOIHN5bWJvbCB0eXBlIHVzZWQgb24gU2VxdWVudCBtYWNoaW5lcy4KCSogc3RhYi5kZWY6ICBJbmNsdWRlIE5fRk5fU0VRIGluIHRhYmxlLgoJKiBib3V0Lmg6ICBFeHRlcm5hbCBmb3JtYXRzIG9mIHN0cnVjdHVyZXMgdXNlIHVuc2lnbmVkIGNoYXJzLgoKRnJpIE9jdCAxMSAxMjo0MDo0MyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBiZmQuaDp1cGdyYWRlIGZyb20gYmZkLmMKCSogaW50ZXJuYWxjb2ZmLmg6IGFkZCBuX25hbWUsIG5femVyb2VzIGFuZCBuX29mZnNldCBtYWNyb3MKCSogYW1kY29mZi5oOiBEZWZpbmUgT01BR0lDIGFuZCBBT1VUSERSU1ouCgpGcmkgT2N0IDExIDEwOjU4OjA2IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogYS5vdXQuaG9zdC5oOiBDaGFuZ2UgU0VHTUVOVF9TSVpFIHRvIDB4MTAwMCBmb3IgU29ueS4KCSogYmZkLmggKGFsaWduX3Bvd2VyKTogQWRkIChhY3R1YWxseSBtb3ZlKSBjb21tZW50LgoKVHVlIE9jdCAgOCAxNToyOTozMiAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN5cy9oLXJ0YnNkLmg6IERlZmluZSBNSVNTSU5HX1ZGUFJJTlQgKGZvciBiaW51dGlscy9idWNvbW0uYykuCgpTdW4gT2N0ICA2IDE5OjI0OjM5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW91dDY0Lmg6ICBNb3ZlIHN0cnVjdCBpbnRlcm5hbF9leGVjIHRvIC4uL2JmZC9saWJhb3V0Lmggc28KCWl0IGNhbiBiZSBzaGFyZWQgYnkgYWxsIGBhLm91dC1mYW1pbHknIGNvZGUuICBSZW5hbWUKCUVYVEVSTkFMX0xJU1RfU0laRSB0byBFWFRFUk5BTF9OTElTVF9TSVpFLiAgVXNlIGJhc2ljIHR5cGVzCglmb3Igbmxpc3QgbWVtYmVycywgYW5kIG1ha2Ugc3RyeCBpbnRlZ3JhbCByYXRoZXIgdGhhbiBwb2ludGVyLgoJTW9yZSBjb21tZW50YXJ5IG9uIG5fdHlwZSB2YWx1ZXMuCgkqIGJvdXQuaDogIFByb3ZpZGUgYSBzdHJ1Y3QgZXh0ZXJuYWxfZXhlYyByYXRoZXIgdGhhbiBhbgoJaW50ZXJuYWxfZXhlYy4KCSogbTY4a2NvZmYuaDogIFJlbW92ZSBgdGFnZW50cmllcycgd2hpY2ggc251Y2sgaW4gZnJvbSB0aGUgaTk2MAoJQ09GRiBwb3J0LgoKRnJpIE9jdCAgNCAwMToyNTo1OSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGg4MzAwLW9wY29kZS5oOiAgUmVtb3ZlIGBfZW51bScgZnJvbSB0aGUgdHlwZWRlZiBmb3IgYW4gZW51bS4KCSogYmZkLmg6ICBVcGRhdGUgdG8gbWF0Y2ggYmZkIGNoYW5nZXMuCgoJKiBzeXMvaC1pMzg2bWFjaC5oLCBzeXNkZXAuaDogIEFkZCAzODYgTWFjaCBob3N0IHN1cHBvcnQuCgpUdWUgT2N0ICAxIDA0OjU4OjQyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLmgsIGVsZi1jb21tb24uaCwgZWxmLWV4dGVybmFsLmgsIGVsZi1pbnRlcm5hbC5oOgoJQWRkIHByZWxpbWluYXJ5IEVMRiBzdXBwb3J0LCBzdWZmaWNpZW50IGZvciBHREIsIGZyb20gRnJlZCBGaXNoLgoJKiBzeXNkZXAuaCwgc3lzL2gtYW1peC5oOiAgU3VwcG9ydCBBbWlnYSBTVlI0LgoKCSogc3lzL2gtdmF4dWx0Lmg6ICBNYWtlIGl0IHdvcmsuICAoRGF2aWQgVGF5bG9yIDx0YXlsb3JAdGhpbmsuY29tPikKCSogYS5vdXQudmF4Lmg6ICBSZW1vdmUgdW51c2VkIGFuZCBjb25mdXNpbmcgZmlsZS4KCk1vbiBTZXAgMzAgMTI6NTI6MzUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBzeXNkZXAuaDogRGVmaW5lIE5FV1NPUzNfU1lTLCBhbmQgdXNlIGl0LgoKRnJpIFNlcCAyMCAxMzozODoyMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGEub3V0LmdudS5oIChOX0ZOKTogIEl0cyB2YWx1ZSAqcmVhbGx5IGlzKiAweDFGLgoJRml4IGl0LCBhbmQgYWRkIGNvbW1lbnRzIHdhcm5pbmcgYWJvdXQgb3ItaW5nIE5fRVhUIHdpdGggaXQKCWFuZC9vciBOX1dBUk5JTkcuCgkqIGFvdXQ2NC5oIChOX0ZOKTogIEZpeCB2YWx1ZSwgYWRkIGNvbW1lbnRzIGFib3V0IE5fRVhULgoJKiBzdGFiLmRlZiAodGFibGUgYXQgZW5kKTogIFVwZGF0ZSB0byBzaG93IGFsbCB0aGUgdHlwZQoJdmFsdWVzIDwweDIwLCBpbmNsdWRpbmcgbG93IG9yZGVyIGJpdHMuICBNb3ZlIE5fRk4gdG8KCWl0cyByaWdodGZ1bCBwbGFjZS4KClR1ZSBTZXAgMTcgMTc6NDE6MzcgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIHN5cy9oLWlyaXgzLmg6ICBzZ2kvaXJpeCBzdXBwb3J0LgoKVHVlIFNlcCAxNyAwNzo1Mjo1OSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBzdGFiLmRlZiAoTl9ERUZEKTogIEFkZCBHTlUgTW9kdWxhLTIgZGVidWcgc3RhYiwgZnJvbSBBbmRyZXcKCUJlZXJzLgoKVGh1IFNlcCAxMiAxNDoxMjo1OSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpbnRlcm5hbGNvZmYuaCAoU1lNTk1MRU4sIEZJTE5NTEVOLCBESU1OVU0pOiAgRGVmaW5lIHRoZXNlCglmb3IgaW50ZXJuYWxjb2ZmLCBzZXBhcmF0ZWx5IGZyb20gdGhlIHZhcmlvdXMgZXh0ZXJuYWwgY29mZidzLgoJKiBhbWRjb2ZmLmgsIGJjczg4a2NvZmYuaCwgaTM4NmNvZmYuaCwgaW50ZWwtY29mZi5oLCBtNjhrY29mZi5oLAoJbTg4ay1iY3MuaDogUHJlZml4IFNZTU5NTEVOLCBGSUxOTUxFTiwgYW5kIERJTU5VTSB3aXRoIEVfJ3MgZm9yCgl0aGUgZXh0ZXJuYWwgc3RydWN0IGRlZmluaXRpb25zLgoJKiBlY29mZi5oOiBSZW1vdmUgdGhlc2UgI2RlZmluZSdzLCBrbHVkZ2Ugbm8gbG9uZ2VyIG5lZWRlZC4KCgkqIHN5cy9oLXVsdHJhMy5oOiAgQWRkIG5ldyBVbHRyYWNvbXB1dGVyIGhvc3QuCgkqIHN5c2RlcC5oOiAgQWRkIFVMVFJBM19TWU0xX1NZUyBhbmQgdXNlIGl0LgoKVHVlIFNlcCAxMCAxMDoxMTo0NiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpMzg2Y29mZi5oIChMSU5FU1opOiAgQWx3YXlzIDYsIG5vdCBiYXNlZCBvbiBzaXplb2YoKS4KCShGaXggZnJvbSBQZXRlciBTY2hhdWVyIDxwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZT4uKQoKV2VkIFNlcCAgNCAwODo1ODozNyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhLm91dC5nbnUuaCwgYW91dDY0Lmg6ICBBZGQgTl9XQVJOSU5HLiAgQ2hhbmdlIE5fRk4gdG8gMHgwRSwKCXRvIG1hdGNoIFN1bk9TIGFuZCBCU0QuICBBZGQgTl9DT01NIGFzIDB4MTIgZm9yIFN1bk9TIHNoYXJlZCBsaWIKCXN1cHBvcnQuCgkqIHN0YWIuZGVmOiAgQWRkIE5fQ09NTSB0byB0YWJsZSwgZml4IG92ZXJsYXAgY29tbWVudC4KClR1ZSBTZXAgIDMgMDY6Mjk6MjAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCU1lcmdlIHdpdGggbGF0ZXN0IEZTRiB2ZXJzaW9ucyBvZiB0aGVzZSBmaWxlcy4KCgkqIHN0YWIuZ251Lmg6ICBBZGQgTEFTVF9VTlVTRURfU1RBQl9DT0RFLgoJKiBzdGFiLmRlZjogIFVwZGF0ZSB0byBHUEwyLiAgTW92ZSBOX1dBUk5JTkcgb3V0LCBzaW5jZSBub3QgYQoJZGVidWcgc3ltYm9sLiAgQ2hhbmdlIGNvbW1lbnRzLCBhbmQgcmVvcmRlciB0YWJsZSB0byBudW1lcmljCglvcmRlci4gIFVwZGF0ZSBmaW5hbCB0YWJsZSBjb21tZW50LgoJKE5fRFNMSU5FLCBOX0JTTElORSk6ICBSZW51bWJlciBmcm9tIDB4NjYgYW5kIDB4NjgsIHRvIDB4NDYgYW5kIDB4NDguCgoJKiBvYnN0YWNrLmg6ICBHUEwyLiAgTWVyZ2UuCgpGcmkgQXVnIDIzIDAxOjU0OjIzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGEub3V0LmdudS5oLCBhLm91dC5zdW40Lmg6ICBNYWtlIFNFR01FTlRfU0laRSBhYmxlIHRvIGRlcGVuZAoJb24gdGhlIHBhcnRpY3VsYXIgYS5vdXQgYmVpbmcgZXhhbWluZWQuCgkqIGEub3V0LnN1bjQuaDogIERlZmluZSBzZWdtZW50IHNpemVzIGZvciBTdW4tMydzIGFuZCBTdW4tNCdzLgoJKiBGSVhNRTogIGEub3V0LmdudS5oIGlzIGFsbW9zdCBvYnNvbGV0ZS4KCSogRklYTUU6ICBhLm91dC5zdW40Lmggc2hvdWxkIGJlIHJlbmFtZWQgYS5vdXQuc3VuLmggbm93LgoKV2VkIEF1ZyAyMSAyMDozMjoxMyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBTdGFydCBhIENoYW5nZUxvZyBmb3IgdGhlIGluY2x1ZGVzIGRpcmVjdG9yeS4KCgkqIGEub3V0LmdudS5oIChOX0ZOKTogIEZpeCB2YWx1ZSAtLSB3YXMgMTUsIHNob3VsZCBiZSAweDFFLgoJKiBzdGFiLmRlZjogIFVwZGF0ZSBhbGxvY2F0aW9uIHRhYmxlIGluIGNvbW1lbnRzIGF0IGVuZCwKCXRvIHJlZmxlY3QgcmVhbGl0eSBhcyBJIGtub3cgaXQuCgoMCkxvY2FsIFZhcmlhYmxlczoKbW9kZTogY2hhbmdlLWxvZwpsZWZ0LW1hcmdpbjogOApmaWxsLWNvbHVtbjogNzQKdmVyc2lvbi1jb250cm9sOiBuZXZlcgpFbmQ6Cg==