RnJpIEp1biAgOCAyMTozNzo0NiBDRVNUIDIwMDcgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIHRocmVhZHMuYyBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmg6IHVzZSBzcGVjaWZpZWQgY2FsbGluZyBjb252ZW50aW9uIAoJICBmb3IgeG1sRGxsTWFpbi4gT2xkIFNES3MgKFZDNikgb25seSBzdXBwb3J0IEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlLgoJICBhZGQgeG1sRGxsTWFpbiB0byBoZWFkZXIgZm9yIHdpbjMyIHdoZW4gYnVpbGRpbmcgZm9yIHN0YXRpYyBkbGwKCkZyaSBKdW4gIDggMTA6NTE6MjggQ0VTVCAyMDA3IFJvYiBSaWNoYXJkcyA8cnJpY2hhcmRzQGN0aW5kdXN0cmllcy5uZXQ+CgoJKiB4bWx3cml0ZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBiZWluZyAKCSAgd3JpdHRlbiBtb3JlIHRoYW4gb25jZSBwZXIgZWxlbWVudCBzdGFydCB0YWcKCldlZCBKdW4gIDYgMTA6MTg6MjggUERUIDIwMDcgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggeG1sWFBhdGhOb2RlU2V0U29ydDsKCSAgZml4ZWQgcHJvYmxlbSB3aXRoIHhtbFhQYXRoTm9kZVRyYWlsaW5nU29ydGVkIChib3RoIGJ1ZyM0MTM0NTEpCgpXZWQgTWF5IDMwIDIyOjA1OjA4IFBEVCAyMDA3IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgcHJvYmxlbSB3aXRoIHN0cmluZyB2YWx1ZSBmb3IgUEkgbm9kZQoJICAoYnVnICM0NDIyNzUpCgpNb24gTWF5IDI4IDE2OjE0OjUwIENFU1QgMjAwNyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogZml4IGJ1ZyByZXBvcnRlZCBieSBGcmFu529pcyBEZWx5b24KClR1ZSBNYXkgMjIgMDg6NTk6NDggUERUIDIwMDcgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jOiBGaXhlZCB0eXBvIGluIHhtbENoYXJFbmNGaXJzdExpbmUgcG9pbnRlZCBvdXQKCSAgYnkgTWFyayBSb3dlIChidWcgIzQ0MDE1OSkKCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBBZGRlZCBjaGVjayBmb3IgZGVmaW5pdGlvbiBvZgoJICBfUE9TSVhfQ19TT1VSQ0UgdG8gYXZvaWQgd2FybmluZ3Mgb24gQXBwbGUgT1MvWCAocGF0Y2ggZnJvbQoJICBXZW5keSBEb3lsZSBhbmQgTWFyayBSb3dlLCBidWcgIzM0NjY3NSkKCSogc2NoZW1hdHJvbi5jLCB0ZXN0YXBpLmMsIHRyZWUuYywgeG1sSU8uYywgeG1sc2F2ZS5jOiBtaW5vcgoJICBjaGFuZ2VzIHRvIGZpeCBjb21waWxhdGlvbiB3YXJuaW5ncyAtIG5vIGNoYW5nZSB0byBsb2dpYy4KClR1ZSBNYXkgMTUgMjI6MTg6MDggUERUIDIwMDcgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBuYW5vaHR0cC5jOiBzbWFsbCBlbmhhbmNlbWVudCB0byBsYXN0IGZpeCwgcG9pbnRlZCBvdXQKCSAgYnkgQWxleCBDb3JuZWpvCgpUdWUgTWF5IDE1IDEyOjM4OjM4IFBEVCAyMDA3IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogbmFub2h0dHAuYzogZml4ZWQgcHJvYmxlbSBvbiBnemlwIHN0cmVhbXMgKGJ1ZyAjNDM4MDQ1KQoJKiB4cGF0aC5jOiBmaXhlZCBtaW5vciBzcG90IG9mIHJlZHVuZGFudCBjb2RlIC0gbm8gbG9naWMgY2hhbmdlLgoKRnJpIE1heSAxMSAyMjo0NToxOCBIS1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGVuaGFuY2VkIHRoZSBjb2RpbmcgZm9yIHhtbFhQYXRoQ2FzdE51bWJlclRvU3RyaW5nCgkgIGluIG9yZGVyIHRvIHByb2R1Y2UgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMKCSAgKGJ1ZyAjNDM3MTc5KQoKVGh1IE1heSAxMCAwMTo1Mjo0MiBDRVNUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlzdC5jOiBhcHBsaWVkIHBhdGNoIHRvIGZpeCB4bWxMaXN0QXBwZW5kKCkgZnJvbSAKCSAgR2Vvcmdlcy1BbmRy6SBTSUxCRVIKCSogdmFsaWQuYzogYWxzbyBmaXggdGhlIHBsYWNlIHdoZXIgaXQgd2FzIGNhbGxlZC4KCldlZCBNYXkgIDIgMTg6NDc6MzMgQ0VTVCAyMDA3IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB0cmllZCB0byBmaXggYW4gZXJyb3IgcHJvYmxlbSBvbiBlbnRpdHkgY29udGVudCBmYWlsdXJlCgkgIHJlcG9ydGVkIGJ5IE1pY2hhZWwgRGF5CgpXZWQgTWF5ICAyIDE4OjIzOjM1IENFU1QgMjAwNyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHR5cG8gcGF0Y2ggZnJvbSBCam9ybiBSZWVzZQoKV2VkIE1heSAgMiAxODoxMjo1OCBDRVNUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWljaGFlbCBEYXkgdG8gYWRkIHN1cHBvcnQgZm9yCgkgIDxlbWJlZD4KClRodSBBcHIgMjYgMTA6NTg6NTAgQ0VTVCAyMDA3IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogSmVhbi1EYW5pZWwgRHVwYXMgcG9pbnRlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcwoJICBpbiBodG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dC4KClRodSBBcHIgMjYgMTA6MzY6MjYgQ0VTVCAyMDA3IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jIGluY2x1ZGUvbGlieG1sL3VyaS5oOiBwYXRjaCBmcm9tIFJpY2hhcmQgSm9uZXMgdG8gc2F2ZQoJICB0aGUgcXVlcnkgcGFydCBpbiByYXcgZm9ybS4KCSogbGlieG1sMi1weXRob24tYXBpLnhtbDogYWxzbyBhZGRlZCBhY2Nlc3NvciBmb3IgdGhlIHB5dGhvbiBiaW5kaW5ncwoKV2VkIEFwciAyNSAxNTo1NzozMiBDRVNUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHN0Yy9NYWtlZmlsZS5hbSBkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0gTWFrZWZpbGUuYW06IGFwcGxpZWQKCSAgcGF0Y2ggZnJvbSBSaWNoYXJkIEpvbmVzIHRvIGZvciB0aGUgc2lsZW50IGZsYWcgb24gdmFsZ3JpbmQKCSAgd2hlbiBkb2luZyAibWFrZSB2YWxncmluZCIKCSogeG1scmVnZXhwLmM6IHJhaXNlIGEgcmVnZXhwIGVycm9yIHdoZW4gJ1wnIGlzIG1pc3VzZWQgdG8gZXNjYXBlCgkgIGEgc3RhbmRhcmQgY2hhcmFjdGVyLgoKVHVlIEFwciAyNCAyMDoxNToxNCBDRVNUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBSaWNoYXJkIEpvbmVzIHJlcG9ydGVkIHhtbEJ1ZmZlckFkZCAoYnVmLCAiIiwgLTEpLCBmaXhpbmcgaXQKClR1ZSBBcHIgMjQgMTA6NTk6MjggQ0VTVCAyMDA3IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBmaXggeG1sVVJJVW5lc2NhcGVTdHJpbmcgY29tbWVudHMgd2hpY2ggd2FzIGNvbmZ1c2luZwoKV2VkIEFwciAxOCAwOTo1MjoyNSBDRVNUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oIGxpYnhtbC5oOiBuZXcgcGF0Y2ggZnJvbSBBbmRyZWFzIFN0cmlja2UgdG8KCSAgYmV0dGVyIGludGVncmF0ZSBzdXBwb3J0IGZvciBXaW5kb3dzIENFCgpUdWUgQXByIDE3IDE2OjUwOjEyIENFU1QgMjAwNyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKiBjb25maWd1cmUuaW4gTkVXUzogcmVsZWFzZSBvZiBsaWJ4bWwyIDIuNi4yOAoKVHVlIEFwciAxNyAxNDo0Nzo0MiBDRVNUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIGxpYnhtbC5oIHdpbjMyL3dpbmNlL3dpbmNlY29tcGF0Lmggd2luMzIvd2luY2Uvd2luY2Vjb21wYXQuYwoJICB4bWxJTy5jIG5hbm9odHRwLmMgbmFub2Z0cC5jIHRyaW8uYyB0cmlvc3RyLmMgdHJpb3N0ci5oOiBhcHBsaWVkIAoJICBwYXRjaCBmcm9tIEFuZHJlYXMgU3RyaWNrZSB0byBlYXNlIHRoZSBjb21waWxhdGlvbiBvbiBXaW5kb3dzIENFCgpUdWUgQXByIDE3IDE0OjM0OjQ1IENFU1QgMjAwNyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgY2F0YWxvZy5jOiAieG1sbGludCB1bnVzYWJsZSBvbiB3aW4zMiIgc28gYXBwbGllZAoJICBhIGxpYnhtbDIgcGF0Y2ggZnJvbSBDaHJpc3RpYW4gRWhybGljaGVyCgpNb24gQXByIDE2IDA5OjA1OjAxIENFU1QgMjAwNyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGNoYW5nZSB0aGUgd2F5IHNjcmlwdC9zdHlsZSBhcmUgcGFyc2VkIHRvCgkgIG5vdCB0cnkgdG8gZGV0ZWN0IGNvbW1lbnRzLCByZXBvcnRlZCBieSBNaWtlIERheQoJKiByZXN1bHQvSFRNTC9kb2MzLio6IGFmZmVjdHMgdGhlIHJlc3VsdCBvZiB0aGF0IHRlc3QKCldlZCBBcHIgMTEgMjI6Mzg6MTggSEtUIDIwMDcgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWdleHAuYzogc21hbGwgZW5oYW5jZW1lbnQgZm9yIHF1YW50aWZpZXIgcmFuZ2Ugd2l0aAoJICBtaW4gb2NjdXJzIG9mIDA7IGZpeGVzIGJ1ZyA0MjU1NDIuCgkKRnJpIE1hciAzMCAxNDo0MTo1NyBDRVNUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBjaGFuZ2UgZnJvbSBNaWNoYWVsIERheSB0byBhdm9pZCBhIHByb2JsZW0gd2hlbgoJICBjb21waWxlZCB3aXRob3V0IHpsaWIgc3VwcG9ydC4KCldlZCBNYXIgMjEgMTc6NTg6MTMgQ0VUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogYXBwbGllZCBkb2N1bWVudGF0aW9uIHBhdGNoIGZyb20gSmFtZXMgRGVubmV0dAoKV2VkIE1hciAyMSAyMToyMDo0OCBIS1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggMHgyZCBpbiBDaGFyIFJhbmdlIChidWcgIzQyMDU5NikKCSogdGVzdC9yZWdleHAvYnVnNDIwNTk2LCByZXN1bHQvcmVnZXhwL2J1ZzQyMDU5NjogYWRkZWQgcmVncmVzc2lvbgoJICB0ZXN0IGZvciB0aGlzCgpXZWQgTWFyIDIxIDE0OjIzOjA4IEhLVCAyMDA3IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBtZW1vcnkgYWNjZXNzIGVycm9yIG9uIHBhcnNpbmcgb2YgbWV0YSBkYXRhCgkgIHdoaWNoIGhhZCBlcnJvcnMgKGJ1ZyAjMzgyMjA2KS4gIEFsc28gY2xlYW5lZCB1cCBhIGZldyB3YXJuaW5ncwoJICBieSBhZGRpbmcgc29tZSBhZGRpdGlvbmFsIERFQ0wgbWFjcm9zLgoKVHVlIE1hciAyMCAwOTo1ODoxMyBDRVQgMjAwNyAgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQmr2cm4gV2liZXJnIHRvIHRyeSB0byBmaXggYWdhaW4KCSAgdGhlIHNpbGx5IF9fc3NfZmFtaWxseSBwcm9ibGVtIG9uIHZhcmlvdXMgQUlYZXMsIHNob3VsZCBmaXggIzQyMDE4NAoKV2VkIE1hciAxNCAyMDozMDozOCBIS1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNvbmZpZ3VyZS5pbjogY29ycmVjdGVkIHNtYWxsIGVycm9yIGluIGxhc3QgY29tbWl0CgkqIHhtbHJlYWRlci5jOiBjb3JyZWN0ZWQgc21hbGwgdHlwbyBpbiBsYXN0IGNvbW1pdAoKV2VkIE1hciAxNCAxOTozNToyOCBIS1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgcHJvYmxlbSB3aXRoIHJlZmVyZW5jZWQgYXR0cmlidXRlIGdyb3VwcwoJICAoYnVnICM0MTc2MjEpCgkqIGNvbmZpZ3VyZS5pbjogcmUtb3JkZXJlZCBzb21lIGluY2x1ZGVzIGZvciB0eXBlcy5oIC8gc29ja2V0LmgKCSAgKGJ1ZyAjNDE2MDAxKQoKRnJpIE1hciAgOSAxNzo1NDo0MCBDRVQgMjAwNyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEp1bGllbiBSZWljaGVsIGNsZWFuaW5nIHVwIG1vZGUKCSAgYW5kIHN0YXRlIGludGVybmFsIGZsYWdzIG1peHVwcwoKV2VkIE1hciAgNyAxNjoxODoxOCBIS1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHhtbFhQYXRoQ21wTm9kZXMgZm9yIGluY29ycmVjdCByZXN1bHQgb24gY2VydGFpbgoJICBjYXNlcyB3aGVuIGNvbXBhcmluZyBpZGVudGljYWwgbm9kZXMgKGJ1ZyAjNDE1NTY3KSB3aXRoIHBhdGNoCgkgIGZyb20gT2xlZyBQYXJhc2NoZW5rbwoKRnJpIEZlYiAxNiAwOToxMzozOCBQU1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IGZpeGVkIHRhYiBwcm9ibGVtIHdpdGggcGF0Y2ggZnJvbQoJICBBbmRyZWFzIEhhbmtlIChidWcgIzQwODYyNikKClRodSBGZWIgMTUgMTI6NDM6MjggUFNUIDIwMDcgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MveG1sLmh0bWw6IENoYW5nZWQgYWxsIHJlZmVyZW5jZXMgdG8gbGlieG1sMiBDVlMgb3ZlciB0bwoJICB0aGUgY29ycmVzcG9uZGluZyBTVk4uICBBIGZldyBvdGhlciBzcGVsbGluZy9ncmFtbWFyL2xpbmtzCgkgIGFsc28gY2hhbmdlZC4KCSogZG9jL2xpYnhtbDItYXBpLnhtbCwgZG9jLyouaHRtbDogUmVnZW5lcmF0ZWQgYWxsIGRvY3MuCgpUdWUgRmViIDEzIDE4OjE1OjU4IFBTVCAyMDA3IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogRml4ZWQgbWVtb3J5IGJ1ZyB3aXRoIGludmFsaWQgZnVuY3Rpb24gcmVwb3J0ZWQgYnkKCSAgRnJhbmNvaXMgRGVseW9uIG9uIG1haWxpbmcgbGlzdAoKTW9uIEZlYiAxMiAxNjo0MDo0OCBQU1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBpbnZhbGlkIGNoYXIgZW5jb3VudGVyZWQKCSAgZHVyaW5nIHRleHQgaW5jbHVkZSAocmVwb3J0ZWQgb24geHNsdCBtYWlsaW5nIGxpc3QpCgpNb24gRmViIDEyIDE4OjMwOjAxIENFVCAyMDA3IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBzbWFsbCBjbGVhbnVwIHRvIGF2b2lkIHBhY2thZ2luZyAuc3ZuCgkqIGxpYnhtbC5oIHRocmVhZHMuYyBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCB0byBhdm9pZCBhIHByb2JsZW0KCSAgaW4gY29uY3VycmVudCB0aHJlYWRlZCBpbml0aWFsaXphdGlvbiBmaXggZnJvbSBUZWQgUGhlbHBzCgpUaHUgRmViIDA4IDE1OjM1OjE4IFBTVCAyMDA3IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGFkZGVkIGEgR1JPVyB3aGVuIHBhcnNpbmcgY29tcGxleCBjb21tZW50cyAoYnVnICM0MDU2NjYpCgkqIGdlbnRlc3QucHksIHRlc3RhcGkuYzogYWRkZWQgYSBoYWNrIHRvIHByZXZlbnQgZGVzdHJ1Y3Rpb24gb2YgYW55CgkgIHBhcmFtIHdpdGggJ2Rlc3Ryb3knIGluIGl0J3MgZGVzY3JpcHRpb24gKGkuZS4gcGFyYW0gZGVzdHJveWVkIGJ5CgkgIHRoZSByb3V0aW5lIHVuZGVyIHRlc3QsIHNvIHNob3VsZG4ndCBiZSBkZXN0cm95ZWQgYnkgdGVzdGFwaSkKCSogeG1scmVhZGVyLmM6IGFkZGVkIGZyZWVpbmcgb2YgJ2lucHV0JyBwYXJhbSBldmVuIG9uIGVycm9yCgkgIChmaXhlcyBsZWFrIGRldGVjdGVkIGJ5IHRlc3RhcGkpCgpXZWQgSmFuIDMxIDEwOjI1OjM4IFBTVCAyMDA3IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdGVzdEF1dG9tYXRhLmMsIHRlc3RSZWdleHAuYywgdGVzdFRocmVhZHMuYywgdGVzdFRocmVhZHNXaW4zMi5jLAoJICB4bWx3cml0ZXIuYzogcmVwb3NpdGlvbmVkICNpbmNsdWRlIGZvciBsaWJ4bWwuaCB0byBhdm9pZAoJICBjb21waWxhdGlvbiBlcnJvciBvbiBzb21lIGFyY2hpdGVjdHVyZXMgKGJ1ZyAjMzk4Mjc3KQoJKiBmaXhlZCBzY3Jld2VkLXVwIENoYW5nZUxvZyAoZGVsZXRlZCBzb21lIGR1cGxpY2F0ZSBlbnRyaWVzKQoKRnJpIEphbiAyNiAwMDowNToxOCBQU1QgMjAwNyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGltcGxlbWVudGVkIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciB1cmkuYyAoYnVnICMzODk3NjcpCgpUaHUgSmFuIDI1IDExOjE1OjA4IFBTVCAyMDA3IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogYWRkZWQgY2hlY2tzIGZvciBhbGxvYyBmYWlsIG9uIGNhbGxzIHRvCgkgIHhtbFhQYXRoTmV3Q29udGV4dCAobGlieHNsdCBidWcgIzQwMDI0MikKClRodSBKYW4gMTEgMTU6Mzg6MDggUFNUIDIwMDcgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBSZS1nZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24gKEFQSSBjaHVua3MgMjctMjkgd2VyZSBtaXNzaW5nKQoJICAoYWxzbyBjYXVzZXMgY2hhbmdlcyB0byB0ZXN0YXBpLmMsIGVsZmdjY2hhY2suaCBhbmQKCSAgd2luMzIvbGlieG1sMi5kZWYuc3JjKQoKVHVlIEphbiAgOSAyMjoyNDoyNiBDRVQgMjAwNyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGZpeCBhIG1lbW9yeSBsZWFrIGluIHRoZSBweXRob24gc3RyaW5nIGhhbmRsaW5nCgkgIHdoZW4gU0FYIGV2ZW50IGFyZSBwYXNzZWQgYmFjayB0byB0aGUgcHl0aG9uIGhhbmRsZXJzCgpUaHUgSmFuICA0IDE4OjI3OjQ5IENFVCAyMDA3IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXggeG1sVGV4dFJlYWRlclNldHVwKCkgZGVzY3JpcHRpb24KCSogdGVzdC9yZWxheG5nL2VtcHR5MS5ybmcgdGVzdC9yZWxheG5nL2NvbXBzXzAueG1sCgkgIHRlc3QvcmVsYXhuZy9lbXB0eTFfMC54bWwgdGVzdC9yZWxheG5nL2NvbXBzLnJuZwoJICB0ZXN0L3JlbGF4bmcvZW1wdHkwLnJuZyB0ZXN0L3JlbGF4bmcvZW1wdHkwXzAueG1sCgkgIHRlc3QvcmVsYXhuZy9lbXB0eTFfMS54bWw6IHRlc3RzIHdoaWNoIHdlcmUgYXBwYXJlbnRseSAKCSAgbmV2ZXIgY29tbWl0ZWQgdG8gQ1ZTCgpXZWQgSmFuICAzIDE2OjA1OjIxIFBTVCAyMDA3IEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6CglleHBvc2UgeG1sVGV4dFJlYWRlclNldHVwKCkgZnVuY3Rpb24KCldlZCBKYW4gIDMgMTY6MTQ6MTMgQ0VUIDIwMDcgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBhZGFwdCB0aGUgZXh0cmEgdmVyc2lvbmluZyBjb2RlIHRvIFNWTgoKVGh1IERlYyAxNCAxNjo1MjozNCBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwucHk6IGFwcGFyZW50bHkgaWQoKSBzb21ldGltZXMKCSAgZ2VuZXJhdGUgbmVnYXRpdmUgdmFsdWVzIGFuZCAlWCBvdXRwdXRzIC1YWFhYIDotKAoKTW9uIERlYyAgNCAxMDozMDoyNSBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHBhdGNoIGZyb20gTWljaGFlbCBEYXkgb24gc3RhbmRhbG9uZQoJICBhbmQgWE1MIGRlY2xhcmF0aW9uIGRldGVjdGlvbiwgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjaGFuZ2UKCk1vbiBEZWMgIDQgMTA6Mjc6MDEgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogYW5vdGhlciBYSW5jbHVkZSB1c2VyIGRhdGEgcHJvcGFnYXRpb24gcGF0Y2ggZnJvbQoJICBNaWNoYWVsIERheQoKVGh1IE5vdiAyMyAxNzoyMjowMyBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTdGV2ZW4gUmFpbndhdGVyIHRvIGZpeCAKCSAgVVRGOFRvSHRtbCBiZWhhdmlvdXIgb24gY29kZSBwb2ludHMgd2hpY2ggYXJlIG5vdCBtYXBwYWJsZSB0bwoJICBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMsIGZpeGVzICMzNzc1NDQKClRodSBOb3YgMjMgMTc6MTE6MjMgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYSBidWcgd2hlcmUgdGhlIHByaW5jaXBhbCBub2RlIHR5cGUgb2YgYW4gYXhpcwoJICB3YXNuJ3QgdGVzdGVkIG9uIG5hbWUgY2hlY2ssIGZpeGVzIGJ1ZyAjMzc3NDMyCgpXZWQgTm92ICA4IDEwOjE5OjI3IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogY2hhbmdlIGh0bWxDdHh0UmVzZXQoKSBmb2xsb3dpbmcgTWljaGFlbCBEYXkgYnVnCgkgIHJlcG9ydCBhbmQgc3VnZ2VzdGlvbi4KCk1vbiBOb3YgIDYgMDk6NTY6NDEgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBJZ29yIGZvciBwYXRoIGNvbnZlcnNpb24gb24gV2luZG93cwoKVGh1IE5vdiAgMiAxMToyOToxNyBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogYW5vdGhlciBzbWFsbCBjaGFuZ2Ugb24gdGhlIGFsZ29yaXRobSBmb3IgdGhlCgkgIGVsaW1pbmF0aW9uIG9mIGVwc2lsb24gdHJhbnNpdGlvbnMsIHNob3VsZCBoZWxwIG9uICMzNjI5ODkgdG9vCgpXZWQgTm92ICAxIDE2OjMzOjEwIENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBkb2N1bWVudGF0aW9uIHBhdGNoZXMgZnJvbSBNYXJrdXMgS2VpbQoJKiB4bWxyZWdleHAuYzogZml4ZWQgb25lIGJ1ZyBhbmQgYWRkZWQgYSBjb3VwbGUgb2Ygb3B0aW1pc2F0aW9ucwoJICB3aGlsZSB3b3JraW5nIG9uIGJ1ZyAjMzYyOTg5CgpGcmkgT2N0IDI3IDE0OjU0OjA3IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgYSByZXdvcmtlZCB2ZXJzaW9uIG9mIFVzYW1haCBNYWxpayBwYXRjaAoJICB0byBhdm9pZCBncm93aW5nIHRoZSBwYXJzZXIgc3RhY2sgaW4gc29tZSBhdXRvY2xvc2UgY2FzZXMsIHNob3VsZAoJICBmaXggIzM2MTIyMQoKVGh1IE9jdCAyNiAxMDo1NDo0MCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogV2lsbGlhbSBzcG90dGVkIGFuIG9idmlvdXMgYnVnCgpXZWQgT2N0IDI1IDE4OjA0OjUwIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGNvbmZpZ3VyZS5pbiB0ZXN0YXBpLmMgZG9jLy8qOiBwcmVwYXJpbmcgcmVsZWFzZSBvZgoJICBsaWJ4bWwyLTIuNi4yNwoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGZpeCBhIHNtYWxsIHByb2JsZW0gd2l0aCBwcmVwcm9jIGZsYWdzCgpGcmkgT2N0IDIwIDE0OjU1OjQ3IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeCBjb21tZW50IGZvciB4bWxEb2NTZXRSb290RWxlbWVudCBjLmYuICMzNTE5ODEKCSogeG1sbGludC5jOiBvcmRlciBYUGF0aCBlbGVtZW50cyB3aGVuIHVzaW5nIC0tc2hlbGwKClR1ZSBPY3QgMTcgMjM6MjM6MjYgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBhcHBsaWVkIGZpeCBmcm9tIENocmlzdG9waGVyIEJvdW1lbm90IGZvciBidWcKCSAgIzM2MjcxNCBvbiByZWdleHBzIG1pc3NpbmcgJ10nCgpUdWUgT2N0IDE3IDIyOjMyOjQyIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbGllZCBwYXRjaCBmcm9tIE1hcml1cyBLb25pdHplciB0byBhdm9pZAoJICBsZWFraW5nIGluIHhtbE5ld0lucHV0RnJvbUZpbGUoKSBpbiBjYXNlIG9mIEhUVFAgcmVkaXJlY3Rpb24KClR1ZSBPY3QgMTcgMjI6MTk6MDIgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4IG9uZSBwcm9ibGVtIGZvdW5kIGluIGh0bWxDdHh0VXNlT3B0aW9ucygpCgkgIGFuZCBwb2ludGVkIGluICMzNDA1OTEKClR1ZSBPY3QgMTcgMjI6MDQ6MzEgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgdGVoIDIgc3R1cGlkIGJ1Z3MgYWZmZWN0aW5nIGh0bWxSZWFkRG9jKCkgYW5kCgkgIGh0bWxSZWFkSU8oKSB0aGlzIHNob3VsZCBmaXggIzM0MDMyMgoKVHVlIE9jdCAxNyAyMTozOToyMyBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogYXBwbGllZCBwYXRjaCBmcm9tIE9sYWYgV2Fsa293aWFrIHdoaWNoIHNob3VsZCBmaXggIzMzNDEwNAoKVHVlIE9jdCAxNyAxODoxMjozNCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhpbmcgSFRNTCBtaW5pbWl6ZWQgYXR0cmlidXRlIHZhbHVlcyB0byBiZSBnZW5lcmF0ZWQKCSAgaW50ZXJuYWxseSBpZiBub3QgcHJlc2VudCwgZml4ZXMgYnVnICMzMzIxMjQKCSogcmVzdWx0L0hUTUwvZG9jMi5odG0uc2F4IHJlc3VsdC9IVE1ML2RvYzMuaHRtLnNheCAKCSAgcmVzdWx0L0hUTUwvd2lyZWQuaHRtbC5zYXg6IHRoaXMgYWZmZWN0cyB0aGUgU0FYIGV2ZW50IHN0cmVtIGZvcgoJICBhIGZldyB0ZXN0IGNhc2VzCgpUdWUgT2N0IDE3IDE3OjU2OjMxIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGluZyBIVE1MIGVudGl0aWVzIGluIGF0dHJpYnV0ZXMgcGFyc2luZyBidWcgIzM2MjU1MgoJKiByZXN1bHQvSFRNTC9lbnRpdGllczIuaHRtbCogdGVzdC9IVE1ML2VudGl0aWVzMi5odG1sOiBhZGRlZCB0bwoJICB0aGUgcmVncmVzc2lvbiBzdWl0ZQoKVHVlIE9jdCAxNyAwMToyMTozNyBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBzdGFydGVkIHRvIHN3aXRjaCB4bWxsaW50IHRvIHVzZSB4bWxTYXZlRG9jIHRvIHRlc3QKCSAgIzM0MjU1NgoJKiB4bWxzYXZlLmM6IGZpeGVkICMzNDI1NTYgZWFzeSBhbmQgYSB3aG9sZSBzZXQgb2YgcHJvYmxlbXMgd2l0aAoJICBlbmNvZGluZ3MsIEJPTSBhbmQgeG1sU2F2ZURvYygpCgpNb24gT2N0IDE2IDE1OjE0OjUzIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeCAjMzQ4MjUyIGlmIHRoZSBkb2N1bWVudCBjbGFpbnMgdG8gYmUgaW4gYQoJICBkaWZmZXJlbnQgZW5jb2RpbmcgaW4gdGhlIG1ldGEgdGFnIGFuZCBpdCdzIG9idmlvdXNseSB3cm9uZywKCSAgZG9uJ3Qgc2NyZXcgdXAgdGhlIGVuZCBvZiB0aGUgY29udGVudC4KCk1vbiBPY3QgMTYgMTE6MzI6MDkgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4IGEgY2h1bmtpbmcgYW5kIHNjcmlwdCBidWcgIzM0NzcwOAoKTW9uIE9jdCAxNiAwOTo1MTowNSBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiByZW1vdmUgYSB3YXJuaW5nCgkqIGVuY29kaW5nLmM6IGNoZWNrIHdpdGggdXBwZXJjYXNlIGZvciBBSVggaWNvbnYoKSBzaG91bGQgZml4ICMzNTI2NDQKCSogZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtOiBwYXJ0aWFsbHkgaGFuZGxlIG9uZSBidWcgcmVwb3J0CgpTdW4gT2N0IDE1IDIyOjMxOjQyIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IHRoZSBwYXRjaCBmb3IgdW5yZXByb2R1Y3RhYmxlICMzNDMwMDAgYnV0CgkgIGFsc28gZml4IGEgbGluZS9jb2x1bW4ga2VlcGluZyBlcnJvcgoJKiByZXN1bHQvZXJyb3JzL2F0dHIxLnhtbC5lcnIgcmVzdWx0L2Vycm9ycy9hdHRyMi54bWwuZXJyCgkgIHJlc3VsdC9lcnJvcnMvbmFtZS54bWwuZXJyIHJlc3VsdC9lcnJvcnMvbmFtZTIueG1sLmVyciAKCSAgcmVzdWx0L3NjaGVtYXMvYW55QXR0ci1wcm9jZXNzQ29udGVudHMtZXJyMV8wXzAuZXJyIAoJICByZXN1bHQvc2NoZW1hcy9idWczMTI5NTdfMV8wLmVycjogYWZmZWN0ZWQgbGluZXMgaW4gZXJyb3Igb3V0cHV0CgkgIG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpTYXQgT2N0IDE0IDEwOjQ2OjQ2IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGluZyBidWcgIzM0NDM5MCB3aXRoIHhtbFJlY29uY2lsaWF0ZU5zCgpTYXQgT2N0IDE0IDAwOjMxOjQ5IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIC0taHRtbCAtLW1lbW9yeSB0byB0ZXN0IGh0bWxSZWFkTWVtb3J5IHRvIAoJICB0ZXN0ICMzMjE2MzIKCSogSFRNTHBhcnNlci5jOiBhZGRlZCB2YXJpb3VzIGluaXRpYWxpemF0aW9uIGNhbGxzIHdoaWNoIG1heSBoZWxwIAoJICAjMzIxNjMyIGJ1dCBub3QgY29uY2x1c2l2ZQoJKiB0ZXN0YXBpLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZml4ZWQgY29tcGlsYXRpb24gd2l0aAoJICAtLXdpdGgtbWluaW11bSAtLXdpdGgtc2F4MSBhbmQgLS13aXRoLW1pbmltdW0gLS13aXRoLXNjaGVtYXMKCSAgZml4aW5nICMzMjY0NDIKCkZyaSBPY3QgMTMgMTg6MzA6NTUgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4IGEgUmVsYXgtTkcgYnVnIHJlbGF0ZWQgdG8gZWxlbWVudCBjb250ZW50IHByb2Nlc3NpbmcsCgkgIGZpeGVzIGJ1ZyAjMzAyODM2CgkqIHRlc3QvcmVsYXhuZy8zMDI4MzYucm5nIHRlc3QvcmVsYXhuZy8zMDI4MzZfMC54bWwKCSAgcmVzdWx0L3JlbGF4bmcvMzAyODM2KjogYWRkZWQgdG8gcmVncmVzc2lvbiB0ZXN0cwoKRnJpIE9jdCAxMyAxNDo0Mjo0NCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeCBhIHByb2JsZW0gaW4geG1sU3BsaXRRTmFtZSByZXN1bHRpbmcgaW4gYnVnICMzMzQ2NjkKCkZyaSBPY3QgMTMgMTI6Mjc6MjIgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCB4bWxJT1BhcnNlRFREIGhhbmRsaW5nIG9mIEBpbnB1dCBpbiBlcnJvciBjYXNlLAoJICBTaG91bGQgZml4ICMzMzUwODUKCSogdGVzdGFwaS5jOiByZXNldCB0aGUgaHR0cF9wcm94eSBlbnYgdmFyaWFibGUgdG8gbm90IHdhc3RlIHRpbWUKCSAgb24gcmVncmVzc2lvbiB0ZXN0cwoKVGh1IE9jdCAxMiAyMzowNzo0MyBDRVNUIDIwMDYgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIHhtbElPLmM6IGZpeCBXaW5kb3dzIGNvbXBpbGUgLSBtaXNzaW5nIHhtbFdyYXBPcGVuLgoKVGh1IE9jdCAxMiAxODoyMToxOCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIHRoZSBoZXVyaXN0aWMgdXNlZCB3aGVuIHRyeWluZyB0byBkZXRlY3QgbWl4ZWQtY29udGVudAoJICBlbGVtZW10cyBpZiB0aGUgcGFyc2VyIHdhbnRzIHRvIHRyZWF0IGlnbm9yYWJsZSB3aGl0ZXNwYWNlcyAKCSAgaW4gYSBub24tc3RhbmRhcmQgd2F5LCBzaG91bGQgZml4IGJ1ZyAjMzAwMjYzCgpUaHUgT2N0IDEyIDE0OjUyOjM4IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IGEgZmlyc3QgYXJnIGVycm9yIGluIFNBWCBjYWxsYmFjayBwb2ludGVkIG91dCBieQoJICBNaWtlIEhvbW1leSwgYW5kIGFub3RoZXIgb25lIHN0aWxsIGhhbmdpbmcgYXJvdW5kLiBTaG91bGQgZml4ICMzNDI3MzcKCldlZCBPY3QgMTEgMjM6MTE6NTggQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogZml4IGNvbW1lbnQgb24gdmVyc2lvbnMKCSogeG1sbWVtb3J5LmM6IGRvIG5vdCBzcGVuZCB0b28gbXVjaCB0aW1lIGRpZ2dpbmcgaW4gZHVtcGVkIG1lbW9yeQoKV2VkIE9jdCAxMSAxODo0MDowMCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgYSB3ZWlyZCBlcnJvciB3aGVyZSB2YWxpZGl0eSBjb250ZXh0IHdob3VsZCBub3QKCSAgc2hvdyB1cCBpZiB3YXJuaW5ncyB3ZXJlIGRpc2FibGVkIHBvaW50ZWQgb3V0IGJ5IEJvYiBTdGF5dG9uCgkqIHhtbElPLmMgZG9jL2dlbmVyYXRvci5weTogY2xlYW51cCBhbmQgZml4IHRvIHJlZ2VuZXJhdGUgdGhlIGRvY3MKCSogZG9jLy8qIHRlc3RhcGkuYzogcmVidWlsdCB0aGUgZG9jcwoKV2VkIE9jdCAxMSAxNDozMjowMCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLTIuMC5wYy5pbjogYXBwbGllZCBwYXRjaCBmcm9tIE1pa2hhaWwgWmFiYWx1ZXYgdG8gc2VwYXJhdGUKCSAgbGlicmFyeSBmbGFncyBmb3Igc2hhcmVkIGFuZCBzdGF0aWMgYnVpbGRzLCBmaXhlcyAjMzQ0NTk0LiBJZiB0aGlzCgkgIGJpdGVzIHlvdSwgdXNlIHhtbDItY29uZmlnLgoKV2VkIE9jdCAxMSAxMToyNzozNyBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiByZW1vdmUgdGhlIGJ1aWxkIHBhdGggcmVjb3JkZWQgaW4gdGhlIHB5dGhvbgoJICBzaGFyZWQgbW9kdWxlIGFzIFBldGVyIEJyZWl0ZW5sb2huZXIgcG9pbnRlZCBvdXQsIHNob3VsZCBmaXggIzM0NjAyMgoKV2VkIE9jdCAxMSAxMToxNDo1MSBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBwYXRjaCBmcm9tIE1pa2hhaWwgWmFiYWx1ZXYgZml4aW5nIHRoZSBjb25kaXRpb25zCgkgIG9mIHVuZXNjYXBpbmcgZnJvbSBVUkwgdG8gZmlsZXBhdGgsIHNob3VsZCBmaXggIzM0NDU4OC4KCldlZCBPY3QgMTEgMTA6MjQ6NTggQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4c3RjL01ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gUGV0ZXIgQnJlaXRlbmxvaG5lcgoJICBmb3Igd2dldCBkZXRlY3Rpb24gYW5kIGZpeCBvZiBhIFB5dGhvbiBwYXRoIHByb2JsZW0sIHNob3VsZCBmaXgKCSAgIzM0MDk5MwoKVHVlIE9jdCAxMCAyMjowMjoyOSBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaCBlbnRpdGllcy5jIFNBWDIuYyBwYXJzZXIuYzogdHJ5aW5nIHRvCgkgIGZpeCBlbnRpdGllcyBiZWhhdmlvdXIgd2hlbiB1c2luZyBTQVgsIGhhZCB0byBleHRlbmQgZW50aXRpZXMgCgkgIGNvbnRlbnQgYW5kIGhhY2sgb24gdGhlIGVudGl0aWVzIHByb2Nlc3NpbmcgY29kZSwgYnV0IHRoYXQgc2hvdWxkCgkgIGZpeCB0aGUgbG9uZyBzdGFuZGluZyBidWcgIzE1OTIxOQoKVHVlIE9jdCAxMCAxNDozNjoxOCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmMgaW5jbHVkZS9saWJ4bWwvdXJpLmg6IGFkZCBhIG5ldyBmdW5jdGlvbiB4bWxQYXRoVG9VcmkoKQoJICB0byBwcm92aWRlIGEgY2xlYW4gY29udmVyc2lvbiB3aGVuIHNldHRpbmcgdXAgYSBiYXNlCgkqIFNBWDIuYyB0cmVlLmM6IHVzZSBzYWlkIGZ1bmN0aW9uIHdoZW4gc2V0dGluZyB1cCBkb2MtPlVSTAoJICBvciB1c2luZyB0aGUgeG1sU2V0QmFzZSBmdW5jdGlvbi4gU2hvdWxkIGZpeCAjMzQ2MjYxCgpUdWUgT2N0IDEwIDExOjA1OjU5IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIGEgcG9ydGFiaWxpdHkgcGF0Y2ggZnJvbSBFbWVseWFub3YgQWxleGV5CgpUdWUgT2N0IDEwIDEwOjUyOjAxIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBhbmQgc2xpZ2h0bHkgbW9kaWZpZWQgYSBwYXRjaCBmcm9tIE1pY2hhZWwgRGF5IHRvIAoJICBrZWVwIF9wcml2YXRlIGluIHRoZSBwYXJzZXIgY29udGV4dCB3aGVuIHBhcnNpbmcgZXh0ZXJuYWwgZW50aXRpZXMKClR1ZSBPY3QgMTAgMTA6MzM6NDMgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL3R5cGVzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSb3NzIFJlZWRzdHJvbSwKCSAgQnJpYW4gV2VzdCBhbmQgU3RlZmFuIEFuY2EgdG8gYWRkIFhQb2ludGVyIHN1cG9ydCB0byB0aGUgUHl0aG9uIGJpbmRpbmdzCgpGcmkgU2VwIDI5IDExOjEzOjU5IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IGZpeGVkIGEgY29tbWVudAoJKiB4aW5jbHVkZS5jIGluY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmg6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIE1pY2hhZWwgRGF5CgkgIHRvIGFkZCBhIG5ldyBmdW5jdGlvbiBwcm92aWRpbmcgdGhlIF9wcml2YXRlIGZpZWxkIGZvciB0aGUgZ2VuZXJhdGVkCgkgIHBhcnNlciBjb250ZXh0cyB4bWxYSW5jbHVkZVByb2Nlc3NGbGFnc0RhdGEoKQoKVGh1IFNlcCAyMSAxMDozNjoxMSBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBwYXRjaCBmcm9tIE1pY2hhZWwgRGF5IGRvaW5nIHNvbWUgcmVmYWN0b3JpbmcKCSAgZm9yIHRoZSBjYXRhbG9nIGVudGl0eSBsb2FkZXJzLgoKVGh1IFNlcCAyMSAwODo1MzowNiBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDogZXhwb3J0cyBodG1sTmV3UGFyc2VyQ3R4dCgpCgkgIGFzIE1pY2hhZWwgRGF5IHBvaW50ZWQgb3V0IHRoaXMgaXMgbmVlZGVkIHRvIHVzZSBodG1sQ3R4dFJlYWQqKCkKClR1ZSBTZXAgMTkgMTQ6NDI6NTkgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQmVuIERhcm5lbGwgb24gIzMyMTU0NSwgSSBjb3VsZCBub3QKCSAgcmVwcm9kdWNlIHRoZSBwcm9ibGVtIGJ1dCAxLyB0aGlzIGlzIHNhZmUgMi8gaXQncyBiZXR0ZXIgdG8gYmUgc2FmZS4KClNhdCBTZXAgMTYgMTY6MDI6MjMgQ0VTVCAyMDA2IFJvYiBSaWNoYXJkcyA8cnJpY2hhcmRzQGN0aW5kdXN0cmllcy5uZXQ+CgoJKiB0cmVlLmM6IHhtbFRleHRDb25jYXQgd29ya3Mgd2l0aCBjb21tZW50cyBhbmQgUEkgbm9kZXMgKGJ1ZyAjMzU1OTYyKS4KCSogcGFyc2VyLmM6IGZpeCByZXN1bHRpbmcgdHJlZSBjb3JydXB0aW9uIHdoZW4gdXNpbmcgWE1MIG5hbWVzcGFjZSAKCSAgd2l0aCBleGlzdGluZyBkb2MgaW4geG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3Zlci4KCkZyaSBTZXAgIDEgMTE6NTI6NTUgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBFbWVseWFub3YgQWxleGV5IHRvIGNsZWFuIHVwIGEgZmV3IHRoaW5ncwoJICBpbiB0aGUgcHJldmlvdXMgcGF0Y2guCgpXZWQgQXVnIDMwIDE1OjEwOjA5IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9sYW5kIFNjaHdpbmdlbCB0byBmaXggdGhlIHByb2JsZW0KCSAgd2l0aCBmaWxlIG5hbWVzIGluIFVURi04IG9uIFdpbmRvd3MsIGFuZCBjb21wYXQgb24gb2xkZXIgd2luOXggCgkgIHZlcnNpb25zLgoKVHVlIEF1ZyAyMiAxNjo1MToyMiBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgYSBidWcgIzIwMzEyNSBpbiBSZWQgaGF0IGJ1Z3ppbGxhLCBjcmFzaGluZyBQSFA0CgkgIG9uIHZhbGlkYXRpb24gZXJyb3JzLCB0aGUgaGV1cmlzdGljIHRvIGd1ZXNzIGlzIGEgdmN0eHQgdXNlcgoJICBwb2ludGVyIGlzIHRoZSBwYXJzaW5nIGNvbnRleHQgd2FzIGluc3VmZmljaWVudC4KCk1vbiBBdWcgMjEgMTA6NDA6MTAgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxjYXRhbG9nLjEgZG9jL3htbGNhdGFsb2dfbWFuLnhtbCBkb2MveG1sbGludC4xIGRvYy94bWxsaW50LnhtbDoKCSAgYXBwbGllZCBwYXRjaCB0byBtYW4gcGFnZXMgZnJvbSBEYW5pZWwgTGVpZGVydCBhbmQgcmVnZW5lcmF0ZWQKClRodSBBdWcgMTcgMDA6NDg6MzEgQ0VTVCAyMDA2IFJvYiBSaWNoYXJkcyA8cnJpY2hhcmRzQGN0aW5kdXN0cmllcy5uZXQ+CgoJKiB4bWx3cml0ZXIuYzogQWRkIGEgZG9jdW1lbnQgdG8gdGhlIHhtbHdyaXRlciBzdHJ1Y3R1cmUgYW5kIAoJICBwYXNzIGRvY3VtZW50IHdoZW4gd3JpdGluZyBhdHRyaWJ1dGUgY29udGVudCBmb3IgZW5jb2Rpbmcgc3VwcG9ydC4KCldlZCBBdWcgMTYgMDE6MTU6MTIgQ0VTVCAyMDA2IFJvYiBSaWNoYXJkcyA8cnJpY2hhcmRzQGN0aW5kdXN0cmllcy5uZXQ+CgoJKiBIVE1MdHJlZS5jIHhtbHNhdmUuYzogQWRkIGxpbmVmZWVkcyB0byBlcnJvciBtZXNzYWdlcyBhbGxvd2luZyAKCSAgZm9yIGNvbnNpc3RhbnQgaGFuZGxpbmcuCgpUdWUgQXVnIDE1IDE1OjAyOjE4IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBBcHBsaWVkIHRoZSBwcm9wb3NlZCBmaXggZm9yIHRoZSBkb2N1bWVudGF0aW9uCgkgIG9mIHhtbFhQYXRoQ2FzdFRvU3RyaW5nKCk7IHNlZSBidWcgIzM0NjIwMi4KClR1ZSBBdWcgMTUgMTQ6NDk6MTggQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogV2hpbGUgaW52ZXN0aWdhdGluZyBidWcgIzM1MDI0NywgSSBub3RpY2VkCgkgIHRoYXQgeG1sU2NoZW1hSURDTWF0Y2hlciBzdHJ1Y3RzIGFyZSBtYXNzaXZlbHkgcmVjcmVhdGVkCgkgIGFsdGhvdWdoIG9ubHkgYSBtYXhpbXVtIG9mIDMgc3RydWN0cyBpcyB1c2VkIGF0IHRoZSBzYW1lCgkgIHRpbWU7IGFkZGVkIGEgY2FjaGUgZm9yIHRob3NlIHN0cnVjdHVyZXMgdG8gdGhlCgkgIHZhbGlkYXRpb24gY29udGV4dC4KClNhdCBBdWcgMTIgMTY6MTI6NTMgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIE1hcnRvbiBJbGxlcyB0byBmaXggYW4gYWxsb2NhdGlvbgoJICBidWcgaW4geG1sU2NoZW1hWFBhdGhFdmFsdWF0ZSBzaG91bGQgY2xvc2UgIzM1MTAzMgoKTW9uIEF1ZyAgNyAxMzowODo0NiBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQmVydHJhbmQgRnJpdHNjaCB0byBmaXggYSBidWcgaW4KCSAgeG1sU2NoZW1hQ2xlYXJWYWxpZEN0eHQKCkZyaSBBdWcgIDQgMTQ6NTA6NDEgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGZpeGVkIHRoZSBjb252ZXJzaW9uIG9mIGxvbmcgcGFyYW1ldGVycwoKVGh1IEp1bCAxMyAxNTowMzoxMSBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2F2ZS5jOiBSZW1vdmVkIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBDREFUQSBzZWN0aW9ucwoJICBmb3IgdGhlIGNvbnRlbnQgb2YgdGhlICJzY3JpcHQiIGFuZCAic3R5bGUiIGVsZW1lbnRzIHdoZW4KCSAgc2VyaWFsaXppbmcgWEhUTUwuIFRoZSBpc3N1ZSB3YXMgcmVwb3J0ZWQgYnkgVmluY2VudCBMZWZldnJlLAoJICBidWcgIzM0NTE0Ny4KCSogcmVzdWx0L3hodG1sMSByZXN1bHQvbm9lbnQveGh0bWwxOiBBZGp1c3RlZCByZWdyZXNzaW9uIHRlc3QKCSAgcmVzdWx0cyBkdWUgdG8gdGhlIHNlcmlhbGl6YXRpb24gY2hhbmdlIGRlc2NyaWJlZCBhYm92ZS4KClRodSBKdWwgMTMgMDg6MzI6MjEgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBwYXJzZXIuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gQW5kcmV3IFcuIE5vc2Vua28KCSAgdG8gZXhwb3NlIGlmIHpsaWIgc3VwcG9ydCB3YXMgY29tcGlsZWQgaW4sIGluIHRoZSBoZWFkZXIsIGluIHRoZQoJICBmZWF0dXJlIEFQSSBhbmQgaW4gdGhlIHhtbGxpbnQgLS12ZXJzaW9uIG91dHB1dC4KClRodSBKdWwgMTMgMDg6MjQ6MTQgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogcmVmYWN0b3IgdG8gdXNlIG5vcm1hbCB3YXJuaW5ncyBmb3IgZW50aXRpZXMgcHJvYmxlbQoJICBhbmQgbm90IHN0cmFpZ2h0IFNBWCBjYWxsYmFja3MuCgpXZWQgSnVsIDEyIDE3OjEzOjAzIENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGJ1ZyAjMzQ3MzE2LCByZXBvcnRlZCBieSBEYXZpZCBCZWxpdXM6CgkgIFRoZSBzaW1wbGUgdHlwZSwgd2hpY2ggd2FzIHRoZSBjb250ZW50IHR5cGUgZGVmaW5pdGlvbgoJICBvZiBhIGNvbXBsZXggdHlwZSwgd2hpY2ggaW4gdHVybiB3YXMgdGhlIGJhc2UgdHlwZSBvZiBhCgkgIGV4dGVuZGluZyBjb21wbGV4IHR5cGUsIHdhcyBtaXNzZWQgdG8gYmUgc2V0IG9uIHRoaXMKCSAgZXh0ZW5kaW5nIGNvbXBsZXggdHlwZSBpbiB0aGUgZGVyaXZhdGlvbiBtYWNoaW5lcnkuCgpNb24gSnVsICAzIDEzOjM2OjQzIENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBDaGFuZ2VkIHhtbFhQYXRoQ29sbGVjdEFuZFRlc3QoKSB0byB1c2UKCSAgeG1sWFBhdGhOb2RlU2V0QWRkTnMoKSB3aGVuIGFkZGluZyBhIG5zLW5vZGUgaW4gY2FzZSBvZgoJICBOT0RFX1RFU1RfVFlQRSAodGhlIG5zLW5vZGUgd2FzIHByZXZpb3VzbHkgYWRkZWQgcGxhaW5seQoJICB0byB0aGUgbGlzdCkuIFNpbmNlIGZvciBOT0RFX1RFU1RfQUxMIGFuZCBOT0RFX1RFU1RfTkFNRQoJICB0aGlzIHNwZWNpYWxpemVkIG5zLWFkZGl0aW9uIGZ1bmN0aW9uIHdhcyBhbHJlYWR5IHVzZWQsCgkgIEkgYXNzdW1lIGl0IHdhcyBtaXNzZWQgdG8gYmUgdXNlZCB3aXRoIE5PREVfVEVTVF9UWVBFLgoKTW9uIEp1bCAgMyAxMDo1NzozMyBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIGNvbnN0J2lmaWNhdGlvbiBvZiBzdHJpbmdzIHBhdGNoIGZyb20KCSAgTWF0dGhpYXMgQ2xhc2VuCgpUaHUgSnVuIDI5IDEzOjUxOjEyIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IHBhdGNoIGZyb20gQW5kcmV3IFcuIE5vc2Vua28sIHhtbEZyZWVSTXV0ZXggZm9yZ290IHRvCgkgIGRlc3Ryb3kgdGhlIGNvbmRpdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSBtdXRleC4KClRodSBKdW4gMjkgMTI6NDg6MDAgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IEZpeGVkIGEgZG91YmxlLWZyZWUgaW4geG1sWFBhdGhDb21wT3BFdmFsVG9Cb29sZWFuKCksCgkgIHJldmVhbGVkIGJ5IGEgTGlieHNsdCByZWdyZXNzaW9uIHRlc3QuCgpUaHUgSnVuIDI5IDEyOjI4OjA3IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBFbmhhbmNlZCB4bWxYUGF0aENvbXBPcEV2YWxUb0Jvb2xlYW4oKSB0byBiZSBhbHNvCgkgIHVzYWJsZSBvdXRzaWRlIHByZWRpY2F0ZSBldmFsdWF0aW9uOyB0aGUgaW50ZW50aW9uIGlzIHRvCgkgIHVzZSBpdCB2aWEgeG1sWFBhdGhDb21waWxlZEV2YWxUb0Jvb2xlYW4oKSBmb3IgWFNMVCB0ZXN0cywKCSAgbGlrZSBpbiA8eHNsOmlmIHRlc3Q9Ii9mb28iPi4KCSAgCldlZCBKdW4gMjggMTk6MTE6MTYgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IEZpeCBhIG1lbW9yeSBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gdXNpbmcKCSAgeG1sWFBhdGhDb21waWxlZEV2YWxUb0Jvb2xlYW4oKS4KCk1vbiBKdW4gMjYgMTc6MjQ6MjggVVRDIDIwMDYgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vbGlieG1sLmMsIHB5dGhvbi9saWJ4bWwucHksIHB5dGhvbi90ZXN0cy9jb21wYXJlTm9kZXMucHksCgkgIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbToKCSAgQWRkZWQgY29kZSBzdWJtaXR0ZWQgYnkgQW5kcmVhcyBQYWt1bGF0IHRvIHByb3ZpZGUgbm9kZQoJICBlcXVhbGl0eSwgaW5lcXVhbGl0eSBhbmQgaGFzaCBmdW5jdGlvbnMsIHBsdXMgYSBzaW5nbGUKCSAgdGVzdCBwcm9ncmFtIHRvIGNoZWNrIHRoZSBmdW5jdGlvbnMgKGJ1Z3MgMzQ1Nzc5ICsgMzQ1OTYxKS4KCk1vbiBKdW4gMjYgMTg6Mzg6NTEgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IEFkZGVkIHhtbFhQYXRoQ29tcGlsZWRFdmFsVG9Cb29sZWFuKCkgdG8gdGhlIEFQSSBhbmQKCSAgYWRqdXN0ZWQvYWRkZWQgeG1sWFBhdGhSdW5FdmFsKCksIHhtbFhQYXRoUnVuU3RyZWFtRXZhbCgpLAoJICB4bWxYUGF0aENvbXBPcEV2YWxUb0Jvb2xlYW4oKSwgeG1sWFBhdGhOb2RlQ29sbGVjdEFuZFRlc3QoKQoJICB0byBiZSBhd2FyZSBvZiBhIGJvb2xlYW4gcmVzdWx0IHJlcXVlc3QuIFRoZSBuZXcgZnVuY3Rpb24KCSAgaXMgbm93IHVzZWQgdG8gZXZhbHVhdGUgcHJlZGljYXRlcy4KCk1vbiBKdW4gMjYgMTY6MjI6NTAgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IEZpeGVkIGFuIGJ1ZyBpbiB4bWxYUGF0aENvbXBFeHByQWRkKCk6IHRoZSBuZXdseQoJICBpbnRyb2R1Y2VkIGZpZWxkIEByZXdyaXRlVHlwZSBvbiB4bWxYUGF0aFN0ZXBPcCB3YXMgbm90CgkgIGluaXRpYWxpemVkIHRvIHplcm8gaGVyZTsgdGhpcyBjb3VsZCBsZWFkIHRvIHRoZSBhY3RpdmF0aW9uCgkgIG9mIHRoZSBheGlzIHJld3JpdGUgY29kZSBpbiB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCgpIHdoZW4KCSAgQHJld3JpdGVUeXBlIGlzIHJhbmRvbWx5IHNldCB0byB0aGUgdmFsdWUgMS4gQSB0ZXN0CgkgIChoYXJkY29kaW5nIHRoZSBpbnRpYWwgdmFsdWUgdG8gMSkgcmV2ZWFsZWQgdGhhdCB0aGUKCSAgcmVzdWx0aW5nIGluY29ycmVjdCBiZWhhdmlvdXIgaXMgc2ltaWxhciB0byB0aGUgYmVoYXZpb3VyCgkgIGFzIGRlc2NyaWJlZCBieSBBcm5vbGQgSGVuZHJpa3Mgb24gdGhlIG1haWxpbmcgbGlzdDsgc28gSQoJICBob3BlIHRoYXQgd2lsbCBmaXggdGhlIGlzc3VlLgkgIAoKRnJpIEp1biAyMyAxODoyNjowOCBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHBhdGguYzogRml4ZWQgYW4gZXJyb3IgaW4geG1sWFBhdGhFdmFsRXhwcigpLCB3aGljaAoJICB3YXMgaW50cm9kdWNlZCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgZC1vLXMgcmV3cml0ZQoJICBhbmQgbWFkZSB4cGF0aC5jIHVuYWJsZSB0byBjb21waWxlIGlmIFhQQVRIX1NUUkVBTUlORwoJICB3YXMgbm90IGRlZmluZWQgKHJlcG9ydGVkIGJ5IEt1cHJpeWFub3YgQW5hdG9saWogLQoJICAjMzQ1NzUyKS4gRml4ZWQgdGhlIGNoZWNrIGZvciBkLW8tcyByZXdyaXRlCgkgIHRvIHdvcmsgb24gdGhlIGNvcnJlY3QgWFBhdGggc3RyaW5nLCB3aGljaCBpcyBjdHh0LT5iYXNlCgkgIGFuZCBub3QgY29tcC0+ZXhwciBpbiB0aGlzIGNhc2UuCgpNb24gSnVuIDE5IDEyOjIzOjQxIENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBBZGRlZCBvcHRpbWl6YXRpb24gZm9yIHBvc2l0aW9uYWwgcHJlZGljYXRlcwoJICAob25seSBzaG9ydC1oYW5kIGZvcm0gIltuXSIpLCB3aGljaCBoYXZlIGEgcHJlY2VkaW5nCgkgIHByZWRpY2F0ZTogIi9mb29bZGVzY2VuZGFudDo6YmFyXVszXSIuCgpTdW4gSnVuIDE4IDIwOjU5OjAyIEVEVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB0cnkgdG8gZml4IHRoZSBjcmFzaCByYWlzZWQgYnkgdGhlIHBhcnNlciBpbgoJICByZWNvdmVyIG1vZGUgYXMgcG9pbnRlZCBieSBSeWFuIFBoaWxsaXBzCgpTdW4gSnVuIDE4IDE4OjQ0OjU2IEVEVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90eXBlcy5jOiBwYXRjaCBmcm9tIE5pYyBGZXJyaWVyIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZQoJICBtYXBwaW5nIGZyb20gWFBhdGggdG8gcHl0aG9uCgpTdW4gSnVuIDE4IDE4OjM1OjUwIEVEVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogYXBwbGllZCBwYXRjaCBmcm9tIEJveiBmb3IgVk1TIGFuZCByZXBvcnRpbmcKCSAgU2NoZW1hcyBlcnJvcnMuCgpTdW4gSnVuIDE4IDE4OjIyOjI1IEVEVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RhcGkuYzogYXBwbGllZCBwYXRjaCBmcm9tIEZlbGlwZSBDb250cmVyYXMgd2hlbiBjb21waWxpbmcKCSAgd2l0aCAtLXdpdGgtbWluaW11bQoKRnJpIEp1biAxNiAyMTozNzo0NCBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogRml4ZWQgYSBidWcgaW4KCSAgeG1sRE9NV3JhcEFkb3B0Tm9kZSgpOyB0aGUgdHJlZSB0cmF2ZXJzYWwgc3RvcHBlZCBpZiB0aGUKCSAgdmVyeSBmaXJzdCBnaXZlbiBub2RlIGhhZCBhbiBhdHRyaWJ1dGUgbm9kZSA6LSggVGhpcyB3YXMgZHVlCgkgIHRvIGEgbWlzc2VkIGNoZWNrIGluIHRoZSB0cmF2ZXJzYWwgbWVjaGFuaXNtLgoJICBFeHBhbmRlZCB0aGUgeG1sRE9NV3JhcEN0eHQ6IGl0IG5vdyBob2xkcyB0aGUgbmFtZXNwYWNlIG1hcAoJICB1c2VkIGluIHhtbERPTVdyYXBBZG9wdE5vZGUoKSBhbmQgeG1sRE9NV3JhcENsb25lTm9kZSgpIGZvcgoJICByZXVzYWw7IHNvIHRoZSBtYXAtaXRlbXMgZG9uJ3QgbmVlZCB0byBiZSBjcmVhdGVkIGZvciBldmVyeQoJICBjbG9uaW5nL2Fkb3B0aW9uLiBBZGRlZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGl0IGZvcgoJICByZXRyaWV2YWwgb2YgeG1sTnNQdHIgdG8gYmUgc2V0IG9uIG5vZGUtPm5zOyB0aGlzIGlzIG5lZWRlZAoJICBmb3IgbXkgY3VzdG9tIGhhbmRsaW5nIG9mIG5zLXJlZmVyZW5jZXMgaW4gbXkgRE9NIHdyYXBwZXIuCgkgIFN1YnN0aXR1dGVkIGNvZGUgd2hpY2ggY3JlYXRlZCB0aGUgWE1MIG5hbWVzcGFjZSBkZWNsIG9uCgkgIHRoZSBkb2MgZm9yIGEgY2FsbCB0byB4bWxUcmVlRW5zdXJlWE1MRGVjbCgpLiBSZW1vdmVkCgkgIHRob3NlIG5hc3RseSAid2FybmlnbnMiIGZyb20gdGhlIGRvY3Mgb2YgdGhlIGNsb25lL2Fkb3B0CgkgIGZ1bmN0aW9uczsgdGhleSB3b3JrIGZpbmUgb24gbXkgc2lkZS4KCSAgCk1vbiBKdW4gMTIgMTM6MjM6MTEgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9wYXR0ZXJuL25hbWVzcGFjZXM6IEFkanVzdGVkIHRoZSByZXN1bHQgb2YgYQoJICByZWdyZXNzaW9uIHRlc3QsIHNpbmNlIHRoZSBmaXggb2YgeG1sR2V0Tm9kZVBhdGgoKSByZXZlYWxlZCBhCgkgIGJ1ZyBpbiB0aGlzIHRlc3QgcmVzdWx0LgoKTW9uIEp1biAxMiAxMzowNjowMyBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jOiBHb3QgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZyBpbiB4bWxHZXROb2RlUGF0aCgpLgoKTW9uIEp1biAxMiAxMjo1NDoyNSBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jOiBGaXhlZCB4bWxHZXROb2RlUGF0aCgpIHRvIGdlbmVyYXRlIHRoZSBub2RlIHRlc3QgIioiCgkgIGZvciBlbGVtZW50cyBpbiB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHJhdGhlciB0aGFuIGdlbmVyYXRpbmcKCSAgYW4gdW5wcmVmaXhlZCBuYW1lZCBub2RlIHRlc3QgYW5kIGxvb3NpbmcgdGhlIG5hbWVzcGFjZQoJICBpbmZvcm1hdGlvbi4KCkZyaSBKdW4gIDkgMjE6NDU6MDIgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBDbGFyaWZpZWQgaW4gdGhlIGRvY3MgdGhhdCB0aGUgdHJlZQoJICBtdXN0IG5vdCAgYmUgdHJpZWQgdG8gYmUgbW9kaWZpZWQgaWYgdXNpbmcgdGhlIHBhcnNlciBmbGFnCgkgIFhNTF9QQVJTRV9DT01QQUNUIGFzIHN1Z2dlc3RlZCBieSBTdGVmYW4gQmVobmVsCgkgICgjMzQ0MzkwKS4KClR1ZSBKdW4gIDYgMTc6NTA6NDMgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbmkgTkVXUyBkb2MvLyogbGlieG1sLnNwZWMuaW4gOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiAyLjYuMjYKClR1ZSBKdW4gIDYgMTc6MjU6MjMgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IEZpeGVkIHNlbGYtaW52ZW50ZWQgYSBzZWdmYXVsdCBpbiB4bWxYUGF0aEN0eHRDb21waWxlKCksCgkgIHdoZW4gdGhlIGV4cHJlc3Npb24gd2FzIG5vdCB2YWxpZCBhbmQgQGNvbXAgd2FzIE5VTEwgYW5kIEkKCSAgdHJpZWQgdG8gZG8gdGhlIGQtby1zIHJld3JpdGUuCgpUdWUgSnVuICA2IDE1OjE5OjU3IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW5pIE5FV1MgZG9jLy8qIGxpYnhtbC5zcGVjLmluIDogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi42LjI1CgpUdWUgSnVuICA2IDExOjI4OjE1IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBFbmFibGVkIHRoZSBjb21wb3VuZCB0cmF2ZXJzYWwgYWdhaW47IEkgYWRkZWQgYQoJICBjaGVjayB0byB1c2UgdGhpcyBvbmx5IGlmIHRoZSBoYXZlIGFuIGV4cHJlc3Npb24gc3RhcnRpbmcKCSAgd2l0aCB0aGUgZG9jdW1lbnQgbm9kZTsgc28gaW4gdGhlIGNhc2Ugb2YgIi8vZm9vIiwgd2UKCSAgYWxyZWFkeSBrbm93IGF0IGNvbXBpbGF0aW9uLXRpbWUsIHRoYXQgdGhlcmUgd2lsbCBiZSBvbmx5CgkgIDEgaW5pdGlhbCBjb250ZXh0IG5vZGUuIEFkZGVkIHRoZSByZXdyaXRlIGFsc28gdG8KCSAgeG1sWFBhdGhFdmFsRXhwcigpLgoKVHVlIEp1biAgNiAxMDoyMzoxMCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZml4IGJ1ZyAjMzQzOTY4LCBpbmNsdWRlPSd0ZXh0JyBjYW4ndCBsZWFkIHRvIGEgCgkgIHJlY3Vyc2lvbi4KCkZyaSBKdW4gIDIgMjI6NDc6MDggQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IERpc2FibGVkIHRoZSBjb21wb3VuZCB0cmF2ZXJzYWwgZm9yIHRoZSByZWxlYXNlOwoJICBJIG5lZWQgZmlyc3QgdG8gYXNzdXJlIHRoYXQgdGhpcyBpcyBkb25lIG9ubHkgaWYgd2UgaGF2ZQoJICAxIGluaXRpYWwgbm9kZS4KCldlZCBNYXkgMzEgMTM6NTM6NDEgUFNUIDIwMDYgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KICAgICAgCgkqIHhwYXRoLmM6IGZpeGVkIG1lbW9yeSBsZWFrIGluIHhwYXRoIGVycm9yIHJlcG9ydGluZwoKV2VkIE1heSAzMSAxNTozMDoxNiBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmggdHJpb2RlZi5oOiBhcHBsaWVkIHBhdGNoIGZyb20gT2xsaSBTYXZpYSBmb3IgTHlueE9TCgpXZWQgTWF5IDMxIDE0OjMzOjAwIENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggcnVuc3VpdGUuYzoKCSAgQ2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUgcmVjZW50bHkgYWRkZWQgcHVibGljIGZ1bmN0aW9uCgkgIHhtbFhQYXRoQ29udGV4dFNldE9iamVjdENhY2hlKCkgdG8KCSAgeG1sWFBhdGhDb250ZXh0U2V0Q2FjaGUoKTsgc28gYSBtb3JlIGdlbmVyaWMgb25lLCBpbgoJICBjYXNlIHdlIGRlY2lkZSB0byBjYWNoZSBtb3JlIHRoaW5ncyB0aGFuIG9ubHkgWFBhdGgKCSAgb2JqZWN0cy4KClR1ZSBNYXkgMzAgMjE6MzY6MTYgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IE9wdGltaXplZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCgpIGFuZAoJICB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdE50aCgpIHRvIGV2YWx1YXRlIGEgY29tcG91bmQKCSAgdHJhdmVyc2FsIG9mIDIgYXhlcyB3aGVuIHdlIGhhdmUgYSAiLy9mb28iIGV4cHJlc3Npb24uCgkgIFRoaXMgaXMgZG9uZSB3aXRoIGEgcmV3cml0ZSBvZiB0aGUgWFBhdGggQVNUIGluCgkgIHhtbFhQYXRoUmV3cml0ZURPU0V4cHJlc3Npb24oKTsgSSBhZGRlZCBhbiBhZGRpdGlvbmFsIGZpZWxkCgkgIHRvIHhtbFhQYXRoU3RlcE9wIGZvciB0aGlzIChidXQgdGhlIGZpZWxkJ3MgbmFtZSBzaG91bGQgYmUKCSAgY2hhbmdlZCkuIFRoZSBtZWNoYW5pc206IHRoZSBlbWJyYWNpbmcgZGVzY2VuZGFudC1vci1zZWxmCgkgIGF4aXMgdHJhdmVyc2FsIChhbHNvIG9wdGltaXplZCB0byByZXR1cm4gb25seSBub2RlcyB3aGljaAoJICBjYW4gaG9sZCBlbGVtZW50cyksIHdpbGwgcHJvZHVjZSBjb250ZXh0IG5vZGVzIGZvciB0aGUKCSAgaW5uZXIgdHJhdmVyc2FsIG9mIHRoZSBjaGlsZCBheGlzLiBUaGlzIHdheSB3ZSBhdm9pZCBhIGZ1bGwKCSAgbm9kZS1jb2xsZWN0aW5nIHRyYXZlcnNhbCBvZiB0aGUgZGVzY2VuZGFudC1vci1zZWxmIGF4aXMuCgkgIFNvbWUgdGVzdHMgaW5kaWNhdGUgdGhhdCB0aGlzIGNhbiByZWR1Y2UgZXhlY3V0aW9uIHRpbWUgb2YKCSAgIi8vZm9vIiB0byA1MCUuIFRvZ2V0aGVyIHdpdGggdGhlIFhQYXRoIG9iamVjdCBjYWNoZSB0aGlzCgkgIGFsbCBzaWduaWZpY2FudGx5IHNwZWVkcyB1cCBsaWJ4c2x0LgoKVHVlIE1heSAzMCAxMTozODo0NyBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBIHdhcm5pbmcgd2lsbCBub3cgYmUgcmVwb3J0ZWQgaW4gdGhlIHZhbHVlIG9mCgkgIHRoZSBYU0QgYXR0cmlidXRlICdzY2hlbWFMb2NhdGlvbicgZG9lcyBub3QgY29uc2lzdCBvZiB0dXBsZXMKCSAgKG5hbWVzcGFjZS1uYW1lLCBkb2N1bWVudC1VUkkpLiBBIHdhcm5pbmcgd2lsbCBiZSByZXBvcnRlZAoJICBpZiBhIHNjaGVtYSBkb2N1bWVudCBjb3VsZCBub3QgYmUgZm91bmQgYXQgdGhlIHNwZWNpZmllZAoJICBsb2NhdGlvbiAodmlhICdzY2hlbWFMb2NhdGlvbicgb3IKCSAgJ25vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb24nKS4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogQWRkZWQgWE1MX1NDSEVNQVZfTUlTQyB0bwoJICB4bWxQYXJzZXJFcnJvcnMuCgpUdWUgTWF5IDMwIDExOjIxOjM0IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBFbmhhbmNlZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCgpIHRvIGF2b2lkCgkgIHJlY3JlYXRpb24gKGlmIHBvc3NpYmxlKSBvZiB0aGUgbm9kZS1zZXQgd2hpY2ggaXMgdXNlZCB0bwoJICBjb2xsZWN0IHRoZSBub2RlcyBpbiB0aGUgY3VycmVudCBheGlzIGZvciB0aGUgY3VycmVjdCBjb250ZXh0CgkgIG5vZGUuIEVzcGVjaWFsbHkgZm9yICIvL2ZvbyIgdGhpcyB3aWxsIGRlY3JlYXNlIGRyYW1hdGljYWxseQoJICB0aGUgbnVtYmVyIG9mIGNyZWF0ZWQgbm9kZS1zZXRzLCBzaW5jZSBmb3IgZWFjaCBub2RlIGluIHRoZQoJICByZXN1bHQgbm9kZS1zZXQgb2YgdGhlIGV2YWx1YXRpb24gb2YgZGVzY2VuZGFudC1vci1zZWxmOjpub2RlKCkKCSAgYSBuZXcgdGVtcG9yYXJ5IG5vZGUtc2V0IHdhcyBjcmVhdGVkLiBBZGRlZCBub2RlIGl0ZXJhdG9yCgkgIHhtbFhQYXRoTmV4dENoaWxkRWxlbWVudCgpIGFzIGEgdGlueSBvcHRpbWl6YXRpb24gZm9yCgkgIGNoaWxkOjpmb28uCgpNb24gTWF5IDI5IDE4OjA2OjE3IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IEFkZGVkIGFuIFhQYXRoIG9iamVjdCBjYWNoZS4KCSAgSXQgc2l0cyBvbiBhbiB4bWxYUGF0aENvbnRleHQgYW5kIG5lZWQgdG8gYmUgZXhwbGljaXRlbHkKCSAgYWN0aXZhdGVkIChvciBkZWFjdGl2YXRlZCBhZ2Fpbikgd2l0aAoJICB4bWxYUGF0aENvbnRleHRTZXRPYmplY3RDYWNoZSgpLiBUaGUgY2FjaGUgY29uc2lzdHMgb2YgNQoJICBsaXN0cyBmb3Igbm9kZS1zZXQsIHN0cmluZywgbnVtYmVyLCBib29sZWFuIGFuZCBtaXNjIFhQYXRoCgkgIG9iamVjdHMuIEludGVybmFsbHkgdGhlIHhwYXRoLmMgbW9kdWxlIHdpbGwgdXNlIG9iamVjdC0KCSAgZGVwb3NpdGlvbiBhbmQgLWFjcXVpc2l0aW9uIGZ1bmN0aW9ucyB3aGljaCB3aWxsIHRyeSB0byByZXVzZQoJICBhcyBtYW55IFhQYXRoIG9iamVjdHMgYXMgcG9zc2libGUsIGFuZCBmYWxsYmFjayB0byBub3JtYWwKCSAgZnJlZS9jcmVhdGUgYmVoYXZpb3VyIGlmIG5vIGNhY2hlIGlzIGF2YWlsYWJsZSBvciBpZiB0aGUgY2FjaGUKCSAgaXMgZnVsbC4KCSogcnVuc3VpdGUuYzogQWRqdXN0ZWQgdG8gZGVhY3RpdmF0ZSB0aGUgY2FjaGUgZm9yIFhNTCBTY2hlbWEKCSAgdGVzdHMgaWYgYSBjYWNoZS1jcmVhdGlvbiBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdCBmb3IgdGhlIHdob2xlCgkgIGxpYnJhcnksIGUuZy4gZm9yIHRlc3RpbmcgcHVycG9zZXMgb2YgdGhlIGNhY2hlLiBJdCBpcwoJICBkZWFjdGl2YXRlZCBoZXJlIGluIG9yZGVyIHRvIGF2b2lkIGNvbmZ1c2lvbiBvZiB0aGUgbWVtb3J5IGxlYWsKCSAgZGV0ZWN0aW9uIGluIHJ1bnN1aXRlLmMuCgpXZWQgTWF5IDI0IDEwOjU0OjI1IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBSZW1vdmVkIGEgbWVtY3B5IGlmIHhtbFhQYXRoTm9kZVNldE1lcmdlKCk7IGl0CgkgIHNlZW1zIHdlIHJlYWxseSBuZWVkIHRvIHdhbGsgdGhlIHdob2xlIGxpc3QsIHNpbmNlIHRob3NlCgkgIG5hc3RseSBuYW1lc3BhY2Ugbm9kZXMgbmVlZCB0byBiZSBhZGRlZCB3aXRoCgkgIHhtbFhQYXRoTm9kZVNldER1cE5zKCk7IHRodXMgYSBwdXJlIG1lbWNweSBpcyBub3QgcG9zc2libGUuCgkgIEEgZmxhZyBvbiB0aGUgbm9kZS1zZXQgaW5kaWNhdGluZyBpZiBuYW1lc3BhY2Ugbm9kZXMgYXJlIGluCgkgIHRoZSBzZXQgd291bGQgaGVscCBoZXJlOyB0aGlzIGlzIHRoZSAzcmQgZmxhZyB3aGljaCB3b3VsZAoJICBiZSB1c2VmdWxsIHdpdGggbm9kZS1zZXRzLiBUaGUgY3VycmVudCBmbGFncyBJIGhhdmUgaW4gbWluZDoKCSAgMSkgSXMgYSBub2RlLXNldCBhbHJlYWR5IHNvcnRlZD8KCSAgICAgVGhpcyB3b3VsZCBhbGxvdyBmb3IgcmVidXN0IGFuZCBvcHRpbWl6YWJsZSBzb3J0aW5nCgkgICAgIGJlaGF2aW91ci4KCSAgMikgT2Ygd2hhdCB0eXBlIGFyZSB0aGUgbm9kZXMgaW4gdGhlIHNldCAob3Igb2YgbWl4ZWQgdHlwZSk/CgkgICAgIFRoaXMgd291bGQgYWxsb3cgZm9yIGZhc3RlciBtZXJnaW5nIG9mIG5vZGUtc2V0cy4KCSAgMykgQXJlIG5hbWVzcGFjZSBub2RlcyBpbiB0aGUgc2V0PwoJICAgICBUaGlzIHdvdWxkIGFsbG93IHRvIHNraXBwIGFsbCB0aGUgbmFtZXNwYWNlIG5vZGUgc3BlY2lmaWMKCSAgICAgc3BlY2lhbCBoYW5kbGluZy4gRmFzdGVyIG5vZGUtc2V0IG1lcmdpbmcgaWYgdGhlIGZpcnN0CgkgICAgIHNldCBpcyBlbXB0eTsganVzdCBtZW1jcHkgdGhlIHNldC4KCk1vbiBNYXkgMjIgMTc6MTQ6MDAgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IE9wdGltaXphdGlvbiBvZiBjb3VudCgpOiBlbGltaW5hdGVkIHNvcnRpbmcKCSAgKHNlZSBidWcgIzE2NTU0NykuIE9wdGltaXphdGlvbiBvZiBYUEFUSF9PUF9GSUxURVIgaWYgdGhlCgkgIHByZWRpY2F0ZSBpcyBhIFsxXSAoZGlzYWJsZSB3aXRoIFhQX09QVElNSVpFRF9GSUxURVJfRklSU1QgaWYKCSAgaXQgcHJvZHVjZXMgdHJvdWJsZSkuIFRpbnkgb3B0IGluIHhtbFhQYXRoTm9kZVNldE1lcmdlKCkuCgkgIApNb24gTWF5IDIyIDEzOjMzOjEyIENFU1QgMjAwNiBSb2IgUmljaGFyZHMgPHJyaWNoYXJkc0BjdGluZHVzdHJpZXMubmV0PgoKCSogdHJlZS5jOiBSZXZlcnQgYmVoYXZpb3IgY2hhbmdlIGluIHhtbFNldFByb3AgdG8gaGFuZGxlIGF0dHJpYnV0ZXMKCSAgd2l0aCBjb2xvbnMgaW4gbmFtZSBhbmQgbm8gbmFtZXNwYWNlLgoKRnJpIE1heSAxOSAyMTo1Njo0MyBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHBhdGguYzogU3Vic3RpdHV0ZWQgYWxsIHJlbWFpbmluZyBjYWxscyB0byB4bWxYUGF0aENtcE5vZGVzKCkKCSAgZm9yIHhtbFhQYXRoQ21wTm9kZXNFeHQoKS4gVGlueSBmdXJ0aGVyIGVuaGFuY2VtZW50IG9mCgkgIHhtbFhQYXRoQ21wTm9kZXNFeHQoKS4gQWRkZWQgYWRkaXRpb25hbCBjaGVja3MgaW4gdmFyaW91cyBjb2RlCgkgIHBhcnRzIHRvIGF2b2lkIGNhbGxpbmcgc29ydGluZyBvciBtZXJnaW5nIGZ1bmN0aW9ucyBpZiB0aGUKCSAgbm9kZS1zZXQocykgZG9uJ3QgbmVlZCB0aGVtOyBpLmUuLCBpZiB0aGV5IGFyZSBlbXB0eSBvciBjb250YWluCgkgIGp1c3Qgb25lIG5vZGUuCgpGcmkgTWF5IDE5IDEzOjE2OjU4IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4cGF0aC5jOiBPcHRpbWl6ZWQgdGhlIGNvbXBhcmlzb24gZm9yIG5vbi1lbGVtZW50IG5vZGVzCgkgIGluIHhtbFhQYXRoQ21wTm9kZXNFeHQoKTsgdGhlIGNvbXBhcmlzb24gaXMgdXNlZCBmb3Igc29ydGluZwoJICBvZiBub2RlLXNldHMuIFRoaXMgZW5oYW5jZW1lbnQgaXMgcmVsYXRlZCB0byBidWcgIzE2NTU0Ny4KCSAgVGhlcmUgYXJlIG90aGVyIHBsYWNlcyB3aGVyZSB0aGUgb2xkIGNvbXBhcmlzb24gZnVuY3Rpb24KCSAgeG1sWFBhdGhDbXBOb2RlcygpIGlzIHN0aWxsIGNhbGxlZCwgYnV0IEkgY3VycmVudGx5IGRvbid0CgkgIGtub3cgZXhhY3RseSB3aGF0IHRob3NlIGNhbGxzIGFyZSBmb3I7IHRodXMgaWYgdGhleSBjYW4gYmUKCSAgc3Vic3RpdHV0ZWQgKGlmIGl0IG1ha2VzIHNlbnNlKSBmb3IgdGhlIG5ldyBmdW5jdGlvbi4KClR1ZSBNYXkgMTYgMTY6NTU6MTMgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhwYXRoLmM6IEFwcGxpZWQgcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMsIGZpeGluZyBhIHBvdGVudGlhbAoJICBtZW1vcnkgbGVhayBpbiB4bWxYUGF0aFRyeVN0cmVhbUNvbXBpbGUoKSwgd2hlbiBhIGxpc3Qgb2YKCSAgbmFtZXNwYWNlcyB3YXMgYXNzaWduZWQgdG8gdGhlIFhQYXRoIGNvbXBpbGF0aW9uIGNvbnRleHQ7CgkgIGhlcmUgYSBuZXcgbmFtZXNwYWNlIGxpc3Qgd2FzIGNyZWF0ZWQgYW5kIHBhc3NlZCB0bwoJICB4bWxQYXR0ZXJuY29tcGlsZSgpOyBidXQgdGhpcyBsaXN0IHdhcyBub3QgZnJlZWQgYWZ0ZXJ3YXJkcy4KCSAgQWRkaXRpb25hbGx5IHdlIGF2b2lkIG5vdyBpbiB4bWxYUGF0aFRyeVN0cmVhbUNvbXBpbGUoKSB0bwoJICBjb21waWxlIHRoZSBleHByZXNzaW9uLCBpZiBpdCBoYXMgYSBjb2xvbiAtIGluZGljYXRpbmcKCSAgcHJlZml4ZWQgbmFtZSB0ZXN0cyAtIGFuZCBubyBuYW1lc3BhY2UgbGlzdCB3YXMgZ2l2ZW4uIFRoZQoJICBzdHJlYW1pbmcgWFBhdGggbWVjaGFuaXNtIG5lZWRzIGEgbmFtZXNwYWNlIGxpc3QgYXQKCSAgY29tcGlsYXRpb24gdGltZSAodW5saWtlIG5vcm1hbCBYUGF0aCwgd2hlcmUgd2UgY2FuIGJpbmQKCSAgbmFtZXNwYWNlIG5hbWVzIHRvIHByZWZpeGVzIGF0IGV4ZWN1dGlvbiB0aW1lKS4KCSogcGF0dGVybi5jOiBFbmhhbmNlZCB0byB1c2UgYSBzdHJpbmcgZGljdCBmb3IgbG9jYWwtbmFtZXMsCgkgIG5zLXByZWZpeGVzIGFuZCBhbmQgbmFtZXNwYWNlLW5hbWVzLgoJICBGaXhlZCB4bWxTdHJlYW1QdXNoSW50ZXJuYWwoKSBub3QgdG8gdXNlIHN0cmluZy1wb2ludGVyCgkgIGNvbXBhcmlzb24gaWYgYSBkaWN0IGlzIGF2YWlsYWJsZTsgdGhpcyB3b24ndCB3b3JrLCBzaW5jZQoJICBvbmUgZG9lcyBub3Qga25vdyBpdCB0aGUgZ2l2ZW4gc3RyaW5ncyBvcmlnaW5hdGUgZnJvbSB0aGUKCSAgc2FtZSBkaWN0IC0gYW5kIHRoZXkgbm9ybWFsbHkgZG9uJ3QgZG8sIHNpbmNlIGUuZy4KCSAgbmFtZXNwYWNlcyBhcmUgaG9sZCBvbiB4bWxOcy0+aHJlZi4gSSB0aGluayB0aGlzIHdvdWxkIGJlCgkgIHdvcnRoIGFuIGludmVzdGlnYXRpb246IGlmIHdlIGNhbiBhZGQgYSBAZG9jIGZpZWxkIHRvIHhtbE5zCgkgIGFuZCBwdXQgdGhlIEBocmVmIGluIHRvIGEgYWRkaXRpb25hbiBuYW1lc3BhY2UgZGljdCBob2xkCgkgIGluIHhtbERvYy4gRGFuaWVsIHdpbGwgc3VyZWx5IG5vdCBsaWtlIHRoaXMgaWRlYSA6LSkgQnV0CgkgIGV2YWx1YXRpb24gb2YgdG9ucyBvZiBlbGVtZW50cy9hdHRyaWJ1dGVzIGluIG5hbWVzcGFjZXMKCSAgd2l0aCB4bWxTdHJFcXVhbCgpIGlzbid0IHRoZSB3YXkgd2Ugc2hvdWxkIGdvIGZvcmV2ZXIuCgkgIApUaHUgTWF5IDExIDE4OjAzOjQ5IENFU1QgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGJ1ZyAjMzQxMzM3LCByZXBvcnRlZCBieSBEYXZpZCBHcm9obWFubi4KCSAgVGhlIGNvZGUgZXhwZWN0ZWQgYSBub2RlICh4bWxOb2RlUHRyKSBvbiB0aGUgaW5mbyBmb3IgYQoJICBub24tZXhpc3RlbnQgZGVmYXVsdCBhdHRyaWJ1dGUsIHdoaWNoIGNsZWFybHkgY2Fubm90IGJlCgkgIGV4cGVjdGVkLCBzaW5jZSB0aGUgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0LiBJIGNhbiBvbmx5CgkgIGd1ZXNzIHRoYXQgdGhpcyBzbmVha2VkIHRyeWluZyB0byBlbGltaW5hdGUgdGhlIHF1ZXJ5CgkgIGZvciB0aGUgb3duZXItZWxlbWVudCwgd2hpY2ggaXMgdW5hdm9pZGFibGUgYWN0dWFsbHkuCgkgIE5vdGUgdGhhdCBjcmVhdGlvbiBvZiBkZWZhdWx0IGF0dHJpYnV0ZXMgd29uJ3QgaGF2ZSBhbgoJICBlZmZlY3QgaWYgdmFsaWRhdGluZyB2aWEgU0FYL1hNTFJlYWRlcjsgaS5lLiwgdGhlIHByb2Nlc3NvcgoJICB3b24ndCBmaXJlIGFkZGl0aW9uYWwgc3RhcnQtYXR0cmlidXRlIGV2ZW50cyAoSSdtIG5vdCBldmVuCgkgIHN1cmUgaWYgTGlieG1sMiBoYXMgc3VjaCBhIFNBWC1ldmVudDsgSSB0aGluayBpdCBoYW5kcyB0aGVtCgkgIGFsbCBvdmVyIGluIHRoZSBzdGFydC1lbGVtZW50IGV2ZW50KS4KClR1ZSBNYXkgIDkgMjE6NDc6NTggQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgYnVnICMzNDExNTAsIHJlcG9ydGVkIGJ5IE1pY2hhZWwgUm9tZXIuCgkgIEluIHhtbFNjaGVtYUJ1aWxkQ29udGVudE1vZGVsRm9yU3Vic3RHcm91cCgpLAoJICB4bWxBdXRvbWF0YU5ld09uY2VUcmFuczIoKSB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mCgkgIHhtbEF1dG9tYXRhTmV3VHJhbnNpdGlvbjIoKSB0byBtaW1pYyBhIHhzOmNob2ljZSBmb3IKCSAgc3Vic3RpdHV0aW9uLWdyb3Vwcy4KCSogdGVzdC9zY2hlbWFzL3N1YnN0LWdyb3VwLTFfMS54c2QKCSAgdGVzdC9zY2hlbWFzL3N1YnN0LWdyb3VwLTFfMC54bWwKCSAgcmVzdWx0L3NjaGVtYXMvc3Vic3QtZ3JvdXAtMV8wXzEKCSAgcmVzdWx0L3NjaGVtYXMvc3Vic3QtZ3JvdXAtMV8wXzEuZXJyOiBBZGRlZCByZWdyZXNzaW9uIHRlc3QKCSAgc3VwcGxpZWQgYnkgTWljaGFlbCBSb21lciBmb3IgYnVnICMzNDExNTAuCgpTYXQgTWF5ICA2IDExOjA1OjI0IEhLVCAyMDA2IFdpbGxpYW0gTS4gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVsYXhuZy5jOiBGaXhlZCBjb21waWxhdGlvbiBlcnJvciB3aXRoIHBhdGNoIHN1cHBsaWVkIGJ5CgkgIEdyYWhhbSBCZW5uZXR0LgoKVGh1IE1heSAgNCAxOToxNDowMyBDRVNUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBXZSdsbCByYWlzZSBhbiBpbnRlcm5hbCBlcnJvciBhbmQgc3RvcAoJICB2YWxpZGF0aW9uIG5vdyB3aGVuIGFuIGVudGl0eSBpcyBmb3VuZCBpbiB0aGUgaW5zdGFuY2UKCSAgZG9jdW1lbnQsIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYXV0b21hdGljIGVudGl0eQoJICBzdWJzdGl0dXRpb24gYnkgdGhlIHNjaGVtYSBwcm9jZXNzb3IgKHlldD8pIC0KCSAgc2VlIGJ1ZyAjMzQwMzE2LCByZXBvcnRlZCBieSBOaWNrIFdlbGxuaG9mZXIuCgpXZWQgTWF5ICAzIDE1OjE2OjAwIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgYW5vdGhlciBQeXRob24gZGV0ZWN0aW9uIHBhdGNoIGZyb20gSm9zZXBoIFNhY2NvCgkqIGxpYnhtbC5zcGVjLmluOiBjbGVhbnVwIHRoZSBjaGFuZ2Vsb2cgc2VjdGlvbiwgYXNjaWlmaWVzIHRoZSBzcGVjIGZpbGUKCSAgdG9vCgpUdWUgTWF5ICAyIDIyOjM0OjU0IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXggYSBtaXggb2YgY29kZSBhbmQgZGVjbGFyYXRpb25zIHNob3dpbmcgdXAgb24gV2luZG93cwoJICBwYXRjaCBmcm9tIEtqYXJ0YW4gTWFyYWFzLCBmaXhpbmcgIzM0MDQwNAoKVHVlIE1heSAgMiAxNDoyNDo0MCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4aW5nIGJ1ZyAjMzQwMzk4IHhtbENoYXJFbmNPdXRGdW5jIHdyaXRpbmcgdG8KCSAgaW5wdXQgYnVmZmVyCgpGcmkgQXByIDI4IDE4OjI5OjIyIENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGNvbmZpZ3VyZS5pbiBkb2MvLyo6IHByZXBhcmluZyAyLjYuMjQgcmVsZWFzZSwgZml4ZWQgUHl0aG9uCgkgIHBhdGhzIGF0IHRoZSBsYXN0IG1vbWVudAoJKiByZWxheG5nLmMgdGVzdGFwaS5jIHRyZWUuYzogZml4IHNvbWUgY29tbWVudHMKClRodSBBcHIgMjcgMTA6MTU6NDUgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSb2xhbmQgU2Nod2luZ2VsIHRvIGFsbG93IFVURi04CgkgIGZpbGUgcGF0aHMgb24gV2luZG93cwoKVGh1IEFwciAyNyAxMDoxMDo1OCBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IHBhdGNoIGZyb20gSmFzb24gVmllcnMgZm9yIGxpbmUgYnJlYWtzIGFmdGVyIEVuZFBJCgpUdWUgQXByIDI1IDIyOjIyOjU4IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeCBjb21waWxhdGlvbiB3aXRob3V0IHRyZWUKClR1ZSBBcHIgMjUgMTg6MTc6MzcgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBwYXRjaCBmcm9tIEdhcnkgQ29hZHkgdG8gcmVhbGx5IG1ha2Ugc3VyZQoJICB4bWxsaW50IC0tbm9uZXQgd291bGQgbm90IHJlYWNoIHRoZSBuZXR3b3JrLCBzaG91bGQgZml4ICMzMzc0ODMuCgpUdWUgQXByIDI1IDE0OjUyOjE1IENFU1QgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb3NlcGggU2FjY28gY2hhbmdpbmcgc2xpZ2h0bHkKCSAgdGhlIHB5dGhvbiBkZXRlY3Rpb24gc2NoZW1lIHNob3VsZCBmaXggYnVnICMzMzg1MjYKCk1vbiBBcHIgMjQgMTA6NTA6MTkgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXggdGhlIGVycm9yIG1lc3NhZ2UgZm9yIGludmFsaWQgY29kZSBwb2ludCBpbiBjb250ZW50CgkgIGMuZi4gYnVnICMzMzkzMTEKCldlZCBBcHIgMTkgMTM6MTY6MjMgQ0VTVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyB0ZXN0L3NjaGVtYXMvcmVzdHJpY3Rpb24tZW51bS0xKgoJICByZXN1bHQvc2NoZW1hcy9yZXN0cmljdGlvbi1lbnVtLTEqOiBGaXhlZCBpbmNvcnJlY3QKCSAgdmFsaWRhdGlvbiBvZiByZXN0cmljdGVkIGVudW1lcmF0aW9ucy4gQWRkZWQgcmVsYXRlZAoJICByZWdyZXNzaW9uIHRlc3RzLgoKVGh1IEFwciAxMyAwOTo0NzoyNSBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhpbmcgYSBkZWFsbG9jYXRpb24gcHJvYmxlbSBpbiB4bWxTY2hlbWFBZGRTY2hlbWFEb2MoKQoJICBpbiBjYXNlIG9mIGVycm9ycywgc2hvdWxkIGZpeCBidWcgIzMzODMwMwoKVGh1IEFwciAxMyAwOTozMTo0NSBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhpbmcgYSBkZWFsbG9jYXRpb24gcHJvYmxlbSBpbiB4bWxSZWxheE5HUGFyc2UoKSAKCSAgaW4gY2FzZSBvZiBlcnJvcnMsIHNob3VsZCBmaXggYnVnICMzMzgzMDYKClRodSBBcHIgIDYgMTA6MjI6MTcgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxjYXRhbG9nLjEgZG9jL3htbGNhdGFsb2dfbWFuLnhtbCBkb2MveG1sbGludC4xIGRvYy94bWxsaW50LnhtbDoKCSAgYXBwbGllZCBtYW4gcGFnZSBpbXByb3ZlbWVudHMgZnJvbSBEYW5pZWwgTGVpZGVydAoKTW9uIE1hciAyNyAxMTo0NDowNyBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiByZW1vdmVkIHVudXNlZCBjb2RlIG9yIHZhcmlhYmxlcywgZnJvbSBTdGVmYW4gS29zdAoJICBmaXhpbmcgIzMzNjE2MyBhbmQgIzMzNjE2NAoKTW9uIE1hciAyNyAxMTozODoyMSBDRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gU3RlZmFuIEtvc3QgZml4aW5nICMzMzYxNjAKCk1vbiBNYXIgMjcgMTE6MjM6MzkgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNodmFsaWQuYyBnZW5DaFJhbmdlcy5weSBnZW5Vbmljb2RlLnB5IHhtbHVuaWNvZGUuYwoJICBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmggaW5jbHVkZS9saWJ4bWwveG1sdW5pY29kZS5oOiBhcHBsaWVkCgkgIHBhdGNoZXMgZnJvbSBBaXZhcnMgS2FsdmFucyB0byBtYWtlIHVuaWNvZGUgdGFibGVzIGNvbnN0LCBmaXhlcwoJICBidWcgIzMzNjA5NiwgdGhpcyBhbHNvIHVwZGF0ZXMgdG8gVW5pY29kZSA0LjAxIGZpbmFsIHdpdGggYSBjb3VwbGUKCSAgb2YgY2hhcmFjdGVyIHJhbmdlcyBmaXhlcy4KCk1vbiBNYXIgMjcgMDA6NTE6NDAgQ0VTVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNodmFsaWQuYyBnZW5DaFJhbmdlcy5weSBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IGZpeGVkIGJ1ZwoJICAjMzM1NjAzIGFuZCByZXN5bmMnZWQgZ2VuQ2hSYW5nZXMucHkgdG8gdGhlIGV4cGVjdGVkIG91dHB1dC4KCldlZCBNYXIgMjIgMDA6MTQ6MzQgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBZb3VyaSBHb2xvdmFub3YgZml4aW5nIGJ1ZwoJICAjMzE2MzM4IGFuZCBhZGRpbmcgYSBjb3VwbGUgb2Ygb3B0aW1pemF0aW9ucyBpbiB0aGUgcmVnZXhwCgkgIGNvbXBpbGF0aW9uIGVuZ2luZS4KCSogdGVzdC9yZWdleHAvYnVnMzE2MzM4IHJlc3VsdC9yZWdleHAvYnVnMzE2MzM4OiBhZGRlZCByZWdyZXNzaW9uCgkgIHRlc3RzIGJhc2VkIG9uIHRoZSBleGFtcGxlcyBwcm92aWRlZCBpbiB0aGUgYnVnIHJlcG9ydC4KCkZyaSBNYXIgMTAgMDg6NDA6NTUgRVNUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jIGVuY29kaW5nLmMgeG1sc2NoZW1hcy5jIHhwYXRoLmMgeHBvaW50ZXIuYzogZml4IGEgZmV3CgkgIHdhcm5pbmcgcmFpc2VkIGJ5IGdjYy00LjEgYW5kIGxhdGVzdHMgY2hhbmdlcwoKRnJpIE1hciAxMCAwMTozNDo0MiBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW50ZXN0LmMgc2NoZW1hdHJvbi5jIHRlc3RBdXRvbWF0YS5jIHRyZWUuYyB2YWxpZC5jIHhpbmNsdWRlLmMKCSAgeG1sY2F0YWxvZy5jIHhtbHJlYWRlci5jIHhtbHJlZ2V4cC5jIHhwYXRoLmM6IGVuZCBvZiBmaXJzdAoJICBwYXNzIG9uIGNvdmVyaXR5IHJlcG9ydHMuCgpUaHUgTWFyICA5IDE5OjM2OjE0IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgY2xlYW51cHMgYmFzZWQKCSAgb24gY292ZXJpdHkgcmVwb3J0cy4KCQpUaHUgTWFyICA5IDE3OjQ3OjQwIENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBjYXRhbG9nLmMgZW5jb2RpbmcuYyBlbnRpdGllcy5jIGV4YW1wbGUvZ2pvYnJlYWQuYwoJICBweXRob24vbGlieG1sLmM6IG1vcmUgY2xlYW51cHMgYmFzZWQgb24gY292ZXJpdHkgcmVwb3J0cy4KClRodSBNYXIgIDkgMTU6MTI6MTkgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHBhdHRlcm4uYyB1cmkuYzogYSBidW5jaAoJICBvZiBzbWFsbCBjbGVhbnVwcyBiYXNlZCBvbiBjb3Zlcml0eSByZXBvcnRzLgoKVGh1IE1hciAgOSAwOTo0MjoxMCBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2I6IGFkZGVkIHNjaGVtYXRyb24gYXMgcG9pbnRlZCBvdXQgYnkgRXJpYyBadXJjaGVyCgpUdWUgTWFyICA3IDA5OjUwOjA5IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbDItY29uZmlnLmluOiBmaXggUmVkIEhhdCBidWcgIzE4NDE3MAoKTW9uIE1hciAgNiAxNDoyMTowOCBDRVQgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0cmVlLmM6IFNpbXBsaWZpZWQgdXNhZ2Ugb2YgdGhlIGludGVybmFsIHhtbE5zTWFwLiBBZGRlZCBhCgkgICJzdHJpY3QiIGxvb2t1cCBmb3IgbmFtZXNwYWNlcyBiYXNlZCBvbiBhIHByZWZpeC4gRml4ZWQgYQoJICBuYW1lc3BhY2UgcHJvY2Vzc2luZyBpc3N1ZSBpbiB0aGUgY2xvbmUtbm9kZSBmdW5jdGlvbiwgd2hpY2gKCSAgb2NjdXJlZCBpZiBhIEBjdHh0IGFyZ3VtZW50IHdhcyBnaXZlbi4KCSAgCkZyaSBNYXIgIDMgMTc6NDQ6MTAgQ0VUIDIwMDYgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIHZhbGlkLmM6IGZpeCBIVE1MIGF0dHJpYnV0ZSBJRCBjaGVja2luZyBmb3IgaW5wdXQgZWxlbWVudC4KCSAgTWFpbnRhaW4gY3VycmVudCBhdHRyaWJ1dGUgIm5hbWUiIGJlaGF2aW9yIGZvciBub3cuCgpUaHUgTWFyICAyIDE4OjU5OjUwIENFVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRyZWUuYzogQnVuZGxlZCBsb29rdXAgb2YgYXR0ci1ub2RlcyBhbmQgcmV0cmlldmluZyB0aGVpcgoJICB2YWx1ZXMgaW50byB0aGUgZnVuY3Rpb25zIHhtbEdldFByb3BOb2RlSW50ZXJuYWwoKSBhbmQKCSAgeG1sR2V0UHJvcE5vZGVWYWx1ZUludGVybmFsKCkuIENoYW5nZWQgcmVsZXZhbnQgY29kZQoJICB0byB1c2UgdGhvc2UgZnVuY3Rpb25zLgoKTW9uIEZlYiAyNyAyMDo0MjowNCBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB3b3JrYXJvdW5kIEhQLVVYIGNvbXBpbGVyIGJ1ZyBieSBSaWNrIEpvbmVzCgpNb24gRmViIDI3IDEwOjU3OjA1IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwyLnB5OiByZW1vdmUgYSB0YWIsIGFzIHBvaW50ZWQgb3V0IG9uIElSQwoKU2F0IEZlYiAyNSAxODoxMjoxMCBDRVQgMjAwNiBSb2IgUmljaGFyZHMgPHJyaWNoYXJkc0BjdGluZHVzdHJpZXMubmV0PgoKCSogdHJlZS5jOiBGaXggdGhlIGFkZCBzaWJsaW5nIGZ1bmN0aW9ucyB3aGVuIHBhc3NpbmcgYXR0cmlidXRlcy4KCSAgTW9kaWZ5IHRlc3RpbmcgZm9yIElEIGluIHhtbFNldFByb3AuCgkgIE5vIGxvbmdlciByZW1vdmUgSURuZXNzIHdoZW4gdW5saW5raW5nIG9yIHJlcGxhY2luZyBhbiBhdHRyaWJ1dGUuCgpGcmkgRmViIDI0IDIxOjIwOjMzIENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogTWFydGluIENvbGUgcG9pbnRlZCBvdXQgYSBidWcgaW4geG1sQ2F0YWxvZ0FkZCgpCgkgIGlmIC9ldGMveG1sL2NhdGFsb2cgZG9lc24ndCBleGlzdC4KClRodSBGZWIgMjMgMjM6MDY6MTggQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLy8qOiB1cGRhdGVkIHRoZSBSdWJ5IGJpbmRpbmdzIGxpbmtzLCBhbmQgcmVnZW5lcmF0ZWQgdGhlCgkgIGRvY3MuCgpUaHUgRmViIDIzIDA5OjEyOjI3IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogaW1wcm92ZSBjYXRhbG9nIGRlYnVnZ2luZyBtZXNzYWdlIHBhdGNoIGZyb20gUmljayBKb25lcwoKV2VkIEZlYiAyMiAxNjowOToxMCBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdHlwZXMuYzogTmljIEZlcnJpZXIgZm91bmQgZGVidWcgc3RhdGVtZW50IGxlZnQgaW4gdGhlCgkgIFhQYXRoIGNvbnZlcnNpb24gY29kZQoKVHVlIEZlYiAyMSAyMDoyMzoxNCBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sbGludC4xIGRvYy94bWxsaW50LnhtbDogc21hbGwgbWFuIHBhZ2UgaW1wcm92ZW1lbnRzIGZyb20KCSAgRGFuaWVsIExlaWRlcnQKCk1vbiBGZWIgMjAgMTU6NDU6MTkgQ0VUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBhIHNpZGUtZWZmZWN0IG9mIHRoZSBwcmV2aW91cyBYU0kgYnVnZml4OgoJICBUaGUgY29uc3RydWN0b3IgbmVlZHMgYSBidWNrZXQgdG8gYmUgYXNzaWduZWQgZHVyaW5nIGNvbXBvbmVudAoJICBmaXh1cC4KCk1vbiBGZWIgMjAgMTQ6MzI6MzYgQ0VUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBGaXhlZCB4czpib29sZWFuIHRvIHJlamVjdAoJICB0aGUgZW1wdHkgc3RyaW5nIChyZXBvcnRlZCBieSBCYXMgRHJpZXNzZW4gb24gdGhlIG1haWxpbmctbGlzdCkuCgkgIEZpeGVkIHNjaGVtYSBYU0ktYWNxdWlzaXRpb24gYW5kIGNvbnN0cnVjdGlvbjogdGhlIHNjaGVtYXRhCgkgICh4bWxTY2hlbWEpIGRpZG4ndCBnZXQgdGhlIHRhcmdldE5hbWVzcGFjZSBpbiBzb21lIGNhc2VzLCB0aHVzCSAgCgkgIHRoZSBjb21wb25lbnQgcmVzb2x1dGlvbiBtZWNoYW5pc20gZmFpbGVkIHRvIHdvcmsuIFRoZSBYU0kKCSAgc3R1ZmYgbmVlZHMgdG8gYmUgdGVzdGVkIG1vcmUgaW50ZW5zaXZlbHk7IHRoaW5rIGFib3V0IGhvdwoJICB0byB0ZXN0IHRoaXMgZm9yIHJlZ3Jlc3Npb24uCgpNb24gRmViIDIwIDA5OjU3OjQxIENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxsaW50LjEgZG9jL3htbGxpbnQueG1sOiBtb3JlIG1hbiBwYWdlIGltcHJvdmVtZW50cyBmcm9tCgkgIERhbmllbCBMZWlkZXJ0CgpTdW4gRmViIDE5IDIyOjMxOjMzIENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxsaW50LjEgZG9jL3htbGxpbnQueG1sOiBtYW4gcGFnZSBpbXByb3ZlbWVudHMgZnJvbSBEYW5pZWwKCSAgTGVpZGVydCwgYy5mLiAjMzMxMjkwCgpTdW4gRmViIDE5IDE3OjU0OjA0IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogZml4IGFuIGVycm9yIHJlcG9ydCB3aGVuIHVzaW5nIC0tcGF0aCBhbmQgLS12YWxpZAoJICBjbG9zZXMgYnVnICMzMzEyOTAKClN1biBGZWIgMTkgMTY6MjA6NDMgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiB0cnlpbmcgdG8gZml4ICMzMzEwNjIsIHRoaXMgaXMgYWdhaW4gYSBwcm9ibGVtCgkgIGFyb3VuZCBpbnRlcmxlYXZlLCB0aGVyZSBpcyBubyBnb29kIGZpeCB1bmxlc3MgcmVpbXBsZW1lbnRpbmcKCSAgYnV0IHRoaXMgd29ya3MgYXJvdW5kIHNvbWUgY2FzZXMgYW5kIGFsbG93IHRvIHZhbGlkYXRlIGluIHRoYXQKCSAgY2FzZS4KCldlZCBGZWIgMTUgMTE6NTU6MjIgQ0VUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jOiBGaXhlZCBidWcgIzMyODg5NiByZXBvcnRlZCBieSBMaXJvbi4gVGhlIHBhdGgKCSAgZm9yIHRleHQtIGFuZCBDREFUQS1zZWN0aW9uLW5vZGVzIHdhcyBjb21wdXRlZCBpbmNvcnJlY3RseQoJICBpbiB4bWxHZXROb2RlUGF0aCgpLgoKU3VuIEZlYiAxMiAyMDoxMjoyMiBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogYnVnIGZpeGVzIGZvciAjMzI3MTY3IGFzIHdlbGwgYXMgc29tZSBjbGVhbnVwcwoJICBhbmQgbW9yZSB0aG9yb3VnaCB0ZXN0cyBvbiBhdG9tcyBjb21wYXJpc29ucy4KClRodSBGZWIgIDkgMTA6MDc6MjAgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS93c29ja2NvbXBhdC5oOiBwYXRjaCBmcm9tIEVyaWMgWnVyY2hlciB0byBjb21waWxlIHdpdGgKCSAgQm9ybGFuZCBDKysgNgoKU3VuIEZlYiAgNSAwNDowMzo1OSBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYmlsbCBwb2ludGVkIG91dCBhIG1pc3NpbmcgYmxvY2sgaW4geG1sUGFyc2VDb21tZW50CgkgIHRyeWluZyB0byBmaWxsIHdpdGggYSBub3JtYWwgcHJvY2Vzc2luZyBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyLgoKU3VuIEZlYiAgNSAwMzo0MTozOSBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgdGhlIGNvbW1lbnQgc3RyZWFtaW5nIGJ1ZyByYWlzZWQgYnkgR3JhaGFtIEJlbm5ldHQKCSogdGVzdC9iYWRjb21tZW50LnhtbCByZXN1bHQvL2JhZGNvbW1lbnQueG1sKjogYWRkZWQgdG8gdGhlIHJlZ3Jlc3Npb24KCSAgc3VpdGUuCgpGcmkgRmViICAzIDE3OjM2OjQxIENFVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogQWRkZWQgdGhlIHhtbERPTVdyYXBDbG9uZU5vZGUoKSB0bwoJICB0aGUgaGVhZGVyIGZpbGUuCgpGcmkgRmViICAzIDE3OjI5OjIyIENFVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRyZWUuYzogQWRkZWQgYW4gaW5pdGlhbCB2ZXJzaW9uIG9mIHhtbERPTVdyYXBDbG9uZU5vZGUoKSB0bwoJICB0aGUgQVBJLiBJdCB3aWxsIGJlIHVzZWQgdG8gcmVmbGVjdCBET00ncyBOb2RlLmNsb25lTm9kZSBhbmQKCSAgRG9jdW1lbnQuaW1wb3J0Tm9kZSBtZXRob2RzLgoJICBUaGUgcHJvczogMSkgbm9uLXJlY3Vyc2l2ZSwgMikgb3B0aW1pemVkIG5zLWxvb2t1cAoJICAobW9zdGx5IHBvaW50ZXIgY29tcGFyaXNvbiksIDMpIHVzZXIgZGVmaW5lZCBucy1sb29rdXAsCgkgIDQpIHNhdmUgbnMtcHJvY2Vzc2luZy4gVGhlIGZ1bmN0aW9uIGlzIGluIGFuIHVuZmluaXNoZWQKCSAgYW5kIGV4cGVyaW1lbnRhbCBzdGF0ZSBhbmQgc2hvdWxkIGJlIG9ubHkgdXNlZCB0byB0ZXN0IGl0LgoKRnJpIEZlYiAgMyAxMDo0Mjo0OCBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogYXBwbGllZCBwYXRjaCBmcm9tIFJvYiBSaWNoYXJkcyBmaXhpbmcgdGhlIFVSSSByZWdyZXNzaW9ucwoJICB0ZXN0cyBvbiBXaW5kb3dzIHdoaWNoIHNlZW1zIHRvIGluZGljYXRlIGJhZCBlc2NhcGluZy4KClRodSBGZWIgIDIgMTM6MTE6MjYgQ0VUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jOiBGaXhlZCBzb21lIGJ1Z3MgeG1sRE9NV3JhcFJlY29uY2lsZU5hbWVzcGFjZXMoKSB3cnQKCSAgdGhlIHByZXZpb3VzIGFkZGl0aW9uIG9mIHRoZSByZW1vdmFsIG9mIHJlZHVuZGFudCBucy1kZWNscy4KCldlZCBGZWIgIDEgMTc6MzI6MjUgQ0VUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jOiBFbmhhbmNlZCB4bWxET01XcmFwUmVjb25jaWxlTmFtZXNwYWNlcygpIHRvIHJlbW92ZQoJICByZWR1bmRhbnQgbnMtZGVjbHMgaWYgdGhlIG9wdGlvbiBYTUxfRE9NX1JFQ09OTlNfUkVNT1ZFUkVEVU5ECgkgIHdhcyBnaXZlbi4gTm90ZSB0aGF0IEkgaGF2ZW4ndCBtb3ZlZCB0aGlzIG9wdGlvbiB0byB0aGUKCSAgaGVhZGVyIGZpbGUgeWV0OyBzbyBqdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIEBvcHRpb24KCSAgb2YgMSB0byB0ZXN0IHRoZSBiZWhhdmlvdXIuCSAgCgpXZWQgRmViICAxIDEyOjIxOjA4IENFVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRhcGkuYyB3aW4zMi9NYWtlZmlsZS4qOiBBZGRlZCBjaGFuZ2VkIGFzIHByb3Bvc2VkIG9uCgkgIHRoZSBtYWlsaW5nIGxpc3QgYnkgdmVua2F0IG5haWR1IGluIG9yZGVyIHRvIGNvbXBpbGUKCSAgdGVzdGFwaS5jIG9uIHdpbmRvd3MuCgpUaHUgSmFuIDE5IDA5OjU3OjI4IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWwyLWNvbmZpZy5pbjogdHJ5aW5nIHRvIGZpeCB3aW5kb3dzL2NvbmZpZ3VyZQoJICBpc3N1ZXMgcmVwb3J0ZWQgYnkgVGltIFZhbiBIb2xkZXIKCldlZCBKYW4gMTggMTg6MjE6MTUgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGxpYnhtbC5oIHBhcnNlci5jOiB0cnkgdG8gZml4IHhtbFBhcnNlSW5Ob2RlQ29udGV4dAoJICB3aGVuIG9wZXJhdGluZyBvbiBhbiBIVE1MIGRvY3VtZW50LgoKTW9uIEphbiAgOSAxNzoyNzoxNSBDRVQgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBBZGRlZAoJICB4bWxSZWxheE5HU2V0UGFyc2VyU3RydWN0dXJlZEVycm9ycygpIHRvIHRoZSBBUEkuCgpNb24gSmFuICA5IDE1OjMzOjE2IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZXZlcnRlZCBmaXJzdCBwYXRjaGVzIGZvciAjMzE5Mjc5IHdoaWNoIGxlZCB0byAjMzI2Mjk1CgkgIGFuZCBmaXhlZCB0aGUgcHJvYmxlbSBpbiB4bWxQYXJzZUNodW5rKCkgaW5zdGVhZAoJKiB0ZXN0L2VudDExIHJlc3VsdC8vZW50MTEqOiBhZGRlZCB0ZXN0IGZvciAjMzI2Mjk1IHRvIHRoZSByZWdyZXNzaW9uCgkgIHN1aXRlCgpUaHUgSmFuICA1IDE2OjI1OjA2IENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIHRlc3RhcGkuYyBkb2MvKjogdXBhdGVkIHRoZSBuZXdzCgkgIHJlZ2VuZXJhdGVkIHRoZSBkb2NzLCBwcmVwYXJpbmcgZm9yIHJlbGVhc2Ugb2YgMi42LjIzCgkqIHBhdHRlcm4uYyB4bWxzY2hlbWFzLmM6IGZpeGVkIHNvbWUgY29tbWVudHMKCQpUaHUgSmFuICA1IDE1OjQ4OjI3IENFVCAyMDA2IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRlc3QvWFBhdGgvZG9jcy9ub2RlcyB0ZXN0L1hQYXRoL3Rlc3RzL25vZGVzcGF0CgkgIHJlc3VsdC9YUGF0aC90ZXN0cy9ub2Rlc3BhdDogQWRkZWQgcmVncmVzc2lvbiB0ZXN0cyBmb3IKCSAgdGhlIGxhdGVzdCBYUGF0aC9wYXR0ZXJuIGZpeGVzLgoKVGh1IEphbiAgNSAxNTo0MzozOCBDRVQgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBwYXR0ZXJuLmM6IEFub3RoZXIgZml4IHRvIGhhbmRsZSAiZm9vLy8uIjogImZvbyIgd2FzIG5vdAoJICBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIG5vZGUtc2V0LgoKVGh1IEphbiAgNSAxMzoyMjoyOSBDRVQgMjAwNiBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBwYXR0ZXJuLmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmg6CgkgIEZpeGVkIGJ1ZyAjMzIyOTI4LCByZXBvcnRlZCBieSBFcmljaCBTY2h1YmVydDogVGhlIGJ1ZyB3YXMKCSAgaW4gcGF0dGVybi5jLCB3aGljaCBpcyB1c2VkIGZvciBhIHRpbnkgc3Vic2V0IG9mIHhwYXRoCgkgIGV4cHJlc3Npb24gd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCBpbiBhbiBvcHRpbWl6ZWQgd2F5LgoJICBUaGUgZG9jLW5vZGUgd2FzIG5ldmVyIGNvbnNpZGVyZWQgd2hlbiBldmFsdWF0aW5nICIvLyIKCSAgZXhwcmVzc2lvbnMuIEFkZGl0aW9uYWxseSwgd2UgZml4ZWQgcmVzb2x1dGlvbgoJICB0byBub2RlcyBvZiBhbnkgdHlwZSBpbiBwYXR0ZXJuLmM7IGkuZS4gYSAiLy8uIiBkaWRuJ3Qgd29yawoJICB5ZXQsIGFzIGl0IGRpZCBzZWxlY3Qgb25seSBlbGVtZW50LW5vZGVzLiBEdWUgdG8gdGhpcwoJICBpc3N1ZSB0aGUgcHVzaGluZyBvZiBub2RlcyBpbiB4cGF0aC5jIG5lZWRlZCB0byBiZSBhZGp1c3RlZAoJICBhcyB3ZWxsLgoKV2VkIEphbiAgNCAxODowNzo0NyBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdGlueSByZWZhY3RvcmluZyBwYXRjaCBmcm9tIEJqb3JuIFJlZXNlCgpXZWQgSmFuICA0IDE1OjAwOjUxIENFVCAyMDA2IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogZml4IGJ1ZyAjMzI0NDMyIHdpdGggPHhtbDpmb28vPgoJKiB0ZXN0L25zNyByZXN1bC8vbnM3KjogYWRkZWQgdG8gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCldlZCBKYW4gIDQgMTA6NTM6NTYgQ0VUIDIwMDYgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS93c29ja2NvbXBhdC5oOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyayBKdW5rZXIsIGZpeGluZyBhIAoJICBNaW5HVyBjb21waWxhdGlvbiBwcm9ibGVtLCBzaG91bGQgY2xvc2UgYnVnICMzMjQ5NDMKClR1ZSBKYW4gIDMgMTE6NDk6NTQgQ0VUIDIwMDYgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBSZW1vdmVkIGxhc3QgZGVwZW5kZW5jeSBvbiB0aGUgb2Jzb2xldGUgZW51bQoJICB4bWxTY2hlbWFWYWxpZEVycm9yLgoKTW9uIEphbiAgMiAxMToyMDowMCBDRVQgMjAwNiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCB4bWxzY2hlbWFzLmM6IGNvbXBpbGF0aW9uCgkgIGFuZCBkb2MgYnVpbGQgZml4ZXMgZnJvbSBNaWNoYWVsIERheQoKV2VkIERlYyAyOCAyMjoxMjozNCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogYnVnIGluIHhtbFJlZ0V4ZWNQdXNoU3RyaW5nMigpIHBvaW50ZWQgb3V0IGJ5IAoJICBTcmVlbmkgTmFpci4KClR1ZSBEZWMgMjAgMTY6NTU6MzEgQ0VUIDIwMDUgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIHRyZWUuYzogZml4IGJ1ZyAjMzIyMTM2IGluIHhtbE5vZGVCdWZHZXRDb250ZW50IHdoZW4gZW50aXR5IHJlZiBpcyAKCSAgYSBjaGlsZCBvZiBhbiBlbGVtZW50IChmaXggYnkgT2xla3NhbmRyIEtvbm9uZW5rbykuCgkqIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaDogQWRkIGh0bWxEb2NEdW1wTWVtb3J5Rm9ybWF0LgoKVHVlIERlYyAyMCAxMTo0MzowNiBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc3RyaW5nLmM6IEZpeGVkIGEgc2VnZmF1bHQgZHVyaW5nCgkgIHRleHQgY29uY2F0ZW5hdGlvbiB3aGVuIHZhbGlkYXRpbmcgYSBub2RlIHRyZWU6CgkgIHhtbFN0cm5jYXQgd2FzIGNhbGxlZCB3aXRoIGEgQGxlbiBvZiAtMTsgYnV0IHVubGlrZQoJICB4bWxTdHJuY2F0TmV3LCBpdCBkb2VzIG5vdCBjYWxjdWxhdGUgdGhlIGxlbmd0aAoJICBhdXRvbWF0aWNhbGx5IGluIHN1Y2ggYSBjYXNlIChyZXBvcnRlZCBieSBKdWR5IEhheQoJICBvbiB0aGUgbWFpbGluZyBsaXN0KS4KCSAgVXBkYXRlZCB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZSBpbnZvbHZlZCBzdHJpbmcKCSAgZnVuY3Rpb25zIHRvIG5vdGUgdGhpcy4KClRodSBEZWMgMTUgMTI6MTE6MDcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2h0dHAuYzogYXBwbGllZCBwYXRjaCBmcm9tIEdhcnkgQ29hZHkgdG8gYWNjZXB0IGd6aXBwZWQKCSAgaHR0cCByZXNvdXJjZXMuCgpXZWQgRGVjIDE0IDE4OjQxOjI2IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogQWRkZWQgZW5hYmxlL2Rpc2FibGUgb2YgcnVudGltZQoJICBkZWJ1Z2dpbmcgKExJQlhNTF9ERUJVR19SVU5USU1FKS4KCldlZCBEZWMgMTQgMTg6MTE6NTAgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBGaXhlZCB0byBkZWZpbmUKCSAgTElCWE1MX0RFQlVHX1JVTlRJTUUgb24gdGhlIGJhc2lzIG9mIEBXSVRIX1JVTl9ERUJVR0AuCgpUdWUgRGVjIDEzIDEyOjQ5OjIzIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRlc3Qvc2NoZW1hcy9idWczMjE0NzUqIHJlc3VsdC9zY2hlbWFzL2J1ZzMyMTQ3NSo6CgkgIEFkZGVkIHJlZ3Jlc3Npb24gdGVzdCBmb3IgYnVnICMzMjE0NzUgKHJlcG9ydGVkIGJ5CgkgIEdhYm9yIE5hZ3kpLiBGaXhpbmcgb2YgYnVnICMzMjM1MTAgc2VlbWVkIHRvIGhhdmUKCSAgZml4ZWQgdGhpcyBidWcgYXMgd2VsbC4KCk1vbiBEZWMgMTIgMTY6MTk6MTYgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdGVzdC9zY2hlbWFzL2J1ZzMyMzUxMCogcmVzdWx0L3NjaGVtYXMvYnVnMzIzNTEwKjoKCSAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0IGZvciBidWcgIzMyMzUxMC4KCk1vbiBEZWMgMTIgMTY6MTE6MTMgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBXb3JrYXJvdW5kIGZvciBidWcgIzMyMzUxMCAocmVwb3J0ZWQgYnkKCSAgSm9uYXRoYW4gRmlsaWF0cmF1bHQpOiBzdWJzdGl0dXRlZCB0aGUgZXBzaWxvbiB0cmFuc2l0aW9uCgkgIGZvciBhIGxhYmVsbGVkIHRyYW5zaXRpb24sIGluIG9yZGVyIHRvIGF2b2lkIGEgYnVnIGluCgkgIHhtbHJlZ2V4cC5jIHdoaWNoIGVsaW1pbmF0ZWQgdGhlIGVwc2lsb24gdHJhbnNpdGlvbiBhbmQKCSAgbWFya2VkIHRoZSBpbml0aWFsIHN0YXRlIGFzIGZpbmFsLgoKTW9uIERlYyAxMiAxNDoyNTo0NiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogR2FyeSBDb2FkeSBwb2ludGVkIGEgbWVtb3J5IGxlYWsgaW4KCSAgeG1sVGV4dFJlYWRlclJlYWRJbm5lclhtbCgpIGFwcGxpZWQgcGF0Y2ggZml4aW5nICMzMjM4NjQKClNhdCBEZWMgMTAgMTI6MDg6MjggQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGNvbmZpZ3VyZS5pbiBwYXJzZXJJbnRlcm5hbHMuYyBydW5zdWl0ZS5jIHJ1bnRlc3QuYwoJICB0ZXN0YXBpLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIHhtbHN0cmluZy5jOiBmaXhlZCBhIG51bWJlcgoJICBvZiB3YXJuaW5ncyBzaG93biBieSBIUC1VWCBjb21waWxlciBhbmQgcmVwb3J0ZWQgYnkgUmljayBKb25lcwoKRnJpIERlYyAgOSAxODo1NzozMSBDRVQgMjAwNSBSb2IgUmljaGFyZHMgPHJyaWNoYXJkc0BjdGluZHVzdHJpZXMubmV0PgoKCSogeG1sd3JpdGVyLmM6IEluc2VydCBzcGFjZSBiZXR3ZWVuIHB1YmlkIGFuZCBzeXNpZCB3aGVuIGJvdGggCgkgIHBhc3NlZCB0byB4bWxUZXh0V3JpdGVyU3RhcnREVEQgYW5kIGluZGVudGluZyBub3QgYmVpbmcgdXNlZC4KCSAgUmVtb3ZlIG5vIGxvbmdlciB1c2VkIE1lbSBjYWxsYmFja3MuCgpGcmkgRGVjICA5IDExOjAxOjE2IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJ1bnN1aXRlLmM6IENoYW5nZWQgdG8gaW5zdGFudGx5IG1hcmsgaW5zdGFuY2UtdGVzdHMgYXMKCSAgZmFpbGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHNjaGVtYSB3YXMgaW52YWxpZC4gVGhpcwoJICByZWZsZWN0cyB0aGUgc2lkZSBvZiB0aGUgUHl0aG9uIGNvZGUgZm9yIHRoZSBYTUwgU2NoZW1hIHRlc3QKCSAgc3VpdGUuIFdlIG5vdyBnZXQgdGhlIHNhbWUgbnVtYmVyIG9mIGZhaWxlZCB0ZXN0cyBvbiBib3RoCgkgIHNpZGVzLgoKV2VkIERlYyAgNyAxNDo1OTowMSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogQWRkZWQKCSAgeG1sVGV4dFJlYWRlclNjaGVtYVZhbGlkYXRlQ3R4dCgpIHRvIHRoZSBBUEkuCgpXZWQgRGVjICA3IDEyOjU5OjU2IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgYSBzZWdmYXVsdDogdGhlIGluc3RhbmNlIGRvY3VtZW50IHdhcwoJICBzdGlsbCB0cmllZCB0byBiZSB2YWxpZGF0ZWQsIGlmIHRoZSBzY2hlbWEsIGR5bmFtaWNhbGx5CgkgIGFjcXVpcmVkIHVzaW5nIFhTSSB3YXMgaW52YWxpZCwgdGh1cyBtYW5nbGVkLiBUaGUKCSAgdmFsaWRhdGlvbiB3aWxsIHN0b3AgKG9yIHJhdGhlciB3b24ndCB2YWxpZGF0ZSkgbm93IGluCgkgIHN1Y2ggYSBjYXNlLiBUaGUgc2NoZW1hIHBhcnNlciBlcnJvciBjb2RlIHdpbGwgYmUgc2V0CgkgIG9uIHRoZSB2YWxpZGlvbiBjb250ZXh0IG5vdzsgdGhpcyBpcyBzb21laG93IG5vdCBuaWNlLAoJICBidXQgaXQgYXNzdXJlcyB0aGF0IHRoZSB2YWxpZGF0aW9uIGNvbnRleHQgaW5kaWNhdGVzIGFuCgkgIGVycm9yIGluIHRoZXJlIHdhcyBhIHBhcnNlciBlcnJvci4KClR1ZSBEZWMgIDYgMTg6NTc6MjMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IHNtYWxsIGRvYyBwYXRjaCBmcm9tIEFyb24gU3RhbnN2aWsKCSogbGVnYWN5LmM6IGFub3RoZXIgZG9jIHBhdGNoIGZvciBhIGRlcHJlY2F0ZWQgQVBJCgpNb24gRGVjICA1IDE2OjIzOjQ5IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIE1ha2VmaWxlLmFtOiBUaW55IGNoYW5nZSBmb3IgJ21ha2UgdGVzdHMnOiByYWlzZWQKCSAgdGhlIG51bWJlciBvZiBleHBlY3RlZCBmYWlsdXJlcyBmb3IgSmFtZXMgQ2xhcmsncwoJICBYTUwgU2NoZW1hIGRhdGF0eXBlIHRlc3RzIGZyb20gMTAgdG8gMTEuIFRoZSBhZGRpdGlvbmFsCgkgIHJlcG9ydGVkIGVycm9yIHdhcyBhZ3JlZWQgdG8gYmUgY29ycmVjdCBsb25nIHRpbWUgYWdvLAoJICBidXQgd2UgbWlzc2VkIHRvIGFkanVzdCB0aGUgbWVzc2FnZSByZXBvcnRlZCBieQoJICB0aGUgdGVzdGluZyBzY3JpcHQuCgpGcmkgRGVjICAyIDEzOjUxOjE0IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzL2RlY2ltYWwqIHJlc3VsdC9zY2hlbWFzL2J1ZzMyMjQxMSo6CgkgIEFkZGVkIG1pc3NpbmcgcmVncmVzc2lvbiB0ZXN0IHJlc3VsdHMgZm9yIHRoZSBsYXRlc3QgSURDCgkgIGFuZCB4czpkZWNpbWFsIGJ1Z3MuCgpXZWQgTm92IDMwIDEyOjIyOjIzIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRlc3Qvc2NoZW1hcy9kZWNpbWFsKiB0ZXN0L3NjaGVtYXMvYnVnMzIyNDExKjogQWRkZWQKCSAgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIGxhdGVzdCBJREMgYW5kIHhzOmRlY2ltYWwgYnVncy4KCldlZCBOb3YgMzAgMTE6NTc6MzUgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBidWJibGluZyBvZiBkdXBsaWNhdGUgSURDIG5vZGVzOiB0aGUKCSAgcGFyZW50J3MgbGlzdCBvZiBkdXBsaWNhdGVzIHdhcyBmaWxsZWQgd2l0aCBOVUxMcyBpbnN0ZWFkCgkgIG9mIHRoZSBub2RlcyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoaXMgbGVhZCB0byBhCgkgIHNlZ2ZhdWx0IHdoZW4gdGhlIGxpc3QncyBlbnRyaWVzIHdlcmUgYWNjZXNzZWQuCgpNb24gTm92IDI4IDE3OjI4OjUzIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBGaXhlZCBwYXJzaW5nIG9mIHhzOmRlY2ltYWwgdG8KCSAgYWxsb3cvZGVueSBzcGVjaWFsIGxleGljYWwgZm9ybXMuIEZpeGVkIHRoZSB0b3RhbERpZ2l0cwoJICBmb3IgdmFsdWVzIGluIHRoZSByYW5nZSAoeCA8IDEpICYmICAoeCA+IC0xKSAmJiAoeCAhPSAwKTsKCSAgRS5nICIwLjEyMyIgaGFzIG5vdyBhIHRvdGFsRGlnaXRzIG9mIDMgKHdhcyA0IHByZXZpb3VzbHkpLgoJICBBZGp1c3RlZCB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgZGVjaW1hbHMgZHVlIHRvIHRoaXMKCSAgY2hhbmdlLiBBcyBhIHNpZGUgZWZmZWN0IGNvbXBhcmlzb24gYWdhaW5zdCB6ZXJvZXMgd2FzCgkgIG9wdGltaXplZC4KCk1vbiBOb3YgMjggMTM6MjU6MTEgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBbiBhc3NpZ25tZW50IHRvIGEgbG9jYWwgdmFyaWFibGUsIHdoaWNoIHdhcwoJICB1c2VkIHRvIGFjY2VzcyB0aGUgSURDIG5vZGUgbGlzdCwgd2FzIG1pc3NpbmcgYWZ0ZXIgdGhlCgkgIHJlYWxsb2NhdGlvbiBvZiB0aGUgbGlzdCAocmVwb3J0ZWQgYnkgRmFicmljZSBHVVkKCSAgYnVnICMzMjI0MTEpLiBSZW5hbWVkIHRoZSBkZWZpbmUgRU5BQkxFX0lEQ19OT0RFX1RBQkxFUwoJICB0byBFTkFCTEVfSURDX05PREVfVEFCTEVTX1RFU1QgYW5kICpkaXNhYmxlZCogaXQsIHNpbmNlCgkgIGl0IGlzIHVzZWQgdG8gZm9yY2UgYnViYmxpbmcgb2YgSURDIG5vZGUgdGFibGVzIGV2ZW4KCSAgaWYgbm90IG5lY2Vzc2FyeTsgdGhpcyB3YXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGVzdAoJICBwdXJwb3NlcywgYnV0IEkgb2J2aW91c2x5IG1pc3NlZCB0byBkaXNhYmxlIGl0IChhbHRob3VnaAoJICBpdCBhcHBhcmVudGx5IGhlbHBlZCBmaW5kaW5nIHRoZSBidWcpLgoKV2VkIE5vdiAyMyAxNzozNDo1MiBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEluIHhtbFNjaGVtYUFzc2VtYmxlQnlYU0koKSB0aGUgcmV0dXJuIHZhbHVlCgkgIG9mIHhtbFNjaGVtYUdldE1ldGFBdHRySW5mbygpIHdhcyBub3QgYXNzaWduZWQgdG8gYW55dGhpbmc7CgkgIHRoaXMgY2F1c2VkIFhTSS1kcml2ZW4tZHluYW1pYyBzY2hlbWEgYWNxdWlzaXRpb24gdG8gZmFpbAoJICB3aXRoIEBub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uIChyZXBvcnRlZCBieSBKdWxpZW4gTGFteQoJICBvbiB0aGUgbWFpbGluZyBsaXN0KS4KClR1ZSBOb3YgMjIgMTg6MzE6MzQgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBhIGJ1ZyBpbiB4bWxTY2hlbWFGaW5kUmVkZWZDb21wSW5HcmFwaCgpCgkgIHdoaWNoIGNhdXNlZCB0aGUgc2VhcmNoIGZvciBjb21wb25lbnRzIHRvIHN0b3AgYXQgdGhlCgkgIGZpcnN0IGVuY291bnRlcmVkIGF0dHJpYnV0ZSBncm91cCBjb21wb25lbnQuCgkgIEZpeGVkIGVycm9yIHJlcG9ydCBpbiB4bWxTY2hlbWFDaGVja1NSQ1JlZGVmaW5lRmlyc3QoKTogdGhlCgkgIGRlc2lnbmF0aW9uIG9mIGEgbm90LWZvdW5kIGNvbXBvbmVudCB3YXMgbm90IHJlcG9ydGVkLgoKTW9uIE5vdiAyMSAxMjoyMzoyOCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogQWxiZXJ0IENoaW4gZm91bmQgYW5vdGhlciBzaWduZWQvdW5zaWduZWQgcHJvYmxlbQoJICBpbiB0aGUgZGF0ZSBhbmQgdGltZSBjb2RlIHJhaXNlZCBvbiBJUklYIDYuNQoKRnJpIE5vdiAxOCAxODoxMzozOCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOgoJICBBZGRlZCB4bWxTY2hlbWFTZXRQYXJzZXJTdHJ1Y3R1cmVkRXJyb3JzKCkgdG8gdGhlIEFQSS4KCSAgRml4ZWQgY2hhbm5lbGluZyBvZiBlcnJvciByZWxldmFudCBpbmZvcm1hdGlvbiB0bwoJICBzdWJzZXF1ZW50IHBhcnNlci92YWxpZGF0aW9uIGNvbnRleHRzLgoKVGh1IE5vdiAxNyAxNDoxMTo0MyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcmVtb3ZlZCB1bnJlYWNoYWJsZSBjb2RlIHBvaW50ZWQgb3V0IGJ5IAoJICBPbGVrc2FuZHIgS29ub25lbmtvLCBmaXhlcyBidWcgIzMyMTY5NQoKVGh1IE5vdiAxNyAwODoyNDozMSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdXNlIGN0eHQtPnN0YW5kYWxvbmUgPSAtMiB0byBpbmRpY2F0ZSB0aGF0IHRoZQoJICBYTUxEZWNsIHdhcyBwYXJzZWQgYnV0IG5vIHN0YW5kYWxvbmUgYXR0cmlidXRlIHdhcyBmb3VuZCwKCSAgc3VnZ2VzdGVkIGJ5IE1pY2hhZWwgRGF5IHRvIGRldGVjdCBpZiBhbiBYTUxEZWNsIHdhcyBmb3VuZC4KClR1ZSBOb3YgMTUgMDk6NDk6MjQgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiBIaXNhc2hpIEZ1amluYWthIHBvaW50ZWQgdGhhdCBlcnJvcnMgaW4gU2NoZW1hcyB0ZXN0cwoJICB3ZXJlIG5vdCBwcm9wZXJseSByZXBvcnRlZC4KClN1biBOb3YgMTMgMTM6NDI6NDEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBwYXRjaCBmcm9tIEdlZXJ0IEphbnNlbiB0byByZW1vdmUgeG1sQnVmZmVyQ2xvc2UoKQoJICB3aGljaCBpcyBub3QgbmVlZGVkLgoKRnJpIE5vdiAxMSAxMzo0ODo1MiBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IENoYW5nZWQgeG1sU2NoZW1hRm9ybWF0SURDS2V5U2VxdWVuY2UoKQoJICB0byB1c2UgeG1sU2NoZW1hR2V0Q2Fub25WYWx1ZVdodHNwRXh0KCkgaW4gb3JkZXIgdG8KCSAgY29ycmVjdGx5IHJlcG9ydCB2YWx1ZXMgZm9yIHhzOmFueVNpbXBsZVR5cGUuCgkqIHRlc3Qvc2NoZW1hcy9pZGMta2V5cmVmLWVycjEqCgkgIHJlc3VsdC9zY2hlbWFzL2lkYy1rZXlyZWYtZXJyMSo6IEFkZGVkIGEgdGVzdCBmb3IgdGhpcyBjaGFuZ2UuCgpXZWQgTm92ICA5IDEzOjA3OjI0IEVTVCAyMDA1IFJvYiBSaWNoYXJkcyA8cnJpY2hhcmRzQGN0aW5kdXN0cmllcy5uZXQ+CgoJKiB4bWxJTy5jIHhtbHdyaXRlci5jOiBmdW5jdGlvbiBjb25zb2xpZGF0aW9uIHdoZW4gd3JpdGluZyB0byB4bWxCdWZmZXIuCgkgIFJldHVybiBlcnJvciBjb25kaXRpb24gbm90IGxlbiBpZiB4bWx3cml0ZXIgZmFpbHMgd3JpdGluZyB0byBidWZmZXIuCgpXZWQgTm92ICA5IDA5OjU0OjU0IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmggaW5jbHVkZS9saWJ4bWwveG1sc2F2ZS5oOgoJICBhcHBsaWVkIHBhdGNoIGZyb20gR2VlcnQgSmFuc2VuIHRvIGltcGxlbWVudCB0aGUgc2F2ZSBmdW5jdGlvbiB0byAKCSAgYSB4bWxCdWZmZXIsIGFuZCBhIGJpdCBvZiBjbGVhbnVwLgoKTW9uIE5vdiAgNyAxNDo1ODozOSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IEZpeGVkIHRoZSB0eXBlIG9mIHRoZQoJICB0b3RhbERpZ2l0cyB2YWx1ZSB0byBiZSBwb3NpdGl2ZUludGVnZXIuCgkgIEZpeGVkIGNyYXNoIGluIGFuIGVycm9yIHJlcG9ydCBmdW5jdGlvbiB3aGVuIHdlIGdhdmUgaXQKCSAgdGhlIGRvY3VtZW50IG5vZGU7IG9ubHkgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzIGFyZQoJICBwcm9jZXNzZWQgbm93IChyZXBvcnRlZCBieSBSb2IgUmljaGFyZHMpLgoKVHVlIE5vdiAgMSAxNjoyMjoyOSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4IGJ1ZyAjMzE5ODk3LCBwcm9ibGVtIHdpdGggY291bnRlZCBhdG9tcwoJICB3aGVuIHRoZSB0cmFuc2l0aW9uIGl0c2VsZiBpcyBjb3VudGVkIHRvbwoJKiByZXN1bHQvcmVnZXhwL2hhcmQgdGVzdC9yZWdleHAvaGFyZDogYXVnbWVudGVkIHRoZSByZWdyZXNzaW9uCgkgIHRlc3RzIHdpdGggdGhlIHByb2JsZW0gZXhwb3NlZC4KClR1ZSBOb3YgIDEgMTE6NTQ6MzkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3cgaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgTWFyayBKdW5rZXIgdG8gZml4IGNvbXBpbGF0aW9uIHdpdGggTWluR1cKCkZyaSBPY3QgMjggMTg6MzY6MDggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC4zOiB0aW55IGZpeCBmcm9tIEFsYmVydCBDaGluCgkqIHJ1bnN1aXRlLmMgcnVudGVzdC5jIHRlc3RhcGkuYzogcG9ydGFiaWxpdHkgY2xlYW51cCBmb3IgYXJjaAoJICBuZWVkaW5nIHRyaW8gZm9yICpwcmludGYKCkZyaSBPY3QgMjggMTI6MjE6MzkgRURUIDIwMDUgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIHRyZWUuYzogYWRkIGFkZGl0aW9uYWwgY2hlY2tzIHRvIHByZXZlbnQgdHJlZSBjb3JydXB0aW9uLiBmaXggcHJvYmxlbSAKCSAgY29weWluZyBhdHRyaWJ1dGUgdXNpbmcgeG1sRG9jQ29weU5vZGUgZnJvbSBvbmUgZG9jdW1lbnQgdG8gYW5vdGhlci4KCkZyaSBPY3QgMjggMTc6NTg6MTMgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiB2bXMvY29uZmlnLnZtcyBtYWNvcy9zcmMvY29uZmlnLW1hYy5oOgoJICBjbGVhbnVwIGZyb20gQWxiZXJ0IENoaW4KCSogZG9jL01ha2VmaWxlLmFtOiBodG1sL2luZGV4LnNnbWwgZG9lc24ndCBleGlzdCBhbnltb3JlCgpGcmkgT2N0IDI4IDE2OjUzOjUxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jIHhtbG1vZHVsZS5jOiBtb3JlIHBvcnRhYmlsaXR5IHBhdGNoZXMgZnJvbSBBbGJlcnQgQ2hpbiBmb3IKCSAgSFAtVVggYW5kIEFJWAoKRnJpIE9jdCAyOCAxMDozNjoxMCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbW9kdWxlLmMgY29uZmlndXJlLmluOiBhcHBsaWVkIDIgcGF0Y2hlcyBmcm9tIEFsYmVydCBDaGluIGZvcgoJICBtb2R1bGUgcG9ydGFiaWxpdHkKCkZyaSBPY3QgMjggMTA6MjQ6MzkgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmM6IGZpeGluZyBhIHBvcnRhYmlsaXR5IHByb2JsZW0gb24gc29tZSBvbGQgVW5pY2VzIHdpdGgKCSAgcGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbgoKMjAwNS0xMC0yNyAgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGMxNG4uYyAgcmVzdWx0L2MxNG4vZXhjLXdpdGhvdXQtY29tbWVudHMvdGVzdC0yCgkgIHRlc3QvYzE0bi9leGMtd2l0aG91dC1jb21tZW50cy90ZXN0LTIueG1sCgkgIHRlc3QvYzE0bi9leGMtd2l0aG91dC1jb21tZW50cy90ZXN0LTIueHBhdGg6IGZpeGluZwoJICBidWcgaW4gZXhjLWMxNG4gbmFtZXNwYWNlIHZpc2liaWxpdHkgKyB0ZXN0IGNhc2UgKGJ1ZyAjMzE5MzY3KQoKVGh1IE9jdCAyNyAxNjoxMDozMSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weTogcmVtb3ZlIHdhcm5pbmdzIHRvIHN0ZG91dCBwYXRjaCBmcm9tIE5pYyBGZXJyaWVyCgpUaHUgT2N0IDI3IDEzOjU0OjUyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6IGF2b2lkIGZ1bmN0aW9uIHBhcmFtZXRlcnMgbmFtZXMgJ2xpc3QnCgkgIGFzIHRoaXMgc2VlbXMgdG8gZ2l2ZSB0cm91YmxlcyB3aXRoIFZDNiBhbmQgc3RsIGFzIHJlcG9ydGVkIGJ5CgkgIFNhbXVlbCBEaWF6IEdhcmNpYS4KCldlZCBPY3QgMjYgMTA6NTk6MjEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXggYSBwcm9ibGVtIGluIHNvbWUgZXJyb3IgY2FzZSBvbiBTb2xhcmlzCgkgIHdoZW4gcGFzc2VkIGEgTlVMTCBmaWxlbmFtZSwgcG9pbnRlZCBieSBBbGJlcnQgQ2hpbi4KClR1ZSBPY3QgMjUgMTQ6MzQ6NTggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogc2NyaXB0IEhUTUwgcGFyc2VyIGVycm9yIGZpeCwgY29ycmVjdHMgYnVnICMzMTk3MTUKCSogcmVzdWx0L0hUTUwvNTM4NjcqIHRlc3QvSFRNTC81Mzg2Ny5odG1sOiBhZGRlZCB0ZXN0IGZyb20gTWljaGFlbCBEYXkKCSAgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUgCgpUdWUgT2N0IDI1IDE0OjIxOjExIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHR5cG8gZml4IGZyb20gTWljaGFlbCBEYXkKCk1vbiBPY3QgMjQgMjA6MTY6MjMgRURUIDIwMDUgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIHRyZWUuYzogZml4IGlzc3VlIGFkZGluZyBub24tbmFtZXNwYWNlZCBhdHRyaWJ1dGVzIGluIHhtbEFkZENoaWxkKCksIAoJICB4bWxBZGROZXh0U2libGluZygpIGFuZCB4bWxBZGRQcmV2U2libGluZygpIChidWcgIzMxOTEwOCkgLSBwYXJ0IDEuCgpTYXQgT2N0IDIyIDEwOjAwOjQxIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGZpeGVkIHNlY29uZCBzcG90IHdoZXJlIENSTEYgc3BsaXQgYmV0d2VlbiBjaHVua3MKCSAgY291bGQgY2F1c2UgdHJvdWJsZSAoYnVnICMzMTkyNzkpCgkqIGdlbnRlc3QucHksIHRlc3RhcGkuYzogZml4ZWQgdHdvIHByb2JsZW1zIGludm9sdmVkIHdpdGgKCSAgLS13aXRoLW1pbmltdW0gY29tcGlsYXRpb24gKGNvbXBpbGF0aW9uIGVycm9ycyB3aXRoIHNjaGVtYXRyb24KCSAgYW5kIGZvcm1hbCBleHByZXNzaW9ucyB0ZXN0cykKCkZyaSBPY3QgMjEgMTA6NTA6MTQgRURUIDIwMDUgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIHhtbHNhdmUuYzogcHJldmVudCBvdXRwdXQgb2YgZnJhZ21lbnQgdGFncyB3aGVuIHNlcmlhbGl6aW5nIFhIVE1MLgoKV2VkIE9jdCAxOSAxNjo1Mzo0NyBCU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogY29tbWl0aW5nIGEgc29tZSBmaXhlcyBhbmQgZGVidWcgZG9uZSB5ZXN0ZXJkYXkgaW4KCSAgdGhlIExvbmRvbiBhaXJwb3J0LgoKVGh1IE9jdCAyMCAxMjo1NDoyMyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBSZW1vdmVkIGNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IHBhcnNlciBjb250ZXh0CgkgIGR1cmluZyB2YWxpZGF0aW9uIHdoZW4gcHJvY2Vzc2luZyB4c2k6dHlwZTsgdGhpcyBwcmV2aW91c2x5CgkgIGFkZGVkIGEgc3RyaW5nIHRvIHRoZSBkaWN0IG9mIHRoZSBzY2hlbWEgLSB0byBhc3N1cmUgdGhyZWFkCgkgIHNhZmV0eSwgd2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgYSBnaXZlbiBzY2hlbWEgZHVyaW5nCgkgIHZhbGlkYXRpb24uCgpUaHUgT2N0IDIwIDE3OjA1OjI5IEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sd3JpdGVyLmM6IGZpeGVkIHByb2JsZW0gaW4geG1sVGV4dFdyaXRlclZTcHJpbnRmIGNhdXNlZCBieQoJICBtaXN1c2Ugb2YgdnNucHJpbnRmCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnLmguaW46IGFkZGVkIGEgY29uZmlndXJhdGlvbiBjaGVjayBmb3IKCSAgdmFfY29weSBhbmQgYWRkZWQgYSBkZWZpbmUgZm9yIFZBX0NPUFkgZm9yIHhtbHdyaXRlci5jIGZpeAoJKiBwYXJzZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIENSTEYgc3BsaXQgYmV0d2VlbiBjaHVua3MgKGJ1ZwoJICAjMzE5Mjc5KSAoZml4IHByb3ZpZGVkIGJ5IEJyaW9uIFZpYmJlcikKCldlZCBPY3QgMTkgMTg6NDk6NTIgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaW4KCSAgeG1sU2NoZW1hQ2hlY2tDU2VsZWN0b3JYUGF0aCgpIHdoZW4gYW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJzLgoJICBGaXhlZCBzZXR0aW5nIG9mIGN0eHQtPmVyciB0byB0aGUgZ2l2ZW4gZXJyb3IgY29kZSBpbgoJICB0aGUgcGFyc2luZyBlcnJvciBmdW5jdGlvbnMuCgkqIHBhdHRlcm4uYzogQWRkZWQgaW50ZXJuYWwgeG1sQ29tcGlsZUlEQ1hQYXRoUGF0aCgpIGFzIGEKCSAgc3RhcnRpbmcgcG9pbnQgZm9yIElEQyBYUGF0aCBjb21waWxhdGlvbjsgdGhpcyBhbmQgc29tZSBvdGhlcgoJICB0aW55IGNoYW5nZXMgZml4ZXMgaXNzdWVzIHJlZ2FyZGluZyB3aGl0ZXNwYWNlIGluIHRoZQoJICBleHByZXNzaW9ucyBhbmQgSURDIHNlbGVjdG9yL2ZpZWxkIHJlbGV2YW50IHJlc3RyaWN0aW9ucyBvZgoJICB0aGUgc3Vic2V0IG9mIFhQYXRoLiBGaXhlZCBhIG1pc3NpbmcgYmxvY2tpbmcgb2YgYXR0cmlidXRlcwoJICBpbiB4bWxTdHJlYW1QdXNoSW50ZXJuYWwoKS4KCk1vbiBPY3QgMTcgMTU6MDY6MDUgRURUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiByZW1vdmVkIHRoZSBlcnJvciBtZXNzYWdlCgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzLmM6IHJlbW92ZWQgMiBpbnN0YWJpbGl0eSB3YXJuaW5ncyBmcm9tIGZ1bmN0aW9uCgkgIGRvY3VtZW50YXRpb24KCSogaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBjaGFuZ2VkIHdhcm5pbmcgYWJvdXQgQVBJIHN0YWJpbGl0eQoJKiB4bWxyZWdleHAuYzogdHJ5aW5nIHRvIGltcHJvdmUgcnVudGltZSBleGVjdXRpb24gb2Ygbm9uLWRldGVybWluaXN0aWMKCSAgcmVnZXhwcyBhbmQgYXV0b21hdGEuIE5vdCBmdWxseSBmaW5pc2hlZCBidXQgc2hvdWxkIGJlIHdheSBiZXR0ZXIuCgpNb24gT2N0IDE3IDE2OjEyOjAyIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4KCSAgeG1sU2NoZW1hQ29udGVudE1vZGVsRHVtcCgpLiBBZGRlZCBvdXRwdXQgb2YgbG9jYWwgdHlwZXMKCSAgaW4geG1sU2NoZW1hRWxlbWVudER1bXAoKS4gVGlueSBjb3NtZXRpY2FsIGNoYW5nZXMgdG8gdGhlCgkgIGR1bXAgb3V0cHV0LgoKTW9uIE9jdCAxNyAxNDoyOTowOCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jIHBhdHRlcm4uYzogU2lsZW5jZWQgaW50ZWwgY29tcGlsZXIgd2FybmluZ3MgKHJlcG9ydGVkCgkgIGJ5IEtqYXJ0YW4gTWFyYWFzLCBidWcgIzMxODUxNykuCgkqIHhtbHNjaGVtYXMuYzogVGhlIGFib3ZlIGNoYW5nZXMgaW4gcGF0dGVybi5jIHJldmVhbGVkIGFuCgkgIGluY29uc2lzdGVuY3kgd3J0IElEQ3M6IHdlIG5vdyBfb25seV8gcG9wIFhQYXRoIHN0YXRlcywgaWYKCSAgd2UgcmVhbGx5IHB1c2hlZCB0aGVtIGJlZm9yZWhhbmQ7IHRoaXMgd2FzIHByZXZpb3VzbHkgbm90CgkgIGNoZWNrZWQgZm9yIHRoZSBjYXNlIHdoZW4gd2UgZGlzY292ZXIgYW4gZWxlbWVudCBub2RlIHRvIGJlCgkgIGludmFsaWQgd3J0IHRoZSBjb250ZW50IG1vZGVsLgoJICBGaXhlZCBzZWdmYXVsdCBpbiB4bWxTY2hlbWFHZXRFZmZlY3RpdmVWYWx1ZUNvbnN0cmFpbnQoKS4KCkZyaSBPY3QgMTQgMTY6NDA6MTggQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzLyouZXJyOiBBZGFwdGVkIHJlZ3Jlc3Npb24gdGVzdCByZXN1bHRzLgoKRnJpIE9jdCAxNCAxNjoyMToyMiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoJCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgc29tZSBpZGVudGl0eS1jb25zdHJhaW50IGlzc3VlczoKCSAgUmVzdHJ1Y3R1cmVkIElEQyBub2RlLXRhYmxlcwoJICBBbGxvd2VkIElEQ3MgdG8gcmVzb2x2ZSBhbHNvIHRvIG5vZGVzIG9mIGNvbXBsZXggdHlwZSB3aXRoCgkgIHNpbXBsZSBjb250ZW50LgoJICBBZGRlZCBjaGVjayBmb3Iga2V5cmVmcyB3aXRoIHJlZmVyZW5jZXMgdG8ga2V5cmVmcy4KCSAgSURDIHRhcmdldC1ub2RlcyB3ZXJlIGludGVyZmVycmluZyB3aXRoIElEQyBub2RlLXRhYmxlcywKCSAgc2luY2UgdGhleSB1c2VkIG9uZSBsaXN0IG9mIGVudHJpZXMgb25seS4gSSBzZXBhcmF0ZWQgdGhpcwoJICBvbmUgYmlnIGxpc3QgaW50byAzIGxpc3RzOiAxIGZvciBJREMgbm9kZS10YWJsZSBlbnRyaWVzLAoJICAxIGZvciBfZHVwbGljYXRlc18gb2YgSURDIG5vZGUtdGFibGUgZW50cmllcyBhbmQgMSBmb3IKCSAgSURDIHRhcmdldC1ub2Rlcy4gTW9yZSBjb2RlLCBidXQgY2xlYW5lciBhbmQgaXQgd29ya3MgYXQgbGFzdC4KCSAgS2V5cmVmcyB3aWxsIGZhaWwgdG8gcmVzb2x2ZSB0byBkdXBsaWNhdGUga2V5L3VuaXF1ZSBlbnRyaWVzLgoJICBJIHRob3VnaHQgdGhpcyB3YXMgYWxyZWFkeSB3b3JraW5nIHRoaXMgd2F5LCBidXQgaXQgZGlkbid0LgoJICBUaGUgd29yZGluZyBvZiB0aGUgZGVmaW5pdGlvbiBmb3IgW25vZGUgdGFibGVdIGluIHRoZSBzcGVjCgkgIGNhbiBsZWFkIHRvIGEgc2NlbmFyaW8sIHdoZXJlIGtleXJlZnMgcmVzb2x2ZSBwZXJmZWN0bHksIGV2ZW4KCSAgaWYgdGhlIHJlbGV2YW50IGtleS1zZXF1ZW5jZXMgb2YgdGhlIHJlZmVyZW5jZWQga2V5L3VuaXF1ZSBoYXZlCgkgIGR1cGxpY2F0ZXMgaW4gdGhlIHN1YnRyZWUuIEN1cnJlbnRseSBvbmx5IFNheG9uIDguNS4xIGlzCgkgIGRpc3NhbGxvd2luZyByZXNvbHV0aW9uIHRvIGR1cGxpY2F0ZSBlbnRyaWVzIGNvcnJlY3RseSAtIHdlCgkgIHdpbGwgZm9sbG93IFNheG9uIGhlcmUuCgkgIFJlbW92ZWQgc29tZSBpbnRlbCBjb21waWxlciB3YXJuaW5ncyAocmVwb3J0ZWQgYnkKCSAgS2phcnRhbiBNYXJhYXMsIGJ1ZyAjMzE4NTE3KS4KCSogcGF0dGVybi5jOiBGaXhlZCBhbiBJREMtWFBhdGggcHJvYmxlbSB3aGVuIHJlc29sdmluZyB0bwoJICBhdHRyaWJ1dGVzLgkgIAoKTW9uIE9jdCAxNCAwMToxNToxNCBDRVNUIDIwMDUgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCSogbmFub2h0dHAuYyBpbmNsdWRlL3dzb2NrY29tcGF0Lmg6IGFwcGxpZWQgcGF0Y2ggZnJvbSBLb2xqYSBOb3dhayAKCSAgdG8gdXNlIGdldGFkZHJpbmZvKCkgaWYgc3VwcG9ydGVkIGluIFdpbmRvd3MgYnVpbGQgKGJ1ZyMgMzE3NDMxKS4KCk1vbiBPY3QgMTAgMTU6MzM6NDggQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzLyo6IEFkYXB0ZWQgcmVncmVzc2lvbiB0ZXN0IHJlc3VsdHMuCgpNb24gT2N0IDEwIDE1OjEyOjQzIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IEluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9yCgkgIHJlZGVmaW5pdGlvbnM7IHRoaXMgc3RpbGwgbWlzc2VzIGNoZWNrcyBmb3IgcmVzdHJpY3Rpb25zCgkgIG9mIHRoZSBjb250ZW50IG1vZGVsIG9mIGNvbXBsZXggdHlwZXMuCgkgIEZpeGVkIGRlZmF1bHQvZml4ZWQgdmFsdWVzIGZvciBhdHRyaWJ1dGVzIChsb29rcyBsaWtlIHRoZXkKCSAgZGlkIG5vdCB3b3JrIGluIHRoZSBsYXN0ICByZWxlYXNlcykuCgkgIENvbXBsZXRlZCBjb25zdHJhaW50cyBmb3IgYXR0cmlidXRlIHVzZXMuCgkgIFNlcGVyYXRlZCBhdHRyaWJ1dGUgZGVyaXZhdGlvbiBmcm9tIGF0dHJpYnV0ZSBjb25zdHJhaW50cy4KCSAgQ29tcGxldGVkIGNvbnN0cmFpbnRzIGZvciBhdHRyaWJ1dGUgZ3JvdXAgZGVmaW5pdGlvbnMuCgkgIERpc2FsbG93aW5nIDxpbXBvcnQ+cyBvZiBzY2hlbWFzIGluIG5vIHRhcmdldCBuYW1lc3BhY2UgaWYgdGhlCgkgIGltcG9ydGluZyBzY2hlbWEgaXMgYSBjaGFtZWxlb24gc2NoZW1hLiBUaGlzIGNvbnRyYWRpY3RzCgkgIHRoZSB3YXkgU2F4b24sIFhlcmNlcy1KLCBYU1YgYW5kIElCTSdzIFNRQyB3b3JrcywgYnV0IHRoZQoJICBXM0MgWE1MIFNjaGVtYSBXRywgdGhpbmtzIGl0IGlzIGNvcnJlY3QgdG8gZGlzc2Fsb3cgc3VjaAoJICBpbXBvcnRzLgoJICBBZGRlZCBjb3MtYWxsLWxpbWl0ZWQgY29uc3RyYWludHMuCgkgIFJlc3RydWN0dXJlZCByZWZlcmVuY2UgcmVzb2x1dGlvbiB0byBtb2RlbCBncm91cHMgYW5kIGVsZW1lbnQKCSAgZGVjbGFyYXRpb25zLgoJICBNaXNjIGNsZWFudXAuCgpGcmkgT2N0ICA3IDA0OjM0OjEyIENFU1QgMjAwNSBSb2IgUmljaGFyZHMgPHJyaWNoYXJkc0BjdGluZHVzdHJpZXMubmV0PgoKCSogc2NoZW1hdHJvbi5jIHhtbHJlZ2V4cC5jOiByZW1vdmUgd2FybmluZ3MgdW5kZXIgV2luZG93cy4KCldlZCBTZXAgMjggMjM6NDI6MTQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFzc2ltbyBNb3JhcmEgZml4aW5nIGJ1ZyAjMzE3NDQ3CgkgIGFib3V0IHJpc2sgb2YgaW52YWxpZCB3cml0ZSBpbiB4bWxTdHJpbmdMZW5EZWNvZGVFbnRpdGllcwoKVHVlIFNlcCAyNyAxMToyMDo1NyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYzogQWRyaWFuIE1vdWF0IHBvaW50ZWQgb3V0IHJlZHVuZGFuY2llcyBpbiB4bWxSZXBvcnRFcnJvcigpCgpNb24gU2VwIDI2IDE5OjE4OjI0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogc2VlbXMgYSB0ZXN0IHRvIGF2b2lkIGR1cGxpY2F0ZSB0cmFuc2l0aW9uIGlzIAoJICByZWFsbHkgbmVlZGVkIGF0IGFsbCB0aW1lcy4gTHVrYSBQb3IgZ2F2ZSBhbiBleGFtcGxlIGhpdHRpbmcKCSAgdGhpcy4gQ2hhbmdlZCBiYWNrIHRoZSBpbnRlcm5hbCBBUEkuCgpUaHUgU2VwIDIyIDEzOjE0OjA3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4aW5nIGxlYWsgaW4geG1sVGV4dFJlYWRlclJlYWRTdHJpbmcoKSAjMzE2OTI0CgpUaHUgU2VwIDE1IDE2OjEyOjQ0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogbW9yZSBmaXhlcyB0byB0aGUgYmVoYXZpb3VyIG9mIHhtbEJ1aWxkUmVsYXRpdmVVUkkKClRodSBTZXAgMTUgMTU6MDg6MjEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBkZXRlY3QgY29tYmluYXRvcnkgZXhwbG9zaW9uIGFuZCByZXR1cm4gd2l0aAoJICBhIHJ1bnRpbWUgZXJyb3IgaW4gdGhvc2UgY2FzZSwgYy5mLiAjMzE2MzM4IHRob3VnaCBtYXliZSB3ZQoJICBzaG91bGQgbm90IHNlZSBzdWNoIGFuIGV4cGxvc2lvbiB3aXRoIHRoYXQgc3BlY2lmaWMgcmVnZXhwLAoJICBtb3JlIGNoZWNraW5nIG5lZWRzIHRvIGJlIGRvbmUuCgpXZWQgU2VwIDE0IDE5OjUyOjE4IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IEFkZGVkIHNvbWUgY29tbWVudHMgZm9yIHRoZQoJICBzdHJ1Y3QgZmllbGRzLgoKV2VkIFNlcCAxNCAxMzoyNDoyNyBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHVyaS5jOiBmaXhlZCBwcm9ibGVtIHdoZW4geG1sQnVpbGRSZWxhdGl2ZVVSSSB3YXMgZ2l2ZW4gYQoJICBibGFuayBwYXRoIChidWcgMzE2MjI0KQoKTW9uIFNlcCAxMiAyMzo0MTo0MCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBjb25maWd1cmUuaW4gZG9jLy8qOiByZWxlYXNlIG9mIDIuNi4yMiB1cGRhdGVkIGRvYyBhbmQKCSAgcmVidWlsZC4KCSogeG1sc2F2ZS5jIGluY2x1ZGUvbGlieG1sL3htbHNhdmUuaDogYWRkZWQgWE1MX1NBVkVfTk9fWEhUTUwKCSAgeG1sU2F2ZU9wdGlvbgoJKiB4bWxzY2hlbWFzLmM6IG1pbm9yIGNsZWFudXBzCgpNb24gU2VwIDEyIDIxOjQyOjQ3IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgkKCSogdGVzdC9zY2hlbWFzL2ltcG9ydDFfMC54c2Q6IEFuZCBhZGFwdGluZyBhbm90aGVyIG9uZS4KCk1vbiBTZXAgMTIgMjE6Mjk6MzUgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzL2Rlcml2YXRpb24tb2stZXh0ZW5zaW9uXzBfMDogQWRhcHRlZCByZXN1bHQuCgpNb24gU2VwIDEyIDIxOjIwOjQxIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiByZXN1bHQvc2NoZW1hcy9hbGxzZ18wXzMuZXJyIHJlc3VsdC9zY2hlbWFzL2FsbHNnXzBfNC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvY2hhbmdlbG9nMDkzXzFfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvZGVyaXZhdGlvbi1vay1leHRlbnNpb25fMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9pbXBvcnQxXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvZGVyaXZhdGlvbi1vay1yZXN0cmljdGlvbi0yLTEtMV8wXzAuZXJyOgoJICBBZGFwdGVkIHJlZ3Jlc3Npb24gcmVzdWx0cy4KCk1vbiBTZXAgMTIgMjE6MDA6NTMgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogQ29tcGxldGlvbiBvZiB0aGUgc2NoZW1hIGdyYXBoLgoJICBDZW50cmFsaXNhdGlvbiwgbW9yZSByb2J1c3RuZXNzIG9mIHRoZSBzY2hlbWEgZG9jdW1lbnQKCSAgYXF1aXNpdGlvbiBzdG9yeS4gQ2VudHJhbGlzZWQgYW5kIHJlc3RydWN0dXJlZCBjb21wb25lbnQgZml4dXAuCgkgIEZpeGVkIGF0dHJpYnV0ZSBkZXJpdmF0aW9uIHdoZW4gJ3Byb2hpYml0aW5nJyBhdHRyaWJ1dGUgdXNlcy4KCSAgQWRkZWQgd2FybmluZ3M6IHdoZW4gc2NoZW1hIGRvY3VtZW50cyBjYW5ub3QgYmUgbG9jYWxpemVkCgkgIGR1cmluZyBpbXBvcnRzOyB3aGVuIHdlIGdldCBkdXBsaWNhdGUgYW5kIHBvaW50bGVzcyBhdHRyaWJ1dGUKCSAgcHJvaGliaXRpb25zLiBDaGFuZ2VkIGVycm9yIHJlcG9ydHMgZm9yIElEQ3MgdG8gcmVwb3J0CgkgIHRoZSByZWxldmFudCBJREMgZGVzaWduYXRpb24gYXMgd2VsbCAocmVxdWVzdGVkIGJ5IEdVWSBGYWJyaWNlKS4KCSAgTWlzYyBjb2RlLWNsZWFudXAuCgpNb24gU2VwIDEyIDE2OjAyOjEyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IGFwcGxpZWQgc2Vjb25kIHBhdGNoIGZyb20gRGF2aWQgTWFkb3JlIHRvIGJlIGxlc3MgaW50cnVzaXZlCgkgIHdoZW4gaGFuZGxpbmcgc2NyaXB0cyBhbmQgc3R5bGUgZWxlbWVudHMgaW4gWEhUTUwxIHNob3VsZCBmaXggIzMxNjA0MQoJKiB0ZXN0L3hodG1sMSByZXN1bHQvL3hodG1sMVwqOiB1cGRhdGVkIHRoZSB0ZXN0IGFjY29yZGluZ2x5CgpNb24gU2VwIDEyIDE1OjA5OjA5IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBkb2MvZGV2aGVscC8qOiBmaW5pc2hlZCB0aGUgaW50ZWdyYXRpb24gd2l0aAoJICBkZXZoZWxwLCBjb21wbGV0aW5nIHRoZSBpbmRleCBhbmQgaW5zZXJ0ZWQgaW50byB0aGUgZ3RrLWRvYwoJICBkYXRhYmFzZSBhdCAibWFrZSBpbnN0YWxsIiBzdGFnZQoKTW9uIFNlcCAxMiAxNDoxNDoxMiBDRVNUIDIwMDUgUm9iIFJpY2hhcmRzIDxycmljaGFyZHNAY3RpbmR1c3RyaWVzLm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHNhdmUuaCB4bWxzYXZlLmM6IGFkZCBYTUxfU0FWRV9OT19FTVBUWSBzYXZlIG9wdGlvbgoJICBhbmQgdXNlIG9wdGlvbiBmcm9tIHhtbFNhdmVDdHh0UHRyIHJhdGhlciB0aGFuIGdsb2JhbCBkdXJpbmcgb3V0cHV0LgoJKiB4bWxzYXZlLmM6IGZpeCBzb21lIG91dHB1dCBmb3JtYXR0aW5nIGZvciBtZXRhIGVsZW1lbnQgdW5kZXIgWEhUTUwuCgpNb24gU2VwIDEyIDExOjEyOjAzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYyB4bWxsaW50LmM6IGRhbW4gWE1MX0ZFQVRVUkVfVU5JQ09ERQoJICBjbGFzaGVzIHdpdGggRXhwYXQgaGVhZGVycyByZW5hbWUgdG8gWE1MX1dJVEhfIHRvIGZpeCBidWcgIzMxNjA1My4gCgkqIGRvYy9NYWtlZmlsZS5hbTogYnVpbGQgZGV2aGVscCBiZWZvcmUgdGhlIGV4YW1wbGVzLgoJKiBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIEFQSQoKTW9uIFNlcCAxMiAwMjowMzoxMiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBmaXggYnVnICMzMTYwMzQsIHdoZXJlIHhtbEVsZW1EdW1wKCkgY2FuIGNyYXNoIGlmIAoJICBnaXZlbiBhIGRvY3VtZW50IHBvaW50ZXIgaW5zdGVhZCBvZiBhbiBlbGVtZW50CgpNb24gU2VwIDEyIDAxOjI2OjE2IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZGV2aGVscC9kZXZoZWxwLnhzbDogaW1wcm92ZW1lbnRzIG9uIHRoZSBodG1sIGdlbmVyYXRpb24sCgkgIHNob3VsZCBiZSBjb21wbGV0ZSB3aXRoIG5hdmlnYXRpb24sIHdoYXQgaXMgbGVmdCBkb25lIGlzIGdsdWVpbmcKCk1vbiBTZXAgMTIgMDA6MDM6MjcgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvTWFrZWZpbGUuYW0gZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwKCSAgZG9jL2RldmhlbHAvKjogc3RhcnRlZCB3b3JrIG5lZWRlZCB0byBnZW5lcmF0ZSBkZXZoZWxwIGNvbnRlbnQsCgkgIG5vdCB0b28gaGFyZCBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgZm9ybWF0IGFuZCBleHRyYWN0b3IuCgpGcmkgU2VwICA5IDEyOjU2OjE5IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZXMgYnVnICMzMTU2MTcgd2hlbiB1c2luZyBwdXNoIENEQVRBIGluIHNvbWUgY2FzZXMuCgpUaHUgU2VwICA4IDIzOjM5OjQxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGNvbXBpbGUgd2l0aG91dCBzY2hlbWF0cm9uCgpXZWQgU2VwICA3IDAwOjE2OjI3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBwYXRjaCBmcm9tIE9sZWcgUGFyYXNjaGVua28gdG8gZml4IHhtbERlYnVnRHVtcE5vZGUoKQoJICB3aGVuIGhhbmRsZWQgYSBuYW1lc3BhY2Ugbm9kZS4KClN1biBTZXAgIDQgMjM6MzY6NDUgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZWxmZ2NjaGFjay5oIHRlc3RhcGkuYyBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyBhbmQgcmVidWlsZAoJICByZWxlYXNpbmcgMi42LjIxCgkqIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaCB0aHJlYWRzLmM6IHJlbW92ZWQgeG1sSXNUaHJlYWRzRW5hYmxlZCgpCgkqIHRocmVhZHMuYyBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmggeG1sbGludC5jOiBhZGRlZCB0aGUgbW9yZQoJICBnZW5lcmljIHhtbEhhc0ZlYXR1cmUoKSBhcyBzdWdnZXN0ZWQgYnkgQmpvcm4gUmVlc2UsIHhtbGxpbnQgdXNlcyBpdC4KClN1biBTZXAgIDQgMjI6NDU6NDkgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKiBjb25maWd1cmUuaW46IHByZXBhcmUgZm9yIHJlbGVhc2UKCSogeHBhdGguYzogd29yayBmb3IgIzMwMzI4OSwgZml4IGEgZm9ybWF0dGluZyBidWcgZm9yIE1JTl9JTlQKClN1biBTZXAgIDQgMTU6NDg6NTcgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogcmVhbCBmaXggZm9yICMzMTQ4ODEgYW5kICMzMTQ3NTkgaXMgd2FzIGEgYml0IG1vcmUgY29tcGxleAoJICB0aGFuIGluaXRpYWxseSBleHBlY3RlZCBhcyBjdHh0LT5lcnJvciA9PSBOVUxMIGhhZCBiZWhhdmlvdXIgc2lkZQoJICBlZmZlY3RzIGF0IHRoZSBjb21waWxhdGlvbiBsZXZlbCBpdHNlbGYuCgpTdW4gU2VwICA0IDE0OjAxOjAwIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmg6IGZpeGluZyB5ZXQgYW5vdGhlcgoJICBwYXR0ZXJuIGluZHVjZWQgWFBhdGggYnVnICMzMTQyODIKCSogcmVsYXhuZy5jOiByZXZlcnRlZCBiYWNrIGxhc3QgY2hhbmdlIGl0IHdhcyBzZXJpb3VzbHkgYnJva2VuCgpTYXQgU2VwICAzIDE2OjUxOjU1IENFU1QgMjAwNSBSb2IgUmljaGFyZHMgPHJyaWNoYXJkc0BjdGluZHVzdHJpZXMubmV0PgoKCSogeG1sc2F2ZS5jOiBjaGVjayBmb3IgTlVMTCB0byBwcmV2ZW50IGNyYXNoIHdpdGggbWV0YSBlbGVtZW50cwoKU2F0IFNlcCAgMyAxNjoyNjo1NSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBzdHJ1Y3R1cmVkIGVycm9yIHJlcG9ydGluZyBwcm9ibGVtIHdpdGggUmVsYXgtTkcKCSAgc2hvdWxkIGZpeCAjMzE0ODgxIGFuZCAjMzE0NzU5CgpTYXQgU2VwICAzIDE1OjQyOjI5IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmM6IGZpeGVzIGEgcG9ydGFiaWxpdHkgcHJvYmxlbSByYWlzZWQgYnkgQzM3MCBvbiBaL09TCgpTYXQgU2VwICAzIDE1OjI2OjMxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgdHJlZS5jIHZhbGlkLmM6IGZpeGluZyBhIG51bWJlciBvZiBpc3N1ZXMgcmFpc2VkIGJ5IHhtbDppZAoJICBidXQgbW9yZSBnZW5lcmFsbHkgcmVsYXRlZCB0byBhdHRyaWJ1dGVzIGFuZCBJRCBoYW5kbGluZywgZml4ZXMKCSAgIzMxNDM1OCBhbW9uZyBvdGhlciB0aGluZ3MKCkZyaSBTZXAgIDIgMTQ6MjY6NDMgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgcGFyc2VySW50ZXJuYWxzLmM6IGF2b2lkIHBhc3NpbmcgYSBjaGFyW10gYXMgc25wcmludGYKCSAgZmlyc3QgYXJndW1lbnQuCgkqIHRocmVhZHMuYyBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmg6IGltcGxlbWVudGVkIHhtbElzVGhyZWFkc0VuYWJsZWQoKQoJICBiYXNlZCBvbiBBbmRyZXcgVy4gTm9zZW5rbyBpZGVhLgoJKiBkb2MvKiBlbGZnY2NoYWNrLmg6IHJlZ2VuZXJhdGVkIHRoZSBBUEkKClRodSBTZXAgIDEgMTQ6NDQ6NDIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogdGhlIHVzZSBvZiBBTV9QQVRIX1BZVEhPTiBpcyBub3QgcG9ydGFibGUgZW5vdWdoCgkgIHJldmVydGluZyBiYWNrIHRvIEFNX1BBVEhfUFJPRwoKVGh1IFNlcCAgMSAxMTo0MjozOSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBBcHBsaWVkIHRoZSBsYXN0IHBhdGNoIGZyb20gR2FyeSBDb2FkeSBmb3IgIzMwNDYzNwoJICBjaGFuZ2luZyB0aGUgYmVoYXZpb3VyIHdoZW4gdGV4dCBub2RlcyBhcmUgZm91bmQgaW4gYm9keQoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgdGhlIG91dHB1dCBvZiBzb21lIHRlc3RzCgpUaHUgU2VwICAxIDExOjIyOjM3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZG93bmxvYWRzLmh0bWwgZG9jL3htbC5odG1sOiBhZGRpbmcgcmVmZXJlbmNlIHRvIEJ1bGwgQUlYIHJwbXMKCSAgYy5mLiAjMTYwNTk4CgpXZWQgQXVnIDMxIDExOjM5OjAyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWwyLWNvbmZpZy5pbjogcmVtb3ZlZCB0aGUgb2Jzb2xldGUgLS1saWJ0b29sLWxpYnMgb3B0aW9uLCBjLmYuCgkgIGJ1ZyAjMzE0ODUzCgpGcmkgQXVnIDI2IDE3OjMzOjI2IENFU1QgMjAwNSBSb2IgUmljaGFyZHMgPHJyaWNoYXJkc0BjdGluZHVzdHJpZXMubmV0PgoKCSogeG1sc2F2ZS5jOiBtb3ZlIGhhbmRsaW5nIG9mIG1ldGEgZWxlbWVudCBmb3IgaHR0cC1lcXVpdiBpbiBYSFRNTCBkb2NzIAoJICB0byBzZXJpYWxpemF0aW9uIGFuZCBubyBsb25nZXIgbW9kaWZ5IGludGVybmFsIHRyZWUuCgpGcmkgQXVnIDI2IDAwOjUxOjU4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogdGhlIHByb2ZpbGluZyB1c3VhbGx5IGRvbid0IHdvcmssIGRpc2FibGVkCgkqIGRvYy8qOiByZWJ1aWx0CgpUaHUgQXVnIDI1IDIzOjQ3OjU1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHRyeWluZyB0byBmaXggdGhlIGZpcnN0IHBhcnQgb2YgIzMxMDAzMyBieQoJICBkZXRlY3RpbmcgZ2NjIDw9IDMuMgoKVGh1IEF1ZyAyNSAyMjoxMzozNyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYzogZml4ZWQgYnVnICMzMTAwMzMsIHRoZSBVUkkgZXh0cmFjdGlvbiBjb2RlIGdpdmVuIGEKCSAgbm9kZSBpcyBhIGJpdCB0d2lzdGVkIGFuZCBicm9rZSBpbiB0aGUgbGFzdCBtb250aHMuCgpUaHUgQXVnIDI1IDE2OjE4OjE1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIHJlc3VsdC9YUGF0aC94cHRyL3N0cnJhbmdlMjogdW5pbml0aWFsaXplZCBmaWVsZCBhbmQKCSAgZml4IG9uIHRlc3QuCgpUaHUgQXVnIDI1IDE2OjAzOjA1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBjaGFuZ2UgdmVyYm9zaXR5IGRlcGVuZGluZyBvbiBBUEkKCSogcmVzdWx0L1hQYXRoL3Rlc3RzLyogcmVzdWx0L1hQYXRoL3hwdHIvKiByZXN1bHQveG1saWQvKjogZ2V0IGJhY2sKCSAgdG8gcHJldmlvdXMgb3V0cHV0cwoKVGh1IEF1ZyAyNSAxNToxNDo1NiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jIFNBWDIuYyBkZWJ1Z1hNTC5jIHRyZWUuYyB2YWxpZC5jIHhtbHJlYWRlci5jCgkgIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6CgkgIGFkZGVkIGEgcGFyc2VyIFhNTF9QQVJTRV9DT01QQUNUIG9wdGlvbiB0byBhbGxvY2F0ZSBzbWFsbCAKCSAgdGV4dCBub2RlcyAobGVzcyB0aGFuIDggYnl0ZXMgb24gMzJiaXRzLCBsZXNzIHRoYW4gMTZieXRlcyBvbiA2NGJpdHMpCgkgIGRpcmVjdGx5IHdpdGhpbiB0aGUgbm9kZSwgdmFyaW91cyBjaGFuZ2VzIHRvIGNvcGUgd2l0aCB0aGlzLgoJKiByZXN1bHQvWFBhdGgvdGVzdHMvKiByZXN1bHQvWFBhdGgveHB0ci8qIHJlc3VsdC94bWxpZC8qOiB0aGlzIAoJICBzbGlnaHRseSBjaGFuZ2UgdGhlIG91dHB1dAoKVGh1IEF1ZyAyNSAxMjoxNjoyNiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwYXRjaCBmcm9tIEFuZHJldyBXLiBOb3NlbmtvLCB1c2Ugc2UgJEdDQyA9ICd5ZXMnCgkgIGluc3RlYWQgb2YgJENDID0gJ2djYycgYmVjYXVzZSBHQ0MgbWF5IGhhdmUgYSBkaWZmZXJlbnQgbmFtZQoKVGh1IEF1ZyAyNSAwMDoxODoyMCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBjaGFuZ2VzIHRoZSB3YXkgdGhlIHB5dGhvbiBiaW5hcnkgaXMgZm91bmQsIHNob3VsZAoJICBhbHNvIGZpeCBidWcgIzMwODAwNAoKV2VkIEF1ZyAyNCAxNjo0NDo0MSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZvdW5kIGFub3RoZXIgYnVnIHdoaWxlIGxvb2tpbmcgYXQgIzMwOTYxNiBvbiBtaXNzaW5nCgkgIGVudGl0aWVzLgoJKiByZXN1bHQvZW50Mi5zYXgqIHJlc3VsdC9lbnQ3LnNheCogcmVzdWx0L3htbDIuc2F4KjogdGhpcyBjaGFuZ2VkIHRoZQoJICBTQVggc3RyZWFtIGluIG1pc3NpbmcgY29uZGl0aW9ucyBmb3IgYSBmZXcgdGVzdHMKCldlZCBBdWcgMjQgMTY6MTk6MDAgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGFwcGxpZWQgdGhlIHBhdGNoIHN1Z2dlc3RlZCAjMzA5NTY1IHdoaWNoIGNhbiBhdm9pZAoJICBsb29waW5nIGluIGVycm9yIGNvbmRpdGlvbnMuCgpXZWQgQXVnIDI0IDE2OjA0OjE3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgdHJlZS5jOiBsaW5lIG51bWJlcnMgYXJlIG5vdyBjYXJyaWVkIGJ5IG1vc3Qgbm9kZXMsIGZpeGluZwoJICB4bWxHZXRMaW5lTm8oKSBjLmYuIGJ1ZyAjMzA5MjA1CgpXZWQgQXVnIDI0IDE0OjQzOjM0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGVycm9yLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZmluYWxseSBjb252ZXJ0ZWQKCSAgdGhlIGVuY29kaW5nIG1vZHVsZSB0byB0aGUgY29tbW9uIGVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20KCSogZG9jLyogZG9jL2h0bWwvbGlieG1sLXhtbGVycm9yLmh0bWw6IHJlYnVpbHQKCldlZCBBdWcgMjQgMTE6MzU6MjYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHJlbW92ZWQgYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGVycm9yCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGZpeGVkIGEgZGVwcmVjYXRpb24gd2FybmluZwoJKiBweXRob24vdGVzdHMvdHN0TGFzdEVycm9yLnB5OiBzaWxlbnQgdGhlIGRhbW4gdGVzdCB3aGVuIE9rYXkgIQoKV2VkIEF1ZyAyNCAwMDoxMToxNiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIGdsb2JhbHMuYyBydW50ZXN0LmMgdGVzdEMxNE4uYyB0ZXN0YXBpLmMgdHJlZS5jCgkgIGluY2x1ZGUvbGlieG1sL1NBWDIuaCBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDogZml4ZWQgY29tcGlsYXRpb24KCSAgd2hlbiBjb25maWd1cmVkIC0td2l0aG91dC1zYXgxIGFuZCBvdGhlciBjbGVhbnVwcyBmaXhlcyBidWcgIzE3MjY4MwoJKiBkb2MvKiBlbGZnY2NoYWNrLmg6IHJlZ2VuZXJhdGVkCgpUdWUgQXVnIDIzIDIwOjA1OjA1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICMxNzA0ODkgcmVwb3J0ZWQgYnkgSmlya2EgS29zZWsKCSogdGVzdC92YWxpZC9vYmplZG5hdmthLnhtbCB0ZXN0L3ZhbGlkL2R0ZHMvb2JqZWRuYXZrYS5kdGQKCSAgcmVzdWx0L3ZhbGlkL29iamVkbmF2a2EqOiBhZGRlZCB0aGUgdGVzdCB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZS4KClR1ZSBBdWcgMjMgMTg6MDQ6MDggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6IGFkZGVkIGEgcmVjb3ZlcnkgbW9kZQoJICBmb3IgdGhlIEhUTUwgcGFyc2VyIGJhc2VkIG9uIHRoZSBzdWdnZXN0aW9ucyBvZiBidWcgIzE2OTgzNCBieQoJICBQYXVsIExvYmVyZwoKVHVlIEF1ZyAyMyAxNTozODo0NiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZWxmZ2NjaGFjay5oIHRlc3RhcGkuYyBkb2MvKjogcmVnZW5lcmF0ZWQKCSogc2NoZW1hdHJvbi5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIHByb2JsZW0KCSogeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6IHNvbWUgY2xlYW51cHMgYW5kIG9uZSBidWcgZml4CgkqIHJlc3VsdC9leHByL2Jhc2U6IHNsaWdodGx5IGNoYW5nZXMgdGhlIG51bWJlciBvZiBDb25zLgoKTW9uIEF1ZyAyMiAyMzoxOTo1MCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZWxmZ2NjaGFjay5oIHRlc3RhcGkuYyBkb2MvKjogcmVzY2FubmVkIGNvZGUgYW5kIHJlYnVpbHQKCSogeG1scmVnZXhwLmM6IHNtYWxsIGNsZWFudXAKCSogaW5jbHVkZS9saWJ4bWwvc2NoZW1hdHJvbi5oIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IGNsZWFudXAgcHJvYmxlbXMgZnJvbSBjb2RlIHNjYW5uZXIKCk1vbiBBdWcgMjIgMTg6MDA6MTggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gS3ViYSBOb3dha293c2tpIGZpeGluZyBidWcKCSAgIzMxMzk4MgoJKiByZXN1bHQvc2NoZW1hcy9idWczMTM5ODIqIHRlc3Qvc2NoZW1hcy9idWczMTM5ODIqOiBhbHNvIGFkZGVkCgkgIHRoZSB0ZXN0IGNhc2UgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUuCgpNb24gQXVnIDIyIDE3OjUwOjIwIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0UmVnZXhwLmM6IHByaW50ZWQgdGhlIHdyb25nIHN0cmluZwoKTW9uIEF1ZyAyMiAxNjo0MjowNyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFJlZ2V4cC5jIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOiBleHBvcnRlZAoJICB4bWxFeHBFeHBEZXJpdmUoKSwgYWRkZWQgaXQgdG8gdGhlIHRlc3RSZWdleHAgY29tbWFuZCBsaW5lIAoJICB0b29sIHdoZW4gcHJvdmlkaW5nIG11bHRpcGxlIGV4cHJlc3Npb25zLgoKTW9uIEF1ZyAyMiAxNDo1NzoxMyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gcmVzdWx0L2V4cHIvYmFzZSB0ZXN0L2V4cHIvYmFzZTogYWRkZWQgdGhlIGZpcnN0CgkgIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBzZXQgZm9yIHRoZSBuZXcgZXhwcmVzc2lvbiBzdXBwb3J0CgpNb24gQXVnIDIyIDEzOjQ5OjE4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlCgkqIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOiBleHRlbmRlZCB0aGUgQVBJIHRvCgkgIGFkZCB0aGUgcGFyc2VyLCBzZXJpYWxpemVyIGFuZCBzb21lIGRlYnVnZ2luZwoJKiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IG1hZGUgdGhlIG5ldyBzdXBwb3J0IGNvbXBpbGVkCgkgIGJ5IGRlZmF1bHQgaWYgU2NoZW1hcyBpcyBpbmNsdWRlZAoJKiB0ZXN0UmVnZXhwLmM6IGNsZWFudXAgYW5kIGludGVncmF0aW9uIG9mIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQoJICBuZXcgY29kZSB3aXRoIGEgc3BlY2lhbCBzd2l0Y2gKCSogeG1sbGludC5jOiBzaG93IHVwIEV4cHIgaW4gLS12ZXJzaW9uIGlmIGNvbXBpbGVkIGluCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogbW92ZWQgdGhlIHhtbEJ1ZmZlciBkZWZpbml0aW9uIHVwCgpNb24gQXVnIDIyIDEyOjExOjEwIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFNvbWUgcHJlcGFyYXRpb24gZm9yIHRoZSBjcmVhdGlvbiBvZiBhIGdyYXBoCgkgIG9mIGltcG9ydGVkL2luY2x1ZGVkL3JlZGVmaW5lZCBzY2hlbWFzOyB0aGlzIGlzIG5lZWRlZCBmb3IKCSAgYXQgbGVhc3QgdGhlIHJlZGVmaW5pdGlvbnMuCgkgIENlbnRyYWxpemVkIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFyc2VyIGNvbnRleHQgaW4gb25lIGZ1bmN0aW9uLgoKTW9uIEF1ZyAyMiAwMjoxOTozMyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6IHB1c2hpbmcgdGhlIGZvcm1hbCBleHByZXNzaW9uCgkgIGhhbmRsaW5nIGNvZGUgdG8gaGF2ZSBpdCBpbiBDVnMgZnJvbSBub3cuIE5vdCBwbHVnZ2VkLCBhbmQgbWlzc2VzIAoJICBBUElzIGl0J3Mgbm90IGNvbXBpbGVkIGluIHlldC4KClNhdCBBdWcgMjAgMjM6MTM6MjcgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMgdG8gZml4CgkgIHhtbFRleHRSZWFkZXJHZXRBdHRyaWJ1dGVOcyBhbmQgeG1sVGV4dFJlYWRlck1vdmVUb0F0dHJpYnV0ZU5zCgpXZWQgQXVnIDE3IDA5OjA2OjMzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIFJvYiBSaWNoYXJkcyB0byBmaXggCgkgIHhtbFRleHRSZWFkZXJHZXRBdHRyaWJ1dGUgYmVoYXZpb3VyIHdpdGggbmFtZXNwYWNlIGRlY2xhcmF0aW9ucwoKRnJpIEF1ZyAxMiAxNDoxMjo1NiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6CgkgIENoYW5nZWQgb3V0cHV0IGZvciBrZXlyZWYtbWF0Y2ggZXJyb3JzOyB0aGUgdGFyZ2V0LW5vZGUgd2lsbAoJICBiZSBub3cgcmVwb3J0ZWQgcmF0aGVyIHRoYW4gdGhlIHNjb3BlLW5vZGUgb2YgdGhlIGtleXJlZgoJICBkZWZpbml0aW9uIC0gYWxsb3dpbmcgZWFzaWVyIGNoYXNpbmcgb2YgaW5zdGFuY2UgZXJyb3JzLgoJICBUaGlzIHdhcyByZXBvcnRlZCBieSBHdXkgRmFicmljZSB0byB0aGUgbWFpbGluZyBsaXN0LgoJICBTb21lIGluaXRpYWwgcGFyc2luZyBjb2RlIGZvciBzY2hlbWEgcmVkZWZpbml0aW9ucy4KCSogcmVzdWx0L3NjaGVtYXMvYnVnMzAzNTY2XzFfMS5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvYnVnMzEyOTU3XzFfMC5lcnI6IEFkYXB0ZWQgdGVzdCByZXN1bHRzIGR1ZQoJICB0byB0aGUga2V5cmVmIGNoYW5nZXMuCgpGcmkgQXVnIDEyIDEyOjE3OjUyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gRGVyZWsgUG9vbiBmaXhpbmcgYnVnICMzMTA2OTIKCldlZCBBdWcgMTAgMjM6Mzk6MDIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4IGZvciBidWcgIzMxMjk0NSBhcyBwb2ludGVkIGJ5IERlYW4gSGlsbCwgdGhlCgkgIGNvbnRleHQgdHlwZSB3YXMgbm90IGFsd2F5cyBwcm9wZXJseSBpbml0aWFsaXplZC4gCgpXZWQgQXVnIDEwIDE4OjIxOjQxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGJ1ZyAjMzA3Mzc3IGFib3V0IHZhbGlkYXRpb24gb2YgY2hvaWNlcyBpbgoJICBsaXN0IHZhbHVlcy4KCSogdGVzdC9yZWxheG5nLzMwNzM3NyogcmVzdWx0L3JlbGF4bmcvMzA3Mzc3KiBNYWtlZmlsZS5hbSBydW50ZXN0LmM6CgkgIGFkZGVkIGV4YW1wbGVzIHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzLCBwcm9ibGVtIGlzIHRoYXQgc3RyZWFtaW5nCgkgIHZlcnNpb24gZ2l2ZXMgc2xpZ2h0bHkgbW9yZSBpbmZvcm1hdGlvbnMuCgpXZWQgQXVnIDEwIDE1OjI1OjUzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBidWcgIzMwMjMwMiwgbmFzdHkgYnV0IHRoZSBmaXggaXMgcmF0aGVyIHNpbXBsZS4KCldlZCBBdWcgMTAgMTE6NTk6NDYgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzL2FueTZfMV8wKjogQWRkZWQgbWlzc2luZyB0ZXN0IHJlc3VsdHMuCgpUdWUgQXVnICA5IDIzOjM3OjIyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4ZWQgYSBkZXRlcm1pbmlzbSBkZXRlY3Rpb24gcHJvYmxlbSBleHBvc2VkIGJ5CgkgICMjb3RoZXIgdGVzdHMgY29tbWl0ZWQgYnkgS2FzaW1pZXIsIGFsc28gYWRkZWQgYSBzbWFsbCBzcGVlZHVwCgkgIG9mIGRldGVybWluaXNtIGRldGVjdGlvbi4KCSogdGVzdC9yZXN1bHRzL2FueTZfMl8wKiBhbnk4XzFfMCogYW55N18xXzIqIGFueTdfMl8yKjogYWRkZWQgCgkgIHRoZSByZXN1bHRzIHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzIG5vdwoKVHVlIEF1ZyAgOSAxNTo1NDowOSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdGVzdC9zY2hlbWFzL2FueTdfMi54bWwgdGVzdC9zY2hlbWFzL2FueTZfMi54c2QKCSAgdGVzdC9zY2hlbWFzL2FueThfMS54c2QgdGVzdC9zY2hlbWFzL2FueThfMC54bWw6CgkgIEFkZGVkIHNvbWUgbW9yZSB0ZXN0cyBmb3IgZWxlbWVudCB3aWxkY2FyZHMuCgpUdWUgQXVnICA5IDE0OjIyOjQ3IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkICMzMTI5NTcgcmVwb3J0ZWQgYnkgQ2Fyb2wgSHVudGVyOgoJICBzdHJlYW1pbmcgWFBhdGggc3RhdGVzIHdlcmUgbm90IHBvcHBlZCBpbiBldmVyeSBjYXNlLAoJICB0aHVzIGZhaWxlZCB0byByZXNvbHZlIGNvcnJlY3RseSBmb3Igc3Vic2VxdWVudCBpbnB1dC4KCSogdGVzdC9zY2hlbWFzL2J1ZzMxMjk1NyogcmVzdWx0L3NjaGVtYXMvYnVnMzEyOTU3KjoKCSAgQWRkZWQgdGhlIHRlc3Qgc3VibWl0dGVkIGJ5IENhcm9sIEh1bnRlci4KClR1ZSBBdWcgIDkgMTM6MDc6MjcgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYzogdHJ5aW5nIHRvIG5haWwgZG93biB0aGUgcmVtYWluaW5nCgkgICMjb3RoZXIgaXNzdWVzCgkqIHJlc3VsdC9zY2hlbWFzL2FueTcqIHRlc3Qvc2NoZW1hcy9hbnk3OiBjb21wbGV0ZWQgdGhlIHRlc3RzCgkgIGFuZCBhZGRlZCB0aGUgcmVzdWx0cwoJKiByZXN1bHQvc2NoZW1hcy9hbnkzXzBfMC5lcnIgcmVzdWx0L3NjaGVtYXMvYW55NV8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2FueTVfMV8wLmVycjogdGhpcyBzbGlnaHRseSBjaG5hZ2VzIHRoZSBvdXRwdXQKCSAgZnJvbSAzIGV4aXN0aW5nIHRlc3RzCgpNb24gQXVnICA4IDIyOjMzOjA4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIAoJICBNYXJjdXMgQm9lcmdlciB0byByZW1vdmUgd2FybmluZ3Mgb24gV2luZG93cy4KCk1vbiBBdWcgIDggMTY6NDM6MDQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYyBpbmNsdWRlL2xpYnhtbC94bWxzYXZlLmg6IGZpeGVkICMxNDUwOTIgYnkgYWRkaW5nIAoJICBhbiB4bWxTYXZlT3B0aW9uIHRvIG9taXQgWE1MIGRlY2xhcmF0aW9uCgpNb24gQXVnICA4IDE1OjQ0OjU0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBidWcgIzMxMDMzMyB3aXRoIGEgcGF0Y2ggY2xvc2UgdG8gdGhlIHByb3ZpZGVkCgkgIHBhdGNoIGZvciBIVE1MIFVURi04IHNlcmlhbGl6YXRpb24KCSogcmVzdWx0L0hUTUwvc2NyaXB0Mi5odG1sOiB0aGlzIGNoYW5nZWQgdGhlIG91dHB1dCBvZiB0aGF0IHRlc3QKCk1vbiBBdWcgIDggMTU6MDE6NTEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhlZCBidWcgIzMxMDI2NCwgYmFzaWNhbGx5IGl0J3MgYWJvdXQgcmVlbnRyYW5jeQoJICBvZiBjb3VudCBiYXNlZCB0cmFuc2l0aW9uLCB3aGVuIGdvaW5nIHRob3VnaCB0aGUgY291bnRlciBtdXN0CgkgIGJlIHJlc2V0IHRvIDAKCSogdGVzdC9zY2hlbWFzL2J1ZzMxMDI2NCogcmVzdWx0L3NjaGVtYXMvYnVnMzEwMjY0KjogYWRkZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdC4KCk1vbiBBdWcgIDggMTQ6NDA6NTIgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgYSBtZW1vcnkgbGVhazogeG1sU2NoZW1hRnJlZUFubm90KCkgd2FzCgkgIG9ubHkgZnJlZWluZyB0aGUgZmlyc3QgYW5ub3RhdGlvbiBpbiB0aGUgbGlzdC4KCk1vbiBBdWcgIDggMDk6NDQ6MzQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzIGZpeGluZwoJICB4bWxUZXh0UmVhZGVyR2V0QXR0cmlidXRlCgpNb24gQXVnICA4IDAxOjQxOjUzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBzcG90dGVkIGJ5CgkgIHZhbGdyaW5kCgpTdW4gQXVnICA3IDEyOjM5OjM1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3JlbGF4bmcvZG9jYm9va18wLnhtbDogZ2V0IHJpZCBvZiB0aGUgZGVwZW5kYW5jeSBvbiBhIGxvY2FsbHkKCSAgaW5zdGFsbGVkIERURAoJKiB1cmkuYyBpbmNsdWRlL2xpYnhtbC91cmkuaCB4bWxJTy5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiB0cnkgdG8KCSAgY2xlYW51cCB0aGUgUGF0aC9VUkkgY29udmVyc2lvbiBtZXNzLCBuZWVkZWQgZml4aW5nIGluIHZhcmlvdXMgCgkgIGxheWVycyBhbmQgYSBuZXcgQVBJIHRvIHRoZSB1cmkgbW9kdWxlIHdoaWNoIGFsc28gZml4ZXMgIzMwNjg2MQoJKiBydW50ZXN0LmM6IGludGVncmF0ZWQgYSByZWdyZXNzaW9uIHRlc3Qgc3BlY2lmaWMgdG8gY2hlY2sgdGhlCgkgIFVSSSBjb252ZXJzaW9ucyBkb25lIGJlZm9yZSBjYWxsaW5nIHRoZSBJL08gaGFuZGxlcnMuCgpTYXQgQXVnICA2IDExOjA2OjI0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvWFNMVC5odG1sIGRvYy94bWwuaHRtbDogc21hbGwgZG9jIGZpeCBmb3IgIzMxMjY0NwoKVHVlIEF1ZyAgMiAxMzoyNjo0MiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzIHRvIGFsbG93CgkgIGRpc2FibGluZyBtb2R1bGVzIGluIHdpbjMyLCBmaXhlcyAjMzA0MDcxCgpNb24gQXVnICAxIDA3OjE4OjUzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGFwcGxpZWQgZml4IGZyb20gSmFrdWIgUGlvdHIgQ2xhcGEgZm9yCgkgIHhtbEF0dHIucGFyZW50KCksIGNsb3NpbmcgIzMxMjE4MQoKU3VuIEp1bCAzMSAxODo0ODo1NSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogc2NoZW1hdHJvbi5jOiByZXBvcnQgaW1wcm92ZW1lbnQKCSogdGVzdC9zY2hlbWF0cm9uL3p2b24qIHJlc3VsdC9zY2hlbWF0cm9uL3p2b24qOiBtb3JlIHRlc3RzCgpTdW4gSnVsIDMxIDE2OjAyOjU5IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCBwYXRjaCBmcm9tIFJvYgoJICBSaWNoYXJkcyB0byBhZGQgc2NoZW1hdHJvbiB0byB0aGUgYnVpbGQgb24gV2luZG93cwoJKiB0ZXN0L3NjaGVtYXRyb24venZvbjMqIHJlc3VsdC9zY2hlbWF0cm9uL3p2b24zKjogc2Vjb25kIHRlc3QKCSogdGVzdC9zY2hlbWF0cm9uL3p2b24xMCogcmVzdWx0L3NjaGVtYXRyb24venZvbjEwKjogdGhpcyBpcyB0aGUKCSAgcmVhbCBzZWNvbmQgdGVzdCAxMCBhbmQgMiBhcmUgc3dhcHBlZC4KClN1biBKdWwgMzEgMTU6NDI6MzEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHNjaGVtYXRyb24uYzogbW9yZSBidWcgZml4ZXMsIGltcHJvdmUgdGhlIGVycm9yIHJlcG9ydGluZy4KCSogdGVzdC9zY2hlbWF0cm9uL3p2b24yKiByZXN1bHQvc2NoZW1hdHJvbi96dm9uMio6IHNlY29uZCB0ZXN0CgpTdW4gSnVsIDMxIDE0OjE1OjMxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBzY2hlbWF0cm9uLmMgeG1sbGludC5jOiBmaXhpbmcgdGhlIGxvb3AgYnVnLCBmaXhpbmcgc2NoZW1hdHJvbgoJICB0ZXh0IGVycm9yIHJlbmRlcmluZwoJKiBNYWtlZmlsZS5hbSByZXN1bHQvc2NoZW1hdHJvbi8qIHRlc3Qvc2NoZW1hdHJvbi96dm9uMSouc2N0OgoJICBzdGFydGVkIGludGVncmF0aW5nIHdpdGhpbiAibWFrZSB0ZXN0cyIKClNhdCBKdWwgMzAgMTc6MjY6NTggRURUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9zY2hlbWF0cm9uLyo6IGEgZmV3IGZpcnN0IHRlc3RzIGZyb20gWnZvbiB1bmZvcnR1bmF0ZWx5CgkgIHdpdGggdGhlIG9sZCBzeW50YXgKClNhdCBKdWwgMzAgMTc6MDg6MDcgRURUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogc2NoZW1hdHJvbi5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWF0cm9uLmg6IGNvbW1pdGluZwoJICB3b3JrIGRvbmUgb24gdGhlIHBsYW5lIGxhc3Qgd2Vlay1lbmQKClNhdCBKdWwgMzAgMTU6MTY6MjkgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogYWxsb3dzIGFuIGV4dHJhIGFyZ3VtZW50IHRvIHN1YnNldCB0aGUgdGVzdHMKCSogeG1scmVnZXhwLmM6IGJpZyBzcGVlZHVwIGZvciB2YWxpZGF0aW9uLCBiYXNpY2FsbHkgYXZvaWRlZAoJICB0cmFuc2l0aW9uIGNyZWF0aW9uIGV4cGxvc2lvbiB3aGVuIHJlbW92aW5nIGVwc2lsb24gdHJhbnNpdGlvbgoJICAKU2F0IEp1bCAzMCAwMDowMDo0NiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gZ2xvYmFscy5jIHBhcnNlckludGVybmFscy5jIHhtbHJlYWRlci5jIHhtbHVuaWNvZGUuYwoJICB4bWx3cml0ZXIuYzogbW9yZSBjbGVhbnVwcyBiYXNlZCBvbiBzcGFyc2UgcmVwb3J0cywgYWRkZWQgCgkgICJtYWtlIHNwYXJzZSIKCkZyaSBKdWwgMjkgMTI6MTE6MjUgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogZG9uJ3Qgb3V0cHV0IGFueSBtZXNzYWdlIG9uIGZhaWxlZCByZXNvbHZlciBsb29rdXBzLAoJICBiZXR0ZXIgZG9uZSBieSB0aGUgcHl0aG9uIHVzZXIgcHJvdmlkZWQgcmVzb2x2ZXIgbGF5ZXIuCgpGcmkgSnVsIDI5IDAxOjQ4OjAyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgU0FYMi5jIGVuY29kaW5nLmMgZ2xvYmFscy5jIHBhcnNlci5jIHJlbGF4bmcuYwoJICBydW5zdWl0ZS5jIHJ1bnRlc3QuYyBzY2hlbWF0cm9uLmMgdGVzdEhUTUwuYyB0ZXN0UmVhZGVyLmMKCSAgdGVzdFJlZ2V4cC5jIHRlc3RTQVguYyB0ZXN0VGhyZWFkcy5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxJTy5jCgkgIHhtbGxpbnQuYyB4bWxtb2R1bGUuYyB4bWxzY2hlbWFzLmMgeHBhdGguYyB4cG9pbnRlci5jOiBhIGxvdCBvZiAKCSAgc21hbGwgY2xlYW51cHMgYmFzZWQgb24gTGludXMnIHNwYXJzZSBjaGVjayBvdXRwdXQuCgpUaHUgSnVsIDI4IDIxOjI4OjMzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogYWRkZWQgc2NoZW1hdHJvbi5oLCBvb3BzIC4uLgoKVGh1IEp1bCAyOCAwMjozODoyMSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IEFkZGVkIGNyZWF0aW9uIG9mIHRoZSBjb250ZW50IHR5cGUgb2YKCSAgeHM6YW55VHlwZS4gVGhpcyBpcyBuZWVkZWQgd2hlbiB0cnlpbmcgdG8gZXh0ZW5kIHhzOmFueVR5cGUKCSAgKGFsdGhvdWdoIGl0IG1ha2VzIG5vIHNlbnNlIHRvIGV4dGVuZCBpdDsgSU1ITyB0aGUgc2NoZW1hCgkgIHBlb3BsZSBzaG91bGQgaGF2ZSBydWxlZCB0aGlzIG91dCkuIFRoaXMgd2FzIHJlcG9ydGVkCgkgIGJ5IFlvbmcgQ2hlbiB0byB0aGUgbWFpbGluZyBsaXN0LgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGhhbmRsaW5nIG9mIHhzOmFueVR5cGUgaW4KCSAgeG1sU2NoZW1hQ2hlY2tDT1NDVEV4dGVuZHMoKSAocmVwb3J0ZWQgYnkgWW91bmcgQ2hlbikuIFRpbnkKCSAgYWRqdXN0bWVudCB0byBhbiBlcnJvciByZXBvcnQgb3V0cHV0LgoJKiB0ZXN0L3NjaGVtYXMvZXh0ZW5zaW9uMiogcmVzdWx0L3NjaGVtYXMvZXh0ZW5zaW9uMio6CgkgIEFkZGVkIGEgdGVzdCBjYXNlIHByb3ZpZGVkIGJ5IFlvdW5nIENoZW4uCgpNb24gSnVsIDI1IDExOjQxOjE4IFBEVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdXJpLmM6IGVuaGFuY2VkIHhtbEJ1aWxkUmVsYXRpdmVVUkkgdG8gYWxsb3cgdGhlIFVSSSBhbmQgdGhlCgkgIGJhc2UgdG8gYmUgaW4gInJlbGF0aXZlIiBmb3JtCgpTdW4gSnVsIDI0IDEwOjI1OjQxIEVEVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHNjaGVtYXRyb24uYyB4bWxsaW50LmM6IHN0YXJ0ZWQgYWRkaW5nIHNjaGVtYXRyb24gdG8gdGhlIHhtbGxpbnQKCSAgdG9vbCwgdGhlIHJlcG9ydCBpbmZyYXN0cnVjdHVyZSBpcyBnb25uYSBiZSBmdW4uCgpTYXQgSnVsIDIzIDIzOjIzOjUxIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0ZXN0L3NjaGVtYXMvYW55NiogdGVzdC9zY2hlbWFzL2FueTcqOiBBZGRlZCByZWdyZXNzaW9uIHRlc3RzCgkgICh0aGV5IGZhaWwgY3VycmVudGx5KSwgYnV0IGRpZCBub3QgYWRkZWQgcmVzdWx0cyB5ZXQuCgpTYXQgSnVsIDIzIDIzOjA3OjA1IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFJlbW92ZWQgdGhlIHdvcmthcm91bmQgY29kZSBpbgoJICB4bWxTY2hlbWFWYWxpZGF0ZUVsZW1XaWxkY2FyZCgpIGZvciB0aGUgPGFueT4gd2lsZGNhcmQKCSAgd2l0aCBuYW1lc3BhY2UgPT0gIyNvdGhlci4gU3VwcG9ydCBmb3Igc3VjaCB3aWxkY2FyZHMgd2FzCgkgIGltcGxlbWVudGVkIGJ5IERhbmllbCBhdCB0aGUgYXV0b21hdG9uIGxldmVsIHJlY2VudGx5LCBhbmQKCSAgdGhlIHdvcmthcm91bmQgY29kZSBpdGVyZmVyZWQgd2l0aCBpdC4KClNhdCBKdWwgMjMgMTA6NTU6NTAgRURUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jIGluY2x1ZGUvbGlieG1sL3BhdHRlcm4uaDogY2hhbmdlZCB4bWxQYXR0ZXJuY29tcGlsZQoJICBzaWduYXR1cmUgdG8gcGFzcyBhbiBpbnQgYW5kIG5vdCBhbiBlbnVtIHNpbmNlIGl0IGNhbiBnZW5lcmF0ZQoJICBBQkkgY29tcGF0IHRyb3VibGVzLgoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWF0cm9uLmggc2NoZW1hdHJvbi5jOiBhZGRpbmcgdGhlIG5ldyAKCSAgc2NoZW1hdHJvbiBjb2RlLCB3b3JrIGluIHByb2dyZXNzIGxvdHMgdG8gYmUgbGVmdCBhbmQgbmVlZGluZwoJICB0ZXN0aW5nCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbgoJICBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IGludGVncmF0aW9uIG9mIHNjaGVtYXRyb24gaW50byB0aGUKCSAgYnVpbGQKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBhZGRpbmcgZmxhZ3MgdG8gY29udHJvbCBjb21waWxhdGlvbgoJICBvcHRpb25zIHJpZ2h0IG5vdyBqdXN0IFhNTF9YUEFUSF9DSEVDS05TLgoKU2F0IEp1bCAyMyAxNjozOTozNSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBSZW1vdmVkIGFuICJpbnRlcm5hbCBlcnJvciIgbWVzc2FnZSBmcm9tCgkgIHhtbFNjaGVtYUJ1aWxkQUNvbnRlbnRNb2RlbCgpIHdoZW4gYW4gZW1wdHkgbW9kZWwgZ3JvdXAKCSAgZGVmaW5pdGlvbiBpcyBoaXQuCgpTYXQgSnVsIDIzIDAwOjM0OjA3IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBwYXR0ZXJuLmM6IENoYW5nZWQgeG1sQ29tcGlsZVN0ZXBQYXR0ZXJuKCkgYW5kCgkgIHhtbENvbXBpbGVBdHRyaWJ1dGVUZXN0KCkgdG8gaGFuZGxlIHRoZSAieG1sIiBwcmVmaXggd2l0aG91dAoJICBjYXJpbmcgaWYgdGhlIFhNTCBuYW1lc3BhY2Ugd2FzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLgoKRnJpIEp1bCAyMiAwMDowODo0MyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCB4bWxTY2hlbWFQU2ltcGxlVHlwZUVycigpLCB3aGljaCBkaWQgbm90CgkgIG91dHB1dCB0aGUgZ2l2ZW4gc3RyaW5nIGFyZ3VtZW50cyBjb3JyZWN0bHkuCgpUaHUgSnVsIDIxIDA5OjIxOjAwIEVEVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgZ2xvYmFscy5jIHBhcnNlci5jIHJ1bnRlc3QuYyB0ZXN0SFRNTC5jIHRlc3RTQVguYwoJICB0aHJlYWRzLmMgdmFsaWQuYyB4bWxsaW50LmMgeG1scmVhZGVyLmMgeG1sc2NoZW1hcy5jIHhtbHN0cmluZy5jCgkgIHhtbHdyaXRlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaAoJICBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIGluY2x1ZGUvbGlieG1sL3htbElPLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBNYXJjdXMgQm9lcmdlcgoJICB0byBmaXggcHJvYmxlbXMgd2l0aCBjYWxsaW5nIGNvbnZlbnRpb25zIG9uIFdpbmRvd3MgdGhpcyBzaG91bGQKCSAgZml4ICMzMDk3NTcKCldlZCBKdWwgMjAgMTQ6NDU6MzkgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhbiBvcHRpbWl6YXRpb24gb2YgdGhlIGNoYXIgZGF0YSBpbm5lciBsb29wLAoJICBjYW4gZ2FpbiB1cCB0byAxMCUgaW4gcHVyZSBTQVgyIHBhcnNpbmcgc3BlZWQKCSogeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gS3Vwcml5YW5vdiBBbmF0b2xpaiBmaXhpbmcKCSAgYSBidWcgaW4gWE1MIFNjaGVtYXMgZmFjZXQgY29tcGFyaXNvbiAjMzEwODkzCgpUdWUgSnVsIDE5IDE3OjI3OjI2IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IGZpeGVkIHRoZSBlcnJvciByZXBvcnRpbmcgZm9yCgkgIG5vdCB0cmFuc2l0aW9ucwoJKiByZXN1bHQvc2NoZW1hcy9hbnk1XzBfMCogcmVzdWx0L3NjaGVtYXMvYW55NV8wXzIqCgkgIHJlc3VsdC9zY2hlbWFzL2FueTVfMV8wKjogZml4ZWQgb3V0cHV0CgpUdWUgSnVsIDE5IDE1OjM0OjEyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaDogZml4aW5nCgkgIGJ1ZyAjMTcyMjE1IGFib3V0IGZvcmVpZ24gbmFtZXNwYWNlcyBieSBhZGRpbmcgc3VwcG9ydCBmb3IKCSAgbmVnYXRlZCBzdHJpbmcgdHJhbnNpdGlvbnMuIEVycm9yIG1lc3NhZ2VzIHN0aWxsIG5lZWQgdG8gYmUKCSAgaW1wcm92ZWQuCgkqIHRlc3Qvc2NoZW1hcy9hbnk1KiByZXN1bHQvc2NoZW1hcy9hbnk1KjogYWRkaW5nIHJlZ3Jlc3Npb24KCSAgdGVzdHMgZm9yIHRoaXMuCgpUdWUgSnVsIDE5IDEyOjMzOjMxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGV4YW5kZXIgUG9ob3lkYSBmaXhpbmcgeG1sR2V0Tm9kZVBhdGgKCSAgb24gbmFtZXNwYWNlZCBhdHRyaWJ1dGVzICMzMTA0MTcuCgpNb24gSnVsIDE4IDIzOjAxOjE1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sbGludC4xIGRvYy94bWxsaW50Lmh0bWwgZG9jL3htbGxpbnQueG1sOiAtLW5vbmV0IHdhcwoJICBkdWNwbGljYXRlZAoKTW9uIEp1bCAxOCAyMDo0OToyOCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCB4c2Q6YWxsIHdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCgkgIHN1YnN0aXR1dGlvbiBncm91cHMKCSogdGVzdC9zY2hlbWFzL2FsbHNnXyogcmVzdWx0L3NjaGVtYXMvYWxsc2dfKjogYWRkaW5nIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdHMsIHN0cmFuZ2VseSBtaXNzaW5nIGZyb20gTklTVC9TdW4vTWljcm9zb2Z0CgkgIHRlc3RzdWl0ZXMKClN1biBKdWwgMTcgMDc6MTE6MjcgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgYnVnICMzMDc1MDgsIGEgYmFkIGF1dG9tYXRhIHdhcyBidWlsdCBidXQKCSAgdGhpcyBzaG93ZWQgYXMgYW4gaW5kZXRlcm1pbmlzdCByZXN1bHQKClRodSBKdWwgMTQgMTc6NTM6MDIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmb3VuZCB0aGUgbGFzdCBidWcgcmFpc2VkIGJ5IE5JU1QgdGVzdHMgaW4KCSAgY29tcGFyaW5nIGJhc2U2NCBzdHJpbmdzLCByZXN1bHQgZnJvbSBydW5zdWl0ZToKCSAgIyMgTklTVCB0ZXN0IHN1aXRlIGZvciBTY2hlbWFzIHZlcnNpb24gTklTVDIwMDQtMDEtMTQKCSAgUmFuIDIzMTcwIHRlc3RzICgzOTUzIHNjaGVtYXRhKSwgbm8gZXJyb3JzCgpUaHUgSnVsIDE0IDE0OjU3OjM2IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0UmVnZXhwLmM6IGZpeGVkIHdoZXJlIHhtbE1lbW9yeUR1bXAoKSBzaG91bGQgYmUgY2FsbGVkLgoJKiB4bWxyZWdleHAuYzogZml4ZWQgaGFuZGxpbmcgb2YgezB9LCBcbiwgXHIgYW5kIFx0LCB0d28gYnVncwoJICBhZmZlY3RpbmcgTklTVCByZWdyZXNzaW9uIHRlc3RzCgpUaHUgSnVsIDE0IDExOjMwOjI0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgYSBwYXRjaCBmcm9tIEdlcnJpdCBQLiBIYWFzZSB0byBhZGQKCSAgbW9kdWxlIHN1cHBvcnQgb24gY3lnd2luCgpUaHUgSnVsIDE0IDEwOjU2OjQyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVycnVuIGVycm9yIGludHJvZHVjZWQKCSAgb24gbGFzdCBjb21taXQgdG8gaHRtbFBhcnNlU2NyaXB0KCkgYy5mLiAjMzEwMjI5CgpUaHUgSnVsIDE0IDIzOjQ4OjE3IFBEVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogQ2hhbmdlZCB0aGUgYmVoYXZpb3VyIG9mIHhtbFhQYXRoRXF1YWxOb2RlU2V0RmxvYXQgdG8KCSAgcmV0dXJuIFRSVUUgaWYgYSBub2Rlc2V0IHdpdGggYSBudW1lcmljIHZhbHVlIG9mIE5hTiBpcyBjb21wYXJlZAoJICBmb3IgaW5lcXVhbGl0eSB3aXRoIGFueSBudW1lcmljIHZhbHVlIChidWcgMzA5OTE0KS4KCSAgClRodSBKdWwgMTQgMDE6MDM6MDMgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgcmVsYXhuZy5jIHhtbHJlYWRlci5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyY3VzIEJvZXJnZXIKCSAgdG8gcm91dGUgcmVsYXhuZyBhbmQgc2NoZW1hcyBlcnJvciBtZXNzYWdlcyB3aGVuIHVzaW5nIHRoZSByZWFkZXIKCSAgdGhyb3VnaCB0aGUgc3RydWN0dXJlZCBpbnRlcmZhY2UgaWYgYWN0aXZhdGVkLgoJKiBlbGZnY2NoYWNrLmggZG9jLyogdGVzdGFwaS5jOiByZWJ1aWx0IHNpbmNlIHRoaXMgYWRkICBuZXcgQVBJcwoJICB0byB0ZXN0LgoKV2VkIEp1bCAxMyAxODozNTo0NyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIFVURi04IHNjcmlwdCBwYXJzaW5nIGJ1ZyAjMzEwMjI5IGZpeCBmcm9tCgkgIEppcmkgTmV0b2xpY2t5IAoJKiByZXN1bHQvSFRNTC9zY3JpcHQyLmh0bWwqIHRlc3QvSFRNTC9zY3JpcHQyLmh0bWw6IGFkZGVkIHRoZSB0ZXN0CgkgIGNhc2UgZnJvbSB0aGUgcmVncmVzc2lvbiBzdWl0ZQoKVHVlIEp1bCAxMiAxNzowODoxMSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2h0dHAuYzogZml4ZWQgYnVnICMzMTAxMDUgd2l0aCBodHRwX3Byb3h5IGVudmlyb25tZW50cyB3aXRoCgkgIHBhdGNoIHByb3ZpZGVkIGJ5IFBldGVyIEJyZWl0ZW5sb2huZXIKCk1vbiBKdWwgMTEgMDA6Mjg6MTAgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIE5FV1MgY29uZmlndXJlLmluIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjYuMjAgCgkqIHhtbGxpbnQuYzogcmVtb3ZlZCBhIGNvbXBpbGF0aW9uIHByb2JsZW0KClN1biBKdWwgMTAgMjM6MzM6NDEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhzdGMvTWFrZWZpbGUuYW0gUkVBRE1FIFJFQURNRS50ZXN0cyBNYWtlZmlsZS50ZXN0cyBNYWtlZmlsZS5hbToKCSAgcHJlcGFyaW5nIHRvIG1ha2UgdGVzdHN1aXRlIHJlbGVhc2VzIGFsb25nIHdpdGggY29kZSBzb3VyY2UgcmVsZWFzZXMKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGZpeGVkIGEgY291cGxlIG9mIHByb2JsZW0gaW50cm9kdWNlZCBieQoJICB0aGUgbmV3IFNjaGVtYXMgc3VwcG9ydCBmb3IgUmVhZGVycwoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgWFBhdGggYXR0cmlidXRlOjogYnVnICMzMDk1ODAsICMzMDk4NjQgaW4gYSBjcnVkZQoJICBidXQgc2ltcGxlIHdheS4KCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMKCSAgcmFpc2VkIGJ5IHRoZSBkb2MgYnVpbGRlci4KCSogZG9jLyo6IG1hZGUgcmVidWlsZAoKU3VuIEp1bCAxMCAyMTo1MToxNiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBhIGJ1ZyBpbnRyb2R1Y2VkIG9uIGxhc3QgY29tbWl0CgpTdW4gSnVsIDEwIDIxOjAwOjU0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sbGludC4xIGRvYy94bWxsaW50Lmh0bWwgZG9jL3htbGxpbnQueG1sOiBmaXhlZCBhIHR5cG8KCSAgcG9pbnRlZCBieSBKZXJvZW4gUnVpZ3JvawoJKiBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6IGluY3JlYXNlZAoJICB0aGUgQVBJcyBmb3IgeG1sUmVhZGVyIHNjaGVtYXMgdmFsaWRhdGlvbiBzdXBwb3J0CgkqIHhtbGxpbnQuYyB4bWxyZWFkZXIuYyB4bWxzY2hlbWFzLmM6IHhtbFJlYWRlciBzY2hlbWFzIHZhbGlkYXRpb24KCSAgaW1wbGVtZW50YXRpb24gYW5kIHRlc3RpbmcgYXMgeG1sbGludCAtLXN0cmVhbSAtLXNjaGVtYSAuLi4KClN1biBKdWwgMTAgMTY6MTE6MjYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiB0cnkgdG8gYXZvaWQgY29uZmxpY3RzLgoKU2F0IEp1bCAgOSAxOToyOToxMCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeCBmb3IgIzMwOTc2MSBmcm9tIER5bGFuIFNoZWxsICAKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogYWRkZWQgeG1sU2NoZW1hU0FYUGx1ZwoJICBhbmQgeG1sU2NoZW1hU0FYVW5wbHVnIGdlbmVyaWMgQVBJcyBmb3IgU0FYIFNjaGVtYXMgdmFsaWRhdGlvbi4KCSogeG1sbGludC5jOiBjb3VwbGUgb2YgZml4ZXMgcGx1cyBhZGRlZCBkZXNjcmlwdGlvbnMgZm9yIC0tc2F4IGFuZAoJICAtLXNheDEKCkZyaSBKdWwgIDggMjM6MzU6MDAgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgYy1wcm9wcy1jb3JyZWN0IGNvbnN0cmFpbnQgdG8gY2hlY2sKCSAgZm9yIGVxdWFsIGNhcmRpbmFsaXR5IG9mIGtleXJlZi9rZXkuCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IEFkZGVkIGFuIGVycm9yIGNvZGUuCgpGcmkgSnVsICA4IDIxOjU2OjA0IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBwYXR0ZXJuLmM6IEZpeGVkIGV2YWx1YXRpb24gb2YgYXR0cmlidXRlcy4gQWN0dWFsbHkgb25seQoJICBhdHRyaWJ1dGUgYXQgdGhlIGZpcnN0IGxldmVsIHdlcmUgZXZhbHVhdGVkIChlLmcuICJAYXR0ciIpOwoJICBleHByZXNzaW9uIGxpa2UgImZvby9AYXR0ciIgYWx3YXlzIGZhaWxlZC4KCkZyaSBKdWwgIDggMjA6MDQ6MjkgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogdGlueSBmaXggaW4geG1sU2NoZW1hVmFsaWRhdGVTdHJlYW0oKSBpZiBhCgkgIHVzZXItcHJvdmlkZWQgU0FYIGhhbmRsZXIgaXMgZ2l2ZW4uCgpGcmkgSnVsICA4IDE5OjI1OjI2IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IHNvbWUgcG90ZW50aWFsIGxlYWtzIGluIGVycm9yIGNhc2VzLgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tc2F4LCB0byBhbGxvdyB0ZXN0aW5nIG9mIC0tc2NoZW1hcyAtLXNheCBhbmQKCSAgdmFyaW91cyBvdGhlciBjb21iaW5hdGlvbnMuCgkqIHhtbHNjaGVtYXMuYzogZml4IGEgY291cGxlIG9mIHRpbnkgcHJvYmxlbXMgaW4KCSAgeG1sU2NoZW1hVmFsaWRhdGVTdHJlYW0oKQoKRnJpIEp1bCAgOCAxODozNDoyMiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoJCgkqIHhtbHNjaGVtYXMuYzogQ2hhbmdlZCB4bWxTY2hlbWFWYWxpZGF0ZUZpbGUoKSB0byB1c2UKCSAgeG1sU2NoZW1hVmFsaWRhdGVTdHJlYW0oKSBpbnRlcm5hbGx5LgoKRnJpIEp1bCAgOCAxNzowMjoxNCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9yZWxheG5nL2RvY2Jvb2tfMC54bWw6IGFkZGVkIHRoZSBtaXNzaW5nIGVudGl0eSB0byB0aGUKCSAgZG9jdW1lbnQgaW50ZXJuYWwgc3Vic2V0IHRvIGF2b2lkIGVycm9ycyBpZiB0aGUgRG9jQm9vayBjYXRhbG9ncwoJICBhcmUgbm90IHRoZXJlCgkqIHhtbHNjaGVtYXMuYzogZmlyc3QgY3V0IGF0IGltcGxlbWVudGluZyB4bWxTY2hlbWFWYWxpZGF0ZVN0cmVhbSgpCgkgIHVudGVzdGVkIHlldAoKV2VkIEp1bCAgNiAxNTo0NTo0OCBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtIHdpdGggZnJlZSBvbiBkdXBsIGF0dHJpYnV0ZSBpbgoJICBkdGQgKGJ1ZzMwOTYzNykuCgkqIHRlc3QvZXJyb3JzL2F0dHIzLnhtbCwgcmVzdWx0L2Vycm9ycy9hdHRyMy4qOiBhZGRlZAoJICByZWdyZXNzaW9uIHRlc3QgZm9yIHRoaXMKCldlZCBKdWwgIDYgMTM6MTE6MzUgUERUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiB0cnkgYWdhaW4gdG8gZml4IGZpbGUgZm9ybWF0IGZvciBXaW5kb3dzCgpXZWQgSnVsICA2IDEyOjIwOjEzIFBEVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogcmVtb3ZlZCBzcHVyaW91cyBeTQoJKiBydW50ZXN0LmM6IGFkZGVkIGNoZWNrIGZvciBvcHRpb24gT19CSU5BUlkKCSogdGVzdC9zY2hlbWFzL2J1ZzMwOTMzOCosIHJlc3VsdC9zY2hlbWFzL2J1ZzMwOTMzOCo6IGNoYW5nZWQKCSAgc3RpY2t5IHRhZyB0byAnYmluYXJ5JwoKV2VkIEp1bCAgNiAxMDozODowMiBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRlYnVnWE1MLmM6IGV4Y2x1ZGVkIGNvbnRlbnQgc3RyaW5nIGNoZWNrIGZvciBYTUxfRUxFTUVOVF9ERUNMCgkgIGluIHhtbEN0eHRHZW5lcmljTm9kZUNoZWNrCgkqIHJ1bnRlc3QuYzogY2hhbmdlZCAib3BlbiIgY2FsbHMgdG8gaW5jbHVkZSBPX0JJTkFSWSBmb3IgV2luZG93cwoKV2VkIEp1bCAgNiAxNzoxNDowMyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgIzE2Njc3NyAoYW5kICMxNjk4MzgpLCBpdCB3YXMgYW4gaGV1cmlzdGljCgkgIGluIGFyZUJsYW5rcyB3aGljaCBmYWlsZWQuCgkqIHJlc3VsdC93aW5ibGFua3MueG1sKiByZXN1bHQvbm9lbnQvd2luYmxhbmtzLnhtbCB0ZXN0L3dpbmJsYW5rcy54bWw6CgkgIGFkZGVkIHRoZSBpbnB1dCBmaWxlIHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpXZWQgSnVsICA2IDEzOjQwOjIyIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogRml4ZWQgYnVnICMzMDkzMzgsIHJlcG9ydGVkIGJ5IEt1cHJpeWFub3YKCSAgQW5vdG9saWouCgkqIHRlc3Qvc2NoZW1hcy9idWczMDkzMzgqIHJlc3VsdC9zY2hlbWFzL2J1ZzMwOTMzOCo6CgkgIEFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgYWJvdmUgYnVnLgoKVHVlIEp1bCAgNSAxNjowMzowNSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGZpcnN0IHN0ZXBzIHRvd2FyZCBhIHRlc3RzdWl0ZSBkaXN0CgkqIFNBWDIuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBmaXhlZCBidWcgIzMwNzg3MAoKVHVlIEp1bCAgNSAxMjozODozNiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogcnVuc3VpdGUuYyBydW50ZXN0LmM6IFRpbnkgcG9ydGFiaWxpdHkgYWRqdXN0bWVudCBmb3Igd2luLgoJKiB3aW4zMi9NYWtlZmlsZS4qOiBBZGRlZCBydW50ZXN0LmV4ZSBhbmQgcnVuc3VpdGUuZXhlIHRvCgkgIGJlIGNyZWF0ZWQuCgpNb24gSnVsICA0IDE3OjQ0OjI2IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW5zdWl0ZS5jOiBmaXJzdCBzdGIgYXQgdW5pbXBsZW1udGVkIGRldGVjdGlvbgoJKiBydW50ZXN0LmM6IGZpeGluZyBXaW5kb3dzIGNvZGUKCk1vbiBKdWwgIDQgMTc6MTk6MzEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnN1aXRlLmM6IGZpeCBvbiBzY2hlbWFzIGVycm9yCgkqIHJ1bnRlc3QuYzogcG9ydGFiaWxpdHkgZ2xvYigpIG9uIFdpbmRvd3MKCk1vbiBKdWwgIDQgMTY6MjM6NTQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnN1aXRlLmMgcnVudGVzdC5jOiBjbGVhbnVwcywgbG9nZmlsZSBhbmQgcG9ydGFiaWxpdHkKCSogeG1sbGludC5jOiBmaXhlZCBhIG1lbW9yeSBsZWFrCgpNb24gSnVsICA0IDEzOjExOjEyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidWcgZmFpbGluZyB0byBkZXRlY3QgVVRGLTggdmlvbGF0aW9ucyBpbgoJICBDRGF0YSBpbiBwdXNoIG1vZGUuCgkqIHJlc3VsdC9lcnJvcnMvY2RhdGEueG1sKiB0ZXN0L2Vycm9ycy9jZGF0YS54bWw6IGFkZGVkIHRoZSB0ZXN0CgkgIHRvIHRoZSByZWdyZXNzaW9ucwoKTW9uIEp1bCAgNCAxMToyNjo1NyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYWRkZWQgZW5oYW5jZW1lbnQgZm9yICMzMDkwNTcgaW4geG1sbGludCBzaGVsbAoKTW9uIEp1bCAgNCAwMDo1ODo0NCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSmFtZXMgQnVyc2EgZml4aW5nIGFuIGh0bWwgcGFyc2luZwoJICBidWcgaW4gcHVzaCBtb2RlCgkqIHJlc3VsdC9IVE1ML3JlcGVhdC5odG1sKiB0ZXN0L0hUTUwvcmVwZWF0Lmh0bWw6IGFkZGVkIHRoZSB0ZXN0IHRvIHRoZQoJICByZWdyZXNzaW9uIHN1aXRlCgpTdW4gSnVsICAzIDIzOjQyOjMxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0YXBpLmMgdHJlZS5jOiBmaXhpbmcgYSBsZWFrIGRldGVjdGVkIGJ5IHRlc3RhcGkgaW4gCgkgIHhtbERPTVdyYXBBZG9wdE5vZGUsIGFuZCBmaXhpbmcgYW5vdGhlciBzaWRlIGVmZmVjdCBpbiB0ZXN0YXBpCgkgIHNlZW1zIHRvIHBhc3MgdGVzdHMgZmluZSBub3cuCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jOiB4bWxTdG9wUGFyc2VyKCkgaXMgbm8gbW9yZSBsaW1pdGVkCgkgIHRvIHB1c2ggbW9kZQoJKiBlcnJvci5jOiByZW1vdmUgYSB3YXJuaW5nCgkqIHJ1bnRlc3QuYyB4bWxsaW50LmM6IGF2b2lkIGNvbXBpbGF0aW9uIGVycm9ycyBpZiBvbmx5IHNvbWUgcGFydHMKCSAgb2YgdGhlIGxpYnJhcnkgYXJlIGNvbXBpbGVkIGluLgoKTW9uIEp1bCAgNCAwMDozOTozNSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGZpeCBhIHByb2JsZW0gd2l0aCBwcmV2aW91cyBwYXRjaCB0bwoJICB0ZXN0YXBpLmMKClN1biBKdWwgIDMgMjI6NTk6MjggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnN1aXRlLmMgcnVudGVzdC5jIHRyZWUuYzogZml4aW5nIGNvbXBpbGF0aW9ucyB3aGVuCgkgIGRpc2FibGluZyBwYXJ0cyBvZiB0aGUgbGlicmFyeSBhdCBjb25maWd1cmUgdGltZS4KClN1biBKdWwgIDMgMTg6MTc6NTggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXggYnVnIHJhaXNlZCBieSB6YW1leiBvbiBJUkMKCSogdGVzdGFwaS5jOiByZWdlbmVyYXRlZCwgc2VlbXMgdG8gcG9wLXVwIGxlYWtzIGluIG5ldyB0cmVlIGZ1bmN0aW9ucwoJKiB0cmVlLmM6IGFkZGVkIGNvbW1lbnRzIG1pc3NpbmcuCgkqIGRvYy8qOiByZWdlbmVyYXRlZAoKU3VuIEp1bCAgMyAxODowNjo1NSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdGFwaS5jIHJ1bnN1aXRlLmMgcnVudGVzdC5jOiBmaXhpbmcgIzMwNzgyMyBhbmQgYSBjb3VwbGUgb2YKCSAgYXNzb3J0ZWQgYnVncwoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sOiBmaXhlZCAKCSAgY29uZGl0aW9uYWxzIGluIGdlbmVyYXRvciB0b28KCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jLyogZWxmZ2NjaGFjay5oOiBzb21lCgkgIGNsZWFudXBzIHRvbyBhbmQgcmVidWlsdAoKU3VuIEp1bCAgMyAxNjo0MjowMCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZml4ZWQgYnVnICMzMDc1MDMgbWlzcGxhY2VkICNpZmRlZgoKU3VuIEp1bCAgMyAxNjozNDo0NyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVuc3VpdGUuYzogZXhwYW5kZWQgdGVzdAoJKiB4bWxyZWdleHAuYzogZm91bmQgYW5kIGZpeGVkIHRoZSBsZWFrIGV4cG9zZWQgYnkgTWljcm9zb2Z0IHJlZ3Rlc3RzCgpTYXQgSnVsICAyIDIzOjM4OjI0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW5zdWl0ZS5jOiBhIGJpdCBvZiBwcm9ncmVzc2VzIG9uIHhzdGMKClNhdCBKdWwgIDIgMDk6MzA6MTMgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnN1aXRlLmM6IGNvbXBsZXRlZCB0aGUgc2ltcGxlIGNoZWNrcyBmb3IgUmVsYXgtTkcgc3VpdGVzCgkgIGJhY2sgdG8gdGhlIHNhbWUgMTEgZXJyb3JzIGFzIGluIHRoZSBQeXRob24gcnVucy4KClRodSBKdW4gMzAgMTU6MDE6NTIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogY29tcGxldGUsIGNoZWNraW5nIG9uIG90aGVyIHBsYXRmb3JtcyBpcyBuZWVkZWQKCSogUkVBRE1FOiB1cGRhdGVkIAoJKiBkZWJ1Z1hNTC5jOiBmaXggYSBidWcgcmFpc2VkIGJ5IGJpbGwgb24gSVJDCgkqIHJlbGF4bmcuYzogZml4IGEgbGVhayBpbiB3ZWlyZCBjaXJjdW1zdGFuY2VzCgkqIHJ1bnN1aXRlLmMgTWFrZWZpbGUuYW06IHN0YW5kYWxvbmUgdGVzdCB0b29sIGFnYWlzbnQKCSAgdGhlIHJlZ3Jlc3Npb24gc3VpdGVzLCB3b3JrIGluIHByb2dyZXNzCgpUdWUgSnVuIDI4IDA4OjMwOjI2IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW50ZXN0LmM6IGFkZGluZyBVUkkgdGVzdHMKCk1vbiBKdW4gMjcgMjM6NTU6NTYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogYWRkaW5nIHhtbDppZAoKTW9uIEp1biAyNyAyMzoyOTozNiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiBmaW5pc2hpbmcgWFBhdGgsIGFkZGluZyBYUG9pbnRlcgoKTW9uIEp1biAyNyAxNzozOToyNyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiBhZGRpbmcgbW9yZSBjb3ZlcmFnZSwgWEluY2x1ZGUgYW5kIHN0YXJ0aW5nIFhQYXRoCgpNb24gSnVuIDI3IDE3OjAyOjE0IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBBZGRlZCBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbgoJICBmdW5jdGlvbnMgZm9yIHRoZSBET00td3JhcHBlciBjb250ZXh0LgoKTW9uIEp1biAyNyAxNTo0MTozMCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jOiBDb21tZW50ZWQgdGhlIG5ldyBmdW5jdGlvbnMgdG8gYmUgZXhwZXJpbWVudGFsLgoKTW9uIEp1biAyNyAxNDo0MToxNCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyB2YWxpZC5jOiB3b3JraW5nIHNvbWUgd2VpcmQgZXJyb3IgcmVwb3J0aW5nIHByb2JsZW0gZm9yCgkgIERURCB2YWxpZGF0aW9uLgoJKiBydW50ZXN0LmM6IGF1Z21lbnRlZCB3aXRoIERURCB2YWxpZGF0aW9uIHRlc3RzCgkqIHJlc3VsdC9WQy9PbmVJRCo6IHNsaWdodCBjaGFuZ2UgaW4gdmFsaWRhdGlvbiBvdXRwdXQuCgpNb24gSnVuIDI3IDEzOjQ0OjQxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW50ZXN0LmM6IGFkZGVkIG1vc3QgSFRNTCB0ZXN0cwoKTW9uIEp1biAyNyAxNDowNjoxMCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdGVzdC9uYW1lc3BhY2VzL3JlY29uY2lsZS90ZXN0cy54bWwKCSAgdGVzdC9uYW1lc3BhY2VzL3JlY29uY2lsZS90ZXN0cy10by1jLnhzbDogQWRkZWQgaW5pdGlhbCB0ZXN0cwoJICBmb3Igc29tZSBuZXcgRE9NLXdyYXBwZXIgaGVscGluZyBmdW5jdGlvbnMuCgpNb24gSnVuIDI3IDE0OjAxOjA2IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4c3RjL3hzdGMtdG8tcHl0aG9uLnhzbDogQ2xlYW51cC4KCSogeHN0Yy9zdW4tdGVzdC1kZWYueG1sIHhzdGMvbmlzdC10ZXN0LWRlZi54bWwgeHN0Yy9tcy10ZXN0LWRlZi54bWw6CgkgIFJlbW92ZWQsIHRob3NlIGFyZSBub3QgbmVlZGVkIGFueW1vcmUgZHVlIHRvIHRoZSBuZXcgdGVzdCBzdWl0ZS4KCk1vbiBKdW4gMjcgMTE6Mzk6NTAgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlc3VsdC8qLnNheDIgTUFrZWZpbGUuYW06IGFkZGVkIFNBWHYyIHJlZ3Jlc3Npb24gdGVzdHMgYXBwYXJlbnRseQoJICBtaXNzaW5nLgoJKiBydW50ZXN0LmM6IGFkZGVkIFNBWDEvU0FYMiBjaGVja3MuCgpNb24gSnVuIDI3IDEyOjI0OjU0IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBBZGRlZAoJICB4bWxET01XcmFwUmVjb25jaWxlTmFtZXNwYWNlcygpLCB4bWxET01XcmFwQWRvcHROb2RlKCkgYW5kCgkgIHhtbERPTVdyYXBSZW1vdmVOb2RlKCkgdG8gdGhlIEFQSS4gVGhlc2UgYXJlIGZ1bmN0aW9ucyBpbnRlbmRlZAoJICB0byBiZSB1c2VkIHdpdGggRE9NLXdyYXBwZXJzLgoKTW9uIEp1biAyNyAxMDoxNDo1NyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiBjb250aW51ZSB0byBpbmNyZWFzZSB0aGUgdGVzdHMKCk1vbiBKdW4gMjcgMDk6MjE6NDkgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogY29udGludWUgdG8gaW5jcmVhc2UgdGhlIHRlc3RzCgpNb24gSnVuIDI3IDAxOjAxOjMyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW50ZXN0LmM6IGNvbnRpbnVlIHRvIGluY3JlYXNlIHRoZSB0ZXN0cwoKU3VuIEp1biAyNiAyMDowODoyNCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCB2YWxpZC5jOiBhdm9pZCBuYW1lIGdsb2IgaW4gYWdydW1lbnRzIGFzCgkgIGl0IG1hdGNoZXMgdGhlIGdsb2IoKSByb3V0aW5lLgoJKiBydW50ZXN0LmMgTWFrZWZpbGUuYW06IGZpcnN0IHN0ZXBzIHRvd2FyZCBhIEMgcmVncmVzc2lvbiB0ZXN0CgkgIGZyYW1ld29yay4KClNhdCBKdW4gMjUgMDE6Mzc6MjIgUERUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSBkZXRlY3Rpb24gb2YKCSAgc3NfZmFtaWx5IGZvciBpcFY2LCBhcyByZXBvcnRlZCBvbiB0aGUgbWFpbGluZyBsaXN0IGJ5CgkgIERvdWcgT3JsZWFucy4KClR1ZSBKdW4gMjEgMTA6NDQ6MzQgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRlc3Qvc2NoZW1hcy9lbXB0eS12YWx1ZSogcmVzdWx0L3NjaGVtYXMvZW1wdHktdmFsdWUqOgoJICBBZGRlZCByZWdyZXNzaW9uIHRlc3RzIChmcm9tIERoeWFuZXNoKS4KClR1ZSBKdW4gMjEgMTA6MzU6NDMgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgTlVMTCB2YWx1ZXMgdG8gYmUgdmFsaWRhdGVkIGFzIGVtcHR5CgkgIHN0cmluZyB2YWx1ZXMgKHJlcG9ydGVkIGJ5IERoeWFuZXNoIHRvIHRoZSBtYWlsaW5nIGxpc3QpLgoJICBBZGp1c3RlZCB0ZXh0IGNvbmNhdGVuYXRpb24gb2YgbWl4ZWQgY29udGVudC4KCk1vbiBKdW4gMjAgMTg6MTE6MzIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyB2YWxpZC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzIGZvciByZW1vdmFsCgkgIG9mIElEIChhbmQgeG1sOmlkKQoJKiB4bWxyZWFkZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEphbWVzIFdlcnQgaW1wbGVtZW50aW5nIAoJICB4bWxUZXh0UmVhZGVyUmVhZElubmVyWG1sIGFuZCB4bWxUZXh0UmVhZGVyUmVhZE91dGVyWG1sCgpUaHUgSnVuIDE2IDE0OjM4OjIyIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIFNBWDIgdmFsaWRhdGlvbjogZ3JvdyBvZiBpbnRlcm5hbAoJICBuYW1lc3BhY2UgbGlzdCwgYXBwZW5kaW5nIG9mIGVsZW1lbnQgY2hhcmFjdGVyIGNvbnRlbnQuCgkqIHhzdGMveHN0Yy5weTogQWRkZWQgIi0tc2F4IiBvcHRpb24gZm9yIFNBWDIgdmFsaWRhdGlvbi4KCldlZCBKdW4gMTUgMTU6MzQ6NTIgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBBZGRlZCBtaXNzaW5nIGZ1bmN0aW9uIGRlc2NyaXB0aW9ucy4KCldlZCBKdW4gMTUgMTU6MjY6MTQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogaWYgc2F4MSBpcyB1c2VkIGFuZCBpbnB1dCBpcyBhIGZpbGUgdXNlIHRoZSBvbGQKCSAgQVBJIHhtbFBhcnNlRmlsZSgpCgkqIHhtbHNjaGVtYXMuYzogY2xlYW51cHMKCSogZG9jLyogdGVzdGFwaS5jIGVsZmdjY2hhY2suaDogcmVidWlsdCB0byBhZGQgcHl0aG9uIGJpbmRpbmdzCgkgIGZvciB0aGUgbmV3IGZ1bmN0aW9ucyBpbiBTY2hlbWFzLgoKV2VkIEp1biAxNSAxNDo1MDo0OCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogQWRkZWQKCSAgeG1sU2NoZW1hVmFsaWRhdGVGaWxlKCkgdG8gdGhlIHB1YmxpYyBBUEkuIFRoaXMgd2lsbCB1c2UKCSAgU0FYMi1kcml2ZW4gdmFsaWRhdGlvbi4KCldlZCBKdW4gMTUgMTE6MTE6MzggQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzL2J1ZzMwNjgwNl8xXzAgcmVzdWx0L3NjaGVtYXMvYnVnMzA2ODA2XzFfMC5lcnI6CgkgIEFkZGVkIHNjaGVtYSB0ZXN0IHJlc3VsdHMgKFRvbSBCcm93ZGVyLCBidWcgIzMwNjgwNikuCgpXZWQgSnVuIDE1IDExOjA4OjM0IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0ZXN0L3NjaGVtYXMvYnVnMzA2ODA2XzEueHNkIHRlc3Qvc2NoZW1hcy9idWczMDY4MDZfMC54bWw6CgkgIEFkZGVkIHNjaGVtYSB0ZXN0cyBzdWJtaXR0ZWQgYnkgVG9tIEJyb3dkZXIgKGJ1ZyAjMzA2ODA2KS4KClR1ZSBKdW4gMTQgMTU6MDM6MjIgUERUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXR0ZXJuLmM6IGFkanVzdGVkIGxhc3QgY2hhbmdlIHRvIHhtbENvbXBpbGVQYXRoUGF0dGVybiwKCSAgZml4ZWQgb25lIGNvbXBpbGF0aW9uIHdhcm5pbmcKClR1ZSBKdW4gMTQgMjE6MTk6MTYgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHBhdHRlcm4uYzogU29tZSBjaGFuZ2VzL2ZpeGVzIHRvIHRoZSBzdHJlYW1pbmcgZXZhbHVhdGlvbi4KCSogeG1sc2NoZW1hcy5jOiBBIGJpdCBvZiBzdXBwb3J0IGZvciBwYXJzaW5nIHRoZSBzY2hlbWEgZm9yCgkgIHNjaGVtYS4gRml4ZWQgYXR0cmlidXRlIGRlcml2YXRpb24gd2hlbiB0aGUgdXNlIGlzCgkgICJwcm9oaWJpdGVkIiBhbmQgd2FzICJvcHRpb25hbCIuIEZpeGVkIGFuIGF0dHJpYnV0ZSBjb25zdHJ1Y3Rpb24KCSAgYnVnLCBhIGxlZnQtb3ZlciBmcm9tIHRoZSB0aW1lLCB3aGVyZSA8Y29tcGxleENvbnRlbnQ+LAoJICA8ZXh0ZW5zaW9uPiwgZXRjLiB3aGVyZSBjcmVhdGVkIGFzIHN0cnVjdHMuCgpUdWUgSnVuIDE0IDEyOjM1OjEyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiByZW1vdmVkIGEgcmVkdW5kYW50IGluY2x1ZGUgcGF0aAoKTW9uIEp1biAxMyAxNDo1ODozMyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHN0Yy9NYWtlZmlsZS5hbTogU29tZSBtb3JlIGFkanVzdG1lbnRzLgoKTW9uIEp1biAxMyAxNDozNTo1OSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHN0Yy9NYWtlZmlsZS5hbTogQ2hhbmdlZCB0ZXN0IGV4dHJhY3Rpb24gcHJvY2Vzcywgc2luY2Ugc29tZQoJICBib3hlcyBkb24ndCBrbm93IGFib3V0ICJ0YXIgLS1zdHJpcC1wYXRoIi4KCk1vbiBKdW4gMTMgMTM6Mzk6NDMgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYSBidWcgZXhwb3NlZCBieSBSb2IgUmljaGFyZHMgaW4gdGhlIG1haWxpbmctbGlzdAoJKiByZXN1bHQvL2NvbXBhcmUwKiB0ZXN0Ly9jb21wYXJlMCo6IGFkZGVkIHRoZSByZWdyZXNzaW9uIHRlc3QgaW4KCSAgdGhlIHN1aXRlIGFzIHRoaXMgd2VudCB1bm5vdGljZWQgIQoKV2VkIEp1biAgOSAxMTowNzo0MiBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhdHRlcm4uYywgeHBhdGguYywgaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oOiBGdXJ0aGVyCgkgIGVuaGFuY2VtZW50IGZvciBYUGF0aCBzdHJlYW1pbmcsIGNvbnNvbGlkYXRlZCB3aXRoCgkgIHNjaGVtYXMgdXNhZ2Ugb2YgcGF0dGVybi5jLiAgQWRkZWQgYSBuZXcgZW51bQoJICB4bWxQYXR0ZXJuRmxhZ3MuCgkqIGRvYy8qLCB0ZXN0YXBpLmMsIGVsZmdjY2hhY2suaDogdXBkYXRlZCB0byByZWZsZWN0IG5ldwoJICBlbnVtLgoJKiB0ZXN0L1hQYXRoL3Rlc3RzL21peGVkcGF0LCB0ZXN0L1hQYXRoL2RvY3MvbWl4ZWQsCgkgIHJlc3VsdC9YUGF0aC9taXhlZHBhdDogYWRkZWQgcmVncmVzc2lvbiB0ZXN0IGZvciBwcm9ibGVtcwoJICByZXBvcnRlZCBpbiBidWczMDYzNDgKClRodSBKdW4gIDkgMTY6NTE6MzEgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBDaGFuZ2VkIG5vbi1wcmVmaXhlZCBRTmFtZXMgdG8gYmUgYm91bmQgdG8gYQoJICBkZWZhdWx0IG5hbWVzcGFjZSBpZiBleGlzdGVudC4KClRodSBKdW4gIDkgMTU6MTE6MzggQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBGaXhlZCBhIGJ1ZyB3aGljaCBJIGludmVudGVkOiBoZXhCaW5hcnkncyBzdHJpbmcKCSAgdmFsdWVzIHdlcmUgbm90IGR1cGxpY2F0ZWQgY29ycmVudGx5IHdoZW4gY3JlYXRpbmcgYSBjb21wdXRlZCB2YWx1ZQoJICBpbiB4bWxTY2hlbWFWYWxBdG9taWNUeXBlLgoKVGh1IEp1biAgOSAxMzoyMDo1NyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIHJlc3VsdC9zY2hlbWFzL2luY2x1ZGUxXzBfMC5lcnI6CgkgIEZpeGVkIGFuIGF0dHJpYnV0ZSBmaXhlZC9kZWZhdWx0IHZhbHVlIGNvbnN0cmFpbnQgZXJyb3IuCgpUaHUgSnVuICA5IDEyOjUxOjIzIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiByZXN1bHQvc2NoZW1hcy8qOiBBZGFwdGVkIHJlZ3Jlc3Npb24gdGVzdCByZXN1bHRzLgoKVGh1IEp1biAgOSAxMjoyMjo0NSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogQ2hhbmdlZCB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzCgkgIHRvIGJlIGFibGUgdG8gd29yayBpbiBzdHJlYW1pbmcgbW9kZS4gU29tZSBkYXRhdHlwZSBmaXhlcywKCSAgZXNwZWNpYWxseSBmb3IgbGlzdCBhbmQgdW5pb24gdHlwZXMuIER1ZSB0byB0aGUgY2hhbmdlcyB0aGUKCSAgZXJyb3IgcmVwb3J0IG91dHB1dCBoYXMgY2hhbmdlZCBpbiBtb3N0IGNhc2VzLiBJbml0aWFsIG1pZ3JhdGlvbiB0bwoJICBmdW5jdGlvbnMgdXNhYmxlIGJ5IGJvdGgsIHRoZSBwYXJzZXIgYW5kIHRoZSB2YWxpZGF0b3IuIFRoaXMgc2hvdWxkCgkgIGVhc2UgYSB5ZXQtdG8tY29tZSBYUyBjb25zdHJ1Y3Rpb24gQVBJIGluIHRoZSBsb25nIHRlcm0gYXMgd2VsbC4KClRodSBKdW4gIDkgMTA6MTY6MTEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFsY29sbSBSb3dlIHRvIGF2b2lkIG5hbWVzcGFjZQoJICB0cm91YmxlcyBvbiByb2xsYmFjayBwYXJzaW5nIG9mIGVsZW1lbnRzIHN0YXJ0ICMzMDQ3NjEKCSogdGVzdC9uc2NsZWFuLnhtbCByZXN1bHQvbm9lbnQvbnNjbGVhbi54bWwgcmVzdWx0L25zY2xlYW4ueG1sKjoKCSAgYWRkZWQgaXQgdG8gdGhlIHJlZ3Jlc3Npb24gdGVzdHMuCgpUaHUgSnVuICA5IDAwOjMzOjUwIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzCgkgIGZvciB4bWw6c3BhY2UgYW5kIHhtbDpsYW5nIGhhbmRsaW5nIHdpdGggU0FYMiBhcGkuCgpXZWQgSnVuICA4IDE5OjQxOjM4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNb3J0ZW4gV2VsaW5kZXIsIGNsb3NpbmcgYnVnICMzMDY5MDEKCSAgb24gY29tcGlsaW5nIHN1YnNldHMgb2YgdGhlIGxpYnJhcnkKCldlZCBKdW4gIDggMTk6MTE6NDIgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhzdGMvTWFrZWZpbGUuYW0geHN0Yy5weSB4c3RjLXRvLXB5dGhvbi54c2w6IEFkYXB0ZWQgdGhlCgkgIFhTIHRlc3RzIHRvIHVzZSB0aGUgbmV3IHJlbGVhc2Ugb2YgdGVzdHMgYW5kIHRlc3QtZGVmaW5pdGlvbnMuCgoyMDA1LTA2LTA3ICBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBmaXggcmVuZGVyaW5nIG9mIGF0dHJpYnV0ZXMgd2hlbiBwYXJlbnQgbm9kZQoJaXMgbm90IGluIHRoZSBub2RlIHNldAoKMjAwNS0wNi0wNiAgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGMxNG4uYzogZml4ZWQgeG1sIGF0dHJpYnV0ZXMgcHJvY2Vzc2luZyBidWcgaW4gZXhjIGMxNG4KCSogeG1sbGludC5jOiBhZGRlZCAtLWV4Yy1jMTRuIGNvbW1hbmQgbGluZSBvcHRpb24KCk1vbiBKdW4gIDYgMDY6NDM6MzMgUERUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jLCBwYXR0ZXJuLmM6IEVuaGFuY2VkIHhtbFhQYXRoUnVuU3RyZWFtRXZhbCwgZml4ZWQKCSAgaGFuZGxpbmcgb2YgZGVwdGgvbGV2ZWwgZm9yIGNhc2VzIGxpa2UgdW5pb24gb3BlcmF0b3IKCSAgKGJ1ZyAjMzA2MzQ4IHJlcG9ydGVkIGJ5IEJvYiBTdGF5dG9uKS4gIEFsc28gZW5oYW5jZWQKCSAgc2V2ZXJhbCBjb21tZW50cyB0aHJvdWdob3V0IHBhdHRlcm4uYy4KCSogZG9jL2FwaWJ1aWxkLnB5OiBmaXhlZCBwcm9ibGVtIGluIGhhbmRsaW5nIG9mCgkgICdzaWduZWQnIGRlY2xhcmF0aW9uLiAgUmVidWlsdCB0aGUgZG9jcy4KCSAgClR1ZSBNYXkgMzEgMjA6MzU6MjcgUERUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBFbmhhbmNlZCBoYW5kbGluZyBvZiB4bWw6YmFzZSBmb3IgaW5jbHVkZWQKCSAgZWxlbWVudHMsIGZpeGluZyBidWdzIDE2OTIwOSBhbmQgMzAyMzUzLgoKV2VkIE1heSAyNSAxODo1OTo1MyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBmYWNldCBlcnJvcnMgdG8gYmUgY2hhbm5lbGxlZCBiYWNrIGZvcgoJICB1bmlvbiB0eXBlIG1lbWJlcnM7IGZhY2V0LXZhbGlkYXRpb24gd2lsbCBzdG9wIG5vdyBvbiB0aGUKCSAgZmlyc3QgZXJyb3IuIFJlcG9ydGVkIGJ5IEdVWSBGYWJyaWNlIHRvIHRoZSBtYWlsaW5nLWxpc3QuCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBDaGFuZ2VkIHRvIGlnbm9yZSBsZW5naC1yZWxhdGVkIGZhY2V0CgkgIHZhbGlkYXRpb24gZm9yIFFOYW1lcyBhbmQgTk9UQVRJT05zIGFzIHByb3Bvc2VkIGJ5IHRoZQoJICBzY2hlbWEgcGVvcGxlLgoJKiB0ZXN0L3NjaGVtYXMvdW5pb24yKiByZXN1bHQvc2NoZW1hcy91bmlvbjIqOiBBZGRlZAoJICByZWdyZXNzaW9uIHRlc3RzIGZvciB1bmlvbiB0eXBlcyAoYnkgR1VZIEZhYnJpY2UpLgoKRnJpIE1heSAyMCAyMDo0ODowOCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyayBWYWtvYyBmaXhpbmcgc2F2aW5nIG9mCgkgIENEQVRBIHdpdGggTlVMTCBjb250ZW50LgoKVGh1IE1heSAxMiAxNToxNDoyNiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IENoYW5nZWQgdGhlIFZBTElEX1RaTyBtYWNybyB0byByZXN0cmljdAoJICB0aGUgdGltZXpvbmUgdG8gLTg0MCB0byA4NDAuCgpUaHUgTWF5IDEyIDE1OjA1OjExIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogQXBwbGllZCBwYXRjaCBmcm9tIFN0ZXZlIE5haXJuIChidWcgIzMwMzY3MCkKCSAgZm9yICJzaWduZWQgaW50IiBvZiB0aGUgZGF0ZS10aW1lIHRpbWV6b25lIGZpZWxkLiBTaWxlbmNlZAoJICBhIHdhcm5pbmcuCgpXZWQgTWF5IDExIDIwOjA0OjA5IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZm9yIHJlcGxhY2VOb2RlIGZyb20gQnJlbnQgSGVuZHJpY2tzCgpUdWUgTWF5IDEwIDE3OjI3OjUyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGJ1ZyAjMzAzNjgyIG9mIGEgbGVhayByZXBvcnRlZCBieSBNYWxjb2xtIFJvd2UKClR1ZSBNYXkgMTAgMTE6NTA6MTYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RhcGkuYzogYXBwbGllZCBwYXRjaCBmcm9tIFN0ZXZlIE5haXJuIHRvZiBmaXggdGhlIGNvbXBpbGF0aW9uCgkgIHByb2JsZW0gZXhwb3NlZCBpbiBidWcgIzMwMzY0MAoKVHVlIE1heSAxMCAxMToxMToyNiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdGVzdC9zY2hlbWFzL2J1ZzMwMzU2Nl8xKiByZXN1bHQvc2NoZW1hcy9idWczMDM1NjZfMV8xKjoKCSAgQWRkZWQgcmVncmVzc2lvbiBhIHRlc3QgcHJvdmlkZWQgYnkgSGVpa28gT2JlcmRpZWsgKGJ1ZyAjMzAzNTY2KS4KCk1vbiBNYXkgIDkgMTc6NTY6NTggQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHBhdHRlcm4uYzogQ2hhbmdlZCB0aGUgWFBhdGggIi4iIHRvIHJlc29sdmUgb25seSBvbiB0aGUgZmlyc3QKCSAgbGV2ZWwgZm9yIFhNTCBTY2hlbWEgSURDcyAoYnVnICMzMDM1NjYgcmVwb3J0ZWQgYnkgSGVpa28gT2JlcmRpZWspLgoJICBUaGlzIHNob3VsZCBub3QgYWZmZWN0IHBhdHRlcm4tbGlrZSByZXNvbHV0aW9uIG9uIGV2ZXJ5IGxldmVsLgoKU3VuIE1heSAgOCAxMzozNTozOSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGZpeGVkICMxNjk2MzAgc2VnZmF1bHQgaW4geG1sTWVtRGlzcGxheQoKRnJpIE1heSAgNiAxMzo0MDowMyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jOiBmaXhpbmcgYnVnICMzMDMwNjggaW5jcmVhc2luZyB0aGUgbmFub2Z0cCBidWZmZXIuCgkqIGRvYy9hcGlidWlsZC5weTogZml4ZWQgX19hdHRyaWJ1dGUoKSBwYXJzaW5nIHByb2JsZW0KCSogZG9jLyogdGVzdGFwaS5jOiByZWdlbmVyYXRlZCB0aGUgZGVzY3JpcHRpb25zIGFuZCBkb2NzLgoKV2VkIE1heSAgNCAxMToxNjowMCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIHRocmVhZHMuYzogb24gbGludXgvZ2NjIHVzZSB3ZWFrIGRlZmluaXRpb25zCgkgIHRvIGF2b2lkIGxpbmtpbmcgd2l0aCBwdGhyZWFkIGxpYnJhcnkgb24gbm9uLXRocmVhZGVkIGVudmlyb25tZW50cy4KCSogeHBhdGguYzogYXBwbGllZCBwYXRjaCBmcm9tIE1hcmsgVmFrb2Mgdy5yLnQuIGEgYnVnZ3kgbmFtZXNwYWNlCgkgIGxpc3QgYWxsb2NhdGlvbi4KCkZyaSBBcHIgMjkgMTE6Mjc6MzcgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHBhcnNlci5jOiBGaXhlZCBhIHRlc3QgZm9yIGR1cGxpY2F0ZSBhdHRyaWJ1dGVzOiBOb24tcHJlZml4ZWQKCSAgYXR0cmlidXRlcyB3ZXJlIHRyZWF0ZWQgYXMgYmVpbmcgYm91bmQgdG8gdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgoKVHVlIEFwciAxOSAxNzo1MTozMiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IEZpeGVkIGRhdGUtdGltZSByZWxhdGVkIHZhbGlkYXRpb24KCSAgKHJlcG9ydGVkIGJ5IERhdmlkIENyb3NzbGV5LCBidWcgIzMwMDU3NikuCgpUdWUgQXByIDE5IDE2OjU1OjQwIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgeG1scmVnZXhwLmM6IFJlbW92ZWQgNSB1bm5lY2Vzc2FyeQoJICBkZXJlZmVyZW5jZXMgKHJlcG9ydGVkIGJ5IEFuZHJpeSwgYnVnICMzMDEwNzQpLgoKVHVlIEFwciAxOSAyMjozMzoxOCBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IEFkZGVkIHNvbWUgY29kZSB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93IGZvcgoJICBjZWlsLCBmbG9vciBhbmQgcm91bmQgZnVuY3Rpb25zIChidWcgMzAxMTYyKQoKVHVlIEFwciAxOSAxMzoyMTo1NCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBSZW1vdmVkIHdvcmthcm91bmQgZm9yIGJ1ZyAjMTcyMjE1LCBzaW5jZSBpdAoJICBkb2VzIG1vcmUgaGFybSBpbiBzb21lIHNjZW5hcmlvcy4gQWRkZWQgc29tZSBvZiB0aGUKCSAgIlBhcnRpY2xlIFJlc3RyaWN0aW9uIE9LIiBjb25zdHJhaW50cyAtIG5vdCB5ZXQgZW5hYmxlZC4JICAKCk1vbiBBcHIgMTggMTM6MDI6NTUgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzL2NoYW5nZWxvZzA5Myo6IEFkZGVkIHRlc3QgcmVzdWx0cy4KCk1vbiBBcHIgMTggMTI6NDI6MTQgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgb3V0cHV0IG9mIGNhbm9uaWNhbCB2YWx1ZXMgaW4KCSAgaWRlbnRpdHktY29uc3RyYWludCBlcnJvciBtZXNzYWdlcy4KCSogeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6CgkgIEFkZGVkIHhtbFNjaGVtYUdldENhbm9uVmFsdWVXaHRzcCgpIHRvIHRoZSBBUEkuCgkgIEZ1cnRoZXIgZW5oYW5jZW1lbnQgb2YgdGhlIGNhbm9uaWNhbCB2YWx1ZQoJICBjb252ZXJzaW9uLgoJKiB0ZXN0L3NjaGVtYXMvY2hhbmdlbG9nMDkzXzAuKjogQWRkZWQgdGVzdCB3aXRoIGFuIFhTRAoJICBzdWJtaXR0ZWQgYnkgUmFuZHkgSi4gUmF5LgoKRnJpIEFwciAxNSAwOTozMzoyMSBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IEFwcGxpZWQgRGFuaWVsJ3MgZml4IGZvciBtZW1vcnkgbGVhayBpbiBkdGQKCSAgcHJlZml4IChidWcgMzAwNTUwKS4KCSogeHBhdGguYzogbWlub3IgY2hhbmdlIHRvIGNvbW1lbnQgb25seQoKVGh1IEFwciAxNCAyMDo1Mjo0MSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGFkZGVkIHRoZSBjYWxsIHRvIHRoZSBicmVha3BvaW50IHJvdXRpbmUKCSAgd2hlbiBhIG1vbml0b3JlZCBibG9jayBpcyByZWFsbG9jYXRlZCBvciBmcmVlZAoKV2VkIEFwciAxMyAwNTo1NTo1MSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2h0dHAuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFyb24gU3RhbnN2aWsgZm9yIGJ1ZyAjMTcyNTI1CgkgIGFib3V0IEhUVFAgcXVlcnkgc3RyaW5nIHBhcmFtZXRlciBiZWluZyBsb3N0CgpUdWUgQXByIDEyIDA0OjAzOjMyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogYXBwbGllZCBwYXRjaCBmcm9tIEJyZW50IEhlbmRyaWNrcwoJICBhZGRpbmcgbmFtZXNwYWNlIHJlbW92YWwgYXQgdGhlIHB5dGhvbiBsZXZlbCAjMzAwMjA5CgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvbnNkZWwucHk6IGFkZGVkIHRoZSByZWdyZXNzaW9uCgkgIHRlc3QKClN1biBBcHIgMTAgMDk6MDM6MjIgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBzZXZlcmFsIHBsYWNlcyB3aGVyZSBtZW1vcnkgY2xlYW51cCB3YXMgbm90CgkgIHByb3Blcmx5IGRvbmUgYWZ0ZXIgYW4gZXJyb3Igd2FzIGRldGVjdGVkIChwcm9ibGVtIHdhcwoJICByZXBvcnRlZCBvbiB0aGUgbWFpbGluZyBsaXN0IGJ5IFBhd2VsIFBhbHVjaGEpCgpGcmkgQXByICA4IDIxOjU4OjA0IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEFkZGVkIHN1YnN0aXR1dGlvbiBncm91cCBjb25zdHJhaW50czsgY2hhbmdlZAoJICB0aGUgYnVpbGQgb2YgdGhlIHByZS1jb21wdXRlZCBzdWJzdGl0dXRpb24gZ3JvdXBzLiBDaGFubmVsZWQKCSAgZXJyb3JzIGR1cmluZyB4c2kgYXNzZW1ibGluZyBvZiBzY2hlbWFzIHRvIHRoZSB2YWxpZGF0aW9uCgkgIGNvbnRleHQuIEZpeGVkIGEgYmlnIG1lbW9yeSBsZWFrLCB3aGljaCBvY2N1cmVkIHdoZW4gdXNpbmcKCSAgSURDczogdGhlIHByZWNvbXB1dGVkIHZhbHVlIG9mIGF0dHJpYnV0ZXMgd2FzIG5vdCBmcmVlZCBpZgoJICB0aGUgYXR0cmlidXRlIGRpZCBub3QgcmVzb2x2ZSB0byBhbiBJREMgZmllbGQgKGRpc2NvdmVyZWQKCSAgd2l0aCB0aGUgaGVscCBvZiBSYW5keSBKLiBSYXkncyBzY2hlbWEsIHBvc3RlZCB0byB0aGUKCSAgeG1sc2NoZW1hLWRldiBtYWxpbmcgbGlzdCkuCgpGcmkgQXByICA4IDEzOjIyOjAxIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEFkZGVkICJQYXJ0aWNsZSBjb3JyZWN0IDIiIHRvIHBhcnNpbmcgb2YgbW9kZWwgZ3JvdXBzLgoJICBBZGRlZCBoYW5kbGluZyBzdWJzdGl0dXRpb24gZ3JvdXBzIGluc2lkZSA8Y2hvaWNlPiBhbmQgPHNlcXVlbmNlPjsKCSAgZm9yIDxhbGw+IHRoaXMgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIENoYW5nZWQgY2lyY3VsYXIgY2hlY2tzIGZvcgoJICBtb2RlbCBncm91cHMgZGVmaW5pdGlvbnMuICJtZW1iZXJUeXBlcyIgYXJlIHByb2Nlc3NlZCBhdCBkaWZmZXJlbnQKCSAgbGV2ZWxzIG5vdzogY29tcG9uZW50IHJlc29sdXRpb24gZmlyc3QsIGNvbnN0cnVjdGlvbiBsYXRlcjsgdGhpcwoJICBnb2VzIGhhbmQgaW4gaGFuZCB3aXRoIGEgZ2xvYmFsIGNoYW5nZSB0byBoYW5kbGUgY29tcG9uZW50CgkgIHJlc29sdXRpb24gaW4gYSBkaXN0aW5jdCBwaGFzZS4gRml4ZWQgaW52YWxpZCBkZWZhdWx0IHZhbHVlcyBmb3IKCSAgZWxlbWVudHMgdG8gbWFyayB0aGUgc2NoZW1hIGFzIGludmFsaWQ7IHRoaXMganVzdCByZXN1bHRlZCBpbiBhbgoJICBlcnJvciByZXBvcnQgcHJldmlvdXNseSwgYnV0IHRoZSBzY2hlbWEgd2FzIGhhbmRsZWQgYXMgdmFsaWQuCgkgIFNlcGFyYXRlZCB0aGUgYXNzaWdubWVudCBvZiB0aGUgbW9kZWwgZ3JvdXBzIHRvIHJlZmVyZW5jaW5nCgkgIG1vZGVsIGdyb3VwIGRlZmluaXRpb24gcmVmZXJlbmNlcyAoaS5lLiBwYXJ0aWNsZXMpOyB0aGlzIHdhcwoJICBuZWVkZWQgdG8gcGVyZm9ybSB0aGUgY2lyY3VsYXJpdHkgY2hlY2sgZm9yIG1vZGVsIGdyb3VwIGRlZmluaXRpb25zLgoJICBBZGRlZCAiRWxlbWVudCBEZWNsYXJhdGlvbiBQcm9wZXJ0aWVzIENvcnJlY3QgKGUtcHJvcHMtY29ycmVjdCkiCgkgIGNvbnN0cmFpbnRzLiBTZXBhcmF0ZWQgY29tcG9uZW50IHJlc29sdXRpb24gZm9yIHNpbXBsZS9jb21wbGV4CgkgIHR5cGVzLgoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IEFkZGVkIGEgZmxhZyBmb3Igc3Vic3RpdHV0aW9uCgkgIGdyb3VwIGhlYWRzLgkgIAoKV2VkIEFwciAgNiAyMzoxNDowMyBDRVNUIDIwMDUgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLio6IG1ha2UgaW5zdGFsbCBjbGVhbnVwCgpXZWQgQXByICA2IDIyOjQyOjIzIENFU1QgMjAwNSBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IGZpeGVkIG1pbmd3IGNvbXBpbGF0aW9uCgkqIHRlc3RNb2R1bGUuYzogcmVtb3ZlZCBtaW5ndyB3YXJuaW5ncwoKV2VkIEFwciAgNiAyMTo1OToxMSBDRVNUIDIwMDUgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIC5jdnNpZ25vcmU6IGFkZGVkIEVjbGlwc2UgcHJvamVjdCBmaWxlcyB0byBpZ25vcmUgbGlzdAoKV2VkIEFwciAgNiAxNjowODoxMCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIGJ1ZyBpbiBsYW5nKCkgYXMgcmFpc2VkIGJ5IEVsbGlvdHRlIFJ1c3R5IEhhcm9sZAoJKiByZXN1bHQvWFBhdGgvdGVzdHMvbGFuZ3NpbXBsZSB0ZXN0L1hQYXRoL3Rlc3RzL2xhbmdzaW1wbGUKCSAgdGVzdC9YUGF0aC9kb2NzL2xhbmc6IGFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0CgpUdWUgQXByICA1IDIzOjQ4OjM1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IGFwcGxpZWQgZml4IGZyb20gUm9iIFJpY2hhcmRzIHRvIGNvbXBpbGUgb24gV2luZG93cy4KClR1ZSBBcHIgIDUgMTc6MDI6NTggQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgIlR5cGUgRGVyaXZhdGlvbiBPSyAoQ29tcGxleCkiIGNvbnN0cmFpbnRzCgkgIGFuZCBhbmNob3JlZCB0aGVtIGluIHRoZSAiRWxlbWVudCBMb2NhbGx5IFZhbGlkIChFbGVtZW50KSIKCSAgY29uc3RyYWludHMuIFRoaXMgcmVzdHJpY3RzIHRoZSB0eXBlIHN1YnN0aXR1dGlvbiB2aWEgInhzaTp0eXBlIi4KClR1ZSBBcHIgIDUgMTM6MTA6MDYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogcGF0Y2ggZnJvbSBNYXR0aGV3IEJ1cmdlc3MgdG8gaW1wcm92ZSBzb21lIHNjaGVtYXMKCSAgZmFjZXRzIHZhbGlkYXRpb24gbWVzc2FnZXMuCgpTYXQgQXByICAyIDEyOjQ4OjQxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKiBjb25maWd1cmUuaW4gTkVXUzogcHJlcGFyaW5nIHJlbGVhc2UgMi42LjE5LCB1cGRhdGVkIGRvY3MgYW5kCgkgIHJlYnVpbGRpbmcuCgpTYXQgQXByICAyIDEzOjI3OjMyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4c3RjL01ha2VmaWxlLmFtOiBpbnRlZ3JhdGVkIGZpeHVwLXRlc3RzLnB5CgpGcmkgQXByICAxIDE5OjE0OjE4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgYSBsYWNrIG9mIGNvbW1lbnQgYW5kIG1pc3NpbmcgdGVzdCBmb3IKCSAgYSBwb2ludGVyIGluIHRoZSBBUEkuCgpGcmkgQXByICAxIDE3OjU0OjIyIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4c3RjL2ZpeHVwLXRlc3RzLnB5OiBBIHRpbnkgc2NyaXB0IHRvIGZpeHVwIHNvbWUgb2YgdGhlIHNjaGVtYQoJICBmaWxlcyB1c2VkIGZvciB0aGUgdGVzdHMuCgpGcmkgQXByICAxIDE3OjMzOjUwIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oCgkgIHJlc3VsdC9zY2hlbWFzL3NyYy1lbGVtZW50Mi0qLmVyciByZXN1bHQvc2NoZW1hcy9lbGVtZW50LSouZXJyOgoJICBDb21taXR0aW5nIGFnYWluLCBzaW5jZSB0aGUgQ1ZTIHNlcnZlciBhYm9ydGVkLgoKRnJpIEFwciAgMSAxNToyOToyNyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IENvcnJlY3RlZCAnbGVuZ3RoJyBmYWNldCB2YWxpZGF0aW9uIGZvcgoJICBRTmFtZXMgYW5kIG5vdGF0aW9ucy4gQ29ycmVjdGVkIHhtbFNjaGVtYUdldENhbm9uVmFsdWU6IHNvbWUKCSAgZGF0YSB0eXBlcyBkaWQgbm90IHJldHVybiBhIHZhbHVlIGlmIGFscmVhZHkgaW4gbm9ybWFsaXplZAoJICBmb3JtLgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOgoJICBFbGltaW5hdGVkIGNyZWF0aW9uIG9mIHN0cnVjdHMgZm9yIDxyZXN0cmljdGlvbj4sIDxleHRlbnNpb24+LAoJICA8c2ltcGxlQ29udGVudD4sIDxjb21wbGV4Q29udGVudD4sIDxsaXN0PiBhbmQgPHVuaW9uPjogdGhlCgkgIGluZm9ybWF0aW9uIGlzIG5vdyBzZXQgZGlyZWN0bHkgb24gdGhlIGNvcnJlc3BvbmRpbmcgc2ltcGxlLwoJICBjb21wbGV4IHR5cGUuIEFkZGVkIHNvbWUgbW9yZSBjb21wbGV4IHR5cGUgY29uc3RyYWludHMuCgkgIEFkZGVkIGZhY2V0IGRlcml2YXRpb24gY29uc3RyYWludHMuIEludHJvZHVjZWQgInBhcnRpY2xlIgoJICBjb21wb25lbnRzLCB3aGljaCBzZWVtIHRvIGJlIHJlYWxseSBuZWVkZWQgaWYgYXBwbHlpbmcKCSAgY29uc3RyYWludHMuIENvcnJlY3RlZC9jaGFuZ2Ugc29tZSBvZiB0aGUgcGFyc2luZyBmdW5jdGlvbnMuCgkgIFRoaXMgaXMgYWxsIGEgYml0IHNjYXJ5LCBzaW5jZSBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgY29kZS4KCSogcmVzdWx0L3NjaGVtYXMvc3JjLWVsZW1lbnQyLSouZXJyIHJlc3VsdC9zY2hlbWFzL2VsZW1lbnQtKi5lcnI6CgkgIEFkYXB0ZWQgcmVncmVzc2lvbiB0ZXN0IHJlc3VsdHMuCgpGcmkgQXByICAxIDE2OjA3OjU5IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2VsZmdjY2hhY2sueHNsOiByZXZhbXBlZCB0aGUgZWxmZ2NjaGFjay5oIAoJICBmb3JtYXQgdG8gY29wZSB3aXRoIGdjYzQgY2hhbmdlIG9mIGFsaWFzaW5nIGFsbG93ZWQgc2NvcGVzLCBoYWQKCSAgdG8gYWRkIGV4dHJhIGluZm9ybWF0aW9ucyB0byBkb2MvbGlieG1sMi1hcGkueG1sIHRvIHNlcGFyYXRlCgkgIHRoZSBoZWFkZXIgZnJvbSB0aGUgYyBtb2R1bGUgc291cmNlLgoJKiAqLmM6IHVwZGF0ZWQgYWxsIGMgbGlicmFyeSBmaWxlcyB0byBhZGQgYSAjZGVmaW5lIGJvdHRvbV94eHgKCSAgYW5kIHJlaW1wb3J0IGVsZmdjY2hhY2suaCB0aGVyZWFmdGVyLCBhbmQgYSBiaXQgb2YgY2xlYW51cHMuCgkqIGRvYy8vKiB0ZXN0YXBpLmM6IHJlZ2VuZXJhdGVkIHdoZW4gcmVidWlsZGluZyB0aGUgQVBJCgpUaHUgTWFyIDMxIDE3OjIwOjMyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IGZpeGVkIGJ1ZyByZXBvcnRlZCBieSBQZXRyIFBhamFzLCBpbiB0aGUgYWJzZW5jZSBvZgoJICBlbmNvZGluZyBVVEYtOCBzaG91bGQgcmVhbGx5IGJlIGFzc3VtZWQuIFRoaXMgbWF5IGJyZWFrIGlmIAoJICB0aGUgSFRUUCBoZWFkZXJzIGluZGljYXRlcyBmb3IgZXhhbXBsZSBJU08tODg1OS0xIHNpbmNlIHRoaXMKCSAgdGhlbiBiZWNvbWVzIGEgd2VsbCBmb3JtZWRuZXNzIGVycm9yLgoKVGh1IE1hciAzMSAxNjo1NzoxOCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkICMxNzIyNjAgcmVkdW5kYW50IGFzc2lnbm1lbnQuCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBmaXhlZCB4bWxTQVhQYXJzZURvYygpIGFuZCAKCSAgeG1sUGFyc2VEb2MoKSBzaWduYXR1cmVzICMxNzIyNTcuCgpUaHUgTWFyIDMxIDE2OjExOjEwIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IHBvdGVudGlhbCBjcmFzaCBpZiBjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UKCSAgaXMgTlVMTCBhcyByZXBvcnRlZCBieSBidWcgIzE3MjI1NQoKVGh1IE1hciAzMSAxNTozNjo1MiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBhIHByb2JsZW0gaW4gUmVsYXgtTkcgdmFsaWRhdGlvbiAjMTU5OTY4CgkqIHRlc3QvcmVsYXhuZy9saXN0LiogcmVzdWx0L3JlbGF4bmcvbGlzdF8qOiBhZGRlZCB0aGUgdGVzdAoJICB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZQoKVGh1IE1hciAzMSAxMzowNjowMiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBidWcgIzE2ODUwNAoKVGh1IE1hciAzMSAxMjoyMjo1NCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbGxpbnQuYwoJICBtYWNvcy9zcmMvY29uZmlnLW1hYy5oOiB1c2UgWE1MX1NPQ0tMRU5fVCBpbnN0ZWFkIG9mIFNPQ0tMRU5fVAoJICBzaW5jZSBhcHBhcmVudGx5IElCTSBjYW4ndCBhdm9pZCBicmVha2luZyBjb21tb24gZGVmaW5lcyAjMTY2OTIyCgpUaHUgTWFyIDMxIDEwOjQxOjQ1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXggdW5pdGluaWFsaXplZCB2YXJpYWJsZSBpbiBub3QgZnJlcXVlbnRseSB1c2VkCgkgIGNvZGUgYnVnICMxNzIxODIKClRodSBNYXIgMzEgMDA6NDU6MTggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5weTogYW5vdGhlciBwYXRjaCBmcm9tIEJyZW50CgkgIEhlbmRyaWNrcyB0byBhZGQgbmV3IGhhbmRsZXJzIHdpdGggdGhlIHZhcmlvdXMgdmFsaWRpdHkgY29udGV4dHMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy92YWxpZERURC5weQoJICBweXRob24vdGVzdHMvdmFsaWRSTkcucHkgcHl0aG9uL3Rlc3RzL3ZhbGlkU2NoZW1hcy5weTogYWxzbyAKCSAgYWRkZWQgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgaGUgcHJvdmlkZWQKCldlZCBNYXIgMzAgMDk6Mzk6MjcgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQnJlbnQKCSAgSGVuZHJpY2tzIHRvIGF2b2lkIGxlYWsgaW4gcHl0aG9uIGJpbmRpbmdzIHdoZW4gdXNpbmcgc2NoZW1hcwoJICBlcnJvciBoYW5kbGVycy4KClR1ZSBNYXIgMjkgMjI6Mjk6MjggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGluZyBidWcgMTY4MTk2LCA8YSBuYW1lPSIiPiBtdXN0IGJlIFVSSSBlc2NhcGVkIHRvbwoKU3VuIE1hciAyNyAxMzoyNDoyNCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBjbGVhbnVwIG9mIHRoZSBQcm9wIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB4bWxOZXdOb2RlRWF0TmFtZQoJICBieSBSb2IgUmljaGFyZHMKClRodSBNYXIgMjQgMTk6MDE6MjIgUFNUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW50ZXN0LnB5LCB0ZXN0YXBpLmM6IGZpeGVkIHByb2JsZW0gd2l0aCAnbWluaW1hbCBsaWJyYXJ5JwoJICBjb21waWxhdGlvbiAoTElCWE1MX1BBVFRFUk5fRU5BQkxFRCBub3QgcHJvcGVybHkgY2hlY2tlZCkgcmVwb3J0ZWQKCSAgYnkgR3JlZyBNb3JnYW4KClRodSBNYXIgMjQgMTI6MDE6MzAgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBjYWxsIHRvIGEgZmFjZXQgZXJyb3IgcmVwb3J0OiB0aGUgdHlwZSBvZgoJICB0aGUgZXJyb3Igd2FzIHdyb25nLCByZXN1bHRpbmcgaW4gYSBzZWdmYXVsdCAoYnVnICMxNzEyMjAsIHJlcG9ydGVkCgkgIGJ5IEdVWSBGYWJyaWNlKS4KCk1vbiBNYXIgMjEgMjI6NTg6MzcgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBSZW1vdmVkIGEgc3R1cGlkIGJ1ZyBpbiB4bWxTY2hlbWFWYWxpZGF0ZUF0dHJpYnV0ZXMsCgkgIGZhaWxpbmcgdG8gYnVpbGQgYSBsaW5rZWQgbGlzdCBjb3JyZWN0bHkgKGJ1ZyAjMTY5ODk4LCByZXBvcnRlZAoJICBieSBiaW5nIHNvbmcsIGhtbS4uLikuCgpNb24gTWFyIDIxIDIxOjA5OjA3IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgYSBzZWdmYXVsdCwgd2hpY2ggb2NjdXJlZCBkdXJpbmcgYnViYmxpbmcKCSAgb2YgSURDIG5vZGVzIChidWcgIzE3MDc3OSBhbmQgIzE3MDc3OCwgcmVwb3J0ZWQgYnkgR1VZIEZhYnJpY2UpOgoJICBhIHZhcmlhYmxlIHdhcyBtaXNzZWQgdG8gYmUgcmVzZXQgaW4gYSBsb29wLiBEZWFjdGl2YXRlZCBidWJibGluZywKCSAgaWYgbm90IHJlZmVyZW5jZWQgYnkgYSBrZXlyZWYuCgpTdW4gTWFyIDIwIDExOjEzOjAyIFBTVCAyMDA1IEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkKCSogYzE0bi5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IHNwZWNpYWwgY2FzZSAiREFWOiIgbmFtZXNwYWNlCglpbiBjMTRuIHJlbGF0aXZlIG5hbWVzcGFjZXMgY2hlY2sgYW5kIGFkZCBzdHJ1Y3R1cmVkIGVycm9yIG1lc3NhZ2VzCgl0byBjMTRuIGNvZGUKClRodSBNYXIgMTcgMTI6NTU6MjMgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBSZW1vdmVkIGluaGVyaXRhbmNlIG9mICJtaXhlZCIgY29udGVudCB0eXBlIGZvcgoJICBzaG9ydC1oYW5kIHJlc3RyaWN0aW9ucyBvZiAiYW55VHlwZSIgKHJlcG9ydGVkIGJ5IEd1eSBGYWJyaWNlCgkgIHRvIHRoZSBtYWlsaW5nIGxpc3QpLiBBZGRlZCB0aGUgbmFtZXNwYWNlIGNvbnZlcnNpb24gKGNoYW1lbGVvbgoJICBpbmNsdWRlcykgZm9yIHRoZSBiYXNlIHR5cGUgcmVmZXJlbmNlIG9mIDxyZXN0cmljdGlvbj4gYW5kCgkgIDxleHRlbnNpb24+LgoJKiB0ZXN0L3NjaGVtYXMvYnVnMTUyNDcwXzEueHNkOiBBZGFwdGVkIGR1ZSB0byB0aGUgYWJvdmUgY2hhbmdlCgkgIG9mICJtaXhlZCIgaW5oZXJpdGFuY2UuCgpUaHUgTWFyIDE3IDExOjAzOjU5IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgYSA9IC0+ID09IGVycm9yIHBvaW50ZWQgYnkgR1VZIEZhYnJpY2UKCldlZCBNYXIgMTYgMjI6NTM6NTMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBtb3JlIGRlYnVnIG1lc3NhZ2VzIGZyb20gTWF0dGhldyBCdXJnZXNzCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiB4bWxTY2hlbWFWYWxpZGF0ZUxlbmd0aEZhY2V0IEFQSSBtaXNzaW5nIGNoZWNrLgoKV2VkIE1hciAxNiAxNzozNzowNCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogQWFhYW5ubmQgcHV0dGluZyBiYWNrIHRoZSBwcmV2aW91cyBjaGFuZ2VzIGRvbmUKCSAgYnkgRGFuaWVsLCB3aGljaCBJIG92ZXJ3cm90ZSB3aXRoIHRoZSBwcmV2aW91cyBjb21taXQuCgpXZWQgTWFyIDE2IDE3OjIwOjI1IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDoKCSAgSG9wZWZ1bGx5IGZpbmlzaGVkIHZhbGlkYXRpb24gYWdhaW5zdCBmYWNldHMgdG8gdXNlIHRoZSBub3JtYWxpemVkCgkgIHZhbHVlIG9mIGJvdGgsIHRoZSBmYWNldHMgYW5kIGluc3RhbmNlIHZhbHVlcy4gQWRkZWQgCgkgIHhtbFNjaGVtYVZhbGlkYXRlTGVuZ3RoRmFjZXRXaHRzcCgpLCB4bWxTY2hlbWFWYWxpZGF0ZUZhY2V0V2h0c3AoKQoJICBhbmQgeG1sU2NoZW1hR2V0VmFsVHlwZSgpIHRvIHRoZSBzY2hlbWEgQVBJLgoKV2VkIE1hciAxNiAxMzo1NTozMSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZG8gbm90IHBhY2thZ2UgLmxhIGZpbGVzCgkqIHhtbGxpbnQuYzogYXBwbGllZCBwYXRjaCBmcm9tIEdlcnJ5IE11cnBoeSBmb3IgeG1sbGludCByZXR1cm4gY29kZQoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgYSBjb3VwbGUgb2YgbWlzc2luZyB0ZXN0cyBvZiBwYXJhbWV0ZXJzCgkgIGF0IHB1YmxpYyBBUEkgZW50cnkgcG9pbnRzLgoKVHVlIE1hciAxNSAyMzozMToxNCBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhIGNvdXBsZSBvZiBtb3JlIGNoYW5nZXMgdG8gdmFyaW91cwoJICBkZWNpbWFsLWhhbmRsaW5nIHJvdXRpbmVzLiAgRml4ZXMgcHl0aG9uIHNvbWUgcHJvYmxlbXMKCSAgdHVybmVkIHVwIGJ5IHRoZSBweXRob24gdGVzdHMuCgkqIE1ha2VmaWxlLmFtOiBjaGFuZ2UgU2NoZW1hc1B5dGhvblRlc3RzIG1lc3NhZ2UgdG8gd2FybgoJICB0aGF0IHRoZXJlIGFyZSAxMCAnZXhwZWN0ZWQnIGVycm9ycyAocmF0aGVyIHRoYW4gNikgc2luY2UKCSAgd2Ugbm93IHJlamVjdCBhICcrJyBzaWduIG9uIGFuIHVuc2lnbmVkLgoKVHVlIE1hciAxNSAxNTo0MzoyNyBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYyB4bWxzY2hlbWFzdHlwZXMuaDogSW4gcHJlcGFyYXRpb24gdG8gdXNlCgkgIG5vcm1hbGl6ZWQgdmFsdWVzIG9mIGZhY2V0cyBkdXJpbmcgdmFsaWRhdGlvbjogY2hhbmdlZCB0aGUKCSAgYXJndW1lbnRzIG9mIHNvbWUgc3RyaW5nIGNvbXBhcmlzb24gZnVuY3Rpb25zOyBhZGRlZCBhIHN0YXRpYwoJICB4bWxTY2hlbWFWYWxpZGF0ZUZhY2V0SW50ZXJuYWwoKSB3aXRoIG1vcmUgYXJndW1lbnRzIHRvIGJlCgkgIG1vcmUgZmxleGlibGUuIFByZXBhcmVkIFhNTF9TQ0hFTUFfRkFDRVRfRU5VTUVSQVRJT04gdmFsaWRhdGlvbgoJICB0byB1c2UgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25zLiBGaXhlZCBzb21lIGFzc2lnbm1lbnRzIGluCgkgIHhtbFNjaGVtYVZhbEF0b21pY1R5cGUoKTogdG90YWwgZGlnaXQgY291bnQsIGxvLCBtaSwgaGkuCgpTdW4gTWFyIDEzIDE5OjMyOjAzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgY29uZmlndXJlLmluIHRlc3RhcGkuYyBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi42LjE4CgkgIHVwZGF0ZWQgZG9jcyBhbmQgcmVidWlsdAoJKiBsaWJ4bWwuc3BlYy5pbjogcmVhY3RpdmF0ZWQgZ2NjIHByb2ZpbGluZyBmb3IgZ2NjID49IDQuMC4wCgpTYXQgTWFyIDEyIDE5OjUwOjIyIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IHJlbW92ZWQgYSBzdGF0aWMgYnVmZmVyIGluIHhtbEJ5dGVDb25zdW1lZCgpLAoJICBhcyBwb2ludGVkIGJ5IEJlbiBNYXVyZXIsIGZpeGVzICMxNzAwODYKCSogeG1sc2NoZW1hcy5jOiByZW1vdmUgYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHBvaW50ZXIgd2FybmluZwoKRnJpIE1hciAxMSAyMzo1MzoxMyBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBlbmhhbmNlZCB0aGUgcGFyc2luZyBvZiBYTUxfU0NIRU1BU19ERUNJTUFMCgkgIGFuZCBtdWNoIG9mIHRoZSByb3V0aW5lIHhtbFNjaGVtYUNvbXBhcmVEZWNpbWFscy4gIFRoZQoJICBjaGFuZ2VzIHdlcmUgbmVjZXNzYXJ5IHRvIGZpeCBhIHByb2JsZW0gcmVwb3J0ZWQgb24gdGhlCgkgIG1haWxpbmcgbGlzdCBieSBKb2huIEhvY2thZGF5LgoKRnJpIE1hciAxMSAxMzoyMjo1MiBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFRoZSBzY2hlbWEgcGFyc2VyIHdpbGwgc3RvcCBpZiBjb21wb25lbnRzIGNvdWxkCgkgIG5vdCBiZSByZXNvbHZlZC4gVGhpcyBpcyBub3QgY29uZm9ybWluZyB0byB0aGUgc3BlYyBidXQgZm9yIG5vdwoJICB3aWxsIGF2b2lkIGludGVybmFsIGVycm9ycyBkdXJpbmcgdHlwZSBmaXh1cCBhbmQgY29udGVudCBtb2RlbAoJICBjcmVhdGlvbi4gUmVzdHJ1Y3R1cmVkIGluY2x1c2lvbi9pbXBvcnQgb2Ygc2NoZW1hdGE6IHRoaXMgYXZvaWRzCgkgIGR1cGxpY2F0ZSwgc2VsZiBhbmQgY2lyY3VsYXIgaW5jbHVzaW9uLiBDaGFtZWxlb24gaW5jbHVkZXMgYXJlCgkgIHN0aWxsIHdvcmthcm91bmRlZC4gQWRkZWQgcmVzdHJpY3Rpb24gdG8gZGlzYWxsb3cgcmVmZXJlbmNlcyB0bwoJICBub24taW1wb3J0ZWQgbmFtZXNwYWNlcy4gQ29ycmVjdGVkIHBhcnNpbmcgb2YgPGdyb3VwPi4KCSogcmVzdWx0L3NjaGVtYXMvYnVnMTY3NzU0XzBfMCo6IEFkZGVkIGEgbWlzc2luZyB0ZXN0IHJlc3VsdC4KClRodSBNYXIgMTAgMTY6MDI6MTcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbC5odG1sIGRvYy9lbmNvZGluZy5odG1sOiBFbnJpY2hlZCBlbmNvZGluZy5odG1sIHdpdGggbW9yZQoJICBsaW5rIGFuZCBmb3Jld29yZCB3YXJuaW5nIHRvIGF2b2lkIHByb2JsZW0gd2l0aCBpZ25vcmFudAoJICBwcm9ncmFtbWVycywgYy5mICMxNjk3MjEKClRodSBNYXIgMTAgMTU6MDE6MzQgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXJuZXh0LnB5OiBhZGRlZAoJICBhIHJlZ3Jlc3Npb24gdGVzdCBmcm9tIFJvYiBSaWNoYXJkcyBmb3IgdGhlIHByZXZpb3VzIGJ1ZwoKVGh1IE1hciAxMCAxMzoyMjozNiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogYXBwbGllZCBmaXggZm9yIHhtbFRleHRSZWFkZXJOZXh0KCkgYnVnIGZyb20KCSAgUm9iIFJpY2hhcmRzCgpUaHUgTWFyIDEwIDExOjM1OjU3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1vZHVsZS5jOiBzZWNvbmQgcGF0Y2ggZnJvbSBSaWNrIEpvbmVzLCBwb3J0YWJpbGl0eSBmaXggZm9yCgkgIEhQLVVYCgkqIGRvYy9leGFtcGxlcy94cGF0aDEuYyBkb2MvZXhhbXBsZXMveHBhdGgyLmM6IGZpcnN0IGZpeCBmcm9tIFJpY2sgSm9uZXMKCSAgdG8gYXZvaWQgd2FybmluZ3MuCgpUaHUgTWFyIDEwIDEwOjIwOjIzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2hhc2guaCBsaWJ4bWwuaCBsaWJ4bWwuc3BlYy5pbjogc29tZSBnY2M0IHBvcnRhYmlsaXR5CgkgIHBhdGNoZXMsIGluY2x1ZGluZyBhIHNlcmlvdXMgYWxpYXNpbmcgYnVnIGV4cG9zZWQgaW4gczM5MCAKCSAgd2hlbiB0cnlpbmcgdG8gY29udmVydCBkYXRhIHBvaW50ZXIgdG8gY29kZSBwb2ludGVyLgoKTW9uIE1hciAgNyAxODozNDowMCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFRpbnkgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgdmFsaWRhdGlvbiBzdGFydC11cAoJICBmdW5jdGlvbnMuIEFkZGVkIGNsZWFudXAgb2YgdGhlIHZhbGlkYXRpb24gY29udGV4dCBhdCB0aGUKCSAgZW5kIG9mIHZhbGlkYXRpb24uIFRoaXMgdGFrZXMgY2FyZSBvZiB0aGUgdmFsaWRhdGlvbiBjb250ZXh0CgkgIGJlaW5nIHJldXNlZC4KCk1vbiBNYXIgIDcgMTI6MTI6MDEgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IFRpbnkgY2hhbmdlcyBpbiB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbnMKCSAgSSBmb3Jnb3QgdG8gY29tbWl0IGxhc3QgdGltZS4KCkZyaSBNYXIgIDQgMjI6NTE6NDIgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBZGRlZCBJREMgdmFsaWRhdGlvbiBvZiBhbnlTaW1wbGVUeXBlIGF0dHJpYnV0ZQoJICB2YWx1ZXM7IGFueXdheSB0aGUgSURDIGtleSBjb21wYXJpc29uIGlzIHJlc3RyaWN0ZWQgdG8KCSAgYW55U2ltcGxlVHlwZSA8LS0+IHN0cmluZyBiYXNlZCB0eXBlcy4gRm9yIG90aGVyIHR5cGVzIHdlCgkgIHdvdWxkIHBvc3NpYmx5IG5lZWQgdGhlIGNhbm9uaWNhbCBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIG9mCgkgIHRoZW07IHRoaXMgc291bmRzIG5vdCBwZXJmb3JtYW50LCBzaW5jZSB3ZSB3b3VsZCBuZWVkIHRvCgkgIGJ1aWxkIHN1Y2ggYSByZXByZXNlbnRhdGlvbiBlYWNoIHRpbWUgd2Ugd2FudCB0byBjb21wYXJlIGFnYWluc3QKCSAgYW55U2ltcGxlVHlwZS4gVE9ETzogdGhpbmsgYWJvdXQgYnVmZmVyaW5nIHRoZSBjYW5vbmljYWwgdmFsdWVzCgkgIHNvbWV3aGVyZS4gRml4ZWQgZXJyb3IgcmVwb3J0cyBmb3IgZGVmYXVsdCBhdHRyaWJ1dGVzIHRvIHdvcmsKCSAgd2l0aG91dCBhIG5vZGUgYmVpbmcgc3BlY2lmaWVkLiBUaGlzIGFsbCBhbmQgdGhlIGVuYWJsaW5nIG9mIElEQwoJICB2YWxpZGF0aW9uIGZpeGVzIGJ1ZyAjMTY1MzQ2IChyZXBvcnRlZCBieSBCZW5vaXQgR3I/Z29pcmUgLSBjb3VsZAoJICBub3QgcmVhZCBoaXMgbGFzdCBuYW1lIGNvcnJlY3RseSBmcm9tIGJ1Z3ppbGxhKS4KCkZyaSBNYXIgIDQgMTg6NTc6NDQgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBFbmFibGVkIElEQyBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uLgoJKiB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogCgkgIEFkZGVkIHhtbFNjaGVtYUNvcHlWYWx1ZSB0byB0aGUgQVBJOyB0aGlzIHdhcyBkb25lIGR1ZSB0bwoJICB2YWxpZGF0aW9uIG9mIGRlZmF1bHQgYXR0cmlidXRlcyBhZ2FpbnN0IElEQ3M6IHNpbmNlIElEQyBrZXlzCgkgIGNvbnN1bWUgdGhlIHByZWNvbXB1dGVkIHZhbHVlLCBvbmUgbmVlZHMgYSBjb3B5LgoJKiBwYXR0ZXJuLmM6IEVuYWJsZWQgSURDIHN1cHBvcnQ7IHRoaXMgaXMgY3VycmVudGx5IGRvbmUKCSAgdmlhIGNhbGxpbmcgeG1sUGF0dGVybmNvbXBpbGUgd2l0aCBhIGZsYWcgYXJnIG9mIDEuCgpXZWQgTWFyICAyIDExOjQ1OjE4IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGRvYy9leGFtcGxlcy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0KCSAgeHN0Yy9NYWtlZmlsZS5hbTogdHJ5IHRvIGZpeCBhIHByb2JsZW0gd2l0aCB2YWxncmluZC4KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtCgkgIHB5dGhvbi90ZXN0cy90c3RtZW0ucHk6IGFwcGxpZWQgbWVtb3J5IGxlYWsgZml4IGZyb20gQnJlbnQgSGVuZHJpY2tzCgkgIGMuZi4gYnVnICMxNjUzNDkKCk1vbiBGZWIgMjggMTE6MTg6MjQgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdHJlZS5jOiBDaGFuZ2VkIHhtbFNlYXJjaE5zQnlIcmVmIHRvIGNhbGwgeG1sTnNJblNjb3BlIHdpdGgKCSAgdGhlIHByZWZpeCBpbnN0ZWFkIG9mIHRoZSBuYW1lc3BhY2UgbmFtZS4KCSogdGVzdC9zY2hlbWFzL2Fubm90LWVycl8wLnhzZCB0ZXN0L3NjaGVtYXMvZWxlbWVudC1lcnJfMC54c2Q6CgkgIEFkYXB0ZWQgaW52YWxpZCB2YWx1ZXMgb2YgdGhlICJpZCIgYXR0cmlidXRlLCBzaW5jZSB0aGV5IGFyZQoJICB2YWxpZGF0ZWQgbm93LgoKRnJpIEZlYiAyNSAwODozMToxNiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IG5ldyB2ZXJzaW9uIHdpdGggZml4ZXMgZnJvbSBSb2IgUmljaGFyZHMKClRodSBGZWIgMjQgMTY6Mzc6NTEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUmljaCBTYWx6IGZvciBtdWx0aXRocmVhZGluZyBvbgoJICBXaW5kb3dzLgoKV2VkIEZlYiAyMyAxNTowNDo0NiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYzogYXBwbGllZCBhIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzIGZpeGluZyBhIGNvdXBsZQoJICBvZiBidWdzIGluIHRoZSB3cml0ZXIKCk1vbiBGZWIgMjEgMjE6NTE6MDMgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzYXZlLmM6IGZpeGVkIHByb2JsZW0gd2hlbiBYTUxMSU5UX0lOREVOVCB3YXMgZW1wdHkgKGJ1ZyAxNjgwMzMpLgoJKiB4cGF0aC5jOiBmaXhlZCBjb21waWxhdGlvbiB3YXJuaW5nLCBubyBjaGFuZ2UgdG8gbG9naWMuCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBjb21waWxhdGlvbiB3YXJuaW5nLCBubyBjaGFuZ2UgdG8gbG9naWMuCgpNb24gRmViIDIxIDE0OjQ4OjI3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzIHRvIGZpeCBhIHByb2JsZW0gd2l0aAoJICB4bWxUZXh0V3JpdGVyU3RhcnRBdHRyaWJ1dGVOUwoKTW9uIEZlYiAyMSAxMTo0MTo0MSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmMgeHBhdGguYzogZml4ZWQgcmVtYWluaW5nIGtub3duIGJ1Z3MgaW4gdGhlIFhQYXRoIHN0cmVhbWluZywKCSAgYW5kIHN3aXRjaGVkIFhQYXRoIHRvIHVzZSBpdCBieSBkZWZhdWx0IHdoZW4gcG9zc2libGUKClNhdCBGZWIgMTkgMTk6MjU6MTQgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGEgYml0IG9mIGNsZWFudXAKCSogZWxmZ2NjaGFjay5oIHRlc3RhcGkuYyBkb2MvKjogcmVidWlsdCB0aGUgQVBJIHRoZSB0ZXN0cyBhbmQKCSAgdGhlIGRvY3VtZW50YXRpb24gYXMgYSByZXN1bHQuCgpGcmkgRmViIDE4IDIwOjM0OjAzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgQXJvbiBTdGFuc3ZpayB0byBhZGQgeG1sVGV4dFJlYWRlckJ5dGVDb25zdW1lZCgpCgkqIHRlc3RSZWFkZXIuYzogYWRkZWQgYSB0ZXN0IG9wdGlvbgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4IGEgbGFjayBvZiBwb2ludGVyIGNoZWNraW5nIGluIEFQSXMKCkZyaSBGZWIgMTggMTI6NDE6MTAgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdGVzdC9zY2hlbWFzL2J1ZzE2Nzc1NF8wKjogQWRkZWQgdGhlIHJlZ3Jlc3Npb24gdGVzdCBvZiBGcmFucwoJICBFbmdsaWNoIGZvciBidWcgIzE2Nzc1NC4KCkZyaSBGZWIgMTggMTI6MzE6NDkgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBTdGFydGVkIHN1cHBvcnQgZm9yIElEQyByZXNvbHV0aW9uIHRvIGRlZmF1bHQKCSAgYXR0cmlidXRlcy4gSWYgYnVpbGRpbmcgdGhlIGNvbnRlbnQgbW9kZWwgZm9yIDxhbGw+OiBlbnN1cmVkCgkgIHRvIHB1dCBlbGVtZW50IGRlY2xhcmF0aW9ucyBhbmQgbm90IHRoZSBwYXJ0aWNsZXMgaW50byB0aGUKCSAgY29udGVudCBtb2RlbCBhdXRvbWF0b24gKHRoaXMgd2FzIGJ1ZyAjMTY3NzU0LCByZXBvcnRlZCBieQoJICBGcmFucyBFbmdsaWNoKS4KClRodSBGZWIgMTcgMjI6MzE6NTggQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogcGF0dGVybi5jIHBhdHRlcm4uaDogU29tZSBleHBlcmltZW50YWwgYWRkaXRpb24gZm9yIHBhcnNpbmcKCSAgb2YgZXhwcmVzc2lvbnMgYW5kIHN0cmVhbWFibGUgdmFsaWRhdGlvbi4KCSAgQWRkZWQgeG1sU3RyZWFtUHVzaEF0dHIgdG8gdGhlIEFQSS4KClRodSBGZWIgMTcgMTk6NTc6MzUgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBZGRlZCB2YWxpZGF0aW9uIGZvciB0aGUgYXR0cmlidXRlICJpZCIgaW4gdGhlCgkgIHNjaGVtYXRhOyBkb2luZyB0aGlzIG5lZWRlZCBlcnJvciByZXBvcnQgZml4ZXMgZm9yIG5vdGF0aW9ucywKCSAgZmFjZXRzIGFuZCBncm91cC4gQ2hhbmdlZCBOT1RBVElPTiB2YWxpZGF0aW9uIHRvIHdvcmsgd2l0aCB0aGUKCSAgZGVjbGFyZWQgTk9UQVRJT05zIGluIHRoZSBzY2hlbWE7IHRoaXMgZG9lcyBoYXZlIG5vIGltcGFjdCBvbgoJICB0aGUgdmFsaWRhdGlvbiB2aWEgdGhlIHJlbGF4bmcgbW9kdWxlLgoJKiB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDoKCSAgQWRkZWQgeG1sU2NoZW1hTmV3Tk9UQVRJT05WYWx1ZSB0byB0aGUgQVBJIHRvIGJlIGFibGUgdG8gZG8KCSAgdGhlIE5PVEFUSU9OIHZhbGlkYXRpb24gZGVzY3JpYmVkIGFib3ZlLgoJKiB0ZXN0L3NjaGVtYXMvZWxlbWVudC1lcnJfMC54c2QgdGVzdC9zY2hlbWFzL2Fubm90LWVycl8wLnhzZDoKCSAgRml4ZWQgdGhlIHZhbHVlcyBvZiB0aGUgImlkIiBhdHRyaWJ1dGVzLCB3aGljaCB3ZXJlIG5vdCB2YWxpZGF0ZWQKCSAgcHJldmlvdXNseS4gIAoKVGh1IEZlYiAxNyAxMjowMzo0NiBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGNvbXBhcmlzb24gZm9yIGRlZmF1bHQvZml4ZWQgYXR0cmlidXRlCgkgIHZhbHVlcywgaWYgdGhlIHR5cGUgd2FzICd4c2Q6c3RyaW5nJy4gQ2hhbmdlZCB0aGUgY29tcGFyaXNvbgoJICBmb3IgSURDcyB0byB1c2UgdGhlIHdoaXRlc3BhY2UgYXdhcmUgY29tcGFyaXNvbiBmdW5jdGlvbi4KCSogeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6CgkgIEFkZGVkIHhtbFNjaGVtYUdldENhbm9uVmFsdWUsIHhtbFNjaGVtYU5ld1N0cmluZ1ZhbHVlIGFuZAoJICB4bWxTY2hlbWFDb21wYXJlVmFsdWVzV2h0c3AgdG8gdGhlIEFQSS4gQWRkZWQgZnVuY3Rpb25zCgkgIHRvIGNvbXBhcmUgc3RyaW5ncyB3aXRoIHdoaXRlc3BhY2UgY29tYmluYXRpb25zIG9mICJwcmVzZXJ2ZSIsCgkgICJyZXBsYWNlIiBhbmQgImNvbGxhcHNlIi4KCldlZCBGZWIgMTYgMTM6MjQ6MzUgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGdXJ0aGVyIHdvcmsgb24gSURDcywgZXNwZWNpYWxseSBldmFsdWF0aW9uIGZvcgoJICBhdHRyaWJ1dGUgbm9kZXMuCgpXZWQgRmViIDE2IDAxOjE5OjI3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGZpeCB0aGUgY29tbWVudCB0byBkZXNjcmliZSB0aGUgcmVhbCByZXR1cm4gdmFsdWVzCgkqIHBhdHRlcm4uYyB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3BhdHRlcm4uaDogbG90IG9mIHdvcmsgb24KCSAgdGhlIHBhdHRlcm5zLCBwbHVnZ2luIGluIHRoZSBYUGF0aCBkZWZhdWx0IGV2YWx1YXRpb24sIGJ1dAoJICBkaXNhYmxlZCByaWdodCBub3cgYmVjYXVzZSBpdCdzIG5vdCB5ZXQgZ29vZCBlbm91Z2ggZm9yIFhTTFQuCgkgIHBhdHRlcm4uaCBzdHJlYW1pbmcgQVBJIGFyZSBsaWtlbHkgdG8gYmUgY2hhbmdlZCB0byBoYW5kbGUKCSAgcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzIGluIHRoZSBzYW1lIGV4cHJlc3Npb24uCgpUdWUgRmViIDE1IDE1OjMzOjMyIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgSURDIGV2YWx1YXRpb24gZm9yIGF0dHJpYnV0ZSBub2Rlcy4KCSAgTWFkZSAnbmlsJ2VkIGVsZW1lbnRzIHdvcmsuIEFkZGVkIGEgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZQoJICBmb3IgJ3N0cmljdCcgYXR0cmlidXRlIHdpbGRjYXJkcy4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogQWRkZWQgYW4gZXJyb3IgY29kZSBmb3IKCSAgd2lsZGNhcmRzLgoJKiByZXN1bHQvc2NoZW1hcy9hbnlBdHRyLXByb2Nlc3NDb250ZW50cy1lcnIxXzBfMC5lcnI6IEFkYXB0ZWQuICAKClN1biBGZWIgMTMgMTY6MTU6MDMgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJVGhpcyBjaGFuZ2Ugc3RhcnRlZCBvdXQgYXMgYSBzaW1wbGUgZGVzaXJlIHRvIHNwZWVkIHVwIHRoZQoJZXhlY3V0aW9uIHRpbWUgb2YgdGVzdGFwaS5jLCB3aGljaCB3YXMgYmVpbmcgZGVsYXllZCBieQoJbmFtZXNlcnZlciByZXF1ZXN0cyBmb3Igbm9uLWV4aXN0ZW50IFVSTCdzLiAgRnJvbSB0aGVyZSBpdAoJanVzdCBzb3J0IG9mIGdyZXcsIGFuZCBncmV3Li4uLgoJKiBuYW5vaHR0cC5jLCBuYW5vZnRwLmM6IGNoYW5nZWQgdGhlIHByb2Nlc3Npbmcgb2YgVVJMJ3MKCSAgdG8gdXNlIHRoZSB1cmkuYyByb3V0aW5lcyBpbnN0ZWFkIG9mIGN1c3RvbSBjb2RlLgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhZGRlZCBjb2RlIFhNTF9GVFBfVVJMX1NZTlRBWAoJKiB1cmkuYzogYWRkZWQgYWNjZXB0aW5nIGlwVjYgYWRkcmVzc2VzLCBpbiBhY2NvcmRhbmNlIHdpdGgKCSAgUkZDJ3MgMjczMiBhbmQgMjM3MyAoVE9ETzogYWxsb3cgaXBWNCB3aXRoaW4gaXBWNikKCSogZ2VudGVzdC5weSwgdGVzdGFwaS5jOiBmaXhlZCBhIGZldyBwcm9ibGVtcyB3aXRoIHRoZQoJICB0ZXN0aW5nIG9mIHRoZSBuYW5vZnRwIGFuZCBuYW5vaHR0cCByb3V0aW5lcy4KCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oOiBtaW5vciBjaGFuZ2UgdG8gZml4IGEKCSAgd2FybmluZyBvbiB0aGUgZG9jcyBnZW5lcmF0aW9uCgkqIHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpTYXQgRmViIDEyIDA5OjA3OjExIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgeG1sWEluY2x1ZGVQYXJzZUZpbGUgdG8gcHJldmVudAoJICBvdmVyd3JpdGluZyBYTUxfQ09NUExFVEVfQVRUUlMgd2hlbiBzZXR0aW5nIHBjdHh0LT5sb2Fkc3Vic2V0CgkgIChidWcgMTY2MTk5KQoJKiBNYWtlZmlsZS5hbSwgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtLCB4c3RjL01ha2VmaWxlLmFtOiBhZGRlZAoJICBjb2RlIHRvIGFkZCAkKHRvcF9idWlsZGRpcikvLmxpYnMgdG8gTERfTElCUkFSWV9QQVRIIHdoZW5ldmVyCgkgIFBZVEhPTlBBVEggaXMgc2V0LCB0byBhc3N1cmUgbmV3IGxpYnhtbDIgcm91dGluZXMgYXJlIHVzZWQuCgpGcmkgRmViIDExIDIyOjIwOjQxIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGZpeGVkIHByb2JsZW0gd2hlbiBubyBpbml0aWFsICJjaHVuayIgd2FzCgkgIGdpdmVuIHRvIHhtbENyZWF0ZVB1c2hQYXJzZXIgKGJ1ZyAxNjI2MTMpCgpGcmkgRmViIDExIDE4OjM3OjIyIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZGljdC5jOiBmaXhlZCBjb21waWxhdGlvbiB3YXJuaW5nCgkqIHBhcnNlci5jOiBjaGFuZ2VkIHhtbFdhcm5pbmdNc2cgc28gY3R4dC0+ZXJyTm8gaXMgbm90IHNldAoJKiB4bWxsaW50LmM6IGNoYW5nZWQgdG8gcmV0dXJuIG5vbi16ZXJvIHN0YXR1cyBpZiBlcnJvcgoJICBvbiB4aW5jbHVkZSBwcm9jZXNzaW5nCgkqIHhtbHNhdmUuYzogbWlub3IgZGVsZXRpb24gb2YgYSByZWR1bmRhbnQgY29uZGl0aW9uIHN0YXRlbWVudAoJCldlZCBGZWIgIDkgMTc6NDc6NDAgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIHRvIHhtbFNldE5zUHJvcCBmcm9tIE1pa2UgSG9tbWV5CgpTdW4gRmViICA2IDAwOjE3OjU3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYyB4bWxsaW50LmM6IGZpeGVkIGltcGxlbWVudGF0aW9uIGZvciB8CgkqIHRlc3QvcGF0dGVybi9jb25qLiogcmVzdWx0L3BhdHRlcm4vY29uajogYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uCgkgIHRlc3QKClNhdCBGZWIgIDUgMTg6MzY6NTYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jOiBmaXJzdCBpbXBsZW1lbnRhdGlvbiBmb3IgfCBzdXBwb3J0CgpTYXQgRmViICA1IDE0OjU4OjQ2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYzogZml4ZWQgdGhlIG5hbWVzcGFjZXMgc3VwcG9ydAoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldE5vZGVQYXRoIHdoZW4gbmFtZXNwYWNlcyBhcmUgdXNlZAoJKiByZXN1bHQvcGF0dGVybi9tdWx0aXBsZSByZXN1bHQvcGF0dGVybi9uYW1lc3BhY2VzCgkgIHRlc3QvcGF0dGVybi9tdWx0aXBsZS4qIHRlc3QvcGF0dGVybi9uYW1lc3BhY2VzLio6IGFkZGVkCgkgIG1vcmUgcmVncmVzc2lvbiB0ZXN0cwoKRnJpIEZlYiAgNCAxODoyNjo0MyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIG9uZSBpbnRlcm5hbCBmdW5jdGlvbgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL3dpa2kueHNsOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9lbCBSZWVkCgkqIHRlc3RhcGkuYyBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9saWJ4bWwyLXJlZnMueG1sOiByZWdlbmVyYXRlZAoKRnJpIEZlYiAgNCAwMDoyNTo0MyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogdXNlIHRoZSB3YWxrZXIgdG8gdGVzdCB0aGUgcGF0dGVybnMgaW5zdGVhZCBvZgoJICB0aGUgbm9ybWFsIHJlYWRlcgoJKiBwYXR0ZXJuLmMgeG1sbGludC5jOiBidWcgZml4ZXMgaW4gdGhlIHRyYWluIGluY2x1ZGluZyBmaXhpbmcgdGhlCgkgIHN0dXBpZCBidWlsZCBicmVhay4KClR1ZSBGZWIgIDEgMTg6MTU6NTIgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jOiBtb3JlIGJ1ZyBmaXhlcyBmb3IgdGhlIFhQYXRoIHN0cmVhbWluZyBjb2RlLgoKTW9uIEphbiAzMSAxNzo1OToyNCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEludGVncmF0ZWQgdGhlIHN0cmVhbWluZyBwYXR0ZXJuIGZyb20gdGhlCgkgIHBhdHRlcm4gbW9kdWxlLiBGaXhlZCBzb21lIElEQyBjb2RlIGJ1Z3MuIENoYW5nZWQKCSAgZmFsbGJhY2sgZm9yIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBhZGRpdGlvbiB0byB3b3JrIGxpa2UgZm9yCgkgIGVsZW1lbnQgZGVjbGFyYXRpb25zLgkKCk1vbiBKYW4gMzEgMDE6Mjc6MjIgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jIHhtbGxpbnQuYzogYnVnZml4ZXMgYXJvdW5kIHRoZSBzdHJlYW1pbmcgcGF0dGVybnMKClN1biBKYW4gMzAgMjM6MzU6MTkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIHJlc3VsdC9wYXR0ZXJuL3NpbXBsZSAKCSAgdGVzdC9wYXR0ZXJuL3NpbXBsZS4qOiBhZGRlZCBmaXJzdCB0ZXN0IGZvciB0aGUgcGF0dGVybnMKCSogcGF0dGVybi5jIHhtbGxpbnQuYzogYSBmZXcgZml4ZXMKClN1biBKYW4gMzAgMTk6Mjc6MjMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jIGluY2x1ZGUvbGlieG1sL3BhdHRlcm4uaCB4bWxsaW50LmM6IGFkZGVkIGEgCgkgIHN0cmVhbWluZyBwYXR0ZXJuIGRldGVjdG9yIGZvciBhIHN1YnNldCBvZiBYUGF0aCwgc2hvdWxkCgkgIGhlbHAgS2FzaW1pZXIgZm9yIGlkZW50aXR5IGNvbnN0cmFpbnRzCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGFwcGxpZWQgU3RlcGhhbmUgQmlkb3VsIHBhdGNoIHRvIGZpbmQKCSAgcGF0aHMgd2l0aG91dCBicmVha2luZy4KCkZyaSBKYW4gMjggMTg6NTM6NDAgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBhbiB1bnRlc3RlZCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBhICYgdnMgJiYKCkZyaSBKYW4gMjggMTg6Mzc6MTggQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGltcGxlbWVudGF0aW9uIG9mIHhtbFRleHRSZWFkZXJSZWFkU3RyaW5nIGJ5CgkgIEJqb3JuIFJlZXNlCgpGcmkgSmFuIDI4IDE2OjUxOjQ3IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQ29ycmVjdGVkIGFuIGFtYmlnaW91cyBzeW1ib2wtc3BhY2UgZm9yCgkgIGxvY2FsIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMuIElGREVGZWQgbW9yZSBJREMgY29kZSB0bwoJICBzdXJwcmVzcyBjb21waWxlciB3YXJuaW5ncy4KCkZyaSBKYW4gMjggMDA6NTc6MDQgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYmFrZWZpbGUvUmVhZG1lLnR4dCBiYWtlZmlsZS9CYWtlZmlsZXMuYmtnZW4gYmFrZWZpbGUvbGlieG1sMi5ia2w6CgkgIGZpbGVzIGZvciB0aGUgQmFrZWZpbGUgZ2VuZXJhdG9yIGZvciBNYWtlZmlsZXMgZnJvbSBGcmFuY2VzY28KCSAgTW9udG9yc2kKCSogd2luMzIvY29uZmlndXJlLmpzOiBmaXhlcyBmb3IgV2luZG93cyBjb21waWxhdGlvbiB3aXRoIG5vbi1kZWZhdWx0CgkgIGZsYWdzIGJ5IEpvZWwgUmVlZAoKVGh1IEphbiAyNyAxODoyMzo1MCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbENvcHlEb2MgdG8gYWxzbyBjb3B5IHRoZSBkb2MtPlVSTCBhcyBwb2ludGVkCgkgIGJ5IE1hcnRpam4gRmFhc3NlbgoKVGh1IEphbiAyNyAxMzozOTowNCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOgoJICBBZGRlZCBhbiBpbml0aWFsIHNrZWxldG9uIGZvciBpbmRlbnRpdHktY29uc3RyYWludHMuIFRoaXMgaXMgYWxsCgkgIGRlZmluZWQgb3V0LCBzaW5jZSBub3QgY29tcGxldGUsIHBsdXMgaXQgbmVlZHMgc3VwcG9ydCBmcm9tIG90aGVyCgkgIG1vZHVsZXMuCgkgIEFkZGVkIG1hY2hhbmlzbSB0byBzdG9yZSBlbGVtZW50IGluZm9ybWF0aW9uIGZvciB0aGUKCSAgYW5jZXN0b3Itb3Itc2VsZiBheGlzOyB0aGlzIGlzIG5lZWRlZCBmb3IgaWRlbnRpdHktY29uc3RyYWludHMKCSAgYW5kIHNob3VsZCBiZSBoZWxwZnVsbCBmb3IgYSBmdXR1cmUgc3RyZWFtYWJsZSB2YWxpZGF0aW9uLgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBBZGRlZCBhbiBlcnJvciBjb2RlIGZvcgoJICBpZGVudGl0eS1jb25zdHJhaW50cy4KCldlZCBKYW4gMjYgMDE6MDM6MzcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGhhZCB0byBmaXggZ2VuZXJhdGlvbiBhbmQgcmVidWlsZC4KCSogdmFsaWQuYzogdGhlIHRlc3RhcGkgZm91bmQgYSBidWcgaW4gdGhlIGxhc3QgY29kZSBvZiBjb3Vyc2UgIQoKV2VkIEphbiAyNiAwMDo0MzowNSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB0ZXN0YXBpLmMgZG9jL01ha2VmaWxlLmFtOiBmaXhpbmcgdGhlIHdheSB0ZXN0YXBpLmMKCSAgaXMgZ2VuZXJhdGVkLCBmaXhlcyBidWcgIzE2MTM4NgoJKiBkaWN0LmM6IGZpeCBhIGNvbW1lbnQgdHlwbwoJKiBlbGZnY2NoYWNrLmggZG9jLyo6IHJlZ2VuZXJhdGVkCgpUdWUgSmFuIDI1IDIyOjM5OjMzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmb3VuZCBhbmQgZml4ZWQgMiBwcm9ibGVtcyBpbiB0aGUgaW50ZXJuYWwgc3Vic2V0IHNjYW5uaW5nCgkgIGNvZGUgYWZmZWN0aW5nIHRoZSBwdXNoIHBhcnNlciAoYW5kIHRoZSByZWFkZXIpLCBmaXhlcyAjMTY1MTI2CgkqIHRlc3QvaW50c3Vic2V0Mi54bWwgcmVzdWx0Ly9pbnRzdWJzZXQyLnhtbCo6IGFkZGVkIHRoZSB0ZXN0IGNhc2UKCSAgdG8gdGhlIHJlZ3Jlc3Npb24gdGVzdHMuCgpUdWUgSmFuIDI1IDAxOjIwOjExIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3Rkc28uYyB4bWxyZWdleHAuYzogd2FybmluZyBwYXRjaGVzIGZyb20gUGV0ZXIgQnJlaXRlbmxvaG5lcgoJKiBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIHZhbGlkLmMgcGFyc2VyLmM6IHNlcmlvdXMgRFREIHBhcnNpbmcKCSAgc3BlZWR1cHMsIHN0YXJ0IHRvIGRlcHJlY2F0ZSAzIEVsZW1lbnREZWYgcmVsYXRlZCBlbnRyeSBwb2ludAoJICBhbmQgcmVwbGFjZSB0aGVtIHdpdGggYmV0dGVyIG9uZXMuCgpNb24gSmFuIDI0IDAwOjQ3OjQxIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogbW9yZSBoYXNoIGRpY3Rpb25hcnkgaW50ZXJuaW5nIGNoYW5nZXMKClN1biBKYW4gMjMgMjM6NTQ6MzkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaGFzaC5jIGluY2x1ZGUvbGlieG1sL2hhc2guaDogYWRkZWQgeG1sSGFzaENyZWF0ZURpY3Qgd2hlcmUKCSAgdGhlIGhhc2ggcmV1c2VzIHRoZSBkaWN0aW9ubmFyeSBmb3IgaW50ZXJuYWwgc3RyaW5ncwoJKiBlbnRpdGllcy5jIHZhbGlkLmMgcGFyc2VyLmM6IHJldXNlIHRoYXQgbmV3IEFQSSwgbGVhZHMgdG8gYSBkZWNlbnQKCSAgc3BlZWR1cCB3aGVuIHBhcnNpbmcgZm9yIGV4YW1wbGUgRG9jQm9vayBkb2N1bWVudHMuCgpTdW4gSmFuIDIzIDIxOjE0OjIwIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBzbWFsbCBzcGVlZHVwIGluIHNraXBwaW5nIGJsYW5rcyBjaGFyYWN0ZXJzCgkqIGVudGl0aWVzLmM6IGludGVybmluZyB0aGUgZW50aXRpZXMgc3RyaW5ncyAKClN1biBKYW4gMjMgMTg6MzU6MDAgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGJvb3N0aW5nIGNvbW1vbiBjb21tbmVudCBwYXJzaW5nIGNvZGUsIGl0IHdhcyByZWFsbHkKCSAgc2xvdy4KCSogdGVzdC9jb21tZW50WzMtNV0ueG1sIHJlc3VsdC8vY29tbWVudFszLTVdLnhtbCo6IGFkZGVkIHNwcmVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3RzCgpTdW4gSmFuIDIzIDAxOjAwOjA5IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBzbWFsbCBvcHRpbWl6YXRpb24gYmFjay4KClNhdCBKYW4gMjIgMDA6NDA6MzEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL2RpY3QuaDogYSBzaW5nbGUgbG9jayB2ZXJzaW9uCgkgIG1vc3RseSBhdm9pZCB0aGUgY29zdCBwZW5hbHR5IG9mIHRoZSBsb2NrIGluIGNhc2Ugb2YgbG93IAoJICBwYXJhbGxlbGlzbSwgc28gYXBwbHlpbmcgdGhhdCB2ZXJzaW9uIGluc3RlYWQuCgpGcmkgSmFuIDIxIDE3OjU0OjA2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYzogcGF0Y2ggZnJvbSBHYXJ5IENvYWR5IHRvIGZpeCBhIHJhY2UgaW4gZGljdCByZWZlcmVuY2UKCSAgY291bnRpbmcgaW4gbXVsdGl0aHJlYWRlZCBhcHBzLgoKRnJpIEphbiAyMSAxNjowODoyMSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICMxNjQ1NTYgd2hlcmUgbm9uLWZhdGFsIGVycm9ycyBzdG9wcGVkCgkgIHB1c2ggcGFyc2luZyBhbmQgeG1scmVhZGVyLgoJKiBNYWtlZmlsZS5hbTogZml4dXAKCSogdGVzdC9lcnJvcnMvd2ViZGF2LnhtbCByZXN1bHQvZXJyb3JzL3dlYmRhdio6IGFkZGluZyByZWdyZXNzaW9uCgkgIHRlc3QgZm9yIHRoaXMgcHJvYmxlbS4KCldlZCBKYW4gMTkgMTc6MjQ6MzQgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBDb3JyZWN0ZWQgdGFyZ2V0TmFtZXNwYWNlIGluCgkgIHhtbFNjaGVtYUVsZW1lbnREdW1wLiBDb3NtZXRpYyBjaGFuZ2VzIHRvIHRoZSBkdW1wIG91dHB1dC4JCgpTdW4gSmFuIDE2IDIxOjAwOjUzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiAyLjYuMTcsCgkgIHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKClN1biBKYW4gMTYgMTk6NTg6MzYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGJldHRlciBmaXggZm9yICMxNTE2OTQgbm90IGtpbGxpbmcgYzE0biByZWdyZXNzaW9uIHRlc3RzCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhpbmcgYnVnICMxNTc2NTMKClN1biBKYW4gMTYgMTk6MDE6MDYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgIzE1MTY5NCwgbGluZSBzaG91bGQgYWx3YXlzIGJlIHNldCBpbiB0aGUKCSAgZWxlbWVudHMuCgpTdW4gSmFuIDE2IDAxOjA0OjE4IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiB0cnlpbmcgdG8gZml4IGF0IGxlYXN0IHRoZSBtZXNzYWdlIGZyb20KCSAgYnVnICMxNTg2MjgKCSogaW5jbHVkZS9saWJ4bWwveG1sc2F2ZS5oIHhtbHNhdmUuYzogYWRkZWQgZmlyc3QgeG1sc2F2ZSBvcHRpb24KCSAgZm9yIGZvcm1hdCwgYy5mLiBidWcgIzE1OTk5NwoKU2F0IEphbiAxNSAxODo0NDozMCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiBtYWtlIF9fc3RyX18gY2FsbCBzZXJpYWxpemUoKSBvbiBub2RlcywgYy5mLiAKCSAgYnVnICMxNTc4NzIKClNhdCBKYW4gMTUgMTg6MTg6MDcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gRGFuIE1jTmljaG9sIGZvciBjb21waWxhdGlvbiBvbiBBSVgKClNhdCBKYW4gMTUgMTM6MzU6MTkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBidWcgIzE1NzYzMyBpbiByZWxheG5nIGNob2ljZSBvcHRpbWl6YXRpb24KCSogcmVzdWx0L3JlbGF4bmcvY2hvaWNlMCogdGVzdC9yZWxheG5nL2Nob2ljZTAqOiBhZGRlZCByZWdyZXNzaW9uCgkgIHRlc3RzIGFib3V0IGl0LgoJKiBkb2MvKjogcmVidWlsdAoJKiB0ZXN0ZHNvLmM6IHJlbW92ZWQgYSB3YXJuaW5nIGR1ZSB0byBhIG1pc3Npbmcgdm9pZCBpbiBzaWduYXR1cmUuCgpUaHUgSmFuIDEzIDE3OjQyOjU1IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCB4bWxzY2hlbWFzLmM6IAoJICBFeHBvc2VkIHRhcmdldE5hbWVzcGFjZSBmb3Igc2ltcGxlL2NvbXBsZXggdHlwZXMsIG1vZGVsIGdyb3VwcywKCSAgYXR0cmlidXRlIGdyb3VwcyBhbmQgbm90YXRpb25zIChyZXBvcnRlZCBieSBNaWNoYWVsIEhld2FydGggCgkgIHRvIHRoZSBtYWlsaW5nIGxpc3QpLiBBZGRlZCB0YXJnZXROYW1lc3BhY2UgdG8geG1sU2NoZW1hVHlwZSwgCgkgIHhtbFNjaGVtYUF0dHJpYnV0ZUdyb3VwIGFuZCB4bWxTY2hlbWFOb3RhdGlvbi4KCSAgVGlueSBjb3NtZXRpYyBjaGFuZ2UgdG8gdGhlIGNvbnRlbnQgbW9kZWwgZXJyb3IgcmVwb3J0IG91dHB1dC4KCSogcmVzdWx0Ly9hbGxfKi5lcnIgcmVzdWx0Ly9hbnkzXzBfMC5lcnIgcmVzdWx0Ly9jaG9pY2VfKi5lcnIgCgkgIHJlc3VsdC8vbGlzdDBfMF8xLmVyciByZXN1bHQvL2xpc3QwXzFfMS5lcnI6IEFkYXB0ZWQgb3V0cHV0IAoJICBvZiByZWdyZXNzaW9uIHRlc3RzLgoKVGh1IEphbiAxMyAxMzoyMDo1MSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFB1dCB0aGUgZml4IG9mIERhbmllbCAoZnJvbSBUdWUgSmFuIDExIDE0OjQxOjQ3IENFVCkKCSAgYmFjayBpbiwgc2luY2UgSSBtaXNzZWQgdG8gdXBkYXRlIHhtbHNjaGVtYXMuYyBiZWZvcmUgZG9pbmcKCSAgdGhlIHByZXZpb3VzIGNvbW1pdC4KCQpUaHUgSmFuIDEzIDEyOjU5OjI1IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogSW50ZWdyYXRlZCB4bWxSZWdFeGVjRXJySW5mbyBhbmQgeG1sUmVnRXhlY05leHRWYWx1ZXMKCSAgZnJvbSB4bWxyZWdleHAuYyB0byByZXBvcnQgZXhwZWN0ZWQgZWxlbWVudHMgb24gY29udGVudCBtb2RlbCBlcnJvcnMuCgkqIGFsbF8qLmVyciBhbnkzXzBfMC5lcnIgY2hvaWNlXyouZXJyIGxpc3QwXzBfMS5lcnIgbGlzdDBfMV8xLmVycjoKCSAgQWRhcHRlZCBvdXRwdXQgb2YgcmVncmVzc2lvbiB0ZXN0cy4KClRodSBKYW4gMTMgMTI6MjQ6MDkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIHhtbG1vZHVsZS5jOiB0cnlpbmcgdG8gd29yayBhcm91bmQKCSAgdGhlIGNvbXBpbGF0aW9uIHByb2JsZW0gb24gSFAtVVgKCldlZCBKYW4gMTIgMjI6MDM6MzMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jOiBmaXhlZCB0aGUgZml4ZWQgc2l6ZSBhcnJheSBzdHJ1Y3R1cmUgcHJvYmxlbSByZXBvcnRlZCBieQoJICBQYXRyaWNrIFN0cmV1bGUKCldlZCBKYW4gMTIgMTU6MTU6MDIgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZWxmZ2NjaGFjay5oIHRlc3RhcGkuYyBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy8qOiByZWdlbmVyYXRlZAoJICB0aGUgQVBJIGRlc2NyaXB0aW9uLCByZWJ1aWx0LCBpbXByb3ZlZCBuYXZpZ2F0aW9uIGluIGRvY3VtZW50YXRpb24KCSAgYSBiaXQuCgpXZWQgSmFuIDEyIDE0OjE3OjE0IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oIHhtbHJlZ2V4cC5jOiBleHRlbmRlZCB4bWxSZWdFeGVjRXJySW5mbygpCgkgIGFuZCB4bWxSZWdFeGVjTmV4dFZhbHVlcygpIHRvIHJldHVybiBlcnJvciB0cmFuc2l0aW9uIHN0cmluZ3MgdG9vLAoJICBhbmQgc2luayBzdGF0ZSBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nLgoKVHVlIEphbiAxMSAxNDo0MTo0NyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIGJ1ZyAjMTYzNjQxIHdoZW4gdGhlIHZhbHVlIHBhc3NlZCBmb3IKCSAgYW4gYXRvbWljIGxpc3QgdHlwZSBpcyBOVUxMLgoKVHVlIEphbiAxMSAxMDoxNDozMyBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogZml4ZWQgZGVwZW5kZW5jeSBvbiBweXRob24gMi4zLAoJICBhbHNvIHNtYWxsIGltcHJvdmVtZW50IGZvciBjeWd3aW4gKGJ1ZyAxNjMyNzMpCgpTdW4gSmFuICA5IDE4OjQ2OjMyIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBXaWxsaWFtIG5vdGljZWQgSSBmb3Jnb3QgdG8gYWRkIHNwZWNpYWwKCSAgc3VwcG9ydCBmb3IgeG1sbW9kdWxlcy5jIGRlZmluZQoJKiB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDogYWRkZWQgdGVybWluYWwgdG8KCSAgeG1sUmVnRXhlY0VyckluZm8oKSBBUEksIGFkZGluZyBuZXcgeG1sUmVnRXhlY05leHRWYWx1ZXMoKQoJICBlbnRyeSBwb2ludCBhbmQgcmVmYWN0b3JlZCB0byB1c2UgYm90aCBjb2RlLgoKTW9uIEphbiAxMCAwMTowMjo0MSBIS1QgMjAwNiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy94bWwuaHRtbCwgZG9jL0ZBUS5odG1sOiBhZGRlZCBhbiBGQVEgdW5kZXIgRGV2ZWxvcGVyIGZvcgoJICBzZXR0aW5nIHVwIGEgInByaXZhdGUiIGxpYnJhcnkgKGFmdGVyIHNvbWUgbGlzdCBwb3N0cyBhYm91dAoJICBwZW9wbGUgaGF2aW5nIHRyb3VibGUgZG9pbmcgaXQpCgpTYXQgSmFuICA4IDIzOjA0OjEwIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhpbmcgYmVoYXZpb3VyIGZvciB4bWxSZWdFeGVjRXJySW5mbyBpbiBjYXNlIG9mCgkgIHJvbGxiYWNrCgpGcmkgSmFuICA3IDE0OjU0OjUxIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFRPRE86IHNtYWxsIHVwZGF0ZQoJKiB4bWxyZWdleHAuYzogdHJ5aW5nIHRvIGFkZCBhbiBBUEkgdG8gZ2V0IHVzZWZ1bCBlcnJvciBpbmZvcm1hdGlvbnMKCSAgYmFjayBmcm9tIGEgZmFpbGluZyByZWdleHAgY29udGV4dC4KClRodSBKYW4gIDYgMTc6MzU6NDEgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggeG1sWFBhdGhFcnIgd2hlbiBlcnJvciBudW1iZXIKCSAgc3Vic2NyaXB0IHdhcyBvdXQgb2YgcmFuZ2UgKGJ1ZyAxNjMwNTUpCgpUaHUgSmFuICA2IDA5OjU3OjAzIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdXJpLmM6IGZpeGVkIHByb2JsZW0gd2l0aCB4bWxVUklFc2NhcGUgd2hlbiBxdWVyeSBwYXJ0IHdhcwoJICBlbXB0eSAoYWN0dWFsbHkgZml4ZWQgeG1sVVJJRXNjYXBlU3RyIHRvIHJldHVybiBhbiBlbXB0eQoJICBzdHJpbmcgcmF0aGVyIHRoYW4gTlVMTCBmb3IgZW1wdHkgc3RyaW5nIGlucHV0KSAoYnVnIDE2MzA3OSkKCSAgClR1ZSBKYW4gIDQgMTc6MDg6NDUgUFNUIDIwMDUgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHBhcnNlci5jLCBwYXJzZXJJbnRlcm5hbC5jOiBmaXhlZCAiY29sIiBjYWxjdWxhdGlvbiBmb3IgCiAgICAgICAgICBzdHJ1Y3QgX3htbFBhcnNlcklucHV0IChiYXNlZCBvbiBwYXRjaCBmcm9tIFJvYiBSaWNoYXJkcykgCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmgsIGVycm9yLmM6IHByb3BhZ2F0ZWQgZXJyb3IgY29sdW1uCiAgICAgICAgICBudW1iZXIgaW4gdGhlIHhtbEVycm9yIHN0cnVjdHVyZQoKVHVlIEphbiAgNCAyMjo0NzoyMiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgbmFtZXNwYWNlIGJ1ZyBpbiBwdXNoIG1vZGUgcmVwb3J0ZWQgYnkgCgkgIFJvYiBSaWNoYXJkcwoJKiB0ZXN0L25zNiByZXN1bHQvL25zNio6IGFkZGVkIGl0IHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzCgkqIHhtbG1vZHVsZS5jIHRlc3RNb2R1bGUuYyBpbmNsdWRlL2xpYnhtbC94bWxtb2R1bGUuaDoKCSAgYWRkZWQgYW4gZXh0cmEgb3B0aW9uIGFyZ3VtZW50IHRvIG1vZHVsZSBvcGVuaW5nIGFuZCBkZWZpbmVkCgkgIGEgY291cGxlIG9mIGZsYWdzIHRvIHRoZSBBUEkuCgpUdWUgSmFuICA0IDIxOjE2OjA1IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1vZHVsZS5jIGluY2x1ZGUvbGlieG1sL3htbG1vZHVsZS5oOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgQmpvcm4gUmVlc2UsIHBsdXMgc29tZSBjbGVhbnVwcwoJKiBlbGZnY2NoYWNrLmggZG9jL2VsZmdjY2hhY2sueHNsOiBmaXhlZCB0aGUgc3R5bGVzaGVldCB0byAKCSAgYWRkIHRoZSBuZXcgaGVhZGVyCgkqIGRvYy8qIHRlc3RhcGkuYzogcmVnZW5lcmF0ZWQgdGhlIEFQSQoKVHVlIEphbiAgNCAxODo0NzoxOSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IG1ha2luZyBEU08gc3VwcG9ydCBhbiBvcHRpb24KCSogeG1sbW9kdWxlLmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1sbW9kdWxlLmg6IGNvZGUKCSAgYW5kIGRvY3VtZW50YXRpb24gY2xlYW51cHMKCSogZWxmZ2NjaGFjay5oIHRlc3RhcGkuYyBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIGRvY3MgYW5kCgkgIGNoZWNrcyBmb3IgbmV3IG1vZHVsZQoJKiB0ZXN0L3ZhbGlkL1JFQy14bWwtMTk5ODAyMTAueG1sOiBmaXggYSBzbWFsbCBjaGFuZ2UgaW50cm9kdWNlZAoJICBwcmV2aW91c2x5CgpUdWUgSmFuICA0IDE2OjA3OjUyIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBlcnJvci5jIGxpYnhtbC0yLjAucGMuaW4KCSAgdGVzdE1vZHVsZS5jIHRlc3Rkc28uYyB4bWwyLWNvbmZpZy5pbiB4bWxsaW50LmMgeG1sbW9kdWxlLmMKCSAgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxtb2R1bGUuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4gCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhcHBsaWVkIERTTyBzdXBwb3J0CgkgIHBhdGNoIDIgZnJvbSBKb2VsIFJlZWQKClR1ZSBKYW4gIDQgMTU6MzA6MTUgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyY2luIEtvbmlja2kgZm9yIEJlT1MKCk1vbiBKYW4gIDMgMTM6NTc6MjEgUFNUIDIwMDUgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHBhcnNlci5jOiBhZGRlZCBHZXRMaW5lTnVtYmVyIGFuZCBHZXRDb2x1bW5OdW1iZXIgZnVuY3Rpb25zIGZvciB4bWxSZWFkZXIKClN1biBKYW4gIDIgMTc6NTE6MTggSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJUmUtZXhhbWluZWQgdGhlIHByb2JsZW1zIG9mIGNvbmZpZ3VyaW5nIGEgIm1pbmltYWwiIGxpYnJhcnkuCglTeW5jaHJvbml6ZWQgdGhlIGhlYWRlciBmaWxlcyB3aXRoIHRoZSBsaWJyYXJ5IGNvZGUgaW4gb3JkZXIKCXRvIGFzc3VyZSB0aGF0IGFsbCB0aGUgdmFyaW91cyBjb25kaXRpb25hbHMgKExJQlhNTF94eHh4X0VOQUJMRUQpCgl3ZXJlIHRoZSBzYW1lIGluIGJvdGguICBNb2RpZmllZCB0aGUgQVBJIGRhdGFiYXNlIGNvbnRlbnQgdG8gbW9yZQoJYWNjdXJhdGVseSByZWZsZWN0IHRoZSBjb25kaXRpb25hbHMuICBFbmhhbmNlZCB0aGUgZ2VuZXJhdGlvbgoJb2YgdGhhdCBkYXRhYmFzZS4gIEFsdGhvdWdoIHRoZXJlIHdhcyBubyBzdWJzdGFudGlhbCBjaGFuZ2UgdG8KCWFueSBvZiB0aGUgbGlicmFyeSBjb2RlJ3MgbG9naWMsIGEgbGFyZ2UgbnVtYmVyIG9mIGZpbGVzIHdlcmUKCW1vZGlmaWVkIHRvIGFjaGlldmUgdGhlIGFib3ZlLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0Cgl3YXMgZW5oYW5jZWQgdG8gZG8gc29tZSBhdXRvbWF0aWMgZW5hYmxpbmcgb2YgZmVhdHVyZXMgKGUuZy4KCS0td2l0aC14aW5jbHVkZSBmb3JjZXMgLS13aXRoLXhwYXRoKS4gIEFkZGl0aW9uYWxseSwgYWxsIHRoZSBmb3JtYXQKCWVycm9ycyBkaXNjb3ZlcmVkIGJ5IGFwaWJ1aWxkLnB5IHdlcmUgY29ycmVjdGVkLgoJKiBjb25maWd1cmUuaW46IGVuaGFuY2VkIGNyb3NzLWNoZWNraW5nIG9mIG9wdGlvbnMKCSogZG9jL2FwaWJ1aWxkLnB5LCBkb2MvZWxmZ2NjaGFjay54c2wsIGRvYy9saWJ4bWwyLXJlZnMueG1sLAoJICBkb2MvbGlieG1sMi1hcGkueG1sLCBnZW50ZXN0LnB5OiBjaGFuZ2VkIHRoZSB1c2FnZSBvZiB0aGUKCSAgPGNvbmQ+IGVsZW1lbnQgaW4gbW9kdWxlIGRlc2NyaXB0aW9ucwoJKiBlbGZnY2NoYWNrLmgsIHRlc3RhcGkuYzogcmVnZW5lcmF0ZWQgd2l0aCBwcm9wZXIgY29uZGl0aW9uYWxzCgkqIEhUTUxwYXJzZXIuYywgU0FYLmMsIGdsb2JhbHMuYywgdHJlZS5jLCB4bWxzY2hlbWFzLmMsIHhwYXRoLmMsCgkgIHRlc3RTQVguYzogY2xlYW5lZCB1cCBjb25kaXRpb25hbHMKCSogaW5jbHVkZS9saWJ4bWwvW1NBWC5oLCBTQVgyLmgsIGRlYnVnWE1MLmgsIGVuY29kaW5nLmgsIGVudGl0aWVzLmgsCgkgIGhhc2guaCwgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oLCBzY2hlbWFzSW50ZXJuYWxzLmgsIHRyZWUuaCwKCSAgdmFsaWQuaCwgeGxpbmsuaCwgeG1sSU8uaCwgeG1sYXV0b21hdGEuaCwgeG1scmVhZGVyLmgsIHhwYXRoLmhdOgoJICBzeW5jaHJvbml6ZWQgdGhlIGNvbmRpdGlvbmFscyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSBjb2RlCgkqIGRvYy9leGFtcGxlcy90cmVlMi5jLCBkb2MvZXhhbXBsZXMveHBhdGgxLmMsIGRvYy9leGFtcGxlcy94cGF0aDIuYzoKCSAgYWRkZWQgYWRkaXRpb25hbCBjb25kaXRpb25zIHJlcXVpcmVkIGZvciBjb21waWxhdGlvbgoJKiBkb2MvKi5odG1sLCBkb2MvaHRtbC8qLmh0bWw6IHJlYnVpbHQgdGhlIGRvY3MKCQpTYXQgRGVjIDI1IDE4OjEwOjAyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRvIHNraXAgKGlmIG5lY2Vzc2FyeSkgdGhlIEJPTSBmb3IKCSAgZW5jb2RpbmcgJ3V0Zi0xNicuICBDb21wbGV0ZXMgdGhlIGZpeCBmb3IgYnVnICMxNTIyODYuCgkqIHRyZWUuYywgcGFyc2VyLmM6IG1pbm9yIHdhcm5pbmcgY2xlYW51cCwgbm8gY2hhbmdlIHRvIGxvZ2ljCgkKRnJpIERlYyAyNCAxNjozMToyMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGFkZGVkIG1vc3QgcmVxdWlyZWQgZW50aXJlcyB0bwoJICBmb3JlaWduIGVuY29kaW5nIHRhYmxlLCBwbHVzIHNvbWUgYWRkaXRpb25hbCBsb2dpYyB0bwoJICBhc3N1cmUgb25seSB0aGUgMXN0IHBhcmFtIHVzZXMgdGhlICd0IycgZm9ybWF0LiAgRml4ZXMKCSAgYnVnICMxNTIyODYsIGJ1dCBtYXkgc3RpbGwgaGF2ZSBzb21lIG90aGVyIFVURi0xNiBwcm9ibGVtcy4KClRodSBEZWMgMjMgMjM6NDQ6MDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBNYWtlZmlsZS5hbSwgZ2VudGVzdC5weTogZW5oYW5jZWQgZm9yIGVuYWJsaW5nIGJ1aWxkIGluCgkgIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4gIEFkZGVkIChvcHRpb25hbCkgcGFyYW0gdG8gZ2VudGVzdC5weQoJICB0byBzcGVjaWZ5IHRoZSBzb3VyY2UgZGlyZWN0b3J5IChidWcgIzE1NTQ2OCkKCSogZG9jL01ha2VmaWxlLmFtOiBjaGFuZ2VkIGRlc3RpbmF0aW9uIG9mIE5FV1MgZnJvbSAodG9wX3NyY2RpcikKCSAgdG8gKHRvcF9idWlsZGRpcikgKGJ1ZyAjMTU1NDY4KQoJKiBweXRob24vTWFrZWZpbGUuYW0sIHB5dGhvbi9nZW5lcmF0b3IucHk6IGVuaGFuY2VkIGZvciBlbmFibGluZwoJICBidWlsZCBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnkoYnVnICMxNTU0NjgpLiAgQWRkZWQgKG9wdGlvbmFsKQoJICBwYXJhbSB0byBnZW5lcmF0b3IucHkgdG8gc3BlY2lmeSB0aGUgc291cmNlIGRpcmVjdG9yeS4gIEFkZGVkCgkgIGEgbmV3IHRhYmxlIG9mIGZ1bmN0aW9ucyB3aGljaCBoYXZlIHBvc3NpYmxlICJmb3JlaWduIiBlbmNvZGluZ3MKCSAgKGUuZy4gVVRGMTYpLCBhbmQgY29kZSB0byB1c2UgcHl0aG9uICd0JyBmb3JtYXQgaW5zdGVhZCBvZgoJICAneicgZm9ybWF0IChtb3N0bHkgc29sdmluZyBidWcgIzE1MjI4NiwgYnV0IHN0aWxsIG5lZWQgdG8KCSAgcG9wdWxhdGUgdGhlIHRhYmxlKS4KCSAgClR1ZSBEZWMgMjEgMDg6MTA6NDQgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9zaXRlLnhzbCwgZG9jL3htbC5odG1sLCBwbHVzIHJlYnVpbHQgYWxsIHRoZSBodG1sIHBhZ2VzCglDaGFuZ2UgcmVmZXJlbmNlIHRvIG5ldyBzaXRlIGZvciBTb2xhcmlzIGJpbmFyaWVzLCBmaXhpbmcgYnVnCgkxNjA1OTgKCgpNb24gRGVjIDIwIDA4OjAyOjU3IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IHJlc2V0IGlucHV0LT5iYXNlIHdpdGhpbiB4bWxTdG9wUGFyc2VyCgkqIHhtbHN0cmluZy5jOiByZW1vdmVkIGNhbGwgdG8geG1sVVRGOFN0cmxlbiBmcm9tIHdpdGhpbgoJICB4bWxVVEY4U3RycG9zIChCaWxsIE1vc2VsZXkgcG9pbnRlZCBvdXQgaXQgd2FzIG5vdAoJICB1c2VmdWwpCgpGcmkgRGVjIDE3IDE2OjAzOjQxIFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogY2hhbmdlZCB4bWxFcnJWYWxpZFdhcm5pbmcgdG8gdXNlIGN0eHQtPndhcm5pbmcKCSAgaW5zdGVhZCBvZiBjdHh0LT5lcnJvciBmb3IgaXRzIHJlcG9ydHMgKGJ1ZyAjMTYwNjYyKQoKRnJpIERlYyAxNyAxNDo1MjoxNyBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IG1vZGlmaWVkIHRvIGFsbG93IHRoZSBucyBhbmQgbnNEZWZzCgkgIGFjY2Vzc29ycyB0byByZXR1cm4gTm9uZSBpbnN0ZWFkIG9mIGVycm9yIHdoZW4gbm8gbmFtZXNwYWNlCgkgIGlzIHByZXNlbnQgKGJ1ZyAjKQoKRnJpIERlYyAxNyAxMTo0MDoyMSBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogY2hhbmdlZCBtYWludGFpbmVyLWNsZWFuIGRlcGVuZGVuY3kgd2l0aAoJICBzdWdnZXN0aW9uIGZyb20gQ3Jpc3BpbiBGbG93ZXJkYXkgKGJ1ZyAjMTU3NjM0KQoJKiBkZWJ1Z1hNTC5jOiBmaXhlZCBjcmFzaCB3aGVuIEFUVFJJQlVURSBvciBET0NVTUVOVCBub2RlcwoJICB3ZXJlIHNwZWNpZmllZCB3aXRoIGRlYnVnRHVtcE5vZGUgKGJ1ZyAjMTYwNjIxKQoKRnJpIERlYyAxMCAxMToyNDo0MSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCBJRCBkZWFsbG9jYXRpb24gcHJvYmxlbSBiYXNlZCBvbiBwYXRjaCBmcm9tCgkgIFN0ZXZlIFNoZXBhcmQgZml4ZXMgYnVnICMxNjA4OTMKCSogeG1sbWVtb3J5LmM6IGltcHJvdmluZyBjb21tZW50LgoJKiB0ZXN0YXBpLmM6IG5ldyB0ZXN0IGZvciB4bWxEaWN0RXhpc3RzKCkgaXMgZ2VuZXJhdGVkLgoKV2VkIERlYyAgMSAyMjozNTozNyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRpY3QuYywgeHBhdGguYywgaW5jbHVkZS9saWJ4bWwvaGFzaC5oOiBmaXhlZCB1cCBzb21lIGdjYyB3YXJuaW5ncywKCSAgbm8gY2hhbmdlIHRvIGxvZ2ljLiAgTmV3IG1hY3JvIFhNTF9DQVNUX0ZQVFIgdG8gY2lyY3VtdmVudCBnY2MKCSAgd2FybmluZ3Mgb24gZnVuY3Rpb24gcG9pbnRlciA8LT4gb2JqZWN0IHBvaW50ZXIgKGEgaGFjaykuCgpNb24gTm92IDI5IDE0OjA3OjE4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWVtb3J5IGxlYWsgb24gZXJyb3JzIGluIHNvbWUgY2lyY3Vtc3RhbmNlcyAjMTU5ODEyCgpGcmkgTm92IDI2IDIzOjIwOjQ4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sSU8uYzogYWRkZWQgYSBjaGVjayB3aXRoaW4geG1sT3V0cHV0QnVmZmVyV3JpdGVFc2NhcGUgdG8gcHJldmVudAoJICBhIGRlYWQgbG9vcCBvbiBiYWQgZGF0YSAoYnVnIDE1OTU1MCkKCkZyaSBOb3YgMjYgMTM6MDk6MDQgQ0VUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBzdHJpY3QvbGF4IGVsZW1lbnQgd2lsZGNhcmRzOiB0aGUgY2hpbGRyZW4KCSAgb2YgZWxlbWVudHMgZm9yIHdoaWNoIGEgZGVjbGFyYXRpb24gZXhpc3RlZCB3ZXJlIHN0aWxsIHByb2Nlc3NlZAoJICBieSB0aGUgd2lsZGNhcmQgbWVjaGFuaXNtIChyZXBvcnRlZCBieSBwaGlsaXBwZSB2ZW50cmlsbG9uIHRvIHRoZQoJICBtYWlsaW5nIGxpc3QpLgoJICBDaGFuZ2VkIHRoZSBpbXBvcnQgYW5kIGluY2x1ZGUgbWFjaGFuaXNtIHRvIHNoYXJlIGRpY3Rpb25hcmllcy4KCkZyaSBOb3YgMjYgMTE6NDQ6MzYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBtYWtlIHN1cmUgeG1sQ3R4dFJlYWRGaWxlIGFuZCBodG1sQ3R4dFJlYWRGaWxlCgkgIGdvIHRocm91Z2ggdGhlIGNhdGFsb2cgcmVzb2x1dGlvbi4KCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGZpeCBhIHNpZGUgZWZmZWN0IHdybmluZyBvZiB0aGUgY2hhbmdlCgpXZWQgTm92IDI0IDEzOjQxOjUyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYyBpbmNsdWRlL2xpYnhtbC9kaWN0Lmg6IGFkZGVkIHhtbERpY3RFeGlzdHMoKSB0byB0aGUgCgkgIGRpY3Rpb25uYXJ5IGludGVyZmFjZS4KCSogeG1scmVhZGVyLmM6IGFwcGx5aW5nIHhtbFRleHRSZWFkZXJIYXNBdHRyaWJ1dGVzIGZpeCBmb3IgbmFtZXNwYWNlcwoJICBmcm9tIFJvYiBSaWNoYXJkcwoKV2VkIE5vdiAxNyAxMzo1NDozNyBDRVQgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IHRpbnkgZW5oYW5jZW1lbnQgZm9yIGNvbnRlbnQgbW9kZWwgZXJyb3IgcmVwb3J0cwoJICAoIzE1NzE5MCwgIzE0Mzk0OCkuIFJlbW92ZWQgYWJicmV2aWF0aW9uczogQ1QsIFNUIGFuZCBXQyAKCSAgKCMxNTcxOTAsIHJlcG9ydGVkIGJ5IEZyYW5zICBFbmdsaWNoKS4KCSAgSW5pdGlhbDogbm8gcmVwb3J0IG9mIGxvY2FsIGNvbXBvbmVudHMuCgkqIHJlc3VsdC9zY2hlbWFzL2FsbCogcmVzdWx0L3NjaGVtYXMvYW55M18wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2Nob2ljZSoKCSAgcmVzdWx0L3NjaGVtYXMvY29zLXN0LXJlc3RyaWN0cy0xLTItZXJyXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvZGVyaXZhdGlvbi1vay1leHRlbnNpb24tZXJyXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvZGVyaXZhdGlvbi1vay1leHRlbnNpb25fMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9kZXJpdmF0aW9uLW9rLXJlc3RyaWN0aW9uLTItMS0xXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvZGVyaXZhdGlvbi1vay1yZXN0cmljdGlvbi00LTEtZXJyXzBfMC5lcnIgCgkgIHJlc3VsdC9zY2hlbWFzL2RldGVyMF8wXzAuZXJyIHJlc3VsdC9zY2hlbWFzL2V4dGVuc2lvbjFfMF8yLmVycgoJICByZXN1bHQvc2NoZW1hcy9mYWNldC11bmlvblNULWVycjFfMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9oZXhiaW5hcnlfMF8xLmVycgoJICByZXN1bHQvc2NoZW1hcy9saXN0KiByZXN1bHQvc2NoZW1hcy9yZXN0cmljdGlvbi1hdHRyMV8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL3Zkdi1maXJzdDRfMF8xLmVyciByZXN1bHQvc2NoZW1hcy92ZHYtZmlyc3Q0XzBfMi5lcnI6CgkgIEFkYXB0ZWQgb3V0cHV0LgoKTW9uIE5vdiAxNSAxMzowNDoyOCBDRVQgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IE1vdmVkIGV4ZWN1dGlvbiBvZiB4bWxTY2hlbWFDaGVja0RlZmF1bHRzIHRvCgkgIHhtbFNjaGVtYVR5cGVGaXh1cDsgdGhpcyBlbnN1cmVzIGZhY2V0cyBvZiBpbmhlcml0ZWQgdHlwZXMgdG8gYmUKCSAgY2hlY2tlZCBwcmlvciB0byBmYWNldHMgb2YgZGVyaXZlZCB0eXBlcyAtIHdoaWNoIGNhdXNlZCBhIHNlZwoJICBmYXVsdCBvdGhlcndpc2UgKGJ1ZyAjMTU4MjE2LCByZXBvcnRlZCBieSBGcmFucyBFbmdsaWNoKS4KClN1biBOb3YgMTQgMjI6MjM6MTggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW50ZXN0LnB5LCB0ZXN0YXBpLmM6IGZ1cnRoZXIgZW5oYW5jZW1lbnQsIG5vdyBhbGwKCSAgY29tcGlsYXRpb24gd2FybmluZ3MgaGF2ZSBiZWVuIGZpeGVkLgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgTlVMTCBjaGVjayBmb3Igb25lIGZ1bmN0aW9uCgpGcmkgTm92IDEyIDIzOjU4OjE0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogdHJpdmlhbCBjaGFuZ2UgKGNoYW5nZWQgQ0hFQ0tfQ09OVEVYVCB0byBDSEVDS19DVFhUCgkgIG9uIGEgY291cGxlIG9mIGxpbmVzKQoJKiBnZW50ZXN0LnB5LCB0ZXN0YXBpLmM6IGVuaGFuY2VkIHRvIHJlZHVjZSBjb21waWxhdGlvbiB3YXJuaW5ncwoKRnJpIE5vdiAxMiAxNjoxMjo0OCBDRVQgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFVuLWNvbW1lbnRlZCBhIFRPRE8gaW4geG1sU2NoZW1hUGFyc2VFbGVtZW50LgoKRnJpIE5vdiAxMiAxNDo1NTozNiBDRVQgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IENvcnJlY3Qgc3ltYm9sIHNwYWNlIGZvciAnYWxsJyBhbmQgJ2Nob2ljZScuCgkqIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUveG1sc2NoZW1hc3R5cGVzLmg6IEFkZGVkICdyZXBsYWNlJyAKCSAgbm9ybWFsaXphdGlvbiBmb3IgJ25vcm1hbGl6ZWRTdHJpbmcnLiAgCgkgIEFkZGVkIHhtbFNjaGVtYVdoaXRlU3BhY2VSZXBsYWNlIHRvIHRoZSBBUEkuCgpUaHUgTm92IDExIDIxOjQzOjAyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBmb3Jnb3QgYSAkKHNyY2RpcikKCSogZW5jb2RpbmcuYzogc3R1cGlkIGVycm9yIHdyb25nIG5hbWUgIzE1Nzk3NgoKV2VkIE5vdiAxMCAxNTozNToyNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGNvbmZpZ3VyZS5pbiBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgbGlieG1sMi0yLjYuMTYKCldlZCBOb3YgMTAgMTI6NTU6MTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IEFwcGxpZWQgcGF0Y2ggZnJvbSBCcmVudAoJICBIZW5kcmlja3MgYWRkaW5nIHN1cHBvcnQgZm9yIGxhdGUgRFREIHZhbGlkYXRpb24uCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvZHRkdmFsaWQucHkKCSAgcHl0aG9uL3Rlc3RzL3Rlc3QuZHRkOiBpbnRlZ3JhdGVkIHRoZSBwcm92aWRlZCByZWdyZXNzaW9uIHRlc3QKClR1ZSBub3YgIDkgMTk6MjQ6MzEgQ0VUIDIwMDQgRG9kamkgU2VrZXRlbGkgPGRvZGppQHNla2V0ZWxpLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogZGV0ZWN0IHdoZW4gc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UKCSAgaGFzIHRoZSBfX3NzX2ZhbWlseSBtZW1iZXIgaW5zdGVhZCBvZiBzc19mYW1pbHkgYW5kCgkgIGJlaGF2ZSBhY2NvcmRpbmdseS4gV2Ugbm93IGNhbiB1c2UgaXB2NiBvbiBhaXguCgpUdWUgTm92ICA5IDE3OjE1OjQ2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBpbnRlZ3JhdGVkIGluICJtYWtlIHRlc3RzIgoJICBhZGRlZCAtcSBvcHRpb24sIGFuZCBtb3JlIGNvbmRpdGlvbmFsIGZlYXR1cmVzIGZpeGVzCgkqIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIHBhcnNlci5jIHRlc3RUaHJlYWRzLmMgeG1sbGludC5jCgkgIHhtbHNjaGVtYXN0eXBlcy5jIHhtbHdyaXRlci5jaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oCgkgIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6IHZhcmlvdXMgY29tcGlsYXRpb24gYW5kIGNvbmRpdGlvbmFsCgkgIGNsZWFudXBzLgoJKiBkb2MvKjogcmVnZW5lcmF0ZWQKClR1ZSBOb3YgIDkgMTU6NTk6NTAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGJldHRlciBoYW5kbGluZyBvZiBjb25kaXRpb25hbCBmZWF0dXJlcwoJKiBIVE1McGFyc2VyLmMgU0FYMi5jIHBhcnNlckludGVybmFscy5jIHhtbHdyaXRlci5jOiBtb3JlIHRlc3RpbmcKCSAgb24gcGFyc2VyIGNvbnRleHRzIGNsb3NlZCBsZWFrcywgZXJyb3IgbWVzc2FnZXMKClR1ZSBOb3YgIDkgMTA6MjE6MzcgR01UIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBwcm9ibGVtIGNvbmNlcm5pbmcgWFBhdGggY29udGV4dCBjb3JydXB0aW9uCgkgIGR1cmluZyBmdW5jdGlvbiBhcmd1bWVudCBldmFsdWF0aW9uIChidWcgMTU3NjUyKQoJICAKTW9uIE5vdiAgOCAxODo1NDo1MiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0YXBpLmM6IG1vcmUgdHlwZXMuCgkqIHBhcnNlckludGVybmFscy5jIHhwYXRoLmM6IG1vcmUgZml4ZXMKCk1vbiBOb3YgIDggMTg6MTY6NDMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGJldHRlciBwYXJzZXIgb3B0aW9ucyBjb3ZlcmFnZQoJKiBTQVgyLmMgeHBhdGguYzogbW9yZSBjbGVhbnVwcy4KClR1ZSBOb3YgIDkgMDE6NTA6MDggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdGFwaS5jOiB0cnlpbmcgdG8gZml4IHNvbWUgb3B0aW9uYWwgc3VwcG9ydCBicm9rZW5uZXNzCgpNb24gTm92ICA4IDE3OjI1OjI3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGNvdmVyYWdlCgkqIGRlYnVnWE1MLmMgcGFyc2VyLmMgeG1scmVnZXhwLmMgeHBhdGguYzogbW9yZSBmaXhlcwoKTW9uIE5vdiAgOCAxNTowMjozOSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBjb3ZlcmFnZQoJKiBTQVgyLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IG1vcmUgZml4ZXMKCk1vbiBOb3YgIDggMTI6NTU6MTYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgdGVzdGFwaS5jIHhtbElPLmMgeG1sc3RyaW5nLmM6IG1vcmUgZml4ZXMuCgpNb24gTm92ICA4IDExOjI0OjU3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIHR5cGVzLCBtb3JlIGNvdmVyYWdlCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHJlbGF4bmcuYyB2YWxpZC5jIHhtbElPLmMKCSAgeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgcHJvYmxlbXMgZml4ZWQKCSAgCk1vbiBOb3YgIDggMTA6MjQ6MjggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW50ZXN0LnB5OiBmaXhlZCB0ZXN0IGZpbGUgY29ycnVwdGlvbiBwcm9ibGVtCgpTdW4gTm92ICA3IDEzOjE4OjA1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBmaXhlZCB0eXBvcyBhbmQgYXZvaWQgQ2F0YWxvZ3MgdmVyYm9zaXR5CgpTYXQgTm92ICA2IDIzOjI1OjE2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RhcGkuYzogYXVnbWVudGVkIHRoZSBudW1iZXIgb2YgdHlwZXMKClNhdCBOb3YgIDYgMjA6MjQ6MDcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB0cmVlLmMgeG1scmVhZGVyLmMgeG1sd3JpdGVyLmM6IGEgbnVtYmVyIG9mIG5ldwoJICBidWcgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KClNhdCBOb3YgIDYgMTU6NTA6MTEgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGF1Z21lbnRlZCB0eXBlIGF1dG9nZW5lcmF0aW9uIGZvciBlbnVtcwoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IHJlbW92ZWQgZGlyZWN0IGVycm9yIHJlcG9ydGluZy4KClNhdCBOb3YgIDYgMTQ6Mjc6MTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4ZWQgYSByZWdyZXNzaW9uIGluIGljb252IHN1cHBvcnQuCgpGcmkgTm92ICA1IDE4OjE5OjIzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBhdXRvZ2VuZXJhdGUgYSBtaW5pbWFsIE5VTEwgdmFsdWUgc2VxdWVuY2UKCSAgZm9yIHVua25vd24gcG9pbnRlciB0eXBlcwoJKiBIVE1McGFyc2VyLmMgU0FYMi5jIGNodmFsaWQuYyBlbmNvZGluZy5jIGVudGl0aWVzLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgcmVsYXhuZy5jIHZhbGlkLmMgeG1sSU8uYyB4bWxyZWFkZXIuYyAKCSAgeG1sc2F2ZS5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyB4bWxzdHJpbmcuYyB4cGF0aC5jCgkgIHhwb2ludGVyLmM6IFRoaXMgdW5jb3ZlcmVkIGFuIGltcHJlc3NpdmUgYW1vdW50IG9mIGVudHJ5IHBvaW50cwoJICBub3QgY2hlY2tpbmcgZm9yIE5VTEwgcG9pbnRlcnMgd2hlbiB0aGV5IG91Z2h0IHRvLCBjbG9zaW5nIGFsbAoJICB0aGUgb3BlbiBnYXBzLgoKRnJpIE5vdiAgNSAxNjoyNjoyOCBVVEMgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNhdGFsb2cuYzogZml4ZWQgcHJvYmxlbSB3aXRoIE5VTEwgZW50cnkgKGJ1ZyAxNTc0MDcpCgkqIHhwYXRoLmM6IGZpeGVkIGEgY291cGxlIG9mIHdhcm5pbmdzIChubyBjaGFuZ2UgdG8gbG9naWMpCgpGcmkgTm92ICA1IDE1OjMwOjQzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGNvdmVyYWdlCgkqIHhtbHVuaWNvZGUuYzogb25lIGZpeAoKRnJpIE5vdiAgNSAyMzoxNTo1MSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gb24gYSByZWNlbnQgY2hhbmdlCgpGcmkgTm92ICA1IDEyOjUwOjA5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGNvdmVyYWdlCgkqIG5hbm9mdHAuYyB0cmVlLmM6IG1vcmUgZml4ZXMKCkZyaSBOb3YgIDUgMTE6MDI6MjggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGZpeGVkIHRoZSB3YXkgdGhlIGdlbmVyYXRvciB3b3JrcywKCSAgZXh0ZW5kZWQgdGhlIHRlc3RpbmcsIGVzcGVjaWFsbHkgd2l0aCBtb3JlIHJlYWwgdHJlZXMgYW5kIG5vZGVzLgoJKiBIVE1MdHJlZS5jIHRyZWUuYyB2YWxpZC5jIHhpbmNsdWRlLmMgeG1sSU8uYyB4bWxzYXZlLmM6IGEgYnVuY2gKCSAgb2YgcmVhbCBwcm9ibGVtcyBmb3VuZCBhbmQgZml4ZWQuCgkqIGVudGl0aWVzLmM6IGZpeCBlcnJvciByZXBvcnRpbmcgdG8gZ28gdGhyb3VnaCB0aGUgbmV3IGhhbmRsZXJzCgpUaHUgTm92ICA0IDE4OjQ0OjU2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBkb2hoIC4uLiBzdHVwaWQgY2hhbmdlIGtpbGxpbmcgeG1sUGFyc2VEb2MoKQoKVGh1IE5vdiAgNCAxODozMjoyMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogY2hhbmdpbmcgdGhlIHdheSB0aGUgLmMgaXMgZ2VuZXJhdGVkLAoJICBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgkqIGluY2x1ZGUvbGlieG1sL25hbm9mdHAuaCBuYW5vZnRwLmMgZWxmZ2NjaGFjay5oIGRvYy8qOiBmaXhpbmcgc29tZQoJICBmdW5jdGlvbiBzaWduYXR1cmVzLCByZWdlbmVyYXRpbmcgc3R1ZmYKCSogU0FYMi5jIHBhcnNlci5jIHhtbElPLmM6IGFub3RoZXIgc2V0IG9mIGJ1ZyBmaXhlcyBhbmQgQVBJIGhhcmRlbmluZwoKVGh1IE5vdiAgNCAxMzozMjoxOSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoKVGh1IE5vdiAgNCAxMTo1MjoyOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZ2VudGVzdC5weSB3YXMgbWlzc2luZyBmcm9tIHRoZSBFWFRSQV9ESVNUCgpUaHUgTm92ICA0IDExOjQ4OjQ3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgkqIEhUTUx0cmVlLmMgdHJlZS5jIHhtbHNhdmUuYyB4cG9pbnRlci5jOiBtb3JlIGZpeGVzIGFuZCBjbGVhbnVwcwoKVGh1IE5vdiAgNCAwMDoyNTozNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBmaXhlcyBhbmQgZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoJKiBuYW5vZnRwLmMgeG1sSU8uYzogbW9yZSBmaXhlcyBhbmQgaGFyZGVuaW5nCgkKV2VkIE5vdiAgMyAyMDoxNjoyNCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBmaXhlcyBhbmQgZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoJKiB2YWxpZC5jOiBidW5jaCBvZiBjbGVhbnVwcyBhbmQgMiBsZWFrcyByZW1vdmVkIAoKV2VkIE5vdiAgMyAxODowNjo0NCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBmaXhlcyBhbmQgZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoJKiBsaXN0LmMgdHJlZS5jOiBtb3JlIGZpeGVzIGFuZCBoYXJkZW5pbmcKCldlZCBOb3YgIDMgMTU6MTk6MjIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgZml4ZXMgYW5kIGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogYWRkaW5nIGEgdHlwZSBpbml0IGludGVyZmFjZQoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIHBhcnNlci5jIHhtbHJlYWRlci5jIHhtbHdyaXRlci5jOiBtb3JlCgkgIGNsZWFudXBzIGFuZCBidWcgZml4ZXMgcmFpc2VkIGJ5IHRoZSByZWdyZXNzaW9uIHRlc3RzCgpXZWQgTm92ICAzIDEyOjQ5OjMwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGZpeGVzIGFuZCBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgkqIHhtbHdyaXRlci5jIGxpc3QuYzogbW9yZSBoYXJkZWluZyBvZiBBUElzCgkqIGRvYy9hcGlidWlsZC5weTogc2tpcCB0ZXN0YXBpLmMgd2hlbiBzY2FubmluZyB0aGUgQyBmaWxlcy4KClR1ZSBOb3YgIDIgMjM6MDk6MDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgdGVzdGluZyBhbmQgY292ZXJhZ2UKCSogZWxmZ2NjaGFjay5oIHhtbHN0cmluZy5jIGluY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oOiBtb3JlIGNsZWFudXBzCgkqIGRvYy8qOiByZWJ1aWx0CgpUdWUgTm92ICAyIDE5OjQ0OjMyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGRldmVsb3BtZW50cyBvbiB0aGUgQVBJIHRlc3RpbmcKCSogSFRNTHBhcnNlci5jIHRyZWUuYzogbW9yZSBjbGVhbnVwcwoJKiBkb2MvKjogcmVidWlsdAoKVHVlIE5vdiAgMiAxNTo0OTozNCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogYWRkaW5nIHhtbE1lbUJsb2NrcygpCgkqIE1ha2VmaWxlLmFtIGdlbnRlc3QucHkgdGVzdGFwaS5jOiB3b3JrIG9uIGdlbmVyYXRvciBvZiBhbgoJICBhdXRvbWF0aWMgQVBJIHJlZ3Jlc3Npb24gdGVzdCB0b29sLgoJKiBTQVgyLmMgbmFub2Z0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB4bWxJTy5jCgkgIHhtbHN0cmluZy5jOiB2YXJpb3VzIEFQSSBoYXJkZWluZyBjaGFuZ2VzIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcKCSAgdGVoIGZpcnN0IHNldCBvZiBhdXRvbWF0aWMgQVBJIHJlZ3Jlc3Npb24gdGVzdHMuCgkqIHRlc3Qvc2xhc2hkb3QxNi54bWw6IGFwcGFyZW50bHkgbWlzc2luZyBmcm9tIENWUywgY29tbWl0ZWQgaXQKCk1vbiBOb3YgIDEgMTU6NTQ6MTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYW4gVVRGLTggcGFyc2luZyBidWcgcmVwb3J0ZWQgYnkgTWFya3VzIEJlcnRoZWF1CgkgIG9uICNmZWRvcmEtZGV2ZWwKClN1biBPY3QgMzEgMjI6MDM6MzggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IFBldHIgUGFqYXMgb24gdGhlIGxpc3QgYW5kCgkgIGFmZmVjdGluZyBYTUw6OkxpYnhtbAoKU3VuIE9jdCAzMSAxNjozMzo1NCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGRvYy9leGFtcGxlcy90ZXN0V3JpdGVyLmM6IEZpeGVkIGJ1ZyAjMTUzOTM3LCBtYWtpbmcKCSAgc3VyZSB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuLgoJICBIYWQgdG8gZml4IG9uZSBvZiB0aGUgZXhhbXBsZXMuCgpGcmkgT2N0IDI5IDE0OjE2OjU2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sbGludC4xIGRvYy94bWxsaW50LnhtbDogaW5kaWNhdGUgLSBtZWFucyBzdGRpbiBjbG9zaW5nICMxNTY2MjYKCkZyaSBPY3QgMjkgMTQ6MDM6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogcmVnaXN0ZXIgeG1sU2NoZW1hU2V0VmFsaWRFcnJvcnMsIHBhdGNoIGZyb20KCSAgQnJlbnQgSGVuZHJpY2tzIGluIHRoZSBtYWlsaW5nLWxpc3QKCSogaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCBIVE1McGFyc2VyLmMgU0FYMi5jIHZhbGlkLmMKCSAgcGFyc2VySW50ZXJuYWxzLmM6IGZpeCAjMTU2NjI2IGFuZCBtb3JlIGdlbmVyYWxseSBob3cgdG8gZmluZCBvdXQKCSAgaWYgYSB2YWxpZGF0aW9uIGNvbnRlY3QgaXMgcGFydCBvZiBhIHBhcnNpbmcgY29udGV4dCBvciBub3QuIFRoaXMKCSAgY2FuIHByb2JhYmx5IGJlIGltcHJvdmVkIHRvIG1ha2UgMTAwJSBzdXJlIHRoYXQgdmN0eHQtPnVzZXJEYXRhCgkgIGlzIHRoZSBwYXJzZXIgY29udGV4dCB0b28uIEl0J3MgYSBiaXQgaGFpcnkgYmVjYXVzZSB3ZSBjYW4ndCAKCSAgY2hhbmdlIHRoZSB4bWxWYWxpZEN0eHQgc3RydWN0dXJlIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSSBzaW5jZQoJICB0aGlzIGNoYW5nZSB4bWxQYXJzZXJDdHh0IGluZm9ybWF0aW9uIGluZGV4ZXMuCgpXZWQgT2N0IDI3IDE5OjI2OjIwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDaGFuZ2VMb2cgTkVXUyBjb25maWd1cmUuaW4gZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIDIuNi4xNQoJKiBkZWJ1Z1hNTC5jIG5hbm9mdHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IGNsZWFudXBzCgpXZWQgT2N0IDI3IDA5OjMxOjI0IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdXJpLmM6IGZpeGVkIGEgc3R1cGlkIG1pc3Rha2UgaW4geG1sQnVpbGRSZWxhdGl2ZVVSSQoJICAoYnVnIDE1NjUyNykKCldlZCBPY3QgMjcgMTE6NDQ6MzUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBzZWNvbmQgcGFydCBvZiB0aGUgc2VjdXJpdHkgZml4IGZvcgoJICB4bWxOYW5vRlRQQ29ubmVjdCgpIGFuZCB4bWxOYW5vSFRUUENvbm5lY3RIb3N0KCkuCgpUdWUgT2N0IDI2IDIzOjU3OjAyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IGFwcGxpZWQgZml4ZXMgZm9yIGEgY291cGxlIG9mIHBvdGVudGlhbCBzZWN1cml0eSBwcm9ibGVtcwoJKiB0cmVlLmMgdmFsaWQuYyB4bWxsaW50LmM6IG1vcmUgZml4ZXMgb24gdGhlIHN0cmluZyBpbnRlcm5pbmcgY2hlY2tzCgpUdWUgT2N0IDI2IDE4OjA5OjU5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFkZGVkIGNoZWNraW5nIGZvciBuYW1lcwoJICB2YWx1ZXMgYW5kIGRpY3Rpb25uYXJpZXMgZ2VuZXJhdGVzIGEgdG9ucyBvZiBlcnJvcnMKCSogU0FYMi5jY2F0YWxvZy5jIHBhcnNlci5jIHJlbGF4bmcuYyB0cmVlLmMgeGluY2x1ZGUuYyB4bWx3cml0ZXIuYwoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGZpeGluZyB0aGUgZXJyb3JzIGluIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpNb24gT2N0IDI1IDE2OjA0OjIyIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IG1vZGlmaWVkIHRoZSBoYW5kbGluZyBvZiBfcHJpdmF0ZSBmb3IgZW50aXR5CgkgIGV4cGFuc2lvbiAoYnVnIDE1NTgxNikKCk1vbiBPY3QgMjUgMTc6MTE6MzcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCB0aGUgbGVhayByZXBvcnRlZCBieSBWb2xrZXIgUm90aCBvbiB0aGUgbGlzdAoJKiB0ZXN0L2VudDEwIHJlc3VsdC8vZW50MTAqOiBhZGRlZCBhIHNwZWNpZmljIHRlc3QgZm9yIHRoZSBwcm9ibGVtCgpTYXQgT2N0IDIzIDExOjA3OjQxIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogdW5saW5rZWQgdGhlIGludGVybmFsIHN1YnNldCB3aXRoaW4geG1sVmFsaWRhdGVEdGQKCSAgKGJ1ZyAxNDE4MjcpCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgLVdhbGwgdG8gZGV2ZWxvcGVyJ3MgZmxhZ3MKCSogZG9jL2V4YW1wbGVzL3JlYWRlcjQucmVzOiBhZGRlZCB0byBDVlMKCkZyaSBPY3QgMjIgMTY6MzY6NTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYWRkZWQgc3VwcG9ydCBmb3IgSFRNTCBQSXMgIzE1NjA4NwoJKiB0ZXN0L0hUTUwvcHl0aG9uLmh0bWwgcmVzdWx0L0hUTUwvcHl0aG9uLmh0bWwqOiBhZGRlZCBzcGVjaWZpYyB0ZXN0cwoKRnJpIE9jdCAyMiAxNToyMDoyMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jOiBmaXhlZCBuYXN0eSBidWcgIzE1NjA4NwoKRnJpIE9jdCAyMiAyMTowNDoyMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBhIHByb2JsZW0gb2NjdXJpbmcgb25seSBpbiB4ODZfNjQgd2hlbgoJICB2ZXJ5IGxhcmdlIGVycm9yIG1lc3NhZ2VzIGFyZSByYWlzZWQgdG8gdGhlIFB5dGhvbiBoYW5kbGVycy4KClRodSBPY3QgMjEgMTg6MDM6MjEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgYSBtZW1vcnkgYnVnCgkqIGRvYy9leGFtcGxlcy9yZWFkZXI0LmMgZG9jL2V4YW1wbGVzLyo6IGFkZGVkIHRlc3QgZnJvbSBHcmFoYW0gQmVubmV0dAoJICBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRpcmVjdG9yeQoKVHVlIE9jdCAxOSAxMTowNjozOSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggeG1scmVhZGVyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBHcmFoYW0gQmVubmV0dCBhZGRpbmcgNCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gdGhlIHJlYWRlciBBUEkuCgpGcmkgT2N0IDE1IDExOjIyOjQ4IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZGVidWdYTUwuYzogZXhjbHVkZWQgYSBmZXcgbm9kZXMgKHdpdGggbm8gY29udGVudCkgZnJvbSB0aGUKCSAgc3RyaW5nIGNoZWNrIHJvdXRpbmUuCgpGcmkgT2N0IDE1IDEwOjQ4OjMwIEVEVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYWRkZWQgVVRGLTggc3RyaW5nIGNoZWNraW5nLAoJICByYWlzZSBhIHByb2JsZW0sIG5lZWQgZGVidWcKCldlZCBPY3QgMTMgMDI6MTc6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogYXBwbGllZCBwYXRjaCBmcm9tIFRob21hcyBGaXR6c2ltbW9ucyBmaXhpbmcKCSAgIzE1NTI0MCBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UgdHJlZS4gYnV0IG1ha2UgdGVzdHMgZmFpbHMuCgpNb24gT2N0IDExIDE2OjI2OjUxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFkZGVkIG5hbWVzcGFjZSBjaGVja2luZwoKU2F0IE9jdCAgOSAyMjozNjoyMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogc29tZSBmcmFtZXdvcmsgcHJlcGFyYXRpb24gdG8gYWRkIG5hbWVzcGFjZSBjaGVja2luZ3MKClRodSBPY3QgIDcgMTU6MTI6NTggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaCBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOgoJICBhZGRpbmcgdGhlIHRyZWUgZGVidWcgbW9kZQoJKiBwYXJzZXIuYyByZWxheG5nLmMgdHJlZS5jIHhwYXRoLmM6IGZpeGluZyB2YXJpb3VzIHByb2JsZW1zIHJlcG9ydGVkCgkgIGJ5IHRoZSBkZWJ1ZyBtb2RlLgoJKiBTQVgyLmM6IGFub3RoZXIgdHJlZSBmaXggZnJvbSBSb2IgUmljaGFyZHMKCldlZCBPY3QgIDYgMTA6NTA6MDMgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjYXRhbG9nLmM6IHNtYWxsIGNoYW5nZSB0byBsYXN0IGZpeCwgdG8gZ2V0IHhtbDpiYXNlIHJpZ2h0CgpXZWQgT2N0ICA2IDA5OjMzOjUxIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY2F0YWxvZy5jOiBhZGRlZCBjb2RlIHRvIGhhbmRsZSA8Z3JvdXA+LCBpbmNsdWRpbmcgZHVtcGluZwoJICB0byBvdXRwdXQgKGJ1ZyAxNTE5MjQpLgoJKiB4bWxjYXRhbG9nLmMsIHhtbHN0cmluZy5jLCBwYXJzZXIuYzogbWlub3IgY29tcGlsZXIgd2FybmluZyAKCSAgY2xlYW51cCAobm8gY2hhbmdlIHRvIGxvZ2ljKQoJICAKTW9uIE9jdCAgNCAxNjowOTowNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiByZXZhbXBlZCB0aGUgWE1MIGRlYnVnZ2luZwoJICBtb2R1bGUgYW5kIHByZXBhcmUgZm9yIGEgbmV3IGNoZWNraW5nIG1vZGUKCk1vbiBPY3QgIDQgMTM6NTM6MjQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrIGZpeGluZyBidWcgIzE1MjQyNgoKTW9uIE9jdCAgNCAxMjoyNjoyOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3Rlc3RzL291dGJ1Zi5weTogCgkgIGFwcGxpZWQgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sgZml4aW5nIGJ1ZyAjMTU0Mjk0CgkgIHJlbGF0ZWQgdG8gc2F2aW5nIHRvIHB5dGhvbiBmaWxlIG9iamVjdHMuCgpTYXQgT2N0ICAyIDIxOjA4OjUxIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdHJlZS5jOiBjaGFuZ2VkIHhtbEhhc05zUHJvcCB0byBwcm9wZXJseSBoYW5kbGUgYSByZXF1ZXN0IGZvcgoJICB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgKGJ1ZyAxNTM1NTcpCgpTYXQgT2N0ICAyIDE4OjE4OjI3IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBkaWN0aW9uYXJ5IGhhbmRsaW5nIHdpdGhpbgoJICB4bWxQYXJzZUluTm9kZUNvbnRleHQgKGJ1ZyAxNTMxNzUpCgpTYXQgT2N0ICAyIDE1OjQ2OjM3IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5LCBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUyLnB5LAoJICBjaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5LCBjaGVjay14bWwtdGVzdC1zdWl0ZS5weSwKCSAgY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5LCBkb2MvZXhhbXBsZXMvaW5kZXgucHk6IGNoYW5nZWQKCSAgY2hhbmdlZCBzeXMucGF0aCBzZXR0aW5nIGZyb20gJ2FwcGVuZCcgdG8gJ2luc2VydCcgKHBhdGNoCgkgIHN1cHBsaWVkIGJ5IE1hbGNvbG0gVHJlZGlubmljaykgKGJ1ZyAxNTM3MTYpCgpTYXQgT2N0ICAyIDE1OjAzOjE0IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IGFkZGVkIHR3byBuZXcgbWFjcm9zCgkgIElTX0FTQ0lJX0xFVFRFUiBhbmQgSVNfQVNDSUlfRElHSVQgdXNlZCB3aXRoIChodG1sKQoJICBwYXJzaW5nIGFuZCB4cGF0aCBmb3IgdGVzdGluZyBkYXRhIG5vdCBuZWNlc3NhcmlseQoJICB1bmljb2RlLgoJKiBIVE1McGFyc2VyLmMsIHhwYXRoLmM6IGNoYW5nZWQgdXNlIG9mIElTX0xFVFRFUl9DSCBhbmQKCSAgSVNfRElHSVRfQ0ggbWFjcm9zIHRvIGFzY2lpIHZlcnNpb25zIChidWcgMTUzOTM2KS4KCSAgCkZyaSBPY3QgIDEgMjA6Mzc6MjUgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlcnJvci5jOiBhZGRlZCBzb21lIGNvZGluZyB0byBhdHRlbXB0IHRvIGRpc3BsYXkgd2hpY2ggZmlsZQoJICBjb250YWlucyBhbiBlcnJvciB3aGVuIHVzaW5nIFhJbmNsdWRlIChidWcgMTUyNjIzKQoKVGh1IFNlcCAzMCAxMToxOToxNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBzdHVwaWQgY3V0J24gcGFzdGUgYnVnIGluIHhtbGxpbnQgZGV0ZWN0aW9uCgpXZWQgU2VwIDI5IDE3OjQ3OjU2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyo6IHJlbGVhc2luZyAyLjYuMTQsIHJlYnVpbGRpbmcgdGhlIGRvY3MKCSAgCldlZCBTZXAgMjkgMTU6MDA6MTEgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaAoJICBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IFBhcnNpbmcgb2YgPGNvbXBsZXhDb250ZW50PgoJICAtIGhhbmRsZSBhdHRyaWJ1dGUgJ21peGVkJywgY2F0Y2ggaWxsZWdhbCBhdHRyaWJ1dGVzLgoJICBQYXJzaW5nIG9mIDxjb21wbGV4VHlwZT4gLSBoYW5kbGUgYXR0cmlidXRlcyAnYWJzdHJhY3QnLAoJICAnZmluYWwnIGFuZCAnYmxvY2snLCBjYXRjaCBpbGxlZ2FsIGF0dHJpYnV0ZXMuCgkgIFZhbGlkYXRpb24gb2YgY29tcGxleCB0eXBlcyAtIGhhbmRsZSBhYnN0cmFjdCB0eXBlcy4KCSAgQWRkZWQgaGFuZGxpbmcgb2YgZGVmYXVsdC9maXhlZCBhdHRyaWJ1dGVzIGFuZCBlbGVtZW50IHZhbHVlcy4KCSAgUGVyIHZhbGlkYXRpb24gb3B0aW9uIGF0dHJpYnV0ZSBub2Rlcy90ZXh0IG5vZGVzIGFyZSBjcmVhdGVkCgkgIG9uIHRoZSBpbnN0YW5jZS4KCSAgQWRkZWQgdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RyYWludHMgZm9yIGZpeGVkL2RlZmF1bHQuCgkgIEFkZGVkIHhtbFNjaGVtYVNldFZhbGlkT3B0aW9ucywgeG1sU2NoZW1hR2V0VmFsaWRPcHRpb25zCgkgIHRvIHRoZSBleHRlcm5hbCBBUEkuCgkgIEV4dGVuZGVkIGVsZW1lbnQgZGVjbGFyYXRpb24gY29uc3RyYWludHMuICAKCSAgR290IHJpZCBvZiBwZXJzZXZlcmF0aXZlIGNyZWF0aW9uIG9mIHRlbXBvcmVyeSB2YWxpZGF0aW9uL3BhcnNlciAKCSAgY29udGV4dHMuCgkgIEFkZGVkIGhhbmRsaW5nIG9mIHhzaTpzY2hlbWFMb2NhdGlvbiBhbmQKCSAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb24uCgkgIEZpeGVkIHhzaTp0eXBlIGNvbXBvbmVudCByZXNvbHV0aW9uIGlmIHVzaW5nIG5vbi1wcmVmaXhlZAoJICBRTmFtZXMuCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oOgoJICBFbmFibGVkIG5hbWVzcGFjZSBhd2FyZW5lc3Mgb2YgdGhlIGNvbnRlbnQgbW9kZWwgaWYgdXNpbmcgdGhlCgkgIG1vZGVsIGdyb3VwICJhbGwiLgoJKiB0ZXN0L3NjaGVtYXMvYnVnMTUyNDcwXzEueHNkOiBSZW1vdmVkIGFuICJhYnN0cmFjdCIgYXR0cmlidXRlLAoJICB3aGljaCBicm9rZSB0aGUgdGVzdC4KCSogeHN0Yy94c3RjLnB5OiAgV29ya2Fyb3VuZCB0byBhY2NvbW9kYXRlIGNhc2UgaW5zZW5zaXRpdmUKCSAgdGVzdCBkZWZpbml0aW9ucyBpbiBtcy10ZXN0LmRlZi54bWwgKHdhcyBtaXNzaW5nIGluIGEgcHJldmlvdXMKCSAgY29tbWl0KS4KCldlZCBTZXAgMjkgMTE6MDM6MTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9kcnZfbGlieG1sMi5weTogYW5vdGhlciBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljawoJICBhZGRpbmcgb3B0aW9uIG5vdCB0byBsb2FkIGR0ZCBmcm9tIHRoZSBkcnZfbGlieG1sMi5weSBtb2R1bGUKCSAgIzEzNDYzMwoKVHVlIFNlcCAyOCAxNDozMDoyMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYWNjb25maWcuaCBjb25maWcuaC5pbiBjb25maWd1cmUuaW4geG1sSU8uYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMKCSAgeG1sc2NoZW1hc3R5cGVzLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sgZml4aW5nCgkgIHdhcm5pbmcgZ2VuZXJhdGVkIGJ5IHRoZSBOb25zdG9wIEtlcm5lbCBPcGVuIFN5c3RlbSBTZXJ2aWNlcyAKCSAgY29tcGlsZXIgIzE1MTcxMAoKVHVlIFNlcCAyOCAxMzowNzozNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weTogYXBwbGllZCBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljayBmaXhpbmcKCSAgcHl0aG9uIGV4Y2VwdGlvbiBoaWVyYXJjaHkgIzEzOTgyNAoKU3VuIFNlcCAyNiAxNjo0MDoyNCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBUT0RPOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrIGZpeGluZyBlcnJhdGEKCSAgRTIwIGNvbmNlcm5pbmcgTk1UT0tFTlMgYW5kIGNvLiB2YWxpZGF0aW9uICMxNTM3MjIKCSogcmVzdWx0L1ZDL0F0dHJpYnV0ZU5tdG9rZW5zIHRlc3QvVkMvQXR0cmlidXRlTm10b2tlbnMKCSAgdGVzdC9WQ00vQXR0cmlidXRlTm10b2tlbnMueG1sOiBhbHNvIGFkZGVkIHRlc3RzIGZyb20gTWFsY29sbQoKU3VuIFNlcCAyNiAxNjoyNDo0NCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHN0Yy94c3RjLnB5OiBhcHBsaWVkIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrIGZpeGluZyBzcGFjZS90YWJzCgkgICMxNTM3MTMKCSogeHBhdGguYzogZml4ZWQgYSByZWFsbG9jIHBvdGVudGlhbCBwcm9ibGVtCgpGcmkgU2VwIDI0IDE2OjE0OjEyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgbWFrZSB2YWxncmluZCB4c3RjIAoKVGh1IFNlcCAyMyAxODoyMzo0NiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGluZyBhbiBvdXQgb2YgYm91bmQgYWRyZXNzaW5nIGlzc3VlCgpUaHUgU2VwIDIzIDE1OjE0OjEyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmMgcmVsYXhuZy5jIHhtbHNjaGVtYXMuYzogbW9yZSBtZW1vcnkgcmVsYXRlZAoJICBjb2RlIGNsZWFudXBzLgoKVGh1IFNlcCAyMyAwMTowNDozMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgYnVuY2ggb2YgZXJyb3JzIHdoZW4gcmVhbGxvYyBmYWlsZWQuCgpXZWQgU2VwIDIyIDIzOjU2OjA1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmMgdXJpLmM6IGNvdXBsZSBvZiBtZW1vcnkgZml4ZXMgZnJvbSBNYXJrIFZha29jIHJlcG9ydGVkCgkgIGJ5IFB1cmlmeSBvbiBXaW5kb3dzLgoKTW9uIFNlcCAyMCAyMjowMTo0NyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRlZCAtLXRpbWluZyAtLWNvcHkgdGltaW5nIGZvciB0aGUgY29weQoJKiB2bXMvYnVpbGRfbGlieG1sLmNvbTogYXBwbGllZCBwYXRjaCBmcm9tIENyYWlnIEJlcnJ5CgkgIHRvIGJ1aWxkIHdpdGggcmVjZW50IHJlbGVhc2VzCgpGcmkgU2VwIDE3IDIxOjI1OjMzIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogbmFub2h0dHAuYywgaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaDogYWRkZWQgdGhlIHJvdXRpbmUKCSAgeG1sTmFub0hUVFBDb250ZW50TGVuZ3RoIHRvIHRoZSBleHRlcm5hbCBBUEkgKGJ1ZzE1MTk2OCkuCgkqIHBhcnNlci5jOiBmaXhlZCB1bm5lY2Vzc2FyeSBpbnRlcm5hbCBlcnJvciBtZXNzYWdlIChidWcxNTIwNjApOwoJICBhbHNvIGNoYW5nZWQgY2FsbCB0byBzdHJuY21wIG92ZXIgdG8geG1sU3RybmNtcC4KCSogZW5jb2RpbmcuYzogZml4ZWQgY29tcGlsYXRpb24gd2FybmluZyAoYnVnMTUyMzA3KS4KCSogdHJlZS5jOiBmaXhlZCBzZWdmYXVsdCBpbiB4bWxDb3B5UHJvcExpc3QgKGJ1ZzE1MjM2OCk7IGZpeGVkCgkgIGEgY291cGxlIG9mIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgoJKiBIVE1MdHJlZS5jLCBkZWJ1Z1hNTC5jLCB4bWxtZW1vcnkuYzogZml4ZWQgYSBmZXcgY29tcGlsYXRpb24KCSAgd2FybmluZ3M7IG5vIGNoYW5nZSB0byBsb2dpYy4KCkZyaSBTZXAgMTcgMTA6NDA6MjMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmVkIHNvbWUgZXh0ZXJuIGJlZm9yZSBmdW5jdGlvbiBjb2RlIHJlcG9ydGVkIGJ5CgkgIEtqYXJ0YW4gTWFyYWFzIG9uIElSQwoJKiBsZWdhY3kuYzogZml4ZWQgY29tcGlsaW5nIHdoZW4gY29uZmlndXJpbmcgb3V0IHRoZSBIVE1MIHBhcnNlcgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgYSBkZWNsYXJhdGlvbiBmb3IgQ1ZTX0VYVFJBX0RJU1QKCSogSFRNTHBhcnNlci5jOiBiZWdpbm5pbmcgb2YgYW4gYXR0ZW1wdCBhdCBjbGVhbmluZyB1cCB0aGUgY29uc3RydWN0aW9uCgkgIG9mIHRoZSBIVE1MIHBhcnNlciBkYXRhIHN0cnVjdHVyZXMsIGN1cnJlbnQgZGF0YSBnZW5lcmF0ZSBhIGh1Z2UKCSAgYW1vdW50IG9mIEVMRiByZWxvY2F0aW9ucyBhdCBsb2FkaW5nIHRpbWUuCgpGcmkgU2VwIDE3IDEwOjM2OjIzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDaGFuZ2VMb2c6IGFwcGxpZWQgZml4IGZyb20gU3RlcGFuIEthc2FsIHRvIGZpeCBkdXBsaWNhdGlvbgoJICBpbiB0aGUgY2hhbmdlIGxvZyBhbmQgY2xlYW51cCBvZiBzcGFjZS90YWJzIGlzc3Vlcy4KClRodSBTZXAgMTYgMTM6MjQ6MjcgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggCgkgIHRlc3Qvc2NoZW1hcy9idWcxNTI0NzBfMS4qIHJlc3VsdC9zY2hlbWFzL2J1ZzE1MjQ3MF8xXzEqOiAKCSAgU2ltcGlmaWVkIGF0dHJpYnV0ZSB3aWxkY2FyZCBjcmVhdGlvbiBhbmQgYXNzaWdubWVudCB0byBnZXQgcmlkIAoJICBvZiBtZW1vcnkgbGVha3MuCgkgIFJlc3RydWN0dXJlZCB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzLgoJICBSZXN0cnVjdHVyZWQgYW5kIGV4cGFuZGVkIHBhcnNpbmcgb2YgPGF0dHJpYnV0ZUdyb3VwPi4KCSAgQWRkZWQgaW5pdGlhbCBoYW5kaW5nIG9mIHhzaTp0eXBlLgoJICBBZHZhbmNlZCBoYW5kbGluZyBvZiB4c2k6bmlsIChzaG91bGQgd29yayBub3cgZm9yIHNpbXBsZSB0eXBlcykuCgkgIEFkZGVkIGNvbnN0cnVjdGlvbiBvZiBzY2hlbWF0YSB1c2luZyB4c2k6c2NoZW1hTG9jYXRpb24gYW5kIAoJICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbjsgdGhpcyBpcyBub3QgZW5hYmxlZCwgc2luY2UgCgkgIG5vIGNvcnJlc3BvbmRpbmcgQVBJIGV4aXN0cyB5ZXQuCgkgIE1vdmVkIHRoZSBjb250ZW50IG1vZGVsIHRvIGNvbXBsZXggdHlwZSBjb21wb25lbnRzLgoJICBSZXNvbHV0aW9uIG9mIHR5cGVzIGZvciBhdHRyaWJ1dGVzIHdpbGwgbG9vayBmb3Igc2ltcGxlIHR5cGVzCgkgIG9ubHkgKGluY2wuIGFsbCB0aGUgYnVpbHQtaW4gc2ltcGxlIHR5cGVzKS4KCSAgRXh0ZW5kZWQgcGFyc2luZyBvZiAnYW55QXR0cmlidXRlJy4KCSAgRml4ZWQgY29udGVudC10eXBlIHR5cGUgZm9yIGNvbXBsZXggdHlwZXMgaWYgZGVyaXZlZCBmcm9tIAoJICAnYW55VHlwZScgdXNpbmcgdGhlIHNob3J0LWhhbmQgZm9ybSAoc2VlIGJ1ZyAjIDE1MjQ3MCwKCSAgc3VibWl0dGVkIGJ5IFRoaWxvIEplcmVtaWFzKS4KCSogaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hdHlwZXMuaDogQ2xlYW5lZCB1cCBzb21lIGNvbW1lbnRzLgoJKiB4c3RjL3hzdGMucHk6IFdvcmthcm91bmQgdG8gYWNjb21vZGF0ZSBjYXNlIGluc2Vuc2l0aXZlCgkgIHRlc3QgZGVmaW5pdGlvbnMgaW4gbXMtdGVzdC5kZWYueG1sLgoJKiByZXN1bHQvc2NoZW1hcy9kZXRlcjBfMF8wLmVyciByZXN1bHQvc2NoZW1hcy9uczBfMF8yLmVycgoJICByZXN1bHQvc2NoZW1hcy9uczBfMV8yLmVycjogQWRhcHRlZC4KClNhdCBTZXAgMTEgMDk6MDQ6MjIgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWx3cml0ZXIuYzogY2hhbmdlZCBjaGFyIGFycmF5IGluaXRpYWxpc2F0aW9uIHRvIGF2b2lkIGEKCSAgY29tcGxhaW50IGZyb20gc29tZSBjb21waWxlcihzKSAoYnVnIDE1MjMwOCkKClRodSBTZXAgIDkgMDc6MjI6MTEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jOiBhcHBsaWVkIGZpeGVzIGZvciB0aGUgVVRGOFRvSVNPODg1OXggdHJhbnNjb2RpbmcKCSAgcm91dGluZSBzdWdnZXN0ZWQgYnkgTWFyayBJdHpjb3ZpdHoKCldlZCBTZXAgIDggMjI6NTA6MjcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgeG1sc2F2ZS5jOiBmaXhlZCAyIHByb2JsZW1zIHJhaXNlZCBieSAjMTUyMTQwLCBvbmUKCSAgd2hpY2ggaXMgdGhhdCBub3RhdGlvbiBub3QgaW4gdGhlIGludGVybmFsIHN1YnNldCBzaG91bGQKCSAgbm90IGJlIHNhdmVkLCBhbmQgdGhlIHNlY29uZCBtb3JlIG5hc3R5IG9uIGFuIGVycm9yIHNhdmluZwoJICBOT1RBVElPTnMsIGlmIHRoZXJlIGlzIGEgcHJvb2YgdGhhdCBub2JvZHkgdXNlcyBub3RhdGlvbnMgIQoKV2VkIFNlcCAgOCAxMTowNDoyNyBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogQWRkZWQgdGhlIGZ1bmN0aW9uCgkgIHhtbFNjaGVtYVZhbGlkYXRlT25lRWxlbWVudCB0byB0aGUgWE1MIFNjaGVtYSB2YWxpZGF0aW9uIEFQSSwgCgkgIGFzIHByb3Bvc2VkIGJ5IEplZmZyZXkgRmluayAtIHNlZSBidWcgIyAxNTIwNzMuCgpUdWUgU2VwICA3IDExOjEwOjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jL01ha2VmaWxlLmFtIHhzdGMvTWFrZWZpbGUuYW06IHNvbWUgY2xlYW51cAoJICBjaGVja2luZyBmb3IgeG1sbGludCBhbmQgeHNsdHByb2MgaW4gY29uZmlndXJlLmluLCBmaXhlZAoJICBtYWtlIGRpc3Qgdy5yLnQuIHRoZSBuZXcgeHN0YyBzdWJkaXIuCgkqIGRvYy8qOiByZWJ1aWx0CgpNb24gU2VwICA2IDE2OjQyOjU5IENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4c3RjL3hzdGMucHk6IENoYW5nZWQgdG8gZmluYWxseSB2YWxpZGF0ZSBpbnN0YW5jZSBkb2N1bWVudHMuCgpNb24gU2VwICA2IDE2OjA0OjAxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4c3RjL01ha2VmaWxlLmFtIE1ha2VmaWxlLmFtOiBpbnRlZ3JhdGVkIHRvICJtYWtlIHZhbGdyaW5kIiwKCSAgaGVhdnkgLi4uIHdlaWdodCAyNTBNQiBvZiBWTSAhCgpNb24gU2VwICA2IDE0OjU0OjM5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4c3RjL01ha2VmaWxlLmFtIHhzdGMveHN0Yy10by1weXRob24ueHNsIHhzdGMveHN0Yy5weSBNYWtlZmlsZS5hbToKCSAgbW9yZSBjbGVhbnVwIGluIGludGVncmF0aW5nIHRoZSB4c3RjIHRlc3RzdWl0ZQoKTW9uIFNlcCAgNiAxMzo1NjoyOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIHhzdGMvLmN2c2lnbm9yZSB4c3RjL01ha2VmaWxlLmFtOgoJICBzdGFydGluZyB0byBpbnRlZ3JhdGUgdGhlIHhzdGMgc3VpdGUgaW4gdGhlIG5vcm1hbCByZWdyZXNzaW9uCgkgIHRlc3RzCgpNb24gU2VwICA2IDEzOjE0OjExIENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4c3RjL3N1bi10ZXN0LWRlZi54bWw6IFRoZSAidHNEaXIiIGF0dHJpYnV0ZSB3YXMgbm90CgkgIHNldCBjb3JyZWN0bHkuCgpNb24gU2VwICA2IDExOjUyOjUwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5OiB3aGVuIG91dHB1dCBhbmQgZXhwZWN0ZWQgZG8gbm90IG1hdGNoCgkgIGV4YWN0bHkgcnVuIGRpZmYgdG8gcHV0IHRoZSBkaWZmZXJlbmNlcyBpbiB0aGUgbG9nIGMuZi4gIzE0ODY5MQoKTW9uIFNlcCAgNiAxMToxNzozNSBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHN0Yy94c3RjLXRvLXB5dGhvbi54c2x0IHhzdGMvbXMtdGVzdC1kZWYueG1sIHhzdGMvbmlzdC10ZXN0LWRlZi54bWwKCSAgeHN0Yy9zdW4tdGVzdC1kZWYueG1sOiBJbml0aWFsIHJlbGVhc2Ugb2YgZ2VuZXJhdGlvbiBmaWxlcyB0byAKCSAgY3JlYXRlIHB5dGhvbiB0ZXN0IHNjcmlwdHMsIHdoaWNoIHdpbGwgcnVuIHRoZSBXM0MgWE1MIFNjaGVtYSBUZXN0CgkgIENvbGxlY3Rpb24uIFRoZSBtcy10ZXN0LWRlZi54bWwgYW5kIHN1bi10ZXN0LWRlZi54bWwgZmlsZXMKCSAgd2VyZSBleHRyYWN0ZWQgZnJvbSB0aGUgb25saW5lIEhUTUwgWFNUQyByZXN1bHRzIFsxXSwgc2luY2UgdGhleSBkaWQKCSAgbm90IGV4aXN0IGZvciB0aGUgU1VOIHRlc3RzLCBhbmQgb25seSBwYXJ0aWFsbHkgZGlkIGV4aXN0IGZvciB0aGUgCgkgIE1TIHRlc3RzLiBUaGUgTklTVCBkZWZpbml0aW9uIGZpbGUgd2FzIGNyZWF0ZWQgYnkgY29uY2F0ZW5hdGlvbgoJICBvZiB0aGUgZXhpc3RpbmcgZGVmaW5pdGlvbiBmaWxlcyBmb3IgZWFjaCBzaW5nbGUgZGF0YXR5cGUuCgkgIFRoZSBzdHlsZXNoZWV0ICJ4c3RjLXRvLXB5dGhvbi54c2x0IiBzaG91bGQgYmUgcnVuIGFnYWluc3QgdGhlCgkgIGRlZmluaXRpb24gZmlsZXMgdG8gcHJvZHVjZSB0aGUgcHl0aG9uIHNjcmlwdHMuCgkgIFsxXSAiaHR0cDovL3d3dy53My5vcmcvWE1MLzIwMDEvMDUveG1sc2NoZW1hLXRlc3QtY29sbGVjdGlvbi8KCSAgcmVzdWx0cy1tYXN0ZXIuaHRtbCIKCkZyaSBTZXAgIDMgMjA6Mjk6NTkgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogRml4ZWQgYSBzZWcgZmF1bHQgaW4geG1sR2V0UU5hbWVQcm9wOgoJICBhIGZvcm1hdCBhcmd1bWVudCB3YXMgbWlzc2luZy4KCSAgRml4ZWQgd3JvbmcgYXNzaWdubWVudCBvZiB0aGUgb3duZXIgb2YgYSB3aWxkY2FyZCBpbgoJICB4bWxTY2hlbWFCdWlsZEF0dHJpYnV0ZVZhbGlkYXRpb24gKGluIHRoZSBzaG9ydGhhbmRmb3JtIG9mCgkgIDxjb21wbGV4VHlwZT47IHRoaXMgY2F1c2VkIGEgc2VnIGZhdWx0LCBkdWUgdG8gYSBkb3VibGUtZnJlZQoJICBvZiB0aGUgd2lsZGNhcmQuCgkgIEFkZGVkIGEgY2hlY2sgZm9yIGNpcmN1bGFyIGF0dHJpYnV0ZSBncm91cCByZWZlcmVuY2VzLgoJICBBZGRlZCBhIGNoZWNrIGZvciBjaXJjdWxhciBtb2RlbCBncm91cCBkZWZpbml0aW9uIHJlZmVyZW5jZXMuCgkgIEZpeGVkIGEgZHVibGljYXRlIHhtbFBhcnNlckVycm9ycyBlbnVtIHZhbHVlIC0gc2VlIGJ1ZyAjMTUxNzM4LgoKRnJpIFNlcCAgMyAxMDowODoxMyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tbS5jb20uaGs+CgoJKiB4bWxzdHJpbmcuYzogbW9kaWZpZWQgY29tbWVudHMgb24geG1sR2V0VVRGOENoYXIgaW4KCSAgcmVzcG9uc2UgdG8gYnVnIDE1MTc2MCAobm8gY2hhbmdlIHRvIGxvZ2ljKQoKVHVlIEF1ZyAzMSAwOTo0NjoxOCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHN0cmluZy5jOiBmaXhlZCBlcnJvciByZXBvcnRlZCBvbiB0aGUgbGlzdCBjYXVzZWQgYnkKCSAgbXkgbGFzdCBjaGFuZ2UKClR1ZSBBdWcgMzEgMTU6NDE6NTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgY29uZmlndXJlLmluIGRvYy8qOiByZWxlYXNlIG9mIGxpYnhtbDItMi42LjEzCgpUdWUgQXVnIDMxIDE0OjE0OjMwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXhpbmcgIzE1MTQ1NiwgYW4gZW5jb2RpbmcgZXJyb3IgY291bGQgZ2VuZXJhdGUKCSAgYSBzZXJpYWxpemF0aW9uIGxvb3AuCgpUdWUgQXVnIDMxIDExOjM0OjA0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYWxzbyBwcm9kdWNlIGEgdGFyIGJhbGwgd2l0aCBqdXN0IHRoZSBzb3VyY2VzCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1wYXRoIG9wdGlvbiBhbmQgLS1sb2FkLXRyYWNlIG9wdGlvbnMgdG8KCSAgeG1sbGludCwgUkZFICMxNDc3NDAgYmFzZWQgb24geHNsdHByb2MgdmVyc2lvbnMKCSogZG9jL3htbGxpbnQuKiBkb2MvKjogdXBkYXRlZCB0aGUgbWFuIHBhZ2UgYW5kIHJlYnVpbHQKClR1ZSBBdWcgMzEgMTA6Mzc6MjMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiAiIiBpcyBhIHZhbGlkIGhleGJpbmFyeSBzdHJpbmcgZGl4aXQgeG1sc2NoZW1hLWRldgoJKiByZXN1bHQvc2NoZW1hcy9oZXhiaW5hcnlfMF8xLmVyciB0ZXN0L3NjaGVtYXMvaGV4YmluYXJ5XzEueG1sOiAKCSAgdXBkYXRlIHRoZSB0ZXN0LgoJKiB0ZXN0L25zNSByZXN1bHQvL25zNSo6IGFkZGVkIGEgdGVzdCBmb3IgdGhlIG5hbWVzcGFjZSBidWcgZml4ZWQKCSAgaW4gcHJldmlvdXMgY29tbWl0LgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgYSBtZXNzYWdlIGluIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpNb24gQXVnIDMwIDIzOjM2OjIxIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogU0FYMi5jOiBmaXhlZCBidWcgaW50cm9kdWNlZCBkdXJpbmcgT09NIGZpeHVwIGNhdXNpbmcgcHJvYmxlbXMKCSAgd2l0aCBkZWZhdWx0IG5hbWVzcGFjZSB3aGVuIGEgbmFtZWQgcHJlZml4IHdpdGggdGhlIHNhbWUgaHJlZgoJICB3YXMgcHJlc2VudCAocmVwb3J0ZWQgb24gdGhlIG1haWxpbmcgbGlzdCBieSBLYXJsIEVpY2h3YWxkZXIuCgkqIHhtbHN0cmluZy5jOiBtb2RpZmllZCB4bWxDaGVja1VURjggd2l0aCBzdWdnZXN0ZWQgY29kZSBmcm9tCgkgIEp1bGl1cyBNaXR0ZW56d2VpLgoJKiBkaWN0LmM6IGFkZGVkIGEgdHlwZWNhc3QgdG8gdHJ5IHRvIGF2b2lkIHByb2JsZW0gcmVwb3J0ZWQgYnkKCSAgUGFzY2FsIFJvZGVzLgoKTW9uIEF1ZyAzMCAxMjo0NTo0NiBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBhIGJ1ZyBpbiB4bWxTY2hlbWFzQ2hlY2tGYWNldCwgd2hpY2ggZGlkCgkgIG5vdCBjcmVhdGUgYSBjb21wdXRlZCB2YWx1ZSBvbiBhIGZhY2V0IGFuZCB0aHVzIGNyYXNoZWQgZHVyaW5nCgkgIHZhbGlkYXRpb24gb2YgaW5zdGFuY2VzLgoJICBFeHBhbmRlZCB2YWxpZGl0eSBjaGVja3MgZm9yIG1pbi9tYXhPY2N1cnMgYXR0cmlidXRlcy4KCSAgRXhwYW5kZWQgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAiZm9ybSIuCgpGcmkgQXVnIDI3IDE4OjMyOjI0IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc3RyaW5nLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIHhtbENoZWNrVVRGOCByZXBvcnRlZCBvbiB0aGUKCSAgbWFpbGluZyBsaXN0IGJ5IEp1bGl1cyBNaXR0ZW56d2VpCgpGcmkgQXVnIDI3IDAwOjEzOjM5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogYWRkZWQgQnVpbGRSZXF1aXJlczogIHpsaWItZGV2ZWwsIGZpeGVzCgkgIFJlZCBIYXQgYnVnICMxMjQ5NDIKClRodSBBdWcgMjYgMTI6Mjc6MjMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmUgYSB3YXJuaW5nIG9uIFNvbGFyaXMKCSogeG1sc2NoZW1hc3R5cGUuYzogZml4IGEgY3Jhc2hpbmcgYnVnICMxNTExMTEKCldlZCBBdWcgMjUgMjI6MjA6MTggQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRlc3Qvc2NoZW1hcy9pbXBvcnQtYmFkLTFfMC5pbXA6IEFkZGVkIG1pc3NpbmcgdGVzdCBmaWxlLgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6CgkgIFN1YnN0aXR1dGVkIHRoZSBvYnNvbGV0ZSB4bWxTY2hlbWFWYWxpZEVycm9yKHMpIGZvciB4bWxQYXJzZXJFcnJvcnMKCSAgLSBzZWUgIzE1MDg0MC4gCgkgIENoYW5nZWQgdGhlIGltcG9ydCBvZiBzY2hlbWFzIHRvIGFsbG93IGZhaWx1cmUgb2YgbG9jYXRpb24KCSAgb2YgYSByZXNvdXJjZSB0byBiZSBpbXBvcnRlZC4KCSogcmVzdWx0L3NjaGVtYXMvYWxsXyogcmVzdWx0L3NjaGVtYXMvYW55M18wXzAuZXJyIAoJICByZXN1bHQvc2NoZW1hcy9jaG9pY2VfKiByZXN1bHQvc2NoZW1hcy9pbXBvcnQxXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvbGlzdDBfMF8xLmVyciByZXN1bHQvc2NoZW1hcy9saXN0MF8xXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2xpc3QwXzFfMS5lcnIgcmVzdWx0L3NjaGVtYXMvbnMwXzBfMi5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvbnMwXzFfMi5lcnI6IEFkYXB0ZWQgcmVncmVzc2lvbiB0ZXN0IHJlc3VsdHMuCgpUdWUgQXVnIDI0IDIwOjQ5OjE1IE1EVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sLCB4bWx0dXRvcmlhbC5wZGYsICouaHRtbAoJZml4IFhwYXRoIG1lbW9yeSBsZWFrICh0aGFua3MgdG8gc0thQm95IGFuZCBXaWxsaWFtIEJyYWNrKQoKVHVlIEF1ZyAyNCAyMToxMDo1OSBDRVNUIDIwMDQgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBwYXRoIHByb2JsZW0gaW4gRFREIGxvYWRpbmcgcmVwb3J0ZWQgYnkgCgkgIFNhbWVlciBBYmhpbmthcgoKVHVlIEF1ZyAyNCAxNjo0MDo1MSBDRVNUIDIwMDQgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYWRkZWQgc3VwcG9ydCBmb3IgdmVyc2lvbiBleHRyYQoJKiB3aW4zMi9NYWtlZmlsZS4qOiB1cGdyYWRlZCB0byB6bGliIDEuMi4xCgpNb24gQXVnIDIzIDE0OjMzOjU0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHJlbW92aW5nIC1PIC1nIGZyb20gZGVmYXVsdCBnY2MgZmxhZ3MgIzE1MDgyOAoKU3VuIEF1ZyAyMiAxNjoyNjo0NiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qIE5FV1M6IHByZXBhcmluZyAyLjYuMTIgcmVsZWFzZSwgdXBkYXRlZCBhbmQKCSAgYW5kIHJlYnVpbHQgdGhlIGRvY3MuCgpTdW4gQXVnIDIyIDE2OjA3OjIwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGZpeCBhIHByb2JsZW0gb24gbGFzdCBjb21taXQKClN1biBBdWcgMjIgMTU6MTY6NTMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmggcHl0aG9uL2xpYnhtbC5jIAoJICBweXRob24vbGlieG1sX3dyYXAuaDogdHJ5aW5nIHRvIHJlbW92ZSBzb21lIHdhcm5pbmcgd2hlbiBjb21waWxpbmcKCSAgb24gRmVkb3JhIENvcmUgMyBhbmQgNjRiaXRzCgpTYXQgQXVnIDIxIDA6MDM1OjEwIENFVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogbW9kaWZpZWQgcGFyc2luZyBvZiA8bGlzdD4sIDx1bmlvbj4sIDxyZXN0cmljdGlvbj4sCgkgIDxzZXF1ZW5jZT4sIDxjaG9pY2U+LCA8aW5jbHVkZT4sIDxpbXBvcnQ+LgoJICBGaXhlZCBzY2hlbWEgZGVmYXVsdHMgKGVsZW1lbnRGb3JtRGVmYXVsdCwgZXRjLikgZm9yIGluY2x1ZGVkCgkgIHNjaGVtYXMuCgkgIEZpeGVkIGEgYnVnIHdoaWNoIHJlcG9ydGVkIGF0dHJpYnV0ZXMgYXMgaW52YWxpZCBvbgoJICBlbGVtZW50cyBkZWNsYXJhdGlvbnMgd2l0aCB0aGUgYnVpbHQtaW4gdHlwZSAnYW55VHlwZScuCgkgIEFkZGVkICJsYXgiIHZhbGlkYXRpb24gb2YgdGhlIGNvbnRlbnQgb2YgZWxlbWVudHMgb2YgdHlwZQoJICAnYW55VHlwZScuCgkgIEZpeGVkOiBlbGVtZW50IGRlY2xhcmF0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgd2VyZSB0cmVhdGVkCgkgIGFzIGR1cGxpY2F0ZSBpZiBsb2NhdGVkIGluIHRoZSBzdWJ0cmVlIG9mIDxjaG9pY2U+IC0+IDxzZXF1ZW5jZT4uCgkgIChUaGlzIHdhcyBidWcgMTUwNjIzLCBzdWJtaXR0ZWQgYnkgUm9sYW5kIExlenVvKQoJICBGaXhlZCBjbGVhbnVwIG9mIGVycm9yIGNvZGVzIGluIHhtbFNjaGVtYVZhbGlkYXRlRG9jIGFzIHByb3Bvc2VkCgkgIGJ5IElnb3IgS2FwaXRhbmtlci4gKFRoaXMgd2FzIGJ1ZyAxNTA2NDcsIHN1Ym1pdHRlZCBieSBJZ29yCgkgIEthcGl0YW5rZXIpCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBDaGFuZ2VkIHRoZSB0eXBlIG9mIGFueVR5cGUgdG8KCSAgWE1MX1NDSEVNQVNfQU5ZVFlQRS4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogQWRkZWQgc2NoZW1hIHBhcnNlciBlcnJvcnMuCgkqIHJlc3VsdC9zY2hlbWFzL2J1ZzE0NTI0Nl8wXzAqCgkgIHJlc3VsdC9zY2hlbWFzL2V4dGVuc2lvbjFfMF8yLmVycjogQ2hhbmdlZCB0ZXN0IHJlc3VsdHMuCgkqIHJlc3VsdC9zY2hlbWFzL2N0LXNjLW5vYmFzZV8wXzAqCgkgIHJlc3VsdC9zY2hlbWFzL2ZhY2V0LXdoaXRlU3BhY2VfMF8wKgoJICByZXN1bHQvc2NoZW1hcy9pbXBvcnQxXzBfMCogcmVzdWx0L3NjaGVtYXMvaW1wb3J0Ml8wXzAqCgkgIHJlc3VsdC9zY2hlbWFzL2luY2x1ZGUyXzBfMCogcmVzdWx0L3NjaGVtYXMvaW5jbHVkZTNfMF8wKgoJICByZXN1bHQvc2NoZW1hcy9yZXN0cmljdGlvbi1hdHRyMV8wXzAqCgkgIHJlc3VsdC9zY2hlbWFzL3NlcS1kdWJsLWVsZW0xXzBfMCoKCSAgcmVzdWx0L3NjaGVtYXMveHNkLWxpc3QtaXRlbVR5cGVfMF8wKjogQWRkZWQgbmV3IHJlc3QgcmVzdWx0cy4KCSAgdGVzdC9zY2hlbWFzL2J1ZzE0NTI0Ni54c2QuaW1wIHRlc3Qvc2NoZW1hcy9jdC1zYy1ub2Jhc2VfMCoKCSAgdGVzdC9zY2hlbWFzL2ZhY2V0LXdoaXRlU3BhY2VfMCogdGVzdC9zY2hlbWFzL2ltcG9ydDFfMCoKCSAgdGVzdC9zY2hlbWFzL2ltcG9ydDJfMCogdGVzdC9zY2hlbWFzL2luY2x1ZGUyXzAqCgkgIHRlc3Qvc2NoZW1hcy9pbmNsdWRlM18wKiB0ZXN0L3NjaGVtYXMvcmVzdHJpY3Rpb24tYXR0cjFfMCoKCSAgdGVzdC9zY2hlbWFzL3NlcS1kdWJsLWVsZW0xXzAqIHRlc3Qvc2NoZW1hcy94bWwueHNkCgkgIHRlc3Qvc2NoZW1hcy94c2QtbGlzdC1pdGVtVHlwZV8wKjogQWRkZWQgbmV3IHRlc3RzIGFuZCBtaXNzaW5nCgkgIGZpbGVzLiAgCSAgICAgIAoKRnJpIEF1ZyAyMCAxODo1MTozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBhIGJpdCBvZiBjbGVhbnVwIGFuZCBhIGV4dHJhIHZhcmlhYmxlIGZvcgoJICBDVlMgZGlzdAoKVGh1IEF1ZyAxOSAwNzo0NDowNyBNRFQgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sLCB4bWxsaW50LjEsIHhtbGxpbnQuaHRtbDoKCUVkaXQgYW5kIHJlYnVpbGQgdGhlIG1hbiBwYWdlcyB3aXRoIERhbmllbCdzIEMxNCB1cGRhdGUKCldlZCBBdWcgMTggMTk6MTU6MjcgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogZml4ZWQgbWlzc2luZyBsaW5lIG51bWJlcnMgb24gZW50aXR5IGFzIHJlcG9ydGVkCgkgIG9uIHRoZSBsaXN0IGJ5IFN0ZXZlIENoZW5nCgpXZWQgQXVnIDE4IDE0OjA0OjMxIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY29uZmlndXJlLmluIGdsb2JhbHMuYyBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IGFkZGVkIHNvbWUgY29kZSB0bwoJICBpbmNsdWRlIHRoZSBDVlMgQ2hhbmdlTG9nIHZlcnNpb24gaW4gdGhlIHhtbFBhcnNlclZlcnNpb24KCSAgc3RyaW5nIChwcmludGVkIGJ5IHhtbGxpbnQgd2l0aCAtLXZlcnNpb24pCgpXZWQgQXVnIDE4IDExOjE0OjA2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oIHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jCgkgIHB5dGhvbi90ZXN0cy9zY2hlbWEucHkgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOiBBcHBsaWVkIHBhdGNoCgkgIGZyb20gVG9ya2VsIEx5bmcgdG8gYWRkIFNjaGVtYXMgc3VwcG9ydCB0byB0aGUgUHl0aG9uIGJpbmRpbmdzCgkgIGFuZCBleHRlbmQgdGhlIHNjaGVtYXMgZXJyb3IgQVBJLCByZWdpc3RlcmVkIGEgbmV3IHRlc3QuCgkqIGRvYy8qIGVsZmdjY2hhY2suaDogcmVidWlsdCB0byByZWdlbmVyYXRlIHRoZSBiaW5kaW5ncwoKTW9uIEF1ZyAxNiAxNDozNjoyNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYWRkZWQgaGVscCBmb3IgbmV3IHNldCBzaGVsbCBjb21tYW5kCgkqIHhpbmNsdWRlLmMgeG1sbGludC5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOgoJICBhZGRlZCBwYXJzZXIgb3B0aW9uIHRvIG5vdCBnZW5lcmF0ZSBYSW5jbHVkZSBzdGFydC9lbmQgbm9kZXMsCgkgIGFkZGVkIGEgc3BlY2lmaWMgb3B0aW9uIHRvIHhtbGxpbnQgdG8gdGVzdCBpdCBmaXhlcyAjMTMwNzY5CgkqIE1ha2VmaWxlLmFtOiByZWdyZXNzaW9uIHRlc3QgdGhlIG5ldyBmZWF0dXJlCgkqIGRvYy94bWxsaW50LjEgZG9jL3htbGxpbnQueG1sOiB1cGRhdGVkIG1hbiBwYWdlIHRvIGRvY3VtZW50IG9wdGlvbi4KCk1vbiBBdWcgMTYgMDI6NDI6MzAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHNtYWxsIHR5cG8gcG9pbnRlZCBvdXQgYnkgTWlrZSBIb21tZXkKCSogZG9jL3htbGxpbnQueG1sLCB4bWxsaW50Lmh0bWwsIHhtbGxpbnQuMTogc2xpZ2h0bHkgaW1wcm92ZWQKCSAgdGhlIC0tYzE0biBkZXNjcmlwdGlvbiwgYy5mLiAjMTQ0Njc1IC4KCSogbmFub2h0dHAuYyBuYW5vZnRwLmM6IGFwcGxpZWQgYSBmaXJzdCBzaW1wbGUgcGF0Y2ggZnJvbSAKCSAgTWlrZSBIb21tZXkgZm9yICRub19wcm94eSwgYy5mLiAjMTMzNDcwCgkqIHBhcnNlckludGVybmFscy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGNsZWFudXAgdG8gYXZvaWQgJ2Vycm9yJyBpZGVudGlmaWVyIAoJICBpbiBpbmNsdWRlcyAjMTM3NDE0CgkqIHBhcnNlci5jIFNBWDIuYyBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOgoJICBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBpbnBsZW1lbnRhdGlvbiBvZiBwYXJzaW5nIHdpdGhpbgoJICB0aGUgY29udGV4dCBvZiBhIG5vZGUgaW4gdGhlIHRyZWUgIzE0MjM1OSwgbmV3IGZ1bmN0aW9uCgkgIHhtbFBhcnNlSW5Ob2RlQ29udGV4dCgpLCBhZGRlZCBzdXBwb3J0IGF0IHRoZSB4bWxsaW50IC0tc2hlbGwKCSAgbGV2ZWwgYXMgdGhlICJzZXQiIGZ1bmN0aW9uCgkqIHRlc3Qvc2NyaXB0cy9zZXQqIHJlc3VsdC9zY3JpcHRzLyogTWFrZWZpbGUuYW06IGV4dGVuZGVkCgkgIHRoZSBzY3JpcHQgYmFzZWQgcmVncmVzc2lvbiB0ZXN0cyB0byBpbnN0cnVtZW50IHRoZSBuZXcgZnVuY3Rpb24uCgpTYXQgQXVnIDE0IDE4OjUzOjA4IE1EVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuaHRtbCwgeG1sbGludC4xOgoJYWRkIGMxNG4gdG8gbWFuIHBhZ2UgKG1hbiwgaXQncyBoYXJkIHRvIGtlZXAgdXAgd2l0aAoJRGFuaWVsISkKClNhdCBBdWcgMTQgMTg6NDU6MzggTURUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbCwgeG1sbGludC5odG1sLCB4bWxsaW50LjE6CglhZGQgcGF0dGVybiwgd2Fsa2VyLCBtYXhtZW0sIG91dHB1dCBhbmQgeG1sb3V0IHRvIG1hbiBwYWdlCglmaXhlcyAjMTQ0Njc1CgpTdW4gQXVnIDE1IDAwOjQxOjEyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIGEgLS1jMTRuIG9wdGlvbiB0byBjYW5vbmljYWxpemUgdGhlIG91dHB1dAoJICBzaG91bGQgY2xvc2UgdGhlIFJGRSAjMTQzMjI2CgpTYXQgQXVnIDE0IDIzOjUwOjEwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IERvZGppIHBvaW50ZWQgb3V0IGEgYnVnIGluIHhtbEdldE5vZGVQYXRoKCkKCSogeG1sY2F0YWxvZy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWxiZXJ0IENoaW4gdG8gYWRkIGEKCSAgLS1uby1zdXBlci11cGRhdGUgb3B0aW9uIHRvIHhtbGNhdGFsb2cgc2VlICMxNDU0NjEKCSAgYW5kIGFub3RoZXIgcGF0Y2ggYWxzbyBmcm9tIEFsYmVydCBDaGluIHRvIG5vdCBjcmFzaCAKCSAgb24gLXNnbWwgLS1kZWwgd2l0aG91dCBhcmdzIHNlZSAjMTQ1NDYyCgkqIE1ha2VmaWxlLmFtOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbiB0bwoJICBmaXggYSBwcm9ibGVtIHdpdGggZGlmZiBvbiBTb2xhcmlzICMxNDU1MTEKCSogeG1sc3RyaW5nLmM6IGZpeCB4bWxDaGVja1VURjgoKSBhY2NvcmRpbmcgdG8gdGhlIHN1Z2dlc3Rpb24KCSAgaW4gYnVnICMxNDgxMTUKCSogcHl0aG9uL2xpYnhtbC5weTogYXBwbHkgZml4IGZyb20gTWFyYy1BbnRvaW5lIFBhcmVudCBhYm91dAoJICB0aGUgZXJyb3JzIGluIGxpYnhtbCgyKS5weSBvbiB0aGUgbm9kZSB3cmFwcGVyICMxMzU1NDcKClNhdCBBdWcgMTQgMTM6MTg6NTcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBhIGR1bWIgcnVsZSB0byBhYmxlIHRvIGNvbXBpbGUgdHN0LmMKCSAgd2hlbiBwZW9wbGUgc3VibWl0IGEgc2FtcGxlIHRlc3QgcHJvZ3JhbQoJKiB4bWxzY2hlbWFzLmM6IGFwcGxpZWQgc21hbGwgcGF0Y2ggZnJvbSBFcmljIEhhc3psYWtpZXdpY3oKCSAgdG8gZG9jdW1lbnQgeG1sU2NoZW1hc1NldFZhbGlkRXJyb3JzKCkgbGltaXRhdGlvbnMsICMxNDE4MjcKCSogZXJyb3IuYzogQWRkIGluZm9ybWF0aW9uIGluIGdlbmVyaWMgYW5kIHN0cnVjdHVyZWQgZXJyb3IKCSAgc2V0dGVyIGZ1bmN0aW9ucyB0aGF0IHRoaXMgbmVlZCB0byBiZSBkb25lIHBlciB0aHJlYWQgIzE0NDMwOAoJKiB4bWxzYXZlLmM6IGZpeGVkIGJ1ZyB3aGl0aCBtaXNzaW5nIE5PVEFUSU9OKHMpIHNlcmlhbGl6YXRpb24KCSAgYnVnICMxNDQxNjIKCSogZG9jL3htbGxpbnQueG1sOiB0eXBvIGZpeCAjMTQ0ODQwCgpUdWUgQXVnIDEwIDA3OjE5OjMxIFBEVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMKCSAgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6IGFwcGxpZWQgU2NoZW1hcyBwYXRjaGVzCgkgIGZyb20gS2FzaW1pZXIgQnVjaGNpawoJKiB0ZXN0LyByZXN1bHQvIGJ1ZzE0MTMzMyogYW5ub3QtZXJyKiBhbnlbMS00XSogYnVnMTQ1MjQ2KgoJICBlbGVtZW50LWVyciogZWxlbWVudC1taW5tYXgtZXJyKiBpbmNsdWRlMSogcmVzdHJpY3QtQ1QtYXR0ci1yZWYqOgoJICBsb3Qgb2YgbmV3IHRlc3RzIGZvciB0aGluZ3MgZml4ZWQgYnkgdGhlIHBhdGNoCgpGcmkgQXVnICA2IDA5OjIyOjM0IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogZml4ZWQgbXkgbWlzLWhhbmRsaW5nIG9mIEV4dGVybmFsIElEIG9uIGxhc3QKCSAgY2hhbmdlLgoKV2VkIEF1ZyAgNCAyMzo0MDoyMSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IGNoYW5nZWQgdGhlIHBhcnNpbmcgb2YgYSBkb2N1bWVudCdzIERURCB0byB1c2UKCSAgdGhlIHByb3BlciBiYXNlIHBhdGggKGJ1ZyAxNDQzNjYpCgpXZWQgQXVnICA0IDE2OjU4OjA4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gcHl0aG9uL01ha2VmaWxlLmFtOgoJICBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBHZXJyaXQgUC4gSGFhc2UgdG8gZ2V0IHB5dGhvbiBiaW5kaW5ncwoJICBvbiBDeWd3aW4KClR1ZSBBdWcgIDMgMTU6MDg6MjIgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBlbGFib3JhdGVkIG9uIGRlc2NyaXB0aW9uIG9mCgkgIHhtbFZhbGlkaXR5V2FybmluZ0Z1bmMgYW5kIHhtbFZhbGlkaXR5RXJyb3JGdW5jIChidWcKCSAgMTQ0NzYwKQoJKiB4bWxJTy5jLCB4bWxzY2hlbWFzdHlwZXMuYywgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc2ludGVybmFscy5oOgoJICBtaW5vciBmaXhlcyB0byBjb21tZW50cyBmb3IgZG9jIHJlYnVpbGRpbmcgZXJyb3JzLgoJKiBkb2MvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2NzCgpUdWUgQXVnICAzIDIzOjU5OjIzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvQ2hhbmdlTG9nLnhzbCBkb2MvZG93bmxvYWRzLmh0bWwgZG9jL3htbC5odG1sIGRvYy8qOgoJICBmaXhlcyBkb2N1bWVudGF0aW9uIGdsaXRjaGVzIHJhaXNlZCBieSBPbGl2ZXIgU3RvZW5lYmVyZwoKVHVlIEF1ZyAgMyAwOTo0MjozMSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRyZWUuYzogZml4ZWQgcHJvYmxlbSB3aXRoIG1lbW9yeSBsZWFrIG9uIHRleHQgbm9kZXMgaW4gRFRECgkgIChidWcgMTQ4OTY1KSB3aXRoIHBhdGNoIHByb3ZpZGVkIGJ5IERhcnJlbGwgS2luZHJlZAoKVHVlIEF1ZyAgMyAwODoxNDo0NCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgaW5pdGlhbGlzYXRpb24gcHJvYmxlbSBmb3IgaHRtbFJlYWRNZW1vcnkKCSAgKGJ1ZyAxNDkwNDEpCgpTYXQgSnVsIDMxIDExOjAxOjMzIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL2J1aWxkRG9jQm9va0NhdGFsb2c6IGVuaGFuY2VkIHBlciBidWcgMTE5ODc2LiAgRnVydGhlcgoJICBpbmZvIHBvc3RlZCB0byB0aGUgbWFpbGluZyBsaXN0LgoKU2F0IEp1bCAzMSAwOToxMjo0NCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIFNBWDIuYywgZW5jb2RpbmcuYywgZXJyb3IuYywgcGFyc2VyLmMsIHRyZWUuYywgdXJpLmMsIHhtbElPLmMsCgkgIHhtbHJlYWRlci5jLCBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1hbnkgZnVydGhlciBsaXR0bGUgY2hhbmdlcwoJICBmb3IgT09NIHByb2JsZW1zLiAgTm93IHNlZW1zIHRvIGJlIGdldHRpbmcgY2xvc2VyIHRvICJvayIuCgkqIHRlc3RPT00uYzogYWRkZWQgY29kZSB0byBpbnRlcmNlcHQgbW9yZSBlcnJvcnMsIGZvdW5kIG1vcmUKCSAgcHJvYmxlbXMgd2l0aCBsaWJyYXJ5LiBDaGFuZ2VkIG1ldGhvZCBvZiBmbGFnZ2luZyAvIGNvdW50aW5nCgkgIGVycm9ycyBpbnRlcmNlcHRlZC4KCkZyaSBKdWwgMzAgMTM6NTc6NTUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBhIGNvdXBsZSBvZiBwYXRjaCBvbmUgZnJvbSBPbGl2ZXIgU3RvZW5lYmVyZwoJICBhbmQgYW5vdGhlciBvbmUgZnJvbSBSb2IgUmljaGFyZHMgZml4aW5nICMxNDg0NDgKClRodSBKdWwgMjkgMTM6MjA6MjggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogMSBsaW5lIHBhdGNoLCBhcHBhcmVudGx5IGh0bWxOZXdEb2MoKSB3YXMgbm90CgkgIHNldHRpbmcgZG9jLT5jaGFyc2V0LgoKVGh1IEp1bCAyOSAwMDowNTo1OCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIFNBWDIuYywgdHJlZS5jLCB1cmkuYywgeG1sSU8uYywgeG1scmVhZGVyLmM6IGZ1cnRoZXIKCSAgZml4ZXMgZm9yIG91dCBvZiBtZW1vcnkgY29uZGl0aW9uLCBtb3N0bHkgZnJvbSBPbGl2aWVyCgkgIEFuZHJpZXUuCgkqIHRlc3RPT00uYzogc29tZSBmdXJ0aGVyIGltcHJvdmVtZW50IGJ5IE9saXZpZXIsIHdpdGgKCSAgYSBmdXJ0aGVyIHNtYWxsIGVuaGFuY2VtZW50IGZvciBlYXNpZXIgZGVidWdnaW5nLgoKVHVlIEp1bCAyNyAwMDozNDowNyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIFNBWDIuYywgZXJyb3IuYywgcGFyc2VyLmMsIHRyZWUuYywgeG1scmVhZGVyLmM6CgkgIGltcGxlbWVudGVkIHBhdGNoZXMgc3VwcGxpZWQgYnkgT2xpdmllciBBbmRyaWV1IAoJICAoYnVnIDE0ODU4OCksIHBsdXMgbWFkZSBzb21lIGZ1cnRoZXIgZW5oYW5jZW1lbnRzLCB0bwoJICBjb3JyZWN0IHNvbWUgcHJvYmxlbXMgd2l0aCBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbnMuCgkqIHRlc3RPT00uYzogaW1wcm92ZWQgd2l0aCBwYXRjaGVzIGZyb20gT2xpdmllciBBbmRyaWV1CgpNb24gSnVsIDI2IDExOjAzOjE4IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdHJlZS5jOiBwdXQgaW4gcGF0Y2ggZm9yIFdpbmRvd3MgYnVmZmVyIHJlLWFsbG9jYXRpb24KCSAgc3VibWl0dGVkIGJ5IFN0ZXZlIEhheSAoYnVnIDE0NjY5NykKClN1biBKdWwgMjUgMTc6MTg6MzkgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBhZGRlZCBzb21lIGNvZGUgdG8gY2hlY2ssIHdoZW4gYW4gaW5jbHVkZSBpcwoJICBkb25lLCB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgVVJMIGdldHMgbWFwcGVkIHRvIHNvbWUgb3RoZXIKCSAgbG9jYXRpb24gKGUuZy4gd2l0aCBhIGNhdGFsb2cgZW50cnkpIGFuZCwgaWYgc28sIHRha2UgY2FyZQoJICBvZiB0aGUgeG1sOmJhc2UgcHJvcGVybHkgKGJ1ZyAxNDY5ODgpCgpTdW4gSnVsIDI1IDE0OjAyOjI0IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYzogZml4ZWQgdG8gYXNzdXJlIHVzZXIgZGF0YSBwYXJhbSBpcyBzZXQgY29ycmVjdGx5CgkgIHdoZW4gdXNlciBzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsZXIgaXMgY2FsbGVkIChidWcgMTQ0ODIzKQoKVGh1IEp1bCAyMiAxMDoxNDo0OCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCBwcm9ibGVtIHdpdGggcmVhZGVyIHN0YXRlIGFmdGVyCgkgIHByb2Nlc3NpbmcgYXR0cmlidXRlcyAoYnVnIDE0Nzk5MykKCldlZCBKdWwgMjEgMTc6MDQ6MjcgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOiBwdXQgaW4gYW4gYXV0byogY2hlY2sgZm9yIHRoZQoJICBwYXRoIHRvIHBlcmwgKGlmIGl0IGV4aXN0cyksIGFuZCBtb2RpZmllZCBtYWtlIFRpbWluZ3Rlc3RzCgkgIHRvIHVzZSB0aGF0IHBhdGggaW5zdGVhZCBvZiBqdXN0IGV4ZWN1dGluZyB0aGUgZGJnZW5hdHRyLnBsCgkgIHNjcmlwdCAoYnVnIDE0ODA1NikKCkZyaSBKdWwgMTYgMTg6MzY6MzMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBhZGRlZCBhIGNoZWNrIG9uIHRoZSBhcmd1bWVudCBmb3Igc29tZQoJICBjbGFzc2VzIChlLmcuIHhtbERvYyBhbmQgeG1sTm9kZSkgdG8gcHJldmVudCBhIHNlZ2ZhdWx0IChhcwoJICByZXBvcnRlZCBvbiB0aGUgbGlzdCkuICBGdXJ0aGVyIGVuaGFuY2VtZW50IHNob3VsZCBiZSBkb25lCgkgIHRvIGF1dG8tY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBvYmplY3QuCgkqIHB5dGhvbi9saWJ4bWwuYzogbWlub3IgZml4IGZvciBhIHdhcm5pbmcgbWVzc2FnZTsgYWRkZWQgYQoJICByb3V0aW5lLCBjdXJyZW50bHkgbm90IHVzZWQsIHRvIHJlcG9ydCB0aGUgZGVzY3JpcHRpb24gb2YgYQoJICBQeUNPYmplY3QuCgkqIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiByZWdlbmVyYXRlZAoKRnJpIEp1bCAxNiAxMTowMTo0MCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHRlc3QvY2F0YWxvZ3Mvd2hpdGUqIHJlc3VsdC9jYXRhbG9ncy93aGl0ZSo6CgkgIGFwcGxpZWQgcGF0Y2hlcyBmcm9tIFBldGVyIEJyZWl0ZW5sb2huZXIgdG8gZml4IGhhbmRsaW5nCgkgIG9mIHdoaXRlIHNwYWNlIG5vcm1hbGl6YXRpb24gaW4gcHVibGljIGlkcyBhbmQgYWRkIHRlc3RzCgpUdWUgSnVsIDEzIDE3OjI0OjEzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogYXBwbGllZCBhIHNtYWxsIGZpeCBmcm9tIFN0ZXZlIEhheQoKVHVlIEp1bCAxMyAyMzowMjoxOSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IEFkZGVkIGNvZGUgdG8gaW4gUFJFRElDQVRFL0ZJTFRFUiBoYW5kbGluZyB0byByZXNldAoJICB0aGUgeHBhdGggY29udGV4dCBkb2N1bWVudCBwb2ludGVyIChwYXJ0IG9mIGZpeCB0byBsaWJ4c2x0CgkgIGJ1ZyAxNDc0NDUpCgpUdWUgSnVsIDEzIDAwOjE0OjA4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2xpYnhtbC5weTogcmFuICdleHBhbmQnIG9uIHRoZSBmaWxlIHRvIGdldCByaWQgb2YgbWl4dHVyZQoJICBvZiB0YWJzIGFuZCBzcGFjZXMgKGJ1ZyAxNDc0MjQpCgpTdW4gSnVsIDExIDIyOjM4OjI5IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2Rydl9saWJ4bWwucHk6IGFkZGVkIGFuIGVuY29kaW5nICJzcGVjaWFsIGNvbW1lbnQiIHRvIGF2b2lkCgkgIHdhcm5pbmcgbWVzc2FnZSBpbiBweXRob24yLjMgKGJ1ZyAxNDY4ODkpCgkqIE1ha2VmaWxlLmFtLCBweXRob24vTWFrZWZpbGUuYW0sIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbTogc21hbGwKCSAgY2hhbmdlIHRvIG1ha2UgIm1ha2UgdGVzdHMiIGEgbGl0dGxlIHF1aWV0ZXIgKE1BS0VGTEFHUys9LS1zaWxlbnQpCgkqIHhwYXRoLmM6IGVuaGFuY2VkIHRvIHRha2UgYWR2YW50YWdlIG9mIGN1cnJlbnQgbGlieHNsdCBoYW5kbGluZwoJICBvZiB0bXBSVlQuICBGaXhlcyBidWcgMTQ1NTQ3LgoKRnJpIEp1bCAgOSAxNDowMjo1NCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmggdXJpLmM6IGZpeGVkIGEgY291cGxlIG9mIHByb2JsZW1zIGluIHRoZSBuZXcKCSAgZWxmZ2NjaGFjay5oIHRyaWNrIHBvaW50ZWQgYnkgUGV0ZXIgQnJlaXRlbmxvaG5lcgoKV2VkIEp1bCAgNyAwMDo0NTo0OCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZWxmZ2NjaGFjay5oIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sOiBmaXhlZCBhIGJ1ZwoJICB3aGljaCBwcmV2ZW50ZWQgYnVpbGRpbmcgd2l0aCAtLXdpdGgtbWluaW11bQoKTW9uIEp1bCAgNSAxOTo0Mzo1MSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qOiByZWxlYXNpbmcgMi42LjExLCB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUKCSAgZG9jcwoKTW9uIEp1bCAgNSAxODo0Mzo0NyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG1ha2UgdGhlIHB1c2ggaW50ZXJmYWNlcyBzeW5jaHJvbm91cwoJKiBweXRob24vdGVzdHMvc3luYy5weTogYWRkZWQgYSBzcGVjaWZpYyB0ZXN0CgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0KCSAgZG9jL2V4YW1wbGVzL2luZGV4LnB5OiBhZGRlZCB0aGUgbmV3IHRlc3QsIGNsZWFuaW5nIHVwIAoJICAibWFrZSB0ZXN0cyIgb3V0cHV0CgpNb24gSnVsICA1IDE1OjA5OjE3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBLYXNpbWllciB0byBmaXggc29tZSBSZWxheC1ORwoJICBkYXRhdHlwZSBmYWNldCBwcm9ibGVtIHdpdGggcmVjZW50IGNoYW5nZXMuCgpTYXQgSnVsICAzIDExOjMxOjAyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBDaGFuZ2VkIHRoZSBudW1iZXIgb2YgWFBhdGggZXh0ZW5zaW9uIGZ1bmN0aW9ucwoJICBhbGxvd2VkIHRvIGJlIHZhcmlhYmxlLWxlbmd0aCAocGF0Y2ggc3VwcGxpZWQgYnkgTWFyYy1BbnRvaW5lCgkgIFBhcmVudCwgYnVnIDE0MzgwNSkuICBBZGRlZCBjb2RlIHRvICJ1bnJlZ2lzdGVyIiB0aGUgZnVuY3Rpb25zCgkgIHdoZW4gdGhlIHBhcnNlciBjbGVhbnVwIHRha2VzIHBsYWNlLgoKRnJpIEp1bCAgMiAxNDoyMjoxNCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmMgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sOgoJICBzb21lIHVwZGF0ZXMgd2l0aCBtZW1vcnkgZGVidWdnaW5nIGZhY2lsaXRpZXMgd2hpbGUgbWVzc2luZwoJICB3aXRoIGxpYnhzbHQgcHl0aG9uIGJpbmRpbmdzCgpUaHUgSnVsICAxIDE0OjUzOjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLnB5CgkgIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OgoJICBhcHBsaWVkIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGZpeCBzb21lIFB5dGhvbiBiaW5kaW5ncwoJICBpbml0aWFsaXphdGlvbiwgdGhlbiBoYWQgdG8gY2hhbmdlIHRoZSBwYXJzZXJDbGVhbnVwKCkgCgkgIHRvIGhhbmRsZSBtZW1vcnkgcmVsZWFzZWQgdGhlcmUuCgkqIHhtbG1lbW9yeS5jOiBhZGRlZCBtb3JlIGRlYnVnZ2luZyBjb21tZW50cy4KClRodSBKdWwgIDEgMTM6MTg6MDIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBzZWVtcyB0aGUgcmVhZGVyIGJ1ZmZlciBjb3VsZCBiZSB1c2VkIHdoaWxlIG5vdAoJICBhbGxvY2F0ZWQsIGZpeGVzIGJ1ZyAjMTQ1MjE4CgpUaHUgSnVsICAxIDExOjM0OjEwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBkbyBub3QgcHJvdmlkZSBmdW5jdGlvbnMgdXNlZCBhcyBkZXN0cnVjdG9yCgkgIG9mIGNsYXNzZXMgYXMgcHVibGljIG1ldGhvZHMgdG8gYXZvaWQgZG91YmxlLWZyZWUgcHJvYmxlbSBsaWtlCgkgIGluIGJ1ZyAjMTQ1MTg1CgpXZWQgSnVuIDMwIDE5OjQ1OjIzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jLCB4bWxzY2hlbWFzdHlwZXMuYzogd2FybmluZyBtZXNzYWdlIGNsZWFudXAuCgkgIE5vdyBjb21waWxlcyB3YXJuaW5nLWZyZWUsIGFsbCB0ZXN0cyBwYXNzZWQuCgkqIFNBWDIuYzogc21hbGwgY2hhbmdlIHRvIGNvbW1lbnRzIGZvciBkb2N1bWVudGF0aW9uLgoJICBObyBjaGFuZ2UgdG8gbG9naWMuCgpUdWUgSnVuIDI5IDE1OjAwOjEzIFBEVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogbW9yZSBmaXhlcyB3aXRoIEthc2ltaWVyLCBsb29rcyBmYXIgY2xlYW5lciA6LSkKClR1ZSBKdW4gMjkgMjM6MDA6MDUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogS2FzaW1pZXIgQnVjaGNpayBmaXhlZCB0aGUgbWVtb3J5IGFjY2VzcyBhbmQKCSAgYWxsb2NhdGlvbiBwcm9ibGVtCgpUdWUgSnVuIDI5IDE5OjAwOjMyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaAoJICBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6CgkgIGFwcGxpZWQgU2NoZW1hcyBwYXRjaGVzIGZyb20gS2FzaW1pZXIgQnVjaGNpaywgdGhlcmUgaXMgc3RpbGwKCSAgb25lIG9wZW4gaXNzdWUgYWJvdXQgcmVmZXJlbmNpbmcgZnJlZWQgbWVtb3J5LgoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiB1cGRhdGVkIHdpdGggbmV3IHRlc3RzIGZyb20gCgkgIEthc2ltaWVyCgpUdWUgSnVuIDI5IDE0OjUyOjE4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaAoJICBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9saWJ4bWwyLXJlZnMueG1sOiBtb3ZlZCBzb21lIGRlZmluaXRpb25zCgkgIHRvIGdsb2JhbHMuaCB0byBhdm9pZCBzb21lIHRyb3VibGVzIHBvaW50ZWQgb3V0IGJ5IFJvYiBSaWNoYXJkcwoKTW9uIEp1biAyOCAxMToyNTozMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBhcHBsaWVkIGNoYW5nZXMgc3VnZ2VzdGVkIGJ5IE1pa2UgSG9tbWV5LCByZW1vdmUKCSAgbGlieG1sMSBzdXBwb3J0IGFuZCB1c2UgQ1BQRkxBR1MgaW5zdGVhZCBvZiBDRkxBR1MKClN1biBKdW4gMjcgMTQ6MTc6MTUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBhbm90aGVyLCBtb3JlICdleHBlcmltZW50YWwnIGZlYXR1cmUgdG8gCgkgIGdldCBjb21waWxlciBvcHRpbWl6YXRpb24gYmFzZWQgb24gZ2NjIHJ1bnRpbWUgcHJvZmlsaW5nCgpTdW4gSnVuIDI3IDE0OjAyOjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbGZnY2NoYWNrLmggZG9jL2VsZmdjY2hhY2sueHNsIGxpYnhtbC5oOiBoYWNrIGJhc2VkIG9uIEFyamFuIHZhbiBkZQoJICBWZW4gc3VnZ2VzdGlvbiB0byByZWR1Y2UgRUxGIGZvb3RwcmludCBhbmQgZ2VuZXJhdGVkIGNvZGUuIEJhc2VkIG9uCgkgIGFsaWFzaW5nIG9mIGxpYnJhcmllcyBmdW5jdGlvbiB0byBnZW5lcmF0ZSBkaXJlY3QgY2FsbCBpbnN0ZWFkIG9mCgkgIGluZGlyZWN0IG9uZXMKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvTWFrZWZpbGUuYW0gZG9jL2FwaWJ1aWxkLnB5OiBhZGRlZCBhdXRvbWF0aWMKCSAgZ2VuZXJhdGlvbiBvZiBlbGZnY2NoYWNrLmggYmFzZWQgb24gdGhlIEFQSSBkZXNjcmlwdGlvbiwgZXh0ZW5kZWQKCSAgdGhlIEFQSSBkZXNjcmlwdGlvbiB0byBzaG93IHRoZSBjb25kaXRpb25hbHMgY29uZmlndXJhdGlvbiBmbGFncwoJICByZXF1aXJlZCBmb3Igc3ltYm9scy4KCSogbmFub2h0dHAuYyBwYXJzZXIuYyB4bWxzYXZlLmMgaW5jbHVkZS9saWJ4bWwvKi5oOiBsb3Qgb2YgY2xlYW51cAoJKiBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIGRvY3MuCgpTdW4gSnVuIDI3IDEwOjAyOjI4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVncmVzc2lvbnMucHksIHJlZ3Jlc3Npb25zLnhtbDogbmV3IGZpbGVzIGZvciBydW5uaW5nCgkgIHJlZ3Jlc3Npb24gdGVzdHMgdW5kZXIgUHl0aG9uLiAgTm90IHlldCBjb21wbGV0ZSwgYnV0CgkgIHNob3VsZCBwcm92aWRlIGdvb2QgdGVzdGluZyB1bmRlciBib3RoIExpbnV4IGFuZCBXaW5kb3dzLgoJKiB0ZXN0SFRNTC5jLCB0ZXN0U0FYLmMsIHhtbGxpbnQuYzogY2hhbmdlZCB0aGUgJ2ZvcGVuJyB1c2VkCgkgIGZvciAtLXB1c2ggdGVzdGluZyB0byBpbmNsdWRlIHRoZSAncmInIHBhcmFtIHdoZW4gY29tcGlsZWQKCSAgdW5kZXIgV2luZG93cy4KCkZyaSBKdW4gMjUgMTM6Mzg6NTcgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB1cmkuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gYmFzZSBwYXRoIHdhcyAiLi94eHgiCgkqIHJlc3VsdC9YSW5jbHVkZS8qOiA1IHRlc3QgcmVzdWx0cyBjaGFuZ2VkIGJ5IGFib3ZlLgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBjb3VwbGUgb2Ygc3BvdHMgd2hlcmUgYSBuZXcKCSAgcmVzdWx0IGZpbGUgdXNlZCBkaWZmZXJlbnQgZmxhZ3MgdGhhdCB0aGUgdGVzdGluZyBvbmUuCgpUaHUgSnVuIDI0IDE2OjI3OjQ0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogc3VwcHJlc3NlZCB3YXJuaW5ncyBmcm9tIHdpdGhpbiB4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMKCSAgKGJ1ZyAxNDQ2NDQpCgkqIGRvYy9leGFtcGxlcy90ZXN0V3JpdGVyLmM6IGNvcnJlY3RlZCB0eXBvIGluIGNvbW1lbnQgZm9yIElTTy04ODU5LTEKCSAgKGJ1ZyAxNDQyNDUpCgpUaHUgSnVuIDI0IDEwOjE3OjMxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogaW1wbGVtZW50ZWQgYnVnZml4IGZyb20gTWFzc2ltbyBNb3JhcmEgZm9yIERURAoJICBkdW1waW5nIHByb2JsZW0uCgkqIHRlc3QvdmFsaWQvdDEwLnhtbCwgcmVzdWx0L3ZhbGlkL3QxMC4qOiBhZGRlZCByZWdyZXNzaW9uCgkgIGZvciBhYm92ZQoJKiBjb25maWd1cmUuaW46IHNtYWxsIGNoYW5nZSBmb3IgbXkgcHJvZmlsZSBzZXR0aW5ncwoKV2VkIEp1biAyMyAyMDoxODoxOSBNRFQgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZy4xCglEb2NzIHBhdGNoIGZyb20gVmlsbGUgU2t5dHRhLCBidWd6aWxsYSAjMTQ0ODQxCgpTYXQgSnVuIDE5IDE4OjM0OjExIE1EVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuaHRtbCwgeG1sbGludC4xCgl1cGRhdGUgbWFuIHBhZ2UgdG8gcmVmbGVjdCBXaWxsaWFtJ3MgbmV3bHkgZGlzY2lwbGluZWQgcmV0dXJuCgljb2RlIG1vam8KClRodSBKdW4gMTcgMDA6NTE6NTUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy9pbzIuYyBkb2MvZXhhbXBsZXMvcGFyc2U0LmM6IGZpeGluZyBhIGNvdXBsZSBvZgoJICBjb21waWxhdGlvbiBlcnJvcnMgd2hlbiBjb25maWd1cmVkIHdpdGggLS13aXRoLW1pbmltdW0KCldlZCBKdW4gMTYgMTY6MDc6MTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTdGVmYW5vIERlYmVuZWRldHRpIHRvIHJlZ2lzdGVyCgkgIG5hbWVzcGFjZXMgaW4gdGhlIGRlYnVnIHNoZWxsCgpNb24gSnVuIDE0IDIxOjU2OjMxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4IGZyb20gU3RldmUgQmFsbCBhbmQgdXBkYXRlIG9mIHRoZSBjb21tZW50LgoJKiBNYWtlZmlsZS5hbSByZXN1bHQvZXJyb3JzLyouc3RyOiBXaWxsaWFtIHBvaW50ZWQgb3V0IHRoYXQgCgkgIHRoZSBzdHJlYW1pbmcgZXJyb3IgY2hlY2tpbmcgcGFydCB3YXNuJ3Qgc3RyZWFtaW5nLCBmaXhpbmcKCk1vbiBKdW4gMTQgMTQ6MTE6NTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogcGF0Y2ggZnJvbSBJZ29yIGZvciB0aGUgZGVmYXVsdCBjYXRhbG9nIHBhdGggb24gV2luZG93cwoKU2F0IEp1biAxMiAwOTowMzo1NyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNvbmZpZ3VyZS5pbjogYXBwYXJlbnRseSB3YXNuJ3QgdXBkYXRlZCBsYXN0IHRpbWUKClRodSBKdW4gMTAgMjA6NTc6NDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjb25maWd1cmUuaW4sIHhtbG1lbW9yeS5jLCBnbG9iYWxzLmM6IGZpeGVkIHByb2JsZW0gd2hlbgoJICBjb25maWd1cmluZyB1c2luZyAtLXdpdGgtdGhyZWFkLWFsbG9jCgpXZWQgSnVuICA5IDE2OjMxOjI0IENFU1QgMjAwNCBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzIHdpbjMyL01ha2VmaWxlLiogbWlub3IgY2hhbmdlcyBmb3IgdGhlIG5ldwoJICBsYXlvdXQgb2YgdGhlIFdpbmRvd3MgYmluYXJ5IHBhY2thZ2UKClR1ZSBKdW4gIDggMTk6NTA6MjUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2gKCSAgZnJvbSBLYXNpbWllciBCdWNoY2lrIGZvciBTY2hlbWEgQ29tcG9uZW50IENvbnN0cmFpbnRzCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpUdWUgSnVuICA4IDIxOjI3OjAzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sbGludC5jOiBmaXhlZCBtaXNzaW5nIGVycm9yIHJldHVybiBjb2RlIGZvciBzY2hlbWEKCSAgdmFsaWRhdGlvbiAoYnVnIDE0Mzg4MCksIGFsc28gY2hhbmdlZCBvdmVyIHRvIGFuIGVudW0gZm9yCgkgIGRlZmluaW5nIHRoZSBlcnJvciByZXR1cm4gY29kZXMgZm9yIGFsbCBjb25kaXRpb25zLgoKVHVlIEp1biAgOCAxNDowMToxNCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGZpeGVkIGEgc2VyaW91cwoJICBwcm9ibGVtIHdoZW4gc3Vic3RpdHVpbmcgZW50aXRpZXMgdXNpbmcgdGhlIFJlYWRlciwgdGhlIGVudGl0aWVzCgkgIGNvbnRlbnQgbWlnaHQgYmUgZnJlZWQgYW5kIGlmIHJlcmVmZXJlbmNlZCB3b3VsZCBjcmFzaAoJKiBNYWtlZmlsZS5hbSB0ZXN0LyogcmVzdWx0Lyo6IGFkZGVkIGEgbmV3IHRlc3QgY2FzZSBhbmQgYSBuZXcKCSAgdGVzdCBvcGVyYXRpb24gZm9yIHRoZSByZWFkZXIgd2l0aCBzdWJzdGl0dXRpb24gb2YgZW50aXRpZXMuCgpUdWUgSnVuICA4IDEyOjE0OjE2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDoKCSAgYXBwbGllZCBwYXRjaCBmcm9tIFJvYiBSaWNoYXJkcyBmb3IgdGhlIHBlciB0aHJlYWQgSS9PIG1hcHBpbmdzCgpUdWUgSnVuICA4IDA5OjU4OjMxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogc29tZSBmdXJ0aGVyIGVuaGFuY2VtZW50IHRvIHRha2UgY2FyZSBvZgoJICB4bWw6YmFzZSBmb3IgWFBvaW50ZXIgZWxlbWVudHMgKGJ1ZyAxNDM4ODYpLiAgQWxzbyBmaXhlZAoJICBhIHByb2JsZW0gd2hlbiB4bWw6YmFzZSB3YXMgYWxyZWFkeSBzcGVjaWZpZWQgb24gYW4KCSAgWEluY2x1ZGUnZCBlbGVtZW50LgoKTW9uIEp1biAgNyAyMjoxNDo1OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggaW50ZXJuYWwgY2xlYW51cCBvZiA8RElWPiBlbGVtZW50CgkgIChidWcgMTQzNzM4KS4KCk1vbiBKdW4gIDcgMTY6NTc6NDMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB1cmkuYywgaW5jbHVkZS9saWJ4bWwvdXJpLmg6IGFkZGVkIGEgbmV3IHJvdXRpbmUKCSAgeG1sQnVpbGRSZWxhdGl2ZVVSSSBuZWVkZWQgZm9yIGVuaGFuY2VtZW50IG9mIHhpbmNsdWRlLmMKCSogeGluY2x1ZGUuYzogY2hhbmdlZCBoYW5kbGluZyBvZiB4bWw6YmFzZSAoYnVnIDEzNTg2NCkKCSogcmVzdWx0L1hJbmNsdWRlLyo6IHJlc3VsdHMgb2YgNSB0ZXN0cyBjaGFuZ2VkIGFzIGEgcmVzdWx0CgkgIG9mIHRoZSBhYm92ZSBjaGFuZ2UKCkZyaSBKdW4gIDQgMTE6Mjc6MzcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIGEgYnVuY2ggb2YgdGVzdHMgZnJvbQoJICBLYXNpbWllciBCdWNoY2lrIHBvc3RlZCBvbiBNYXkgMTEKClRodSBKdW4gIDMgMTc6NTg6MjUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogbmV3IHBhdGNoIGZyb20gIEthc2ltaWVyIEJ1Y2hjaWsgZm9yIHByb2Nlc3NDb250ZW50cwoJICBvZiB3aWxkY2FyZHMgYXR0cmlidXRlIGhhbmRsaW5nCgkqIHRlc3Qvc2NoZW1hcy9hbnlBdHRyLSogcmVzdWx0L3NjaGVtYXMvYW55QXR0ci0qOiBhZGRlZCBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3RzCgpUaHUgSnVuICAzIDEzOjIwOjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidWcgd2hlcmUgaW52YWxpZCBjaGFycmVmcyBtYXkgbm90IGJlIGRldGVjdGVkCgkgIHNvbWV0aW1lcyBhcyBwb2ludGVkIGJ5IE1vcnVzIFdhbHRlci4KCSogdGVzdC9lcnJvcnMvY2hhcnJlZjEueG0gcmVzdWx0L2Vycm9ycy9jaGFycmVmMS54bWwqOiBhZGRlZCB0aGUKCSAgdGVzdCBpbiB0aGUgcmVncmVzc2lvbiBzdWl0ZS4KClRodSBKdW4gIDMgMTg6Mzg6MjcgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmM6IHNtYWxsIGNoYW5nZSB0byB4bWxTY2hlbWFWYWxpZGF0ZUF0dHJpYnV0ZXMsCgkgIGFsc28gY29ycmVjdGVkIHR5cG8gb24gZXJyb3IgY29kZSBlbnVtLgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBjb3JyZWN0ZWQgdHlwbyBvbiBzY2hlbWEgZXJyb3IKCSAgY29kZSBlbnVtCgpUaHUgSnVuICAzIDEwOjEyOjM4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jOiBtaW5vciBjb3NtZXRpYyBjaGFuZ2VzLCBubyBjaGFuZ2UgdG8gbG9naWMuCgkqIHJlc3VsdC9zY2hlbWFzL2F0dHJ1c2VfMF9bMTJdLmVycjogcmVnZW5lcmF0ZWQKCSogZ2xvYmFscy5jOiBhZGRlZCBhIG5ld2xpbmUgYXQgZW5kIHRvIG1ha2UgZ2NjIGhhcHB5CgpXZWQgSnVuICAyIDIxOjE2OjI2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBLYXNpbWllciBCdWNoY2lrCgkgIGltcGxlbWVudGluZyBhdHRyaWJ1dGUgdXNlcyBhbmQgd2lsZGNhcmRzLgoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZC9maXhlZCBhIGJ1bmNoIG9mIHRlc3RzCgpXZWQgSnVuICAyIDE4OjE1OjUxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbSAKCSAgUm9iIFJpY2hhcmRzIGZvciBjdXN0b20gSS9PIEJ1ZmZlckNyZWF0ZUZpbGVuYW5lIGZpeGVzIGJ1ZwoJICAjMTQzMzY2CgpXZWQgSnVuIDAyIDE2OjI1OjMyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgcHJvYmxlbSB3aXRoIHByZWRpY2F0ZSBldmFsdWF0aW9uIG9uIGFuCgkgIGVtcHR5IG5vZGVzZXQgKGJ1ZyAxNDM0MDkpCgpXZWQgSnVuIDAyIDExOjI2OjQxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdGVzdFNBWC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggYXR0cmlidXRlIGxpc3RpbmcgKGJ1ZyAxNDI2NzQpCgkgIGFuZCBhZGRlZCBtYWNybyBMSUJYTUxfVEVTVF9WRVJTSU9OIHRvIGFzc3VyZSB4bWxJbml0UGFyc2VyCgkgIGdldHMgY2FsbGVkIChidWcgMTQyNjg2KQoKU2F0IE1heSAyOSAyMTozNTo1MiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9zY2hlbWFzL2RhdGVfMC54bWwgeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQgYSBwYXRjaCBmcm9tCgkgIENoYXJsZXMgQm96ZW1hbiBmaXhpbmcgYSBzaWRlIGVmZmVjdCBpbiBkYXRlIGhhbmRsaW5nCgpUaHUgTWF5IDI3IDE5OjQ3OjQ4IE1EVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sIGZpeCBsYWNrIG9mIGNhc3QgaW4gWHBhdGggZXhhbXBsZQoJKiBkb2MvdHV0b3JpYWwvKi5odG1sLCB4bWx0dXRvcmlhbC5wZGYgcmVidWlsZCBodG1sLCBwZGYKCjIwMDQtMDUtMjUgIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmM6IGZpeGVkIGMxNG4gYnVnIHdpdGggc2VyaWFsaXppbmcgYXR0cmlidXRlIG5hbWVzcGFjZXMKCk1vbiBNYXkgMjQgMDg6MjI6NDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCB0byBhbGxvdyAnKycgaW4gZXhwb25lbnQgb2YgbnVtYmVyCgkgIChidWcgMTQzMDA1KQoJKiBTQVgyLmM6IGZpeGVkIHR5cG8gaW4gbGFzdCBjb21taXQKClNhdCBNYXkgMjIgMDk6MDg6MjQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBTQVgyLmM6IHNraXBwZWQgY2FsbCB0byB4bWxWYWxpZGF0ZU5DTmFtZSB3aGVuIGNvbXBpbGluZwoJICAtLXdpdGgtbWluaW11bSAoYnVnIDE0MjkxNykKClR1ZSBNYXkgMTggMDY6NDg6MDAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogcmV2ZXJ0ZWQgdGhlIGJyb2tlbiBjaGFuZ2UuCgpNb24gTWF5IDE3IDIzOjA3OjE1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzIGZvciAyLjYuMTAKCk1vbiBNYXkgMTcgMDU6NTI6MDMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiA6IHJlbGVhc2luZyAyLjYuMTAKClN1biBNYXkgMTYgMjM6MTI6MzUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXZvaWQgcmV0dXJuaW5nIGRlZmF1bHQgbmFtZXNwYWNlIHdoZW4gc2VhcmNoaW5nCgkgIGZyb20gYW4gYXR0cmlidXRlCgkqIGVudGl0aWVzLmMgeG1sd3JpdGVyLmM6IHJldmVyc2UgeG1sRW5jb2RlU3BlY2lhbENoYXJzKCkgYmVoYXZpb3VyCgkgIGJhY2sgdG8gZXNjYXBpbmcgIiBzaW5jZSB0aGUgbm9ybWFsIHNlcmlhbGl6YXRpb24gcm91dGluZXMgZG8gbm90CgkgIHVzZSBpdCBhbnltb3JlLCBzaG91bGQgY2xvc2UgYnVnICMxMzQ0NzcgLiBUcmllZCB0byBtYWtlIAoJICB0aGUgd3JpdGVyIGF2b2lkIGl0IHRvbyBidXQgaXQgZGlkbid0IHdvcmsuCgpTdW4gTWF5IDE2IDAxOjA3OjE2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvQ2hhbmdlTG9nLmF3ayBkb2MvQ2hhbmdlTG9nLnhzbDogZml4ZWQgZXNjYXBpbmcKCSAgaGFuZGxpbmcgYW5kIGFkZGVkIGRpcmVjdCBsaW5rcyB0byBidWd6aWxsYSByZXBvcnQgZm9yCgkgIGJ1ZyBudW1iZXJzLgoKU3VuIE1heSAxNiAxMToxMToxMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVycm9yLmM6IG1vZGlmaWVkIHRvIGFzc3VyZSBwcm9wZXIgdXNlciBkYXRhIGlzIHNlbnQgdG8KCSAgc3RydWN0dXJlZCBlcnJvciByb3V0aW5lIChidWcgMTQyNTk4KQoKU3VuIE1heSAxNiAwMzoxODo1MiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBhIGNvdXBsZSBvZiBsYXJnZSBzdGF0aWMgdmFyaWFibGUgd2hpY2ggc2hvdWxkIHJlYWxseQoJICBub3QgYmUgZGVjbGFyZWQgYXMgc3VjaCBjbHV0dGVyZWQgdGhlIC5ic3Mgc2VjdGlvbi4KClN1biBNYXkgMTYgMDM6MDY6MzEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9DaGFuZ2VMb2cuYXdrOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyB3aGVuIHBhcnNpbmcKCSAgbGlieHNsdCBDaGFuZ2VMb2cKClNhdCBNYXkgMTUgMjA6MTQ6MjEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9DaGFuZ2VMb2cuYXdrIGRvYy9DaGFuZ2VMb2cueHNsOiBmaXJzdCBzdGVwcyBvZiBhIGdvb2QKCSAgQ2hhbmdlTG9nIHBhZ2UgZ2VuZXJhdGlvbi4gVGhlIGF3ayBzaG91ZGwgZXNjYXBlIGNoYXJhY3RlcnMKCSAgbm90IG9rYXkgaW4gWE1MIGFuZCB0aGUgeHNsdCBzaG91bGQgbWFrZSBsaW5rcyB0byBmdW5jdGlvbnMKCSAgb3IgdmFyaWFibGVzIG9yIGJ1ZyByZXBvcnRlZCBpbiB0aGUgZW50cmllcy4KClNhdCBNYXkgMTUgMTQ6NTc6NDAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYyBpbmNsdWRlL2xpYnhtbC94bWxzYXZlLmg6IHN0YXJ0IGFkZGluZyBBUEkgZm9yIAoJICBlc2NhcGluZyBjdXN0b21pemF0aW9uLgoKU2F0IE1heSAxNSAxMjozODoxNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBtb3JlIHhtbFNhdmUgY2xlYW51cCwgb3B0aW1pemF0aW9uIGFuZCByZWZhY3RvcmluZwoKRnJpIE1heSAxNCAxNzo1MTo0OCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYyB4bWxzYXZlLmM6IHRoaXJkIHBhc3MgYXQgdGhlIGVzY2FwaW5nIHJlZmFjdG9yaW5nLgoKRnJpIE1heSAxNCAxMjozNzoyNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBlbmhhbmNlZCB0aGUgZW5oYW5jZW1lbnQsIGZpeGVkIGFub3RoZXIgY291cGxlIG9mCgkgIHNwZWNpYWwgY2FzZXMuCgpGcmkgTWF5IDE0IDExOjQ4OjMzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IHNtYWxsIGVuaGFuY2VtZW50IHRvIGR0ZCBoYW5kbGluZyBvZiAoYT8pKyAoYnVnIDE0MjQ4NykKClRodSBNYXkgMTMgMjM6MTk6MDAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmMgeG1sc2F2ZS5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IHNlY29uZCBwYXNzIG9uIGVzY2FwaW5nCgkgIGhhbmRsaW5nLCBzdGFydCB0byBsb29rcyBiZXR0ZXIsIG5lZWQgdG8gYmUgY29tcGxldGVkIGFuZCBhZGRlZAoJICBkaXJlY3RseSBhdCB0aGUgc2F2aW5nIGNvbnRleHQgbGV2ZWwuCgpUaHUgTWF5IDEzIDEwOjMxOjI4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jIHhtbHNhdmUuYyBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBmaXJzdCBwYXNzIGF0IHJlZmFjdG9yaW5nCgkgIHRoZSBlc2NhcGUgb24gc2F2ZSByb3V0aW5lcyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlcyAobGVzcyBtYWxsb2MpCgkgIGFuZCBtb3JlIGZsZXhpYmlsaXR5IHVzaW5nIHRoZSBuZXcgc2F2aW5nIGNvbnRleHQuIFByZWxpbWluYXJ5CgkgIHdvcmssIGludGVyZmFjZSB3aWxsIGNoYW5nZS4KCldlZCBNYXkgMTIgMjI6MzQ6MDMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmM6IGFkZGVkIGNvZGUgaW4geG1sU2NoZW1hQnVpbGRBQ29udGVudE1vZGVsIHRvIGhhbmRsZQoJICBlbGVtZW50IHJlZmVyZW5jZSB3aXRoaW4gdGhlIHhzOmFsbCBjb25zdHJ1Y3QgKGJ1ZyAxMzk4OTcpCgpXZWQgTWF5IDEyIDE3OjI3OjE4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogYSBsaXR0bGUgZnVydGhlciBmaXhpbmcgb2YgZmFsbGJhY2sgcHJvY2Vzc2luZywgdGhpcwoJICB0aW1lIGZvciBmYWxsYmFjayB3aXRoIGNoaWxkcmVuIChidWcgMTM5NTIwKS4KCldlZCBNYXkgMTIgMDg6MjE6MzMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmM6IGFkZGVkIGNvZGUgaW4geG1sU2NoZW1hQnVpbGRDb250ZW50TW9kZWwgdG8KCSAgYWxsb3cgcmVmIGluIGdyb3VwIGRlZmluaXRpb24gKGJ1ZyAxMzQ0MTEpLiAgQWxzbyBmaXhlZAoJICBtaXNjIGNvbXBpbGF0aW9uIHdhcm5pbmcgbWVzc2FnZXMuCgkqIHJlc3VsdC9zY2hlbWEvZ3JvdXAwXzBfMCwgcmVzdWx0L3NjaGVtYS9ncm91cDBfMF8wLmVycjoKCSAgcmVnZW5lcmF0ZWQgKG5vdyBubyBlcnJvciByZXBvcnRlZCkuCgpUdWUgTWF5IDExIDExOjU1OjU5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXggdG8gdGhlIGZpeCBmb3IgIzE0MTg2NCBmcm9tIFBhdWwgRWxzZXRoICAKCSogSFRNTHBhcnNlci5jIHJlc3VsdC9IVE1ML2RvYzMuaHRtOiBhcHBseSBmaXggZnJvbSBEYXZpZCBHYXR3b29kIGZvcgoJICAjMTQxMTk1IGFib3V0IHRleHQgYmV0d2VlbiBjb21tZW50cy4KClR1ZSBNYXkgMTEgMjM6MDQ6NDcgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmMsIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCwKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogQXBwbGllZCBwYXRjaGVzIHN1cHBsaWVkIGJ5CgkgIEthc2ltaWVyIEJ1Y2hjaWsuCgkqIHRlc3Qvc2NoZW1hcy9wbzFfMC54bWwsIHRlc3Qvc2NoZW1hcy9wbzFfMC54c2Q6CgkgIGNoYW5nZWQgdGVzdCB0byBhY2NvdW50IGZvciBhYm92ZSBwYXRjaC4KClR1ZSBNYXkgMTEgMDk6MDY6NTMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90ZXN0cy90c3RMYXN0RXJyb3IucHk6IGJldHRlciBwb3J0YWJpbGl0eSBmaXggZm9yIGYoKmFyZ3MpLAoJICB1c2UgYXBwbHkoZiwgYXJncykgYXMgU3RlcGhhbmUgQmlkb3VsIHN1Z2dlc3RlZAoKTW9uIE1heSAxMCAxNTo0OToyMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlZ2V4cC5jOiBlbmhhbmNlZCB4bWxSZWdTdGF0ZUFkZFRyYW5zIHRvIGNoZWNrIGlmIHRyYW5zaXRpb24KCSAgaXMgYWxyZWFkeSBwcmVzZW50IGFuZCwgaWYgc28sIHRvIGlnbm9yZSB0aGUgcmVxdWVzdCB0byBhZGQgaXQuCgkgIFRoaXMgaGFzIGEgdmVyeSBkcmFtYXRpYyBlZmZlY3Qgb24gbWVtb3J5IHJlcXVpcmVtZW50cyBhcyB3ZWxsCgkgIGFzIGVmZmljaWVuY3kuICBJdCBhbHNvIGZpeGVzIGJ1ZyAxNDE3NjIuCgpTdW4gTWF5ICA5IDIwOjQwOjU5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3RzdExhc3RFcnJvci5weToKCSAgYXBwbGllZCBwYXRjaCBmcm9tIEVkIERhdmlzIHRvIGFsbG93ICJtYWtlIHRlc3RzIiB0byB3b3JrCgkgIHdpdGggUHl0aG9uIDEuNQoKU3VuIE1heSAgOSAxOTo0NjoxMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBhcHBseSBmaXggZm9yIFhIVE1MMSBmb3JtYXRpbmcgZnJvbSBOaWNrIFdlbGxuaG9mZXIKCSAgZml4ZXMgYnVnICMxNDEyNjYKCSogdGVzdC94aHRtbGNvbXAgcmVzdWx0Ly94aHRtbGNvbXAqOiBhZGRlZCB0aGUgc3BlY2lmaWMgcmVncmVzc2lvbgoJICB0ZXN0CgpTdW4gTWF5ICA5IDE0OjA3OjIxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZml4IGZvciBhIHBlZGFudGljIG1ha2UgY2hlY2sgd2l0aG91dCBtYWtlIGFsbCByZXF1ZXN0CgpTYXQgTWF5ICA4IDIyOjU2OjIyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYyB4bWxJTy5jOiBmaXhpbmcgc29tZSBwcm9ibGVtcyBpbiBVUkkgdW5lc2NhcGluZwoJICBhbmQgb3V0cHV0IGJ1ZmZlciBvcGVuaW5nLCB0aGlzIHNob3VsZCBmaXggIzE0MTg2NAoKRnJpIE1heSAgNyAyMjozMTo1NCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBmaXhlcyB0aGUgdXNlIG9mICdsaXN0JyBhcyBhIHBhcmFtZXRlcgoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGFkZGVkIHhtbFBvcElucHV0Q2FsbGJhY2sgZm9yCgkgIE1hdHQgU2VyZ2VhbnQKClRodSBNYXkgIDYgMjE6MTQ6MzggUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWdleHAuYzogZW5oYW5jZWQgdGhlIGhhbmRsaW5nIG9mIHN1YmV4cHJlc3Npb24gcmFuZ2VzCgkgIHdoaWNoIGhhdmUgYSBtaW5PY2N1cnMgb2YgMCAoYnVnIDE0MDQ3OCBhZ2Fpbik7IGNsZWFuZWQgdXAKCSAgY29tbWVudHMgdGhyb3VnaG91dCB0aGUgbW9kdWxlLgoKVHVlIE1heSAgNCAwMDo1MjoxNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRpbmcgYSAtLW1heG1lbSBvcHRpb24gdG8gY2hlY2sgbWVtb3J5IHVzZWQuCgpTYXQgTWF5ICAxIDAxOjA4OjQ0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgeG1sc2F2ZS5jIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jOiBGaXhlZAoJICBidWcgIzE0MTUyOSBpLmUuIHZhcmlvdXMgcHJvYmxlbXMgd2hlbiBidWlsZGluZyB3aXRoIC0td2l0aG91dC1odG1sCgpGcmkgQXByIDMwIDE4OjEyOjMxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgeG1scmVhZGVyLmM6IGZpeGluZyBidWcgIzE0MTM4NCB3aGVyZSB0aGUgcmVhZGVyIGRpZG4ndAoJICBjYWxsIHRoZSBkZXJlZ2lzdGVyaW5nIGZ1bmN0aW9ucy4gQWxzbyBhZGRlZCB0aGUgY2hlY2sgdG8KCSAgeG1sbGludCAtLXN0cmVhbSAtLWNoa3JlZ2lzdGVyIC4KCkZyaSBBcHIgMzAgMDg6NTc6NDcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGFwcGxpZWQgYSBzZWNvbmQgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGZvcgoJICByZWdyZXNzaW9uIHRlc3RzIG9uIFdpbmRvd3MKClRodSBBcHIgMjkgMjE6NDc6MjMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBuZXZlciBjb21taXQgd2l0aG91dCBydW5uaW5nIG1ha2UgdGVzdHMgZmlyc3QgIQoKVGh1IEFwciAyOSAyMDoxNToyMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeCBhIG5hc3R5IHByb2JsZW0gd2l0aCByZWFkaW5nIG92ZXIgdGhlIGVuZAoJKiB4bWxzYXZlLmM6IGZpeCBhIHJlcG9ydGVkIG1lbW9yeSBsZWFrIGFwcGFyZW50bHkKClRodSBBcHIgMjkgMTc6MDU6MDAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IHBhdGNoIGZyb20gTWFyayBWYWtvYyBmb3IgcmVncmVzc2lvbiB0ZXN0cwoJICBvbiBXaW5kb3dzLgoJKiB4cGF0aC5jOiB0aGUgTmFOIHByb2JsZW0gYWxzbyBzaG93cyB1cCBvbiBCb3JsYW5kCgpNb24gQXByIDI2IDIzOjM3OjEyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVnZXhwLmM6IGVuaGFuY2VkIHhtbEZBUmVnRXhlYyByYW5nZSBldmFsdWF0aW9uIGZvciBtaW4KCSAgb2NjdXJzIDAgcHJvYmxlbXMgLSBmaXhlcyBidWcgMTQwNDc4LgoKVGh1IEFwciAyMiAwOToxMjo0NyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcm5ncGFyc2VyLmM6IHRpbnkgcGF0aCBmaXhlcyB0aGUgInhtbENvbnZlcnRDUk5HRmlsZSIgZnVuY3Rpb24gbmFtZQoJICBmcm9tIEthc2ltaWVyIEJ1Y2hjaWsKCSogeG1sc2NoZW1hcy5jOiByZWN1cnNpdmUgeHM6ZXh0ZW5zaW9uIGZpeCBmcm9tIHRhaWhlaSBnb2kKCldlZCBBcHIgMjEgMDA6MTk6MjkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogc21hbGwgYnVmZmVyIHJlc2l6aW5nIGltcHJvdmVtZW50IGZyb20gTW9ydGVuIFdlbGluZGVyCgkgIGNsb3NlcyAjMTQwNjI5CgpUdWUgQXByIDIwIDIzOjQwOjE0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBsYXN0IHZlcnNpb24gb2YgdGhlIGZpeCBmb3IgTVNDIHZlcnNpb24gMTIwMAoKVHVlIEFwciAyMCAxOTo0MDozNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGtpbGxpbmcgdGhlIHN0cm5jbXAgdnMuIG1lbWNtcCBjb250cm92ZXJzeSBhbmQgIzE0MDU5MwoKVHVlIEFwciAyMCAxMzoyNzowNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvU0FYMi5oOiBLYXNpbWllciBCdWNoY2lrIHBvaW50ZWQgb3V0IHNvbWUgCgkgIGluZXhpc3RlbnQgZnVuY3Rpb25zLCBjbGVhbmVkIHRoZW0gb3V0LgoKVHVlIEFwciAyMCAxMTo0Mjo1MCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYzogSm9obnNvbiBDYW1lcm9uIHBvaW50ZWQgb3V0IHRoYXQKCSAgaW5pdEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jKCkgd2FzIHJlYWxseSB3cm9uZy4KCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IHhtbFRleHRSZWFkZXJNb2RlIGVudW0KCSAgbXVzdCBiZSBtYWRlIHB1YmxpYywgYWRkZWQgc29tZSBtaXNzaW5nIGNvbW1lbnRzIG9uIHRoZSBYTUxSZWFkZXIKCSAgaGVhZGVyLgoJKiBjMTRuLmM6IEFsZXhzZXkgZml4ZWQgQzE0TiBidWcgd2l0aCBwcm9jZXNzaW5nIG5hbWVzcGFjZXMKCSAgZnJvbSBhdHRyaWJ1dGVzCgpNb24gQXByIDE5IDIzOjI3OjQ2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIHN0dXBpZCAoKSBlcnJvciArIE1hcmsgbmFtZS4KClN1biBBcHIgMTggMjM6NDU6NDYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNi45IHJlbGVhc2UKCSogZG9jLyogTmV3czogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKU3VuIEFwciAxOCAyMjo1MTo0MyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcmVsYXhlZCBpZCgpIHRvIG5vdCBjaGVjayB0YWh0IHRoZSBuYW1lKHMpIHBhc3NlZAoJICBhcmUgYWN0dWFsbHkgTkNOYW1lLCBkZWNpZGVkIHRoaXMgaW4gYWdyZWVtZW50IHdpdGggQWxla3NleSBTYW5pbgoJICBzaW5jZSBleGlzdGluZyBzcGVjcyBsaWtlIFZpc2EzRCBicm9rZSB0aGF0IGNvbmZvcm1hbmNlIGNoZWNraW5nCgkgIGFuZCBvdGhlciB0b29scyBzZWVtcyB0byBub3QgaW1wbGVtZW50IGl0IHNpZ2guLi4KCSogU0FYMi5jOiBjaGVjayBhdHRyaWJ1dGUgZGVjbHMgZm9yIHhtbDppZCBhbmQgdGhlIHZhbHVlIGlzIGFuCgkgIE5DTmFtZS4KCSogdGVzdC94bWxpZC9pZF9lcnIqIHJlc3VsdC94bWxpZC9pZF9lcnIqOiBhZGRlZCBlcnJvciB0ZXN0aW5nCgpTdW4gQXByIDE4IDIxOjQ2OjE3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB3b3JrIGFyb3VuZCBNaWNyb3NvZnQgY29tcGlsZXIgTmFOIGJ1ZyByYWlzZSByZXBvcnRlZAoJICBieSBNYXJrIFZha29jCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZpeGVkIGEgcmVjdXNpdmUgZXh0ZW50aW9uIHNjaGVtYXMKCSAgY29tcGlsYXRpb24gZXJyb3IgcmFpc2VkIGJ5IHRhaWhlaSBnb2kKClN1biBBcHIgMTggMTY6NTc6MDIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBrZWVwIHRoZSBDaGFuZ2VMb2cgY29tcHJlc3NlZCAKCSogeG1scmVhZGVyLmM6IGZpeCBhIHNlZ2ZhdWx0IHdoZW4gdXNpbmcgQ2xvc2UoKQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcjgucHk6IHRlc3QgZm9yCgkgIHRoZSBDbG9zZSgpIHJlYWRlciBBUEkuCgpTYXQgQXByIDE3IDIyOjQyOjEzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jLCB4bWx3cml0ZXIuYywgZG9jL2V4YW1wbGVzL3BhcnNlNC5jLAoJICBkb2MvZXhhbXBsZXMvaW8yLmM6IG1pbm9yIHdhcm5pbmcgY2xlYW51cCAobm8gY2hhbmdlIHRvIGxvZ2ljKQoJKiB4aW5jbHVkZTogZml4ZWQgcmV0dXJuIHZhbHVlIGZvciBpbnRlcm5hbCBmdW5jdGlvbgoJICB4bWxYSW5jbHVkZUxvYWRGYWxsYmFjayAobm93IGFsd2F5cyAwIG9yIC0xKQoKU2F0IEFwciAxNyAyMTozMjozMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IHNtYWxsIGVuaGFuY2VtZW50IHRvIGZpeCBidWcgMTM5NzkxCgpGcmkgQXByIDE2IDE4OjQ0OjQ3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFwcGxpZWQgcGF0Y2hlcyBmcm9tIEthc2ltaWVyIEJ1Y2hjaWsKCSAgZm9yIHRoZSBhdHRyaWJ1dGUgdXNlIHN1cHBvcnQKCSogdGVzdC9zY2hlbWFzL2F0dHJ1c2UqIHJlc3VsdC9zY2hlbWFzL2F0dHJ1c2UqOiBhZGRlZCB0aGUKCSAgdGVzdHMgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUuCgpGcmkgQXByIDE2IDE4OjIyOjI1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IG1vdmUgdGhlIFRPRE8gYXMgY29tbWVudHMgYXMgdGhlIGZ1bmN0aW9uIHdoaWxlIG5vdAoJICBmaW5pc2hlZCBhcmUgdXNhYmxlIGFzLWlzCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBwYXRjaCBmcm9tIEthc2ltaWVyIEJ1Y2hjaWsKCSAgaW1wbGVtZW50aW5nIHVuaW9uCgkqIHRlc3Qvc2NoZW1hcy91bmlvbl8wXzAueCogcmVzdWx0L3NjaGVtYXMvdW5pb25fMF8wKjogYWRkZWQgZXhhbXBsZQoJKiBweXRob24vTWFrZWZpbGUuYW06IGFwcGxpZWQgZml4IGZyb20gTWlrZSBIb21tZXkKCkZyaSBBcHIgMTYgMjM6NTg6NDIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIGRldGVjdGluZyBleHRlcm5hbCBkdGQKCSAgZW5jb2RpbmcgKGJ1ZyAxMzUyMjkpLgoJKiBNYWtlZmlsZS5hbTogbWlub3IgY2hhbmdlIHRvIHRlc3QgbGFiZWwKCkZyaSBBcHIgMTYgMTY6MDk6MzEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBwcm9ibGVtIGNhdXNpbmcgZHVwbGljYXRlIGZhbGxiYWNrCgkgIGV4ZWN1dGlvbiAoYnVnIDEzOTUyMCkKCSogdGVzdC9YSW5jbHVkZS9kb2NzL2ZhbGxiYWNrMi54bWwgcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrMi4qOgoJICBhZGRlZCB0ZXN0Y2FzZQoKRnJpIEFwciAgOSAyMzo0OTozNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWRkaW5nIHhtbDppZCBkcmFmdCBzdXBwb3J0CgkqIE1ha2VmaWxlLmFtIHRlc3QveG1saWQvaWRfdHN0KiByZXN1bHQveG1saWQvaWRfdHN0KjogYWRkaW5nCgkgIDQgZmlyc3QgcmVncmVzc2lvbiB0ZXN0cwoKRnJpIEFwciAgOSAxMTo1NjowOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGluZyBSZWQgSGF0IGJ1ZyAjMTIwNDgyICwgbGlieG1sMi1weXRob24KCSAgc2hvdWxkIGRlcGVuZCBvbiB0aGUgdmVyc2lvbiBvZiBweXRob24gdXNlZCB0byBjb21waWxlIGl0LgoKTW9uIEFwciAgNSAwOTowNzoyNCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSmFtZXMgQnVyc2EsIGZyYW1lc2V0IHNob3VsZAoJICBjbG9zZSBoZWFkLgoKRnJpIEFwciAgMiAyMjowMjoyNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHJlbGF4bmcuYzogZml4ZWQgcHJvYmxlbSBpbiB4bWxSZWxheE5HQ29tcGFyZU5hbWVDbGFzc2VzCgkgIHdoaWNoIHdhcyBjYXVzaW5nIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSB0ZXN0IDM1MSB0byBmYWlsLgoKRnJpIEFwciAgMiAxNzowMzo0OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIG5hbm9odHRwLmM6IGltcGxlbWVudGVkIGZpeCBmb3IgTSQgSUlTIHJlZGlyZWN0IHByb3ZpZGVkCgkgIGJ5IElhbiBIdW1tZWwKCSogcmVsYXhuZy5jOiBmaXhlZCBwcm9ibGVtIHdpdGggbm90QWxsb3dlZCBjb21waWxhdGlvbgoJICAoYnVnIDEzODc5MykKClRodSBBcHIgIDEgMjI6MDc6NTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBmaXggZm9yIHhtbFVyaUVzY2FwZSBvbiAiaHR0cDovL3VzZXJAc29tZXdoZXJlLmNvbSIKCSAgZnJvbSBNYXJrIFZha29jLgoKMjAwNC0wNC0wMSAgSm9oYW4gRGFobGluICA8am9oYW5AZ25vbWUub3JnPgoKCSogcHl0aG9uLy5jdnNpZ25vcmU6IEFkZCBnZW5lcmF0ZWQgZmlsZXMsIHRvIG1ha2UgY3ZzIHNpbGVudC4KClRodSBBcHIgIDEgMTI6NDE6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogc21hbGwgc2lnbmVkLW5lc3MgcGF0Y2ggZnJvbSBTdGV2ZSBMaXR0bGUKCldlZCBNYXIgMzEgMTc6NDc6MjggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBwYXRjaGVkIGEgYnVnIGluIHBhcnNpbmcgcHJvZHVjdGlvbiAxIGFuZCAyIG9mCgkgIHhtbHNjaGVtYXMgcmVnZXhwIHRoYXQgV2lsbGlhbSBwb2ludGVkIG91dCB3aGlsZSB3b3JraW5nIG9uCgkgICMxMzQxMjAKCSogdGVzdC9yZWdleHAvYnJhbmNoIHJlc3VsdC9yZWdleHAvYnJhbmNoOiBhZGRlZCBhIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdAoKV2VkIE1hciAzMSAwOTo1MDozMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBQWVRIT05QQVRIIHRvIHB5dGhvbiB0ZXN0cyBmb3IgU2NoZW1hcwoJICBhbmQgUmVsYXhORwoJKiB0ZXN0L3hzZHRlc3QveHNkdGVzdHN1aXRlLnhtbDogYWRkZWQgdGVzdGZpbGUgZm9yCgkgIFNjaGVtYXNQeXRob25UZXN0cwoKTW9uIE1hciAyOSAxNjo1Njo0OSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzL2V4YW1wbGVzLnhzbCBkb2MvZXhhbXBsZXMvaW5kZXguaHRtbDogYWRkZWQKCSAgaW5mb3JtYXRpb24gYWJvdXQgY29tcGlsaW5nIG9uIFVuaXgKCk1vbiBNYXIgMjkgMTQ6MTg6MTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZXMgdGhlIGNvbW1lbnRzIGZvciB4bWxDYXRhbG9nRHVtcCBhbmQgeG1sRHVtcEFDYXRhbG9nCgkqIGRvYy8qOiByZWJ1aWx0IHRvIHVwZGF0ZQoKU3VuIE1hciAyOCAxODoxMTo0MSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBvcHRpbWl6ZSBpbmRlbnRhdGlvbiBiYXNlZCBvbiB0aGUgbmV3IGNvbnRleHQKClN1biBNYXIgMjggMTQ6MTc6MTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy94cGF0aDIuYyBkb2MvZXhhbXBsZXMveHBhdGgyLnJlczogaGFuZGxlIGFuZCBleHBsYWluCgkgIGEgdmVyeSB0cmlja3kgcHJvYmxlbSB3aGVuIG1vZGlmeWluZyB0aGUgdHJlZSBiYXNlZCBvbiBhbiBYUGF0aAoJICByZXN1bHQgcXVlcnkuCgpTYXQgTWFyIDI3IDA5OjU2OjE0IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBwcm9ibGVtIHdpdGggSVNfQ09NUElMQUJMRSBmbGFnCgkgIChidWcgMTMwMjE2KQoKRnJpIE1hciAyNiAxODoyODozMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIERhdmUgQmVja2V0dCB0byBjb3JyZWN0IGxpbmUgbnVtYmVyCgkgIGVycm9ycyB3aGVuIHVzaW5nIHB1c2ggd2l0aCBDREFUQQoKRnJpIE1hciAyNiAxNDo1Mzo1OCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMveHBhdGgxLmM6IGFkZGVkIGEgdGVzdCB0ZW1wbGF0ZQoJKiBkb2MvZXhhbXBsZXMveHBhdGgyLmMgZG9jL2V4YW1wbGVzL3hwYXRoMi5yZXMgZG9jL2V4YW1wbGVzLyo6CgkgIGFkZGVkIGEgbmV3IGV4YW1wbGUsIGFuZCBtYWtlIHZhbGdyaW5kIHRhcmdldCAKCkZyaSBNYXIgMjYgMTE6NDc6MjkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGx5IGZpeCBmb3IgIzEzNjY5MwoKVGh1IE1hciAyNSAyMDoyMTowMSBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2V4YW1wbGVzL2lvMi5jCgkqIGRvYy9leGFtcGxlcy9pbzIucmVzCglhZGQgeG1sRG9jRHVtcE1lbW9yeSBleGFtcGxlIGluIHJlc3BvbnNlIHRvIG1haWxpbmcgbGlzdCBGQVEKCShyZWJ1aWx0IHhtbCBhbmQgaHRtbCBhbHNvKQoKVGh1IE1hciAyNSAxMDozMzowNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIHRlc3RYUGF0aC5jIHhtbGxpbnQuYyB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbGllZAoJICBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgYXZvaWRpbmcgdXNpbmcgeG1sUGFyc2UqIG9wdGlvbiBhbmQgdXNlCgkgIHhtbFJlYWQqIGluc3RlYWQKCSogd2luMzIvTWFrZWZpbGUuYmNiOiBwYXRjaCB0byBCb3JsYW5kIEMrKyBidWlsZGVyIGZyb20gRXJpYyBadXJjaGVyCgkgIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc29tZSBwYXRobmFtZXMuCgpUdWUgTWFyIDIzIDEyOjM1OjA4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKiBOZXdzOiBwcmVwYXJpbmcgMi42LjggcmVsZWFzZSwgdXBkYXRlZCBhbmQgcmVidWlsdAoJICB0aGUgZG9jcy4KCSogTWFrZWZpbGUuYW06IHVzZSB2YWxncmluZyBmcm8gdGhlIG5ldyBQeXRob24gYmFzZWQgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIE1hciAyMiAyMDowNzoyNyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHJlbW92ZSBhIG1lbW9yeSBsZWFrIG9uIHNjaGVtYXMgdHlwZSBmYWNldHMuCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUyLnB5CgkgIGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weTogcmVkdWNlIHZlcmJvc2l0eQoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IGluY29ycG9yYXRlZCB0aGUgUHl0aG9uIHJlZ3Jlc3Npb25zCgkgIHRlc3RzIGZvciBSZWxheC1ORyBhbmQgU2NoZW1hcyBEYXRhdHlwZSB0byAibWFrZSB0ZXN0cyIKCk1vbiBNYXIgMjIgMTY6MTY6MTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmMgaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmggZG9jLyogOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgQWxmcmVkIE1pY2thdXRzY2ggZm9yIGJldHRlciBEVEQgc3VwcG9ydC4KCSogU0FYMi5jIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyB4aW5jbHVkZS5jIHhtbGxpbnQuYyB4bWxyZWFkZXIuYwoJICB4bWxzY2hlbWFzLmM6IGZpeGVkIGJ1ZyAjMTM3ODY3IGkuZS4gZml4ZWQgcHJvcGVybHkgdGhlIHdheQoJICByZWZlcmVuY2UgY291bnRpbmcgaXMgaGFuZGxlZCBpbiB0aGUgWE1MIHBhcnNlciB3aGljaCBoYWQgdGhlCgkgIHNpZGUgZWZmZWN0IG9mIHJlbW92aW5nIGEgbG90IG9mIGhhemFyZG91cyBjcnVmdCBhZGRlZCB0byB0cnkKCSAgdG8gZml4IHRoZSBwcm9ibGVtcyBhc3NvY2lhdGVkIGFzIHRoZXkgcG9wcGVkIHVwLgoJKiB4bWxJTy5jOiBGSUxFICogY2xvc2UgZml4dXAgZm9yIHN0ZGVyci9zdGRvdXQKClN1biBNYXIgMjEgMTk6MTk6NDEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiByZWxheG5nLmM6IGFkZGVkIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBlbGVtZW50IGlzIG5vdAoJICBmb3VuZCB3aXRoaW4gYSA8Y2hvaWNlPiAoYnVnIDEyNjA5MykKClNhdCBNYXIgMjAgMjI6MjU6MTggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWdleHAuYzogZW5oYW5jZWQgdGhlIGxvZ2ljIG9mIHBhcnNpbmcgY2hhciBncm91cHMgdG8KCSAgYmV0dGVyIGhhbmRsZSBpbml0aWFsIG9yIGVuZGluZyAnLScgKGJ1ZyAxMzU5NzIpCgpTYXQgTWFyIDIwIDE5OjI2OjAzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVsYXhuZy5jOiBhZGRlZCBjaGVjayBmb3IgZXh0ZXJuYWwgcmVmZXJlbmNlIGluIAoJICB4bWxSZWxheE5HR2V0RWxlbWVudHMgKGJ1ZyAxMzc3MTgpCgkqIHRlc3QvcmVsYXhuZy9ybmdidWctMDAxLiosIHJlc3VsdC9yZWxheG5nL3JuZ2J1Zy0wMDEqOiBhZGRlZAoJICByZWdyZXNzaW9uIHRlc3QgZm9yIGFib3ZlCgpXZWQgTWFyIDE3IDE2OjM3OjIyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogbmFub2h0dHAuYzogYWRkZWQgYSBjbG9zZSBmb3IgdGhlIGxvY2FsIGZpbGUgZGVzY3JpcHRvcgoJICAoYnVnIDEzNzQ3NCkKCk1vbiBNYXIgMTUgMTU6NDY6NTkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBzd2l0Y2hlZCB0aGUgb3V0cHV0IHJvdXRpbmVzIHRvIHVzZSB0aGUgbmV3IGNvbnRleHQuCgpNb24gTWFyIDE1IDEwOjM3OjE4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVsYXhuZy5jOiBlbmhhbmNlZCB0byBpZ25vcmUgWE1MX1hJTkNMVURFX1NUQVJUIGFuZCBYTUxfWElOQ0xVREVfRU5ECgkgIG5vZGVzIChidWcgMTM3MTUzKQoKU3VuIE1hciAxNCAxMzoxOToyMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gQmVsbW9udGUgZm9yIGFueVVSSS4KCldlZCBNYXIgMTAgMTc6MjI6NDggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeCBidWcgcmVwb3J0ZWQgYnkgSG9sZ2VyIFJhdWNoCgkqIHRlc3QvYXR0OCByZXN1bHQvbm9lbnQvYXR0OCByZXN1bHQvYXR0OCByZXN1bHQvYXR0OC5yZHIKCSAgcmVzdWx0L2F0dDguc2F4OiBhZGRlZCB0aGUgdGVzdCB0byB0aCByZWdyZXNzaW9uIHN1aXRlCgpXZWQgTWFyIDEwIDE5OjQyOjIyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL3NlYXJjaC5waHA6IE1pbm9yIGNoYW5nZSBmb3IgbGF0ZXIgdmVyc29uIG9mIHBocCByZXF1aXJpbmcKCSAgJEhUVFBfR0VUX1ZBUlMuCgpXZWQgTWFyIDEwIDAwOjEyOjMxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdHJlZS5jOiBDaGFuZ2VkIHRoZSBmbGFnIHRvIHhtbERvY0NvcHlOb2RlIChhbmQgc2ltaWxhciByb3V0aW5lcyksCgkgIHByZXZpb3VzbHkgdXNlZCBvbmx5IGZvciByZWN1cnNpb24sIHRvIHVzZSBhIHZhbHVlIG9mICcyJyB0bwoJICBpbmRpY2F0ZSBjb3B5IHByb3BlcnRpZXMgJiBuYW1lc3BhY2VzLCBidXQgbm90IGNoaWxkcmVuLgoJKiB4aW5jbHVkZS5jOiBjaGFuZ2VkIHRoZSBoYW5kbGluZyBvZiByYW5nZXMgdG8gdXNlIHRoZSBhYm92ZSBuZXcKCSAgZmFjaWxpdHkuICBGaXhlcyBCdWcgMTM0MjY4LgoKVHVlIE1hciAgOSAxODo0ODo1MSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYiwgd2luMzIvTWFrZWZpbGUubWluZ3csIHdpbjMyL01ha2VmaWxlLm1zdmM6CgkgIGFkZGVkIG5ldyBtb2R1bGUgeG1sc2F2ZSB3aXRoIHBhdGNoIHN1cHBsaWVkIGJ5IEVyaWMgWnVyY2hlcgoJICAoc2Vjb25kIGF0dGVtcHQgLSBkb24ndCBrbm93IHdoYXQgaGFwcGVuZWQgdG8gdGhlIGZpcnN0IG9uZSEpCgpUdWUgTWFyICA5IDA5OjU5OjI1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBhcHBsaWVkIHBhdGNoIGZyb20gQW50aG9ueSBDYXJyaWNvCgkgIHByb3ZpZGluZyBQeXRob24gYmluZGluZ3MgZm9yIHRoZSBDYW5vbmljYWxpemF0aW9uIEMxNE4gc3VwcG9ydC4KCk1vbiBNYXIgIDggMTE6MTI6MjMgQ0VUIDIwMDQgSGFnZW4gTW9lYml1cyA8aGFnZW4ubW9lYml1c0BzdGFyc2NoaWZmY2hlbi5kZT4KCgkqIC5jdnNpZ25vcmUgYW5kIHB5dGhvbi8uY3ZzaWdub3JlIHBhdGNoZWQKCk1vbiBNYXIgIDggMjI6MzM6MTQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBlbmhhbmNlZCB0byBhc3N1cmUgdGhhdCBpZiB4cG9pbnRlciBpcyBjYWxsZWQKCSAgZm9yIGEgZG9jdW1lbnQsIHRoZSBYTUxfUEFSU0VfTk9FTlQgZmxhZyBpcyBzZXQgYmVmb3JlIHBhcnNpbmcKCSAgdGhlIGluY2x1ZGVkIGRvY3VtZW50IHNvIHRoYXQgZW50aXRpZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGdldAoJICB0YWtlbiBjYXJlIG9mLgoJKiB4cG9pbnRlci5jOiBjb3JyZWN0ZWQgY29kZSBzbyB0aGF0LCBpZiBhbiBYTUxfRU5USVRZX1JFRiBub2RlCgkgIGlzIGVuY291bnRlcmVkLCBpdCB3aWxsIGxvZyBpdCBhbmQgbm90IGNyYXNoIChidWcgMTM1NzEzKQoKU3VuIE1hciAgNyAxOTowMzo0OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IG1vZGlmaWVkIHRvIG1ha2Ugc3ViLWluY2x1ZGVzIGluaGVyaXQgdGhlCgkgIHBhcnNlIGZsYWdzIGZyb20gdGhlIHBhcmVudCBkb2N1bWVudCAoYnVnIDEzMjU5NykKCkZyaSBNYXIgIDUgMDE6MTM6MjIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBRTmFtZSBoYW5kbGluZyBmaXhlcyBmb3IgdGhlIFhNTCBTY2hlbWFzCgkgIHN1cHBvcnQgZnJvbSBBZGFtIERpY2ttZWlzcwoJKiB0ZXN0L3NjaGVtYXMvcG8xXzAueHNkOiBhbHNvIGZpeCB0aGUgc2NoZW1hcwoJKiB0ZXN0L3NjaGVtYXMvbnNbMTJdKiByZXN1bHQvc2NoZW1hcy9uc1sxMl0qOiBhZGRlZCB0aGUgc3BlY2lmaWMKCSAgcmVncmVzc2lvbiB0ZXN0cwoKVGh1IE1hciAgNCAyMzowMzowMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOgoJICBwYWFsaWVkIHBhdGNoIGZyb20gSnVsaW8gTS4gTWVyaW5vIFZpZGFsIGZpeGluZyBidWcgIzEzNDc1MQoJICB0byBmaXggLS13aXRoLWh0bWwtZGlyIG9wdGlvbi4KCSogZG9jLyo6IHJlYnVpbHQgZnVsbHkgdGhlIGRvY3MgCgkqIGRvYy9odG1sL2xpYnhtbC14bWxzYXZlLmh0bWw6IG5ldyBmaWxlIGZyb20gbmV3IGhlYWRlci4KClRodSBNYXIgIDQgMTY6NTc6NTAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0ZXN0SFRNTC5jIHRyZWUuYyBkb2MvZXhhbXBsZXMvKi5jCgkgIGluY2x1ZGUvbGlieG1sL3htbHNhdmUuaDogZml4aW5nIGNvbXBpbGF0aW9uIGJ1ZyB3aXRoIHNvbWUgb3B0aW9ucwoJICBkaXNhYmxlZCBhcyB3ZWxsIGFzIC0td2l0aC1taW5pbXVtIHNob3VsZCBmaXggIzEzNDY5NQoKVGh1IE1hciAgNCAxNTowMDo0NSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmM6IGFsbG93IGZhbGxiYWNrIHRvIFVSSSBsb29rdXAgd2hlbiBTWVNURU0gZmFpbHMsCgkgIHNob3VsZCBjbG9zZSAjMTM0MDkyCgpUaHUgTWFyICA0IDE0OjM5OjM4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHRyZWUuYyB4bWxzYXZlLmMgaW5jbHVkZS9saWJ4bWwveG1sc2F2ZS5oOiBjb21taXRpbmcKCSAgdGhlIG5ldyB4bWxzYXZlIG1vZHVsZSBiZWZvcmUgdGhlIGFjdHVhbGwgYmlnIGNvZGUgY2hhbmdlLgoKVGh1IE1hciAgNCAxMjozODo1MyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBZGFtIERpY2ttZWlzcyBmb3IgbWl4ZWQgY29udGVudAoJKiB0ZXN0L3NjaGVtYXMvbWl4ZWQqIHJlc3VsdC9zY2hlbWFzL21peGVkKjogYWRkZWQgaGlzIHJlZ3Jlc3Npb24KCSAgdGVzdHMgdG9vLgoKTW9uIE1hciAgMSAxNToyMjowNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0U0FYLmM6IGZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gYWJvdXQgYSBtaXNzaW5nIHRpbWIgaW5jbHVkZQoKU2F0IEZlYiAyOCAyMjozNTozMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRlc3RTQVguYzogc21hbGwgZW5oYW5jZW1lbnQgdG8gcHJldmVudCB0cnlpbmcgdG8gcHJpbnQKCSAgc3RyaW5ncyB3aXRoIG51bGwgcG9pbnRlcnMgKGNhdXNlZCAibWFrZSB0ZXN0cyIgZXJyb3JzIG9uCgkgIEhQLVVYKQoKVGh1IEZlYiAyNiAyMDoxOTo0MCBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sCgkqIGRvYy94bWxsaW50LjEKCSogZG9jL3htbGxpbnQuaHRtbAoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sCgkqIGRvYy94bWxjYXRhbG9nLjEKCSogZG9jL3htbGNhdGFsb2dfbWFuLmh0bWwKCWFwcGx5aW5nIHBhdGNoIGZyb20gTWlrZSBIb21tZXkgdG8gY2xhcmlmeSBYTUxfQ0FUQUxPR19GSUxFUwoJdXNlCgpUaHUgRmViIDI2IDIzOjQ3OjQzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBwYXRjaCBmb3IgY3Jvc3MtY29tcGlsYXRpb24gdG8gV2luZG93cyBmcm9tCgkgIENocmlzdG9waGUgZGUgVklFTk5FLgoKVGh1IEZlYiAyNiAxODo1MjoxMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy8qLmh0bWwsIGRvYy9odG1sLyouaHRtbDogcmVnZW5lcmF0ZWQgZG9jcyB1c2luZyBvbGRlcgoJICB2ZXJzaW9uIG9mIHhzbHRwcm9jIHBlbmRpbmcgcmVzb2x1dGlvbiBvZiBBVlQgcHJvYmxlbQoKVGh1IEZlYiAyNiAxMDo1NjoyOSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYXBwbGllZCBwYXRjaCBmcm9tIENoYXJsZXMgQm96ZW1hbiB0byBub3QgdXNlCgkgIHRoZSBzeXN0ZW0geG1sbGludC4KCldlZCBGZWIgMjUgMTg6MDc6MDUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9sYW5kIFNjaHdpbmdlbAoJICBmb3IgTWluZ1cKCldlZCBGZWIgMjUgMTM6NTc6MjUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY2F0YWxvZy5jIGNvbmZpZ3VyZS5pbjogYXBwbGllZCBhIGNsZWFudXAgcGF0Y2gKCSAgZnJvbSBQZXRlciBCcmVpdGVubG9obmVyCgkqIHRyZWUuYzogcmVtb3ZlZCBhIGRvYyBidWlsZCB3YXJuaW5nIGJ5IGZpeGluZyBhIHBhcmFtIGNvbW1lbnQKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgpXZWQgRmViIDI1IDEzOjMzOjA3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgSFRNTHBhcnNlci5jOiBhdm9pZCBJRCBlcnJvciBtZXNzYWdlIGlmIHVzaW5nCgkgIEhUTUxfUEFSU0VfTk9FUlJPUiBzaG91bGQgZml4ICMxMzA3NjIKCldlZCBGZWIgMjUgMTI6NTA6NTMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyByZWxheG5nLmMgdmFsaWQuYyB4aW5jbHVkZS5jIHhtbGxpbnQuYyB4bWxyZWFkZXIuYzoKCSAgZml4aW5nIGNvbXBpbGF0aW9uIGFuZCBsaW5rIG9wdGlvbiB3aGVuIGNvbmZpZ3VyaW5nIHdpdGgKCSAgLS13aXRob3V0LXZhbGlkIHNob3VsZCBmaXggIzEzNTMwOQoKV2VkIEZlYiAyNSAxMTozNjowNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIHRoZSBtYWluIGlzc3VlcyByZXBvcnRlZCBieSBQZXRlciBCcmVpdGVubG9obmVyCgkqIHBhcnNlci5jOiBjbGVhbnVwCgkqIHZhbGlkLmM6IHNwZWVkdXAgcGF0Y2ggZnJvbSBQZXRyIFBhamFzCgpXZWQgRmViIDI1IDE2OjA3OjE0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgYSBtZW1vcnkgbGVhayAoeG1sWFBhdGhMYW5nRnVuY3Rpb24pIHJlcG9ydGVkCgkgIG9uIHRoZSBsaXN0IGJ5IE1pa2UgSG9tbWV5CgpNb24gRmViIDIzIDE3OjI4OjM0IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qIE5FV1MgY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi42LjcgcmVsZWFzZSwgdXBkYXRlZCBhbmQKCSAgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbi4KCk1vbiBGZWIgMjMgMTE6NTI6MTIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3Rlc3RzLyoucHk6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sKCSAgdG8gYXZvaWQgdGFicyBpbiBweXRob24gc291cmNlcywgc2hvdWxkIGZpeCAjMTM1MDk1CgpTdW4gRmViIDIyIDIzOjE2OjIzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RTQVguYzogYWRkIC0tdGltaW5nIG9wdGlvbgoJKiByZWxheG5nLmM6IHVzZSB0aGUgcHN2aSBmaWVsZCBvZiB0aGUgbm9kZXMgaW5zdGVhZCBvZiBfcHJpdmF0ZQoJICB3aGljaCBtYXkgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCgpTYXQgRmViIDIxIDE2OjU3OjQ4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IHNtYWxsIHBhdGNoIHRvIHRyeSB0byBmaXggYSB3YXJuaW5nIHdpdGggU3VuIE9uZSBjb21waWxlcgoKU2F0IEZlYiAyMSAxNjoyMjozNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBzbWFsbCBwYXRjaCByZW1vdmluZyBhIHdhcm5pbmcgd2l0aCBNUyBjb21waWxlci4KClNhdCBGZWIgMjEgMTM6NTI6MzAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYWRkZWQgInJlbGF4bmciIG9wdGlvbiB0byB0aGUgZGVidWdnaW5nIHNoZWxsCgkqIE1ha2VmaWxlLmFtIHRlc3QvZXJyb3JzLyogcmVzdWx0L2Vycm9ycy8qOiBzb21lIHJlZ3Jlc3Npb24gdGVzdHMKCSAgZm9yIHNvbWUgZXJyb3IgdGVzdHMgY2FzZXMuCgpGcmkgRmViIDIwIDA5OjU2OjQ3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogeG1sQXR0clNlcmlhbGl6ZVR4dENvbnRlbnQgZG9uJ3Qgc2VnZmF1bHQgaWYgTlVMTAoJICBpcyBwYXNzZWQuCgkqIHRlc3QvYXR0NyByZXN1bHQvL2F0dDcqOiBhZGRpbmcgYW4gb2xkIHJlZ3Jlc3Npb24gdGVzdAoJICBsYXlpbmcgYXJvdW5kIG9uIG15IGxhcHRvcAoKVGh1IEZlYiAxOSAxNzozMzozNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgeG1sbGludCAtLW1lbW9yeSAtLXN0cmVhbSBtZW1vcnkgY29uc3VtcHRpb24KCSAgb24gbGFyZ2UgZmlsZSBieSB1c2luZyB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYygpIHdpdGgKCSAgdGhlIG1tYXAnZWQgZmlsZSAKClRodSBGZWIgMTkgMTM6NTY6NTMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBzb21lIGNsYXJpZmljYXRpb24gaW4geG1sRG9jRHVtcE1lbW9yeSgpIGRvY3VtZW50YXRpb24KCSogeG1sbGludC5jOiBmaXhlZCB4bWxsaW50IC0tc3RyZWFtIC0tdGltaW5nIHRvIGdldCB0aW1pbmdzIGJhY2sKCldlZCBGZWIgMTggMTU6MjA6NDIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcHJvYmxlbSBpbiBwdXNoIG1vZGUgd2hlbiBhdHRyaWJ1dGUgY29udGFpbnMKCSAgdW5lc2NhcGVkICc+JyBjaGFyYWN0ZXJzLCBmaXhlcyBidWcgIzEzNDU2NgoJKiB0ZXN0L2F0dDYgcmVzdWx0Ly9hdHQ2KjogYWRkZWQgdGhlIHRlc3QgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUKClR1ZSBGZWIgMTcgMTc6MjY6MzEgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogcmVtb3ZpbmcgYSBub24tbGluZWFyIGJlaGF2aW91ciBmcm9tIElEL0lEUkVGIHJhaXNlZAoJICBieSBQZXRyIFBhamFzLiBDYWxsIHhtbExpc3RBcHBlbmQgaW5zdGVhZCBvZiB4bWxMaXN0SW5zZXJ0IGluCgkgIHhtbEFkZFJlZgoKVHVlIEZlYiAxNyAxMzoyNzoyNyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdGVzdHMvaW5kZXhlcy5weSBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBpbmRpY2F0ZWQKCSAgZW5jb2Rpbmcgb2YgdGhlIHRlc3QgZmlsZSwgbmVlZGVkIGZvciBweXRob24gMi4zCgpUdWUgRmViIDE3IDIxOjA4OjExIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgcHJvYmxlbSB3aXRoIG51bWJlcnMgaGF2aW5nID4gMTkKCSAgZnJhY3Rpb25hbCBwbGFjZXMgKGJ1ZyAxMzM5MjEpCgpUdWUgRmViIDE3IDEyOjQ3OjIwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgb3B0aW1pemF0aW9uIHBhdGNoIGZyb20gUGV0ciBQYWphcwoKVHVlIEZlYiAxNyAxMjozOTowOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYyBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaDogYXBwbGllZCB1cGRhdGUKCSAgZnJvbSBBbGZyZWQgTWlja2F1dHNjaCBhbmQgdGhlIGFkZGVkIHBhdGNoIGZyb20gTHVjYXMgQnJhc2lsaW5vCgpTdW4gRmViIDE1IDEyOjAxOjMwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGJlbmNobWFyay5wbmcgaW5kZXguaHRtbCB4bWwuaHRtbDogdXBkYXRpbmcgdGhlIGJlbmNobWFyawoJICBncmFwaCBhbmQgdXNpbmcgYSBQTkcgaW5zdGVhZCBvZiBhIEdJRgoJKiB4bWxyZWFkZXIuYzogdXBkYXRlZCB0aGUgVE9ETwoKU2F0IEZlYiAxNCAxODo1NTo0MCBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwucGRmCgkqIGRvYy90dXRvcmlhbC8qLmh0bWwKCUZpeCBidWcgaW4gWFBhdGggZXhhbXBsZSBpbiB0aGUgdHV0b3JpYWwsIHRoYW5rcyB0byBDYXJsb3MsIHdob3NlCglsYXN0IG5hbWUgSSBkb24ndCBrbm93LCBmb3IgcG9pbnRpbmcgdGhpcyBvdXQKClRodSBGZWIgMTIgMTY6Mjg6MTIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNi42CgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzIGFuZCByZWJ1aWx0IHRoZW0KClRodSBGZWIgMTIgMTM6NDE6MTYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGZpeGluZyBidWcgIzEzMjkzMCB3aXRoIHRoZSBwcm92aWRlZCBwYXRjaCwgYSBiaXQKCSAgc3VzcGljaW91cyBhYm91dCBpdCBidXQgdGhpcyBpcyBmYWlybHkgY29udGFpbmVkIGFuZCByZWdyZXNzaW9uCgkgIHRlc3RzIHN0aWxsIHBhc3Nlcy4KCSogdGVzdC9zY2hlbWFzL2FsbDEqIHJlc3VsdC9zY2hlbWFzL2FsbDEqOiBhZGRlZCB0aGUgdGVzdCB0bwoJICB0aGUgcmVncmVzc2lvbiBzdWl0ZS4KClRodSBGZWIgMTIgMTI6NTQ6MjYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjMTMyNTc1IGFib3V0IGZpbmRpbmcgdGhlIGVuZCBvZiB0aGUKCSAgaW50ZXJuYWwgc3Vic2V0IGluIHB1c2ggbW9kZS4KCSogdGVzdC9pbnRzdWJzZXQueG1sIHJlc3VsdC9pbnRzdWJzZXQueG1sKiByZXN1bHQvbm9lbnQvaW50c3Vic2V0LnhtbDoKCSAgYWRkZWQgdGhlIHRlc3QgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUKCldlZCBGZWIgMTEgMTQ6MTk6MzEgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgeG1sSU8uYyBlbmNvZGluZy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGFkZGVkIHhtbEJ5dGVDb25zdW1lZCgpIGludGVyZmFjZQoJKiBkb2MvKjogdXBkYXRlZCB0aGUgYmVuY2htYXJrIHJlYnVpbHQgdGhlIGRvY3MKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9pbmRleGVzLnB5OiBhZGRlZCBhCgkgIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdCBmb3IgeG1sQnl0ZUNvbnN1bWVkKCkKCSogaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCBybmdwYXJzZXIuYyB0cmVlLmM6IHNtYWxsIGNsZWFudXBzCgpXZWQgRmViIDExIDA4OjEzOjU4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrCgoJKiB0cmVlLmM6IGZpeGVkIG1pc3Npbmcgb3V0cHV0IG9mIGludGVybmFsIERURCBwYXJhbSBlbnRpdGllcyB3aGVuCgkgIG5vdGhpbmcgZWxzZSBwcmVzZW50IGluIERURCAoYnVnIDEzNDA1MikKClR1ZSBGZWIgMTAgMTk6MjQ6MzggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jOiBhcHBsaWVkIHBhdGNoIHN1cHBsaWVkIGJ5IENocmlzdG9waGUgRHViYWNoCgkgIHRvIGZpeCBwcm9ibGVtIHdpdGggLS13aXRoLW1pbmltdW0gY29uZmlndXJhdGlvbgoJICAoYnVnIDEzMzc3MykKCSogbmFub2Z0cC5jOiBmaXhlZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IHByb2JsZW0sCgkgIHNpbWlsYXIgdG8gZml4IGp1c3QgYXBwbGllZCB0byBuYW5vaHR0cC5jLgoKTW9uIEZlYiAgOSAxODo0MDoyMSBDRVQgMjAwNCBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogbmFub2h0dHAuYzogZml4ZWQgdGhlIGZpeCBmb3IgdGhlIGJ1ZmZlciBvdmVyZmxvdywgdGhhbngKCSAgV2lsbGlhbSA6LSkKCk1vbiBGZWIgIDkgMjI6Mzc6MTQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBhY2luY2x1ZGUubTQsIGNvbmZpZ3VyZS5pbjogZml4ZWQgcHJvYmxlbSBjb25jZXJuaW5nCgkgIGRldGVybWluaW5nIFNPQ0tMRU5fVCBhcyBwb2ludGVkIG91dCBieSBEYW5pZWwgUmljaGFyZCBHLgoJICBvbiB0aGUgbWFpbGluZyBsaXN0CgpNb24gRmViICA5IDE1OjMxOjI0IENFVCAyMDA0IElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBuYW5vaHR0cC5jOiBmaXhlZCBidWZmZXIgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgWXV1aWNoaSBUZXJhbmlzaGkKCk1vbiBGZWIgIDkgMTM6NDU6NTkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogc21hbGwgcGF0Y2ggZnJvbSBQaGlsaXAgTHVkbGFtIHRvIGF2b2lkIHdhcm5pbmdzLgoKTW9uIEZlYiAgOSAxMzo0MTo0NyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBhcHBsaWVkIGEgc21hbGwgcGF0Y2ggZnJvbSBBbGZyZWQgTWlja2F1dHNjaAoJICB0byBhdm9pZCBhbiBvdXQgb2YgYm91bmQgZXJyb3IgaW4gaXNvbGF0MVRvVVRGOCgpCgpNb24gRmViICA5IDEzOjM1OjUwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHJlbW92ZSB0aGUgd2FybmluZyBvbiB0aGUgMjAwMSBuYW1lc3BhY2UKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguYzogcmVtb3ZlIHNvbWUgd2FybmluZ3MKCSAgd2hlbiBjb21waWxpbmcgd2l0aCBNU1ZDNgoJKiBuYW5vaHR0cC5jOiBhcHBsaWVkIGEgcGF0Y2ggd2hlbiB1c2luZyBfV0lOU09DS0FQSV8KClN1biBGZWIgIDggMTI6MDk6NTUgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBhZGRlZCBhIHNtYWxsIGhhY2sgdG8gZml4IGludGVyZmVyZW5jZSBiZXR3ZWVuCgkgIG15IGZpeGVzIGZvciBidWdzIDEzMjU4NSBhbmQgMTMyNTg4LgoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBzZXJpYWxpemF0aW9uIG9mIG5hbWVzcGFjZQoJICByZXBvcnRlZCBvbiB0aGUgbWFpbGluZyBsaXN0IGJ5IEFudGhvbnkgQ2FycmljbwoKU2F0IEZlYiAgNyAxNjo1MzoxMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBmdW5jdGlvbiB4bWxYSW5jbHVkZUNvcHlSYW5nZQoJICAoYnVnIDEzMzY4NikuCgpGcmkgRmViICA2IDIxOjAzOjQxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sd3JpdGVyLmM6IGZpeGVkIHByb2JsZW0gd2l0aCByZXR1cm4gdmFsdWUgb2YKCSAgeG1sVGV4dFdyaXRlcldyaXRlSW5kZW50KCkgKGJ1ZyAxMzMyOTcpCgpGcmkgRmViICA2IDE5OjA3OjA0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogY2hhbmdlZCBjb2RpbmcgdG8gb3V0cHV0IGdvb2QgWEluY2x1ZGVzIHdoZW4KCSAgb25lIG9yIG1vcmUgYmFkIG9uZXMgYXJlIHByZXNlbnQgKGJ1ZyAxMzI1ODgpCgpGcmkgRmViICA2IDE3OjM0OjIxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogY29ycmVjdGVkIGhhbmRsaW5nIG9mIGVtcHR5IGZhbGxiYWNrIGNvbmRpdGlvbgoJICAoYnVnIDEzMjU4NSkKCkZyaSBGZWIgIDYgMTU6Mjg6MzYgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyLmM6IGFkZGVkIGluaXRpYWxpc2F0aW9uIGZvciBjdHh0LT52Y3R4dAoJICBpbiBIVE1MSW5pdFBhcnNlciAoYnVnIDEzMzEyNykKCSogdmFsaWQuYzogbWlub3IgY29zbWV0aWMgY2hhbmdlIChyZW1vdmVkIEFUVFJJQlVURV9VTlVTRUQKCSAgZnJvbSBzZXZlcmFsIGZ1bmN0aW9uIHBhcmFtcykKClR1ZSBGZWIgIDMgMTY6NDg6NTcgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBwcm9ibGVtIHJlZ2FyZGluZyBmcmVlaW5nIG9mIGRpY3Rpb25hcnkKCSAgd2hlbiB0aGVyZSBhcmUgZXJyb3JzIHdpdGhpbiBhbiBYSW5jbHVkZSBmaWxlIChidWcgMTMzMTA2KS4KCSAgVGhhbmtzIHRvIE9sZWcgUGFyYXNjaGVua28gZm9yIHRoZSBhc3Npc3RhbmNlLgoKVHVlIEZlYiAgMyAwOTo1MzoxOCBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCB2YWxpZGF0aW9uIG9mIG1heExlbmd0aCB3aXRoIG5vCgkgIGNvbnRlbnQgdXNpbmcgcGF0Y2ggc3VibWl0dGVkIGJ5IEVyaWMgSGFzemxha2lld2ljegoJICAoYnVnIDEzMzI1OSkKClR1ZSBGZWIgIDMgMDk6MjE6MDkgQ0VUIDIwMDQgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBhZGRlZAoJICBjYWxsaW5nIGNvbnZlbnRpb24gdG8gdGhlIHB1YmxpYyBmdW5jdGlvbiBwcm90b3R5cGVzIChyZXAgYnkKCSAgQ2FtZXJvbiBKb2huc29uKQoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGZpeGVkIG1pbmd3K21zeXMgY29tcGlsYXRpb24KCSAgKHJlcCBieSBNaWtoYWlsIEdydXNoaW5za2l5KQoKTW9uIEZlYiAgMiAyMDoyMjoxOCBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHdyaXRlci5jOiBlbmhhbmNlZCBvdXRwdXQgaW5kZW50aW5nIChidWcgMTMzMjY0KQoKTW9uIEZlYiAgMiAxNjoxMzozMyBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlYWRlci5jLCBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYXBwbGllZCBwYXRjaCBmcm9tCgkgIFN0ZXZlIEJhbGwgdG8gcHJvdmlkZSBzdHJ1Y3R1cmVkIGVycm9yIHJlcG9ydHMuCgpTdW4gRmViICAxIDAxOjQ4OjE0IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdHJlZS5jLCBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1vdmVkIHNlcmlhbGl6YXRpb24gb2YKCSAgYXR0cmlidXRlIHRleHQgZGF0YSAoeG1sU2VyaWFsaXplQ29udGVudCkgaW50byBhIHNlcGFyYXRlCgkgIHJvdXRpbmUgKHhtbFNlcmlhbGl6ZVR4dENvbnRlbnQpIHNvIGl0IGNhbiBiZSB1c2VkIGJ5IHhtbHdyaXRlci5jCgkqIHhtbHdyaXRlci5jOiBjaGFuZ2VkIGhhbmRsaW5nIG9mIGF0dHJpYnV0ZSBzdHJpbmcgdG8gdXNlIHRoZQoJICByb3V0aW5lIGFib3ZlIChmaXhlZCBidWcgMTMxNTQ4KQoKU2F0IEphbiAzMSAwODoyMjowMiBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0CgoJKiBkb2MvZXhhbXBsZXMvcmVhZGVyMS5jLCByZWFkZXIyLmMsIHJlYWRlcjMuYwoJKiBkb2MvZXhhbXBsZXMvZXhhbXBsZXMueG1sCgkqIGRvYy9leGFtcGxlcy8qLmh0bWwKCWFkZCBub3RlIHRoYXQgcmVhZGVyIGV4YW1wbGVzIG5lZWQgbGlibXhsMiA+IDIuNiwgcmVidWlsZAoJaHRtbCAtIHRoaXMgdGltZSBkb2luZyBpdCBjb3JyZWN0bHkgOi0pCgpGcmkgSmFuIDMwIDIwOjQ1OjM2IE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvZXhhbXBsZXMvZXhhbXBsZXMueG1sCgkqIGRvYy9leGFtcGxlcy8qLmh0bWwKCWFkZCBub3RlIHRoYXQgcmVhZGVyIGV4YW1wbGVzIG5lZWQgbGlibXhsMiA+IDIuNiwgcmVidWlsZAoJaHRtbAoKVGh1IEphbiAyOSAyMzo1MTo0OCBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGFkZGVkICh2b2lkICopIHR5cGUgb3ZlcnJpZGUgdG8gcHJldmVudAoJICB3YXJuaW5nIG9uIFNvbGFyaXMgKEJ1ZyAxMzI2NzEpCgpXZWQgSmFuIDI4IDA3OjIwOjM3IE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0KCXBlciBKYW4uIDE1IGVtYWlsIHRvIHRoZSBsaXN0IGZyb20gb2xpdmVyc3QsIHRoZSBpbmRleC5odG1sCglmaWxlIGZyb20gdGhpcyBkaXJlY3Rvcnkgd2Fzbid0IG1ha2luZyBpdCBpbnRvIHRoZSB0YXJiYWxsCgpNb24gSmFuIDI2IDE4OjAxOjAwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGFjaW5jbHVkZS5tNDogYXBwbGllZCBmaXggZnJvbSBBbGV4YW5kZXIgV2luc3RvbiBmb3IgYSBwcm9ibGVtCgkgIHJlbGF0ZWQgdG8gYXV0b21ha2UtMS44ICwgYy5mLiAjMTMyNTEzIGFuZCAjMTI5ODYxCgpNb24gSmFuIDI2IDEyOjUzOjExIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy9pbmRleC5weTogZG9uJ3QgcmVseSBvbiAuIGJlaW5nIG9uIHRoZSBwYXRoIGZvcgoJICBtYWtlIHRlc3RzLCBzaG91bGQga2VlcCBNci4gQ3JvemF0IHF1aWV0IHVudGlsIG5leHQgdGltZS4uLgoKU3VuIEphbiAyNSAyMTo0NTowMyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUyBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2UgMi42LjUsIHJlYnVpbHQgdGhlCgkgIGRvY3MsIGNoZWNrZWQgcm5ncGFyc2VyIHN0dWZmIGRvZXMgbm90IGVuZCB1cCBpbiB0aGUgdGFyYmFsbAoKU3VuIEphbiAyNSAyMDo1OToyMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBGcmVkZXJpYyBQZXRlcnMKCSAgZml4aW5nIHRoZSB3cm9uZyBhcmcgb3JkZXIgaW4geHBhdGggY2FsbGJhY2sgaW4gYnVnICMxMzA5ODAKClN1biBKYW4gMjUgMjA6NTI6MDkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZml4aW5nICMxMzA0NTMgWEluY2x1ZGUgZWxlbWVudCB3aXRoIG5vIGhyZWYgYXR0cmlidXRlCgkqIHJlbGF4bmcuYyBybmdwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbDIvcmVsYXhuZy5oOiBmdWxseSBpbnRlZ3JhdGluZyAKCSAgdGhlIGNvbXBhY3Qgc3ludGF4IHdpbGwgcmVxdWlyZSBtb3JlIHdvcmssIHBvc3Rwb25lZCBmb3IgdGhlCgkgIDIuNi41IHJlbGVhc2UuCgpTYXQgSmFuIDI0IDA5OjMwOjIyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCB4bWxzY2hlbWFzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBTdGV2ZSBCYWxsIHRvIGF2b2lkIGEgZG91YmxlLWZyZWUuCgpGcmkgSmFuIDIzIDE0OjAzOjIxIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCBpbzEuYyBhbiBleGFtcGxlIG94IHhtbElPIHVzYWdlIGFuZCBpbzEucmVzCgkgIHRlc3QgcmVzdWx0LCBmaXhlZCBhIGF3ZnVsIGxvdCBvZiBtZW1vcnkgbGVha3Mgc2hvd2luZyB1cCBpbgoJICB0ZXN0V3JpdGVyLmMsIGNoYW5nZWQgdGhlIGV4YW1wbGVzIGFuZCB0aGUgTWFrZWZpbGVzIHRvIHRlc3QKCSAgbWVtb3J5IGxlYWtzLgoJKiB4bWx3cml0ZXIuYzogZml4ZWQgYSBtZW1vcnkgbGVhawoJKiBNYWtlZmlsZS5hbTogcnVuIHRoZSBkb2MvZXhhbXBsZXMgcmVncmVzc2lvbiB0ZXN0cyBhcyBwYXJ0IG9mCgkgIG1ha2UgdGVzdHMKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBhZGRlZCB4bWxYUGF0aEN0eHRDb21waWxlKCkgdG8KCSAgY29tcGlsZSBhbiBYUGF0aCBleHByZXNzaW9uIHdpdGhpbiBhIGNvbnRleHQsIGN1cnJlbnRseSB0aGUgZ29hbAoJICBpcyB0byBiZSBhYmxlIHRvIHJldXNlIHRoZSBYU0xUIHN0eWxlc2hlZXQgZGljdGlvbm5hcnksIGJ1dCB0aGlzCgkgIG9wZW5zIHRoZSBkb29yIHRvIG90aGVycyBwb3NzaWJsZSBvcHRpbWl6YXRpb25zLgoJKiBkaWN0LmMgaW5jbHVkZS9saWJ4bWwvZGljdC5oOiBhZGRlZCB4bWxEaWN0Q3JlYXRlU3ViKCkgd2hpY2ggYWxsb3dzCgkgIHRvIGJ1aWxkIGEgbmV3IGRpY3Rpb25uYXJ5IGJhc2VkIG9uIGFub3RoZXIgcmVhZC1vbmx5IGRpY3Rpb25uYXJ5LgoJICBUaGlzIGlzIG5lZWRlZCBmb3IgWFNMVCB0byBrZWVwIHRoZSBzdHlsZXNoZWV0IGRpY3Rpb25uYXJ5IHJlYWQtb25seQoJICB3aGlsZSBiZWluZyBhYmxlIHRvIHJldXNlIHRoZSBzdHJpbmdzIGZvciB0aGUgdHJhbnNmb3JtYXRpb24KCSAgZGljdGlvbm5hcnkuCgkqIHhpbmNsdWRlLmM6IGZpeGVkIGEgZGljdGlvbm5hciByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbSBvY2N1cmluZwoJICB3aGVuIGRvY3VtZW50IHBhcnNpbmcgZmFpbGVkLgoJKiB0ZXN0U0FYLmM6IGFkZGluZyBvcHRpb24gLS1yZXBlYXQgZm9yIHRpbWluZyAxMDB0aW1lcyB0aGUgcGFyc2luZwoJKiBkb2MvKiA6IHJlYnVpbHQgYWxsIHRoZSBkb2NzCgpUaHUgSmFuIDIyIDE0OjE3OjA1IDIwMDQgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogeG1sbWVtb3J5LmM6IG1ha2UgeG1sUmVhbGxvY0xvYygpIGFjY2VwdCBOVUxMIHBvaW50ZXIKClRodSBKYW4gMjIgMDg6MjY6MjAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2huIEJlbG1vbnRlIGZvcgoJICBub3JtYWxpemVkU3RyaW5nIGRhdGF0eXBlIHN1cHBvcnQuCgpUaHUgSmFuIDIyIDEwOjQzOjIyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgcHJvYmxlbSB3aXRoIHVuaW9uIHdoZW4gbGFzdCgpIGlzIHVzZWQKCSAgaW4gcHJlZGljYXRlIChidWcgIzEzMTk3MSkKCSogeHBvaW50ZXIuYzogbWlub3IgY2hhbmdlIHRvIGNvbW1lbnQgZm9yIGRvYyBnZW5lcmF0aW9uCgpXZWQgSmFuIDIxIDE3OjAzOjE3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzEzMTc0NSByYWlzZWQgYnkgU2hhdW4gTWNDYW5jZSB3aXRoIHRoZQoJICBzdWdnZXN0ZWQgcGF0Y2gKCldlZCBKYW4gMjEgMTA6NTk6NTUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGZyZWQgTWlja2F1dHNjaCBmaXhpbmcgYSBtZW1vcnkKCSAgbGVhayByZXBvcnRlZCBvbiB0aGUgbGlzdC4KClRodSBKYW4gMTUgMDA6NDg6NDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vdGVzdHMvdHN0TGFzdEVycm9yLnB5OiBhcHBsaWVkCgkgIHBhdGNoIGZyb20gU3RlcGhhbmUgQmlkb3VsIHRvIGFkZCBlbnVtcyB0byB0aGUgUHl0aG9uIGJpbmRpbmdzLgoKVHVlIEphbiAxMyAyMTo1MDowNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0SFRNTC5jOiBhbm90aGVyIHNtYWxsIHBhdGNoIGZyb20gTWFyayBWYWtvYwoKVHVlIEphbiAxMyAyMTozOTo1OCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgcmVsYXhuZy5jIHRlc3RSZWxheC5jIHRlc3RTY2hlbWFzLmM6IGFwcGxpZWQKCSAgcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRvIG5vdCB1c2UgU0FYMSB1bmxlc3MgbmVjZXNzYXJ5LgoKTW9uIEphbiAxMiAxNzoyMjo1NyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgcGFyc2VyLmMgeG1sc3RyaW5nLmM6IHNvbWUgcGFyc2VyIG9wdGltaXphdGlvbnMsCgkgIHhtbGxpbnQgLS1tZW1vcnkgLS10aW1pbmcgLS1yZXBlYXQgLS1zdHJlYW0gLi9kYjEwMDAwLnhtbAoJICB3ZW50IGRvd24gZnJvbSAxNi41IHNlY3MgdG8gMTUuNSBzZWNzLgoKVGh1IEphbiAgOCAxNzo1Nzo1MCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IHJlbW92ZWQgYSBtZW1vcnkgbGVhayByZW1haW5pbmcgZnJvbSB0aGUgc3dpdGNoCgkgIHRvIGEgZGljdGlvbm5hcnkgZm9yIHN0cmluZyBhbGxvY2F0aW9ucyBjLmYuICMxMzA4OTEKClRodSBKYW4gIDggMTc6NDg6NDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGluZyBzb21lIHByb2JsZW0gaWYgY29uZmlndXJlZCAtLXdpdGhvdXQteGluY2x1ZGUKCSAgYy5mLiAjMTMwOTAyCgpUaHUgSmFuICA4IDE3OjQyOjQ4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogY2hhbmdlZCBBQ19PVVRQVVQoKSBtYWNybyB0byBhdm9pZCBhIGN5Z3dpbiBwcm9ibGVtCgkgIGMuZi4gIzEzMDg5NgoKVGh1IEphbiAgOCAwMDozNjowMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2Igd2luMzIvTWFrZWZpbGUubWluZ3cgd2luMzIvTWFrZWZpbGUubXN2YzoKCSAgYXBwbHlpbmcgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGZvciBXaW5kb3dzCgkqIGRvYy9jYXRhbG9nLmh0bWwgZG9jL2VuY29kaW5nLmh0bWwgZG9jL3htbC5odG1sOiBhcHBsaWVkIGRvYwoJICBmaXhlcyBmcm9tIFN2ZW4gWmltbWVybWFuCgpUdWUgSmFuICA2IDIzOjUxOjQ2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sIHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jCgkgIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvdHN0TGFzdEVycm9yLnB5OiBhcHBsaWVkIAoJICBwYXRjaCBmcm9tIFN0ZXBoYW5lIEJpZG91bCBmb3Igc3RydWN0dXJlZCBlcnJvciBoYW5kbGluZyBmcm9tCgkgIHB5dGhvbiwgYW5kIHRoZSBhc3NvY2lhdGVkIHRlc3QKClR1ZSBKYW4gIDYgMjM6MTg6MTEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIEJ1ZzEzMDU5MwoJKiB4bWx3cml0ZXIuYzogZml4ZWQgY29tcGlsYXRpb24gd2FybmluZwoKVHVlIEphbiAgNiAxNToxNToyMyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxzdHJpbmcuaDogZml4ZWQgdGhlIGNvbW1lbnQgaW4gdGhlIGhlYWRlcgoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcwoKVHVlIEphbiAgNiAxOTo0MDowNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVuY29kaW5nLmMsIHBhcnNlci5jLCB4bWxzdHJpbmcuYywgTWFrZWZpbGUuYW0sCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtLCBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmMsCgkgIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaCwgaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCwKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgsIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaCwKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oLCBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaCwKCSAgaW5jbHVkZS9saWJ4bWwveG1sc3RyaW5nLmg6CgkgIG1vdmVkIHN0cmluZyBhbmQgVVRGOCByb3V0aW5lcyBvdXQgb2YgcGFyc2VyLmMgYW5kIGVuY29kaW5nLmMKCSAgaW50byBhIG5ldyBtb2R1bGUgeG1sc3RyaW5nLmMgd2l0aCBpbmNsdWRlIGZpbGUKCSAgaW5jbHVkZS9saWJ4bWwveG1sc3RyaW5nLmggbW9zdGx5IHVzaW5nIHBhdGNoZXMgZnJvbSBSZWlkCgkgIFNwZW5jZXIuICBTaW5jZSB4bWxDaGFyIG5vdyBkZWZpbmVkIGluIHhtbHN0cmluZy5oLCBzZXZlcmFsCgkgIGluY2x1ZGUgZmlsZXMgbmVlZGVkIHRvIGhhdmUgYSAjaW5jbHVkZSBhZGRlZCBmb3Igc2FmZXR5LgoJKiBkb2MvYXBpYnVpbGQucHk6IGFkZGVkIHNvbWUgYWRkaXRpb25hbCBzb3J0aW5nIGZvciB2YXJpb3VzCgkgIHJlZmVyZW5jZXMgZGlzcGxheWVkIGluIHRoZSBBUEl4eHguaHRtbCBmaWxlcy4gIFJlYnVpbHQgdGhlCgkgIGRvY3MsIGFuZCBhbHNvIGFkZGVkIG5ldyBmaWxlIGZvciB4bWxzdHJpbmcgbW9kdWxlLgoJKiBjb25maWd1cmUuaW46IHNtYWxsIGFkZGl0aW9uIHRvIGhlbHAgbXkgdGVzdGluZzsgbm8gZWZmZWN0IG9uCgkgIG5vcm1hbCB1c2FnZS4KCSogZG9jL3NlYXJjaC5waHA6IGFkZGVkICRfR0VUW3F1ZXJ5XSBzbyB0aGF0IHBlcnNpc3RlbnQgZ2xvYmFscwoJICBjYW4gYmUgZGlzYWJsZWQgKGZvciByZWNlbnQgdmVyc2lvbnMgb2YgUEhQKQoKTW9uIEphbiAgNSAyMDo0NzowNyBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL2N1c3RvbWZvLnhzbAoJKiBkb2MvdHV0b3JpYWwvY3VzdG9taHRtbC54c2wKCXVwZGF0ZSBjdXN0b20gdHV0b3JpYWwtYnVpbGRpbmcgc3R5bGVzaGVldHMgaW4gcHJlcGFyYXRpb24KCWZvciB0dXRvcmlhbCB1cGRhdGUKClR1ZSBKYW4gIDYgMDA6MTA6MzMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcm5ncGFyc2VyLmM6IGNvbW1pdGluZyB0aGUgY29tcGFjdCByZWxheCBuZyBwYXJzZXIuIEl0J3Mgbm90CgkgIGNvbXBsZXRlbHkgZmluaXNoZWQsIGl0J3Mgbm90IGludGVncmF0ZWQgYnV0IEkgd2FudCB0byBzYXZlIHRoZQoJICBjdXJyZW50IHN0YXRlCgpNb24gSmFuICA1IDIyOjIyOjQ4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL2FwaWJ1aWxkLnB5LCBkb2MvQVBJY29uc3RydWN0b3JzLmh0bWwsIGRvYy9saWJ4bWwyLXJlZnMueG1sLAoJICB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGZpeGVkIGFwaWJ1aWxkLnB5J3MgZ2VuZXJhdGlvbiBvZgoJICAiY29uc3RydWN0b3JzIiB0byBiZSBpbiBhbHBoYWJldGljYWwgb3JkZXIgKGluc3RlYWQgb2YgcHJldmlvdXMKCSAgcmFuZG9tIHNlcXVlbmNlKTsgcmVnZW5lcmF0ZWQgcmVzdWx0aW5nIGZpbGVzLgoKTW9uIEphbiAgNSAxNDowMzo1OSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEx1Y2FzIEJyYXNpbGlubyBmaXhpbmcgYW4gaW5kZW50CgkgIHByb2JsZW0uCgpTdW4gSmFuICA0IDE4OjU0OjI5IE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvbmV3YXBpLnhzbDogY2hhbmdlIGJhY2tncm91bmQgY29sb3Igb2YgZnVuY3Rpb24KCWRlY2xhcmF0aW9uIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkKCSogZG9jLyo6IHJlYnVpbGQgZG9jcyB3aXRoIG5ldyBzdHlsZXNoZWV0CgpTdW4gSmFuICA0IDIyOjQ1OjE0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdiYXJja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmMsIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhZGRlZCBhIHJvdXRpbmUKCSAgeG1sU3RybmNhdE5ldyB0byBjcmVhdGUgYSBuZXcgc3RyaW5nIGZyb20gMiBmcmFncy4KCSogdHJlZS5jOiBhZGRlZCBjb2RlIHRvIGNoZWNrIGlmIG5vZGUgY29udGVudCBpcyBmcm9tCgkgIGRpY3Rpb25hcnkgYmVmb3JlIHRyeWluZyB0byBjaGFuZ2Ugb3IgY29uY2F0ZW5hdGUuCgpTdW4gSmFuICA0IDA4OjU3OjUxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sbWVtb3J5LmM6IGFwcGxpZWQgc3VnZ2VzdGlvbiBmcm9tIE1pbG9zbGF2IFRybWFjIChzZWUKCSAgQnVnIDEzMDQxOSkgYW5kIGVsaW1pbmF0ZWQgeG1sSW5pdE1lbW9yeURvbmUuICBNb3JlCgkgIGltcHJvdmVtZW50IG5lZWRlZC4KCSogeG1sMi1jb25maWcuaW46IGFkZGVkIGFuIGFkZGl0aW9uYWwgZmxhZyAoLS1leGVjLXByZWZpeCkgdG8KCSAgYWxsb3cgbGlicmFyeSBkaXJlY3RvcnkgdG8gYmUgZGlmZmVyZW50IGZyb20gaW5jbHVkZSBkaXJlY3RvcnkKCSAgKEJ1ZyAxMjk1NTgpLgoKRnJpIEphbiAgMiAyMToyMjoxOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciBzdHJ1Y3R1cmVkIGVycm9yCgkgIHJlcG9ydGluZy4KCkZyaSBKYW4gIDIgMjE6MDM6MTcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmggeG1sd3JpdGVyLmM6IGFwcGxpZWQgdGhlIHBhdGNoIGZyb20KCSAgTHVjYXMgQnJhc2lsaW5vIHRvIGFkZCBpbmRlbnRhdGlvbiBzdXBwb3J0IHRvIHhtbFdyaXRlcgoKRnJpIEphbiAgMiAyMjo1ODoyOSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIHByb2JsZW0gd2l0aCAicmVjdXJzaXZlIiBpbmNsdWRlIChmYWxsYmFjawoJICBjb250YWlucyBhbm90aGVyIGluY2x1ZGUgLSBCdWcgMTI5OTY5KQoKRnJpIEphbiAgMiAxMTo0MDowNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmM6IGZvdW5kIGFuZCBmaXhlZCBhIGJ1ZyBtaXNhbGxvY2F0aW5nIHNvbWUgbm9uCgkgIGJsYW5rIHRleHQgbm9kZSBzdHJpbmdzIGZyb20gdGhlIGRpY3Rpb25uYXJ5LgoJKiB4bWxtZW1vcnkuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggdGhlIG1lbW9yeSBkZWJ1ZyBtdXRleAoJICByZWxlYXNlLgoKV2VkIERlYyAzMSAyMjowMjozNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIHByb2JsZW0gY2F1c2VkIGJ5IHdyb25nIGRpY3Rpb25hcnkKCSAgcmVmZXJlbmNlIGNvdW50LCByZXBvcnRlZCBvbiB0aGUgbGlzdCBieSBDaHJpc3RvcGhlcgoJICBHcmF5Y2UuCgpXZWQgRGVjIDMxIDE1OjU1OjU1IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGZpeGVkIHByb2JsZW0KCSAgcG9pbnRlZCBvdXQgYnkgU3TpcGhhbmUgQmlkb3VsIG9uIHRoZSBsaXN0LgoJKiB4aW5jbHVkZS5jLCB4cG9pbnRlci5jLCB4cGF0aC5jLCBpbmNsdWRlL2xpYnhtbC94cG9pbnRlci5oOgoJICBjb21wbGV0ZWQgbW9kaWZpY2F0aW9ucyByZXF1aXJlZCB0byBmaXggQnVnIDEyOTk2NyAoYXQgbGFzdCEpLgoJICBOb3cgd2FpdCB0byBzZWUgaG93IGxvbmcgYmVmb3JlIGZ1cnRoZXIgdHJvdWJsZS4uLgoKVHVlIERlYyAzMCAxNjoyNjoxMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jLCB4bWxtZW1vcnkuYywgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IEZpeGVkCgkgIG1lbW9yeSBsZWFrIHJlcG9ydGVkIGJ5IERhdmUgQmVja2V0dAoJKiB4bWxzY2hlbWFzLmM6IFJlbW92ZWQgc3B1cmlvdXMgY29tbWVudCByZXBvcnRlZCBvbiB0aGUgbWFpbGluZwoJICBsaXN0CgkqIHhpbmNsdWRlLmMsIHhwYXRoLmMsIHhwb2ludGVyLmMsIGxpYnhtbC9pbmNsdWRlL3hwb2ludGVyLmg6CgkgIEZ1cnRoZXIgd29yayBvbiBCdWcgMTI5OTY3IGNvbmNlcm5pbmcgeHBvaW50ZXIgcmFuZ2UgaGFuZGxpbmcKCSAgYW5kIHJhbmdlLXRvIGZ1bmN0aW9uOyBtdWNoIGJldHRlciwgYnV0IHN0aWxsIG5vdCBjb21wbGV0ZQoKTW9uIERlYyAyOSAxODowODowNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB4bWxWYWxpZGF0ZUVsZW1lbnQgY291bGQgY3Jhc2ggZm9yIGVsZW1lbnQgaG9sZGluZyBhIAoJICBuYW1lc3BhY2UgZGVjbGFyYXRpb24gYnV0IG5vdCBpbiBhIG5hbWVzcGFjZS4gT2xpdmVyIEZpc2NoZXIgCgkgIHByb3ZpZGVkIHRoZSBleGFtcGxlLgoKTW9uIERlYyAyOSAxMToyOTozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGlzc3VlIHZhbGlkYXRpb24gc3RhdHVzIG9uIHN0ZGVyciwgbm90IHN0ZG91dCBhcyBzdWdnZXN0ZWQKCSAgYnkgUGF3ZWwgUGFsdWNoYQoJKiByZXN1bHQvcmVsYXhuZy8qOiB0aGlzIGNoYW5nZSBzbGlnaHRseSBhbGwgdGhlIG91dHB1dCBmcm9tIFJORyAKCSAgcmVncmVzc2lvbnMuCgpNb24gRGVjIDI4IDEwOjQ3OjMyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jOiBlZGl0ZWQgYSBjb3VwbGUgb2YgY29tbWVudHMgaW4gYWNjb3JkYW5jZSB3aXRoCgkgIHBvc3Rpbmcgb24gdGhlIG1haWxpbmcgbGlzdCAobm8gbG9naWMgY2hhbmdlKQoJKiB4cG9pbnRlci5jOiB3b3JraW5nIG9uIEJ1ZyAxMjk5NjcsIGFkZGVkIGNoZWNrIGZvciBOVUxMCgkgIG5vZGVzZXQgdG8gcHJldmVudCBjcmFzaC4gIEZ1cnRoZXIgd29yayByZXF1aXJlZC4KCSogeHBhdGguYzogd29ya2luZyBvbiBCdWcgMTI5OTY3LCBhZGRlZCBjb2RlIHRvIGhhbmRsZQoJICBYUEFUSF9MT0NBVElPTlNFVCBpbiBSQU5HRVRPIGNvZGUsIGFsc28gYWRkZWQgY29kZSB0bwoJICBoYW5kbGUgaXQgaW4geG1sWFBhdGhFdmFsdWF0ZVByZWRpY2F0ZVJlc3VsdC4gIEZ1cnRoZXIKCSAgd29yayByZXF1aXJlZC4KClNhdCBEZWMgMjcgMTI6MzI6NTggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmM6IGFkZGVkIHRlc3RzIGZvciB4czphbGwgdG8gYXNzdXJlIG1pbk9jY3VycwoJICBhbmQgbWF4T2NjdXJzIDw9IDEgKEJ1ZyAxMzAwMjApCgpTYXQgRGVjIDI3IDA5OjUzOjA2IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVnZXhwLmM6IGZpeGVkIHhtbEZBUGFyc2VDaGFyUmFuZ2UgZm9yIFVuaWNvZGUgcmFuZ2VzCgkgIHdpdGggcGF0Y2ggZnJvbSBDaGFybGVzIEJvemVtYW4uCgpGcmkgRGVjIDI2IDE0OjAzOjQxIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVnZXhwLmM6IGZpeGVkIHByb2JsZW0gY2F1c2luZyBzZWdmYXVsdCBvbiB2YWxpZGF0aW9uIGVycm9yCgkgIGNvbmRpdGlvbiAocmVwb3J0ZWQgb24gbWFpbGluZyBsaXN0KQoKVGh1IERlYyAyNSAyMToxNjoyMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgbWlzc2luZyBkaWN0aW9uYXJpZXMgZm9yIE1lbW9yeSBhbmQgRG9jCgkgIHBhcnNlciBjb250ZXh0cyAocHJvYmxlbSByZXBvcnRlZCBvbiBtYWlsaW5nIGxpc3QpCgkqIGRvYy9hcGlidWlsZC5weTogc21hbGwgY2hhbmdlIHRvIHByZXZlbnQgZHVwbGljYXRlIGxpbmVzCgkgIG9uIEFQSSBmdW5jdGlvbnMgbGlzdC4gIEl0IHdpbGwgdGFrZSBlZmZlY3QgdGhlIG5leHQgdGltZQoJICB0aGUgZG9jcyBhcmUgcmVidWlsdC4KCldlZCBEZWMgMjQgMTI6NTQ6MjUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1MgZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MgYW5kIHByZXBhcmVkIGEgbmV3CgkgIHJlbGVhc2UgMi42LjQKCldlZCBEZWMgMjQgMTI6MDc6NTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGVnYWN5LmM6IHJlbW92ZSBkZXByZWNhdGVkIHdhcm5pbmcgb24gc3RhcnRFbGVtZW50KCkKCldlZCBEZWMgMjQgMTI6MDQ6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyByZXN1bHQvWEluY2x1ZGUvbm9kZXMyLio6IFhJbmNsdWRlIHhwb2ludGVyIHN1cHBvcnQKCSAgd2FzIGJyb2tlbiB3aXRoIHRoZSBuZXcgbmFtZXNwYWNlLiBGaXhlcyAjMTI5OTMyCgpXZWQgRGVjIDI0IDAwOjI5OjMwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IHR5cGVzIG1pZ2h0IGJlCgkgIHJlZGVmaW5lZCBpbiBpbmNsdWRlcywgcXVpY2sgZml4IHRvIGFsbG93IHRoaXMgYnV0IGxhY2tzIHRoZSAKCSAgZXF1YWxpdHkgb2YgdGhlIHJlZGVmaW5pdGlvbiB0ZXN0LgoKVHVlIERlYyAyMyAxNToxNDozNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IGZpeGVkIGJ1ZyBjb25jZXJuaW5nIHZhbGlkYXRpb24gdXNpbmcgZXh0ZXJuYWwKCSAgZHRkIG9mIGVsZW1lbnQgd2l0aCBtdXRpcGxlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMKCSAgKEJ1ZyAxMjk4MjEpCgpUdWUgRGVjIDIzIDExOjQxOjQyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdHJlZS5jOiBpbmhpYml0ZWQgcHJvZHVjdGlvbiBvZiAiKG51bGwpOiIgaW4geG1sR2V0Tm9kZVBhdGgKCSAgd2hlbiBub2RlIGhhcyBkZWZhdWx0IG5hbWVzcGFjZSAoQnVnIDEyOTcxMCkKClR1ZSBEZWMgMjMgMDk6Mjk6MTQgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBzbWFsbCBlbmhhbmNlbWVudCB0byB4bWxYUGF0aENtcE5vZGVzIHRvIGFzc3VyZQoJICBkb2N1bWVudCBvcmRlciBmb3IgYXR0cmlidXRlcyBpcyByZXRhaW5lZCAoQnVnIDEyOTMzMSkKCk1vbiBEZWMgMjIgMTk6MDY6MTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgeG1scmVhZGVyLmM6IGNoYW5nZSB4bWxSZWFkRmQoKSB4bWxDdHh0UmVhZEZkKCkKCSAgeG1sUmVhZGVyTmV3RmQoKSB4bWxSZWFkZXJGb3JGZCgpLCBjaGFuZ2UgdGhvc2UgdG8gbm90IGNsb3NlCgkgIHRoZSBmaWxlIGRlc2NyaXB0b3IuIFVwZGF0ZWQgdGhlIGNvbW1lbnQsIHNob3VsZCBjbG9zZSAjMTI5NjgzCgpNb24gRGVjIDIyIDAwOjM0OjA5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIGEgc2VyaW91cyBwcm9ibGVtIGluIFhJbmNsdWRlICMxMjkwMjEKClN1biBEZWMgMjEgMTM6NTk6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjMTI5NDg5LCBwcm9wYWdhdGlvbiBvZiBwYXJzaW5nIGZsYWdzIAoJICBpbiBlbnRpdGllcy4KCSogcGFyc2VyLmMgeG1scmVhZGVyLmM6IGltcHJvdmVkIHRoZSBjb21tZW50cyBvZiBwYXJzaW5nIG9wdGlvbnMKClN1biBEZWMgMjEgMTg6MTQ6MDQgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vTWFrZWZpbGUuYW0sIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSwKCSAgZG9jL01ha2VmaWxlLmFtOiBhcHBsaWVkIGZpeGVzIHRvIGFsbG93IGJ1aWxkIGZyb20KCSAgJ291dHNpZGUnIGRpcmVjdG9yeSAoQnVnIDEyOTE3MikKClNhdCBEZWMgMjAgMTY6NDI6MDcgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIHRyZWUuYyAtIGFkZCBleHBsYW5hdGlvbiBvZiBuYW1lc3BhY2UgaW5oZXJpdGFuY2Ugd2hlbgoJbnMgaXMgTlVMTCB0byB4bWxOZXdDaGlsZCBhbmQgeG1sTmV3VGV4dENoaWxkIEFQSSBkb2MKClNhdCBEZWMgMjAgMTg6MTc6MjggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiB1bmRpZCBsYXN0IGNoYW5nZSAobXkKCSAgYmFkKS4gIFB1dCBuZWNlc3NhcnkgZml4IGluIGxpYnhzbHQvbGliZXhzbHQgaW5zdGVhZC4KCSogaW5jbHVkZS9saWJ4bWwvRE9DQnBhcnNlci5oOiBwdXQgdGVzdCBmb3IgX19HQ0NfXyBvbgoJICB3YXJuaW5nIGRpcmVjdGl2ZSAoQnVnIDEyOTEwNSkKClNhdCBEZWMgMjAgMTA6NDg6MzcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBmaXhlZCB4bWxYUGF0aFJldHVyblN0cmluZwoJICB0byBjYXRlciBmb3IgTlVMTCBwb2ludGVyIChidWcgMTI5NTYxKQoJKiBnbG9iYWxzLmM6IGFkZGVkIGNvbW1lbnQgdG8gc3VwcHJlc3MgZG9jdW1lbnRhdGlvbiB3YXJuaW5nCgkqIGRvYy9hcGlidWlsZC5weTogZml4ZWQgcHJvYmxlbSB3aGljaCBjYXVzZWQgbGFzdCBBUEljaHVua3h4Lmh0bWwKCSAgdG8gYmUgbG9zdC4gIFJlYnVpbHQgZG9jLyogKGluY2x1ZGluZyBhZGRpbmcgQVBJY2h1bmsyNi5odG1sKQoKRnJpIERlYyAxOSAxODoyNDowMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogdHJ5aW5nIHRvIGZpeCAjMTI5NjkyIHhtbFRleHRSZWFkZXJFeHBhbmQoKSB3aGVuCgkgIHVzaW5nIGFuIHhtbFJlYWRlcldhbGtlcigpCgpUaHUgRGVjIDE4IDIwOjEwOjM0IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiB0cmVlLmM6IGZpeCBtaXNjLiB0eXBvcyBpbiBkb2MgY29tbWVudHMKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBlbGFib3JhdGUgb24gbWFjcm8gZGVmaW5lIGRvYyBjb21tZW50cwoJKiBkb2MvKjogcmVidWlsZCBkb2NzCgpXZWQgRGVjIDE3IDE2OjA3OjMzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy8qOiBkb24ndCBjYWxsIHRoZSByZXN1bHQgZmlsZXMgLm91dCBidXQgLnJlcyBhcwoJICB0aGUgTWFrZWZpbGVzIHRlbmQgdG8gdHJ5IGdlbmVyYXRpbmcgYmluYXJpZXMgZm9yIC5vdXQgdGFyZ2V0cy4uLgoKVHVlIERlYyAxNiAyMDo1Mzo1NCBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2h0bWwvbGlieG1sLXBhdHRlcm4uaHRtbDogLSBjdnMgYWRkIEFQSSBkb2NzIGZvciBuZXcKCXBhdHRlcm4gc3R1ZmYKClR1ZSBEZWMgMTYgMjA6NDA6NDAgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIHRyZWUuYwoJKiBkb2MvKjoKCUVsYWJvcmF0ZSBpbiBkb2N1bWVudGF0aW9uIGRpc2N1c3Npb24gb2YgeG1sTmV3Q2hpbGQKCWFuZCB4bWxOZXdUZXh0Q2hpbGQuIFRoYW5rcyB0byBTdGV2ZSBMZW50aSBmb3IgcG9pbnRpbmcKCW91dCB0aGUgdXNlZnVsbmVzcyBvZiBhIG1vcmUgZXhwbGljaXQgZXhwbGFuYXRpb24gb2YgdGhlCglyZXNlcnZlZCBjaGFyYWN0ZXIgZXNjYXBpbmcgaXNzdWUuCgpGcmkgRGVjIDEyIDE1OjU1OjE1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYzogYXBwbGllZCBwYXRjaCBmcm9tIFN0ZWZhbiBLb3N0CgpUaHUgRGVjIDExIDE1OjE1OjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy90ZXN0V3JpdGVyLmM6IGFwcGxpZWQgc21hbGwgZml4IGZyb20gTHVjYXMgQnJhc2lsaW5vCgpUaHUgRGVjIDExIDE0OjU1OjIyIENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS4qIHdpbjMyL2NvbmZpZ3VyZS5qczogQWRkZWQgcGF0dGVybiBzdXBwb3J0CgpXZWQgRGVjIDEwIDE0OjExOjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKiBsaWJ4bWwuc3BlYy5pbjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YKCSAgbGlieG1sMi0yLjYuMywgdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRvY3MuCgpXZWQgRGVjIDEwIDExOjQzOjMzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBwYXR0ZXJuLmM6IHJlbW92ZWQgc29tZSBjb21waWxhdGlvbiB3YXJuaW5ncwoKV2VkIERlYyAxMCAxMToxNjoyOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGZpeGluZyBidWcgIzExOTI2NCB4bWxsaW50IGZhaWxpbmcgdG8gcmVwb3J0CgkgIHNlcmlhbGl6YXRpb24gZXJyb3JzIGluIHNvbWUgY2FzZXMuCgpUdWUgRGVjICA5IDIzOjUwOjIzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IGZpeGVkIGFuIFhNTCBlbnRpdGVzIGNvbnRlbnQgc2VyaWFsaXphdGlvbiAKCSAgcG90ZW50aWFsbHkgdHJpZ2dlcmVkIGJ5IFhJbmNsdWRlLCBzZWUgIzEyNjgxNwoKVHVlIERlYyAgOSAxNjoxMjo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYzogYXBwbGllZCB0aGUgcGF0Y2ggdG8geG1sVGV4dFdyaXRlclN0YXJ0UEkoKQoJICBzdWdnZXN0ZWQgYnkgRGFuaWVsIFNjaHVsbWFuIGluICMxMjgzMTMKClR1ZSBEZWMgIDkgMTU6MTg6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiBhbm90aGVyIHBhdGNoIGZyb20gS2VubmV0aCBIYWxleQoJICBmb3IgTWluZ3csIGMuZi4gIzEyODc4NwoKVHVlIERlYyAgOSAxNTowNzowOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbSBLZW5uZXRoIEhhbGV5CgkgIGZvciBjb21waWxpbmcgb24gTWluZ3cgc2VlICMxMjg3ODYKClR1ZSBEZWMgIDkgMTQ6NTI6NTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBzb21lIGZsYWdzIHdlcmUgbm90IHBhc3NlZCBkb3duIGNvcnJlY3RseSBhcwoJICBwYXJzaW5nIG9wdGlvbnMuIEZpeGVzICMxMjY4MDYKClR1ZSBEZWMgIDkgMTI6Mjk6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyB4bWxsaW50LmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveGluY2x1ZGUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhdWdtZW50ZWQgdGhlIFhJbmNsdWRlIEFQSQoJICB0byBiZSBhYmxlIHRvIHBhc3MgWE1MIHBhcnNlciBmbGFncyBkb3duIHRvIHRoZSBJbmNsdXNpb24KCSAgcHJvY2Vzcy4gQWxzbyByZXN5bmNocm9uaXplZCB3aXRoIHRoZSBMYXN0IENhbGwgVzNDIFdvcmtpbmcKCSAgRHJhZnQgMTAgTm92ZW1iZXIgMjAwMyBmb3IgdGhlIHhwb2ludGVyIGF0dHJpYnV0ZS4KCSogTWFrZWZpbGUuYW0gdGVzdC9YSW5jbHVkZS9kb2NzL25vZGVzWzIzXS54bWwgCgkgIHJlc3VsdC9YSW5jbHVkZS8qOiBhdWdtZW50ZWQgdGhlIHRlc3RzIGZvciB0aGUgbmV3IG5hbWVzcGFjZSBhbmQKCSAgdGVzdGluZyB0aGUgeHBvaW50ZXIgYXR0cmlidXRlLCBjaGFuZ2VkIHRoZSB3YXkgZXJyb3IgbWVzc2FnZXMKCSAgYXJlIHRlc3RlZAoJKiBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBEZWMgIDggMTg6Mzg6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYzogZmlsdGVyIHdhcm5pbmcgbWVzc2FnZXMgaWYgdGhlIGdsb2JhbCBzZXR0aW5nIGJsb2NrcyB0aGVtCgkqIHhpbmNsdWRlLmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveGluY2x1ZGUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiB1cGRhdGVkIHRoZSBjaGFuZ2Ugb2YgbmFtZXNwYWNlIGF0CgkgIHRoZSBYSW5jbHVkZSBsZXZlbCwgcmFpc2UgYSB3YXJuaW5nIGlmIHRoZSBvbGQgb25lIGlzIGZvdW5kLAoJICBhbmQgc29tZSBjbGVhbnVwCgpNb24gRGVjICA4IDEzOjA5OjM5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdGVudGF0aXZlIGZpeCBmb3IgIzEyNjExNyBjaGFyYWN0ZXIgcmVmZXJlbmNlIGluCgkgIGF0dHJpYnV0ZXMgb3V0cHV0IHByb2JsZW0gaW4gc29tZSBjb3JuZXJjYXNlLgoKTW9uIERlYyAgOCAxMTowODo0NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiB0cmllZCB0byBmaXggdGhlIHByb2JsZW1zIHJlcG9ydGVkIGluIAoJICBidWcgIzEyNjczNQoJKiB4cGF0aC5jIFNBWDIuYyBlcnJvci5jIHBhcnNlci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDoKCSAgZml4ZWQgYWdhaW4gc29tZSBwcm9ibGVtIHRyeWluZyB0byB1c2UgdGhlIHN0cnVjdHVyZWQgZXJyb3IKCSAgaGFuZGxlcnMsIGMuZi4gYnVnICMxMjY3MzUKCSogcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDogdGlueSBjaGFuZ2UgZHVlIHRvIHRoZSBmaXgKClN1biBEZWMgIDcgMjI6Mjc6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYzogZml4ZWQgX194bWxSYWlzZUVycm9yIHRvIHVzZSBzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsZXJzCgkgIGRlZmluZWQgYnkgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYygpLCBmaXhlcyBidWcgIzEyNjIxMQoKU3VuIERlYyAgNyAyMDozMDo1MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXR0ZW1wdCB0byBmaXggIzEyNjIxMSAuLi4gCgpGcmkgRGVjICA1IDE3OjA3OjI5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYyB4bWxyZWFkZXIuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBmaXhlZCB0aGUgcGF0dGVybiBpbnRlcmZhY2VzCgkgIGJ1dCBub3QgeWV0IHRoZSBwYXJzZXIgdG8gaGFuZGxlIHRoZSBuYW1lc3BhY2VzLgoJKiBkb2MvZXhhbXBsZXMvcmVhZGVyMy5jIGRvYy8qOiBmaXhlZCB0aGUgZXhhbXBsZSwgcmVidWlsdCB0aGUgZG9jcy4KCkZyaSBEZWMgIDUgMTU6NDk6NDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHhtbHdyaXRlci5jIGRvYy9hcGlidWlsZC5weSBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggCgkgIGluY2x1ZGUvbGlieG1sL3BhdHRlcm4uaCBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oOiBjbGVhbnVwCgkgIHRoZSBtYWtlIHJlYnVpbGQgaW4gZG9jLCB0aGlzIGluY2x1ZGUgbmV3IGRpcmVjdGl2ZSB0byBzdG9wCgkgIGRvY3VtZW50YXRpb24gd2FybmluZ3MKCSogZG9jLyogZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgZG9jcwoJKiBwYXR0ZXJuLmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhZGRpbmcgeG1sVGV4dFJlYWRlclByZXNlcnZlUGF0dGVybigpCgkgIHRvIHNhdmUgbm9kZXMgd2hpbGUgc2Nhbm5pbmcgdGhlIHRyZWUgd2l0aCB0aGUgcmVhZGVyLCBjbGVhbnVwCgkgIHRoZSB3YXkgZWxlbWVudCB3ZXJlIGZyZWVkLCBhbmQgeG1sVGV4dFJlYWRlclByZXNlcnZlKCkKCSAgaW1wbGVtZW50YXRpb24sIHRoZSBBUEkgbWlnaHQgY2hhbmdlIGZvciBuYW1lc3BhY2UgYmluZGluZyBzdXBwb3J0CgkgIHdoZW4gY29tcGlsaW5nIHBhdHRlcm5zLgoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgcmVhZGVyMy5jIGV4cG9zaW5nIHRoZSB4bWxUZXh0UmVhZGVyUHJlc2VydmUoKQoKVGh1IERlYyAgNCAxNToxMDo1NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiBvb3BzIGZvcmdvdCB0byBtb2RpZnkvY29tbWl0IHRoZSBuZXcgY29kZS4KClRodSBEZWMgIDQgMTM6Mjk6MTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbF93cmFwLmg6CgkgIGNsZWFudXAgdGhlIG91dHB1dCBidWZmZXIgc3VwcG9ydCB0byBhdCBsZWFzdCBnZXQgdGhlIGJhc2ljCgkgIHRvIHdvcmsKCSogcHl0aG9uL3Rlc3RzL291dGJ1Zi5weSBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OiBmaXhlcyBhbmQKCSAgY2xlYW51cC4KCSogaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmg6IGNsZWFudXAKCldlZCBEZWMgIDMgMjE6Mzg6NTYgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJKiBkb2MvKjogYWRkIFdJVEhfVFJJTyBjb21tZW50IHNvIGl0IHNob3dzIHVwIGluIHRoZSBkb2NzLCByZWJ1aWxkCgkgIGRvY3MKCldlZCBEZWMgIDMgMTM6MTA6MDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIHhtbHJlZ2V4cC5jOiBmaXggYnVnICMxMjg0MDEgYWZmZWN0aW5nCgkgIHJlZ2V4cCBxdWFudGlmaWVycwoKVHVlIERlYyAgMiAyMzoyOTo1NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmMgaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oOiBhZGRpbmcgdGhlIHBhdHRlcm4gbm9kZQoJICBzZWxlY3Rpb24gY29kZS4gSW5oZXJpZWQgaW4gcGFydCBmcm9tIGxpYnhzbHQgYnV0IHNtYWxsZXIuCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIGludGVncmF0ZWQgdGhlIHBhdHRlcm4gbW9kdWxlLCBtYWRlIGl0IGEgY29uZmlndXJlIHRpbWUgb3B0aW9uCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1wYXR0ZXJuIHRvIHRlc3Qgd2hlbiBkb2luZyAtLXN0cmVhbQoKVHVlIERlYyAgMiAxMToyNToyNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgYSBwcm9ibGVtIGluIHhtbHJlYWRlciB2YWxpZGF0aW9uIHdoZW4KCSAgc3RyZWFtaW5nIGV4cG9zZWQgYnkgcmVhZGVyMiBleGFtcGxlLgoKTW9uIERlYyAgMSAyMDo0MDo1MSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sCgkqIGRvYy9kb2NzLmh0bWw6CglhZGQgcmVmZXJlbmNlIHRvIHRoZSBDb2RlIEV4YW1wbGVzIHBhZ2UgdG8gZG9jcy5odG1sIGxpc3QKCW9mIHJlc291cmNlcwoKTW9uIERlYyAgMSAxMjozMDoyOCBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiIHdpbjMyL2NvbmZpZ3VyZS5qczogQXBwbGllZCB0aGUgQkNCIHBhdGNoCgkgIGZyb20gRXJpYwoKU3VuIE5vdiAzMCAyMTozMzozNyBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveGluY2x1ZGUuaAoJKiBkb2MvKjogQWRkIGNvbW1lbnRzIGZvciBtYWNybyBkZWZpbml0aW9ucyBpbiB4aW5jbHVkZS5oIGFuZAoJcmVidWlsZCB0aGUgZG9jcwoKU3VuIE5vdiAzMCAyMTowNjoyOSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2RvY2Rlc2NyLmRvYwoJVXBkYXRpbmcgV2lsbGlhbSdzIGV4cGxhbmF0aW9uIG9mIGhvdyB0byBidWlsZCBkb2NzLCAKCXJlZmxlY3RpbmcgRGFuaWVsJ3MgbmV3IGRvY3MgYnVpbGQgc3lzdGVtCgpTYXQgTm92IDI5IDE4OjM4OjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sbWVtb3J5LmM6IGVuaGFuY2VkIGJ5IGFkZGluZyBtdXRleCB0byBwcm90ZWN0IGdsb2JhbAoJICBzdHJ1Y3R1cmVzIGluIGEgbXVsdGktdGhyZWFkaW5nIGVudmlyb25tZW50LiAgVGhpcyBmaXhlZAoJICBzb21lIHJhbmRvbSBlcnJvcnMgb24gdGhlIFRocmVhZHMgcmVncmVzc2lvbiB0ZXN0cy4KCkZyaSBOb3YgMjggMjE6Mzk6NDkgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbCBkb2MvcHl0aG9uLmh0bWw6IGZpeCB0c3QucHkgdGV4dCwgd2hpY2ggZGlkbid0CgkgIGltcG9ydCBzeXMKCkZyaSBOb3YgMjggMTc6Mjg6NDcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jLCBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oOiBFbmhhbmNlZCB0aGUgaGFuZGxpbmcgb2YKCSAgVVRGLTE2LCBVVEYtMTZMRSBhbmQgVVRGLTE2QkUgZW5jb2RpbmdzLiAgTm93IFVURi0xNiBvdXRwdXQgaXMKCSAgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IGRlZmF1bHQsIHdpdGggcHJvcGVyIEJPTSBhbmQgVVRGLTE2TEUKCSAgZW5jb2RpbmcuICBOYXRpdmUgVVRGLTE2TEUgYW5kIFVURi0xNkJFIGVuY29kaW5nIHdpbGwgbm90IGdlbmVyYXRlCgkgIEJPTSBvbiBvdXRwdXQsIGFuZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVjb2duaXplZCBvbiBpbnB1dC4KCSogdGVzdC91dGYxNmxlYm9tLnhtbCwgdGVzdC91dGYxNmJlYm9tLnhtbCwgcmVzdWx0L3V0ZjE2P2Vib20qOgoJICBhZGRlZCByZWdyZXNzaW9uIHRlc3RzIGZvciBhYm92ZS4KClRodSBOb3YgMjcgMTk6MjU6MTAgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLiogd2luMzIvY29uZmlndXJlLmpzOiBNb2RpZmllZCB0byBhbGxvdyBjb2V4aXN0ZW50IAoJICBidWlsZCB3aXRoIGFsbCBjb21waWxlcnMuIEFkZGVkIEMtUnVudGltZSBvcHRpb24gZm9yIE1TVkMuIEluY2x1ZGVkCgkgIHhtbFdyaXRlci4KCSogeG1sd3JpdGVyLmM6IEFkZGVkIElOX0xJQlhNTCBtYWNybwoKV2VkIE5vdiAyNiAyMTo1NDowMSBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiOiBhcHBsaWVkIHBhdGNoIGZyb20gRXJpYwoKV2VkIE5vdiAyNiAyMTozMzoxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHN0ZWZhbiBvbiBJUkMgcG9pbnRlZCBvdXQgdGhhdCBYTUxfR0VUX0xJTkUKCSAgaXMgYnJva2VuIG9uIDIuNi54CgpUdWUgTm92IDI1IDE4OjM5OjQ0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IGZpeGVkICMxMjc4NzcsIG5ldmVyIG91dHB1dCAmcXVvdDsgaW4gZWxlbWVudCBjb250ZW50CgkqIHJlc3VsdC9pc29sYXQzIHJlc3VsdC9zbGFzaGRvdDE2LnhtbCByZXN1bHQvbm9lbnQvaXNvbGF0MwoJICByZXN1bHQvbm9lbnQvc2xhc2hkb3QxNi54bWwgcmVzdWx0L3ZhbGlkL1JFQy14bWwtMTk5ODAyMTAueG1sCgkgIHJlc3VsdC92YWxpZC9pbmRleC54bWwgcmVzdWx0L3ZhbGlkL3hsaW5rLnhtbDogdGhpcyBjaGFuZ2VzIHRoZQoJICBvdXRwdXQgb2YgYSBmZXcgdGVzdHMKClR1ZSBOb3YgMjUgMTY6MzY6MjEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmgKCSAgdGVzdFNjaGVtYXMuYyB4bWxzY2hlbWFzLmM6IGFkZGVkIHhzZDppbmNsdWRlIHN1cHBvcnQsIGZpeGVkCgkgIHRlc3RTY2hlbWFzIGJlaGF2aW91ciB3aGVuIGEgc2NoZW1hcyBmYWlsZWQgdG8gcGFyc2UuCgkqIHRlc3Qvc2NoZW1hcy92ZHYtKiByZXN1bHQvc2NoZW1hcy92ZHYtZmlyc3Q1XzBfMCo6IGFkZGVkIG9uZQoJICB0ZXN0IGZvciB4c2Q6aW5jbHVkZSBmcm9tIEVyaWMgVmFuIGRlciBWbGlzdAoKVHVlIE5vdiAyNSAwODoxODoxMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogc3dhcHBlZCB0aGUgYXR0cmlidXRlIGRlZmF1bHRpbmcgYW5kIGF0dHJpYnV0ZSBjaGVja2luZwoJICBwYXJ0cyBvZiBwYXJzaW5nIGEgbmV3IGVsZW1lbnQgc3RhcnQsIGZpeGVzIGJ1ZyAjMTI3NzcyCgkqIHJlc3VsdC92YWxpZC8xMjc3NzIuKiB0ZXN0L3ZhbGlkLzEyNzc3Mi54bWwKCSAgdGVzdC92YWxpZC9kdGRzLzEyNzc3Mi5kdGQ6IGFkZGVkIHRoZSBleGFtcGxlIGluIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpUdWUgTm92IDI1IDA4OjAwOjE1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtb3ZlZCB4bWxDbGVhbnVwVGhyZWFkcygpIHRvIHRoZSBlbmQgb2YgeG1sQ2xlYW51cFBhcnNlcigpCgkgIHRvIGF2b2lkIGJ1ZyAjMTI3ODUxCgpNb24gTm92IDI0IDE1OjI2OjIxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhpbmcgc29tZSBOZWdhdGl2ZSBDaGFyYWN0ZXIgR3JvdXAgYW5kCgkgIENoYXJhY3RlciBDbGFzcyBTdWJ0cmFjdGlvbiBoYW5kbGluZy4KCk1vbiBOb3YgMjQgMTQ6MDE6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jOiBtb3JlIFhNTCBTY2hlbWFzIGZpeGVzIGJhc2VkCgkgIG9uIEVyaWMgdmFuIGRlciBWbGlzdCBleGFtcGxlcwoJKiByZXN1bHQvc2NoZW1hcy92ZHYtZmlyc3Q0KiB0ZXN0L3NjaGVtYXMvdmR2LWZpcnN0NCo6CgkgIGFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMKCSogZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtIGRvYy9leGFtcGxlcy9pbmRleC5weTogZG8gbm90CgkgIHJlZ2VuZXJhdGUgdGhlIGluZGV4IG9uIG1ha2UgYWxsIHRhcmdldCwgYnV0IG9ubHkgb24KCSAgbWFrZSByZWJ1aWxkIHRvIGF2b2lkIHRyb3VibGVzLgoKU2F0IE5vdiAyMiAyMTozNTo0MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaAoJICBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IGxvdCBvZiBidWcgZml4ZXMsIGNsZWFudXAsCgkgIHN0YXJ0aW5nIHRvIGFkZCBwcm9wZXIgbmFtZXNwYWNlIHN1cHBvcnQgdG9vLgoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBhIG51bWJlciBvZiB0ZXN0cwoJICBmaXhlZCB0aGUgcmVzdWx0IGZyb20gc29tZSByZWdyZXNzaW9uIHRlc3RzIHRvby4KCkZyaSBOb3YgMjEgMjA6NTA6NTkgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbCwgZG9jcy5odG1sOiByZW1vdmUgcmVmZXJlbmNlIHRvIGd0ay1kb2Mgbm93IHRoYXQKCURhbmllbCBoYXMgcmVtb3ZlZCBpdCwgZml4IGxpbmsgdG8gR2VvcmdlJ3MgSUJNIGFydGljbGUsIG90aGVyCgltaW5vciBlZGl0cwoKRnJpIE5vdiAyMSAwMToyNjowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSb2JlcnQgU3RlcGFuZWsgdG8gc3RhcnQgCgkgIGltcG9ydCBvcyBzY2hlbWFzIHN1cHBvcnQsIGNsZWFuZWQgdXAgc3R1ZmYgYW5kIHRoZSBwYXRjaC4KCSogdGVzdC9zY2hlbWFzL2ltcG9ydDBfMC4qIHJlc3VsdC9zY2hlbWFzL2ltcG9ydDBfMF8wKjogYWRkZWQgdGVzdAoJICB0byByZWdyZXNzaW9uLCBmaXhlZCBhIGZldyByZWdyZXNzaW9ucyB0b28uCgpUaHUgTm92IDIwIDIyOjU4OjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCB0d28gcGFyc2luZyBmaXhlcyBmcm9tIEphbWVzIEJ1cnNhCgpUaHUgTm92IDIwIDE5OjIwOjQ2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCB0d28geG1sUmVhZGVyIGV4YW1wbGVzCgkqIHhtbHJlYWRlci5jOiBjbGVhbmVkIHVwIHNvbWUgYnVncyBpbiB0aGUgcHJvY2VzcwoKVGh1IE5vdiAyMCAxMjo1NDozMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYyBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaDogYXBwbGllZCBwYXRjaCBmcm9tCgkgIEFsZnJlZCBNaWNrYXV0c2NoLCBidWdmaXhlcyBhbmQgY29tbWVudHMKCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIGhpcyB0ZXN0IGFzIHRoZSB4bWxXcml0ZXIgZXhhbXBsZQoJKiBkb2MvaHRtbC8gZG9jLyouaHRtbDogdGhpcyByZXN1bHRlZCBpbiBzb21lIGltcHJvdmVtZW50cwoJKiBpbmNsdWRlL2xpYnhtbC9oYXNoLmg6IGZpeGVkIGFuIGluY2x1c2lvbiBwcm9ibGVtIHdoZW4KCSAgPGxpYnhtbC9oYXNoLmg+IHdhc24ndCBwcmVjZWVkZWQgYnkgPHhtbC9wYXJzZXIuaD4KCldlZCBOb3YgMTkgMTc6MTk6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZml4IGFuIGVycm9yIG1lc3NhZ2UKCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIHRyZWUyIGV4YW1wbGUgZnJvbSBMdWNhcyBCcmFzaWxpbm8KCldlZCBOb3YgMTkgMTc6NTA6NDcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvbmV3YXBpLnhzbDogaW1wcm92ZSB0aGUgc29ydCBzZXF1ZW5jZSBmb3IgcGFnZSBjb250ZW50CgkqIGRvYy9odG1sLyouaHRtbDogcmVnZW5lcmF0ZSB0aGUgd2ViIHBhZ2VzCgpXZWQgTm92IDE5IDAwOjQ4OjU2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBkbyBub3QgcGFja2FnZSBjdnMgdmVyc2lvbmluZyB0ZW1wIGZpbGVzLgoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbmV3YXBpLnhzbDogbW9yZSBjbGVhbnVwLAoJICBzbGlnaHRseSBpbXByb3ZlZCB0aGUgQVBJIHhtbCBmb3JtYXQsIGZpeGVkIGEgbG90IG9mIHNtYWxsCgkgIHJlbmRlcmluZyBwcm9ibGVtcwoJKiBkb2MvaHRtbC9saWJ4bWwqLmh0bWw6IHJlYnVpbHQKClR1ZSBOb3YgMTggMjE6NTE6MTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvKi5oIGluY2x1ZGUvbGlieG1sLyouaC5pbjogbW9kaWZpZWQgdGhlIGZpbGUKCSAgaGVhZGVyIHRvIGFkZCBtb3JlIGluZm9ybWF0aW9ucywgcGFpbmZ1bC4uLgoJKiBnZW5DaFJhbmdlcy5weSBnZW5Vbmljb2RlLnB5OiB1cGRhdGVkIHRvIGdlbmVyYXRlIHNhaWQgY2hhbmdlcwoJICBpbiBoZWFkZXJzCgkqIGRvYy9hcGlidWlsZC5weTogZXh0cmFjdCBoZWFkZXJzLCBhZGQgdGhlbSB0byBsaWJ4bWwyLWFwaS54bWwKCSogKi5odG1sICoueHNsICoueG1sOiB1cGRhdGVkIHRoZSBzdHlsZXNoZWV0cyB0byBmbGFnIGdlcHJlY2F0ZWQKCSAgQVBJcyBtb2R1bGVzLiBVcGRhdGVkIHRoZSBzdHlsZXNoZWV0cywgc29tZSBjbGVhbnVwcywgcmVnZW5lcmF0ZWQKCSogZG9jL2h0bWwvKi5odG1sOiByZWdlbmVyYXRlZCBhZGRlZCBiYWNrIGJvb2sxIGFuZCBsaWJ4bWwtbGliLmh0bWwKClR1ZSBOb3YgMTggMTQ6NDM6MTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtIGRvYy8qLnhzbCBkb2MvKi5odG1sIGRvYy9hcGlidWlsZC5weTogY2xlYW5lZCB1cAoJICB0aGUgYnVpbGQgcHJvY2VzcyB0byByZW1vdmUgYWxsIHJlbWFpbnMgZnJvbSB0aGUgb2xkIGd0ay1kb2MKCSAgaW5oZXJpdGVkLCBsaWJ4bWwyLXJlZnMueG1sIGlzIG5vdyBnZW5lcmF0ZWQgYnkgYXBpYnVpbGQucHksIHRoZQoJICBzdHlsZXNoZWV0cyBoYXZlIGJlZW4gaW1wcm92ZWQsIGFuZCB0aGUgQVBJKmh0bWwgbm93IGdlbmVyYXRlZAoJICBhcmUgWEhUTUwxIHZhbGlkIHRvbwoKVHVlIE5vdiAxOCAxNDoyODozMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDxtbW0uY29tLmhrPgoKCSogZ2VuQ2hSYW5nZXMucHksIGNodmFsaWQuYywgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOiBtaW5vcgoJICBlbmhhbmNlbWVudCB0byBwcmV2ZW50IGNvbW1lbnQgd2l0aCB1bnJlZmVyZW5jZWQgdmFyaWFibGUuCgkqIHRocmVhZHMuYyB4bWxyZWFkZXIuYyB4bWx3cml0ZXIuYzogZWRpdGVkIHNvbWUgY29tbWVudHMgdG8KCSAgaW1wcm92ZSBhdXRvLWdlbmVyYXRpb24gb2YgZG9jdW1lbnRhdGlvbgoJKiBhcGlidWlsZC5weTogbWlub3IgY2hhbmdlIHRvIGFuIGVycm9yIG1lc3NhZ2UKCk1vbiBOb3YgMTcgMTc6NTU6NTEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL25ld2FwaS54c2w6IG1vcmUgY2xlYW51cCwKCSAgaW1wcm92aW5nIG5hdmlnYXRpb24KCSogZG9jL2h0bWwvKi5odG1sOiB1cGRhdGVkIHRoZSByZXN1bHQKCk1vbiBOb3YgMTcgMTQ6NTQ6MzggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9uZXdhcGkueHNsOgoJICBpbXByb3ZlbWVudCBvZiB0aGUgc3R5bGVzaGVldHMsIGZpeGVkIGEgQVBJIGdlbmVyYXRpb24gcHJvYmxlbSwKCSAgc3dpdGNoZWQgdGhlIHN0eWxlc2hlZXQgYW5kIE1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBIVE1MIG91dHB1dC4KCSogZG9jL2h0bWwvKi5odG1sOiBjb21wbGV0ZSB1cGRhdGUsIGRpdGNoZWQgc29tZSBvbGQgZmlsZXMsIG1pZ2h0CgkgIGludHJvZHVjZSBzb21lIGJyZWFrYWdlLi4uCgpNb24gTm92IDE3IDEyOjUwOjI4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9uZXdhcGkueHNsOiBsb3Qgb2YgaW1wcm92ZW1lbnRzLCB0aGlzIHN0YXJ0cyBsb29raW5nIGdvb2QKCSAgZW5vdWdoIHRvIGJlIHVzYWJsZS4KCk1vbiBOb3YgMTcgMDA6NTg6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL25ld2FwaS54c2w6IHN0eWxlc2hlZXQgdG8gYnVpbGQgSFRNTCBwYWdlcyBmcm9tIHRoZQoJICBBUEkgWE1MIGRlc2NyaXB0aW9uLCBXb3JrIGluIFByb2dyZXNzCgpTdW4gTm92IDE2IDE2OjAzOjI0IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgYnVnIDEyNjk3NiAoc3RyaW5nICE9IGVtcHR5IG5vZGVzZXQKCSAgc2hvdWxkIGJlIGZhbHNlKQoKU3VuIE5vdiAxNiAxNDowMDowOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9odG1sLyouaHRtbDogRmluYWxseSAtIGZvdW5kIHRoZSBwcm9ibGVtIHdpdGggdGhlCgkgIHBhZ2UgZ2VuZXJhdGlvbiAoWE1MUFVCRlVOIG5vdCByZWNvZ25pemVkIGJ5IGd0a2RvYykuCgkgIFJlLWNyZWF0ZWQgdGhlIHBhZ2VzIHVzaW5nIGEgdGVtcG9yYXJ5IHZlcnNpb24gb2YKCSAgaW5jbHVkZS9saWJ4bWwvKi5oLgoJKiB0ZXN0T09NbGliLmMsaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCwKCSAgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oLGluY2x1ZGUvbGlieG1sL3ZhbGlkLmgsCgkgIGluY2x1ZGUvbGlieG1sL3hsaW5rLmgsaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmgsCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluLAoJICBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBtaW5vciBlZGl0IG9mIGNvbW1lbnRzCgkgIHRvIGhlbHAgYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbgoJKiBkb2MvZG9jZGVzY3IuZG9jOiBzbWFsbCBlbGFib3JhdGlvbgoJKiBkb2MvZXhhbXBsZXMvdGVzdDEuYyxkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW06IHJlLWNvbW1pdAoJICAobWVzc2VkIHVwIG9uIGxhc3QgdHJ5KQoJKiB4bWxyZWFkZXIuYzogbWlub3IgY2hhbmdlIHRvIGNsZWFyIHdhcm5pbmcuCgpTYXQgTm92IDE1IDE5OjIwOjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIENvcHlyaWdodDogZml4ZWQgc29tZSB3b3JkaW5nCgkqIGxpYnhtbC5zcGVjLmluOiBtYWtlIHN1cmUgZG9jL2V4YW1wbGVzIGlzIHBhY2thZ2VkCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB2YWxpZC5jIHhtbHJlYWRlci5jOiBmaXhlZCB0aGUgcmVhbGx5CgkgIGFubm95aW5nIHByb2JsZW0gYWJvdXQgeG1sUmVtb3ZlSUQgYW5kIHhtbFJlYWRlciBzdHJlYW1pbmcuCgkgIFRoaW5nIGxvb2tzIGZpeGVkIG5vdywgaGFkIHRvIGFkZCBhIGRvYyByZWZlcmVuY2UgdG8gdGhlCgkgIHhtbElEIHN0cnVjdHVyZSB0aG91Z2guLi4KClNhdCBOb3YgMTUgMDk6NTM6MzYgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9kb2NkZXNjci5kb2M6IGFkZGVkIGRlc2NyaXB0aW9uIG9mIG1hbiBwYWdlIGJ1aWxkaW5nCgpTYXQgTm92IDE1IDE5OjA4OjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL2h0bWwvbGlieG1sLWNodmFsaWQuaHRtbCwgZG9jL2h0bWwvbGlieG1sLWRpY3QuaHRtbCwKCSAgZG9jL2h0bWwvbGlieG1sLWxpc3QuaHRtbCwgZG9jL2h0bWwvbGlieG1sLXRlc3RPT01saWIuaHRtbCwKCSAgZG9jL2h0bWwvbGlieG1sLXdpbmNlY29tcGF0LCBkb2MvaHRtbC93aW5zb2NrY29tcGF0Lmh0bWwsCgkgIGRvYy9odG1sL2xpYnhtbC14bWxleHBvcnRzLmh0bWwsIGRvYy9odG1sL2xpYnhtbC14bWx2ZXJzaW9uLmh0bWwsCgkgIGRvYy9odG1sL2xpYnhtbC14bWx3aW4zMnZlcnNpb24uaHRtbCwgZG9jL2h0bWwvbGlieG1sLXhtbHdyaXRlci5odG1sOgoJICBhZGRlZCBtaXNzaW5nIHBhZ2VzIGZvciB0aGUgd2Vic2l0ZS4KClNhdCBOb3YgMTUgMTg6MjM6NDggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jLyouaHRtbCBkb2MvaHRtbC8qLmh0bWw6IHJlYnVpbHQgdGhlCgkgIGdlbmVyYXRlZCBwYWdlcyAoYWdhaW4pLCBtYW51YWxseSByZXN0b3JlZCBkb2MvaHRtbC9pbmRleC5odG1sCgkgIGFuZCBtYW51YWxseSBlZGl0ZWQgZ2VuZXJhdGVkIGZpbGUgZG9jL2dub21lLXhtbC54bWwgdG8gcHV0CgkgIGluIGFwcHJvcHJpYXRlIGhlYWRpbmdzLgoJKiBkb2MvZG9jZGVzY3IuZG9jOiBuZXcgZmlsZSB0byBkZXNjcmliZSBkZXRhaWxzIG9mIHRoZQoJICBkb2N1bWVudCBnZW5lcmF0aW9uIChoZWxwcyBteSBtZW1vcnkgZm9yIHRoZSBuZXh0IHRpbWUpCgkqIGdlbkNoUmFuZ2VzLnB5LGNodmFsaWQuYyxpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IG1pbm9yCgkgIGVuaGFuY2VtZW50IHRvIHBsZWFzZSB0aGUgYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbi4KCkZyaSBOb3YgMTQgMjM6NDc6MzEgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjYXRhbG9nLmMscmVsYXhuZy5jLHRlc3RBdXRvbWF0YS5jLHhwb2ludGVyLmMsZ2VuQ2hSYW5nZXMucHksCgkgIGNodmFsaWQuYyxpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgsZG9jL2V4YW1wbGVzL3Rlc3QxLmM6CgkgIG1pbm9yIGVycm9yIGNsZWFudXAgZm9yIGdjYy0zLjMuWzEyXSBjb21waWxhdGlvbiB3YXJuaW5ncy4KCkZyaSBOb3YgMTQgMTU6MDg6MTMgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0cmVlLmM6IG1pbm9yIGNoYW5nZXMgdG8gc29tZSBjb21tZW50cwoJKiBkb2MvKi5odG1sOiByZWJ1aWx0IHRoZSBnZW5lcmF0ZWQgSFRNTCBwYWdlcyBmb3IgY2hhbmdlcwoJICBmcm9tIGpmbGVjayAoYnVnIDEyNjk0NSkKClRodSBOb3YgMTMgMTI6NDQ6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIERvZGppJ3MgZXhhbXBsZSwgYWRkZWQgb3V0cHV0IGhhbmRsaW5nCgpUaHUgTm92IDEzIDExOjM1OjM1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCBBbGVrc2V5IFhQYXRoIGV4YW1wbGUsIGZpeGVkIGJ1Z3MKCSAgaW4gdGhlIGluZGV4ZXIKCldlZCBOb3YgMTIgMjM6NDg6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLyo6IGludGVncmF0aW5nIHRoZSBleGFtcGxlcyBpbiB0aGUgbmF2aWdhdGlvbiBtZW51cwoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgbWFrZSB0ZXN0cywgdXBkYXRlZCB0aGUgbmF2aWdhdGlvbiwKCSAgYWRkZWQgYSBuZXcgdGVzdCwgY2xlYW51cHMsIHVwZGF0ZXMuCgpXZWQgTm92IDEyIDE3OjUwOjM2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qLmh0bWw6IHJlYnVpbHQgdGhlIGdlbmVyYXRlZCBIVE1MIHBhZ2VzCgkqIGRvYy9leGFtcGxlcy8qOiB1cGRhdGVkIHRoZSBzdHlsZXNoZWV0cywgYWRkZWQgYSBzeW5vcHNpcywKCSAgTWFrZWZpbGUuYW0gaXMgbm93IGdlbmVyYXRlZCBieSBpbmRleC5weQoKV2VkIE5vdiAxMiAwMTozODoxNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2Mvc2l0ZS54c2wgZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtIGRvYy9leGFtcGxlcy9pbmRleC5odG1sOgoJICBhZGRlZCBhdXRvZ2VuZXJhdGlvbiBvZiBhIHdlYiBwYWdlIGZvciB0aGUgZXhhbXBsZXMKCSogZG9jL2V4YW1wbGVzL2V4YW1wbGUxLmMgZG9jL2V4YW1wbGVzLy5jdnNpZ25vcmUKCSAgZG9jL2V4YW1wbGVzL2V4YW1wbGVzLnhtbCBkb2MvZXhhbXBsZXMvaW5kZXgucHk6IHVwZGF0ZWQgdGhlCgkgIGluZm9ybWF0aW9ucyBleHRyYWN0ZWQsIGltcHJvdmVkIHRoZSBmb3JtYXQgYW5kIGluZGV4aW5nLgoKVHVlIE5vdiAxMSAyMjowODo1OSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5OiBsZXNzIHZlcmJvc2Ugb24gZGlmZmVyZW5jZQoJKiBsaWJ4bWwuc3BlYy5pbjogY2xlYW51cAoJKiBwYXJzZXIuYzogZml4ZWQgeG1sQ2xlYW51cFBhcnNlcigpIGRvYwoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwKCSAgZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtIGRvYy9leGFtcGxlcy9leGFtcGxlMS5jIAoJICBkb2MvZXhhbXBsZXMvZXhhbXBsZXMueG1sIGRvYy9leGFtcGxlcy9pbmRleC5weQoJICBkb2MvZXhhbXBsZXMvdGVzdDEueG1sOiB3b3JrIG9uIGFkZGluZyBDIGV4YW1wbGVzIGFuZAoJICBnZW5lcmF0aW5nIGF1dG9tYXRlZCBpbmZvcm1hdGlvbiBhYm91dCB0aG9zZS4gZXhhbXBsZXMueG1sCgkgIGlzIGF1dG9nZW5lcmF0ZWQgZGVzY3JpYmluZyB0aGUgZXhhbXBsZXMuCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW06IGNsZWFudXAKCk1vbiBOb3YgMTAgMjM6NDc6MDMgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5Vbmljb2RlLnB5LCB4bWx1bmljb2RlLmMsIGluY2x1ZGUvbGlieG1sL3htbHVuaWNvZGUuaDoKCSAgZml4ZWQgbWlzc2luZyAnLScgaW4gYmxvY2sgbmFtZXMsIGVuaGFuY2VkIHRoZSBoYWNrIGZvcgoJICBBQkkgYWxpYXNpbmcuCgpTdW4gTm92ICA5IDIwOjI4OjIxIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuVW5pY29kZS5weSwgeG1sdW5pY29kZS5jLCBpbmNsdWRlL2xpYnhtbC94bWx1bmljb2RlLmgsCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBlbmhhbmNlZCBmb3IgcmFuZ2UgY2hlY2tpbmcsCgkgIHVwZGF0ZWQgdG8gVW5pY29kZSB2ZXJzaW9uIDQuMC4xIChBUEkgZG9jcyBhbHNvIHVwZGF0ZWQpCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IG1pbm9yIGNoYW5nZSB0byBmaXggYSB3YXJuaW5nCgpXZWQgTm92ICA1IDIzOjQ2OjM2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhcHBseSBmaXggZnJvbSBLYXJsIEVpY2h3YWxkZXIgZm9yIHNjcmlwdCBwYXRoCgpXZWQgTm92ICA1IDEwOjQ5OjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdG8gc2ltcGxpZnkKCSAgaGlzIHdvcmsgZnJvbSBDVlMgY2hlY2tvdXRzLgoKVHVlIE5vdiAgNCAyMToxNjo0NyBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbHJlYWRlci5odG1sOiBtaW5vciBjbGVhbnVwcwoKVHVlIE5vdiAgNCAxNTo1MjoyOCBQU1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogY2hhbmdlZCBtYWNybyBBVFRSSUJVVEVfVU5VU0VECgkgIGZvciBnY2Mgc28gdGhhdCwgaWYgdW5kZWZpbmVkLCBpdCdzIGRlZmluZWQgYXMKCSAgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKClR1ZSBOb3YgIDQgMTU6Mjg6MDcgUFNUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBzbWFsbCBlbmhhbmNlbWVudCB0byBhc3N1cmUgQVRUUklCVVRFX1VOVVNFRAoJICBhcHBlYXJzIGFmdGVyIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KCSogdmFsaWQuYzogdHJpdmlhbCBjaGFuZ2UgdG8gZWxpbWluYXRlIGEgd2FybmluZyBtZXNzYWdlCgpUdWUgTm92ICA0IDExOjI0OjA0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjYuMiwgdXBkYXRlZCBhbmQKCSAgcmVidWlsdCB0aGUgZG9jcwoKVHVlIE5vdiAgNCAwOTozODo0NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGNoYW5nZSAtLWh0bWwgdG8gbWFrZSBzdXJlIHdlIHVzZSB0aGUgSFRNTCBzZXJpYWxpemF0aW9uCgkgIHJ1bGUgYnkgZGVmYXVsdCB3aGVuIEhUTUwgcGFyc2VyIGlzIHVzZWQsIGFkZCAtLXhtbG91dCB0byBhbGxvdyB0bwoJICBmb3JjZSB0aGUgWE1MIHNlcmlhbGl6ZXIgb24gSFRNTC4KCSogSFRNTHRyZWUuYzogdWdseSB0d2VhayB0byBmaXggdGhlIG91dHB1dCBvbiA8cD4gZWxlbWVudCBhbmQgCgkgIHNvbHZlICMxMjUwOTMKCSogcmVzdWx0L0hUTUwvKjogdGhpcyBjaGFuZ2VzIHRoZSBvdXRwdXQgb2Ygc29tZSB0ZXN0cwoKTW9uIE5vdiAgMyAxNzo1MToyOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBidWcgIzEyNTgxMiwgYWJvdXQgWFBvaW50ZXIgaW4gWEluY2x1ZGUgCgkgIGZhaWxpbmcgYnV0IG5vdCByZXR1cm5pbmcgYW4gZXJyb3IuCgpNb24gTm92ICAzIDE3OjE4OjIyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVkIGJ1ZyAjMTI1ODExIHJlbGF0ZWQgdG8gRFREIHBvc3QgdmFsaWRhdGlvbgoJICB3aGVyZSB0aGUgRFREIGRvZXNuJ3QgcGVydGFpbiB0byBhIGRvY3VtZW50LgoKTW9uIE5vdiAgMyAxNToyNTo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBpbXBsZW1lbnRlZAoJICB0aGUgWE1MX1BBUlNFX05PTkVUIHBhcnNlciBvcHRpb24uCgkqIHhtbGxpbnQuYzogY29udmVydGVkIHhtbGxpbnQuYyB0byB1c2UgdGhlIG9wdGlvbiBpbnN0ZWFkIG9mIAoJICByZWx5aW5nIG9uIHRoZSBnbG9iYWwgcmVzb2x2ZXIgdmFyaWFibGUuCgpNb24gTm92ICAzIDEzOjI2OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveGluY2x1ZGUuaDogYWRkaW5nIFhJbmNsdWRlCgkgIHN1cHBvcnQgdG8gdGhlIHJlYWRlciBpbnRlcmZhY2UuIExvdCBvZiB0ZXN0aW5nIG9mIHRoZSB3YWxrZXIsCgkgIHZhcmlvdXMgYnVnIGZpeGVzLgoJKiB4bWxsaW50LmM6IGFkZGVkIC0td2Fsa2VyIGFuZCBtYWRlIHN1cmUgLS14aW5jbHVkZSAtLXN0cmVhbSAtLWRlYnVnCgkgIHdvcmtzIGFzIGV4cGVjdGVkCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9kdGQxMS5yZHIgcmVzdWx0L2VudDYucmRyIHRlc3QvZHRkMTEgdGVzdC9lbnQ2CgkgIHJlc3VsdC9YSW5jbHVkZS8qLnJkcjogYWRkZWQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIHdhbGtlciBhbmQKCSAgWEluY2x1ZGUgeG1sUmVhZGVyIHN1cHBvcnQsIGhhZCB0byBzbGlnaHRseSBjaGFuZ2UgYSBjb3VwbGUgb2YgdGVzdHMKCSAgYmVjYXVzZSB0aGUgd2Fsa2VyIGNhbid0IGRpc3Rpbmd1aXNoIDxmb28vPiBmcm9tIDxmb28+PC9mb28+CgpTYXQgTm92ICAxIDE3OjQyOjI3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBuYW5vaHR0cC5jIHRocmVhZHMuYzogc2Vjb25kIEJlT1MgcGF0Y2ggZnJvbSAKCSAgTWFyY2luICdTaGFyZCcgS29uaWNraQoKRnJpIE9jdCAzMSAxNTozNToyMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYWx3YXlzIGdlbmVyYXRlIGxpbmUgbnVtYmVycwoKRnJpIE9jdCAzMSAxMTo1Mzo0NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYW5vdGhlciByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gZml4aW5nICMxMjU4MjMKCkZyaSBPY3QgMzEgMTE6MzM6MTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBwcmV2aW91cyBmaXggZm9yICMxMjQwNDQgd2FzIGJyb2tlbiwgY29ycmVjdAoJICBmaXggcHJvdmlkZWQuCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB4bWxJTy5jOiBmaXggeG1sU3RvcFBhcnNlcigpCgkgIGFuZCB0aGUgZXJyb3IgaGFuZGxlcnMgdG8gYWRkcmVzcyAjMTI1ODc3CgpUaHUgT2N0IDMwIDIzOjEwOjQ2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBzaWRlIGVmZmVjdCBvZiAjMTIzMTA1IHBhdGNoLCBuYW1lc3BhY2UgcmVzb2x1dGlvbgoJICB3b3VsZCBmYWlsIHdoZW4gZGVmaW5lZCBpbiBpbnRlcm5hbCBlbnRpdGllcywgZml4ZXMgIzEyNTgyMwoKVGh1IE9jdCAzMCAxNDoxMDo0MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGJlIG1vcmUgZGVmZW5zaXZlIGluIHRoZSB4bWxSZWFkZXIgcHl0aG9uIGJpbmRpbmdzCgkgIGZpeGluZyBidWcgIzEyNDA0NAoKVGh1IE9jdCAzMCAxMToxNDozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB0aGUgYS1wb3N0ZXJpb3JpIERURCB2YWxpZGF0aW9uIGNvZGUgd2FzIG5vdCB2YWxpZGF0aW5nCgkgIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLCB0aGlzIGZpeGVzICMxMjQxMTAKCldlZCBPY3QgMjkgMTQ6MTM6MDMgUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxJTy5jOiBlbmhhbmNlZCB0byBieXBhc3MgY29tcHJlc3Npb24gZGV0ZWN0aW9uIGNvZGUKCSAgd2hlbiBpbnB1dCBmaWxlIGlzIHN0ZGluIChidWcgMTI1ODAxKQoKV2VkIE9jdCAyOSAxODoyMTowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXggbmVlZGVkIHdoZW4gSFRUUCBpcyBub3QgY29tcGlsZWQgaW4gYnkgTWFyayBWYWtvYwoKV2VkIE9jdCAyOSAxODowNTo1MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBtb3JlIGZpeGVzIGFib3V0IHVucmVnaXN0ZXJpbmcgb2JqZWN0cwoJKiBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrIFZha29jCgkgIG1pc3NpbmcgX2NwbHVzcGx1cyBwcm9jZXNzaW5nIGNsYXVzZQoKV2VkIE9jdCAyOSAwNzo0OTo1MiAyMDAzICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jOiBhZGRlZCB4bWxTdHJWUHJpbnRmIGZ1bmN0aW9uCgpXZWQgT2N0IDI5IDE0OjM3OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHRlc3RUaHJlYWRzLmMgdGhyZWFkcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgTWFyY2luICdTaGFyZCcgS29uaWNraSB0byBwcm92aWRlIEJlT1MgdGhyZWFkIHN1cHBvcnQuCgpXZWQgT2N0IDI5IDE0OjIwOjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6IGFwcGxpZWQgcGF0Y2gKCSAgZnJvbSBTdGV2ZSBCYWxsIHRvIG1ha2UgYSBzY2hlbWEgcGFyc2VyIGZyb20gYSBwcmVwYXJzZWQgZG9jdW1lbnQuCgpXZWQgT2N0IDI5IDEzOjUyOjI1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBhIGNvdXBsZSBvZiBwYXRjaGVzIGZyb20gTWFyayBMaWxiYWNrIGFib3V0IHRleHQKCSAgbm9kZXMgY29hbGVzY2luZwoKV2VkIE9jdCAyOSAxMjoxNjo1MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBjaGFuZ2Ugc3VnZ2VzdGVkIGJ5IEFudGhvbnkgQ2FycmljbyB3aGVuIHVucmVnaXN0ZXJpbmcKCSAgYSBuYW1lc3BhY2UgcHJlZml4IHRvIGEgY29udGV4dAoJKiBoYXNoLmM6IGJlIG1vcmUgY2FyZWZ1bCBhYm91dCBjYWxsaW5nIGNhbGxiYWNrcyB3aXRoIE5VTEwgcGF5bG9hZHMuCgpXZWQgT2N0IDI5IDAwOjA0OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjYuMSwgdXBkYXRlZCBhbmQKCSAgcmVnZW5lcmF0ZWQgZG9jcyBhbmQgQVBJcwoJKiBwYXJzZXIuYzogY2xlYW51cCBhbmQgbGFzdCBjaGFuZ2UgdG8gZml4ICMxMjMxMDUKClR1ZSBPY3QgMjggMjM6MDI6MjkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBGaXggIzEyNDkwNyBieSBzaW1wbHkgYmFja3BvcnRpbmcgdGhlIHNhbWUKCSAgZml4IGFzIGZvciB0aGUgWE1MIHBhcnNlcgoJKiByZXN1bHQvSFRNTC9kb2MzLmh0bS5lcnI6IGNoYW5nZSB0byBJRCBkZXRlY3RpbmcgbW9kaWZpZWQgb25lCgkgIHRlc3QgcmVzdWx0LgoKVHVlIE9jdCAyOCAyMjoyODo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogaW5jbHVkZWQgYSBuZXcgZnVuY3Rpb24KCSAgdG8gcmV1c2UgYSBQdXNoIHBhcnNlciBjb250ZXh0LCBiYXNlZCBvbiBHcmFoYW0gQmVubmV0dCBvcmlnaW5hbAoJICBjb2RlCgkqIHZhbGlkLmM6IGluIEhUTUwsIGEgbmFtZSBpbiBhbiBpbnB1dCBpcyBub3QgYW4gSUQKCSogVE9ETzogYnVnIGxpc3QgdXBkYXRlCgpUdWUgT2N0IDI4IDE5OjU0OjM3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBuaWNvQHh0cmFkeW5lLmNvbSBmb3IgIzEyNTAzMAoKVHVlIE9jdCAyOCAxNjo0MjoxNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiBlcnJvci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZml4aW5nIGJ1ZyAjMTI1NjUzCgkgIHNvbWV0aW1lcyB0aGUgZXJyb3IgaGFuZGxlcnMgY2FuIGdldCBhIHBhcnNlciBjb250ZXh0IG9uIERURAoJICBlcnJvcnMsIGFuZCBzb21ldGltZSB0aGV5IGRvbid0LiBTbyBiZSB2ZXJ5IGNhcmVmdWwgd2hlbiB0cnlpbmcKCSAgdG8gZ3JhYiB0aG9zZSBpbmZvcm1hdGlvbnMuCgpUdWUgT2N0IDI4IDE1OjI2OjE4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIEthc2ltaWVyIEJ1Y2hjaWsgd2hpY2ggZml4ZXMgYSAKCSAgcHJvYmxlbSBpbiB4bWxTZWFyY2hOcyBpbnRyb2R1Y2VkIGluIDIuNi4wCgpUdWUgT2N0IDI4IDE0OjU3OjAzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCAjMTIzMjYzLCB0aGUgZW5jb2RpbmcgaXMgbWFuZGF0b3J5IGluIGEgdGV4dGRlY2wuCgpUdWUgT2N0IDI4IDEzOjQ4OjUyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4IGJ1ZyAjMTI1MDQ3IGFib3V0IHNlcmlhbGl6aW5nIHdoZW4gZmluZGluZyBhIAoJICBkb2N1bWVudCBmcmFnbWVudCBub2RlLgoKTW9uIE9jdCAyNyAxMToxMToyOSBFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0U0FYLmM6IGZpeCBidWcgIzEyNTU5MiBuZWVkIGEgTlVMTCBjaGVjawoJKiBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IHJlbmFtZSBhIHBhcmFtZXRlcgoKTW9uIE9jdCAyNyAwOTo0Mzo0OCBFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tICMxMjMxMDUgYWJvdXQgZGVmYXVsdGVkIGF0dHJpYnV0ZXMKCSAgZnJvbSBlbGVtZW50IGNvbWluZyBmcm9tIGFuIGVudGl0eQoKTW9uIE9jdCAyNyAyMToxMjoyNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbGxpbnQuYzogZml4ZWQgd2FybmluZyBtZXNzYWdlIGZyb20gSVJJWCAoYnVnIDEyNTE4MikKCSogcHl0aG9uL2xpYnhtbC5weTogcmVtb3ZlZCB0YWJzLCByZXBsYWNlZCB3aXRoIHNwYWNlcwoJICAoYnVnIDEyNTU3MikKCk1vbiBPY3QgMjcgMDY6MTc6MzAgRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmggcGFyc2VySW50ZXJuYWxzLmMgeG1sSU8uYzogbWFrZSBzdXJlIHdlIHJlcG9ydCBlcnJvcnMKCSAgaWYgeG1sTmV3SW5wdXRGcm9tRmlsZSgpIGZhaWxzLgoJKiB4bWxyZWFkZXIuYzogYXZvaWQgdXNpbmcgX3ByaXZhdGUgZm9yIHRoZSBub2RlIG9yIGRvY3VtZW50CgkgIGVsZW1lbnRzLgoKU2F0IE9jdCAyNSAxNzozMzo1OSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYWRkZWQgZGVjbGFyYXRpb24gZm9yIHZlck1pY3JvU3VmZml4CgpGcmkgT2N0IDI0IDIzOjA4OjE3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IGFwcGxpZWQgcGF0Y2ggZnJvbSBQYXRyaWNrIFdlbGNoZSBwcm92aWRlZCBpbgoJICBidWcgIzEyNTQzMiAsIGZ1dHVyZSBwcm9vZmluZyB0aGUgLm00IGZpbGUuCgkqIHBhcnNlci5jOiByZXNldHRpbmcgdGhlIGNvbnRleHQgc2hvdWxkIGFsc28gcmVzZXQgdGhlIGVycm9yCgkqIFRPRE86IHByb2JsZW0gb2YgY29uZm9ybWFuY2Ugdy5yLnQuIEUyMCB3YXMgcmFpc2VkIGluIHRoZQoJICBYTUwgQ29yZSB0ZWxjb25mIGFuZCBsaWJ4bWwyIGlzbid0IGNvbmZvcm1hbnQgdGhlcmUuCgpXZWQgT2N0IDIyIDE0OjMzOjA1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsZnJlZCBNaWNrYXV0c2NoIGZpeGluZyAjMTI1MTgwCgpXZWQgT2N0IDIyIDEwOjUwOjMxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaHZhbGlkLmMgZ2VuQ2hSYW5nZXMucHk6IFN0ZXBoYW5lIEJpZG91bCBwb2ludGVkIG91dCBhbm90aGVyCgkgIHNtYWxsIGdsaXRjaCBtaXNzaW5nIGEgY29uc3QKCldlZCBPY3QgMjIgMTA6NDM6MjEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNodmFsaWQuYyBnZW5DaFJhbmdlcy5weTogU3RlcGhhbmUgQmlkb3VsIHBvaW50ZWQgb3V0IHRoYXQKCSAgaXQgZG9lc24ndCBkZWZpbmUgSU5fTElCWE1MCgpUdWUgT2N0IDIxIDIxOjE0OjU1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogdHlwbyBwb2ludGVkIG91dCBieSBTdGVwaGFuZSBCaWRvdWwKClR1ZSBPY3QgMjEgMTE6MjY6MzYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYiB3aW4zMi9NYWtlZmlsZS5taW5ndyB3aW4zMi9NYWtlZmlsZS5tc3ZjCgkgIHdpbjMyL2NvbmZpZ3VyZS5qczogc2V0IG9mIFdpbjMyIHBhdGNoZXMgZm9yIDIuNi4wIGJ5IEpvYWNoaW0gQmF1Y2gKClR1ZSBPY3QgMjEgMDI6MDc6MjIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbGFzdCBtaW51dGUgcGF0Y2ggZnJvbSBFcmljIFp1cmNoZXIgbWFraW5nIGl0IGludG8gMi42LjAKClR1ZSBPY3QgMjEgMDI6MDM6MDMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTIGRvYy9saWJ4bWwyLnhzYTogcHJlcGFyaW5nIGxpYnhtbDItMi42LjAKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkb2NzIGFuZCBBUEkKClR1ZSBPY3QgMjEgMDE6MDE6NTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBlcnJvci5jIHRyZWUuYzogbW92ZWQgdGhlIGxpbmUgbnVtYmVyIHRvIHRoZWlyIHByb3BlcgoJICBmaWVsZCBpbiBlbGVtZW50cyBub3cuCgpUdWUgT2N0IDIxIDAwOjI4OjIwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4geG1sd3JpdGVyLmMgTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmgKCSAgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBhZGRlZCB0aGUgeG1sV3JpdGVyIG1vZHVsZSBjb250cmlidXRlZCBieSBBbGZyZWQgTWlja2F1dHNjaAoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIHJvb20gZm9yIGxpbmUgYW5kIGV4dHJhIGluZm9ybWF0aW9uCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXI2LnB5OiBidWdmaXhpbmcgc29tZSBwcm9ibGVtIHNvbWUKCSAgb2YgdGhlbSBpbnRyb2R1Y2VkIGluIFNlcHRlbWJlcgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmMgZG9jL2xpYnhtbDItYXBpLnhtbDogcmVnZW5lcmF0ZWQgdGhlIEFQSQoKTW9uIE9jdCAyMCAxOTowMjo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIHhtbGR3YWxrLmMgeG1scmVhZGVyLmMKCSAgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwveG1sZHdhbGsuaAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IHJlbW92aW5nIHhtbGR3YWxrIG1vZHVsZQoJICBzaW5jZSBpdCBnb3QgbWVyZ2VkIHdpdGggdGhlIHhtbHJlYWRlci4KCSogcGFyc2VyLmM6IGNsZWFudXAKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IGRvYy9saWJ4bWwyLWFwaS54bWw6CgkgIHJlYnVpbHQgdGhlIEFQSQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcjcucHkKCSAgcHl0aG9uL3Rlc3RzL3dhbGtlci5weTogYWRkaW5nIHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgdGhlCgkgIG5ldyB4bWxyZWFkZXIgQVBJcywgbmV3IEFQSXMgZm9yIHJlYWRlciBjcmVhdGlvbiwgaW5jbHVkaW5nCgkgIG1ha2VpbmcgcmVhZGVyICJ3YWxrZXIiIG9wZXJhdGluZyBvbiBwcmVwYXJzZWQgZG9jdW1lbnQgdHJlZXMuCgpTdW4gT2N0IDIwIDIyOjM3OjAzIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW50aXRpZXMuYywgdmFsaWQuYzogZml4ZWQgcHJvYmxlbSByZXBvcnRlZCBvbiB0aGUgbWFpbGluZwoJICBsaXN0IGJ5IE1lbHZ5biBTb3BhY3VhIC0gd3JvbmcgYXJndW1lbnQgb3JkZXIgb24gZnVuY3Rpb25zCgkgIGNhbGxlZCB0aHJvdWdoIHhtbEhhc2hTY2FuLgoKU3VuIE9jdCAxOSAyMzo1Nzo0NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyB4bWxJTy5jOiBmaXhlcyBmb3IgY29tcGlsaW5nIHVzaW5nIC0td2l0aC1taW5pbXVtCgpTdW4gT2N0IDE5IDIzOjQ2OjA0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGNsZWFudXAgeG1sTm9kZUdldENvbnRlbnQoKSByZXVzaW5nIHhtbE5vZGVCdWZHZXRDb250ZW50KCksCgkgIHRlc3RlZCBpdCB0aHJvdWdoIHRoZSB4c2x0IHJlZ3Jlc3Npb24gc3VpdGUuCgpTdW4gT2N0IDE5IDIyOjQyOjE2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRpbmcgeG1sTm9kZUJ1ZkdldENvbnRlbnQoKQoJICBhbGxvd2luZyB0byBncmFiIHRoZSBjb250ZW50IHdpdGhvdXQgZm9yY2luZyBhbGxvY2F0aW9ucy4KCSogcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgZG9jL2xpYnhtbDItYXBpLnhtbDogcmVidWlsdCB0aGUgQVBJCgkqIHhwYXRoLmMgeG1sZHdhbGsuYzogcmVtb3ZlZCBhIGNvdXBsZSBvZiBjb21tZW50IGVycm9ycy4KClN1biBPY3QgMTkgMTY6Mzk6MzYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hyaXMgQW5kZXJzb24gdG8gY2hhbmdlIGJhY2sKCSAgbWVtY21wIHdpdGggQ01QeCgpCgpTdW4gT2N0IDE5IDE2OjI0OjE5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIHRvIG5vdCBzZW5kIE5VTEwgdG8gJXMgcHJpbnRpbmcKCSogcHl0aG9uL3Rlc3RzL2Vycm9yLnB5IHJlc3VsdC9IVE1ML2RvYzMuaHRtLmVycgoJICByZXN1bHQvSFRNTC90ZXN0My5odG1sLmVyciByZXN1bHQvSFRNTC93aXJlZC5odG1sLmVycgoJICByZXN1bHQvdmFsaWQvdDgueG1sLmVyciByZXN1bHQvdmFsaWQvdDhhLnhtbC5lcnI6IGNsZWFuaW5nCgkgIHVwIHNvbWUgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgZXJyb3IKClN1biBPY3QgMTkgMTU6MzE6NDMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL25hbm9odHRwLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbElPLmggbmFub2h0dHAuYyBwYXJzZXJJbnRlcm5hbHMuYyB4bWxJTy5jOgoJICBGaXhlZCB0aGUgSFRUUDwtPnBhcnNlciBpbnRlcnJhY3Rpb24sIHdoaWNoIHNob3VsZCBmaXggMiBsb25nCgkgIHN0YW5kaW5nIGJ1Z3MgIzEwNDc5MCBhbmQgIzEyNDA1NCAsIHRoaXMgYWxzbyBmaXggdGhlIGZhY3QgdGhhdAoJICBIVFRQIGVycm9yIGNvZGUgKD4gNDAwKSBzaG91bGQgbm90IGdlbmVyYXRlIGRhdGEsIHdlIHVzdWFsbHkKCSAgZG9uJ3Qgd2FudCB0byBwYXJzZSB0aGUgSFRNTCBlcnJvciBpbmZvcm1hdGlvbiBpbnN0ZWFkIG9mIHRoZQoJICByZXNvdXJjZSBsb29rZWQgYXQuCgpTdW4gT2N0IDE5IDE5OjIwOjQ4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL01ha2VmaWxlLmFtOiBlbmhhbmNlZCB0aGUgaW5zdGFsbGF0aW9uIG9mIHR1dG9yaWFsIGZpbGVzCgkgIHRvIGF2b2lkIGluc3RhbGxpbmcgQ1ZTIHN1YmRpcmVjdG9yaWVzIChidWcgMTIyOTQzKQoKU3VuIE9jdCAxOSAxNzozMzoyNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbElPLmM6IGZpeGVkIHNlZ2ZhdWx0IHdoZW4gaW5wdXQgZmlsZSBub3QgcHJlc2VudAoJKiB0cmVlLmM6IGNoYW5nZWQgb3V0cHV0IGZvcm1hdHRpbmcgb2YgWE1MX0NEQVRBX1NFQ1RJT04KCSAgKGJ1ZyAxMjA5MTcpCgpTdW4gT2N0IDE5IDAwOjE1OjM4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMKCSAgU0FYMi5jIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIGVudGl0aWVzLmMgcGFyc2VyLmMgcmVsYXhuZy5jCgkgIHRlc3RTQVguYyB0cmVlLmMgdmFsaWQuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMKCSAgeHBhdGguYzogQ2hhbmdlZCBhbGwgKD8pIG9jY3VyZW5jZXMgd2hlcmUgdmFsaWRhdGlvbiBtYWNyb3MKCSAgKElTX3h4eCkgaGFkIHNpbmdsZS1ieXRlIGFyZ3VtZW50cyB0byB1c2UgSVNfeHh4X0NIIGluc3RlYWQKCSAgKGUuZy4gSVNfQkxBTksgY2hhbmdlZCB0byBJU19CTEFOS19DSCkuICBUaGlzIGdldHMgcmlkIG9mCgkgIG1hbnkgd2FybmluZyBtZXNzYWdlcyBvbiBjZXJ0YWluIHBsYXRmb3JtcywgYW5kIGFsc28gaGlnaC0KCSAgbGlnaHRzIHBsYWNlcyBpbiB0aGUgbGlicmFyeSB3aGljaCBtYXkgbmVlZCB0byBiZSBlbmhhbmNlZAoJICBmb3IgcHJvcGVyIFVURjggaGFuZGxpbmcuCgpTYXQgT2N0IDE4IDIwOjM0OjE4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuQ2hSYW5nZXMucHksIGNodmFsaWQuYywgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oLAoJICBkb2MvYXBpYnVpbGQucHk6IGVuaGFuY2VkIHRvIGluY2x1ZGUgZW5vdWdoIGNvbW1lbnRzIHRvCgkgIG1ha2UgdGhlIGFwaSBkb2MgZ2VuZXJhdGlvbiBoYXBweS4KClNhdCBPY3QgMTggMDc6Mjg6MjUgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2h0dHAuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL25hbm9odHRwLmg6IHN0YXJ0aW5nIHdvcmsKCSAgdG8gZml4IHRoZSBIVFRQL1hNTCBwYXJzZXIgaW50ZWdyYXRpb24uCgpTYXQgT2N0IDE4IDExOjA0OjMyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYWRkZWQgbmV3IEFQSXMKCSAgZm9yIGNyZWF0aW5nIHJlYWRlciBmcm9tIHNvdXJjZXMgb3IgcmV1c2luZyBhIHJlYWRlciB3aXRoCgkgIGEgbmV3IHNvdXJjZSwgbGlrZSB0aGUgeG1sUmVhZHh4IGFuZCB4bWxDdHh0UmVhZHh4eAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmMgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvYXBpYnVpbGQucHkKCSAgZG9jL01ha2VmaWxlLmFtOiByZWdlbmVyYXRlZCB0aGUgQVBJcwoJKiBkb2MveG1sLmh0bWw6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIFN0ZWZhbiBLb3N0IGZvciBuYW1lc2FwY2UgZG9jcwoKU2F0IE9jdCAxOCAxMjo0NjowMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlbkNoUmFuZ2VzLnB5LCBjaHZhbGlkLmMsIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaCwKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IGVuaGFuY2VkIG1hY3JvcyB0byBhdm9pZAoJICBicmVha2luZyBBQkkgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy4KCSogY2F0YWxvZy5jLCBwYXJzZXIuYywgdHJlZS5jOiBtb2RpZmllZCB0byB1c2UgSVNfKiBtYWNyb3MKCSAgZGVmaW5lZCBpbiBwYXJzZXJJbnRlcm5hbHMuaC4gIE1ha2VzIG1haW50ZW5hbmNlIG11Y2ggZWFzaWVyLgoJKiB0ZXN0SFRNTC5jLCB0ZXN0U0FYLmMsIHB5dGhvbi9saWJ4bWwuYzogbWlub3IgZml4ZXMgdG8gYXZvaWQKCSAgY29tcGlsYXRpb24gd2FybmluZ3MKCSogY29uZmlndXJhdGlvbi5pbjogZml4ZWQgcHVzaEhUTUwgdGVzdCBlcnJvcjsgZW5oYW5jZWQgZm9yCgkgIGJldHRlciBkZXZlbCAobWUpIHRlc3RpbmcKCkZyaSBPY3QgMTcgMTQ6Mzg6NTQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxlZ2FjeS5jOiByZW1vdmUgdGhlIHdhcm5pbmcgZm9yIHN0YXJ0RG9jdW1lbnQoKSwgYXMgaXQgaXMgdXNlZCBieQoJICBnbGFkZSAob3IgZ2xhZGUtcHl0aG9uKQoJKiBwYXJzZXIuYyByZWxheG5nLmMgeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGFuIGFzc29ydGVkIHNldCBvZgoJICBpbnZhbGlkIGFjY2Vzc2VzIGZvdW5kIGJ5IHJ1bm5pbmcgc29tZSBQeXRob24gYmFzZWQgcmVncmVzc2lvbgoJICB0ZXN0cyB1bmRlciB2YWxncmluZC4gVGhlcmUgaXMgc3RpbGwgYSBmZXcgbGVha3MgcmVwb3J0ZWQgYnkgdGhlCgkgIHJlbGF4bmcgcmVncmVzc2lvbnMgd2hpY2ggbmVlZCBzb21lIGF0dGVudGlvbi4KCSogZG9jL01ha2VmaWxlLmFtOiBmaXhlZCBhIG1ha2UgaW5zdGFsbCBwcm9ibGVtIGMuZi4gIzEyNDUzOQoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDogYWRkaXRpb24gb2YgeG1sUGFyc2VyTWF4RGVwdGgKCSAgcGF0Y2ggZnJvbSBjcnV0Y2hlcgoKV2VkIE9jdCAxNSAxMjo0NzozMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IE1hcmMgTGl5YW5hZ2UgcG9pbnRlZCBvdXQgdGhhdCB4bWxDbGVhbnVwUGFyc2VyKCkKCSAgd2FzIG1pc3NpbmcgeG1sQ2xlYW51cElucHV0Q2FsbGJhY2tzIGFuZCB4bWxDbGVhbnVwT3V0cHV0Q2FsbGJhY2tzCgkgIGNhbGxzLgoKV2VkIE9jdCAxNSAxMDoxNjo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdm1zL2J1aWxkX2xpYnhtbC5jb20gdHJpb25hbi5jOiBWTVMgcGF0Y2ggZnJvbSBDcmFpZyBBLiBCZXJyeQoKTW9uIE9jdCAxMyAyMTo0NjoyNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IHNtYWxsIGZpeCBmcm9tIEJqb3JuIFJlZXNlCgpNb24gT2N0IDEzIDE1OjU5OjI1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggYSBjYWxsIG1pc3NpbmcgYXJndW1lbnRzCgpTdW4gT2N0IDEyIDE4OjQyOjE4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuQ2hSYW5nZXMucHksIGNodmFsaWQuYywgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOiBmaXhlZAoJICBhIGJ1ZyBpbiB0aGUgcmFuZ2Ugc2VhcmNoOyBlbmhhbmNlZCByYW5nZSBnZW5lcmF0aW9uIChpbmxpbmUgY29kZQoJICBpZiBhIHNtYWxsIG51bWJlciBvZiBpbnRlcnZhbHMpOyBlbmhhbmNlZCB0aGUgcmVhZGFiaWxpdHkgb2YgdGhlCgkgIG91dHB1dCBmaWxlcy4KClN1biBPY3QgMTIgMDA6NTI6MTQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNodmFsaWQuZGVmIGNodmFsaWQuYyBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IHJlYnVpbHQgCgkgIGNodmFsaWQuZGVmIGZyb20gc2NyYXRjaCBiYXNlZCBvbiBYTUwgMm5kIGVkaXRpb24gUkVDCgkgIGFuZCByZWdlbmVyYXRlZCB0aGUgY29kZS4KClNhdCBPY3QgMTEgMjI6NTQ6MTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiByZW1vdmVkIHNvbWUgYW5ub3lpbmcgd2FybmluZ3MKCSogY2h2YWxpZC5kZWYgY2h2YWxpZC5jIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDogZml4ZWQgYSBidWcKCSAgaW4gdGhlIFB1YmlkQ2hhcnMgZGVmaW5pdGlvbiwgcmVnZW5lcmF0ZWQsIHRoZXJlIGlzIHN0aWxsCgkgIGEgYnVnIGxlZnQgc29tZXdoZXJlCgkqIGdlbkNoUmFuZ2VzLnB5OiBzYXZlIHRoZSBoZWFkZXIgZGlyZWN0bHkgaW4gaW5jbHVkZS9saWJ4bWwvCgkqIGNvbmZpZ3VyZS5pbjogSSBnZW5lcmF0ZWQgYSAyLjYuMGJldGE2IGVhcmxpZXIgdG9kYXkKClNhdCBPY3QgMTEgMjM6MzI6NDcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBmaXhlZCBzbWFsbCBlcnJvciBvbiBwcmV2aW91cyBjb21taXQgKGNodmFsaWQuaCBpbgoJICBiYXNlIGRpciBpbnN0ZWFkIG9mIGluY2x1ZGUgZGlyZWN0b3J5KQoKU2F0IE9jdCAxMSAyMzoxMToyMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlbkNoUmFuZ2UucHksIGNodmFsaWQuZGVmLCBjaHZhbGlkLmMsIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDoKCSAgbmV3IGZpbGVzIGZvciBhIGRpZmZlcmVudCBtZXRob2QgZm9yIGRvaW5nIHJhbmdlIHZhbGlkYXRpb24KCSAgb2YgY2hhcmFjdGVyIGRhdGEuCgkqIE1ha2VmaWxlLmFtLCBwYXJzZXJJbnRlcm5hbHMuYywgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0sCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBtb2RpZmllZCBmb3IgbmV3IHJhbmdlIG1ldGhvZC4KCSogY2F0YWxvZy5jOiBzbWFsbCBlbmhhbmNlIGZvciB3YXJuaW5nIG1lc3NhZ2UgKHVzaW5nIG9uZQoJICBvZiB0aGUgbmV3IHJhbmdlIHJvdXRpbmVzKQoKU2F0IE9jdCAxMSAxMzoyNDo1NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBhZGRpbmcgYW4gc2Vycm9yIGZpZWxkIHRvCgkgIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQgYnJlYWtzIHRoZSBBQkkgZm9yIHRoZSB4bWxQYXJzZXJDdHh0CgkgIHN0cnVjdHVyZSBzaW5jZSBpdCdzIGVtYmVkZGVkIGJ5IGNvbnRlbnQgYW5kIG5vdCBieSByZWZlcmVuY2UKClNhdCBPY3QgMTEgMTI6NDY6NDkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcGF0Y2ggZnJvbSBNaWtlIEhvbW1leQoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgV2luZG93cyBwYXRjaCBmcm9tIEplc3NlIFBlbHRvbiBhbmQgU3RlcGhhbmUKCSAgQmlkb3VsCgkqIHBhcnNlci5jOiBmaXggdGhlIHBvdGVudGlhbGx5IG5hc3R5IGFjY2VzcyB0byBjdHh0LT5zZXJyb3IKCSAgd2l0aG91dCBjaGVja2luZyBmaXJzdCB0aGF0IHRoZSBTQVggYmxvY2sgaXMgdmVyc2lvbiAyCgpGcmkgT2N0IDEwIDIxOjM0OjAxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmM6IGZpeGVkIGEgbmFzdHkgYnVnIHdpdGggaW50ZXJuaW5nIHNvbWUgdGV4dCBzdHJpbmdzCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZSBmb3IgYmV0YTUgb2YgMi42LjAKCSogbGlieG1sLmggbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOgoJICBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgZm9yIEkvTyBhbmQgY29udmVydGVkIEZUUCBhbmQgSFRUUAoJKiBwYXJzZXIuYzogZml4ZWQgYW5vdGhlciBidWcKCkZyaSBPY3QgMTAgMTY6NDU6MjAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogZml4ZWQgdW5pbml0aWFsaXplZCBuZXcgZmllbGQuCgkqIHJlc3VsdC9WQy9PbmVJRDIgcmVzdWx0L3JlbGF4bmcvKi5lcnI6IGZpeGVkIGEgdHlwbyB1cGRhdGluZwoJICBhbGwgbWVzc2FnZXMKCkZyaSBPY3QgMTAgMTY6MTk6MTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogbWFrZSByb29tIGluIERvYywgRWxlbWVudCwgQXR0cmlidXRlcwoJICBmb3IgUFNWSSB0eXBlIGluZm9ybWF0aW9ucy4KCkZyaSBPY3QgMTAgMTY6MDg6MDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBjMTRuLmMgY2F0YWxvZy5jIGVycm9yLmMgZ2xvYmFscy5jIHBhcnNlci5jCgkgIHBhcnNlckludGVybmFscy5jIHJlbGF4bmcuYyB2YWxpZC5jIHhpbmNsdWRlLmMgeG1sSU8uYyB4bWxyZWdleHAuYwoJICB4bWxzY2hlbWFzLmMgeHBhdGguYyB4cG9pbnRlci5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBTZXR0aW5nIHVwIHRoZSBmcmFtZXdvcmsgZm9yIHN0cnVjdHVyZWQKCSAgZXJyb3IgcmVwb3J0aW5nLCB0b3VjaGVzIGEgbG90IG9mIG1vZHVsZXMsIGJ1dCBsaXR0bGUgY29kZSBub3cKCSAgdGhlIGVycm9yIGhhbmRsaW5nIHRyYWlsIGhhcyBiZWVuIGNsZWFuZWQgdXAuCgpGcmkgT2N0IDEwIDE0OjI5OjQyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogY29udmVydGVkIHRoZSBDMTROIG1vZHVsZSB0b28KCkZyaSBPY3QgMTAgMTM6NDA6NTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGNsZWFudXAKCSogeHBvaW50ZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBtaWdyYXRlZCBYUG9pbnRlciBtb2R1bGUKCSAgdG8gdGhlIG5ldyBlcnJvciBtZWNoYW5pc20KCkZyaSBPY3QgMTAgMTI6NDk6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgeG1sc2NoZW1hcy5jOiBhIGJpdCBvZiBjbGVhbnVwCgkqIHJlc3VsdC9zY2hlbWFzLyouZXJyOiB1cGRhdGVkIHdpdGggdGhlIG5ldyByZXN1bHQgc3RyaW5ncwoKRnJpIE9jdCAxMCAwMzo1ODozOSBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAxMjQwNjEKCkZyaSBPY3QgMTAgMDI6NDc6MjIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwCgkqIGVuY29kaW5nLmM6IGZpeCBhIGZ1bm55IHR5cG8KCSogZXJyb3IuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDoKCSAgY29udmVydGVkIHRoZSBTY2hlbWFzIGNvZGUgdG8gdGhlIG5ldyBlcnJvciBoYW5kbGluZy4gUElUQSwKCSAgc3RpbGwgbmVlZCB0byBjaGVjayBvdXRwdXQgZnJvbSByZWdyZXNzaW9uIHRlc3RzLgoKVGh1IE9jdCAgOSAxNToxMzo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBjb252ZXJ0ZWQgdG9vCgkqIHRyZWUuYzogc21hbGwgY2xlYW51cAoKVGh1IE9jdCAgOSAxMzo0NDo1NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogY29tbWVudCBmaXgKCSogY2F0YWxvZy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1pZ3JhdGluZyB0aGUgY2F0YWxvZyBjb2RlCgkgIHRvIHRoZSBuZXcgaW5mcmFzdHJ1Y3R1cmUKClRodSBPY3QgIDkgMDA6MzY6MDMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpbmFsIGVycm9yIGhhbmRsaW5nIGNsZWFudXAKCSogeGluY2x1ZGUuYyBlcnJvci5jOiBjb252ZXJ0ZWQgWEluY2x1ZGUgdG8gdGhlIG5ldyBlcnJvciBoYW5kbGluZwoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhZGRlZCBYSW5jbHVkZSBlcnJvcnMKCldlZCBPY3QgIDggMjM6MzE6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBidWcgaW4gY29tcHJlc3Npb24gc2F2aW5nIHdhcyBjcmFzaGluZyBnYWxlb24KCSAgcmVwb3J0ZWQgYnkgdGV1ZgoKV2VkIE9jdCAgOCAyMToxODoxMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyB0cmVlLmMgeG1sSU8uYyB4bWxsaW50LmM6IG1vcmUgY2xlYW51cCB0aHJvdWdoIHRoZQoJICBJL08gZXJyb3IgcGF0aAoKV2VkIE9jdCAgOCAyMDo1NzoyNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYmV0dGVyIGhhbmRsaW5nIG9mIGVycm9yIGNhc2VzCgpXZWQgT2N0ICA4IDEzOjUxOjE0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBmaXJzdCBwYXNzIGF0CgkgIGNsZWFuaW5nIHVwIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJL08gbW9kdWxlLgoKV2VkIE9jdCAgOCAxMDo1MjowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZXJyb3IgaGFuZGxpbmcKCSAgY2xlYW51cCBvZiB0aGUgUmVnZXhwIG1vZHVsZS4KCldlZCBPY3QgIDggMDE6MDk6MDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogY29udmVydGluZyB0aGUgdHJlZSBtb2R1bGUgdG9vCgkqIGVycm9yLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogY3JlYXRlZCBhIHNpbXBsZXIgaW50ZXJuYWwKCSAgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLgoKVHVlIE9jdCAgNyAyMzoxOTozOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIGluY2x1ZGUvbGlieG1sL3hwYXRoLmgKCSAgaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaCB4cGF0aC5jOiBjbGVhbmluZyB1cCBYUGF0aAoJICBlcnJvciByZXBvcnRpbmcgdGhhdCB0aW1lLiAKCSogdGhyZWFkcy5jOiBhcHBsaWVkIHRoZSB0d28gcGF0Y2hlcyBmb3IgVExTIHRocmVhZHMKCSAgb24gV2luZG93cyBmcm9tIEplc3NlIFBlbHRvbgoJKiBwYXJzZXIuYzogdGlueSBzYWZldHkgcGF0Y2ggZm9yIHhtbFN0clByaW50ZigpIG1ha2Ugc3VyZSB0aGUKCSAgcmV0dXJuIGlzIGFsd2F5cyB6ZXJvIHRlcm1pbmF0ZWQuIFNob3VsZCBhbHNvIGhlbHAgZGV0ZWN0aW5nCgkgIHBhc3Npbmcgd3JvbmcgYnVmZmVyIHNpemUgZWFzaWxseS4KCSogcmVzdWx0L1ZDLyogcmVzdWx0L3ZhbGlkL3Jzcy54bWwuZXJyIHJlc3VsdC92YWxpZC94bGluay54bWwuZXJyOgoJICB1cGRhdGVkIHRoZSByZXN1bHRzIHRvIGZvbGxvdyB0aGUgZXJyb3JzIHN0cmluZyBnZW5lcmF0ZWQgYnkKCSAgbGFzdCBjb21taXQuCgpUdWUgT2N0ICA3IDE0OjE2OjQ1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbGFzdCBjbGVhbnVwIG9mIGVycm9yCgkgIGhhbmRsaW5nIGluIHRoZSBSZWxheC1ORyBtb2R1bGUuCgpUdWUgT2N0ICA3IDEzOjMwOjM5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBzd2l0Y2hlZCBSZWxheC1ORwoJICBtb2R1bGUgdG8gdGVoIG5ldyBlcnJvciByZXBvcnRpbmcuIEJldHRlciBkZWZhdWx0IHJlcG9ydCwgYWRkcwoJICB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIGlmIGZvdW5kLCBjb250ZXh0IGFuZCBub2RlIGFyZSBpbmNsdWRlZAoJICBpbiB0aGUgeG1sRXJyb3IKCSogcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IHRoZSBlcnJvciBtZXNzYWdlcyBjaGFuZ2VkLgoJKiByZXN1bHQvcmVsYXhuZy8qOiBlcnJvciBtZXNzYWdlIGNoYW5nZWQgdG9vLgoKTW9uIE9jdCAgNiAxMDo0NjozNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiIHdpbjMyL01ha2VmaWxlLm1pbmd3IHdpbjMyL01ha2VmaWxlLm1zdmMKCSAgd2luMzIvY29uZmlndXJlLmpzOiBhcHBsaWVkIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvCgkgIGZpeCB0aGUgY29tcGlsYXRpb24gb2YgMi42LjAgY29kZSBvbiBXaW4zMgoKTW9uIE9jdCAgNiAxMDoxNjozMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGZpeGluZyB0aGUgc2NyaXB0CgkqIHBhcnNlci5jOiByZXBsYWNlIHNlcXVlbmNlcyBvZiBSQVcgJiYgTlhUKC4pID09ICcuJyB3aXRoCgkgIG1lbWNtcCBjYWxscywgc2VlbXMgdG8gbm90IGJyZWFrIGNvbmZvcm1hbmNlLCBzbGlnaHRseSBpbmZsYXRlCgkgIHRoZSBzaXplIG9mIHRoZSBnY2MgZ2VuZXJhdGVkIGNvZGUgdGhvdWdoLgoKU3VuIE9jdCAgNSAyMzozMDo0OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmMgdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDoKCSAgbW9yZSBjbGVhbnVwIG9mIGVycm9yIGhhbmRsaW5nIGluIHBhcnNlckludGVybmFscywgc2hhcmluZyB0aGUKCSAgcm91dGluZSBmb3IgbWVtb3J5IGVycm9ycy4KClN1biBPY3QgIDUgMTU6NDk6MTQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBNYWtlZmlsZS5hbSBsZWdhY3kuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBtb3JlIGNvZGUgY2xlYW51cCwgZXNwZWNpYWxseSBhcm91bmQKCSAgZXJyb3IgbWVzc2FnZXMsIHRoZSBIVE1MIHBhcnNlciBoYXMgbm93IGJlZW4gdXBncmFkZWQgdG8gdGhlIG5ldwoJICBoYW5kbGluZy4KCSogcmVzdWx0L0hUTUwvKjogYSBmZXcgY2hhbmdlcyBpbiB0aGUgcmVzdWx0aW5nIGVycm9yIG1lc3NhZ2VzCgpTYXQgT2N0ICA0IDIzOjA2OjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBtb3JlIGVycm9yL3dhcm5pbmcKCSAgaGFuZGxpbmcgY2xlYW51cHMsIHRoZSBYTUwgcGFyc2VyIG1vZHVsZSBzaG91bGQgYmUgb2theSBub3cuCgpTYXQgT2N0ICA0IDAxOjU4OjI3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4geG1sZHdhbGsuYyBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJICBpbmNsdWRlL2xpYnhtbC94bWxkd2Fsay5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgaW50ZWdyYXRlZCB0aGUgeG1sRG9jV2Fsa2VyIEFQSSBnaXZlbiBieSBBbGZyZWQgTWlja2F1dHNjaCwKCSAgYW5kIHByb3ZpZGluZyBhbiB4bWxSZWFkZXIgbGlrZSBBUEkgYnV0IHdvcmtpbmcgb24gYSB4bWxEb2NQdHIuCgpTYXQgT2N0ICA0IDAwOjE4OjI5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogbW9yZSBjbGVhbnVwIGluIG1ha2UgdGVzdHMKCSogZXJyb3IuYyB2YWxpZC5jIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1vcmUgd29yawoJICBpbiB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IGVycm9yIHJlcG9ydGluZyBzdHJhdGVneS4KCSogcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkgIHJlc3VsdC9WQy8qIHJlc3VsdC92YWxpZC8qOgoJICBmZXcgY2hhbmdlcyBpbiB0aGUgc3RyaW5ncyBnZW5lcmF0ZWQgYnkgdGhlIHZhbGlkYXRpb24gb3V0cHV0CgpGcmkgT2N0ICAzIDAwOjE5OjAyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2hhbmdlZCAnbWFrZSB0ZXN0cycgdG8gdXNlIGEgY29uY2lzZSBvdXRwdXQsCgkgIHNjcm9sbGluZyB0byBzZWUgd2hlcmUgdGhpbmcgYnJva2Ugd2Fzbid0IHBsZWFzYW50CgkqIGNvbmZpZ3VyZS5pbjogc29tZSBiZXRhNCBwcmVwYXJhdGlvbiwgYnV0IG5vdCByZWFkeSB5ZXQKCSogZXJyb3IuYyBnbG9iYWxzLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6CgkgIG5ldyBlcnJvciBoYW5kbGluZyBjb2RlLCBsYXN0IGVycm9yIGluZm9ybWF0aW9ucyBhcmUgc3RvcmVkCgkgIGluIHRoZSBwYXJzaW5nIGNvbnRleHQgb3IgYSBnbG9iYWwgdmFyaWFibGUsIG5ldyBBUElzIHRvCgkgIGhhbmRsZSB0aGUgeG1sRXJyb3JQdHIgdHlwZS4KCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdmFsaWQuYyA6IHN0YXJ0ZWQgbWlncmF0aW5nIHRvIHRoZQoJICBuZXcgZXJyb3IgaGFuZGxpbmcgY29kZSwgaXQncyBhIHJveWFsIHBhaW4uCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOgoJICBtb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZiB4bWxOZXdQYXJzZXJDdHh0KCkKCSogcGFyc2VyLmM6IHNtYWxsIHBvdGVudGlhbCBidWZmZXIgYWNjZXNzIHByb2JsZW0gaW4gcHVzaCBjb2RlCgkgIHByb3ZpZGVkIGJ5IEp1c3RpbiBGbGV0Y2hlcgoJKiByZXN1bHQvKi5zYXggcmVzdWx0L1ZDL1BFTmVzdGluZyogcmVzdWx0L25hbWVzcGFjZXMvKgoJICByZXN1bHQvdmFsaWQvKi5lcnI6IHNvbWUgZXJyb3IgbWVzc2FnZXMgd2VyZSBzbGlndGhseSBjaGFuZ2VkLgoKVGh1IE9jdCAgMiAxMzowMToxMyAyMDAzICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jOiBpbnRyb2R1Y2VkIHhtbFN0clByaW50ZgoJZnVuY3Rpb24gKHdyYXBwZXIgYXJvdW5kIHNucHJpbnRmKQoKV2VkIE9jdCAgMSAyMToxMjowNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogRml4IGVycm9yIG9uIG91dHB1dCBvZiBoaWdoIGNvZGVwb2ludCBjaGFycmVmIGxpa2UKCSAgJiN4MTBGRkZGOyAsIHJlcG9ydGVkIGJ5IEVyaWMgSGFuY2hyb3cKCldlZCBPY3QgIDEgMTQ6MjA6MTAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9ET0NCcGFyc2VyLmg6IGxldCdzIHNlZSBob3cgbXVjaAoJICBvZiBhIHBhaW4gbXVycmF5YyBpcyByZWFsbHkgZ29ubmEgYmUuCgpXZWQgT2N0ICAxIDExOjAzOjQwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogQXBwbGllZCBmaXggZm9yIGJ1ZyAjMTIzNDgxIHJlcG9ydGVkIGJ5IFBldGVyIERlcnIKClR1ZSBTZXAgMzAgMTU6MzQ6MzEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmMgbGVnYWN5LmMgcGFyc2VyLmM6IG1hZGUgdGhlIHByZWRlZmluZWQgZW50aXRpZXMKCSAgc3RhdGljIHByZWRlZmluZWQgc3RydWN0dXJlcyB0byBhdm9pZCB0aGUgd29yaywgbWVtb3J5IGFuZAoJICBoYXphcmRzIGFzc29jaWF0ZWQgdG8gaW5pdGlhbGl6YXRpb24vY2xlYW51cC4KClR1ZSBTZXAgMzAgMTQ6MzA6NDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gbGVnYWN5LmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgdGVzdEhUTUwuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogYWRkZWQgYSBuZXcgY29uZmlndXJlCgkgIG9wdGlvbiAtLXdpdGgtcHVzaCwgc29tZSBjbGVhbnVwcywgY2hhc2VkIGNvZGUgc2l6ZSBhbm9tYWxpZXMuCgkgIE5vdyBhIGxpYnJhcnkgY29uZmlndXJlZCAtLXdpdGgtbWluaW11bSBpcyBhcm91bmQgMTUwS0IsCgkgIHNvdW5kcyBnb29kIGVub3VnaC4KClR1ZSBTZXAgMzAgMTI6MzE6MDAgQUVTVCAyMDAzIE1hbGNvbG0gVHJlZGlubmljayA8bWFsY29sbUBjb21tc2VjdXJlLmNvbS5hdT4KCgkqIGxpYnhtbC0yLjAtdW5pbnN0YWxsZWQucGMuaW46IE5ldyBmaWxlIGZvciBidWlsZGluZyBhZ2FpbnN0Cgl1bmluc3RhbGxlZCBsaWJ4bWwyIGJ1aWxkcy4KCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbTogU3VwcG9ydCB0aGUgKi11bmluc3RhbGxlZC5wYyBmaWxlLgoJKiAuY3ZzaWdub3JlOiBJZ25vcmUgdGhlIG5ldyBnZW5lcmF0ZWQgKi5wYyBmaWxlLgoKVHVlIFNlcCAzMCAwMjozODoxNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gU0FYLmMgU0FYMi5jIGNvbmZpZ3VyZS5pbiBnbG9iYWxzLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgdGVzdFJlYWRlci5jIHRlc3RTQVguYyB4bWxJTy5jIHhtbGxpbnQuYwoJICB4bWxyZWFkZXIuYyBleGFtcGxlL2dqb2JyZWFkLmMgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBhZGRlZCAyIG5ldyBjb25maWd1cmUgb3B0aW9uOiAtLXdpdGgtcmVhZGVyIC0td2l0aC1zYXgxCgkgIHRvIGFsbG93IHJlbW92aW5nIHRoZSByZWFkZXIgb3Igbm9uLXhtbFJlYWR4eHgoKSBpbnRlcmZhY2VzLgoKTW9uIFNlcCAyOSAxOTo1ODoyNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGVudGl0aWVzLmMgdHJlZS5jIHZhbGlkLmMgeG1sbGludC5jCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIEFkZGluZyBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gcmVtb3ZlIHRyZWUgbWFuaXB1bGF0aW9uCgkgIGNvZGUgd2hpY2ggaXMgbm90IHN0cmljdGx5IG5lZWRlZCBieSB0aGUgcGFyc2VyLgoKTW9uIFNlcCAyOSAxNToyMzo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IGxhc3QgZmluaXNoaW5nIHRvdWNoIHRvIHRoZSBCZU9TCgkgIHBhdGNoIGZyb20gTWFyY2luICdTaGFyZCcgS29uaWNraQoKTW9uIFNlcCAyOSAxNToxNTowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBTQVgyLmMgYzE0bi5jIGNhdGFsb2cuYyBjb25maWd1cmUuaW4gZGVidWdYTUwuYwoJICBlbmNvZGluZy5jIGVudGl0aWVzLmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgcmVsYXhuZy5jCgkgIHRlc3RBdXRvbWF0YS5jIHRlc3RDMTROLmMgdGVzdEhUTUwuYyB0ZXN0UmVnZXhwLmMgdGVzdFJlbGF4LmMKCSAgdGVzdFNjaGVtYXMuYyB0ZXN0WFBhdGguYyB0aHJlYWRzLmMgdHJlZS5jIHZhbGlkLmMgeG1sSU8uYwoJICB4bWxjYXRhbG9nLmMgeG1sbGludC5jIHhtbG1lbW9yeS5jIHhtbHJlYWRlci5jIHhtbHNjaGVtYXMuYwoJICBleGFtcGxlL2dqb2JyZWFkLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaCBpbmNsdWRlL2xpYnhtbC9jMTRuLmgKCSAgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmgKCSAgaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaCBpbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oCgkgIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KCSAgaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaCBweXRob24vbGlieG1sLmM6CgkgIE9rYXkgdGhpcyBpcyBzY2FyeSBidXQgaXQgaXMganVzdCBhZGRpbmcgYSBjb25maWd1cmUgb3B0aW9uCgkgIHRvIGRpc2FibGUgb3V0cHV0LCB0aGlzIHRvdWNoZXMgbW9zdCBvZiB0aGUgZmlsZXMuCgpNb24gU2VwIDI5IDEyOjUzOjU2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogYmV0dGVyIGZpeCwgYXZvaWRzIGJyZWFraW5nIHRoZSBweXRob24gYmluZGluZ3MKCk1vbiBTZXAgMjkgMTE6MjE6MzMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBmaXggYSBjb21waWxhdGlvbiBwcm9ibGVtIHdoZW4gY29uZmlndXJpbmcKCSAgd2l0aCBkZWJ1ZyBidXQgd2l0aG91dCBtZW0tZGVidWcKClN1biBTZXAgMjggMjA6NTM6MTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwLCBjcmVhdGluZyBhIG5ldyBsZWdhY3kuYyBtb2R1bGUsCgkgIG1hZGUgc3VyZSBtYWtlIHRlc3RzIHJhbiBpbiByZWR1Y2VkIGNvbmRpdGlvbnMKCSogU0FYLmMgU0FYMi5jIGNvbmZpZ3VyZS5pbiBlbnRpdGllcy5jIGdsb2JhbHMuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdmFsaWQuYyB4bGluay5jIHhtbElPLmMgeG1sY2F0YWxvZy5jCgkgIHhtbG1lbW9yeS5jIHhwYXRoLmMgeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBpbmNyZWFzZWQgdGhlIG1vZHVsYXJpemF0aW9uLCBhbGxvdyB0byBjb25maWd1cmUgb3V0IAoJICB2YWxpZGF0aW9uIGNvZGUgYW5kIGxlZ2FjeSBjb2RlLCBhZGRlZCBhIGNvbmZpZ3VyYXRpb24KCSAgb3B0aW9uIC0td2l0aC1taW5pbXVtIGNvbXBpbGluZyBvbmx5IHRoZSBtYW5kYXRvcnkgY29kZQoJICB3aGljaCB0aGVuIHNocmluayB0byAyMDBLQi4KClN1biBTZXAgMjggMDI6MTU6MDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXggYSBidWcgcmFpc2VkIGJ5IHRoZSBNaXBzIGNvbXBpbGVyLgoJKiBpbmNsdWRlL2xpYnhtbC9TQVguaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogbW92ZSB0aGUgCgkgIFNBWHYxIGJsb2NrIGRlZmluaXRpb25zIHRvIHBhcnNlci5oIGZpeGVzIGJ1ZyAjMTIzMzgwCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiByZWluc3RhbmNpYXRlCgkgIHRoZSBhdHRyaWJ1dGUgYW5kIGVsZW1lbnQgcG9vbCBib3JrZW4gMiBjb21taXRzIGFnby4KCSAgU3RhcnQgcGxheWluZyB3aXRoIGFuIGVudHJ5IHBvaW50IHRvIHByZXNlcnZlIGEgc3VidHJlZS4KCSogZW50aXRpZXMuYzogcmVtb3ZlIGEgd2FybmluZy4KClNhdCBTZXAgMjcgMTI6MTk6MzggUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jLCBwYXJzZXIuYywgcmVsYXhuZy5jOiBmdXJ0aGVyIChmaW5hbD8pIG1pbm9yCgkgIGNoYW5nZXMgZm9yIGNvbXBpbGF0aW9uIHdhcm5pbmdzLiBObyBjaGFuZ2UgdG8gbG9naWMuCgpGcmkgU2VwIDI2IDE4OjAzOjQyIFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGZpeGVkIHNtYWxsIHByb2JsZW0gd2l0aCBtaXNzaW5nIGVudGl0aWVzICh0ZXN0L2VudDIpCgpTYXQgU2VwIDI3IDAxOjI1OjM5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogV2lsbGlhbSdzIGNoYW5nZSBhbGxvd2VkIHRvIHNwb3QgYSBuYXN0eSBidWcgaW4geG1sRG9SZWFkCgkgIGlmIHRoZSByZXN1bHQgaXMgbm90IHdlbGwgZm9ybWVkIHRoYXQgY3R4dC0+bXlEb2MgaXMgbm90IE5VTEwKCSAgYW5kIHVzZXMgdGhlIGNvbnRleHQgZGljdGlvbm5hcnkuCgpGcmkgU2VwIDI2IDIxOjA5OjM0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogb3RoZXIgcGF0Y2hlcyBmcm9tIFdpbGxpYW0gQnJhY2sgdG8gYXZvaWQKCSAgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gQUlYLgoKRnJpIFNlcCAyNiAxMTowMzowOCBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYywgZW50aXRpZXMuYywgeG1scmVhZGVyLmM6IG1pbm9yIGNoYW5nZSB0bwoJICBhdm9pZCBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiBzb21lIChlLmcuIEFJWCkgc3lzdGVtcwoKRnJpIFNlcCAyNiAxNjo0OToyNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIGEgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBwcm9ibGVtCgkgIHdoZW4gZm9ybWF0dGluZyAiZGVwcmVjYXRlZCBTQVh2MSBmdW5jdGlvbiBpZ25vcmFibGVXaGl0ZXNwYWNlIgoJICBjb3VsZCBiZSByZXByb2R1Y2VkIGJ5IHhtbGxpbnQgLS1mb3JtYXQKCkZyaSBTZXAgMjYgMTU6NTA6NDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlYnVpbHQgdGhlIEFQSQoJKiB4bWxsaW50LmMgZG9jL3htbGxpbnQuMSBkb2MveG1sbGludC54bWw6IGFkZGVkIHRoZSBuZXcgb3B0aW9ucwoJICAtLW5vY2RhdGEgYW5kIC0tbnNjbGVhbiB0byByZW1vdmUgQ0RBVEEgc2VjdGlvbiBhbmQgc3VycGVyZmx1b3VzCgkgIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMKCSogcGFyc2VyLmMgU0FYMi5jOiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgMiBuZXcgb3B0aW9ucwoKRnJpIFNlcCAyNiAxNDo0MTo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHRlc3RIVE1MLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDoKCSAgYWRkZWQgdGhlIHNhbWUgaHRtbFJlYWQgQVBJcyB0aGFuIHRoZWlyIFhNTCBjb3VudGVycGFydHMKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IG5ldyBwYXJzZXIgb3B0aW9ucywgbm90IHlldCBpbXBsZW1lbnRlZCwKCSAgYWRkZWQgYW4gb3B0aW9ucyBmaWVsZCB0byB0aGUgY29udGV4dC4KCSogdHJlZS5jOiBwYXRjaCBmcm9tIFNoYXVuIE1jQ2FuY2UgdG8gZml4IGJ1ZyAjMTIzMjM4IHdoZW4gXV0+CgkgIGlzIGZvdW5kIHdpdGhpbiBhIGNkYXRhIHNlY3Rpb24uCgkqIHJlc3VsdC9ub2VudC9jZGF0YTIgcmVzdWx0L2NkYXRhMiByZXN1bHQvY2RhdGEyLnJkcgoJICByZXN1bHQvY2RhdGEyLnNheCB0ZXN0L2NkYXRhMjogYWRkIG9uZSBtb3JlIGNkYXRhIHRlc3QKClRodSBTZXAgMjUgMjM6MDM6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhtbGxpbnQuYyBkb2MvbGlieG1sMi1hcGkueG1sIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOgoJICBDaGFuZ2VkIHRoZSBuZXcgeG1sUmVhZC94bWxDdHh0UmVhZCBBUElzIHRvIGhhdmUgYW4gZXh0cmEKCSAgYmFzZSBVUkwgcGFyYW1ldGVyIHdoZW4gbm90IGxvYWRpbmcgZnJvbSBhIGZpbGUgb3IgVVJMLgoKVGh1IFNlcCAyNSAxNjoyMzo1OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgYSBiZXRhMyBzb2x2aW5nIHRoZSBBQkkgcHJvYmxlbXMKCSogZ2xvYmFscy5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3RIVE1MLmMgSFRNTHBhcnNlci5jIFNBWC5jCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9TQVguaDogbWFrZSBzdXJlIHRoZQoJICBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGUgZGVmYXVsdCBTQVggaGFuZGxlciBhcmUgVjEgb25lcyB0bwoJICBhdm9pZCBBQkkgY29tcGF0IHByb2JsZW1zLgoJKiB4bWxyZWFkZXIuYzogY2xlYW51cCBvZiB1bmVlZGVkIGNvZGUKCSogaGFzaC5jOiBmaXggYSBjb21tZW50CgpUaHUgU2VwIDI1IDE0OjE2OjUxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgaGFzaC5jIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaCAKCSAgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBmaXhpbmcgc29tZSBjb21tZW50cyB0byBhdm9pZCB3YXJuaW5ncyBmcm9tIGFwaWJ1aWxkLnB5CgpXZWQgU2VwIDI0IDIzOjQyOjA4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IHBhdGNoIGZyb20gU3RlcGhhbmUgQmlkb3VsIGZvciBjb25maWd1cmluZwoJICB0aGUgYmV0YTIgdmVyc2lvbiAjMTIzMTA0CgpXZWQgU2VwIDI0IDIzOjE3OjU5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYWRkaW5nIHJlcGVhdGVkIHBhcnNpbmcgYW5kIHZhbGlkYXRpbmcgdGVzdHMKCSogU0FYMi5jIHBhcnNlci5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogbWFrZSB0aGUgbmV3CgkgIERPTSB0cmVlIGJ1aWxkaW5nIGludGVyZmFjZXMgdXNlIHRoZSBkaWN0aW9uYXJ5IGZyb20gdGhlIAoJICBwYXJzaW5nIGNvbnRleHQgdG8gYnVpbGQgdGhlIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZXMgbmFtZXMKCSAgYXMgd2VsbCBhcyBmb3JtYXR0aW5nIHNwYWNlcyBhbmQgc2hvcnQgdGV4dCBub2RlcwoJKiBpbmNsdWRlL2xpYnhtbC9kaWN0LmggZGljdC5jOiBhZGRlZCBzb21lIHJlZmVyZW5jZSBjb3VudGluZwoJICBmb3IgeG1sRGljdFB0ciBiZWNhdXNlIHRoZXkgY2FuIGJlIHNoYXJlZCBieSBkb2N1bWVudHMgYW5kCgkgIGEgcGFyc2VyIGNvbnRleHQuCgkqIHhtbHJlYWRlci5jOiBhIGJpdCBvZiBjbGVhbnVwLCByZW1vdmUgdGhlIHNwZWNpZmljIHRyZWUgZnJlZWluZwoJICBmdW5jdGlvbnMgYW5kIHVzZSB0aGUgc3RhbmRhcmQgb25lcyBub3cuCgkqIHhtbGxpbnQuYzogYWRkIC0tbm9kaWN0CgkqIHB5dGhvbi9saWJ4bWwuYzogZml4IGEgc3R1cGlkIGJ1ZyBzbyB0aGF0IG5zKCkgd29ya3Mgb24gCgkgIGF0dHJpYnV0ZSBub2Rlcy4KClR1ZSBTZXAgMjMgMjM6MDc6NDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhZGRpbmcgYSBuZXcgc2V0IG9mCgkgIEFQSSBmb3IgcGFyc2luZyB4bWxSZWFkRG9jKCkgeG1sUmVhZEZpbGUoKSAuLi4geG1sUmVhZElPKCkKCSAgYW5kIHhtbEN0eHRSZWFkRG9jKCkgLi4uIHhtbEN0eHRSZWFkSU8oKS4gVGhhdCB3aXRoCgkgIGEgY2xlYXIgZGVmaW5lIG9mIHhtbFBhcnNlck9wdGlvbiwgeG1sQ3R4dFVzZU9wdGlvbnMoKQoJICBzaG91bGQgc2ltcGxpZnkgY3VzdG9tIHBhcnNpbmcgd2l0aG91dCBiZWluZyB0ZW1wdGVkIHRvCgkgIHVzZSBnbG9iYWwgdmFyaWFibGVzLCBhbmQgeG1sQ3R4dFJlc2V0KCkgc2hvdWxkIGFsbG93IHJldXNlCgkgIG9mIGEgY29udGV4dCBmb3IgbXVsdGlwbGUgcGFyc2luZy4KCSogeG1sbGludC5jOiBzd2l0Y2hlZCB0byB1c2UgeG1sUmVhZFhYWCwgYWxsb3cgb3B0aW9ucyB0bwoJICBiZSB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggbGVzcyB0cm91Ymxlcy4KCSogdHJlZS5jOiBzaW1wbGUgd2FybmluZyByZW1vdmFsCgkqIGRvYy9hcGlidWlsZC5weTogc21hbGwgZml4CgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgd2luMzIvbGlieG1sMi5kZWYuc3JjOiB1cGRhdGVkCgpUdWUgU2VwIDIzIDExOjE1OjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcmV2ZXJ0IHhtbENyZWF0ZURvY1BhcnNlckN0eHQoKSBzaW5jZSB0aGlzIGJyZWFrCgkgIHRoZSBwYXJzZURvYygpIHB5dGhvbiBiaW5kaW5ncwoKVHVlIFNlcCAyMyAxMTowMDoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG1ha2Ugc3VyZSB4bWxEZXRlY3RTQVgyKCkgaXMgY2FsbGVkIG9ubHkgYXQgCgkgIHBhcnNpbmcgdGltZSB0byBhdm9pZCBicmVha2luZyBhcHBzIGNoYW5naW5nIHRoZSBTQVgKCSAgY2FsbGJhY2tzIGFmdGVyIGNvbnRleHQgYWxsb2NhdGlvbiwgY2hhbmdlIHhtbENyZWF0ZURvY1BhcnNlckN0eHQoKQoJICB0byB1c2UgYW4gaW1tdXRhYmxlIGJ1ZmZlciBpbnN0ZWFkIG9mIGEgY29weQoKVHVlIFNlcCAyMyAwOTo0MDozMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBwYXRjaCBmcm9tIE1hcmt1cyBLZWltIGZpeGluZyBhIHByb2JsZW0KCSAgd2l0aCBJL08gY2FsbGJhY2sgcmVnaXN0cmF0aW9uLgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBmaXhlZCAjMTIyOTk0IGNvbW1lbnQgbnVtYmVyaW5nCgkgIGZvciB4bWxQYXJzZXJFcnJvcnMKCk1vbiBTZXAgMjIgMTI6MjE6MTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHRoZSB1cmkgYXJnIHRvIHhtbE5vZGVTZXRCYXNlIGlzCgkgIHJlYWxseSBhIGNvbnN0IHhtbENoYXIqCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhZGRpbiB0aGUKCSAgeG1sVGV4dFJlYWRlckNvbnN0U3RyaW5nKCkgdG8gZ2V0IGFuIGludGVybmVkIHN0cmluZyBmcm9tCgkgIHRoZSByZWFkZXIKClN1biBTZXAgMjAgMTc6MjI6MjAgUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlcnJvci5jOiBmaXhlZCBhIHdhcm5pbmcgbWVzc2FnZSAodHJpdmlhbCkKCSogZG9jL3NlYXJjaC5waHA6IHJlbW92ZWQgaW5jb3JyZWN0IHdhcm5pbmcgbWVzc2FnZSB3aGVuIHdvcmQKCSAgc2VhcmNoIG5vdCBmb3VuZCBpbiBsYXN0IG9mIG11bHRpcGxlIHRhYmxlcyAoYnVnIDExOTUzNSkKCkZyaSBTZXAgMTkgMTQ6MjY6MjggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGEgMi42LjAtYmV0YTIgcmVsZWFzZQoJKiB4bWxJTy5jOiBhdm9pZCBhIHdhcm5pbmcKCSogdHJlZS5jOiBhdm9pZCBkdXBsaWNhdGUgY29kZSBpbiB4bWxSZXBsYWNlTm9kZSBhcyBwb2ludGVkIG91dAoJICBieSBDaHJpcyBSeWxhbmQKCSogaW5jbHVkZS9saWJ4bWwvZGljdC5oOiBhZGQgYSBRTmFtZSBhY2Nlc3MgbG9va3VwIHRvIHRoZQoJICBkaWN0aW9uYXJ5LgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYWRkaW5nIGNvbnN0IGFjY2VzcwoJICBiYXNlZCBvbiB0aGUgZGljdGlvbmFyeSBpbnRlcmZhY2UgZm9yIHN0cmluZyByZWFkIGZyb20gdGhlCgkgIHJlYWRlciwgdGhlIG5vZGUgY29udGVudCBhY2Nlc3MgaXMgc3RpbGwgVE9ETywgaXQncyB0b28gZGlmZmVyZW50CgpGcmkgU2VwIDE5IDAwOjAxOjA4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmM6IGZpeGluZyBuYW1lc3BhY2UgRFREIHZhbGlkYXRpb25zCgkqIHJlc3VsdC92YWxpZC9uczIueG1sIHJlc3VsdC92YWxpZC9ucy54bWw6IHRoZSBvdXRwdXQgb2YgZGVmYXVsdGVkCgkgIG5hbWVzcGFjZXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IG5vdy4KCSogTWFrZWZpbGUuYW06IHJlcG9ydCB0aGUgbWVtb3J5IHVzZWQgaW4gVGltaW5ndGVzdHMgKGFzIHdlbGwgYXMgdGltZSkKClRodSBTZXAgMTggMTU6Mjk6NDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhZGQgc3RyZWFtaW5nIG9uIG1lbW9yeSByZWdyZXNzaW9uIHRlc3RzLCBmb3VuZAoJICBiYWQgYnVncyBpbiB0aGUgcmVhZGVyIGludGVyZmFjZQoJKiB4bWxyZWFkZXIuYzogZml4aW5nIGJ1Z3Mgdy5yLnQuIHZlcnkgbGFyZ2UgbmFtZXMsIGFuZCBzcGVjaWFsCgkgIGNvbmRpdGlvbiBpbiBlbmQgb2YgZmlsZS4KCSogeG1sSU8uYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbElPLmg6CgkgIGFkZGluZyBpbW11dGFibGUgYnVmZmVycywgYW5kIHBhcnNlciBpbnB1dCBiYXNlZCBvbiB0aG9zZSwKCSAgYnV0IHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkICh5ZXQpIGZvciBnZW5lcmFsIHBhcnNpbmcKCSogcGFyc2VyLmM6IGFkZGVkIGEgY29tbWVudCBhYm91dCB1c2luZyBpbW11dGFibGUgYnVmZmVycyBmb3IKCSAgZ2VuZXJhbCBwYXJzaW5nLgoJKiByZXN1bHQvYmlnbmFtZS54bWwucmRyIHJlc3VsdC9iaWduYW1lMi54bWwucmRyOiBmaXhpbmcgdGhlCgkgIG91dHB1dCBvZiB0aGUgcmVncmVzc2lvbiB0ZXN0cwoJKiB4bWxsaW50LmM6IHVzaW5nIHRoZSBpbW11dGFibGUgYnVmZmVycyB3aGVuIHN0cmVhbWluZyBvbgoJICBtbWFwZWQgZmlsZSAoLS1zdHJlYW0gLS1tZW1vcnkpCgpUaHUgU2VwIDE4IDEyOjA0OjUwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmM6IHRoZSBsYXN0IHBhdGNoIGJyb2tlIHVuaWNpdHkgb2YgcmV0dXJuZWQgc3RyaW5ncywgcmVtb3ZlZAoKVGh1IFNlcCAxOCAwMDozMTowMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZCBhIFRpbWluZ3Rlc3RzIHRhcmdldCB0byBjaGVjayBiYWQgYmVoYXZpb3VyCgkgIGZyb20gdGhlIHN0cmVhbWluZyBlbmdpbmUKCSogZGJnZW4ucGwgZGJnZW5hdHRyLnBsOiBwZXJsIHNjcmlwdCB0byBnZW5lcmF0ZSBiaWcgaW5zdGFuY2VzCgkqIHhtbHJlYWRlci5jOiBmaXggYSBiYWQgYmVoYXZpb3VyIG9uIGxhcmdlIGJ1ZmZlciBpbnB1dHMKCldlZCBTZXAgMTcgMjM6MjU6NDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYyB4bWxyZWFkZXIuYzogdHdvIHNtYWxsIGltcHJvdmVtZW50cwoKV2VkIFNlcCAxNyAyMjo1MzozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGF2b2lkIGEgbGVhayB3aXRoIHByZXZpb3VzIHBhdGNoCgpXZWQgU2VwIDE3IDIyOjA2OjExIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IHVzZSBzdGRlcnIgYW5kIG5vdCBzdGRvdXQgZm9yIGRlZmF1bHQgZXJyb3JzCgkgIGluIHB5dGhvbiBlbnZpcm9ubWVudCBidWcgIzEyMjU1MgoKV2VkIFNlcCAxNyAyMTozMzo1NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IHNtYWxsIGZpeCBmcm9tIFJvYiBSaWNoYXJkcyBmb3IgaW5wdXQgZmlsZW5hbWUKCSogeG1sbGludC5jOiBmaXhlcyBmb3IgLS1yZXBlYXQgYW5kIC0tbWVtb3J5Ly0tc3RyZWFtIGZvciBzcGVlZCB0ZXN0cwoJKiB4bWxJTzogYWRkaW5nIGEgZ3VhcmQgaW4gb25lIGZ1bmN0aW9uCgpXZWQgU2VwIDE3IDE1OjU3OjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IG1vcmUgcGVyZm9ybWFuY2UgaHVudGluZwoJICByZWR1Y2luZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZnJlZSBhbmQgYXZvaWRpbmcgZXhwZW5zaXZlIHJvdXRpbmVzCgpXZWQgU2VwIDE3IDEyOjIzOjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgeG1scmVhZGVyLmM6IHN0YXJ0ZWQgbWVzc2luZwoJICBzZXJpb3VzbHkgd2l0aCBwZXItZG9jdW1lbnQgZGljdCBhbmQgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCgkgIHJldXNlIGluIHRoZSB4bWxSZWFkZXIuIFRoaXMgc2VlbXMgdG8gbGVhZCB0byBhbiBpbnRlcmVzdGluZwoJICBzcGVlZHVwIG9mIHRoZSB4bWxSZWFkZXIgYWxyZWFkeS4KCldlZCBTZXAgMTcgMDE6MDc6NTYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYyBpbmNsdWRlL2xpYnhtbC9kaWN0Lmg6IGRvIHN0cmluZyBhbGxvY2F0aW9ucyBpbiBsYXJnZQoJICBwb29scywgYWxsb3dpbmcgdG8gZmluZCBpZiBhIHN0cmluZyBwZXJ0YWluIHRvIGEgZGljdCBxdWlja2x5CgkqIHhtbGxpbnQuYzogZml4IC0tc3RyZWFtIC0tcmVwZWF0IC0tdGltaW5nCgkqIE1ha2VmaWxlLmFtOiB0aGUgdGVzdFRocmVhZHMgcnVuIG91dHB1dCBzaG91bGQgYmUgc2Vlbi4KCk1vbiBTZXAgMTUgMTY6NDY6MjggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogc3RhcnRpbmcgd29yayBvbiByZXVzaW5nIHRoZQoJICBwYXJzZXIgZGljdGlvbmFyeSBmb3IgdGhlIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSB0YWcgbmFtZXMuCgkgIEFkZCBwb29scyBmb3IgRWxlbWVudCBhbmQgQXR0cmlidXRlcyBpbiB0aGUgcGFyc2VyIGNvbnRleHQsCgkgIHdoaWNoIHNob3VsZCBoZWxwIHNwZWVkaW5nIHVwIHRoZSByZWFkZXIuCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC8qLnJkciA6IGFkZGluZyBub24tcHl0aG9uIHJlYWRlciByZWdyZXNzaW9uCgkgIHRlc3RzLgoKTW9uIFNlcCAxNSAxNDo1NDo0MiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIHBhcnNlci5jIHZhbGlkLmM6IHN0YXJ0aW5nIHRvIGNsZWFudXAgc29tZSBvZiB0aGUKCSAgcHJvYmxlbXMgZXhwb3NlZCBieSB0aGUgVzNDL05JU1QgcmVncmVzc2lvbiBzdWl0ZS4KCSogcmVzdWx0L2VudDcuc2F4IHJlc3VsdC94bWwyLnNheDogc21hbGwgZml4ZXMuCgpNb24gU2VwIDE1IDExOjQ2OjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogbW9yZSBwYXJzZXIgZXJyb3IgZmFjdG9yaW5nCgpTdW4gU2VwIDE0IDIxOjUzOjM5IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHRyZWUuYzogRml4ZWQgYnVnIDEyMTM5NCAtIG1pc3NpbmcgbnMgb24gYXR0cmlidXRlcwoKU3VuIFNlcCAxNCAyMTo0MzozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZmFjdG9yaW5nIG9mIG1vcmUgCgkgIGVycm9yIGhhbmRsaW5nIGNvZGUsIHNlcmlvdXMgc2l6ZSByZWR1Y3Rpb24gYW5kIG1vcmUgbGlzaWJpbGl0eQoJICBvZiB0aGUgcmVzdWx0aW5nIGNvZGUuCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBjaGFuZ2luZyB0aGUgd2F5IFZDOlByb3BlciBHcm91cC9QRSBOZXN0aW5nCgkgIGNoZWNrcyBhcmUgZG9uZSwgdXNlIGEgY291bnRlciBmb3IgZW50aXRpZXMuIEVudGl0aWVzIHdoZXJlIGZyZWVkIGFuZAoJICByZWFsbG9jYXRlZCBhdCB0aGUgc2FtZSBhZGRyZXNzIGZhaWxpbmcgdGhlIGNoZWNrLgoJKiB0cmVlLmM6IGF2b2lkIGEgd2FybmluZwoJKiByZXN1bHQvdmFsaWQvKiByZXN1bHQvVkMvKjogdGhpcyBzbGlnaHRseSBjaGFuZ2VzIHNvbWUgdmFsaWRhdGlvbgoJICBlcnJvciBtZXNzYWdlcy4KClN1biBTZXAgMTQgMTE6MDM6MjcgUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBmaXhlZCBidWcgMTIxNzU5IC0gZWFybHkgZGVjbGFyYXRpb24gb2YKCSAgYXR0cmlidXRlLWxpc3QgaW4gZXh0ZXJuYWwgRFRECgpTYXQgU2VwIDEzIDE0OjQyOjExIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBzdGFydGluZyBjbGVhbmluZyB1cAoJICBlcnJvciBoYW5kbGluZywgZmFjdG9yaXplIGVycm9yIHByb2Nlc3NpbmcKCSogZG9jL3htbGxpbnQuaHRtbDogdXBkYXRlIG9mIHRoZSBwYWdlLCByZW1vdmUgLS1zZ21sCgpTYXQgU2VwIDEzIDAyOjEzOjUwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBET0NCcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGVzdERvY2Jvb2suYwoJICB4bWxsaW50LmMgZG9jL3htbGxpbnQueG1sIGRvYy94bWxsaW50LjE6IHJlbW92aW5nIHRoZSAKCSAgYnJva2VuIHBzZXVkbyBTR01MIERvY0Jvb2sgcGFyc2VyIGNvZGUuCgpGcmkgU2VwIDEyIDE3OjI0OjExIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXggYSBwcm9ibGVtIHdpdGggc3RyY3B5KCkgaW4geG1sWFBhdGhGb3JtYXROdW1iZXIoKQoJICB2YWxncmluZCBwb2ludGVkIG91dCB0aGUgc3RyaW5ncyBvdmVybGFwcGVkLiBjbGVhbnVwIC4KCkZyaSBTZXAgMTIgMTE6NDM6MTIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBzcGVlZHVwIHRvIHhtbFNlYXJjaE5zKCkgYXMgc3VnZ2VzdGVkIGJ5CgkgIEx1Y2EgUGFkb3ZhbmkuIENsZWFuZWQgdXAgeG1sU2VhcmNoTnNCeUhyZWYoKSBpbiB0aGUgcHJvY2VzcwoJICBhcHBseWluZyB0aGUgc2FtZSB0cmljay4KCkZyaSBTZXAgMTIgMDE6MzY6MjAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhZGRpbmcgbmFtZXNwYWNlIGNoZWNraW5ncwoJICB3aGlsZSBtYWtpbmcgc3VyZSB0aGV5IHN0aWxsIHBhcnNlIGFzIHdlbGxmb3JtZWQgZG9jdW1lbnRzLgoJICBBZGQgYW4gbnNXZWxsRm9ybWVkIHN0YXR1cyByZXBvcnQgdG8gdGhlIGNvbnRleHQsIGFuZCAKCSAgcHJvdmlkZSBuZXcgYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMuCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9uYW1lc3BhY2VzLyogdGVzdC9uYW1lc3BhY2VzLyo6IGFkZCAKCSAgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0aW5nIGZvciB0aGUgbmV3IG5hbWVzcGFjZSBzdXBwb3J0CgkqIHRlc3QvYXR0NSByZXN1bHQvbm9lbnQvYXR0NSByZXN1bHQvYXR0NSByZXN1bHQvYXR0NS5zYXg6CgkgIGFkZCBtb3JlIGNvdmVyYWdlIGZvciB0aGUgYXR0cmlidXRlIHBhcnNpbmcgYW5kIG5vcm1hbGl6YXRpb24KCSAgY29kZS4KCkZyaSBTZXAgMTIgMDE6MzQ6MTkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogYmFja3BvcnQgb2YgYSB0aHJlYWQgYnVnZml4IGZyb20gMl81X1ggYnJhbmNoCgpUaHUgU2VwIDExIDE4OjI5OjE4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidWcgaW4gb25lIGNvcm5lciBjYXNlIG9mIGF0dHJpYnV0ZSBwYXJzaW5nLgoKVGh1IFNlcCAxMSAxNjoyMTo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qIDogMi42LjBiZXRhMSBjaGFuZ2VzCgkqIFNBWDIuYyBoYXNoLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IEZpeGluZyBhdHRyaWJ1dGUKCSAgbm9ybWFsaXphdGlvbiwgbWlnaHQgbm90IGJlIHRvdGFsbHkgZml4ZWQgYnV0IHRoaXMgc2hvdWxkIAoJICBtYWtlIHN1cmUgU0FYIGV2ZW50IHByb3ZpZGUgdGhlIHJpZ2h0IHN0cmluZ3MgZm9yIGF0dHJpYnV0ZXMKCSAgZXhjZXB0IGVudGl0aWVzIGZvciB3aGljaCBsaWJ4bWwyIGlzIGRpZmZlcmVudCBieSBkZWZhdWx0CgkgIFRoaXMgc2hvdWxkIGZpeCAjMTA5NTY0CgkqIHJlc3VsdC9hdHRyaWIueG1sLnNheCByZXN1bHQvZW50My5zYXggcmVzdWx0L3AzcC5zYXg6IG1pbm9yIGNoYW5nZXMKCSAgaW4gYXR0cmlidXRlIGNhbGxiYWNrIHZhbHVlcwoJKiByZXN1bHQvYzE0bi93aXRoLWNvbW1lbnRzL2V4YW1wbGUtNAoJICByZXN1bHQvYzE0bi93aXRob3V0LWNvbW1lbnRzL2V4YW1wbGUtNDogdGhpcyBhbHNvIGZpeGVzIGEgc3VidGxlCgkgIGJ1ZyBpbiB0aGUgY2Fub25pY2FsaXphdGlvbiB0ZXN0cy4KCldlZCBTZXAgMTAgMTI6Mzg6NDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCglUaW1lIHRvIGNvbW1pdCAzIGRheXMgb2Ygd29yayByZXdyaXRpbmcgdGhlIHBhcnNlciBpbnRlcm5hbCwKCWZpeGluZyBidWdzIGFuZCBtaWdyYXRpbmcgdG8gU0FYMiBpbnRlcmZhY2UgYnkgZGVmYXVsdC4gVGhlcmUKCWlzIHNvbWUgd29yayBsZXRmIFRPRE8sIGxpa2UgbmFtZXNwYWNlIHZhbGlkYXRpb24gYW5kIGF0dHJpYnV0ZXMKCW5vcm1hbGl6YXRpb24gKHRoaXMgYnJlYWsgQzE0TiByaWdodCBub3cpCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCB0aGUgdGVzdCBydWxlcwoJKiBpbmNsdWRlL2xpYnhtbC9TQVgyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggU0FYMi5jIHBhcnNlci5jCgkgIHBhcnNlckludGVybmFscy5jOiBjaGFuZ2luZyB0aGUgcGFyc2VyLCBtaWdyYXRpbmcgdG8gU0FYMiwKCSAgYWRkaW5nIG5ldyBpbnRlcmZhY2UgdG8gc3dpdGNoIGJhY2sgdG8gU0FYMSBvciBpbml0aWFsaXplIGEKCSAgU0FYIGJsb2NrIGZvciB2MSBvciB2Mi4gTW9zdCBvZiB0aGUgbmFtZXNwYWNlIHdvcmsgaXMgZG9uZQoJICBiZWxvdyBTQVgsIGFzIHdlbGwgYXMgYXR0cmlidXRlIGRlZmF1bHRpbmcKCSogZ2xvYmFscy5jOiBjaGFuZ2VkIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkZWZhdWx0IFNBWCBoYW5kbGVycwoJKiBoYXNoLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2hhc2guaDogYWRkZWQgUU5hbWUgc3BlY2lmaWMgaGFuZGxpbmcKCSogeG1sSU8uYzogc21hbGwgZml4CgkqIHhtbGxpbnQuYyB0ZXN0U0FYLmM6IHByb3ZpZGUgYSAtLXNheDEgc3dpdGNoIHRvIHRlc3QgdGhlIG9sZAoJICB2ZXJzaW9uIGNvZGUgcGF0aAoJKiByZXN1bHQvcDNwIHJlc3VsdC9wM3Auc2F4IHJlc3VsdC9ub2VudC9wM3AgdGVzdC9wM3A6IHRoZSBuZXcgY29kZQoJICBwb2ludGVkIG91dCBhIHR5cG8gaW4gYSB2ZXJ5IG9sZCB0ZXN0IG5hbWVzcGFjZQoKU3VuIFNlcCAgNyAxOTo1ODozMyBQVEQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaCBwYXJzZXIuYzogSW1wbGVtZW50ZWQgZGV0ZWN0aW9uCgkgIG9mIGNvbXByZXNzZWQgZmlsZXMsIHNldHRpbmcgZG9jLT5jb21wcmVzc2VkIGFwcHJvcHJpYXRlbHkKCSAgKGJ1ZyAjMTIwNTAzKS4KClN1biBTZXAgIDcgMjI6NTM6MDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB0cnkgdG8gY29wZSB3aXRoIHRoZSBmYWN0IHRoYXQgYXBwcyBtYXkgc3RpbGwKCSAgaGF2ZSBhbGxvY2F0ZWQgc21hbGxlciBTQVggY2FsbGJhayBibG9jawoKU3VuIFNlcCAgNyAxMToxMTo0NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jOiBhbGxvdyB0byBnaXZlIC0xIGZvciB1bmRlZmluZWQgbGVuZ3RoIGluIGxvb2t1cHMKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGVzdFNBWC5jOgoJICBmaXJzdCByb3VuZCBvZiB3b3JrIG9uIHRoZSBuZXcgU0FYMiBpbnRlcmZhY2VzLCB0aGUgQVBJCgkgIHdpbGwgY2hhbmdlIGJ1dCBjb21taXRpbmcgYmVmb3JlIGNoYW5naW5nIGZvciBoaXN0b3JpY2FsCgkgIHJlZmVyZW5jZS4KClNhdCBTZXAgIDYgMTA6NTU6MDEgUFREIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBTQVgyLmMsIHhtbElPLmM6IGZpeGVkIGJ1ZyAjMTIxMjEwIChjYWxsYmFjayB0byBzYXgtPmVycm9yLAoJICBzYXgtPndhcm5pbmcgd2l0aCB3cm9uZyBwYXJhbXMpLgoKRnJpIFNlcCAgNSAxMDozMzo0MiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCB0byBleHBvcnQKCSAgZ2xvYmFscyBlbnRyeSBwb2ludHMgdG8gdGhlIHB5dGhvbiBiaW5kaW5ncwoKV2VkIFNlcCAgMyAxNToyNDo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB3aGVuIGNyZWF0aW5nIGEgRE9DVFlQRSB1c2UgImh0bWwiIGxvd2VyY2FzZQoJICBieSBkZWZhdWx0IGluc3RlYWQgb2YgIkhUTUwiCgkqIHBhcnNlci5jIHhtbHJlYWRlci5jOiBvcHRpbWl6YXRpb24sIGdhaW4gYSBmZXcgJSBwYXJzaW5nIHNwZWVkIGJ5CgkgIGF2b2lkaW5nIGNhbGxzIHRvICJhcmVCbGFua3MiIHdoZW4gbm90IG5lZWRlZC4KCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBzb21lIHN0cnVjdHVyZQoJICBleHRlbnNpb25zIGZvciBmdXR1cmUgd29yayBvbiB1c2luZyBwZXItZG9jdW1lbnQgZGljdGlvbmFyaWVzLgoKV2VkIFNlcCAgMyAxNTowODowNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gcmVzdWx0cy8qLnNheCBTQVhSZXN1bHQvKjogcmVtb3ZpbmcgdGhlIFNBWHJlc3VsdHMKCSAgdHJlZSwga2VlcGluZyByZXN1bHQgaW4gdGhlIHNhbWUgdHJlZSwgYWRkZWQgU0FYdGVzdHMgdG8gdGhlCgkgIGRlZmF1bHQgIm1ha2UgdGVzdHMiCgpUdWUgU2VwICAyIDE1OjU5OjA0IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oOiBkZWZpbmVkIGFkZGl0aW9uYWwgbWFjcm9zIHdoaWNoCgkgIGFmZmVjdCBleHBvcnRzIGFuZCBhZGRlZCBtaW5ndyBzZWN0aW9uCgpNb24gU2VwICAxIDE1OjE1OjE4IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL2luZGV4LnB5OiBmaXhlZCBwcm9ibGVtIHBhcnNpbmcgeGh0bWwgZG9jcwoJKiBkb2MveG1scmVhZGVyLmh0bWwsZG9jL2d1aWRlbGluZXMuaHRtbDogc21hbGwgbW9kaWZpY2F0aW9uCgkgIHRvIGF2b2lkIHByb2JsZW0gaW4gcHl0aG9uIHBhcnNpbmcuCgkqIGRvYy9zZWFyY2gucGhwOiBmaXhlZCB1cHBlciBjYXNlIGZpbGVuYW1lIHByb2JsZW0gZm9yIFhTTFQgZG9jcwoKTW9uIFNlcCAgMSAyMjo1NTowOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRoYXQgYWxsb3dzIGNvbXBpbGluZyAKCSAgd2l0aCBYSW5jbHVkZSBidXQgd2l0aG91dCBYUG9pbnRlciBzdXBwb3J0LgoKTW9uIFNlcCAgMSAyMjozMTozOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbDItY29uZmlnLmluOiBBcHBsaWVkIGEgcGF0Y2ggZnJvbSBLZXZpbiBQLiBGbGVtaW5nCgkgIHRvIGFkZCAtLWxpYnRvb2wtbGlicyBvcHRpb24gdG8geG1sMi1jb25maWcgc2NyaXB0LgoKU3VuIEF1ZyAzMSAyMTo1MjoxMiBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9SRUFETUUuZG9jcywgZG9jL01ha2VmaWxlLmFtOiBuZXcgZmlsZSBhZGRlZCwKCSAgZ2l2aW5nIHNvbWUgZGVzY3JpcHRpb24gb2YgdGhlIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbiBwcm9jZXNzCgkqIGRvYy9zZWFyY2gucGhwOiBmaXhlZCBwcm9ibGVtIHdpdGggdXBwZXIgY2FzZSBvbiBmaWxlbmFtZXMKCkZyaSBBdWcgMjkgMTI6MjU6MDEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2I6IHVwZGF0ZXMgYnkgRXJpYyBadXJjaGVyCgpUaHUgQXVnIDI4IDIyOjU4OjM4IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL2FwaWJ1aWxkLnB5LCBkb2MvbGlieG1sMi1hcGkueG1sOiBlbmhhbmNlZCBjb2RlCgkgIHRvIGNvbXBlbnNhdGUgZm9yIHBvbGx1dGlvbiBmcm9tIElnb3IncyBoZWFkZXIgdGFpbnQKCSAgKHF1aWNrIGJlZm9yZSBEYW5pZWwgbm90aWNlcykKClRodSBBdWcgMjggMjM6MDE6MzYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogZml4ZWQgYSBuYW1lc3BhY2UgZXJyb3Igb24gYXR0cmlidXRlIHJlcG9ydGluZyBidWcKCSAgcG9pbnRlZCBvdXQgYnkgVG9iaWFzIFJlaWYKCSogdGVzdC9wM3AgcmVzdWx0L3AzcCByZXN1bHQvbm9lbnQvcDNwOiB0aGlzIHRlc3QgY2FzZSB3YXMgd3JvbmcKCSAgdXNpbmcgeG1sc24gaW5zdGVhZCBvZiB4bWxucy4uLgoKVGh1IEF1ZyAyOCAxODoyNTowNyBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGZpeGVkCgkgIHR5cG9zIHJlcG9ydGVkIGJ5IE1hcmsgVmFrb2MKClRodSBBdWcgMjggMDg6NTk6NTEgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCglhZGQ6CgkqIGRvYy90dXRvcmlhbC9hcGkuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwOS5odG1sCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRleHBhdGguYwoJdXBkYXRlZAoJKiBkb2MvdHV0b3JpYWwvKi5odG1sCglmaXggbXkgYmFkIC0gZm9yZ290IHRvIGNoZWNrIGluIG5ldyBmaWxlcyB3aGVuIEkgbGFzdAoJdXBkYXRlZAoKVGh1IEF1ZyAyOCAxNDozMToxMyBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYjogbmV3IGZpbGUsIHN1cHBvcnQgZm9yIEJvcmxhbmQgQysrCgkqIHhtbGxpbnQuYzogZml4ZWQgdGltZSBpbmNsdXNpb24gZm9yIHZhcmlvdXMgY29tcGlsZXJzCgpUaHUgQXVnIDI4IDEyOjMyOjU5IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYzogYWRkZWQKCSAgZmV3IGNhc3RzIHRvIHNodXQgdGhlIGNvbXBpbGVyIHdhcm5pbmdzCgpUaHUgQXVnIDI4IDEyOjIzOjUxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuKiB3aW4zMi9jb25maWd1cmUuanM6IGZpeGVkIGZvciBtaW5ndwoKVGh1IEF1ZyAyOCAxMDowMTo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHRocmVhZHMuYzogZml4aW5nIGJ1ZyAjMTIwODcwIHRyeSB0byBhdm9pZCBwcm9ibGVtCgkgIHdpdGggdW5pbml0aWFsaXplZCBtdXRleGVzCgpXZWQgQXVnIDI3IDE2OjEyOjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGFuIGVycm9yIHJlcG9ydGluZyBidWcgaW4gUmVsYXgtTkcgd2hlbiB3ZSBlbmQKCSAgdXAgd2l0aCBtdWx0aXBsZSBzdGF0ZXMsIHNlbGVjdCB0aGUgImJlc3QiIG9uZS4gRml4ICMxMjA2ODIKCSogcmVzdWx0L3JlbGF4bmcvdHV0b3IxMV8yXzMuZXJyOiBzbWFsbCBjaGFuZ2UgcmVzdWx0aW5nIAoKV2VkIEF1ZyAyNyAxMToyNToyNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQgYmFzZTY0IHN1cHBvcnQgcGF0Y2ggZnJvbSBBbnRob255IENhcnJpY28KCldlZCBBdWcgMjcgMTA6NTg6NTEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9bdGhyZWFkcy14cG9pbnRlcl0uaDogcmVhbGlnbmVkIHBhcmFtZXRlcnMKCSAgYWZ0ZXIgdGFpbnQKCldlZCBBdWcgMjcgMDk6NTk6NTQgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGZpeGVkIGRlZnMgZm9yIEJvcmxhbmQgY29tcGlsZXIsCgkgIGFzIHJlcG9ydGVkIGJ5IEVyaWMgWnVyY2hlcgoKVHVlIEF1ZyAyNiAxNTo1NDowNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBidWcgIzEyMDM4NiBhZ2FpbiBhIHByb2JsZW0gaW50cm9kdWNlZCB3aGVuCgkgIHRyeWluZyB0byByZXVzZSBhdXRvbWF0YSBmb3IgY29udGVudCB2YWxpZGF0aW9uLiBGaXggYSBidWcgcmVwb3J0CgkgIHByb2JsZW0gb24gemVyb09yTW9yZQoJKiByZXN1bHQvcmVsYXhuZy90dXRvcjNfN19lcnI6IGNoYW5nZSBzbGlnaHRseSBlcnJvciByZXBvcnRpbmcuCgpNb24gQXVnIDI1IDEzOjI0OjU3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogbWFrZSBzdXJlIHRoZSBuZXcgaGVhZGVyIHdpbGwKCSAgYmUgaW5jbHVkZWQgd2hlbiBnZW5lcmF0aW5nIGEgbmV3IGRpc3RyaWJ1dGlvbi4KCk1vbiBBdWcgMjUgMTI6Mzc6MDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYSBjb3VwbGUgb2Ygc3R1cGlkIGJ1Z3MgaW4gdGhlIHN0YXRlIGFsbG9jYXRpb24KCSAgcm91dGluZXMgd2hpY2ggbGVkIHRvIGJ1ZyAjMTIwMDQwIGFuZCB0aGUgb25lcyByZXBvcnRlZCBieQoJICBNYXJ0aWpuIEZhYXNzZW4KCk1vbiBBdWcgMjUgMTI6Mzc6MjMgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmgKCSAgaW5jbHVkZS9saWJ4bWwvU0FYLmggaW5jbHVkZS9saWJ4bWwvU0FYMi5oOiByZWFsaWduZWQgdGhlCgkgIHBhcmFtZXRlcnMgYWZ0ZXIgdGFpbnQuCgpNb24gQXVnIDI1IDExOjE2OjAxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBtb3ZlZCBleHBvcnQgZGVmcyB0byBhIHNlcGFyYXRlCgkgIGZpbGUgZm9yIGNvbnNpc3RlbmN5LgoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IG5ldyBmaWxlLCBjb250YWlucyBleHBvcnQgZGVmcy4KCk1vbiBBdWcgMjUgMTE6MDE6NDkgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC8qLmggZ2VuVW5pY29kZS5weTogZXhwb3J0YWJpbGl0eSB0YWludAoJICBvZiB0aGUgaGVhZGVycy4KClRodSBBdWcgMjEgMTI6Mzc6NDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBtYWtlIHRoZSBkZXByZWNhdGVkIGludGVyZmFjZXMgbG9nIGFuIGVycm9yIG1lc3NhZ2UKCSAgdG8gYmUgc3VyZSBpdCB3b24ndCBnZXQgdXNlZC4KClRodSBBdWcgMjEgMDA6NTA6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIFNBWDIuYyBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9TQVgyLmg6CgkgIEFkZGluZyBuZXcgdmVyc2lvbiBvZiB0aGUgU0FYIGludGVyZmFjZSwgaXQncyBub3QgdGhlcmUgeWV0LAoJICBjdXJyZW50bHkganVzdCBwcmVwYXJpbmcgdGhlIHdvcmsKCSogZ2xvYmFscy5jIHBhcnNlci5jIFNBWC5jIGluY2x1ZGUvbGlieG1sL1NBWC5oIAoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGRvaW5nIHNvbWUKCSAgcmVmYWN0b3Jpbmcgb2YgdGhlIFNBWHYxIGludGVyZmFjZXMsIG9ic29sZXRpbmcgYSBidW5jaCBvZiB0aGVtCgkgIHdoaWxlIGtlZXBpbmcgZnVuY3Rpb25hbGl0aWVzLCBwcmVwYXJpbmcgU0FYMiBpbnRlZ3JhdGlvbi4KCSogZGljdC5jOiBzbWFsbCBjbGVhbnVwLgoKV2VkIEF1ZyAyMCAwMDoyMDowMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlcyBhIHNtYWxsIGJ1ZyBpbnRyb2R1Y2VkIGluIGxhc3QgY29tbWl0IGFuZCBkZXRlY3RlZAoJICBieSB2YWxncmluZC4KClR1ZSBBdWcgMTkgMTY6NTQ6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYyBoYXNoLmM6IG9wdGltaXphdGlvbiB3aGVuIGZyZWVpbmcgaGFzaCB0YWJsZXMuCgkqIHBhcnNlci5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBzb21lIHR1bmluZyBvZiBidWZmZXIKCSAgYWxsb2NhdGlvbnMKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGtlZXAgYQoJICBzaW5nbGUgYWxsb2NhdGVkIGJsb2NrIGZvciBhbGwgdGhlIGF0dHJpYnV0ZXMgY2FsbGJhY2tzLAoJICBhdm9pZCB1c2VsZXNzIG1hbGxvYygpL2ZyZWUoKQoJKiB0cmVlLmM6IGRvIG5vdCByZWFsbG9jKCkgd2hlbiBncm93aW5nIGEgYnVmZmVyIGlmIHRoZSBidWZmZXIKCSAgYWluJ3QgZnVsbCwgbWFsbG9jL21lbWNweS9mcmVlIGF2b2lkIGNvcHlpbmcgbWVtb3J5LgoKTW9uIEF1ZyAxOCAxODozNzowMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jIGRvYy94bWxsaW50LnhtbCBkb2MveG1sbGludC4xOiBhZGRlZCBvcHRpb24KCSAgLS1kdGR2YWxpZGZwaSBmb3IgVG9iaWFzIFJlaWYKCk1vbiBBdWcgMTggMTQ6MDM6MDMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYyBpbmNsdWRlL2xpYnhtbC9kaWN0LmggTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06CgkgIG5ldyBkaWN0aW9uYXJ5IG1vZHVsZSB0byBrZWVwIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBuYW1lcyB1c2VkCgkgIGJ5IHRoZSBwYXJzZXIKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jOgoJICBzd2l0Y2hlZCBhbGwgcGFyc2VycyB0byB1c2UgdGhlIGRpY3Rpb25hcnkgaW50ZXJuYWxseQoJKiBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDoKCSAgU29tZSBvZiB0aGUgaW50ZXJmYWNlcyBjaGFuZ2VkIGFzIGEgcmVzdWx0IHRvIHJlY2VpdmUgb3IgcmV0dXJuCgkgICJjb25zdCB4bWxDaGFyICoiIGluc3RlYWQgb2YgInhtbENoYXIgKiIsIHRoaXMgaXMgZWl0aGVyCgkgIGluc2lnbmlmaWNhbnQgZnJvbSBhbiB1c2VyIHBvaW50IG9mIHZpZXcgb3Igd2hlbiB0aGUgcmV0dXJuaW5nCgkgIHZhbHVlIGNoYW5nZWQsIHRob3NlIGZ1bmN0aW9uIGFyZSByZWFsbHkgcGFyc2VyIGludGVybmFsIG1ldGhvZHMKCSAgdGhhdCBubyB1c2VyIGNvZGUgc2hvdWxkIHJlYWxseSBjaGFuZ2UKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvaHRtbC8qOiB0aGUgQVBJIGludGVyZmFjZSBjaGFuZ2VkIGFuZAoJICB0aGUgZG9jcyB3ZXJlIHJlZ2VuZXJhdGVkCgpTdW4gQXVnIDE3IDIzOjA1OjM4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCB0byB4bWxDbGVhbnVwUGFyc2VyIGZyb20gRGF2ZSBCZWNrZXR0CgpTYXQgQXVnIDE2IDIyOjUzOjQyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL3BhcnNlZGVjbC5weSwgZG9jL2xpYnhtbDItcmVmcy54bWwsIGRvYy9BUEkqLmh0bWw6CgkgIGZpeGVkIHBhcnQgKDIpIG9mIGJ1ZyAxMTk1MzUgKHdyb25nIGFscGhhIGNhc2Ugb24gZmlsZW5hbWVzKQoKU2F0IEF1ZyAxNiAyMDozNToyOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9BUEkqLmh0bWwsIGRvYy9odG1sLyo6IHJlZ2VuZXJhdGVkIEFQSSBkb2N1bWVudGF0aW9uCgkgIGZvciB4bWxzb2Z0Lm9yZyAocGFydCBvZiBCdWcgMTE5NTM1KQoKRnJpIEF1ZyAxNSAxNDo1ODozNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVuY29kaW5nLmMsIHRocmVhZHMuYywgaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oLAoJICBkb2MvbGlieG1sMi1hcGkueG1sOiBNaW5vciBjaGFuZ2VzIHRvIGNvbW1lbnRzLCBldGMuIGZvcgoJICBpbXByb3ZpbmcgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uCgkqIGRvYy9NYWtlZmlsZS5hbTogZnVydGhlciBhZGp1c3RtZW50IHRvIGF1dG8tZ2VuZXJhdGlvbiBvZgoJICB3aW4zMi9saWJ4bWwyLmRlZi5zcmMKCkZyaSBBdWcgMTUgMDI6MjQ6MjAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5ld3MgY29uZmlndXJlLmluOiBwcmVwYXJpbmcgbGlieG1sMi0yLjUuMTAgcmVsZWFzZQoJKiBkb2MvKiA6IHVwZGF0ZWQgdGhlIGRvYyBhbmQgcmVidWlsdAoKRnJpIEF1ZyAxNSAwMTo1NTo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyB0aGUgeG1sU0FYUGFyc2VEVEQgYnVnICMxMTk1MzYgcmFpc2VkIGJ5CgkgIE1hbGNvbG0gVHJlZGlubmljayB3aXRoIHRoZSBwYXRjaCBoZSBzdWdnZXN0ZWQuCgpGcmkgQXVnIDE1IDAxOjM3OjEwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFsbG9jYXRpb24gZXJyb3IgIzExOTc4NCByYWlzZWQgYnkgT2xpdmVyIFN0b2VuZWJlcmcKCkZyaSBBdWcgMTUgMDA6NDE6NTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBmaXhpbmcgYW4gdXNlIG9mIHN0cmNweSgpIHdoZXJlIGJvdGggc3RyaW5ncyBvdmVybGFwCgkgIHBvaW50ZWQgb3V0IGJ5IHZhbGdyaW5kLgoKVGh1IEF1ZyAxNCAxNzoxMDozOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIGdsb2JhbHMuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogZ2V0IHJpZCBvZgoJICBzb21lIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgoJKiB4aW5jbHVkZS5jOiBmaXggdGhlIHBlcmZvcm1hbmNlIHByb2JsZW0gcmVwb3J0ZWQgYnkgS2V2aW4gUnVzY29lCgkgIHBsdXMgc29tZSBjbGVhbnVwIGFuZCBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nLgoKVGh1IEF1ZyAxNCAxNDoxMzo0MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogYXBwbGllZCBVVEYtMTYgZW5jb2RpbmcgaGFuZGxpbmcgcGF0Y2ggcHJvdmlkZWQgYnkKCSAgTWFyayBJdHpjb3ZpdHoKCSogZW5jb2RpbmcuYyBwYXJzZXIuYzogbW9yZSBjbGVhbnVwIGFuZCBmaXhlcyBmb3IgVVRGLTE2IHdoZW4gCgkgIG5vdCBoYXZpbmcgaWNvbnYgc3VwcG9ydC4KClRodSBBdWcgMTQgMDM6MTk6MDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBleGFtcGxlL01ha2VmaWxlLmFtIGxpYnhtbC5oIG5hbm9mdHAuYwoJICBuYW5vaHR0cC5jIHhtbGxpbnQuYzogQXBwbGllZCBwYXRjaCBmcm9tIE1pa2hhaWwgR3J1c2hpbnNraXkgZm9yCgkgIG1pbmd3IGNvbXBpbGVyIG9uIFdpbmRvd3MuCgpUaHUgQXVnIDE0IDAyOjI4OjM2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgdGhlIHNlcmlvdXMgQ1BVIHVzYWdlIHByb2JsZW0gcmVwb3J0ZWQgYnkKCSAgR3JhbnQgR29vZGFsZQoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBPbGl2ZXIgU3RvZW5lYmVyZyBhYm91dCBhIGZyZWUKCSAgbWlzc2luZyBpbiBodG1sU0FYUGFyc2VEb2MKClR1ZSBBdWcgMTIgMjI6NDg6MTAgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvTWFrZWZpbGUuYW06IFJlbW92ZWQgZGVwZW5kZW5jeSBmcm9tIGxpYnhtbDIuZGVmLnNyYwoKVHVlIEF1ZyAxMiAxODo1NTowOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGF1dG9nZW4uc2g6IHRvb2sgYXdheSB0aGUgcmVxdWlyZW1lbnQgZm9yIGF1dG9tYWtlLTEuNCwKCSAgY2hhbmdlZCB0aGUgbWVzc2FnZXMgZm9yIGdldHRpbmcgYXV0byogdG9vbHMgdG8gY3VycmVudAoJICBnbnUgcGFnZXMuCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgY2hlY2sgZm9yIExpbnV4IERlYyBhbHBoYSByZXF1aXJpbmcKCSAgLWllZWUgZmxhZywgZml4ZWQgdGVzdCBmb3IgaXB2NgoJKiB0cmlvbmFuLmM6IGZpeGVkIHByb2JsZW0gZm9yIGNvbXBpbGluZyBvbiBMaW51eCBEZWMgYWxwaGEKCSAgdXNpbmcgbmF0aXZlIGNvbXBpbGVyCgkqIGRvYy9NYWtlZmlsZS5hbTogaW1wbGVtZW50ZWQgcmVnZW5lcmF0aW9uIG9mIHdpbjMyL2xpYnhtbDIuZGVmLnNyYwoJICB3aGVuZXZlciBsaWJ4bWwyLWFwaS54bWwgaXMgY2hhbmdlZC4KCk1vbiBBdWcgMTEgMTc6MDI6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBjbGVhbmluZyB1cCBhIHByb2JsZW0gd2hlbiBwYXJzaW5nIFVURi0xNiBhbmQgbGliaWNvbnYKCSAgaXMgbm90IHVzZWQuCgpTdW4gQXVnIDEwIDA4OjEzOjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiByZW5lcmF0ZWQgd2l0aCBmaXhlZCBsaWJ4bWwyLWFwaS54bWwKClN1biBBdWcgMTAgMDA6MjI6NTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5ld3MgY29uZmlndXJlLmluOiBwcmVwYXJpbmcgbGlieG1sMi0yLjUuOSByZWxlYXNlCgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jIGFuZCByZWJ1aWx0CgpTYXQgQXVnICA5IDIwOjAwOjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOiBjaGFuZ2luZyBhbiBlbnVtCgkgIGRlZmluaXRpb24gdG8gZ2V0IGEgY29ycmVjdCBBUEkgWE1MIGRlc2NyaXB0aW9uLiBUaGlzIHdhcyBhcHBhcmVudGx5CgkgIGJyZWFraW5nIFdpbmRvd3MgYnVpbGQuCgpTYXQgQXVnICA5IDEzOjQxOjIxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGEgbmFzdHkgYnVnICMxMTkzODcsIGJhZCBoZXVyaXN0aWMgZnJvbQoJICB0aGUgcHJvZ3Jlc3NpdmUgSFRNTCBwYXJzZXIgZnJvbnQtZW5kIG9uIGxhcmdlIGNoYXJhY3RlciBkYXRhCgkgIGlzbGFuZCBsZWFkaW5nIHRvIGFuIGVycm9uZW91cyBlbmQgb2YgZGF0YSBkZXRlY3Rpb24gYnkgdGhlCgkgIHBhcnNlci4gU29tZSBjbGVhbnVwIHRvbyB0byBnZXQgY2xvc2VyIGZyb20gdGhlIFhNTCBwcm9ncmVzc2l2ZQoJICBwYXJzZXIuCgpTYXQgQXVnICA5IDAwOjQyOjQ3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBBZGRlZCBpbiBzdXBwb3J0IGZvciB0aGUgSVNPODg1OVgKCSAgbW9kdWxlIChwYXRjaCBwcm92aWRlZCBieSBKZXNzZSBQZWx0b24pCgpGcmkgQXVnICA4IDE1OjU2OjMyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHRyZWUuYyB0aHJlYWRzLmM6IGh1bSB0cnkgdG8gYXZvaWQgc29tZSB0cm91YmxlcwoJICB3aGVuIHRoZSBsaWJyYXJ5IGlzIG5vdCBpbml0aWFsaXplZCBhbmQgb25lIHRyeSB0byBzYXZlLCB0aGUgCgkgIGxvY2tzIGluIHRocmVhZGVkIGVudiBtaWdodCBub3QgYmVlbiBpbml0aWFsaXplZCwgcGxheWluZyBzYWZlCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBseSBwYXRjaCBmb3IgaGV4QmluYXJ5IGZyb20gQ2hhcmxlcyBCb3plbWFuCgkqIHRlc3Qvc2NoZW1hcy9oZXhiaW5hcnlfKiByZXN1bHQvc2NoZW1hcy9oZXhiaW5hcnlfKjogYWxzbyBhZGRlZAoJICBoaXMgdGVzdHMgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUuCgpGcmkgQXVnICA4IDE4OjQ3OjM4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogd2luMzIvZGVmZ2VuLnhzbCwgd2luMzIvbGlieG1sMi5kZWYuc3JjOiBCdWcgMTE5MzQzCgkgICh3aXRoIGFwb2xvZ2llcyB0byBJZ29yKSAtIEVuaGFuY2VkIGhhbmRsaW5nIG9mIGRvY2IgYW5kCgkgIG5hbm9odHRwLgoKVGh1IEF1ZyAgNyAyMToxMzoyMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVuY29kaW5nLmM6IGZ1cnRoZXIgc21hbGwgY2hhbmdlcyBmb3Igd2FybmluZ3Mgd2hlbgoJICBjb25maWd1cmVkIHdpdGggLS13aXRoLWljb252PW5vCgpXZWQgQXVnICA2IDEyOjMyOjExIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYyB0cmlvbmFuLltjaF0gdGVzdFRocmVhZHMuYyBweXRob24vZ2VuZXJhdG9yLnB5OgoJICBmdXJ0aGVyIHNtYWxsIGNoYW5nZXMgdG8gZWxtaW5hdGUgbW9zdCBvZiB0aGUgcmVtYWluaW5nCgkgIHdhcm5pbmdzLgoKVHVlIEF1ZyAgNSAyMzo1MToyMSBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVycm9yLmMgSFRNTHBhcnNlci5jIHRlc3RDMTROLmMgdGVzdEhUTUwuYyB0ZXN0VVJJLmMKCSAgeG1sY2F0YWxvZy5jIHhtbG1lbW9yeS5jIHhtbHJlYWRlci5jIHhtbHNjaGVtYXN0eXBlcy5jCgkgIHB5dGhvbi9saWJ4bWwuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogc21hbGwgY2hhbmdlcwoJICB0byBzeW50YXggdG8gZ2V0IHJpZCBvZiBjb21waWxlciB3YXJuaW5ncy4gIE5vIGNoYW5nZXMKCSAgdG8gbG9naWMuCgpNb24gQXVnICA0IDIyOjQwOjU0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9odG1sLyo6IHJlYnVpbHQgdGhlIEFQSSBhbmQgZG9jcy4KCk1vbiBBdWcgIDQgMjE6NDA6MzQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBzbWFsbCBwcm9ibGVtIGluIHRoZSBwYXRjaCBmb3IgIzExODc2MwoJKiByZXN1bHQvSFRNTC9kb2MzLmh0bSo6IHRoaXMgcmV2ZXJ0cyBiYWNrIHRvIHRoZSBwcmV2aW91cyByZXN1bHQKClN1biBBdWcgIDMgMjE6NDE6NDkgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0ZBUS5odG1sIGRvYy94bWwuaHRtbDogYXBwbGllZCBkb2MgcGF0Y2ggdG8geG1sLmh0bWwKCSAgYW5kIHJlYnVpbHQsIGFwcGFyZW50bHkgc29tZSBDKysgd3JhcHBlcnMgYXJlIG5vdCBhdmFpbGFibGUsCgkgIGMuZi4gYnVnICMxMTg5NDMKClN1biBBdWcgIDMgMjE6MzA6MzEgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhpbmcgSFRNTCBhdHRyaWJ1dGUgc2VyaWFsaXphdGlvbiBidWcgIzExODc2MwoJICBhcHBseWluZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHBhdGNoIGZyb20gQmFjZWsKCSogcmVzdWx0L0hUTUwvZG9jMy5odG0qOiB0aGlzIG1vZGlmaWVzIHRoZSBvdXRwdXQgZnJvbSBvbmUgdGVzdAoKU3VuIEF1ZyAgMyAyMTowMjozMCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRlZCBhIG5ldyBBUEkgdG8gc3BsaXQgYQoJICBRTmFtZSB3aXRob3V0IGdlbmVyYXRpbmcgYW55IG1lbW9yeSBhbGxvY2F0aW9uCgkqIHZhbGlkLmM6IGZpeGVkIGFub3RoZXIgcHJvYmxlbSB3aXRoIG5hbWVzcGFjZXMgb24gZWxlbWVudAoJICBpbiBtaXhlZCBjb250ZW50IGNhc2UKCSogcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IHVwZGF0ZWQgdGhlIHRlc3RjYXNlIHdpdGggCgkgIEJqb3JuIFJlZXNlIGZpeCB0byByZWFkZXIgZm9yIHVuc2lnbmlmaWNhbnQgd2hpdGUgc3BhY2UKCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBjbGVhbnVwLgoKU3VuIEF1ZyAgMyAyMDo1NTo0MCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHRyeWluZyB0byBmaXggIzExODc1NCBvZiBwb3NzaWJsZSByZWN1cnNpb24gaW4gdGhlCgkgIGNhdGFsb2dzLiBOb3QgZmFudGFzdGljYWxseSBoYXBweSBhYm91dCB0aGUgY3VycmVudCBmaXggc2luY2UKCSAgaXQncyBsaWtlbHkgdG8gYnJlYWsgdW5kZXIgdmVyeSB0aHJlYWQgaW50ZW5zaXZlIGNvbmN1cnJlbnQKCSAgYWNjZXNzIHRvIHRoZSBjYXRhbG9nLiBCZXR0ZXIgc29sdXRpb24gbWlnaHQgdG8ga2VlcCB0aGUgZGVwdGgKCSAgYW4gZXh0cmEgYXJndW1lbnQgdG8gdGhlIHJlc29sdXRpb24gZnVuY3Rpb25zLgoKU3VuIEF1ZyAgMyAxODo1Njo1NCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCBidWcgIzExODcxMiBhYm91dCBtaXhlZCBjb250ZW50LCBhbmQgbmFtZXNwYWNlZAoJICBlbGVtZW50IG5hbWVzLgoJKiB0ZXN0L3ZhbGlkL21peGVkX25zLnhtbCByZXN1bHQvdmFsaWQvbWl4ZWRfbnMqOiBhZGRlZCBhIGNoZWNrCgkgIGluIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpGcmkgQXVnIDEgMjM6NTU6MjMgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJQ29uaW51aW5nIHdvcmsgb24gYnVnIDExODU1OQoJKiBET0NCcGFyc2VyLmM6IHJlbW92ZWQgMiB1bnNlZCB2YXJzCgkqIHhtbHJlZ2V4cC5jOiBjaGFuZ2VkIHNvbWUgbnVtZXJpYyBjb25zdCB0byB0aGVpciBlbnVtIHN5bWJvbHMKCSogeG1scmVhZGVyLmM6IGNoYW5nZWQgb25lIHZhciBkZWZpbmUgZnJvbSBpbnQgdG8gZW51bQoJICAoYSBsaXR0bGUgbW9yZSB0byBiZSBkb25lLCBhd2FpdGluZyBjby1vcmRpbmF0aW9uKQoJKiByZWxheG5nLmM6IGRlbGV0ZWQgb25lIHVudXNlZCB2YXIKCSogeG1sbGludC5jOiBkZWxldGVkIHNvbWUgdW51c2VkIHZhcnMsIGNoYW5nZWQgb25lIGFyZwoJICB2YWwgZnJvbSBpbnQgdG8gZW51bQoJKiB0ZXN0SFRNTC5jLCB0ZXN0RG9jYm9vay5jOiBjaGFuZ2VkIHNvbWUgYXJnIHZhbHMgdG8gZW51bSBjb25zdAoJKiB4bWxJTy5jOiBmaXhlZCB0eXBvIGZyb20gbGFzdCBuaWdodCAoc21hbGwgd2FybmluZyBtc2cpCgpUaHUgSnVsIDMxIDIyOjQ0OjMzIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCVdvcmtpbmcgb24gYnVnIDExODU1OQoJKiBlcnJvci5jOiBkZWxldGVkIHVudXNlZCB2YXJpYWJsZQoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZGVsZXRlZCB1bm5lZWRlZCAnY29uc3QnIHF1YWxpZmllcgoJKiBwYXJzZXIuYzogY2hhbmdlZCB2YXJpYWJsZSB0eXBlIGZvciBlbnVtIHRlbXAgc3RvcmFnZQoJKiB4bWxJTy5jOiBjaGFuZ2VkIGRlYnVnZ2luZyB2YXIgdG8gYmUgaW5zaWRlICNpZmRlZgoJKiB2YWxpZC5jOiByZW1vdmVkIHVudXNlZCB2YXJpYWJsZQoJKiBIVE1McGFyc2VyLmM6IHJlbW92ZWQgc29tZSB1bm5lZWRlZCAnY29uc3QnIHF1YWxpZmllcnMKCSogeHBhdGguYzogYWRkZWQgc29tZSB0eXBlIGNhc3RzLCByZW1vdmVkIHNvbWUgdW51c2VkIHZhcnMKCSogeGluY2x1ZGUuYzogYWRkZWQgb25lIHR5cGUgY2FzdAoJKiBuYW5vaHR0cC5jOiByZXBvc2l0aW9uZWQgc29tZSAjaWZkZWYgdG8gYXZvaWQgdW51c2VkIHZhcgoJKiBuYW5vZnRwLmM6IHJlbW92ZWQgdW51c2VkIHZhcgoKV2VkIEp1bCAzMCAxNDo1Nzo1NSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIFdpbGxpYW0gQnJhY2sgYWJvdXQKCSAgdGhlIHByb2JsZW0gb2YgcGFyc2luZyB2ZXJ5IGxhcmdlIEhUTUwgaW5zdGFuY2Ugd2l0aCBjb21tZW50cwoJICBhcyByYWlzZWQgYnkgTmljayBLZXcKCldlZCBKdWwgMzAgMTI6Mjk6MzggRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFwcGx5aW5nIGNsZWFudXAKCSAgcGF0Y2ggZnJvbSBCam9ybiBSZWVzZSBmb3IgeG1sVGV4dFJlYWRlck5vZGVUeXBlKCkgYW5kIAoJICBzaWduaWZpY2FudCB3aGl0ZXNwYWNlLiBUaGVyZSBpcyBhbiBlbnVtIGZvciBub2RlIHR5cGUKCSAgdmFsdWVzIG5vdy4KCldlZCBKdWwgMzAgMTE6MDg6MjEgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogYXBwbHlpbmcgcGF0Y2ggZnJvbSBQZXRlciBKYWNvYmkgdG8gYWRkZWQgCgkgIElTTy04ODU5LXggZW5jb2Rpbmcgc3VwcG9ydCB3aGVuIGljb252IGlzIG5vdCBhdmFpbGFibGUKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogYWRkZWQgdGhlIGdsdWUgbmVlZGVkCgkgIGF0IHRoZSBjb25maWd1cmUgbGV2ZWwgYW5kIG1hZGUgaXQgdGhlIGRlZmF1bHQgZm9yIFdpbmRvd3MKClR1ZSBKdWwgMjkgMTY6NDM6NDggRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6CgkgIHBhdGNoIGZyb20gSm9hY2hpbSBCYXVjaCArIGNsZWFudXAgZm9yIFJlbGF4IE5HIGVycm9yIGNhbGxiYWNrcwoJICBpbiBweXRob24KClR1ZSBKdWwgMjkgMTI6NDY6MDggRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jOiBhcHBsaWVkIFBldGVyIEphY29iaSBlbmNvZGluZwoJICBjbGVhbnVwIHBhdGNoLCBhbmQgYWxzbyBhdm9pZGVkIGEgcG9zc2libGUgbWVtb3J5IGxlYWsKClR1ZSBKdWwgMjkgMDk6Mjg6MDkgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4IHRoZSBwcmV2aW91cyBjb21taXQKClR1ZSBKdWwgMjkgMTI6Mjg6MTcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBjb21tZW50cyByZXBvcnRlZCBieSBOaWNrIEtldwoJKiBlbmNvZGluZy5jOiBhZGRlZCByb3V0aW5lcyB4bWxVVEY4U2l6ZSBhbmQgeG1sVVRGOENoYXJjbXAgZm9yCgkgIHNvbWUgZnV0dXJlIGNsZWFudXAgb2YgVVRGOCBoYW5kbGluZwoKTW9uIEp1bCAyOCAxNjozOToxNCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBhcHBsaWVkIGEgY2hhbmdlIHN1Z2dlc3RlZCBieSBTZWFuIEdyaWZmaW4gaW4gYnVnCgkgICMxMTg0OTQgYWJvdXQgYSBtZW1vcnkgbGVhayBpbiBFWFNMVAoKU3VuIEp1bCAyNyAxNDozMDo1NiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGEgUmVsYXgtTkcgY29tcGlsYXRpb24vc3RyZWFtaW5nIGJ1ZyBpbnRyb2R1Y2VkCgkgIHdoZW4gZml4aW5nIHRoZSBwcmV2aW91cyBSZWxheC1ORyBidWdzCgkqIHJlc3VsdC9yZWxheG5nLyo6IFRoaXMgc2xpZ2h0bHkgY2hhbmdlcyB0aGUgb3V0cHV0IG1lc3NhZ2VzIG9mCgkgIHNvbWUgcmVncmVzc2lvbiB0ZXN0cy4KCSogY29uZmlndXJlLmluOiBhZGRlZCBzdXBwb3J0IG9mIC13aXRoLWZleGNlcHRpb25zIGZvciBuZXN0ZWQgQysrCgkgIHN1cHBvcnQuCgpUaHUgSnVsIDI0IDE1OjQ2OjAyIE1EVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvYXBhLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwYi5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGMuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBkLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwZS5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGYuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBnLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwaC5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczAyLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDMuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNC5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA1Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDYuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA4Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2luZGV4Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2l4MDEuaHRtbAoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwucGRmCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCXVwZGF0ZSB0dXRvcmlhbCB3aXRoIFhQYXRoIGV4YW1wbGUKClRodSBKdWwgMjQgMTc6MDc6MDYgSVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmM6IGZpeGluZyBhIGJ1ZyBhYm91dCBhIHNwZWNpYWwgY2FzZSBvZiBuYW1lc3BhY2UKCSAgaGFuZGxpbmcsIHRoaXMgY2xvc2VzIGJ1ZyAjMTE2ODQxCgpXZWQgSnVsIDIzIDIwOjUyOjM2IElTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyByZXN1bHQvcmVsYXhuZy8qOiBjaGVja2VkIGFuZCBmaXhlZCB0aGUgY29tcGlsYXRpb24KCSAgb2YgUk5HIHNjaGVtYXMsIGZpeGVzIGEgY291cGxlIG9mIGJ1Z3MgIzExNzA5NyBhbmQgIzExNzAwMSAuCgkgIFRoaXMgc2xpZ2h0bHkgY2hhbmdlcyB0aGUgb3V0cHV0IG1lc3NhZ2VzIG9mIHNvbWUgcmVncmVzc2lvbiB0ZXN0cy4KCldlZCBKdWwgMjMgMTU6MTU6MDggSVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIGFuIG91dCBvZiBib3VuZCBlcnJvciAjMTE4MDUyICwgdGhlIGdvb2QKCSAgcGFydCBpZiB0aGF0IGJhc2U2NCBjb2RlIHdhcyBub3QgaW4gdXNlIHlldCAuLi4KClR1ZSBKdWwgMjIgMTk6NDI6MTUgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50Lmh0bWwKCWluY2x1ZGUgaHRtbCB2ZXJzaW9uIG9mIHRoZSB4bWxsaW50IG1hbiBwYWdlLCBzbyBhbgoJdXAtdG8tZGF0ZSB2ZXJzaW9uIGlzIHZpc2libGUgb24gdGhlIFdlYgoKTW9uIEp1bCAyMSAyMTo1Mzo0MyBJU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jIGluY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmg6IGFkZGVkIGEgbmV3IEFQSQoJICB4bWxYSW5jbHVkZVByb2Nlc3NUcmVlKCkgdG8gcHJvY2VzcyBYSW5jbHVkZSBvbmx5IG9uIGEgc3VidHJlZQoJICB0aGlzIHNob3VsZCBmaXggYnVnICMxMTUzODUKCkZyaSBKdWwgMTggMTc6MTE6NDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGFkZGluZyBHZXQgaW50ZXJmYWNlIGZvcgoJICB0aGUgZXJyb3IgY2FsbGJhY2sgYW5kIHBhcmFtZXRlcnMgb2YgcGFyc2luZyBhbmQgdmFsaWRhdGlvbgoJICBjb250ZXh0cwoJKiB4bWxyZWFkZXIuYzogcGF0Y2ggdG8gZml4IGJ1ZyAjMTE3NzAyIGFib3V0IGluY29tcGxldGUgUmVhZCgpCgkgIG9uIHRleHQgbm9kZXMuCgpXZWQgSnVsIDE2IDIzOjE1OjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcGF0Y2ggZnJvbSBEb2RqaSBTZWtldGVsaSBhYm91dCBVVEYxNiBCT00KCSAgd2hlbiB1c2luZyB0aGUgcHVzaCBYTUwgcGFyc2VyLgoJKiByZXN1bHQvdXRmMTZib20ueG1sIHJlc3VsdC9ub2VudC91dGYxNmJvbS54bWwgdGVzdC91dGYxNmJvbS54bWw6CgkgIGFkZGVkIHRoZSB0ZXN0IHRvIHRoZSByZWdyZXNzaW9uIHN1aXRlLgoKVHVlIEp1bCAxNSAyMjowMzoxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBhZGQgeG1sVGhyRGVmTXV0ZXggPSBOVUxMIGluIHhtbENsZWFudXBHbG9iYWxzKCkgCgkgIGFzIHN1Z2dlc3RlZCBieSBSb2IgUmljaGFyZHMKClR1ZSBKdWwgMTUgMTU6MzA6NTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZW50aXRpZXMuYyBwYXJzZXIuYyByZWxheG5nLmMgCgkgIHhtbHNjaGVtYXMuYyB4cGF0aC5jOiByZW1vdmVkIHNvbWUgd2FybmluZ3MgYnkgY2FzdGluZyB4bWxDaGFyCgkgIHRvIHVuc2lnbmVkIGludCBhbmQgYSBjb3VwbGUgb2Ygb3RoZXJzLgoKRnJpIEp1bCAxMSAxNjo0NDoyMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVzIGEgc2VnZmF1bHQgb24gZW1wdHkgaGV4QmluYXJ5IHN0cmluZ3MKClRodSBKdWwgMTAgMTY6MDI6NDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBjbGVhbnVwIHBhdGNoZXMgZnJvbSBQZXRlciBCcmVpdGVubG9obmVyCgpUdWUgSnVsICA4IDE2OjAyOjE5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgdGhyZWFkcy5jOiBmaXhlcyBzb21lIHByb2JsZW0gd2hlbiBmcmVlaW5nIHVuaXRpdGlhbGl6ZWQKCSAgbXV0ZXhlcwoKVHVlIEp1bCAgOCAxNDoxNTowNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IHRoZSBtb2R1bGVzIHNob3VsZCBub3QgaW1wb3J0IDxjb25maWcuaD4KCSAgZGlyZWN0bHksIHNvbWUgY2xlYW51cHMKCSogeG1sc2NoZW1hcy5jOiBQZXRlciBTb2Jpc2NoIGZvdW5kIGEgbmFzdHkgYnVnIGluIHRoZSBTY2hlbWFzCgkgIHZhbGlkYXRpb24gY29kZS4KCk1vbiBKdWwgIDcgMTg6MDA6NTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogSmVzc2UgUGVsdG9uIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSBpbiB0aGUKCSAgamF2YXNjcmlwdCBjb2RlLgoKTW9uIEp1bCAgNyAxNjozOTozMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvKjogcmVnZW5lcmF0ZWQKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IG1pZ2h0IGZpeCBpbmNsdWRlcyBwcm9ibGVtcyB3aXRoIHRoZQoJICBJcHY2IHN1cHBvcnQgb24gc29sYXJpcwoJKiB0cmVlLmM6IHBhdGNoIGZyb20gTWFya3VzIEtlaW0gYWJvdXQgeG1sSGFzTnNQcm9wKCkgb24gYXR0cmlidXRlcwoJICBkZWZpbmVkIGFzICNJTVBMSUVECgpTdW4gSnVsICA2IDIzOjA5OjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIDIuNS44CgkqIG5hbm9odHRwLmM6IGNoYW5nZWQgc29tZSBwcmVwcm9jZXNzb3IgYmxvY2sKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaGFybGVzIEJvemVtYW4gYWRkaW5nCgkgIGhleEJpbmFyeSBzY2hlbWEgZGF0YXR5cGUgYW5kIGFkZGluZyBzdXBwb3J0IGZvciB0b3RhbERpZ2l0cyBhbmQKCSAgZnJhY3Rpb25EaWdpdHMgZmFjZXRzLgoKU3VuIEp1bCAgNiAxOTo1NjoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB4cGF0aC5jOiBmaXhlZCAyIGJ1Z3MgcG9pbnRlZCBpbiAjMTE2NDQ4CgpTdW4gSnVsICA2IDE5OjM0OjE3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBidWcgIzExNjA5NSByZW1vdmluZyB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuCgkgIHJlYXBwbHlpbmcgWEluY2x1ZGUgdG8gYSBkb2N1bWVudC4KClNhdCBKdWwgIDUgMjI6NDA6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgc21hbGwgY2hhbmdlcyB0byBwb3J0YWJpbGl0eSBsYXllciBmb3IgCgkgIGNvbXBpbGF0aW9uIG9uIERKR1BQIE1zLURPUyBjb21waWxlci4KClNhdCBKdWwgIDUgMjI6MzA6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogdXNlIHRoZSBjaGFyYWN0ZXIoKSBTQVggY2FsbGJhY2sKCSAgaWYgdGhlIGNkYXRhQmxvY2sgYWluJ3QgZGVmaW5lZC4KCSogeHBhdGguYzogZml4IGJ1ZyAjMTE1MzQ5IGFsbG93aW5nIGNvbXBpbGF0aW9uIHdoZW4gY29uZmlndXJlZAoJICB3aXRoIC0td2l0aG91dC14cGF0aCBzaW5jZSB0aGUgU2NoZW1hcyBjb2RlIG5lZWRzIE5BTiBhbmQgY28uCgpTYXQgSnVsIDUgMDA6NTE6MzAgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJRml4ZWQgcHJvYmxlbSB3aXRoIG11bHRpLXRocmVhZGluZywgc2hvd24gYnkgdGhlIHRlc3QgcHJvZ3JhbQoJdGVzdFRocmVhZHMuICBBZnRlciBmaXgsIHJhbiBtdXRpcGxlIHRlc3RzIG9uIHZhcmlvdXMgc3BlZWQKCW1hY2hpbmVzIChzaW5nbGUgYW5kIGR1YWwgcHJvY2Vzc29yIFg4NiksIHdoaWNoIGFsbCBzZWVtIG9rYXkuCgoJKiBjYXRhbG9nLmM6IGFkZGVkIG1pc3NpbmcgeG1sUk11dGV4VW5sb2NrIGluIHhtbExvYWRDYXRhbG9nCgoJKiB0aHJlYWRzLmM6IGFkZGVkIG1pc3NpbmcgaW5pdGlhbGlzYXRpb24gZm9yIGNvbmRpdGlvbiB2YXJpYWJsZQoJICBpbiB4bWxOZXdSTXV0ZXguCgpTYXQgSnVuIDIxIDE2OjEwOjI0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJQXBwbHlpbmcgSVB2NiBwYXRjaCBmcm9tIEFyY2hhbmEgU2hhaCA8YXJjaGFuYS5zaGFoQHdpcHJvLmNvbT4KCWNsb3NpbmcgYnVnICMxMTQ4MzcKCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgY2hlY2tzIGZvciBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCgoJKiBhY2NvbmZpZy5oOiBEZWZpbmVkIEhBVkVfR0VUQUREUklORk8gYW5kIFNVUFBPUlRfSVA2LgoKCSogY29uZmlnLmguaW46IERlZmluZWQgSEFWRV9HRVRBRERSSU5GTyBhbmQgU1VQUE9SVF9JUDYuCgoJKiBuYW5vZnRwLmM6IFN0cnVjdHVyZSB4bWxOYW5vRlRQQ3R4dCBjb250YWlucyBlaXRoZXIgc29ja2FkZHJfc3RvcmFnZQoJICBmaWVsZCBvciBzb2NrYWRkcl9pbiBmaWVsZCwgZGVwZW5kaW5nIHVwb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBJUHY2CgkgIHN1cHBvcnQuCgkgIGhhdmVfaXB2NigpOiBBZGRlZCB0byBjaGVjayBmb3IgcnVuLXRpbWUgSVB2NiBzdXBwb3J0LgoJICAoeG1sTmFub0ZUUFNjYW5VUkwpLCAoeG1sTmFub0ZUUFVwZGF0ZVVSTCksICh4bWxOYW5vRlRQU2NhblByb3h5KToKCSAgTW9kaWZpZWQgdG8gcGFyc2UgYSBVUkkgd2l0aCBJUHY2IGFkZHJlc3MgZ2l2ZW4gaW4gW10uCgkgICh4bWxOYW5vRlRQQ29ubmVjdCk6IENoYW5nZWQgdG8gdXNlIGdldGFkZHJpbmZvIGZvciBhZGRyZXNzCgkgIHJlc29sdXRpb24sIGlmIGl0IGlzIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLCBhcyBnZXRob3N0YnluYW1lCgkgIGRvZXMgbm90IHJldHVybiBJUHY2IGFkZHJlc3NlcyBvbiBzb21lIHBsYXRmb3Jtcy4KCSAgKHhtbE5hbm9GVFBHZXRDb25uZWN0aW9uKTogTW9kaWZpZWQgdHlwZSBvZiBkYXRhQWRkciB2YXJpYWJsZSB0bwoJICBzb2NrYWRkcl9zdG9yYWdlIG9yIHNvY2thZGRyX2luIGRlcGVuZGluZyB1cG9uIHRoZSBJUHY2IHN1cHBvcnQuCgkgIFNlbmRpbmcgRVBTViwgRVBSVCBvciBQQVNWLCBQT1JUIGRlcGVuZGluZyB1cG9uIHRoZSB0eXBlIG9mIGFkZHJlc3MKCSAgd2UgYXJlIGRlYWxpbmcgd2l0aC4KCgkqIG5hbm9odHRwLmM6IChoYXZlX2lwdjYpOiBBZGRlZCB0byBjaGVjayBmb3IgcnVuLXRpbWUgSVB2NiBzdXBwb3J0LgoJICAoeG1sTmFub0hUVFBTY2FuVVJMKSwgKHhtbE5hbm9IVFRQU2NhblByb3h5KTogTW9kaWZpZWQgdG8gcGFyc2UKCSAgYSBVUkkgd2l0aCBJUHY2IGFkZHJlc3MgZ2l2ZW4gaW4gW10uCgkgICh4bWxOYW5vSFRUUENvbm5lY3RIb3N0KTogTW9kaWZpZWQgdG8gdXNlIGdldGFkZHJpbmZvIGlmIGl0IGlzCgkgIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLiBBbHNvIElQdjYgYWRkcmVzc2VzIHdpbGwgYmUgcmVzb2x2ZWQgYnkKCSAgZ2V0aG9zdGJ5bmFtZSBvbmx5IGlmIElQdjYgcnVuLXRpbWUgc3VwcG9ydCBpcyBhdmFpbGFibGUuCgkgICh4bWxOYW5vSFRUUENvbm5lY3RBdHRlbXB0KTogTW9kaWZpZWQgdG8gZGVhbCB3aXRoIElQdjYgYWRkcmVzcy4KClNhdCBKdW4gMTQgMTg6NDY6NTEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanMgaW5jbHVkZS93aW4zMmNvbmZpZy5oIAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IEFwcGxpZWQgdGhlIHBhdGNoIGZvciBCQ0IKCSAgYnkgRXJpYyBadXJjaGVyLgoKRnJpIEp1biAxMyAxNDoyNzoxOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtIGRvYy9odG1sLyo6IHJldmVydGVkIGJhY2sgcGF0Y2ggZm9yICMxMTM1MjEsCgkgIGR1ZSB0byAjMTE1MTA0IGFuZCB3aGlsZSBmaXhpbmcgIzExNTEwMSAuIEhUTUwgVVJMcyBtdXN0IG5vdAoJICBiZSB2ZXJzaW9uIGRlcGVuZGFudC4KCkZyaSBKdW4gMTMgMTI6MDM6MzAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IGRvIG5vdCBnZW5lcmF0ZSAmcXVvdDsgZm9yICIgb3V0c2lkZSBvZiBhdHRyaWJ1dGVzCgkqIHJlc3VsdC8vKjogdGhpcyBjaGFuZ2VzIHRoZSBvdXRwdXQgb2Ygc29tZSB0ZXN0cwoKTW9uIEp1biAgOSAxMjoyODo1OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgeG1sSU8uYzogdHJ5aW5nIHRvIGZpeCAjMTE0Mjc3IGFib3V0IHdoZW4gZmlsZQoJICByZW1hcHBpbmcgYW5kIGVzY2FwaW5nIHNob3VsZCByZWFsbHkgYmUgYXR0ZW1wdGVkLgoKTW9uIEp1biAgOSAxMTowNjowOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLyo6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIEdtYW4gZm9yIGJ1aWxkaW5nIGRvY3MKCSogdmFsaWQuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogYXBwbGllZCBhIHBhdGNoIGZyb20KCSAgR2FyeSBQZW5uaW5ndG9uIHRvIHByb3ZpZGUgYW4gYWxsb2NhdG9yIGZvciB4bWxWYWxpZEN0eHQKCSogeG1scmVhZGVyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKYWNlayBLb25pZWN6bnkgZml4aW5nIGJ1ZwoJICAjMTEzNTgwIGFib3V0IGRhdGEgbm90IGJlaW5nIHBhc3NlZCBpbW1lZGlhdGVseS4KClRodSBKdW4gIDUgMTE6MzE6MDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBhIGNvdXBsZSBvZiBwYXRjaGVzIGZyb20gTWFyayBJdHpjb3ZpdHoKCSAgdG8gaGFuZGxlIHNhdmluZyBiYWNrICJVVEYtMTYiIGRvY3VtZW50cy4KCk1vbiBKdW4gIDIgMjE6NTY6MTUgTVZUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IGNvbW1pdGluZwoJICBzb21lIHdvcmsgZG9uZSB3aGlsZSBpbiB0aGUgTWFsZGl2ZXMgKGhlbmNlIHRoZSB0aW1lem9uZSBvbiB0aGUKCSAgbGFwdG9wICEpCgkqIHJlc3VsdC9zY2hlbWFzL2xlbmd0aDMqIHRlc3Qvc2NoZW1hcy9kZXRlcjBfKgoJICB0ZXN0L3NjaGVtYXMvZ3JvdXAwXyo6IHNvbWUgdGVzdHMgYWRkZWQgdG9vCgpNb24gSnVuICAyIDE1OjM0OjE3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBzbWFsbCBmaXgKCSogeG1sSU8uYzogZml4ZWQgYW4gZXJyb3IgbWVzc2FnZQoKVHVlIE1heSAyMCAxNDoyMToyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGluZyBSZWQgSGF0IGJ1ZyAjOTEwMTMgd2hlcmUgeG1sbGludCB3YXMKCSAgYWNjZXB0aW5nIGFuIGltcHJvcGVyIFVURjggc2VxdWVuY2UKClNhdCBNYXkgMTcgMTI6NTM6MTEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgdGhlIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciBnZXR0aW5nCgkgIHJpZCBvZiBleHRyYSB0aHJlYWRzIGluIGEgZHluYW1pYyBsaWJyYXJ5LgoJKiB3aW4zMi9jb25maWd1cmUuanM6IHRocmVhZHMgZGVmYXVsdCB0byAnbmF0aXZlJyBub3cuCgpGcmkgTWF5IDE2IDEzOjE3OjUyIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGluZyAgYnVnICMxMTI5MDQ6IGh0bWwgb3V0cHV0IG1ldGhvZCBlc2NhcGVkCgkgIHBsdXMgc2lnbiBjaGFyYWN0ZXIgaW4gVVJJIGF0dHJpYnV0ZS4KClRodSBNYXkgMTUgMTg6MDY6MTggRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYnVpbGRfZ2xvYi5weSBnbG9iYWwuZGF0YSBnbG9iYWxzLmMgcGFyc2VyLmMKCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3Igc2V0dGluZwoJICB1cCB0aHJlYWRzIGdsb2JhbCBkZWZhdWx0cy4KCSogZG9jL2xpYnhtbDItYXBpLnhtbDogdGhpcyBleHRlbmRzIHRoZSBBUEkgd2l0aCBuZXcgZnVuY3Rpb25zCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyMi5weQoJICBweXRob24vdGVzdHMvdGhyZWFkMi5weTogaW50ZWdyYXRlZCB0aGUgYXNzb2NpYXRlZCB0ZXN0Y2FzZSBhbmQKCSAgZml4ZWQgdGhlIGVycm9yIHN0cmluZyB1c2VkIGluIHJlYWRlcjIKCldlZCBNYXkgMTQgMTQ6NTY6NDYgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogdHJ5aW5nCgkgIHRvIGNvbmNpbGlhdGUgLS13aXRoLXB5dGhvbj0gcmVxdWlyZW1lbnRzIGFuZCBSUE0gYnVpbGRzLAoJICBhIFBJVEEgcmVhbGx5Li4uCgpUdWUgTWF5IDEzIDE4OjMwOjM0IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogb29wcyBsYXN0IGNvbW1pdCBpbnRyb2R1Y2VkIGEgbWVtb3J5IGxlYWsuCgpUdWUgTWF5IDEzIDE4OjEwOjM4IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyBkb2MveG1sbGludC54bWw6IGFkZGVkIC0tbm9uZXQgb3B0aW9uCgkqIGRvYy9NYWtlZmlsZS5hbTogZml4aW5nICMxMTI4MDMgYnkgYWRkaW5nIC0tbm9uZXQgd2hlbiBjYWxsaW5nCgkgIHhzbHRwcm9jIG9yIHhtbGxpbnQKCSogZG9jL3htbGxpbnQueG1sIGRvYy94bWxsaW50LjE6IGFsc28gYWRkZWQgLS1zY2hlbWEgZG9jIGFuZAoJICByZWJ1aWx0CgkqIEhUTUxwYXJzZXIuYzogY2xlYW5lZCB1cCB0aGUgSFRNTCBwYXJzZXIgY29udGV4dCBidWlsZCB3aGVuIAoJICB1c2luZyBhbiBVUkwKClR1ZSBNYXkgMTMgMTY6MzU6MDQgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGFkZGVkIGEgY29tbWVudCBhYm91dCBidWcgIzExMjkwMiAKCk1vbiBNYXkgMTIgMjE6NTg6MDAgRURUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBtaW5vciBjbGVhbnVwIG9mIGNvbmZpZ3VyZSAnLS1oZWxwJyBkaXNwbGF5CgkqIGVycm9yLmM6IGVuaGFuY2VkIHhtbFBhcnNlclByaW50RmlsZUNvbnRleHQgdG8gZml4IGJ1ZyAjMTA5OTQyCgpNb24gTWF5IDEyIDE3OjUzOjMwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogUEkgbm9kZXMgaW4gZXh0ZXJuYWwgc3Vic2V0IHdlcmUgbm90IGZyZWVkIDotXAoJICBmaXhlcyBidWcgIzExMjg0MgoKTW9uIE1heSAxMiAxMToyMzoyNyBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tc2NoZW1hIG9wdGlvbiB0byBydW4gV1hTIHNjaGVtYSB2YWxpZGF0aW9uCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6CgkgIHRyaWVkIHRvIGltcHJvdmUgZXJyb3IgcmVwb3J0aW5nIGluIHRoZSBTY2hlbWEgY29kZSwgc29tZSBjbGVhbnVwCgkgIHRvby4KClN1biBNYXkgMTEgMTY6MTM6MjAgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBzb21lIHByb2JsZW1zIGluIHRoZSBoYW5kbGluZyBvZiBlcnJvcnMsCgkgIGFuZCBhdHRyaWJ1dGVzIGFkZHJlc3NlZCBieSByZWZlcmVuY2VzLgoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBkcm9wcGVkIHRoZSB2ZXJib3NpdHkgbGV2ZWwKCSAgYW5kIGFkZGVkIGEgY291cGxlIG9mIG5ldyB0ZXN0cwoKU2F0IE1heSAxMCAxNjowMToyMSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IFN06XBoYW5lIEJpZG91bCBmb3VuZCBhbiBvZmYgYnkgb25lIGFkZHJlc3NpbmcKCSAgZXJyb3Igb24gdGhlIGVycm9yIGhhbmRsaW5nLgoKRnJpIE1heSAgOSAxOTowODoyMCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogdHJ5aW5nIHRvIGZpeCAjMTEyNjczCgpGcmkgTWF5ICA5IDE4OjE0OjE2IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBjYXRhbG9nLmMgcGFyc2VyLmMgcmVsYXhuZy5jOiByZW1vdmVkIG11bHRpcGxlCgkgIHdhcm5pbmcsIHRoaXMgZml4ZWQgYSBidWcgYW5kIHNob3VsZCBjbG9zZSAjMTExNTc0CgpGcmkgTWF5ICA5IDE1OjM0OjMyIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4aW5nIGJ1ZyAjMTA0MDgxIHdpdGggeHM6YWxsIHdpdGggYW4gZWxlbWVudAoJICBob2xkaW5nIG1pbk9jY3Vycz0iMCIKCSogdGVzdC9zY2hlbWFzL2FsbF8qIHJlc3VsdC9zY2hlbWFzL2FsbF8qOiBhZGRlZCBzb21lIHJlZ3Jlc3Npb24KCSAgdGVzdHMgZm9yIHRoYXQgYnVnCgkqIHhtbGxpbnQuYyB4bWxyZWFkZXIuYzogcGF0Y2hlcyBmcm9tIEpvZXJnIFNjaG1pdHotTGlubmV3ZWJlciBhbmQKCSAgR2FycnkgUGVubmluZ3RvbiB0byBjb21waWxlIHdpdGhvdXQgc2NoZW1hcyBzdXBwb3J0LgoKVGh1IE1heSAgMSAxMDowMjozNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCB4bWxVbmxpbmtOb2RlKCkgZm9yIERURHMuCgpXZWQgQXByIDMwIDE0OjE2OjA4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWwyLWNvbmZpZy5pbjogdHJ5IHRvIGZpeCBSZWQgaGF0IGJ1ZyAjODk5NTcsIGRvIG5vdAoJICBvdXRwdXQgLUwvdXNyL2xpYjY0CgkqIHhtbHJlYWRlci5jOiBmaXhlZCBhIHR5cG8gaW4gYSBjb21tZW50CgpUdWUgQXByIDI5IDA3OjMyOjAyIE1EVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5lbnQ+CgoJKiBkb2MvdHV0b3JpYWwvYXBoLmh0bWwsIGl4MDEuaHRtbAoJZm9yZ290IHRvIGN2cyBhZGQgdGhlIG5ldyBmaWxlcy4gVGhhbmtzIHRvIFJvbGFuZCB2YW4gTGFhcgoJZm9yIHBvaW50aW5nIHRoaXMgb3V0CgpUdWUgQXByIDI5IDE0OjM2OjQ5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgZG9jL2xpYnhtbDItYXBpLnhtbDogZml4aW5nIGEgZnVuY3Rpb24gY29tbWVudAoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL2FwaWJ1aWxkLnB5IGRvYy9nbm9tZS14bWwuc2dtbDogc3dpdGNoaW5nCgkgIHRvIHRoZSBYTUwvWFNMVCBkb2MgZ2VuZXJhdGlvbiBjbG9zaW5nICMxMTE3OTkKCSogZG9jL2h0bWwvKjogY29tcGxldGUgdXBkYXRlIG9mIHRoZSBIVE1MIHJlc3VsdHMKCk1vbiBBcHIgMjggMTQ6NTE6NDEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9kZWZnZW4ueHNsOiBmaXhlZCB0aGUgY29uZGl0aW9uYWwgZm9yIHVuaWNvZGUgbWFwLAoJICByZW1vdmVkIGhhcmRjb2RlZCBzY2hlbWEgZW50cmllcwoKTW9uIEFwciAyOCAwMjoxOTowMCBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2RlZmdlbi54c2w6IG5ldyBmaWxlLCBzdHlsZXNoZWV0IGZvciBnZW5lcmF0aW5nIAoJICB3aW4zMi9saWJ4bWwyLmRlZi5zcmMgZnJvbSBkb2MvbGlieG1sMi1hcGkueG1sCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogaXMgYXV0b2dlbmVyYXRlZCBmcm9tIG5vdyBvbiwgY2hhbmdlcwoJICB0byB0aGlzIGZpbGUgd2lsbCBub3QgYXBwZWFyIGhlcmUgYW55bW9yZQoKTW9uIEFwciAyOCAwMDoxMjoxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzIHB5dGhvbi9zZXR1cC5weS5pbjogYXBwbGllZCBwYXRjaAoJICBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3IgdGhlIFB5dGhvbiBiaW5kaW5ncyBvbiB0aGUgbmV3CgkgIHJlbGVhc2UuCgpTdW4gQXByIDI3IDE3OjU2OjIxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogZGVidWdYTUwuYzogaW5jbHVkZWQgbGlieG1sL3VyaS5oIGZvciB4bWxDYW5vbmljUGF0aAoJICBkZWNsYXJhdGlvbgoJKiB3aW4zMi9jb25maWd1cmUuanM6IHRocmVhZC1lbmFibGVkIGJ1aWxkIGlzIG5vdyBkZWZhdWx0CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSBleHBvcnRzCgpTdW4gQXByIDI3IDAwOjIzOjA1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGRvYy8qLnhzbCBkb2MvKi5odG1sOiB1cGRhdGVkIHRoZSB3ZWIgc2l0ZSBzZXBhcmF0ZWQKCSAgZGV2ZWxvcGVycyBmcm9tIGNvbW1vbiBwYWdlcywgbWFkZSB0aGUgdHJhbnNpdGlvbiB0byBYSFRNTDEsCgkgIGFkZGVkIHZhbGlkaXR5IGNoZWNraW5nIHRvIHRoZSBtYWtlZmlsZSBydWxlcy4KClNhdCBBcHIgMjYgMjM6MTc6NTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXggZm9yIHhtbElPUGFyc2VEVEQgc2FtZSBhcyBwcmV2aW91cyBhbmQgcmVwb3J0ZWQKCSAgYnkgUGV0ciBQYWphcwoKU2F0IEFwciAyNiAxNToyNjowNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgZml4IHRvIHhtbFNBWFBhcnNlRFREIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrCgkgIGNsb3NpbmcgIzExMTYzOAoKU2F0IEFwciAyNiAxNDowMDo1OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogZml4ZWQgYSBwcm9ibGVtIGluIHRoZSBnZW5lcmF0b3Igd2hlcmUKCSAgdGhlIHdheSBmdW5jdGlvbnMgYXJlIHJlbWFwcGVkIGFzIG1ldGhvZHMgb24gY2xhc3NlcyB3YXMKCSAgbm90IHN5bWV0cmljIGFuZCBkZXBlbmRhbnQgb24gcHl0aG9uIGludGVybmFsIGhhc2ggb3JkZXIsCgkgIGFzIHJlcG9ydGVkIGJ5IFN06XBoYW5lIEJpZG91bAoKRnJpIEFwciAyNSAyMTo1MjozMyBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsOgoJeG1sdHV0b3JpYWwueG1sCgl4bWx0dXRvcmlhbC5wZGYKCSouaHRtbAoJYWRkIGFwcGVuZGl4IG9uIGdlbmVyYXRpbmcgY29tcGlsZXIgZmxhZ3MsIG1vcmUgaW5kZXhpbmcKClNhdCBBcHIgMjYgMDE6MTA6NDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyaW9kZWYuaCB2bXMvYnVpbGRfbGlieG1sLmNvbTogYXBwbGllZCBwYXRjaCBmcm9tIENyYWlnIEEuIEJlcnJ5CgkgIHRvIGdldCBsaWJ4bWwtMi41LjcgdG8gY29tcGlsZSBvbiBPcGVuVk1TCgpGcmkgQXByIDI1IDE4OjQyOjM1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIGFuIHhtbFBhcnNlRFREIGJ1ZyByYWlzZWQgYnkgUGV0ciBQYWphcwoKRnJpIEFwciAyNSAxNToyMDoyOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtIGRvYy94bWxjYXRhbG9nLjEgZG9jL3htbGNhdGFsb2dfbWFuLnhtbAoJICBkb2MveG1sbGludC4xIGRvYy94bWxsaW50LnhtbDogYXV0b21hdGVkIHRoZSBnZW5lcmF0aW9uIG9mIHRoZQoJICBtYW4gcGFnZSBiYXNlZCBvbiB4c2x0cHJvYyBhbmQgYSBzdHlsZXNoZWV0IFBJIGluIHRoZSBYTUwuCgpGcmkgQXByIDI1IDEyOjM3OjMzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sbGludC4qOiB0cnlpbmcgdG8gZml4ICMxMTA1NDEgd2hlcmUgJm5ic3A7IGdlbmVyYXRlZAoJICBjaGFyYWN0ZXIgcHJldmVudGluZyByZW5kZXJpbmcgYnkgdGhlIG1hbiBjb21tYW5kLgoKRnJpIEFwciAyNSAwMTowOToyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIDIuNS43CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIGRvYy9hcGlidWlsZC5weTogZml4ZWQgdGhlIHNjcmlwdAoKVGh1IEFwciAyNCAxOToxMToxMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gZG9jL2FwaWJ1aWxkLnB5OiBtYWtlIHN1cmUgdGhlIE9PTSBjb2RlIGRvbid0CgkgIGdldCBpbiB0aGUgd2F5IG9mIHRoZSBidWlsZHMKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYXV0b21hdGljIHVwZGF0ZQoKVGh1IEFwciAyNCAxODowMTo0NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gdGVzdE9PTS5jIHRlc3RPT01saWIuW2NoXSA6IGludGVncmF0ZWQgdGhlIE91dCBPZgoJICBNZW1vcnkgdGVzdCBmcm9tIEhhdm9jIFBlbm5pbmd0b24gIzEwOTM2OAoJKiBTQVguYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdXJpLmMgdmFsaWQuYwoJICB4bWxtZW1vcnkuYyB4bWxyZWFkZXIuYyB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGEgbG90IG9mIG1lbW9yeSBhbGxvY2F0aW9uIGNsZWFudXBzCgkgIGJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIHRoZSBPT00gdGVzdGluZwoJKiBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUyLnB5OiBzZWVtcyBJIGZvcmdvdCB0byBjb21taXQgdGhlCgkgIHNjcmlwdC4KCldlZCBBcHIgMjMgMTc6MTY6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiB0cml2aWFsIGZpeCBmb3IgMTA5Nzc0IHJlbW92aW5nIGEgd2FybmluZwoKV2VkIEFwciAyMyAxNTo0OTozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIFNBWC5jIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIHBhcnNlci5jOiB0cnkgdG8gZmluZAoJICBtb3JlIHBsYWNlcyB3aGVyZSB4bWxDYW5vbmljUGF0aCgpIG11c3QgYmUgdXNlZCB0byBjb252ZXJ0CgkgIGZpbGVuYW1lcyB0byBVUkxzLCB0cnlpbmcgdG8gZml4ICMxMTEwODgKCldlZCBBcHIgMjMgMDk6MzU6MTIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBhcHBsaWVkIHBhdGNoIGZyb20gCgkgIEJyZW50IE0gSGVuZHJpY2tzIGFkZGluZyBiaW5kaW5nIGZvciB4bWxDYXRhbG9nQWRkTG9jYWwKClR1ZSBBcHIgMjIgMTU6MTg6MDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogdHJpZWQgdG8gZml4ICM5ODg3OSBhZ2FpbiBpbiBhIG1vcmUgc29saWQKCSAgd2F5LgoKVHVlIEFwciAyMiAxMzo1ODo0MyBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSBleHBvcnRzIGZyb20gdGhlIHJlbGF4bmcgYW5kCgkgIHhtbHJlYWRlciBjbGFuCgpUdWUgQXByIDIyIDEwOjM1OjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyB0ZXN0L3ZhbGlkL25zKiB0ZXN0L3Jlc3VsdC9ucyo6IGFwcGxpZWQgdGhlIHBhdGNoCgkgIHByb3ZpZGVkIGJ5IEJyZW50IEhlbmRyaWNrcyBmaXhpbmcgIzEwNTk5MiBhbmQgaW50ZWdyYXRlZCB0aGUKCSAgZXhhbXBsZXMgaW4gdGhlIHRlc3RzdWl0ZS4KClR1ZSBBcHIgMjIgMDE6MDY6MDkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFRPRE86IHVwZGF0ZWQgYSBiaXQKCSogY29uZmlndXJlLmluOiBmaXhlZCB0aGUgY29tbWVudCwgdGhyZWFkcyBub3cgZGVmYXVsdCB0byBvbgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgYW4gZXJyb25lb3VzIHhtbE1hbGxvY0F0b21pYygpIGNhbGwKCk1vbiBBcHIgMjEgMjM6MzM6MzggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyBsaWJ4bWwuaCBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgeG1sbGludC5jCgkgIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhIGxvdCBvZiBwZXJmb3JtYW5jZSB3b3JrCgkgIGVzcGVjaWFsbHkgdGhlIHNwZWVkIG9mIHN0cmVhbWluZyB0aHJvdWdoIHRoZSByZWFkZXIgYW5kIHB1c2gKCSAgaW50ZXJmYWNlLiBTb21lIHRocmVhZCByZWxhdGVkIG9wdGltaXphdGlvbnMuIE5lYXJseSBkb3VibGVkIHRoZQoJICBzcGVlZCBvZiBwYXJzaW5nIHRocm91Z2ggdGhlIHJlYWRlci4KClN1biBBcHIgMjAgMTA6MzY6MDUgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xCgl1cGRhdGUgbWFuIHBhZ2UgdG8gZXhwbGFpbiB1c2Ugb2YgLS1zdHJlYW0KClNhdCBBcHIgMTkgMDI6MDM6MjQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGNhdGFsb2cuYyBlbmNvZGluZy5jIGdsb2JhbHMuYwoJICBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHJlbGF4bmcuYyB0cmVlLmMgdXJpLmMKCSAgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgeHBhdGguYyB4cG9pbnRlci5jCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogYWRkZWQKCSAgeG1sTWFsbG9jQXRvbWljKCkgdG8gYmUgdXNlZCB3aGVuIGFsbG9jYXRpbmcgYmxvY2tzIHdoaWNoCgkgIGRvIG5vdCBjb250YWlucyBwb2ludGVycywgYWRkIHhtbEdjTWVtU2V0dXAoKSBhbmQgeG1sR2NNZW1HZXQoKQoJICB0byBhbGxvdyByZWdpc3RlcmluZyB0aGUgZnVsbCBzZXQgb2YgZnVuY3Rpb25zIG5lZWRlZCBieQoJICBhIGdhcmJhZ2UgY29sbGVjdGluZyBhbGxvY2F0b3IgbGlrZSBsaWJnYywgcmVmICMxMDk5NDQKCkZyaSBBcHIgMTggMTY6Mzc6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogc3dpdGNoZWQgdG8gaGF2ZSB0aHJlYWQgc3VwcG9ydCBlbmFibGVkIGJ5IGRlZmF1bHQsCgkgIGRpZG4ndCBnb3QgdHJvdWJsZXMgd2l0aCBBQkkgY29tcGF0aWJpbGl0eSBvbiBMaW51eCwgaG9wZSBpdAoJICB3b24ndCBicmVhayBvbiBzdHJhbmdlIE9TZXMsIGlmIHllcywgcmVwb3J0IHRoZSBzeXN0ZW0gSUQKCSogZG9jL2xpYnhtbDItYXBpLnhtbDoganVzdCByZWJ1aWx0IHRoZSBBUEkKCkZyaSBBcHIgMTggMTQ6MzE6MTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jIHhtbElPLmMgRE9DQnBhcnNlci5jOiAKCSAgYWRkZWQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZSwgdGVzdGVkIHdpdGggYSAzK0dCIGluc3RhbmNlLAoJICBhbmQgc29tZSBjbGVhbnVwLgoJKiBjYXRhbG9nLmM6IGFkZGVkIGEgVE9ETwoJKiBNYWtlZmlsZS5hbTogYWRkZWQgc29tZSAibWFrZSB0ZXN0cyIgY29tbWVudHMKClRodSBBcHIgMTcgMTQ6NTE6NTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogc29tZSBjbGVhbnVwcwoJKiBkb2MveG1scmVhZGVyLmh0bWw6IGV4dGVuZGVkIHRoZSBkb2N1bWVudCB0byBjb3ZlciBSZWxheE5HIGFuZAoJICB0cmVlIG9wZXJhdGlvbnMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXJbNDZdLnB5OiBhZGRlZCBzb21lCgkgIHhtbFJlYWRlciBleGFtcGxlL3JlZ3Jlc3Npb24gdGVzdHMKCSogcmVzdWx0L3JlbGF4bmcvdHV0b3IqLmVycjogdXBkYXRlZCB0aGUgb3V0cHV0IG9mIGEgbnVtYmVyIG9mIHRlc3RzCgpUaHUgQXByIDE3IDExOjM1OjM3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHZhbGdyaW5kIHBvaW50ZWQgb3V0IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZXJyb3IuCgpUaHUgQXByIDE3IDExOjA2OjI4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmggcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oCgkgIHhtbHJlYWRlci5jOiBhdWduZW10aW5nIHRoZSBBUElzLCBjbGVhbnVwcy4KCSogcGFyc2VyLmM6IGNsZWFudXAgYnVnICMxMTEwMDUKCSogeG1sSU8uYzogYWRkZWQgc29tZSBtaXNzaW5nIGNvbW1lbnRzCgpXZWQgQXByIDE2IDE3OjQ2OjUwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgeG1sbGludC5jOiBtb3JlIHdvcmsgb24gUmVsYXhORyBzdHJlYW1pbmcgdmFsaWRhdGlvbgoJICB0cnlpbmcgdG8gaW1wcm92ZSB0aGUgc3Vic2V0IGNvbXBpbGVkLCBhbmQgbW9yZSB0ZXN0aW5nLgoJKiBkb2MvZG93bmxvYWRzLmh0bWwgZG9jL3htbC5odG1sIGRvYy94bWxtZW0uaHRtbDogc29tZSB1cGRhdGVzIG9uIHRoZQoJICBkb2N1bWVudGF0aW9uCgkqIHRlc3QvcmVsYXhuZy90dXRvcjExXzFfMy54bWw6IGZpeGVzIHRoZSBEVEQgcGF0aAoJKiByZXN1bHQvcmVsYXhuZy8qLmVycjogZml4IHNvbWUgb2YgdGhlIG91dHB1dHMKCldlZCBBcHIgMTYgMDE6Mjg6MTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxyZWFkZXIuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBpbXBsZW1lbnRlZCBzdHJlYW1pbmcgb2YKCSAgUmVsYXhORyAod2hlbiBwb3NzaWJsZSkgb24gdG9wIG9mIHRoZSB4bWxSZWFkZXIgaW50ZXJmYWNlLAoJICBwcm92aWRlZCBpdCBhcyB4bWxsaW50IC0tc3RyZWFtIC0tcmVsYXhuZyAucm5nIC54bWwKCSAgVGhpcyBzZWVtcyB0byBtb3N0bHkgd29yay4KCSogTWFrZWZpbGUuYW06IHVwZGF0ZWQgdG8gdGVzdCBSZWxheE5HIHN0cmVhbWluZwoKTW9uIEFwciAxNCAxODowODozMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogaW50ZWdyYXRlZCB0aGUgcmVnZXhwCgkgIGJhc2VkIHZhbGlkaXR5IGNoZWNraW5nIG9mIGZyYWdtZW50cyBvZiB0aGUgZG9jdW1lbnQgZm9yCgkgIHdoaWNoIHRoZSBSTkcgY2FuIGJlIGNvbXBpbGVkIHRvIHJlZ2V4cHMuIFdvcmtzIG9uIGFsbCByZWdyZXNzaW9uCgkgIHRlc3RzLCBvbmx5IGZpeCBuZWVkZWQgaXMgcmVsYXRlZCB0byBlcnJvciBtZXNzYWdlcy4KClN1biBBcHIgMTMgMjE6NTE6MDAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOiBTdGFydGluZyB3b3JrIHByZWNvbXBpbGluZwoJICBwYXJ0cyBvZiBSZWxheE5HIHNjaGVtYXMuIE5vdCBwbHVnZ2VkIG9udG8gdmFsaWRpdHkgY2hlY2tpbmcKCSAgeWV0LCBqdXN0IHRoZSByZWdleHAgYnVpbGRpbmcgcGFydC4gTmVlZGVkIHRvIGV4dGVuZCBzb21lCgkgIG9mIHRoZSBhdXRvbWF0YSBhbmQgcmVnZXhwIEFQSXMuCgpGcmkgQXByIDExIDIxOjM2OjIxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IG1ha2Ugc3VyZQoJICB4bWxsaW50IC0tc3RyZWFtIGFuZCB4bWxsaW50IC0tc3RyZWFtIC0tdmFsaWQgcmV0dXJucyBlcnJvcnMKCSAgY29kZSBhcHByb3ByaWF0ZWx5CgpGcmkgQXByIDExIDEwOjU5OjI0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogQWRkZWQgdGhlIEV4cGFuZCgpCgkgIGFuZCBOZXh0KCkgb3BlcmF0aW9uIHRvIHdvcmsgb24gc3VidHJlZXMgd2l0aGluIHRoZSByZWFkZXIKCSAgZnJhbWV3b3JrLgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiByZXN1bHRpbmcgdXBkYXRlcwoJKiBweXRob24vdGVzdHMvcmVhZGVyNS5weTogYWRkZWQgYW4gZXhhbXBsZSBmb3IgdGhvc2UgbmV3CgkgIGZ1bmN0aW9ucyBvZiB0aGUgcmVhZGVyLgoKVGh1IEFwciAxMCAyMzozODoxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogcGF0Y2ggZnJvbSBWYXNpbHkgVGNoZWthbGtpbiB0byBmaXggIzEwOTg2NQoKVGh1IEFwciAxMCAxNTozMjo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGluZyBIYXNWYWx1ZSBmb3IgbmFtZXNwYWNlIGFzIHJhaXNlZCBieSAKCSAgRGVueXMgRHVjaGllcgoKV2VkIEFwciAgOSAxNDowNzoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDogIGV4cG9ydGVkCgkgIGh0bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0KCkgaXQgd2FzIHN0YXRpYwoKV2VkIEFwciAgOSAxMzoyMTo0OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDoKCSAgdXBkYXRlIGZyb20gQ2hhcmxlcyBCb3plbWFuIGZvciBkYXRlIGFuZCBkdXJhdGlvbiB0eXBlcwoJKiB0ZXN0L3NjaGVtYXMvZGF0ZV8wLiogdGVzdC9zY2hlbWFzL2R1cl8wLioKCSAgcmVzdWx0L3NjaGVtYXMvZGF0ZV8wLiogcmVzdWx0L3NjaGVtYXMvZHVyXzAuKjogdXBkYXRlZCB0b28KCk1vbiBBcHIgIDcgMTI6MTk6MjYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyB2YWxpZC5jIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6CgkgIGZpeGluZyBidWcgIzEwNzEyOSwgcmVtb3ZpbmcgZXhjZXNzaXZlIGFsbG9jYXRpb24gYW5kIGNhbGxzCgkgIHRvICpwcmludGYgaW4gdGhlIGNvZGUgdG8gYnVpbGQgUU5hbWUgc3RyaW5ncy4KClNhdCBBcHIgIDUgMTE6NDE6MzYgQ0VTVCAyMDAzIElnb2UgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGZpeGVkIGNvbmRpdGlvbmFsIGV4cG9ydHMsIHJlcG9ydGVkIGJ5CgkgIEx1a2UgTXVycmF5LgoKRnJpIEFwciAgNCAxODowODowMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcG9zc2libGUgcHJvYmxlbSB3aXRoIHhtbFJlY292ZXJNZW1vcnkoKQoKVGh1IEFwciAgMyAxNzoyNDo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJpby5jIHRyaW8uaCB0cmlvZGVmLmggdHJpb25hbi5jIHRyaW9uYW4uaCB0cmlvcC5oIHRyaW9zdHIuYwoJICB0cmlvc3RyLmg6IEJqb3JuIHNlbnQgYW4gdXBkYXRlIGZvciB0aGUgVFJJTyBwb3J0YWJpbGl0eSBsYXllci4KClR1ZSBBcHIgIDEgMjE6NTc6MjYgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIG5ldyBmdW5jdGlvbnMKClR1ZSBBcHIgIDEgMTM6MDk6NDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuNgoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKVHVlIEFwciAgMSAxMTo1MjoxNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBwb2ludGVkIGJ5IHZhbGdyaW5kCgkgIG9uIEMxNE50ZXN0cwoKVHVlIEFwciAgMSAwMDoxMjoyOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBvbmUgbW9yZSBmaXh1cCBvZiBlcnJvciBtZXNzYWdlIHJlcG9ydGluZwoKTW9uIE1hciAzMSAxODozNjozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gYnVnICMxMDkyMjUsIGFuZCBmaXhlZCBhbiB1bmluaXRpYWxpemVkCgkgIHZhcmlhYmxlIHBvaW50ZWQgb3V0IGJ5IHZhbGdyaW5kCgpNb24gTWFyIDMxIDE4OjA1OjIyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHRyeSB0byB3b3JrIG9uIGJ1ZyAjMTA5MjI1IGFuZCBwcm92aWRlIGJldHRlcgoJICBlcnJvciByZXBvcnRzLgoJKiByZXN1bHQvcmVsYXhuZy8qIDogdGhpcyBjaGFuZ2UgdGhlIG91dHB1dCBvZiBhIG51bWJlciBvZiB0ZXN0cwoJKiB4aW5jbHVkZS5jOiBmaXhpbmcgdGhlIHBhcnNlZCBlbnRpdHkgcmVkZWZpbml0aW9uIHByb2JsZW0KCSAgcmFpc2VkIG9uIHRoZSBsaXN0LgoJKiB0ZXN0L3NjaGVtYXMvZGF0ZV8wLnhzZDogdXBkYXRlZCB0aGUgZGF0ZSB0ZXN0IGMuZi4gRTItMTIKCk1vbiBNYXIgMzEgMTM6MTk6MDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBkYXRlIGNvbXBhcmlzb24gdG8gaGFuZGxlIHRoZSB0em8KCSAgVGhlIG9ubHkgZmFpbHVyZXMgbGVmdCBhcmUgZGlzYWdyZWVtZW50cyBvbiBOb3RhdGlvbnMgYW5kCgkgICcrMScgbm90IGJlaW5nIGFsbG93ZWQgZm9yIHVsb25nLCB1aW50LCB1c2hvcnQgYW5kIHVieXRlLgoKTW9uIE1hciAzMSAxMjoxMTo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGdNb250aCBwYXJzaW5nIHJvdXRpbmUgYWNjb3JkaW5nbHkKCSAgdG8gdGhlIFhNTCBTY2hlbWFzIGVycmF0YQoJICBodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA1L3htbHNjaGVtYS1lcnJhdGEjZTItMTIKClN1biBNYXIgMzAgMjM6MDQ6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrIG9uIFhNTCBTY2hlbWFzIGRhdGF0eXBlcwoJICBhbmQgZmFjZXRzIHN1cHBvcnQuIEN1cnJlbnRseSBvbmx5IHNjaGVtYXMgd2l0aCBiaW5IZXggb3IKCSAgYmFzZTY0IGRvbid0IGNvbXBpbGUuIEEgZmV3IGVycm9yIGxlZnQgaW4gdGhlIHRlc3Qgc3VpdGU6CgkgIGZvdW5kIDEwMzUgdGVzdCBpbnN0YW5jZXM6IDkxOSBzdWNjZXNzIDIzIGZhaWx1cmVzCgkgIG1vc3QgYXJlIGdkYXRlIG9yIGdkYXRleWVhciBmYWlsaW5nIGNoZWNrLCBhbmQgYSBmZXcgY2FzZXMgd2hlcmUKCSAgSmFtZXMgY2xhcmsgdGVzdHMgcmVzdWx0cyBhcmUgc3RyYW5nZS4KCSogdmFsaWQuYzogYWxsb3cgdG8gcmV1c2UgdGhlIE5vdGF0aW9uIGNoZWNraW5nIHJvdXRpbmUgd2l0aG91dAoJICBoYXZpbmcgYSB2YWxpZGF0aW9uIGNvbnRleHQuCgkqIFNBWC5jOiByZW1vdmVkIGEgI2lmIDAKClNhdCBNYXIgMjkgMTc6MzU6MDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZm9yZ290IHRvIGFwcGx5IG9uZSBjaGVjayBmcm9tICMxMDY5MzEgcGF0Y2gKCSogeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yayBvbiBYTUwgU2NoZW1hcyBkYXRhdHlwZXMKClNhdCBNYXIgMjkgMTE6NDk6MjUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaCB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrCgkgIG9uIGNsZWFuaW5nIHVwIFhNTCBTY2hlbWFzIGRhdGF0eXBlcyBiYXNlZCBvbiBKYW1lcyBDbGFyayB0ZXN0cwoJICB0ZXN0L3hzZHRlc3QveHNkdGVzdC54bWwKCkZyaSBNYXIgMjggMTQ6MjQ6MDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBpbXBsZW1lbnRlZCBjb21wYXJpc29ucyBmb3IgU2NoZW1hcyB2YWx1ZXMuCgkqIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOiBmaXhlZAoJICBzb21lIGJ1Z3MgaW4gZHVyYXRpb24gaGFuZGxpbmcsIGNvbXBhcmlzb25zIGZvciBkdXJhdGlvbnMKCSAgYW5kIGRlY2ltYWxzLCByZW1vdmVkIGFsbCBtZW1vcnkgbGVha3MgcG9pbnRlZCBvdXQgYnkgSmFtZXMKCSAgdGVzdHN1aXRlLiBDdXJyZW50IHN0YXR1cyBpcyBub3cKCSAgZm91bmQgMjM4IHRlc3Qgc2NoZW1hczogMTk3IHN1Y2Nlc3MgNDEgZmFpbHVyZXMKCSAgZm91bmQgMTAzNSB0ZXN0IGluc3RhbmNlczogODAzIHN1Y2Nlc3MgMTMwIGZhaWx1cmVzCgpGcmkgTWFyIDI4IDAwOjQxOjU1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6IGZpeGVkIGJ1Z3MgYW5kIG1lbW9yeQoJICBsZWFrcyBpbiB0aGUgVzNDIFhNTCBTY2hlbWFzIGNvZGUKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGltcGxlbWVudGVkIG5vblBvc2l0aXZlSW50ZWdlcgoJKiB0ZXN0L3NjaGVtYXMvbGVuZ3RoMl8wLnhzZCByZXN1bHQvc2NoZW1hcy9sZW5ndGgyXzBfMC5lcnI6CgkgIGZpeGVkIHRoZSB0ZXN0IGFuZCByZXN1bHQuCgpUaHUgTWFyIDI3IDIyOjIzOjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0cmVlLmM6IHR3byBwYXRjaGVzIGZyb20gSmFtZXMgQnVyc2Egb24gdGhlIEhUTUwKCSAgcGFyc2VyIGFuZCBhIHR5cG8KCSogeG1sc2NoZW1hc3R5cGVzLmM6IHJlaW5kZW50aW5nLCBmaXhpbmcgYSBtZW1vcnkgYWNjZXNzCgkgIHByb2JsZW0gd2l0aCBkYXRlcy4KClRodSBNYXIgMjcgMTU6NTM6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyAjMTA5MjI3IHByb3ZpZGluZyBtb3JlIGNvbnRleHQgaW4gY2FzZSBvZiAKCSAgc3RhcnQvZW5kIHRhZyBtaXNtYXRjaAoJKiBweXRob24vdGVzdHMvY3R4dGVycm9yLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXJlcnIucHk6IHVwZGF0ZSB0aGUKCSAgdGVzdHMgYWNjb3JkaW5nbHkKClRodSBNYXIgMjcgMTU6MjI6NDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogc2hvdWxkIGZpeCAjMTA5MzI3IGVycm9ycyBvbiBtZW1vcnkgYWNjZXNzZXMKClRodSBNYXIgMjcgMTU6MDY6MTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogRml4ZWQgcmVvcGVuaW5nIG9mICM3ODY2MiA8Zm9ybSBhY3Rpb249Ii4uLiI+CgkgIGlzIGFuIFVSSSByZWZlcmVuY2UKCldlZCBNYXIgMjYgMjI6Mzg6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYnVnICMxMDkxNjAgb24gbm9uLUFTQ0lJIElEcwoKV2VkIE1hciAyNiAxNzozMDozNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogTm9ybSBzdWdnZXN0ZWQgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvciB4bWw6c3BhY2UgdmFsdWVzCgkgIGVycm9ycwoKV2VkIE1hciAyNiAwMTozNDoxOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZpcnN0IHBhcnQgb2YgdGhlIGZpeCB0bwoJICBwZXJmb3JtYW5jZSBidWcgIzEwODkwNSwgYWRkcyB4bWxYUGF0aE9yZGVyRG9jRWxlbXMoKSBwcm92aWRpbmcKCSAgZG9jdW1lbnQgb3JkZXIgZm9yIG5vZGVzLgoJKiBweXRob24vbGlieG1sLmM6IFB5dGhvbiBtYXkgcmVxdWlyZSBUUklPIGFzIEFsYmVydCBDaGluIHBvaW50ZWQgb3V0CgpUdWUgTWFyIDI1IDE2OjA3OjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiByZW1vdmluZyBhIHdhcm5pbmcgd2l0aCBTdW4gY29tcGlsZXIKCSAgYnVnICMxMDkxNTQKClR1ZSBNYXIgMjUgMDc6MDI6NTYgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xCgl1cGRhdGUgeG1sbGludCBtYW4gcGFnZSB3aXRoIC0tcmVsYXhuZyBvcHRpb24KClR1ZSBNYXIgMjUgMTI6MDc6MDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3NldHVwLnB5LmluIDogd2FzIG1pc3NpbmcgImRydl9saWJ4bWwyLnB5IgoKTW9uIE1hciAyNCAxOTozODowNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgeHBhdGguYzogc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIG5ldyB3YXkgb2YgCgkgIGhhbmRsaW5nIFJlc3VsdCBWYWx1ZSBUcmVlLCBiZWZvcmUgMi41LjUKCk1vbiBNYXIgMjQgMTY6MzY6MjMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1M6IHByZXBhcmluZyByZWxlYXNlIDIuNS41CgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgcmVnZW5lcmF0ZWQgaXQuCgpNb24gTWFyIDI0IDE0OjU2OjAxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIHNvbWUgcHJvYmxlbXMgcmVsYXRlZCB0byAjNzU4MTMgYWJvdXQgaGFuZGxpbmcKCSAgb2YgUmVzdWx0IFZhbHVlIFRyZWVzCgpTdW4gTWFyIDIzIDIyOjU3OjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBhcHBsaWVkIGEgc2V0IG9mIHBhdGNoZXMgZnJvbSBMb3JlbnpvIFZpYWxpIGNvcnJlY3RpbmcKCSAgVVJJIHBhcnNpbmcgZXJyb3JzLgoKU3VuIE1hciAyMyAyMjowMDoxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdmFsaWRpdHkgc3RhdHVzIHdhcyBub3QgcGFzc2VkIGJhY2sgd2hlbiB2YWxpZGF0aW5nIGluCgkgIGVudGl0aWVzLCBidXQgcmFpc2VkIGJ5IE9saXZlciBGaXNjaGVyCgpTdW4gTWFyIDIzIDIxOjMwOjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGF2b2lkIGVzY2FwaW5nICcsJyBpbiBVUklzCgpTdW4gTWFyIDIzIDEyOjU3OjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnICMxMDg5NzYgZ2V0IHRoZSBJRC9SRUZzIHRvIHJlZmVyZW5jZSAKCSAgdGhlIElEIGluIHRoZSBkb2N1bWVudCBjb250ZW50IGFuZCBub3QgaW4gdGhlIGVudGl0eSBjb3B5CgkqIFNBWC5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBtb3JlIGNoZWNraW5nIG9mIHRoZSBJRC9SRUYKCSAgc3R1ZmYsIGJldHRlciBzb2x1dGlvbiBmb3IgIzEwNzIwOAoJKiB4bWxyZWdleHAuYzogcmVtb3ZlZCBhIGRpcmVjdCBwcmludGYsIGRvaGhoCgkqIHhtbHJlYWRlci5jOiBmaXhlZCBhIGJ1ZyBvbiBzdHJlYW1pbmcgdmFsaWRhdGlvbiBvZiBlbXB0eSAKCSAgZWxlbWVudHMgaW4gZW50aXRpZXMKCSogcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDggdGVzdC9WQ00vdjIwLnhtbCByZXN1bHQvdmFsaWQveGh0bWwxLnhodG1sOgoJICBjbGVhbnVwIG9mIHRoZSB2YWxpZGF0aW9uIHRlc3RzCgkqIHRlc3QvdmFsaWQvaWQqIHRlc3QvdmFsaWQvZHRkcy9kZXN0Zm9vLmVudCByZXN1bHQvdmFsaWQvaWQqOgoJICBhZGRlZCBtb3JlIElEL0lEUkVGIHRlc3RzIHRvIHRoZSBzdWl0ZQoKU2F0IE1hciAyMiAyMzozODowOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgIzEwNzA0MyByZW1vdmluZyAyIHdhcm5pbmdzIHdpdGggU3VuIE9uZQoJICBjb21waWxlci4KClNhdCBNYXIgMjIgMTg6NTA6NDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiB2YWxncmluZCdlZCBhbmQgY2xlYW5lZCB1cCBhIGNvdXBsZSBvZiBtZW1vcnkgaXNzdWVzLgoKU2F0IE1hciAyMiAxNjoxNTo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZml4IGJ1ZyAjMTA3MjA4IGF2b2lkIGZhbHNlIGR1cGxpY2F0ZXMgd2hlbiBJRC9SRUZzIGFyZQoJICBkZWZpbmVkIGluIGVudGl0aWVzIGNvbnRlbnQKClNhdCBNYXIgMjIgMTU6NTM6MjcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IEZpeGVkIHZhbGlkYXRpb24gYnVnICMxMDg4NTggb24gbmFtZXNwYWNlIG5hbWVzIHVzaW5nCgkgIGVudGl0aWVzIGFuZCByZXBvcnRlZCBieSBCcmVudCBIZW5kcmlja3MKCSogeG1sbGludC5jOiByZXBvcnQgeG1sVGV4dFJlYWRlckhhc1ZhbHVlKCkgcmVzdWx0IGluIC0tc3RyZWFtCgkgIC0tZGVidWcgb3V0cHV0LgoKU2F0IE1hciAyMiAxMzozMjozOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgYnVnICMxMDg4MDEgcmVwb3J0ZWQgYnkgTWFsY29sbSBUcmVkaW5uaWNrCgkgIGFib3V0IHRoZSBEb2NUeXBlIG5vZGUgbm90IGJlaW5nIHJlcG9ydGVkIHNvbWV0aW1lcy4KCSogcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogYWRkZWQgdG8gdGVzdCB0byB0aGUgcmVncmVzc2lvbiBjaGVja3MKClNhdCBNYXIgMjIgMDE6NTc6NDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIGJ1ZyAjMTA4NTQ2IG9uIGxvbmcgQ0RBVEEgKG9yIHRleHQgbm9kZXMpCgkgIHJlcG9ydGVkIGJ5IEVkZCBEdW1iaWxsCgpTYXQgTWFyIDIzIDAxOjAwOjI0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogcGF0Y2ggZnJvbQoJICBqb2hhbkBldmVuaHVpcy5ubCBmb3IgIzEwNzkzNyBmaXhpbmcgc29tZSBsaW5lIGNvdW50aW5nCgkgIHByb2JsZW1zLCBhbmQgc29tZSBvdGhlciBjbGVhbnVwcy4KCSogcmVzdWx0L0hUTUwvOiB0aGlzIHJlc3VsdCBpbiBzb21lIGxpbmUgbnVtYmVyIGNoYW5nZXMKCkZyaSBNYXIgMjEgMjI6MTk6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiBmaXhlZCBSZWQgSGF0IGJ1ZyAjODYxMTggdXNlIGxpYnhtbDIuc3BlYwoJICBpbnN0ZWFkIG9mIGxpYnhtbC5zcGVjCgkqIHJlbGF4bmcuYzogZml4ZWQgc29tZSBvZiB0aGUgZXJyb3IgcmVwb3J0aW5nIGV4Y2Vzc2l2ZQoJICB2ZXJib3NpdHkKCSogY2F0YWxvZy5jIGRlYnVnWE1MLmMgdmFsaWQuYyB4bWxyZWFkZXIuYyB4bWxzY2hlbWFzLmMgeHBhdGguYwoJICB4bWxzY2hlbWFzdHlwZXMuYzogcmVtb3ZlZCBzb21lIHdhcm5pbmdzIGZyb20gZ2NjCgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlYnVpbHQKCkZyaSBNYXIgMjEgMTc6MjU6MjMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBhbm90aGVyIG9wdGltaXphdGlvbiwgZm9yIGNob2ljZSB0aGlzIHRpbWUKCSogcmVzdWx0L3JlbGF4bmcvc3BlYzEqIHJlc3VsdC9yZWxheG5nL3R1dG9yMTJfMSogCgkgIHJlc3VsdC9yZWxheG5nL3R1dG9yM183OiBjbGVhbnVwcy4KCkZyaSBNYXIgMjEgMTM6NDE6MjMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCB4bWxSZWxheE5HTm9kZU1hdGNoZXNMaXN0CgkqIHRlc3QvcmVsYXhuZy90ZXN0c3VpdGUueG1sOiBhdWdtZW50ZWQgdGhlIHRlc3Qgc3VpdGUKCSogcmVzdWx0L3JlbGF4bmcvc3BlYzEqIHJlc3VsdC9yZWxheG5nL3R1dG9yMTJfMSo6IHRoaXMgZml4ZXMKCSAgc29tZSBzY2hlbWFzIHZhbGlkYXRpb24gdGVzdHMgaW4gdGhlIHByZXNlbmNlIG9mIGZvcmVpZ24gCgkgIG5hbWVzcGFjZXMuCgpGcmkgTWFyIDIxIDAyOjIzOjM0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogYWRkZWQgYW5vdGhlciBpbnRlcmxlYXZlIHNwZWVkdXAuCgpUaHUgTWFyIDIwIDE3OjIyOjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCBpbnRlZ2VyIGFuZCBmaXhlZCBvbmUgb2YgdGhlCgkgIElEUkVGUyByZWdyZXNzaW9uIHRlc3RzIHBibQoJKiByZXN1bHQvcmVsYXhuZy9kb2Nib29rXzAuZXJyOiB1cGRhdGVkCgpXZWQgTWFyIDE5IDIxOjU4OjQ3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgeG1sc2NoZW1hc3R5cGVzLmM6IGF0dGVtcHQgdG8gY29wZSB3aXRoIElEL0lEUkVGKFMpCgkgIGRlY2xhcmVkIGJvdGggaW4gdGhlIERURCBhbmQgaW4gdGhlIFNjaGVtYXMgPGdyaW4vPgoJKiByZWxheG5nLmM6IG1vcmUgZGVidWcsIGFkZGVkIGEgYmlnIG9wdGltaXphdGlvbiBmb3IgPG1peGVkPgoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogYXVnbWVudGVkIHRoZSB0ZXN0c3VpdGUKCSogdGVzdC9yZWxheG5nLyByZXN1bHQvcmVsYXhuZzogYWRkZWQgdGhlIFJlbGF4Tkcgc3BlYyBhbmQgYSAKCSAgRG9jQm9vayBleGFtcGxlIHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzCgpXZWQgTWFyIDE5IDExOjM0OjEwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weTogY29zbWV0aWMgY2hhbmdlIGZvciBvdXRwdXQKCSogcmVsYXhuZy5jOiB0cnkgdG8gbWluaW1pemUgY2FsbHMgdG8gbWFsbG9jL2ZyZWUgZm9yIHN0YXRlcy4KClR1ZSBNYXIgMTggMTc6NTA6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiByZW1vdmVkIGEgd2FybmluZwoJKiB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSBjbGVhbnVwLCBhZGRlZCBFTlRJVFkgYW5kIEVOVElUSUVTCgkgIHN1cHBvcnQKCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5IGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weToKCSAgY2xlYW51cC9pbXByb3ZlbWVudHMgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgYmF0Y2gKCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IGF1Z21lbnRlZCBsaWJ4bWwyIG93biB0ZXN0c3VpdGUKClR1ZSBNYXIgMTggMTI6MzY6MjIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBlcnJvciBtc2cgY2xlYW51cCBkZWFsbG9jYXRpb24KCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFkZGVkIGEgZnVuY3Rpb24gdG8gaGFuZGxlIGxpc3RzIG9mCgkgIGF0b21pYyB0eXBlcywgYWRkZWQgc3VwcG9ydCBmb3IgSURSRUZTCgpUdWUgTWFyIDE4IDAxOjI4OjE1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB2YWxpZC5jIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCBEYXRhdHlwZSBJRAoJICBhbmQgSURSRUYsIHVzYWJsZSBmcm9tIFJlbGF4Tkcgbm93CgkqIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOiBuZWVkIHRvIGFkZCBhIG5ldyBpbnRlcmZhY2UKCSAgYmVjYXVzZSB0aGUgdmFsaWRhdGlvbiBtb2RpZmllcyB0aGUgaW5mb3NldAoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogZXh0ZW5kZWQgdGhlIHRlc3RzdWl0ZQoKTW9uIE1hciAxNyAxNjozNDowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIHRoZSBsYXN0IGNvcmUgUmVsYXhORyBidWcga25vd24gIzEwNzA4MywKCSAgc2hlbWFzIGRhdGF0eXBlIElEL0lEUkVGIHN1cHBvcnQgc3RpbGwgbWlzc2luZyB0aG91Z2guCgkqIHhtbHJlYWRlci5jOiBmaXggYSBjcmFzaGluZyBidWcgd2l0aCBwcmVmaXggcmFpc2VkIGJ5CgkgIE1lcmlqbiBCcm9lcmVuCgkqIHRlc3QvcmVsYXhuZy90ZXN0c3VpdGUueG1sOiBhdWdtZW50ZWQgdGhlIHRlc3RzdWl0ZSB3aXRoCgkgIGNvbXBsZXggaW5oZXJpdGFuY2UgdGVzdHMKClN1biBNYXIgMTYgMTg6NDU6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBwcmV2aW91cyBSZWxheC1ORyBjb2RlIGJhc2UsCgkgIHRoZSBkZXJpdmF0aW9uIGFsZ29yaXRobSBuZWVkIHNldmVyZSBjb25zdHJhaW5pbmcgY29kZSB0byBhdm9pZAoJICBjb21iaW5hdG9yaWFsIGV4cGxvc2lvbi4gRml4ZWQgdGhlIHByb2JsZW0gd2l0aCBTZWJhc3RpYW4gUmFodHoKCSAgVEVJIGJhc2VkIGV4YW1wbGUgYW5kIG90aGVyIGJ1Z3MKCSogcmVzdWx0L3JlbGF4bmcvKmVycjogdXBkYXRlZCB0aGUgcmVzdWx0cwoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogc3RhcnRlZCBhIG5ldyB0ZXN0IHN1aXRlIAoKU2F0IE1hciAxNSAyMjoyNjo0NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBBZnRlciBjb21pbmcgdG8gdGhlIGNvbmNsdXNpb24KCSAgdGhhdCB0aGUgb3JpZ2luYWwgUmVsYXhORyB2YWxpZGF0aW9uIGNvZGUgd2FzIHVuLWZpeGVhYmxlLCBpdCBnb3QKCSAgcmV3cml0dGVuIHRvIHVzZSB0aGUgZGVyaXZhdGlvbiBhbGdvcml0aG0gZnJvbSBKYW1lcyBDbGFyayBhbmQKCSAgcmVkZWJ1Z2dlZCBpdCAobmVhcmx5KSBmcm9tIHNjcmF0Y2g6CgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDM3MiBzdWNjZXNzIDEgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1Mjkgc3VjY2VzcyAwIGZhaWx1cmVzCgpUdWUgTWFyIDExIDEyOjA4OjIzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlci5jOiBmaXggc29tZSByZWN1cnNpb24gcHJvYmxlbXMgaW50cm9kdWNlZCBpbiB0aGUKCSAgbGFzdCByZWxlYXNlLgoJKiByZWxheG5nLmM6IG1vcmUgZGVidWdnaW5nIG9mIHRoZSBSTkcgdmFsaWRhdGlvbiBlbmdpbmUsIHN0aWxsCgkgIHByb2JsZW1zIHRob3VnaC4KCk1vbiBNYXIgMTAgMTQ6MTA6NDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IHN0b3AgZ2VuZXJhdGluZyB3cm9uZyByZXN1bHQgZmlsZSB3aXRoICogaW4gbmFtZQoJKiByZWxheG5nLmM6IGZpeGluZyB0aGUgaW5jbHVkZSBidWcgcmFpc2VkIGJ5IFNlYmFzdGlhbiBSYWh0egoJKiByZXN1bHQvcmVsYXhuZy9kZW1vKiB0ZXN0L3JlbGF4bmcvZGVtbzogYWRkZWQgdGhlIHRlc3RzIGZyb20KCSAgU2ViYXN0aWFuIHJlcHJvZHVjaW5nIHRoZSBwcm9ibGVtLgoKU3VuIE1hciAgOSAxODowMjozMSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQuMTogcmVnZW5lcmF0aW5nIG1hbiBwYWdlIGZyb20geG1sbGludC54bWwgdG8gcGljawoJICB1cCBBbGVrc2V5J3MgY2hhbmdlCgpTdW4gTWFyICA5IDEzOjUzOjE2IDIwMDMgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogeG1sbGludC5jIGRvYy94bWxsaW50LnhtbDogdXNlICRYTUxMSU5UX0lOREVOVCBlbnZpcm9ubWVudAoJdmFyaWFibGUgdG8gY29udHJvbCB0aGUgaW5kZW50YXRpb24gZm9yIHRoZSB4bWxsaW50ICItLWZvcm1hdCIgCglvcHRpb24KClNhdCBNYXIgIDggMTQ6Mjc6NDMgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGVuY29kaW5nLmM6IGFwcGxpZWQgR2VubmFkeSdzIHBhdGNoIGFnYWluc3QgYnVmZmVyIG92ZXJydW4KCkZyaSBNYXIgIDcgMTk6Mjk6NDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC94c2R0ZXN0L3hzZHRlc3QueG1sIHVyaS5jOiBhZnRlciBhbmQgZXhjaGFuZ2Ugd2l0aCBKYW1lcwoJICBDbGFyayBpdCBhcHBlYXJlZCBJIGhhZCBidWcgaW4gVVJJIHBhcnNpbmcgY29kZSAuLi4KCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogY29tcGxldGVseSByZXZhbXBlZCBlcnJvcgoJICByZXBvcnRpbmcgdG8gbm90IGxvb3NlIG1lc3NhZ2UgZnJvbSBvcHRpb25hbCBwYXJ0cy4KCSogeG1sbGludC5jOiBhZGRlZCB0aW1pbmcgZm9yIFJORyB2YWxpZGF0aW9uIHN0ZXBzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdCwgYWxsIGVycm9yIG1lc3NhZ2VzIGNoYW5nZWQKCkZyaSBNYXIgIDcgMTU6MTg6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4IGJ1ZyAjMTA3ODA0LCB0aGUgYWxnb3JpdGhtIHVzZWQgZm9yIGRvY3VtZW50IG9yZGVyCgkgIGNvbXB1dGF0aW9uIHdhcyBmYWlsaW5nIG9uIGF0dHJpYnV0ZXMuCgpUaHUgTWFyICA2IDIyOjM1OjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeCBidWcgIzEwNzc2NCAsIHBvc3NpYmlsaXR5IG9mIGJ1ZmZlciBvdmVyZmxvdwoJICBpbiB4bWxWYWxpZERlYnVnKCkKCldlZCBNYXIgIDUgMTc6NDE6MzcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIGluY2x1ZGUvbGlieG1sL25hbm9mdHAuaDogYWRkaW5nIHhtbE5hbm9GVFBEZWxlKCkKCSAgZnJvbSBQaGlsaXBwIER1bmtlbAoKV2VkIE1hciAgNSAxMDo1NzowOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZS5jOiBtYWRlIHBvd3RlbiBhcnJheSBzdGF0aWMgaXQgc2hvdWxkIG5vdCBiZSBleHBvcnRlZAoJKiBIVE1McGFyc2VyLmM6IGZpeCBidWcgIzEwNzM2MSBieSByZXVzaW5nIHRoZSBjb2RlIGZyb20gdGhlIFhNTCAKCSAgcGFyc2VyIGZ1bmN0aW9uLgoJKiB0ZXN0SFRNTC5jOiBnZXQgcmlkIG9mIHZhbGdyaW5kIG1lc3NhZ2VzIG9uIHRoZSBIVE1MIFNBWCB0ZXN0cwoKRnJpIEZlYiAyOCAwMDoyMzowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGEgbm9kZSBkdW1wIGNyYXNoIG9uIGF0dHJpYnV0ZXMKCSogdGVzdC94c2R0ZXN0L3hzZHRlc3QueG1sIHRlc3QveHNkdGVzdC94c2R0ZXN0LnhzbDogZml4ZWQKCSAgYW4gVVJJIHRlc3QgYnVnIGFuZCBnZXQgYmV0dGVyIG91dHB1dC4KClRodSBGZWIgMjcgMjI6Mjg6NDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5OiBnaXZlIG1vcmUgaW5mb3MKCSogcmVsYXhuZy5jOiBmaXggYSBidWcgcmVwb3J0ZWQgYnkgU2ViYXN0aWFuIFJhaHR6IGFuZAoJICBSRUYtPkRFRiBpbiBhdHRyaWJ1dGUgdmFsdWVzLgoKVGh1IEZlYiAyNyAyMTowOTozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHkgdGVzdC94c2R0ZXN0L3hzZHRlc3QueG1sCgkgIHRlc3QveHNkdGVzdC94c2R0ZXN0LnhzbDogaW1wb3J0IG9mIHRoZSBYU0QgRGF0YXR5cGUKCSAgcmVncmVzc2lvbiB0ZXN0cyBmcm9tIEphbWVzIENsYXJrLgoKVGh1IEZlYiAyNyAxODo0MDowNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jCgkgIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOiBhZGRlZCBwYXJhbSBzdXBwb3J0IGZvciByZWxheG5nCgkgIHR5cGUgY2hlY2tpbmcsIHN0YXJ0ZWQgdG8gaW5jcmVtZW50IHRoZSBwb29sIG9mIHNpbXBsZSB0eXBlcwoJICByZWdpc3RlcmVkLCBzdGlsbCBtdWNoIHdvcmsgdG8gYmUgZG9uZSBvbiBzaW1wbGUgdHlwZXMgYW5kCgkgIGZhY2V0cyBjaGVja2luZ3MuCgpXZWQgRmViIDI2IDE2OjQ1OjM5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IGZpeGVzIGFnYWluIG9uZSBvZiB0aGUgcHJvYmxlbSByYWlzZWQgYnkKCSAgSmFtZXMgQ2xhcmsgaW4gIzEwNjc4OAoKV2VkIEZlYiAyNiAxNTo0Njo0OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IEZpeGVkIGEgY291cGxlIG9mIHByb2JsZW0gcmFpc2VkIGJ5IEphbWVzIENsYXJrCgkgIGluIGJ1ZyAjMTA3MDgzLCB0aGUgc3VwcG9ydCBmb3IgSUQvSURSRUYvSURSRUZTIGF0IHRoZSBXWFMKCSAgZGF0YXR5cGUgbGV2ZWwgc3RpbGwgbm90IGZpeGVkIHRob3VnaC4KCk1vbiBGZWIgMjQgMjE6MDk6MTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuNAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoJKiByZWxheG5nLmM6IHJlbW92ZWQgd2FybmluZ3MKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKTW9uIEZlYiAyNCAyMDo1MzoxNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlcyBhIERURCByZWdleHAgZ2VuZXJhdGlvbiBwcm9ibGVtLgoKTW9uIEZlYiAyNCAyMDoxMjo1NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZXMgYnVnICMxMDU5OTggYWJvdXQgZmFsc2UgZGV0ZWN0aW9uIG9mCgkgIGF0dHJpYnV0ZSBjb25zdW1wdGlvbiBsb29wLgoKTW9uIEZlYiAyNCAxOToxNDo1NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBGaXhlcyBidWcgIzEwNjkzMSBpbiBYSW5jbHVkZSBlbnRpdGllcyBtZXJnaW5nLgoKTW9uIEZlYiAyNCAxODo1MDozNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZml4ZWQgYnVnICMxMDU5OTIKCk1vbiBGZWIgMjQgMTg6MTQ6MTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxTZXRQcm9wIGFuZCBhbC4gd2hlbiB0aGUgbm9kZSBwYXNzZWQgaXMgbm90IGFuCgkgIGVsZW1lbnQuCgkqIHJlbGF4bmcuYzogZml4ZWQgYnVncyA3LjMgKHRob3VnaCBub3QgY29tcGxldGUpIGFuZCBtZW1vcnkgbGVha3MKCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMzY5IHN1Y2Nlc3MgNCBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDUyNSBzdWNjZXNzIDQgZmFpbHVyZXMKCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5OiBhZGRlZCBtZW1vcnkgZGVidWcgcmVwb3J0aW5nCgpNb24gRmViIDI0IDEyOjQxOjU0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jIHBhcnNlci5jOiBzb21lIHdhcm5pbmcgcmVtb3ZhbCBvbiBJZ29yJ3MgcGF0Y2gKCSogdHJlZS5jOiBzZWVtcyBJIG1lc3NlZCB1cCB3aXRoICMxMDY3ODggZml4CgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgc29tZSBiYXNlIHByb2JsZW1zIHdoZW4gUHl0aG9uIHByb3ZpZGVzCgkgIHRoZSByZXNvbHZlci4KCSogcmVsYXhuZy5jOiBmaXhlZCB0aGUgaW50ZXJsZWF2ZSBhbGdvcml0aG0gCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDM2NCBzdWNjZXNzIDkgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1MjUgc3VjY2VzcyA0IGZhaWx1cmVzCgkgIHRoZSByZXN1bHRpbmcgZmFpbHVyZXMgYXJlIGJ1ZyBpbiB0aGUgYWxnb3JpdGhtIGZyb20gNy4zIGFuZAoJICBsYWNrIG9mIHN1cHBvcnQgZm9yIHBhcmFtcwoKU3VuIEZlYiAyMyAxNDo0OTozOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYW5vdGhlciBmaXggZm9yIG5vZGVpbmZvIGluIGVudGl0aWVzIHByb2JsZW0KCSogdHJlZS5jIGVudGl0aWVzLmM6IGZpeGVkIGJ1ZyAjMTA2Nzg4IGZyb20gSmFtZXMgQ2xhcmsKCSAgc29tZSBzcGFjZXMgbmVlZCB0byBiZSBzZXJpYWxpemVkIGFzIGNoYXJhY3RlciByZWZlcmVuY2VzLgoKU2F0IEZlYiAyMiAxODoyODoxNiBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogcGFyc2VyLmMgdXJpLmM6IGZpeGVkIHRoZSBidWcgSSBpbnRyb2R1Y2VkIGluIHRoZSBwYXRoCgkgIGhhbmRsaW5nLCByZXBvcnRlZCBieSBTZWJhc3RpYW4gQmVyZ21hbm4KClNhdCBGZWIgMjIgMDA6MTk6NDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBzb21lIG5vZGVpbmZvIGluIGVudGl0aWVzIHByb2JsZW0gcmFpc2VkCgkgIGJ5IEdsZW5uIFcuIEJhY2gKCSogcmVsYXhuZy5jOiBpbXBsZW1lbnRlZCB0aGUgZmlyc3Qgc2VjdGlvbiA3LjMgY2hlY2sKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKRnJpIEZlYiAyMSAxODoxMjoxOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIHNvbWUgcHJvYmxlbXMgaW4gdGhlIHByZXZpb3VzIGNvbW1pdAoJICBhbmQgZmluaXNoZWQgaW1wbGVtZW50aW5nIDQuMTYgcnVsZXMgY2hlY2tpbmcKCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMzUzIHN1Y2Nlc3MgMjAgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1MTkgc3VjY2VzcyA2IGZhaWx1cmVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCkZyaSBGZWIgMjEgMTY6Mzc6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBpbXBsZW1lbnRlZCBjaGVja3MgZnJvbSBzZWN0aW9uIDcuMgoKVGh1IEZlYiAyMCAxNjowMDozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGltcGxlbWVudGVkIHRoZSBjaGVja3MgZnJvbSBzZWN0aW9uIDcuMSwgZml4ZWQKCSAgc29tZSBvZiB0aGUgNC4yMCBhbmQgNC4yMSBwcm9ibGVtcy4KCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMzM4IHN1Y2Nlc3MgMzUgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1MTkgc3VjY2VzcyA2IGZhaWx1cmVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKClRodSBGZWIgMjAgMDE6MDk6MjQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBpbXBsZW1lbnRlZCB0aGUgNC4yMCBhbmQgNC4yMSBzaW1wbGlmaWNhdGlvbiBydWxlcy4KCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKV2VkIEZlYiAxOSAxODozMDozMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgYnVnZml4ZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKV2VkIEZlYiAxOSAxNTozOTo1NiBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogRE9DQnBhcnNlci5jOiBvYnNvbGV0ZWQgeG1sTm9ybWFsaXplV2luZG93c1BhdGgKCSogSFRNTHBhcnNlci5jOiBvYnNvbGV0ZWQgeG1sTm9ybWFsaXplV2luZG93c1BhdGgKCSogU0FYLmM6IGVuc3VyZWQgeG1sRG9jLlVSTCBpcyBhbHdheXMgY2Fub25pYwoJKiBwYXJzZXIuYzogb2Jzb2xldGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoCgkqIHVyaS5jIGluY2x1ZGUvbGlieG1sL3VyaS5oOiBpbnRyb2R1Y2VkIHhtbENhbm9uaWNQYXRoCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogb2Jzb2xldGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgZmV3IGV4cG9ydHMKCldlZCBGZWIgMTkgMTQ6MjY6NTEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBwYXRjaGVkIHRvIGhhdmUgc2hhcmVkIGxpYnJhcmllcwoJICBmb3IgUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMgYW5kIHN0YXRpYyBiaW5hcmllcyBmb3IgZ2RiIGRlYnVnCgkgIGluIG15IGRldmVsb3BtZW50IGVudmlyb25tZW50CgkqIHJlbGF4bmcuYzogbW9yZSBidWdmaXhlcyAKCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMjk2IHN1Y2Nlc3MgNzcgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1MTYgc3VjY2VzcyA4IGZhaWx1cmVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCldlZCBGZWIgMTkgMDE6MTc6NDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBndWVzcyB3aGF0ICEgUmVsYXgtTkcgYnVnZml4aW5nLCB3aGF0IGEgc3VycHJpemUuLi4KClR1ZSBGZWIgMTggMjI6MDk6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZsb2F0L2RvdWJsZSBjaGVjayBidWdmaXgKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZXhwb3J0ZWQgYSBmdW5jdGlvbiBmb3IgTk1UT0tFTgoJICB2YWxpZGF0aW9uCgkqIHhtbHJlYWRlci5jOiBhZGQgYSBUT0RPIGZvciBKb2R5CgkqIHJlbGF4bmcuYzogYnVnZml4IGJ1Z2ZpeCBidWdmaXgKCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMzAwIHN1Y2Nlc3MgNzMgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1MDcgc3VjY2VzcyAxMCBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpUdWUgRmViIDE4IDAwOjMzOjE3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHk6IG1vcmUgUmVsYXhORyBidWcgaHVudGluZwoKTW9uIEZlYiAxNyAxODoyMzozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5OiBtb3JlIHdvcmsgb24gdGhlCgkgIFJlbGF4TkcgaW1wbGVtZW50YXRpb24gY29uZm9ybWFuY2UgdGVzdGluZy4KCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMjg0IHN1Y2Nlc3MgODkgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA0NDggc3VjY2VzcyA0NyBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpTdW4gRmViIDE2IDE2OjQ4OjM4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIENoYW5nZUxvZyB0cmVlLmMgZG9jL2xpYnhtbC1kb2MuZWwgZG9jL2xpYnhtbDItYXBpLnhtbDogYXBwbGllZAoJICBhIHBhdGNoIGZyb20gS2phcnRhbiBNYXJhYXMgdG8gZml4IHNvbWUgdHlwb3MKClN1biBGZWIgMTYgMTY6NDA6NTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIGJ1Zy1odW50aW5nCgkqIHRlc3RSZWxheC5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogYWRkZWQgLS10cmVlIHRvIGR1bXAgdGhlCgkgIGludGVybWVkaWF0ZSBybmcgdHJlZQoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBwYXRjaCBmcm9tIFN0ZXBoYW5lIEJpZG91bCB0byBmaXggdGhlIGdlbmVyYXRvcgoJICBvbiBweXRob24gPCAyLjIKCkZyaSBGZWIgMTQgMTc6NDk6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5IHJlbGF4bmcuYzogbW9yZSB0ZXN0aW5nIG9uIHRoZQoJICBSZWxheC1ORyBmcm9udCwgY2xlYW5pbmcgdXAgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgZmFpbHVyZXMKCSAgY3VycmVudCBzdGF0ZSBhbmQgSSBmb3Jnb3Qgc3VwcG9ydCBmb3IgIm1peGVkIjoKCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMjgwIHN1Y2Nlc3MgOTMgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA0MDEgc3VjY2VzcyA2OCBmYWlsdXJlcwoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIHhtbHNjaGVtYXN0eXBlcy5jOiBmaW5pc2hlZCBhbmQKCSAgbW92ZWQgdGhlIE5hbWUsIE5DTmFtZSBhbmQgUU5hbWUgdmFsaWRhdGlvbiByb3V0aW5lIGluIHRyZWUuYwoJKiB1cmkuYzogZml4ZWQgaGFuZGxpbmcgb2YgVVJJIGVuZGluZyB1cCB3aXRoICMsIGkuZS4gaGF2aW5nCgkgIGFuIGVtcHR5IGZyYWdtZW50IElELgoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpUaHUgRmViIDEzIDE2OjQ5OjI0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhpbmNsdWRlLXRlc3Qtc3VpdGUucHk6IGltcHJvdmVkIHRoZSBzY3JpcHQgYWNjb3JkaW5nbHkKCSAgdG8gdGhlIFhJbmNsdWRlIHJlZ3Jlc3Npb24gdGVzdHMgdXBkYXRlcwoJKiB4cG9pbnRlci5jOiBJbXBsZW1lbnRlZCBYUG9pbnRlciBlbGVtZW50KCkgU2NoZW1lIFczQyBQUiBvZiAxMwoJICBOb3ZlbWJlciAyMDAyCgkqIHJlc3VsdC9YUGF0aC94cHRyL2NoYXB0ZXJzY2hpbGRzZXEgcmVzdWx0L1hQYXRoL3hwdHIvdmlkY2hpbGRzZXEKCSAgdGVzdC9YUGF0aC94cHRyL2NoYXB0ZXJzY2hpbGRzZXEgdGVzdC9YUGF0aC94cHRyL3ZpZGNoaWxkc2VxOgoJICBhdWdtZW50ZWQgdGhlIFhwb2ludGVyIHRlc3RzdWl0ZSBmb3IgdGhlIGVsZW1lbnQoKSBzY2hlbWUKClRodSBGZWIgMTMgMTI6MDA6MzAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBhZGRlZCBUT0RPIGZvciB0aGUgRFREIGNvbXBhdGliaWxpdHkgc3BlYwoJKiB4aW5jbHVkZS5jOiBtb3JlIGJ1ZyBmaXhlcyBkcml2ZW4gYnkgdGhlIHRlc3RzdWl0ZSAKClR1ZSBGZWIgMTEgMTk6MDE6MDIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steGluY2x1ZGUtdGVzdC1zdWl0ZS5weSB4aW5jbHVkZS5jOiBXb3JrIG9uIHRoZSBXM0MvTklTVAoJICByZWdyZXNzaW9uIHRlc3RzIGZvciBYSW5jbHVkZSwgaW1wcm92ZWQgdGhlIHNjcmlwdCwgaW1wcm92aW5nCgkgIFhJbmNsdWRlIGVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20KCk1vbiBGZWIgMTAgMTc6MTk6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIDIuNS4zCgpNb24gRmViIDEwIDE3OjExOjIyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdHJ5aW5nIHRvIGZpeCAjMTA0OTM0IGFib3V0IHNvbWUgWEhUTUwxIHNlcmlhbGl6YXRpb24KCSAgaXNzdWVzLgoKTW9uIEZlYiAxMCAxNjo0MToxMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIHhtbElPLmM6IGZpeGluZyBidWcgIzEwNDY0NiBhYm91dCBpY29udiBiYXNlZAoJICBlbmNvZGluZyBjb252ZXJzaW9uIHdoZW4gdGhlIGlucHV0IGJ1ZmZlciBzdG9wcyBpbiB0aGUKCSAgbWlkZGxlIG9mIGEgbXVsdGlieXRlIGNoYXIKCk1vbiBGZWIgMTAgMTU6MjQ6NDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9yZWxheG5nL09BU0lTL3NwZWN0ZXN0LnhtbDogT0FTSVMgUmVsYXhORyB0ZXN0c3VpdGUKCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5OiBweXRob24gc2NyaXB0IHRvIHJ1biByZWdyZXNzaW9uCgkgIGFnYWluc3QgT0FTSVMgUmVsYXhORyB0ZXN0c3VpdGUKCSogcmVsYXhuZy5jOiBzb21lIGNsZWFudXAgdHdlYWtzCgkqIEhUTUxwYXJzZXIuYyBnbG9iYWxzLmM6IGNsZWFudXBzIGluIGNvbW1lbnRzCgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IHVwZGF0ZWQgdGhlIEFQSQoJKiByZXN1bHQvcmVsYXhuZy8qOiBlcnJvcnMgbW92ZWQgZmlsZXMsIHNvIGxhcmdlIGRpZmZzIGJ1dAoJICBubyBjaGFuZ2VzIGF0IHRoZSBzZW1hbnRpYyBsZXZlbC4KCk1vbiBGZWIgMTAgMDE6MDA6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhpbmcgIzEwNTY3OCBwcm9ibGVtIHdoZW4gZHVtcGluZyBhIG5hbWVzcGFjZSBub2RlLgoKTW9uIEZlYiAxMCAwMDozMDowMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBkb2MgY29tbWVudCBwcm9ibGVtcwoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOiBhZGRpbmcKCSAgUmVsYXhORyB3cmFwcGVycwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlbGF4bmcucHk6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGVzdCBvZiB0aG9zZSBlYXJseSBQeXRob24gUmVsYXhORyBiaW5kaW5ncwoKU3VuIEZlYiAgOSAxNToxODo0MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZXMgYSBsaWJ0b29sIHByb2JsZW0gb24gQU1EIDY0Yml0cyBidWlsZHMKCSogcmVsYXhuZy5jOiBmb3VuZCB0aGUgdmFsaWRhdGlvbiBwcm9ibGVtIEkgaGFkIHdpdGggaW50ZXJsZWF2ZQoJICB3aGVuIG5vdCBjb3ZlcmluZyBhbGwgcmVtYWluaW5nIHNpYmxpbmdzCgkqIE1ha2VmaWxlLmFtIHRlc3QucmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZCB0aGUKCSAgdGVzdHN1aXRlIGFuZCBjaGVjayB0aGUgUk5HIHNjaGVtYXMgYWdhaW5zdCB0aGUgUk5HIHNjaGVtYXMKCSAgZ2l2ZW4gaW4gYXBwZW5kaXggQQoKU2F0IEZlYiAgOCAxODo1NTo0MyBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogdXBkYXRlcyBmb3IgUmVsYXhORwoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogdXBkYXRlcyBmb3IgUmVsYXhORwoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIFJlbGF4TkcgZXhwb3J0cwoKRnJpIEZlYiAgNyAxNDowMDo1MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBhcHBsaWVkIGFub3RoZXIgYnVnIGZpeCBmcm9tIFNlYW4gQ2hpdHRlbmRlbgoKRnJpIEZlYiAgNyAxMzozNDowOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4geG1sbGludC5jOiBJIGYuLi5lZCB1cCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCgkgIG9mIHNjaGVtYXMgYW5kIC0tcmVsYXhuZyBvcHRpb24gZGlzcGxheSBpbiB4bWxsaW50LCBwb2ludGVkIGJ5CgkgIE1vcnVzIFdhbHRlci4KCSogeGxpbmsuYzogU2VhbiBDaGl0dGVuZGVuIHBvaW50ZWQgYSBjb3VwbGUgb2YgZXJyb3JzIGluIHRoZSBYTGluawoJICBkZXRlY3Rpb24gbW9kdWxlLCBmaXhlcyBidWcgIzEwNTM3NC4KCkZyaSBGZWIgIDcgMDE6NDM6MzggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFkZGVkIHRoZSBib29sZWFuIGJhc2UgdHlwZS4KClRodSBGZWIgIDYgMTA6MjM6NTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHN0YXJ0ZWQgaW1wbGVtZW50aW5nIHNvbWUgb2YgdGhlIG1pc3NpbmcKCSAgZGVmYXVsdCBzaW1wbGUgdHlwZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKV2VkIEZlYiAgNSAxNToyODowNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzLCByZWFkeSBmb3IgMi41LjIgcmVsZWFzZQoKV2VkIEZlYiAgNSAxNDoxNTo1OSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgdHJlZS5jIHhtbElPLmM6IGNvbW1lbnRzIGNsZWFudXBzCgkqIE1ha2VmaWxlLmFtOiB1c2UgeG1sbGludCBmb3IgZG9pbmcgdGhlIFJlbGF4TkcgdGVzdHMKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi41LjIgbWFkZSBzY2hlbWFzIHN1cHBvcnQgZGVmYXVsdCB0bwoJICBvbiBpbnN0ZWFkIG9mIG9mZgoJKiByZWxheG5nLmM6IHJlbW92ZWQgdGhlIHZlcmJvc2l0eQoJKiB4bWxsaW50LmM6IGFkZGVkIC0tcmVsYXhuZyBvcHRpb24KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sX3dyYXAuaDogcHJlcGFyZWQgdGhlIGludGVncmF0aW9uCgkgIG9mIHRoZSBuZXcgUmVsYXhORyBtb2R1bGUgYW5kIHNjaGVtYXMKCSogcmVzdWx0L3JlbGF4bmcvKjogbGVzcyB2ZXJib3NlIG91dHB1dAoKV2VkIEZlYiAgNSAxMjowMDozNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBkbyBub3QgcnVuIGNvbnRlbnQgbW9kZWwgdmFsaWRhdGlvbiBpZiB0aGUKCSAgY29udGVudCBpcyBub3QgZGV0ZXJtaW5pc3QKCldlZCBGZWIgIDUgMTE6NDM6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGFkZGVkIHRoZSByZWRlZmluaXRpb24gb2YgbmFtZXNwYWNlZCBhdHRyaWJ1dGUKCSAgY2hlY2sgdGhhdCB3YXMgbWlzc2luZyBhcyBGYWJyaWNlIERlc3LpIHBvaW50ZWQgb3V0LgoKV2VkIEZlYiAgNSAxMTowOToyOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oOiBhcHBsaWVkIEhUTUwKCSAgaW1wcm92ZW1lbnRzIGZyb20gTmljayBLZXcsIGFsbG93aW5nIHRvIGRvIG1vcmUgY2hlY2tpbmcKCSAgdG8gSFRNTCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy4KClR1ZSBGZWIgIDQgMjM6NDc6MDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZml4aW5nIGJ1ZyAjMTA1MTM3IGFib3V0IGVudGl0aWVzIGRlY2xhcmF0aW9uCgkgIG5lZWRpbmcgdG8gYmUgY29waWVkIHRvIHRoZSBpbmNsdWRpbmcgZG9jdW1lbnQuCgpUdWUgRmViICA0IDIwOjI2OjIyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgYnVnICMxMDQ4MTcgd2l0aCBkZWxlZ2F0ZVVSSQoJKiB4cGF0aC5jOiBmaXhpbmcgYnVncyAjMTA0MTIzIGFuZCAjMTA0MTI1CgpUdWUgRmViICA0IDE3OjEyOjU2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB2YWxpZC5jIHhtbHJlYWRlci5jIHB5dGhvbi9saWJ4bWxfd3JhcC5oIAoJICBweXRob24vdHlwZXMuYzogZml4aW5nICMxMDQwOTYgdG8gY29tcGlsZSB3aXRob3V0IHJlZ2V4cHMKClR1ZSBGZWIgIDQgMTY6MzE6NTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4aW5nIGJ1ZyAjMTAzOTY5IGZvcmdvdCB0byBhZGQgYW4gZXBzaWxvbiB0cmFuc2l0aW9uCgkgIHdoZW4gYnVpbGRpbmcgdGhlIGF1dG9tYXRhIGZvciBlbGVtKgoKVHVlIEZlYiAgNCAxNjoyMTowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBcm5lIGRlIEJydWlqbiBmaXhpbmcgCgkgIGJ1ZyAjMTAzODI3CgpUdWUgRmViICA0IDE2OjE3OjA5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogdXBkYXRpbmcgYSBjb21tZW50LCBmaXhpbmcgIzEwMzc3NgoKVHVlIEZlYiAgNCAxNjowNTo1MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIGJ1ZyAxMDUwNDkgZm9yIHZhbGlkaXR5IGNoZWNraW5nIG9mIGNvbnRlbnQKCSAgd2l0aGluIHJlY3Vyc2l2ZSBlbnRpdGllcy4KClR1ZSBGZWIgIDQgMTU6NDA6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB0cnkgdG8gZml4ICMgMTA1MDQ5CgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzdHlwZXMuYzogYSBjb3VwbGUgb2YgY2hhbmdlcyBhbmQgZXh0ZW5zaW9ucwoJKiB0cmVlLmM6IHVwZGF0ZWQgYSBmdW5jdGlvbiBjb21tZW50CgpUdWUgRmViICA0IDAwOjIwOjU4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmc6IG1vcmUgd29yayBvbiBncmFtbWFycyBhbmQgcmVmcy9kZWZzCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpNb24gRmViICAzIDE0OjE2OjU5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmc6IG1vcmUgd29yayBvbiBuYW1lIGNsYXNzZXMsIGV4Y2VwdCBzdXBwb3J0CgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpNb24gRmViICAzIDExOjU2OjA1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmc6IG1vcmUgd29yayBvbiBuYW1lIGNsYXNzZXMsIHRoZSAidmFsaWRhdGUgYWxsIiBzY2hlbWFzCgkgIHNlZW1zIHRvIHdvcmsgbm93LgoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIEZlYiAgMyAwOTo1MDoyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IHJlbW92ZWQgYW4gdW5wcm90ZWR0ZWQgZGVidWcgbWVzc2FnZSBBbGVrc2kgU3Vob25lbgoJKiBwYXJzZXIuYzogcHV0IGEgZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBkb2N1bWVudCBkZXB0aCwgYmFzaWNhbGx5CgkgIHRyeWluZyB0byBhdm9pZCBhbm90aGVyIGtpbmQgb2YgRG9TIGF0dGFjay4KCSogcmVsYXhuZy5jOiBzb21lIGNvZGUgdy5yLnQuIG5hbWVDbGFzc2VzCgpTdW4gRmViICAyIDE3OjAxOjQzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGNoZWNrIGFsbCB0aGUgbmFtZXNwYWNlIHN1cHBvcnQKCSAgd2FzIGFjdHVhbGx5IGNvcnJlY3QgYmFzZWQgb24gdHV0b3JpYWwgc2VjdGlvbiAxMC4KClN1biBGZWIgIDIgMTU6MzM6MzggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogaW5jbHVkZSBzZWVtcyB0byB3b3JrIG9rYXkgbm93CgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpTYXQgRmViICAxIDE5OjQ0OjU4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogYSBiaXQgb2Ygd29yayBkb25lIGluIHRoZSB0cmFpbiBiYWNrLgoJKiB0ZXN0L3JlbGF4bmcvKjogYWRkZWQgb25lIG9mIHRoZSBpbmNsdWRlIHRlc3RzCgpUaHUgSmFuIDMwIDE0OjA2OjU1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmc6IG1vcmUgd29yayBkb25lIGluIHRoZSB0cmFpbgoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKV2VkIEphbiAyOSAyMzo0NDo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGRlYnVnZ2luZyBvZiBleHRlcm5hbFJlZgoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKV2VkIEphbiAyOSAyMjowNjowNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORywgaW1wbGVtZW50aW5nIGV4dGVybmFsUmVmCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoJKiBNYWtlZmlsZS5hbTogY2xlYW51cCB0byBSZWxheHRlc3RzIHRhcmdldAoKV2VkIEphbiAyOSAwMDowODozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORywgaW1wbGVtZW50aW5nIGludGVybGVhdmUKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgpUdWUgSmFuIDI4IDIxOjU2OjQ5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HLCBpbXBsZW1lbnRpbmcgaW50ZXJsZWF2ZQoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBKYW4gMjcgMDc6MzU6MjkgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9jdXN0b21mby54c2wKCSogZG9jL3R1dG9yaWFsL2N1c3RvbWh0bWwueHNsCglhZGRpbmcgc3R5bGVzaGVldCBjdXN0b21pemF0aW9ucyB1c2VkIHRvIGdlbmVyYXRlIGZvCglmb3IgcGRmIGFuZCBodG1sCgpNb24gSmFuIDI3IDEzOjI5OjQzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgYSBudW1iZXIgb2YgYmFzZSB0eXBlIGRlZmluaXRpb24gYnV0IG5vdAoJICB0aGUgYXNzb2NpYXRlZCBjaGVja3MsIHRob3NlIGFyZSBzdGlsbCBUT0RPcwoKU3VuIEphbiAyNiAxNzozNzowNiBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCWluIGRvY3MvdHV0b3JpYWw6CgkqIGFwYS5odG1sCgkqIGFwYi5odG1sCgkqIGFwYy5odG1sCgkqIGFwZC5odG1sCgkqIGFwZS5odG1sCgkqIGFwZi5odG1sCgkqIGFwZy5odG1sCgkqIGFyMDFzMDIuaHRtbAoJKiBhcjAxczAzLmh0bWwKCSogYXIwMXMwNC5odG1sCgkqIGFyMDFzMDUuaHRtbAoJKiBhcjAxczA2Lmh0bWwKCSogYXIwMXMwNy5odG1sCgkqIGFyMDFzMDguaHRtbAoJKiBpbmRleC5odG1sCgkqIHhtbHR1dG9yaWFsLnBkZgoJKiB4bWx0dXRvcmlhbC54bWwKCWFkZCBpbmRleCB0byB0dXRvcmlhbAoKU3VuIEphbiAyNiAxNzowMjoyOSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2cuMQoJKiBkb2MveG1sY2F0YWxvZ19tYW4uaHRtbAoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sCgliZWxhdGVkbHkgZml4aW5nIGJ1ZyAjOTM2MjIgKGFkZHMgcmV3cml0ZVVSSSB0eXBlIHRvCgkiLS1hZGQiIG9wdGlvbiBpbiB4bWxjYXRhbG9nIG1hbiBwYWdlCgpTdW4gSmFuIDI2IDIwOjQ3OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYyB4bWxsaW50LmM6IGFwcGxpZWQgcGF0Y2ggZm9yIE5ldEJTRCBieQoJICBKdWxpbyBNZXJpbm8sIGNsb3NpbmcgIzEwNDQ3NQoKU3VuIEphbiAyNiAyMDozODo0MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClN1biBKYW4gMjYgMDE6NDk6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgpTYXQgSmFuIDI1IDE4OjU5OjU0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFJFQURNRTogdXBkYXRlZCB0aGUgcG9saWN5IG9uIHByaXZhdGUgbWFpbCBhbnN3ZXJzCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoKRnJpIEphbiAyNCAxNToxMjo0NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHBhcnNlci5jIHRyZWUuYzogYXBwbGllZCBhIGRvY3VtZW50YXRpb24gcGF0Y2ggZnJvbQoJICBTdGVmYW4gS29zdAoKRnJpIEphbiAyNCAwMjowMDo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORwoJKiBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIGRvY3MKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCBhbmQgYXVnbWVudGVkIHRoZQoJICBSZWxheC1ORyByZWdyZXNzaW9uIHRlc3RzIGFuZCByZXN1bHRzCgpUaHUgSmFuIDIzIDE5OjI2OjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOgoJICBGaXJzdCBjb21taXQgb2YgdGhlIG5ldyBSZWxheC1ORyB2YWxpZGF0aW9uIGNvZGUsIG5vdCBnZW5lcmFsbHkKCSAgdXNlZnVsIHlldC4KCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogY3VycmVudCBzdGF0ZSBvZiB0aGUgcmVncmVzc2lvbgoJICB0ZXN0cwoKVGh1IEphbiAyMyAxOToyMjo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IG1pbmltaXplZCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgR2V0Q29udGVudAoJICBhbmQgYSBiaXQgb2YgY2xlYW51cC4KClRodSBKYW4gMjMgMTc6NDE6MzcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogc2VlbXMgdGhlcmUgaXMgbm8gZ29vZCByZWFzb25zIHRvCgkgIG5vdCBnZW5lcmF0ZSBiaW5kaW5ncyBmb3IgWFBvaW50ZXIKClR1ZSBKYW4gMjEgMTM6MTk6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgZG9jL2FwaWJ1aWxkLnB5OiBhcHBsaWVkIGEgbmV3IHBhdGNoIGZyb20KCSAgU3TpcGhhbmUgQmlkb3VsIGZvciBjbGVhbnVwcwoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiByZWJ1aWx0IHRoZSBBUEkgZGVzY3JpcHRpb24gd2l0aAoJICBuZXcgZW50cnkgcG9pbnRzCgpNb24gSmFuIDIwIDIzOjI1OjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi9kcnZfbGlieG1sMi5weSBweXRob24vZ2VuZXJhdG9yLnB5CgkgIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5IHB5dGhvbi9saWJ4bWxfd3JhcC5oCgkgIHB5dGhvbi90eXBlcy5jOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3IgYmV0dGVyIHBlcgoJICBjb250ZXh0IGVycm9yIG1lc3NhZ2UgQVBJcwoJKiBweXRob24vdGVzdHMvY3R4dGVycm9yLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXJlcnIucHk6CgkgIHVwZGF0ZSBvZiB0aGUgdGVzdHMKClN1biBKYW4gMTkgMTc6MDk6MjggTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9ndWlkZWxpbmVzLmh0bWwKCWdyYW1tYXIgYW5kIHNwZWxsaW5nIGNsZWFudXAKCkZyaSBKYW4gMTcgMDA6MzE6MzAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggcHl0aG9uL2dlbmVyYXRvci5weQoJICBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weSB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFwcGxpZWQKCSAgYSBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCB0byBhbGxvdyBwZXIgWE1MdGV4dFJlYWRlciBlcnJvcgoJICBhbmQgd2FybmluZyBoYW5kbGluZwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcmVyci5weTogYWRkaW5nIHRoZQoJICBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QKClR1ZSBKYW4gMTQgMTc6MDA6MDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogQWxleGV5IEVmaW1vdiBwb2ludGVkIG91dCB0aGF0IGNvbmNhdCgnYScsICdiJywgKQoJICBzaG91bGQgcmFpc2UgYSBzeW50YXggZXJyb3IKClR1ZSBKYW4gMTQgMTU6Mzk6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBjbGVhbnVwIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsCgpUdWUgSmFuIDE0IDE0OjQxOjE4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGZpeGluZyBidWcgIzEwMzEwMCB3aXRoIGEgZHVtbXkgVVRGOFRvVVRGOCBjb3B5CgpUdWUgSmFuIDE0IDEyOjQwOjI5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IGFwcGxpZWQgYW5kIGZpeGVkIGEgcGF0Y2gKCSAgZnJvbSBTdOlwaGFuZSBCaWRvdWwgdG8gcHJvdmlkZSBwZXIgcGFyc2VyIGVycm9yIGhhbmRsZXJzIGF0IHRoZQoJICBQeXRob24gbGV2ZWwuCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvY3R4dGVycm9yLnB5OiBhZGRlZCBhCgkgIHJlZ3Jlc3Npb24gdGVzdCBmb3IgaXQuCgpUdWUgSmFuIDE0IDAxOjE1OjA0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCB0aGUgc3RyZWFtaW5nIHByb3BlcnR5IG9mIHRoZSByZWFkZXIsCgkgIGl0IHdhcyBnZW5lcmF0aW5nIHRyZWUgZmFzdGVyIHRoYW4gY29uc3VtaW5nIGl0LiBQb2ludGVkIG91dAoJICBieSBOYXRlIE15ZXJzCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgaW4geG1sU2F2ZUZvcm1hdEZpbGVFbmMgaWYgcGFzc2VkIGEgTlVMTCBkb2MKClN1biBKYW4gMTIgMjI6MTg6MDIgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgeG1scmVhZGVyIGFuZCBvdGhlciBleHBvcnRzCgpGcmkgSmFuIDEwIDE4OjA0OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeCB0byB0aGUgWFBhdGggaW1wbGVtZW50YXRpb24gZm9yIHBhcmVudCBhbmQKCSAgYW5jZXN0b3JzIGF4aXMgd2hlbiBvcGVyYXRpbmcgb24gYSBSZXN1bHQgVmFsdWUgVHJlZS4KCSAgRml4ZXMgYnVnICMxMDAyNzEKCkZyaSBKYW4gMTAgMTc6MDc6MDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sSU8uYzogcGF0Y2ggZnJvbSBTdGVmYW5vIFphY2NoaXJvbGkKCSAgdG8gZml4IHNvbWUgVVJJL2ZpbGUgZXNjYXBpbmcgcHJvYmxlbXMKCkZyaSBKYW4gMTAgMTY6MjA6MzQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogZml4ZWQgYSBidWcgcmFpc2VkIGJ5IFJheW1vbmQgV2lrZXIsIAoJICBkb2NTZXRSb290RWxlbWVudCgpIHNob3VsZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZQoJICByZXR1cm4gaXMgTm9uZQoKRnJpIEphbiAxMCAxNDoxMzowMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbDoKCSAgZml4ZWQgYnVnICMxMDIxODEgYnkgYXBwbHlpbmcgdGhlIHN1Z2dlc3RlZCBjaGFuZ2UgYW5kIGZpeGluZwoJICB0aGUgZ2VuZXJhdGlvbi9yZWdpc3RyYXRpb24gcHJvYmxlbS4KCkZyaSBKYW4gMTAgMTM6NDc6NTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBidWcgIzEwMjk2MCBieSByZXVzaW5nIHRoZSBYTUwgbmFtZSBwYXJzaW5nCgkgIHJvdXRpbmVzLgoKRnJpIEphbiAxMCAwMDoxNjo0OSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogb25lIG1vcmUgSXNFbXB0eUVsZW1lbnQgY3JhenluZXNzLCB0aGF0IHRpbWUgaW4KCSAgZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIGlmIHN1YnN0aXR1dGlvbiBpcyBhc2tlZC4KCSogcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHk6IGFkZGVkIGEgc3BlY2lmaWMgdGVzdC4KClRodSBKYW4gIDkgMjI6MzU6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2Rydl9saWJ4bWwyLnB5OiB1cGRhdGUgZnJvbSBTdOlwaGFuZSBCaWRvdWw6IHB5dGhvbiAyLjEKCSAgc3VwcG9ydCBhbmQgaW1wcm92ZWQgZXJyb3IgaGFuZGxlciByZWdpc3RyYXRpb24KClRodSBKYW4gIDkgMTQ6MTY6MzggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB0cmVlLmM6IGZpeGVzICMxMDI5MjAgYWJvdXQgbmFtZXNwYWNlIGhhbmRsaW5nIGluCgkgIEhUTUwgb3V0cHV0IGFuZCBzZWN0aW9uIDE2LjIgIkhUTUwgT3V0cHV0IE1ldGhvZCIgb2YgWFNMVC0xLjAKCSogUkVBRE1FOiBmaXhlZCBhIGxpbmsKCldlZCBKYW4gIDggMTg6MzI6MjUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qIE5FV1M6IHByZXBhcmluZyAyLjUuMSByZWxlYXNlCgkqIFNBWC5jIHBhcnNlci5jOiBmaXhpbmcgWG1sVGV4dFJlYWRlciBidWcKCldlZCBKYW4gIDggMDA6MTM6MDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZ1Y2ssIEkgaW50cm9kdWNlZCBhIG1lbW9yeSBsZWFrIG9uIGV4dGVybmFsIHBhcnNlZAoJICBlbnRpdGllcyBpbiAyLjUuMCA6LSgKClR1ZSBKYW4gIDcgMTI6MTI6NDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhbm90aGVyIGZpeCBuZWVkZWQgYXMgcG9pbnRlZCBieSBDaHJpc3RvcGhlIE1lcmxldAoJICBmb3IgLS1zdHJlYW0gLS1kZWJ1ZyBpZiBjb21waWxlZCB3aXRob3V0IGRlYnVnIHN1cHBvcnQuCgpNb24gSmFuICA2IDIwOjUzOjA4IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwKCSogZG9jL3htbGxpbnQuMToKCXVwZGF0ZSBtYW4gcGFnZSB3aXRoIC0tc3RyZWFtIGFuZCAtLWNoa3JlZ2lzdGVyCgpUdWUgSmFuICA3IDAxOjE3OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogZml4ZWQgLS13aXRoLXRocmVhZHMgY29tcGlsZQoJKiB4bWxsaW50LmM6IGZpeGVkIC0td2l0aG91dC1kZWJ1ZyBjb21waWxlCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogY2xlYW51cAoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IGFkZCBhIG1pc3NpbmcgaW5jbHVkZQoKTW9uIEphbiAgNiAxNDowNjowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUzogcHJlcGFyaW5nIDIuNS4wIHJlbGVhc2UKCSogU0FYLmM6IG9ubHkgd2FybiBpbiBwZWRhbnRpYyBtb2RlIGFib3V0IG5hbWVzcGFjZSBuYW1lIAoJICBicm9rZW5lc3MKCSogZ2xvYmFscy5jOiBmaXggYSBkb2MgZ2VuZXJhdGlvbiBwcm9ibGVtCgkqIHVyaS5jOiBmaXggIzEwMTUyMAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jIGZvciB0aGUgcmVsZWFzZSwgaW5jbHVkdWRpbmcKCSAgc3R5bGVzaGVldCB1cGRhdGUKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBmaXggYSBmaWxlbmFtZSBidWcKCk1vbiBKYW4gIDYgMTI6MDU6MTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3R1dG9yaWFsLyogOiBmaXhlZCAjMTAxODk0IGlmIGRvYyA9PSBOVUxMIHhtbEZyZWVEb2MgCgkgIHNob3VsZCBub3QgYmUgY2FsbGVkLgoKTW9uIEphbiAgNiAxMTo1OTowOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiBhcHBsaWVkIHRoZSBwYXRjaCB0byBmaXggIzEwMTg5NAoKU3VuIEphbiAgNSAyMzozNTo0NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgOiBhcHBsaWVkIHBhdGNoIGZyb20gTHVrYXMgU2Nocm9lZGVyIGZvciByZWdpc3RlciBjYWxsYmFja3MKCSogdmFsaWQuYzogbW9kaWZpZWQgcGF0Y2ggZnJvbSBMdWthcyBTY2hyb2VkZXIgdG8gdGVzdAoJICByZWdpc3RlciBjYWxsYmFja3Mgd2l0aCAtLWNoa3JlZ2lzdGVyCgpTdW4gSmFuICA1IDAyOjIzOjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBzZXJpb3VzbHkgY2hhbmdlZCB0aGUgd2F5IGRhdGEgYXJlIHB1c2hlZCB0bwoJICB0aGUgdW5kZXJseWluZyBwYXJzZXIsIGdvIGJ5IGJsb2NrIG9mIDUxMiBieXRlcyBpbnN0ZWFkIG9mCgkgIHRyeW5nIHRvIGRldGVjdCB0YWcgYm91bmRhcmllcyBhdCB0aGF0IGxldmVsLiBDaGFuZ2VkIHRoZQoJICB3YXkgZW1wdHkgZWxlbWVudCBhcmUgZGV0ZWN0ZWQgYW5kIHRhZ2dlZC4KCSogcHl0aG9uL3Rlc3RzL3JlYWRlci5weSBweXRob24vdGVzdHMvcmVhZGVyMi5weQoJICBweXRob24vdGVzdHMvcmVhZGVyMy5weTogc21hbGwgY2hhbmdlcyBtb3N0bHkgZHVlIHRvIGNvbnRleHQKCSAgcmVwb3J0aW5nIGJlaW5nIGRpZmZlcmVudCBhbmQgRFREIG5vZGUgYmVpbmcgcmVwb3J0ZWQuIFNvbWUKCSAgZXJyb3JzIHByZXZpb3VzbHkgdW5kZXRlY3RlZCBhcmUgbm93IGNhdWdodCBhbmQgZml4ZWQuCgkqIGRvYy94bWxyZWFkZXIuaHRtbDogZmxhZ2dlZCBsYXN0IHNlY3Rpb24gYXMgVE9ETwoKU2F0IEphbiAgNCAyMDo0MDoyOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiBpbnRlZ3JhdGVkIHRoZSBQeXRob24gMi4yIG9wdGltaXphdGlvbnMKCSAgZnJvbSBIYW5udSBLcm9zaW5nLCB3aGlsZSBtYWludGFpbmluZyBjb21wYXRpYmlsaXR5IHdpdGggCgkgIDEuNSBhbmQgMi4xCgpTYXQgSmFuICA0IDE3OjMzOjE3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYSBiaXQgb2YgY2xlYW51cAoJKiB4bWxyZWFkZXIuYzogc21hbGwgZml4CgkqIGRvYy94bWxyZWFkZXIuaHRtbDogbW9yZSB3b3JrIG9uIHRoZSBYbWxUZXh0UmVhZGVyIHR1dG9yaWFsCgkqIHB5dGhvbi9saWJ4bWwucHk6IGEgZmV3IGZpeGVzIHBvaW50ZWQgb3V0IGJ5IEhhbm51IEtyb3NpbmcKClNhdCBKYW4gIDQgMTM6NDY6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3NldHVwLnB5LmluOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCB0byBpbmNsdWRlCgkgIGRydl9saWJ4bWwyLnB5IGluIHNldHVwLnB5CgpTYXQgSmFuICA0IDAxOjQzOjA2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxyZWFkZXIuaHRtbDogc3RhcnRpbmcgZG9jdW1lbnRpbmcgdGhlIG5ldyBYbWxUZXh0UmVhZGVyCgkgIGludGVyZmFjZS4KCkZyaSBKYW4gIDMgMTc6MTg6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRlZCB0aGUgLS1zdHJlYW0gZmxhZyB0byB1c2UgdGhlIFRleHRSZWFkZXIgQVBJCgkqIHhtbHJlYWRlci5jOiBzbWFsbCBwZXJmb3JtYW5jZSB0d2VhawoKRnJpIEphbiAgMyAxMzo1MDo1NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMnB5OiBva2F5IHRoZSBEVEQgdmFsaWRhdGlvbgoJICBjb2RlIG9uIHRvcCBvZiB0aGUgWE1MVGV4dFBhcnNlciBBUEkgc2hvdWxkIGJlIHNvbGlkIG5vdy4KCkZyaSBKYW4gIDMgMDI6MTc6MTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlcjJweTogRml4aW5nIHNvbWUgbW9yZSBtZXNzCgkgIHdpdGggdmFsaWRhdGlvbiBhbmQgcmVjdXJzaXZlIGVudGl0aWVzIHdoaWxlIHVzaW5nIHRoZQoJICByZWFkZXIgaW50ZXJmYWNlLCBpdCdzIGdldHRpbmcgYSBiaXQgbWVzc3kuLi4KClRodSBKYW4gIDIgMTU6MTU6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogYW5vdGhlciBjb3VwbGUgb2YgcHJvYmxlbQoJICByZWxhdGVkIHRvIElzRW1wdHlFbGVtZW50IHJlcG9ydGVkIGJ5IFN06XBoYW5lIEJpZG91bCBuZWVkZWQgCgkgIHNvbWUgZml4ZXMuCgpUaHUgSmFuICAyIDEzOjU3OjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vZHJ2X2xpYnhtbDIucHk6CgkgIGludGVncmF0ZWQgZHJ2X2xpYnhtbDIucHkgUHl0aG9uIHhtbC5zYXggZHJpdmVyIGZyb20gU3TpcGhhbmUgQmlkb3VsCgkgIGJhc2VkIG9uIHRoZSBweXRob24gWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UuCgpXZWQgSmFuICAxIDIyOjA1OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYmFja2luZyBvdXQgb25lIGNoYW5nZSBpbiB0aGUgbGFzdCBwYXRjaCB3aGljaCBicm9rZSB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKV2VkIEphbiAgMSAyMTo1NzoyOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWwuZGF0YSBnbG9iYWxzLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogYXBwbGllZAoJICBhbiBvbGQgcGF0Y2ggZnJvbSBMdWthcyBTY2hyb2VkZXIgdG8gdHJhY2sgbm9kZSBjcmVhdGlvbiBhbmQKCSAgZGVzdHJ1Y3Rpb24uIFByb2JhYmx5IG1pc3NpbmcgYSBsb3Qgb2YgcmVmZXJlbmNlcyBhdCB0aGUgbW9tZW50CgkgIGFuZCBub3QgdXNhYmxlIHJlbGlhYmx5LgoKV2VkIEphbiAgMSAyMDoxMjowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGRvYy9NYWtlZmlsZS5hbSBkb2MvbmV3cy54c2w6IGdlbmVyYXRlIHRoZSBORVdTIGZpbGUKCSAgZnJvbSBkb2MvbmV3cy5odG1sIGFuZCBhIHN0eWxlc2hlZXQKCldlZCBKYW4gIDEgMTY6MDk6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYW5vdGhlciBjb3VwbGUgb2YKCSAgeG1scmVhZGVyIGJ1Z3MgcmVwb3J0ZWQgYnkgU3TpcGhhbmUgQmlkb3VsIGFuZCBhZGRlZCB0ZXN0cy4KCldlZCBKYW4gIDEgMTU6NDI6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IGZpeGVkIGFub3RoZXIgdmFsaWRpdHkKCSAgY2hlY2tpbmcgaW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIHJhaXNlZCBieSBTdOlwaGFuZSBCaWRvdWwKCSAgYW5kIGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0LgoJKiBweXRob24vdGVzdHMvcmVhZGVyMy5weTogY2xlYW51cAoKVHVlIERlYyAzMSAxNTo0NDowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMi5weTogZml4ZWQgYSBwcm9ibGVtIHdpdGgKCSAgdmFsaWRhdGlvbiB3aXRoaW4gZW50aXRpZXMgcG9pbnRlZCBieSBTdOlwaGFuZSBCaWRvdWwsIGF1Z21lbnRlZAoJICB0aGUgdGVzdHMgdG8gY2F0Y2ggdGhvc2UuCgpUdWUgRGVjIDMxIDEyOjE1OjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IG1vZGlmaWVkIHRoZSBnZW5lcmF0b3IgdG8gYWxsb3cga2VlcGluZwoJICBjbGFzcyByZWZlcmVuY2VzIHdoZW4gY3JlYXRpbmcgbmV3IGNsYXNzZXMsIG5lZWRlZCB0byBmaXggYSBidWcKCSAgcG9pbnRlZCBieSBTdOlwaGFuZSBCaWRvdWwgd2hlcmUgdGhlIGlucHV0IGJ1ZmZlciBvZiB0aGUKCSAgeG1sVGV4dFJlYWRlciBpbnN0YW5jZSBnZXRzIGRlc3Ryb3llZCBpZiB0aGUgcHl0aG9uIHdyYXBwZXIgZm9yCgkgIHRoZSBpbnB1dCBpcyBub3QgcmVmZXJlbmNlZCBhbnltb3JlLgoKTW9uIERlYyAzMCAxOTozOTozNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhbm90aGVyIHBhaXIgb2YgcHJvYmxlbQoJICBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bDogZGVwdGggc3RhcnQgYXQgMCBhbmQgYSBwYXJzZSBwcm9ibGVtLgoKTW9uIERlYyAzMCAxMzozNjo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhbm90aGVyIHByb2JsZW0KCSAgcG9pbnRlZCBieSBTdOlwaGFuZSBCaWRvdWwKCk1vbiBEZWMgMzAgMTI6Mzk6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYSBsaW1pdCBjYXNlIHByb2JsZW0KCSAgd2l0aCAiPGEvPiIKCk1vbiBEZWMgMzAgMTE6NTM6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHdhcm4gb24geG1sbnM6cHJlZml4PSJmb28iCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGEgY291cGxlIG9mIHByb2JsZW0KCSAgZm9yIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGhhbmRsaW5nLgoKTW9uIERlYyAzMCAwMDo1OTowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jIHBhcnNlci5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oOiBGaXhlZAoJICBhIHJlYWxseSBuYXN0eSBwcm9ibGVtIHJhaXNlZCBieSBhIERvY0Jvb2sgWFNMVCB0cmFuc2Zvcm0KCSAgcHJvdmlkZWQgYnkgU2ViYXN0aWFuIEJlcmdtYW5uCgpTdW4gRGVjIDI5IDEyOjEzOjE4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGEgYnVnIHBvaW50ZWQgb3V0CgkgIGJ5IFN06XBoYW5lIEJpZG91bCBhbmQgaW50ZWdyYXRlZCBpdCBpbnRvIHRoZSB0ZXN0cwoKU2F0IERlYyAyOCAyMzo0OToxMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOgoJICBleHRlbmRlZCB0aGUgWG1sVGV4dFJlYWRlciBBUEkgYSBiaXQsIGFkZGRpbmcgYWNjZXNzb3JzIGZvcgoJICB0aGUgY3VycmVudCBkb2MgYW5kIG5vZGUsIGFuZCBhbiBlbnRpdHkgc3Vic3RpdHV0aW9uIG1vZGUgZm9yCgkgIHRoZSBwYXJzZXIuCgkqIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IHJlbGF0ZWQgdXBkYXRlcwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlci5weSAKCSAgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHk6IHVwZGF0ZWQgYSBiaXQKCSAgdGhlIG9sZCB0ZXN0cyBhbmQgYWRkZWQgYSBuZXcgb25lIHRvIHRlc3QgdGhlIGVudGl0aWVzIGhhbmRsaW5nCgpTYXQgRGVjIDI4IDIyOjExOjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgCgkgIHB5dGhvbi90ZXN0cy9yZWFkZXIucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IGNoYW5nZWQgdGhlCgkgIGdlbmVyYXRvciB0byBwcm92aWRlIGNhc2luZyBmb3IgdGhlIFhtbFRleHRSZWFkZXIgc2ltaWxhciB0bwoJICBDIyBzbyB0aGF0IGV4YW1wbGVzIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBtb3JlIGRpcmVjdGx5IHRyYW5zcG9zYWJsZS4KCSAgRml4ZWQgdGhlIGNvdXBsZSBvZiB0ZXN0cyBpbiB0aGUgc3VpdGUuCgpTYXQgRGVjIDI4IDE1OjU1OjMyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9ndWlkZWxpbmVzLmh0bWw6IGFkZGVkIGEgZG9jdW1lbnQgb24gZ3VpbGRlbGluZSBmb3IKCSAgcHVibGlzaGluZyBhbmQgZGVwbG95aW5nIFhNTAoKRnJpIERlYyAyNyAyMDozNToxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHhtbHJlYWRlci5jOiBmaW5hbCB0b3VjaCBydW5uaW5nIERURCB2YWxpZGF0aW9uCgkgIG9uIHRoZSBYbWxUZXh0UmVhZGVyCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyMi5weTogYWRkZWQgYQoJICBzcGVjaWZpYyBydW4gYmFzZWQgb24gdGhlIGV4YW1wbGVzIGZyb20gdGVzdC92YWxpZC8qLnhtbAoKRnJpIERlYyAyNyAxNToxNzoyMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiBhZGRlZCBhIGZldyBwcmVkZWZpbmVkIHhtbFRleHRSZWFkZXIgcGFyc2VyCgkgIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgoKRnJpIERlYyAyNyAxMjo1NzoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sX3dyYXAuaDogdHJ5aW5nIHRvIGZpeCAjMTAyMDM3CgpGcmkgRGVjIDI3IDEyOjE4OjE0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhpbmcgYnVnICM5NTI5Niwgd2hlbiB0aGUgcHJlZGVmaW5lZCBlbnRpdGllcwoJICBhcmUgcmVkZWZpbmVkIGluIHRoZSBEVEQgdGhlIGRlZmF1bHQgb25lIG11c3QgYmUgdXNlZAoJICBpbnN0ZWFkIGFueXdheS4KCldlZCBEZWMgMjUgMTk6MjI6MDYgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xCglBZGQgZGlzY3Vzc2lvbiBvZiBYTUxfREVCVUdfQ0FUQUxPRyB0byB4bWxsaW50IG1hbgoJcGFnZSAtIGJ1ZyAjMTAwOTA3CgpNb24gRGVjIDIzIDE2OjU0OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBGaXhlZCB0aGUgZW1wdHkgbm9kZSBkZXRlY3Rpb24gdG8gYXZvaWQgcmVwb3J0aW5nCgkgIGFuIGluZXhpc3RhbnQgY2xvc2UgdGFnLgoKTW9uIERlYyAyMyAxNTo0MjoyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL3NldHVwLnB5LmluOiBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bAoJICBmb3IgUHl0aG9uIDIuMQoKU3VuIERlYyAyMiAxMToyNDowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0QzE0Ti5jIHZtcy9jb25maWcudm1zOiBhcHBsaWVkIENyYWlnIEEuIEJlcnJ5IHBhdGNoZXMgZm9yIFZNUwoKRnJpIERlYyAyMCAxMToyNzo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IG9uZSByZWFsbHkgbmVlZAoJICB0byBwcm92aWRlIHRoZSBiYXNlIFVSSSBpbmZvcm1hdGlvbiB3aGVuIGNyZWF0aW5nIGEgcmVhZGVyIHBhcnNlcgoJICBmcm9tIGFuIGlucHV0IHN0cmVhbS4gVXBkYXRlZCB0aGUgQVBJIGFuZCB0aGUgZXhhbXBsZSB1c2luZyBpdC4KCkZyaSBEZWMgMjAgMDE6MTE6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFJlYWRlci5jIHhtbHJlYWRlci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IHdvcmtpbmcgb24KCSAgRFREIHZhbGlkYXRpb24gb24gdG9wIG9mIHhtbCByZWFkZXIgaW50ZXJmYWNlcy4gQWxsb3dzIHRvCgkgIHZhbGlkYXRlIGFyYml0cmFyeSBsYXJnZSBpbnN0YW5jZXMuIFRoaXMgcmVxdWlyZWQgc29tZSBleHRlbnNpb25zCgkgIHRvIHRoZSB2YWxpZCBtb2R1bGUgaW50ZXJmYWNlIGFuZCBhdWdtZW50aW5nIHRoZSBzaXplIG9mIHhtbElECgkgIGFuZCB4bWxSZWYgc3RydWN0cyBhIGJpdC4KCSogdXJpLmMgeG1scmVnZXhwLmM6IHNpbXBsZSBjbGVhbnVwLgoKV2VkIERlYyAxOCAxNTo1MToyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOiBtb3JlCgkgIHdvcmsgb24gdGhlIHhtbCByZWFkZXIgaW50ZXJmYWNlcy4KCSogQVVUSE9SUyBNQUlOVEFJTkVSUyBkb2MvKiB3aW4zMi8qOiB1cGRhdGVkIElnb3IncyBtYWlsIGFuZCB0aGUKCSAgV2ViIHBhZ2UgZm9yIHRoZSBXaW5kb3dzIGJpbmFyaWVzLgoKVHVlIERlYyAxNyAxOTozMTowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIGEgcGF0Y2ggZm9yIFZNUyBmb2xsb3dpbmcgdGhlIHJlcG9ydCBieQoJICBOaWdlbCBIYWxsCgpUdWUgRGVjIDE3IDExOjI5OjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB0aGUgcGFyc2VTdGFydFRhZyBidWcgZml4IHdhc24ndCBjb21wbGV0ZS4KCk1vbiBEZWMgMTYgMjM6MDA6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IFZ5YWNoZXNsYXYgUGluZHl1cmEgbWFuYWdlZCB0byB0cmlnZ2VyIGEgYnVnIGluCgkgIHBhcnNlU3RhcnRUYWcsIGZpeGluZyBpdC4KCSogdGVzdC9hdHQ0IHJlc3VsdC9hdHQ0IHJlc3VsdC9ub2VudC9hdHQ0OiBhZGRpbmcgdGhlIHRlc3QKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggZG9jL2xpYnhtbDItYXBpLnhtbDogYWRkZWQKCSAgbW9yZSBtZXRob2RzIHRvIFhtbFRleHRSZWFkZXIuCgpNb24gRGVjIDE2IDE5OjMxOjE2IENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBtb3JlIHhtbCByZWFkZXIgZXhwb3J0cwoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBhZGRlZCB4bWwgcmVhZGVyIGludGVyZmFjZQoJICB0byB0aGUgYnVpbGQKCk1vbiBEZWMgMTYgMDY6MzY6NTQgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCXBsdXMgZ2VuZXJhdGVkIGh0bWwgYW5kIHBkZgoJVXBkYXRpbmcgdHV0b3JpYWwgYWdhaW4gYmFzZWQgb24gZnVydGhlciBjb21tZW50cyBmcm9tIE5pcmFqCglUb2xpYSBvbiB0aGUgbGFzdCBpdGVyYXRpb24KClN1biBEZWMgMTUgMjE6Mjc6MzAgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVnZXRhdHRyaWJ1dGUuYwoJcGx1cyBnZW5lcmF0ZWQgaHRtbCBhbmQgcGRmCglBZGRpbmcgZml4IGZyb20gTmlyYWogVG9saWEgdG8gdHV0b3JpYWwgdG8gcHJvcGVybHkgZnJlZSBtZW1vcnkuCgpNb24gRGVjIDE2IDAwOjM0OjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6IGFkZGVkCgkgIG1vcmUgbWV0aG9kcyBvZiBYbWxUZXh0UmVhZGVyLgoJKiBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vdGVzdHMvcmVhZGVyLnB5OiB0aGlzIGluY3JlYXNlZCB0aGUKCSAgbWV0aG9kcyBpbiB0aGUgYm5kaW5ncywgYXVnbWVudGVkIHRoZSB0ZXN0IHRvIGNoZWNrIHRob3NlIG5ldwoJICBmdW5jdGlvbnMuCgpTYXQgRGVjIDE0IDIzOjU3OjM5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGRvYy9saWJ4bWwyLWFwaS54bWw6IGFkZGVkIHRoZSBjbG9zZSBhbmQgZ2V0YXR0cmlidXRlCgkgIG1ldGhvZHMgb2YgWG1sVGV4dFJlYWRlci4KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYyAKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGFkZGVkIHRoZSByZWFkZXIgdG8gdGhlIFB5dGhvbiBiaW5kaW5ncwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogYWRkZWQgYSBzcGVjaWZpYwoJICB0ZXN0IGZvciB0aGUgUHl0aG9uIGJpbmRpbmdzIG9mIHRoZSBSZWFkZXIgQVBJcwoJKiBwYXJzZXIuYzogc21hbGwgY2xlYW51cC4KCkZyaSBEZWMgMTMgMTE6Mzk6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZmFsbGJhY2sgd2FzIG9ubHkgY29weWluZyB0aGUgZmlyc3QgY2hpbGQgbm90IHRoZQoJICBmdWxsIGNoaWxkIGxpc3Qgb2YgdGhlIGZhbGxiYWNrIGVsZW1lbnQsIGNsb3NlcyAjODk2ODQgYXMgcmVvcGVuZWQKCSAgYnkgQmVybmQgS3VlbW1lcmxlbgoKVGh1IERlYyAxMiAxMzozNDo1OSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZXhwb3J0ZWQgaHRtbE5vZGVEdW1wT3V0cHV0CgpUaHUgRGVjIDEyIDEwOjU5OjExIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi40LjMwCgkqIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sOiBmaXh1cHMgdG8gdGhlIGFwaSBidWlsZGVyLAoJICBnaXZlcyBlbnVtIHZhbHVlcywgZml4IGZ1bmN0eXBlIHJldHVybiB0eXBlLCBwdXQgYmFjayBmaWVsZHMgaW4KCSAgc3RydWN0cyAKCSogZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MgcmVidWlsdAoKVGh1IERlYyAxMiAwMTowOTozNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmg6IHBhdGNoIGZyb20gTWFyayBWYWtvYwoJICBhYm91dCBodG1sTm9kZUR1bXBPdXRwdXQgbG9jYXRpb24uCgkqIHhwYXRoLmM6IHJlbW92ZWQgYW4gdW5kZWZpbmVkIGZ1bmN0aW9uIHNpZ25hdHVyZQoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbDogdGhlIHNjcmlwdCB3YXMgZXhwb3J0aW5nCgkgIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhlIEFQSSBicmVha2luZyB0aGUgcHl0aG9uIGJpbmRpbmdzLgoJICBVcGRhdGVkIHdpdGggdGhlIGxpYnhzbHQvbGliZXhzbHQgY2hhbmdlcy4KCldlZCBEZWMgMTEgMjA6MjY6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiAyLjQuMjkKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3MgYW5kIEFQSQoJKiB4bWxyZWFkZXIuYzogYSBmZXcgbW9yZSBmaXhlcyBmb3IgdGhlIFhtbFRleHRSZWFkZXIgQVBJCgpXZWQgRGVjIDExIDE4OjAxOjE1IENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhcHBsaWVkIG1pbmd3IHBhdGNoIGZyb20gTWFnbnVzIEhlbm9jaAoKV2VkIERlYyAxMSAxNjo1ODo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgZG9jL2xpYnhtbDItYXBpLnhtbDogYSBiaXQgbW9yZSBjbGVhbnVwCgpXZWQgRGVjIDExIDE0OjU0OjQ3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9NYWtlZmlsZS5hbTogbmV3IEFQSQoJICBidWlsZGluZyBQeXRob24gc2NyaXB0LCBkb2VzIHRoZSBDIHBhcnNpbmcgZGlyZWN0bHksIGdlbmVyYXRlcwoJICBhIGJldHRlciBBUEkgZGVzY3JpcHRpb24gaW5jbHVkaW5nIHN0cnVjdHVyZSBmaWVkcyBkZWZzIGFuZAoJICBlbnVtcy4gU3RpbGwgYSBjb3VwbGUgb2YgYnVncywgYnV0IGdvb2QgZW5vdWdoIGZvciB0aGUgcHl0aG9uCgkgIHdyYXBwZXJzIG5vdy4KCSogRE9DQnBhcnNlci5jIFNBWC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jCgkgIHZhbGlkLmMgeG1sSU8uYyB4bWxtZW1vcnkuYyB4bWxyZWFkZXIuYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMKCSAgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogbW9yZQoJICBjbGVhbnVwIGJhc2VkIG9uIHRoZSBweXRob24gYW5hbHlzaXMgc2NyaXB0IHJlcG9ydHMuCgkqIGxpYnhtbC5zcGVjLmluOiBtYWtlIHN1cmUgdGhlIEFQSSBYTUwgZGVzY3JpcHRpb24gaXMgcGFydCBvZiB0aGUKCSAgZGV2ZWwgcGFja2FnZS4KClR1ZSBEZWMgMTAgMTY6MTY6MzQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBjMTRuLmMgZGVidWdYTUwuYyBlbmNvZGluZy5jIGhhc2guYwoJICBuYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0QzE0Ti5jCgkgIHRlc3REb2Nib29rLmMgdGhyZWFkcy5jIHRyZWUuYyB2YWxpZC5jIHhtbElPLmMgeG1sbGludC5jIHhtbG1lbW9yeS5jCgkgIHhtbHJlYWRlci5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyB4cGF0aC5jOgoJICBjb2RlIGNsZWFudXAsIGVzcGVjaWFsbHkgdGhlIGZ1bmN0aW9uIGNvbW1lbnRzLgoJKiB0cmVlLmM6IGZpeGVkIGEgc21hbGwgYnVnIHdoZW4gZnJlZWluZyBub2RlcyB3aGljaCBhcmUgWEluY2x1ZGUgb25lcy4KCk1vbiBEZWMgIDkgMTU6MDg6MTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSAgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6ICBBZGRpbmcgYSBuZXcgc2V0IG9mIEFQSXMgYmFzZWQgb24KCSAgdGhlIEMjIFRleHRYbWxSZWFkZXIgQVBJIGJ1dCBjb252ZXJ0ZWQgdG8gQy4gQWxsb3cgdG8gcGFyc2UKCSAgaW4gY29uc3RhbnQgbWVtb3J5IHVzYWdlLCBmYXIgc2ltcGxlciB0byBwcm9ncmFtIGFuZCBleHBsYWluCgkgIHRoYW4gdGhlIFNBWCBsaWtlIEFQSXMsIHVuZmluaXNoZWQgYnV0IHdvcmtpbmcuCgkqIHRlc3RSZWFkZXIuYzogdGVzdCBwcm9ncmFtCgpTdW4gRGVjICA4IDE4OjM2OjAxIENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhcHBsaWVkIFlBTERTUCBmcm9tIE1hcmsgVmFrb2MKCldlZCBEZWMgIDQgMTY6MDg6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBDaGlwIHR1cm5lciBpbmRpY2F0ZWQgdGhhdCBYSFRNTDEgc2VyaWFsaXphdGlvbgoJICBydWxlIGZvciBzdHlsZSBhY3R1YWxseSBicmVhayBvbiBib3RoIElFIGFuZCBNb3ppbGxhLCAKCSAgdHJ5IHRvIGF2b2lkIHRoZSBydWxlIGlmIGVzY2FwaW5nIGFpbid0IG5lY2Vzc2FyeQoKV2VkIERlYyAgNCAxMjo0MzoyOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5odHRwLmM6IGhhbmRsZSBIVFRQIFVSTCBlc2NhcGluZywgcHJvYmxlbSByZXBvcnRlZCBieQoJICBHbGVuIE5ha2FtdXJhIGFuZCBTdGVmYW5vIFphY2NoaXJvbGkKClNhdCBOb3YgMzAgMTI6MTk6MTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyB2YWxpZC5jIHhwYXRoLmM6IGNvZGUgY2xlYW51cAoKVGh1IE5vdiAyOCAxMjo1MzoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogSm9oYW5uIFJpY2hhcmQgcG9pbnRlZCBvdXQgc29tZSBYUG9pbnRlciBwcm9ibGVtcyBmb3IKCSAgVVJOIGJhc2VkIFVSSSByZWZlcmVuY2VzIGluIFhJbmNsdWRlLiBNb2RpZmllZCB0aGUgVVJJIHBhcnNpbmcKCSAgYW5kIHNhdmluZyByb3V0aW5lcyB0byBhbGxvdyBjb3JyZWN0IHBhcnNpbmcgYW5kIHNhdmluZyBvZiAKCSAgWFBvaW50ZXJzLCBlc3BlY2lhbGx5IHdoZW4gYXR0YWNoZWQgdG8gIm9wYXF1ZSIgc2NoZW1lIGFjY29yZGluZ2x5CgkgIHRvIFJGQyAyMzk2CgpXZWQgTm92IDI3IDIwOjM2OjA4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaDogYXBwbGllZCB0aGUgc2FtZSBraW5kCgkgIG9mIHJlZmFjdG9yaW5nIHRvIHRoZSBIVE1MIHNhdmluZyBjb2RlLgoJKiBkb2MvbGlieG1sMi0qLnhtbCBkb2MvQVBJKi5odG1sOiBzbGlnaHQgQVBJIGNoYW5nZXMgZ290IHJlZmxlY3RlZAoJICBpbiB0aGUgZG9jLgoKV2VkIE5vdiAyNyAxMjo0MDoxNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiByZWZhY3RvcmVkIHRoZSBYTUwgZHVtcCBvZiBhIG5vZGUKCSAgdG8gYSBidWZmZXIgQVBJIHRvIHJldXNlIHRoZSBnZW5lcmljIGR1bXAgdG8gYW4gT3V0cHV0SU8gbGF5ZXIsCgkgIHRoaXMgcmVkdWNlcyBjb2RlLCBmaXhlcyB4bWxOb2RlRHVtcCgpIGZvciBYSFRNTCwgYWxzbyBtYWRlCgkgIHhtbE5vZGVEdW1wKCkgbm93IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbi4KCldlZCBOb3YgMjcgMDk6MDA6MDAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3NldHVwLnB5LmluOiBhbm90aGVyIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciAKCSAgUHl0aG9uIGJpbmRpbmdzIG9uIFdpbmRvd3MKCSogZG9jL3BhcnNlZGVjbC5weTogc21hbGwgY2xlYW51cAoKTW9uIE5vdiAyNSAxNzoyODo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBjb25maWd1cmUuaW46IGFkZCBhIGxpbmUgaW4gJWNoYW5nZWxvZyBmb3IgcmVsZWFzZXMKCk1vbiBOb3YgMjUgMTQ6MTg6MjcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHBhdGNoIGZyb20gTWFyY3VzIENsYXJrZSBmaXhpbmcgYSBwcm9ibGVtIGluIGVudGl0aWVzCgkgIHBhcnNpbmcgdGhhdCB3YXMgZGV0ZWN0ZWQgaW4gS0RlIGRvY3VtZW50YXRpb25zIGVudmlyb25tZW50LgoKTW9uIE5vdiAyNCAxNDoxMzoyMSBDRVQgMjAwMiBFUkRJIEdlcmdvIDxjYWN0dXNAY2FjdHVzLnJ1bGV6Lm9yZz4KCgkqIHB5dGhvbi9saWJ4bWwuYyAobGlieG1sX3ByZXYpOiBSZXR1cm4gdGhlIHByZXZpb3VzIGFzIG9wcG9zZWQgdG8KCXRoZSBuZXh0IG5vZGUgKEkgZ3Vlc3MgdGhpcyBpcyB0aGUgcmVzdWx0IG9mIHNvbWUgY3V0ICYgcGFzdGUgcHJvZ3JhbW1pbmc6KQoKU2F0IE5vdiAyMyAxNzoyMjoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW06IEphbiBSYWZhaiBwb2ludGVkIGEgYnVnIGluIHRoZSBNYWtlZmlsZS4KClNhdCBOb3YgMjMgMTI6MjE6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3NldHVwLnB5LmluOiB0cnlpbmcKCSAgdG8gZml4IHRoZSBQeXRob24gYmluZGluZ3MgYnVpbGQgb24gV2luZG93cyAoU3TpcGhhbmUgQmlkb3VsKQoKRnJpIE5vdiAyMiAyMjo0MTozNCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFkZGVkIG9wdGlvbiBmb3IgcHl0aG9uIGJpbmRpbmdzCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSBleHBvcnRzCgpGcmkgTm92IDIyIDE4OjUwOjM0IENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IGZpeGVkIHVucmVzb2x2ZWQgc3ltYm9scyB3aGVuIGxpbmtpbmcgd2l0aAoJICBwdGhyZWFkcwoJKiB3aW4zMi93aW5jZS8qOiBhcHBsaWVkIHVwZGF0ZXMgdG8gV2luZG93cyBDRSBwb3J0IGZyb20gSmF2aWVyCgpGcmkgTm92IDIyIDE1OjUxOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yOAoJKiBsaWJ4bWwuc3BlYy5pbiBkb2MvTWFrZWZpbGUuYW06IHNvbWUgY2xlYW51cAoJKiBkb2MvKjogdXBkYXRlZCB0aGUgbmV3cyBhbmQgcmVnZW5lcmF0ZWQuCgpGcmkgTm92IDIyIDE0OjE1OjE0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZmluYWwgdG91Y2ggYXQgY2xvc2luZyAjODcyMzUgPC9wPiBlbmQgdGFncwoJICBuZWVkIHRvIGJlIGdlbmVyYXRlZC4KCSogcmVzdWx0L0hUTUwvY2ZfMTI4Lmh0bWwgcmVzdWx0L0hUTUwvdGVzdDIuaHRtbCByZXN1bHQvSFRNTC90ZXN0My5odG1sOgoJICB0aGlzIGNoYW5nZSBzbGlnaHRseSB0aGUgb3V0cHV0IG9mIGEgZmV3IHRlc3RzCgkqIGRvYy8qOiByZWdlbmVyYXRlZAoKRnJpIE5vdiAyMiAxMzoyNjoxOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4aW5nIGJ1ZyAjOTkxOTAgd2hlbiBVVEY4IGRvY3VtZW50IGFyZQoJICBwYXJzZWQgdXNpbmcgdGhlIHByb2dyZXNzaXZlIHBhcnNlciBhbmQgdGhlIGVuZCBvZiB0aGUgY2h1bmsKCSAgaXMgaW4gdGhlIG1pZGRsZSBvZiBhbiBVVEY4IG11bHRpYnl0ZSBjaGFyYWN0ZXIuCgpGcmkgTm92IDIyIDEzOjEzOjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdGhyZWFkcy5jOiBmaXhlZCBpbml0aWFsaXphdGlvbiBwcm9ibGVtIGluIHhtbE5ld0dsb2JhbFN0YXRlCgkgIHdoaWNoIHdhcyBjYXVzaW5nIGNyYXNoLgoJKiBnbG9iYWxzLmM6IHJlbW92ZWQgZHVwbGljYXRlIGNhbGwgdG8gaW5pdHhtbERlZmF1bHRTQVhIYW5kbGVyCgkgIGluIHhtbEluaXRpYWxpemVHbG9iYWxTdGF0ZS4KCSogcGFyc2VySW50ZXJuYWxzLmM6IGNsZWFuZWQgdXAgY3R4dC0+c2F4IGluaXRpYWxpc2F0aW9uLgoKVGh1IE5vdiAyMSAxNTowNTo0NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtb2RpZmllZCB0aGUgZXhpc3RpbmcgQVBJcwoJICB0byBoYW5kbGUgWEhUTUwxIHNlcmlhbGl6YXRpb24gcnVsZXMgYXV0b21hdGljYWxseSwgYWxzbyBhZGQKCSAgeG1sSXNYSFRNTCgpIHRvIGxpYnhtbDIgQVBJLiBTb21lIHR3ZWFraW5nIHRvIG1ha2Ugc3VyZQoJICBsaWJ4c2x0IHNlcmlhbGl6YXRpb24gdXNlcyBpdCB3aGVuIG5lZWRlZCB3aXRob3V0IGNoYW5naW5nCgkgIHRoZSBsaWJyYXJ5IEFQSS4KCSogdGVzdC94aHRtbDEgcmVzdWx0L25vZW50L3hodG1sMSByZXN1bHQvdmFsaWQveGh0bWwxLnhodG1sCgkgIHJlc3VsdC94aHRtbDE6IGFkZGVkIGEgbmV3IHRlc3Qgc3BlY2lmaWNhbGx5IGZvciB4aHRtbDEgb3V0cHV0CgkgIGFuZCB1cGRhdGVkIHRoZSByZXN1bHQgb2Ygb25lIFhIVE1MMSB0ZXN0CgpXZWQgTm92IDIwIDE0OjI0OjU2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgcGFyc2VySW50ZXJuYWxzLmMgZW5jb2RpbmcuYzogZml4ZWQgIzk5MDgyCgkgIGZvciB4aTppbmNsdWRlIGVuY29kaW5nPSIuLi4iIHN1cHBvcnQgb24gdGV4dCBpbmNsdWRlcy4KCSogcmVzdWx0L1hJbmNsdWRlL3RzdGVuY29kaW5nLnhtbCB0ZXN0L1hJbmNsdWRlL2RvY3MvdHN0ZW5jb2RpbmcueG1sCgkgIHRlc3QvWEluY2x1ZGUvZW50cy9pc29sYXRpbi50eHQgOiBhZGRlZCBhIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBmaXhlZCB0aGUgZ2VuZXJhdG9yCgkgIHRoZSBuZXcgc2V0IG9mIGNvbW1lbnRzIGdlbmVyYXRlZCBmb3IgZG9jL2xpYnhtbDItYXBpLnhtbCB3ZXJlCgkgIGJyZWFraW5nIHRoZSBweXRob24gZ2VuZXJhdGlvbi4KClR1ZSBOb3YgMTkgMjM6MjU6NDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiByZXBhaXIgc29tZSBwcm9ibGVtIGlmIGd0ay1kb2MgZmFpbCBvciBzdWNoCgkqIGNvbmZpZ3VyZS5pbjogcGF0Y2ggZm9yIFNvbGFyaXMgb24gbmV3IGF1dG9jb25mIGNsb3NlcyAjOTg4ODAgCgkqIGRvYy9wYXJzZWRlY2wucHk6IHJlcGFpciB0aGUgZnJpZ2dpbmcgQVBJIGJ1aWxkaW5nIHNjcmlwdCwKCSAgZGlkIEkgc2F5IHRoYXQgcHl0aG9uIHhtbGxpYiBzdWNrcyA/CgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2xpYnhtbDItcmVmcy54bWw6IHJlZ2VuZXJhdGVkLCByZW9yZGVyaW5nCgkgIGFuZCBzb21lIGNvbW1lbnQgYXJlIG5vIG1vcmUgdHJ1bmNhdGVkLgoKVHVlIE5vdiAxOSAwOTowOTowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogTWFydGluIFN0b2lsb3YgcG9pbnRlZCBvdXQgYSBwb3RlbnRpYWwgbGVhayBpbgoJICB4bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0CgpNb24gTm92IDE4IDE2OjA1OjUxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYnVnICM5ODg3OSBhIGNvcm5lciBjYXNlIHdoZW4gMCBpcwoJICBpbmNsdWRlZCBpbiBIVE1MIGRvY3VtZW50cyBhbmQgdXNpbmcgdGhlIHB1c2ggcGFyc2VyLgoKTW9uIE5vdiAxOCAwMDoxMToyNCBDRVQgMjAwMiBFUkRJIEdlcmdvIDxjYWN0dXNAY2FjdHVzLnJ1bGV6Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoUFlUSE9OX1NJVEVfUEFDS0FHRVMpOiBJZiAtLXdpdGgtcHl0aG9uIGlzCgkgIHNwZWNpZmllZCwgbG9vayBmb3IgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBub3QganVzdCBpbiB0aGUKCSAgc3BlY2lmaWVkIHJvb3QgYnV0IGFsc28gaW4gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gRml4ZXMgIzk4ODI1CgpTdW4gTm92IDE3IDIzOjM2OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogZml4aW5nIGJ1ZyAjOTg3OTIgLCBub2RlIG1heSBoYXZlIG5vIGRvYwoJICBhbmQgZGVyZWZlcmVuY2luZyB3aXRob3V0IGNoZWNraW5nIGFpbid0IGdvb2QgLi4uCgpTdW4gTm92IDE3IDEwOjI1OjQzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2UgMi40LjI3CgkqIGRvYy8qIDogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoJKiBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHRyeSB0byBtYWtlIHN1cmUgdGhlIHR1dG9yaWFsCgkgIGFuZCBhbGwgdGhlIGRvY3MgYXJlIGFjdHVhbGx5IHBhY2thZ2VkIGFuZCBpbiB0aGUgZmluYWwgUlBNcwoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogcmVzdG9yZQoJICB4bWxsaW50IC0tcmVjb3ZlciBmZWF0dXJlLgoKU2F0IE5vdiAxNiAxNjozMDoyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4cGF0aC5jOiBmaXhpbmcgIzk2OTI1IHdpY2ggd2FzIGFsc28gZGVwZW5kZW50IG9uIHRoZQoJICBwcm9jZXNzaW5nIG9mIHBhcnNlZCBlbnRpdGllcywgYW5kIFhQYXRoIGNvbXB1dGF0aW9uIG9uIHN1c3RpdHVlZAoJICBlbnRpdGllcy4KCSogdGVzdFhQYXRoLmM6IG1ha2Ugc3VyZSBlbnRpdGllcyBhcmUgc3Vic3RpdHVlZC4KCkZyaSBOb3YgMTUgMTY6MjI6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkICM5NjU5NCwgd2hpY2ggd2FzIHRvdGFsbHkgZGVwZW5kZW50IG9uIHRoZSAKCSAgcHJvY2Vzc2luZyBvZiBpbnRlcm5hbCBwYXJzZWQgZW50aXRpZXMsIHdoaWNoIGhhZCB0byBiZSBjaGFuZ2VkLgoKRnJpIE5vdiAxNSAxMjoxNjowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOgoJICB0cnlpbmcgdG8gZml4IGJ1ZyAjOTg1MTcgYWJvdXQgYnVpbGRpbmcgb3V0c2lkZSB0aGUgc291cmNlIHRyZWUKCSogZG9jL3htbC5odG1sIGRvYy9GQVEuaHRtbDogZml4ZWQgdGhlIGxpbmsgdG8gbGliaWNvbnYgIzk0NTg1CgpUaHUgTm92IDE0IDE4OjQxOjU1IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogY2xlYW51cAoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogaW50ZWdyYXRlZCBtaW5ndyBpbiBKU2NyaXB0IGNvbmZpZ3VyZQoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBtb2RpZmllZCB0byBhbGxvdyBtaW5ndyBjb2V4aXN0ZW5jZQoJKiB3aW4zMi9jb25maWd1cmUuanM6IGludGVncmF0ZWQgbWluZ3cKCSogd2luMzIvUmVhZG1lLnR4dDogY2xlYW51cAoKVHVlIE5vdiAxMiAyMjowNjo0NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHN0cmVuZ3RoZW4gdGhlIGd1YXJkIGluIHRoZSBQb3AgbWFjcm9zLAoJICBsaWtlIGluIHRoZSBYTUwgcGFyc2VyLCBjbG9zZXMgYnVnICM5NzMxNQoKVHVlIE5vdiAxMiAyMTo1NjozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZml4ZWQgYnVnICM5ODMzOCAsIGZhdGFsRXJyb3IgU0FYCgkgIGNhbGxiYWNrIGlzIG5ldmVyIHVzZWQuCgpUdWUgTm92IDEyIDEzOjMyOjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNBWCBzdHJ1Y3R1cmUKCSAgd2hpY2ggd2FzIGJyZWFraW5nIHhzbHRwcm9jCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUGV0ciBQYWphcyBmb3IgQ0RBVEEgbm9kZXMKCSogdHJlZS5jOiBwYXRjaCBmcm9tIFBldHIgUGFqYXMgaW1wcm92aW5nIHhtbEdldE5vZGVQYXRoKCkKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHBhdGNoIGZyb20gUGV0ZXIgSm9uZXMKCSAgcmVtb3ZpbmcgYSBsZWFrIGluIHhtbFNBWFBhcnNlTWVtb3J5KCkgYW5kIGFkZGluZyB0aGUKCSAgZnVuY3Rpb24geG1sU0FYUGFyc2VNZW1vcnlXaXRoRGF0YSgpCgpNb24gTm92IDExIDIwOjQ3OjAzIE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJYWRkaW5nIHBkZiBvZiB0dXRvcmlhbCwgY2hhbmdpbmcgd2ViIHBhZ2UgdG8gbGluayB0byBpdAoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwucGRmCgkqIGRvYy94bWwuaHRtbAoJKiBkb2MvZG9jcy5odG1sCgpTdW4gTm92IDEwIDIwOjQ4OjU3IE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwOC5odG1sCglhZGRpbmcgZmlsZSB3aGF0IEkgZm9yZ290IGZvciB0dXRvcmlhbAoKU3VuIE5vdiAxMCAyMDozMzoxMyBNU1QgMjAwMiBKb2huIEZsZWNrICA8amZsZWNrQGlua3N0YWluLm5ldD4KCglBZGRpbmcgZW5jb2RpbmcgZGlzY3Vzc2lvbiB0byB0dXRvcmlhbAoJQWRkZWQ6CgkqIGRvYy90dXRvcmlhbC9pbWFnZXMvKi5wbmc6IERvY0Jvb2sgYWRtb25pdGlvbiBpbWFnZSBmaWxlcwoJKiBkb2MvdHV0b3JpYWwvYXBmLmh0bWwsIGFwZy5odG1sOiBuZXcgZ2VuZXJhdGVkIGh0bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVjb252ZXJ0LmM6IGNvbnZlcnNpb24gY29kZSBlbnRpdHkgZmlsZQoJY2hhbmdlZDoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbDogRG9jQm9vayBvcmlnaW5hbAoJKiBkb2MvdHV0b3JpYWwvKi5odG1sOiBnZW5lcmF0ZWQgaHRtbAoKRnJpIE5vdiAgOCAxNzo1OTozMiBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC8qLmg6IHJldGlyZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCSogZG9jL01ha2VmaWxlLmFtOiByZXRpcmVkIHhtbHdpbjMydmVyc2lvbi5oCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogcmV0aXJlZCB4bWx3aW4zMnZlcnNpb24uaAoKRnJpIE5vdiAgOCAxNjo1NTo0NyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIGFkZGl0aW9uYWwgc3ltYm9scwoJKiBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogZXhwb3J0ZWQgdGhlIHJlc3Qgb2YgdGhlIHhtbE1lbSogCgkgIHNpc3Rlcmhvb2QKCkZyaSBOb3YgIDggMTY6MDg6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBmaXhlZCBhIHR5cG8gcG9pbnRlZCBvdXQgYnkgSWdvcgoJKiB4cGF0aC5jOiB0cnkgdG8gc3BlZWQgdXAgbm9kZSBjb21wYXJlIHVzaW5nIGxpbmUgbnVtYmVycwoJICBpZiBhdmFpbGFibGUuCgpUaHUgTm92ICA3IDE1OjE2OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbWFrZSB4bWxGcmVlTm9kZSgpIGhhbmRsZSBhdHRyaWJ1dGVzIGNvcnJlY3RseS4KCldlZCBOb3YgIDYgMjM6NTE6MTEgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjYXRhbG9nLmM6IGNvbXBsZXRlZCB0aGUgIzk2OTYzIGZpeCwgYXMgcmVwb3J0ZWQgYnkgS2FybAoJICBFaWNod2FsZGVyCgpXZWQgTm92ICA2IDE2OjQ4OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IHRyaWVkIHRvIGZpeCBidWcgIzk3ODUyIHJlcG9ydGVkIGJ5IE5pY29sYXMgTm9mZmtlCgpTdW4gTm92ICAzIDEwOjQzOjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBzd2l0Y2hlZCB0aGUgb3JkZXIgb2YgYSBjb3VwbGUgb2YgaW5jbHVkZXMKCSAgdG8gZml4IGJ1Z3MgIzk3MTAwCgpUaHUgT2N0IDMxIDE3OjExOjQ2IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgYnVnICM5Njk2MywgcmV2ZXJ0ZWQgdG8gdGhlIG9sZCBiZWhhdmlvdXIgb2YKCSAgeG1sTG9hZENhdGFsb2dzIHRoYXQgdXNlZCB0byBzZXBhcmF0ZSBkaXJlY3RvcmllcyB3aXRoIGEgJzonLgoKVGh1IE9jdCAzMSAxNjo1NToyMSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB0aHJlYWRzLmM6IGltcHJvdmVtZW50cyB0byB0aGUgV2luZG93cy1zaWRlIG9mIHRocmVhZCBoYW5kbGluZwoJKiB0ZXN0VGhyZWFkcy5jOiBjb25kaXRpb25hbGx5IGV4Y2x1ZGVkIHVuaXN0ZC5oCgkqIHRlc3RUaHJhZHNXaW4zMi5jOiBicm9rZSBvdmVybG9uZyBsaW5lcwoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFkYXB0ZWQgdGhyZWFkLXJlbGF0ZWQgbWFjcm9zIHRvIHRoZSBuZXcKCSAgc2NoZW1lIGFuZCBmb3IgcHRocmVhZHMgb24gV2luZG93cwoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBpbnRyb2R1Y2VkIGEgbW9yZSBmbGV4aWJsZSB0aHJlYWQgYnVpbGQsIAoJICBhZGRlZCB0ZXN0VGhyZWFkc1tXaW4zMl0uYyB0byB0aGUgYnVpbGQKCSogd2luMzIvY29uZmlndXJlLmpzOiBpbnRyb2R1Y2VkIGEgbW9yZSBmbGV4aWJsZSB0aHJlYWQgY29uZmlnCgoyMDAyLTEwLTMxICBKb2huIEZsZWNrICA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbCAoYW5kLCBieSBpbXBsaWNhdGlvbiwgRkFRLmh0bWwpCglhZGRlZCBVVEYtOCBjb252ZXJzYWlvbiBGQVEgZnJvbSBNYXJjdXMgTGFiaWIgSXNrYW5kZXIKClR1ZSBPY3QgMjkgMTg6MzI6MzMgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjb25maWd1cmUuaW46IHJlbW92ZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IHJlbW92ZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCk1vbiBPY3QgMjggMTQ6MDE6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQnJpYW4gU3RhZmZvcmQgdG8gZml4IGEgYnVnCgkgIGluIHhtbFJlY29uY2lsaWF0ZU5zKCkKCk1vbiBPY3QgMjggMTM6NTE6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hyaXN0aWFuIEdsYWhuIHRvIGFsbG93CgkgIHhtbE5ld0NoaWxkKCkgb24gZG9jdW1lbnQgZnJhZ21lbnQgbm9kZXMKClNhdCBPY3QgMjYgMTU6Mjc6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBDaHJpc3RpYW4gR2xhaG4gZm91bmQgYSBwcm9ibGVtIHdpdGggYSByZWNlbnQKCSAgcGF0Y2ggdG8geG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcigpCgkqIHhtbHNjaGVtYXMuYzogQ2hhcmxlcyBCb3plbWFuIGZpeGVkIHNvbWUgU2NoZW1hcyB2YWxpZGF0aW9uCgkgIHByb2JsZW1zCgkqIHJlc3VsdC9zY2hlbWFzL2VsZW0qIHJlc3VsdC9zY2hlbWFzL3NlcSogdGVzdC9zY2hlbWFzLmVsZW0qCgkgIHRlc3Qvc2NoZW1hcy9zZXEqOiBhZGRlZCB0aGUgdGVzdCBjYXNlcyBmcm9tIENoYXJsZXMKCldlZCBPY3QgMjMgMTY6NDI6MjkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZy5oLmluIGxpYnhtbC5zcGVjLmluIGRvYy9NYWtlZmlsZS5hbToKCSAgc2VyaW91cyBjbGVhbnVwIG9mIHRoZSBzcGVjIGZpbGUgYW5kIGFzc29jaWF0ZWQgY2hhbmdlcwoJICBpbiB0aGUgTWFrZWZpbGVzLgoJKiB2YWxpZC5jOiB0cnkgdG8gcmVtb3ZlIHNvbWUgd2FybmluZ3Mgb24geDg2XzY0CgpXZWQgT2N0IDIzIDEwOjUzOjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBhZGRlZCB3aW5zb2NrY29tcGF0LmggdG8gRVhUUkFfRElTVCB0bwoJICBmaXggYnVnICM5NjU4NgoKVHVlIE9jdCAyMiAyMToxMzowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBNaWtoYWlsIFNvZ3JpbmUgcG9pbnRlZCBvdXQgYSBidWcgaW4gSFRNTAoJICBwYXJzaW5nLCBhcHBsaWVkIGhpcyBwYXRjaAoJKiByZXN1bHQvSFRNTC9hdHRyZW50cy5odG1sIHJlc3VsdC9IVE1ML2F0dHJlbnRzLmh0bWwuZXJyCgkgIHJlc3VsdC9IVE1ML2F0dHJlbnRzLmh0bWwuc2F4IHRlc3QvSFRNTC9hdHRyZW50cy5odG1sOgoJICBhZGRlZCB0aGUgdGVzdCBhbmQgcmVzdWx0IGNhc2UgcHJvdmlkZWQgYnkgTWlraGFpbCBTb2dyaW5lCgpUdWUgT2N0IDIyIDE5OjMzOjIwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvYnVpbGRfbGlieG1sLmNvbSB2bXMvY29uZmlnLnZtcyB2bXMvcmVhZG1lLnZtcwoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaAoJICBIVE1McGFyc2VyLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgdHJlZS5jIHRyaW9kZWYuaCB0cmlvbmFuLmMgdXJpLmMgeG1sSU8uYyB4cGF0aC5jOgoJICBBcHBsaWVkIHRoZSBWTVMgdXBkYXRlIHBhdGNoIGZyb20gQ3JhaWcgQS4gQmVycnkKCSogZG9jLyouaHRtbDogdXBkYXRlCgpUdWUgT2N0IDIyIDE2OjI3OjMxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIGVuY29kaW5nLmM6IG1hZGUgeG1sR2V0VVRGOENoYXIgcHVibGljCgpUdWUgT2N0IDIyIDE2OjI1OjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRpbmcgYSBncmVwIGNvbW1hbmQgdG8gLS1zaGVsbCBpbiB4bWxsaW50CgkgIGZvciBULlYuIFJhbWFuCgpUdWUgT2N0IDIyIDE2OjIzOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmM6IHRyaWVkIHRvIGZpeCBzb21lIG9mIHRoZSBwcm9ibGVtIHdpdGggLS1zZ21sCgpNb24gT2N0IDIxIDA5OjU3OjEwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdHJpZWQgdG8gZml4IGJ1ZyAjOTE1MDAgd2hlcmUgZG9jLT5jaGlsZHJlbiBtYXkKCSAgYmUgb3ZlcnJpZGVuIGJ5IGEgY2FsbCB0byB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnkoKQoKTW9uIE9jdCAyMSAwOTowNDozMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiB0cmllZCB0byBmaXggYnVnICM5MDk0NSB3LnIudC4gcGFyc2luZyBvZiBzeXN0ZW0KCSAgaWRlbnRpZmllcnMgaW4gU0dNTCBjYXRhbG9ncyBjb250YWluaW5nICcmJwoKU3VuIE9jdCAyMCAyMzozMTo0NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3R5cGVzLmM6IGZpeGVkIGJ1Z3Mgd2hlbiBwYXNzaW5nIHJlc3VsdCB2YWx1ZSB0cmVlCgkgIHRvIFB5dGhvbiBmdW5jdGlvbnMuCgpGcmkgT2N0IDE4IDEzOjE4OjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyB0aGUgcmVsZWFzZSBvZiAyLjQuMjYKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KCldlZCBPY3QgMTYgMjA6MDE6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIFhNTCBOYW1lc3BhY2UgY29tcGxpYW5jZSBidWcgcmVwb3J0ZWQgYnkKCSAgQWxleGFuZGVyIEdyaW1hbG92c2t5CgpXZWQgT2N0IDE2IDE3OjE4OjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBzZXJpYWxpemF0aW9uIG9mIHNjcmlwdCBhbmQgc3R5bGUgd2hlbgoJICB0aGV5IGFyZSBub3QgbG93ZXJjYXNlIChpLmUuIGFkZGVkIHVzaW5nIHRoZSBBUEkgdG8gdGhlIHRyZWUpLgoKV2VkIE9jdCAxNiAxNjozMTowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogbWFrZSB4bWxWYWxpZGF0ZURvY3VtZW50IGVtaXQgYSB3YXJuaW5nIG1zZyBpZiB0aGVyZQoJICBpcyBubyBEVEQsIHBvaW50ZWQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpXZWQgT2N0IDE2IDE2OjA1OjM4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IGZpeGVkIHRoZSB2YWxpZGF0aW9uIG9mIHNlcXVlbmNlcwoJICBjb250ZW50IG1vZGVsIHdoZW4gc29tZSBvZiB0aGUgYmxvY2tzIGhhdmUgbWluIG9yIG1heCwgYW5kIGEgY291cGxlCgkgIG9mIGJ1Z3MgZm91bmQgaW4gdGhlIHByb2Nlc3MuCgkqIHJlc3VsdC9zY2hlbWFzL2xpc3QwKiB0ZXN0L3NjaGVtYXMvbGlzdDAqOiBhZGRlZCBzb21lIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBPY3QgMTUgMTI6NDE6MDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFJFQURNRTogdXBkYXRlZCB0aGUgY29udGFjdCBpbmZvcm1hdGlvbnMKClR1ZSBPY3QgMTUgMTA6MzU6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiB1c2UgdGVzdCAtZiBpbnN0ZWFkIG9mIHRlc3QgLWUgc2luY2UgU29sYXJpcyAvYmluL3NoCgkgIG1pc3NlcyBpdCwgcmVwb3J0ZWQgYnkgUGV0ZXIgQnJheS4KCk1vbiBPY3QgMTQgMTc6Mzc6MzIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogaW52ZXN0aWdhdGluZyB4bWxOb2RlR2V0Q29udGVudCgpIG9uIG5hbWVzcGFjZSBub2RlcwoJICBhbmQgcmVtb3ZlZCBhIGZldyB3YXJuaW5ncwoKTW9uIE9jdCAxNCAxMzoxMjo1NSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IENocmlzdGlhbiBHbGFobiBmb3VuZCBhIHNtYWxsIGJ1ZyBpbiB0aGUgcHVzaCBwYXJzZXIuCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogY2xlYW5lZCB1cCBhbmQgbWFkZSB4bWxDaGVja0ZpbGVuYW1lCgkgIHB1YmxpYwoKV2VkIE9jdCAgOSAyMzoxMTowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogYWRkZWQKCSAgeG1sU2NoZW1hTmV3TWVtUGFyc2VyQ3R4dCB0byBwYXJzZSBhIHNjaGVtYXMgZnJvbSBhIG1lbW9yeSBhcmVhCgkqIHRlc3RTY2hlbWFzLmM6IGFkZGVkIC0tbWVtb3J5IHRvIHRlc3QgdGhlIG5ldyBpbnRlcmZhY2UKCldlZCBPY3QgIDkgMTY6MjI6NTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weSBkb2Mvc2VhcmNoLnBocDogaW50ZWdyYXRlZCB0aGUgWFNMVCBpbmRleGluZywKCSAgYSBmZXcgZml4ZWQgaW4gdGhlIGluZGV4ZXIsIGFkZGVkIGEgc2NvcGUgc2VsZWN0aW9uIGF0IHRoZQoJICBzZWFyY2ggbGV2ZWwuCgpXZWQgT2N0ICA5IDEyOjE4OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBKb2UgTWFyY3VzIENsYXJrZSByZXBvcnRlZCBhIHNlZ2ZhdWx0IG9uIEZCc2QgCgkgIHRoaXMgd2FzIGR1ZSB0byB1bmluaXRpYWxpemVkIHBhcnRzIG9mIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQKClR1ZSBPY3QgIDggMjM6MjQ6MjAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGV4Y2VwdCB0aGUgQVBJCgkgIGNoYW5nZSwgcHJlc2VydmVkIGl0LgoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyB0byBwb2ludCB0byB0aGUgc2VhcmNoIGVuZ2luZSBmb3IKCSAgaW5mb3JtYXRpb24gbG9va3VwIG9yIGJlZm9yZSBidWcvaGVscCByZXBvcnRzLgoKVHVlIE9jdCAgOCAxODo1MzozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2luZGV4LnB5IGRvYy9zZWFyY2gucGhwOiBhZGRlZCBtYWlsaW5nLWxpc3QgYXJjaGl2ZXMKCSAgaW5kZXhpbmcgYW5kIGxvb2t1cAoKVHVlIE9jdCAgOCAxMDoyNTowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdG8gZml4IHhtbE5vZGVHZXRQYXRoKCkKCk1vbiBPY3QgIDcgMTM6MTI6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weTogaW1wcm92ZWQgSFRNTCBpbmRleGluZwoJKiBkb2Mvc2VhcmNoLnBocDogbWFrZSB0aGUgcXVlcmllcyBhbHNvIGxvb2t1cCB0aGUgSFRNTCBiYXNlZCBpbmRleGVzCgpTdW4gT2N0ICA2IDIzOjUwOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHk6IGFkZGVkIEhUTUwgcGFnZSBpbmRleGluZyAKCkZyaSBPY3QgIDQgMTU6MzM6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogeG1sSU8uYzogZXh0ZW5kZWQgV2luZG93cyBwYXRoIG5vcm1hbGlzYXRpb24gdG8gZml4IHRoZSBiYXNlCgkgIHByb2JsZW0gaW4gbGlieHNsdC4KCSogY2F0YWxvZy5jOiBmaXhlZCBsaXN0IGhhbmRsaW5nIGluIFhNTF9DQVRBTE9HX0ZJTEVTCgpGcmkgT2N0ICA0IDEzOjQzOjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB0eXBvL2J1ZyBmb3VuZCBieSBDaHJpc3RpYW4gR2xhaG4KClN1biBTZXAgMjkgMTk6NDQ6MTAgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogeG1sSU8uYzogYXBwbGllZCBXaW5kb3dzIENFIHBhdGNoIGZyb20gSmF2aWVyLgoJKiB3aW4zMi93aW5jZTogbmV3IGRpcmVjdG9yeSwgY29udGFpbnMgc3VwcG9ydCBmb3IgdGhlIFBvY2tldFBDCgkgIHdpdGggV2luZG93cyBDRSBmcm9tIEphdmllci4KCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiByZW9yZ2FuaXNlZCwgcmVtb3ZlZCBkdXBsaWNhdGUgCgkgIGRlZmluaXRpb25zIGFuZCBhcHBsaWVkIFdpbkNFIHBhdGNoIGZyb20gSmF2aWVyLgoJKiBpbmNsdWRlL3dzb2NrY29tcGF0Lmg6IG5ldyBmaWxlLCBub3cgY29udGFpbnMgV2luU29jawoJICBjb21wYXRpYmlsaXR5IG1hY3Jvcy4KCSogd2luMzIvTWFrZWZpbGUubXN2YzogaW50cm9kdWNlZCBkb3VibGUtcnVuIGNvbXBpbGF0aW9uLgoKVGh1IFNlcCAyNiAxOTo0ODowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgcmVsZWFzZQoJICBvZiAyLjQuMjUKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRlaCBkb2NzIGFuZCB3ZWIgcGFnZXMuCgpUaHUgU2VwIDI2IDE3OjMzOjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGZpeGVkIGJ1ZyAjOTI1MTggdmFsaWRhdGlvbgoJICBlcnJvciB3ZXJlIG5vdCBjb3ZlcmluZyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgoJKiByZXN1bHQvdmFsaWQvZGlhLnhtbCB0ZXN0L3ZhbGlkL2RpYS54bWw6IHRoZSB0ZXN0IHdhc24ndCB2YWxpZCwKCSAgaXQgd2FzIG1pc3NpbmcgdGhlIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBmb3IgdGhlIG5hbWVzcGFjZQoJKiByZXN1bHQvVkMvTlMzOiB0aGUgZml4IG5vdyByZXBvcnQgYnJlYWthZ2VzIGluIHRoYXQgdGVzdAoKVGh1IFNlcCAyNiAxNDozOTowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4aW5nIGJ1ZyAjOTQyNDEgb24gSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMKClRodSBTZXAgMjYgMTQ6MjU6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qOiBhZGRlZCB0aGUgMyBuZXcgbW9kdWxlcyB4bWxyZWdleHAgeG1sYXV0b21hdGEgYW5kIHhtbHVuaWNvZGUKCSAgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkb2NzIGFuZCB3ZWIgc2l0ZQoKVGh1IFNlcCAyNiAxMTo0NTo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgeHBhdGguYzogbWFrZSBzdXJlCgkgIEFUVFJJQlVURV9VTlVTRUQgaXMgYWx3YXlzIHB1dCBhZnRlciB0aGUgYXR0cmlidXRlIGRlY2xhcmF0aW9uLAoJICBub3QgYmVmb3JlCgpUaHUgU2VwIDI2IDExOjMzOjI4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBmaXhlZCBhIHN0dXBpZCBlcnJvcgoJICBicmVha2luZyB0aGUgcHl0aG9uIEFQSQoKVGh1IFNlcCAyNiAwMDozMTo0NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJpby5jIHRyaW8uaCB0cmlvZGVmLmggdHJpb25hbi5jIHRyaW9uYW4uaCB0cmlvcC5oCgkgIHRyaW9zdHIuYyB0cmlvc3RyLmg6IGFwcGxpZWQgYSB0cmlvIHVwZGF0ZSBwYXRjaCBmcm9tIAoJICBCam9ybiBSZWVzZSB3aGljaCBzaG91bGQgd29yayB3aXRoIE1pbkdXCgpUaHUgU2VwIDI2IDAwOjIxOjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGltcHJvdmluZyBzb21lIGRvY3VtZW50YXRpb24gY29tbWVudHMKCSogeG1scmVnZXhwLmM6IGZvdW5kIGFuZCBmaXhlZCBhIG1lbSBsZWFrIHdpdGggcHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYyBhbmQgdGhlIEFQSSBYTUwgZmlsZSBpbmNsdWRpbmcgdGhlIAoJICB4bWxyZWdleHAuaCB4bWxhdXRvbWF0YS5oIGFuZCB4bWx1bmljb2RlLmggaGVhZGVycwoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oCgkgIHB5dGhvbi90eXBlcy5jOiBhZGRlZCBhY2Nlc3MgdG8gdGhlIFhNTCBTY2hlbWFzIHJlZ2V4cHMgZnJvbQoJICBweXRob24KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWdleHAucHk6IGFkZGVkIGEgCgkgIHNpbXBsZSByZWdleHAgYmluZGluZ3MgdGVzdAoKVHVlIFNlcCAyNCAwODoxMDo0OCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sOgoJICBmaXhpbmcgZnRwIGxpbmtzIC0gdGhhbmtzIHRvIFZpdGFseSBPc3RhbmluCgpUdWUgU2VwIDI0IDE2OjA4OjE3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4ZWQgdGhlIGRhdGEgY2FsbGJhY2sgb24gdHJhbnNpdGlvbiBmdW5jdGlvbmFsaXR5CgkgIHdoaWNoIHdhcyBicm9rZW4gd2hlbiB1c2luZyB0aGUgY29tcGFjdCBmb3JtCgkqIHJlc3VsdC9zY2hlbWFzLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMsIGxlc3MgdmVyYm9zZSwgYWxsIHRlc3RzCgkgIHBhc3MgbGlrZSBiZWZvcmUKCSogRE9DQnBhcnNlci5jIHRlc3RBdXRvbWF0YS5jIHRlc3RDMTROLmMgdGVzdFNjaGVtYXMuYyB0ZXN0VGhyZWFkcy5jCgkgIHRlc3RYUGF0aC5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxsaW50LmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jCgkgIHhtbHNjaGVtYXN0eXBlcy5jIHhwYXRoLmMgcHl0aG9uL2xpYnhtbC5jOiByZW1vdmVkIGEgYnVuY2ggb2YKCSAgYW5ub3lpbmcgd2FybmluZ3MKCSogeHBhdGguYzogdHJ5IHRvIHByb3ZpZGUgYmV0dGVyIGVycm9yIHJlcG9ydCB3aGVuIHBvc3NpYmxlCgpTYXQgU2VwIDIxIDE0OjU2OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBicmVha2FnZSByYWlzZWQgYnkgSmFjb2IKCkZyaSBTZXAgMjAgMjA6MDg6MTggQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhZGRlZCBIQVZFX0VSUk5PX0ggZGVmaW5pdGlvbiBmb3IgcGFydHMKCSAgd2hpY2ggZG9uJ3QgdXNlIHNvY2tldHMKCkZyaSBTZXAgMjAgMTg6NDA6NTAgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogYXBwbGllZCB6bGliIHBhdGNoIGZyb20gRGFuaWVsIEdlaHJpZ2VyCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCB6bGliIHBhdGNoIGZyb20gRGFuaWVsIEdlaHJpZ2VyCgpGcmkgU2VwIDIwIDE1OjQwOjE0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCB0aGUgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGZvciAKCSAgcmVnZXhwIHN1cHBvcnQKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhcHBsaWVkIHRoZSBwYXRjaCBmcm9tIE1hcmsgVmFrb2MKCSAgZm9yIHJlZ2V4cCBzdXBwb3J0CgpGcmkgU2VwIDIwIDE1OjM1OjMzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYXMgcG9pbnRlZCBieSBJZ29yIEZsb2F0IGFuZCBEb3VibGUKCSAgcGFyc2luZyBhaW4ndCBmaW5pc2hlZCB5ZXQKCkZyaSBTZXAgMjAgMTQ6MDA6MTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogdHJ5aW5nIHRvIGZpeCAjODg0MTIgYnkgYnlwYXNzaW5nCgkgIGFsbCB0aGUgcHl0aG9uIHN1YmRpciBpZiBweXRob24gYWluJ3QgZGV0ZWN0ZWQKClRodSBTZXAgMTkgMjE6NDY6NTMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIG1hZGUgY29uZmlndXJpbmcgd2l0aCByZWdleHBzL2F1dG9tYXRhL3VuaWNvZGUgdGhlIGRlZmF1bHQKCSAgYnV0IHdpdGhvdXQgc2NoZW1hcyBBVE0KCSogdGVzdFJlZ2V4cC5jIHZhbGlkLmMgeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6CgkgIGZpeGVkIHRoZSByZWdleHAgYmFzZWQgRFREIHZhbGlkYXRpb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeQoJICBwcm9ibGVtIGJ5IHN3aXRjaGluZyB0byBhIGNvbXBhY3QgZm9ybSBmb3IgZGV0ZXJtaW5pc3QgcmVnZXhwcwoJICBhbmQgZGV0ZWN0aW5nIHRoZSBkZXRlcm1pbmlzbSBwcm9wZXJ0eSBpbiB0aGUgcHJvY2Vzcy4gU2VlbXMKCSAgYXMgZmFzdCBhcyB0aGUgb2xkIERURCB2YWxpZGF0aW9uIHNwZWNpZmljIGVuZ2luZSA6LSkgZGVzcGl0ZQoJICB0aGUgcmVnZXhwIGJ1aWx0IGFuZCBjb21wYWN0aW9uIHByb2Nlc3MuCgpXZWQgU2VwIDE4IDE4OjI3OjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBkZXRlcm1pbmlzbSBpcyBkZWJ1Z2dlZCwgbmV3IERURCBjaGVja2luZyBjb2RlIG5vdyB3b3JrcwoJICBidXQgeG1sRkFDb21wdXRlc0RldGVybWluaXNtIHRha2VzIGZhciB0b28gbXVjaCBDUFUgYW5kIHRoZSB3aG9sZQoJICBzZXQgdXN1ZXMgdG9vIG11Y2ggbWVtb3J5IHRvIGJlIHJlYWxseSB1c2FibGUgYXMtaXMKCldlZCBTZXAgMTggMDA6NTQ6MzAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYW5vdGhlciBzdHVwaWQgYnVnIGluIHhtbEdldE5vZGVQYXRoKCkKCSogeG1sbGludC5jOiAtLXZlcnNpb24gbm93IHJlcG9ydCB0aGUgb3B0aW9ucyBjb21waWxlZCBpbgoKVHVlIFNlcCAxNyAyMzo0ODowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBzbWFsbCBjbGVhbnVwCgkqIHZhbGlkLmMgeG1scmVnZXhwLmM6IHN3aXRjaGVkIERURCB2YWxpZGF0aW9uIHRvIHVzZSBvbmx5IHJlZ2V4cAoJICB3aGVuIGNvbmZpZ3VyZWQgd2l0aCB0aGVtLiBBIGJpdCBvZiBkZWJ1Z2dpbmcgYXJvdW5kIHRoZSBkZXRlcm1pbmlzbQoJICBjaGVja3MgaXMgc3RpbGwgbmVlZGVkCgpUdWUgU2VwIDE3IDIxOjIyOjI1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sX3dyYXAuaDogc3R1cGlkIGJ1ZyBmb3VuZCBieSBtYXR0YW1AbmV0Y291cnJpZXIuY29tCgpUdWUgU2VwIDE3IDE5OjU4OjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBzbWFsbCBwb3J0YWJpbGl0eSBnbGl0Y2ggZml4ZWQuCgpNb24gU2VwIDE3IDEyOjM4OjA4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogaW5jb21wbGV0ZSBzdGVwcyBmb3IgcmVhbC9kb3VibGUgc3VwcG9ydAoJKiB0ZXN0QXV0b21hdGEuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOiBhdm9pZGluZyBhIGNvbXBpbGF0aW9uIHByb2JsZW0KCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBzdGFydGluZyB0aGUgd29yayB0b3dhcmQgdXNpbmcKCSAgdGhlIHJlZ2V4cHMgZm9yIGFjdHVhbCBEVEQgdmFsaWRhdGlvbgoKRnJpIFNlcCAxMyAxNjo0NjoxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaGFzaC5jOiBjb3NtZXRpYyBjbGVhbnVwCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IHN0YXJ0ZWQgCgkgIGludGVncmF0aW5nIGEgRFREIHZhbGlkYXRpb24gbGF5ZXIgYmFzZWQgb24gdGhlIHJlZ2V4cHMKClRodSBTZXAgMTIgMTg6MDE6MjkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYzogZml4ZWQgYSBidWcgcmVwb3J0ZWQgYnkgSmVmZiBHb2ZmLAoJICB0aGUgZGV0ZXJtaW5pc20gd2FzIHRlc3RlZCBiZWZvcmUgZWxpbWluYXRpbmcgdGhlIGVwc2lsb24KCSAgdHJhbnNpdGlvbnMgOi0oCgpUaHUgU2VwIDEyIDE2OjU3OjQ1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5CgkgIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0CgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOiB1cGRhdGVkIHRoZSBweXRob24KCSAgYmluZGluZ3MsIGFkZGVkIGNvZGUgZm9yIGVhc2llciBGaWxlIEkvTywgYW5kIHRoZSBhYmlsaXR5IHRvCgkgIGRlZmluZSBhIHJlc29sdmVyIGZyb20gUHl0aG9uIGZpeGluZyBidWcgIzkxNjM1CgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvaW5idWYucHkKCSAgcHl0aG9uL3Rlc3RzL291dGJ1Zi5weSBweXRob24vdGVzdHMvcHVzaFNBWGh0bWwucHkKCSAgcHl0aG9uL3Rlc3RzL3Jlc29sdmVyLnB5IHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6IHVwZGF0ZWQKCSAgYW5kIGF1Z21lbnRlZCB0aGUgc2V0IG9mIFB5dGhvbiB0ZXN0cy4KClR1ZSBTZXAgMTAgMjE6MDU6MjggQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhZGRlZCBtb3JlIHJlYWRtZSBpbmZvIGZvciB0aGUgYmluYXJ5CgkgIHBhY2thZ2UuCgpUdWUgU2VwIDEwIDE0OjE1OjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXhlZCBhIHN0dXBpZCBvdXQgb2YgYm91bmQgYXJyYXkgZXJyb3IKClR1ZSBTZXAgMTAgMTM6MDk6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmggeG1sSU8uYyBwYXJzZXIuYyBIVE1McGFyc2VyLmMgRE9DQnBhcnNlci5jOgoJICBtZXNzaW5nIGFyb3VuZCB3aXRoIHN1cHBvcnQgZm9yIFdpbmRvd3MgcGF0aCwgY2xlYW51cHMsCgkgIHRyeWluZyB0byBpZGVudGlmeSBhbmQgZml4IHRoZSB2YXJpb3VzIGNvZGUgcGF0aCB0byB0aGUKCSAgZmlsZW5hbWUgYWNjZXNzLiBBZGRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aCgpCgpUaHUgU2VwICA1IDE2OjE5OjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHZhbGlkLmM6IHdvcmtpbmcgb24gYmV0dGVyIGVycm9yIHJlcG9ydGluZyBvZiB2YWxpZGl0eQoJICBlcnJvcnMsIGVzcGVjaWFsbHkgcHJvdmlkaW5nIGFuIGFjY3VyYXRlIGNvbnRleHQuCgkqIHJlc3VsdC92YWxpZC94bGluay54bWwuZXJyIHJlc3VsdC92YWxpZC9yc3MueG1sLmVycjogYmV0dGVyCgkgIGVycm9yIHJlcG9ydHMgaW4gdGhvc2UgY2FzZXMuCgpUaHUgU2VwICA1IDEzOjI5OjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGMxNG4uYyBlbnRpdGllcy5jIGxpc3QuYwoJICBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB4bWxJTy5jOiBnZXQgcmlkIG9mIGFsbCB0aGUgCgkgIHBlcnJvcigpIGNhbGxzIG1hZGUgaW4gdGhlIGxpYnJhcnkgZXhlY3V0aW9uIHBhdGhzLiBUaGlzCgkgIHNob3VsZCBmaXggYm90aCAjOTIwNTkgYW5kICM5MjM4NQoKVGh1IFNlcCAgNSAxMzoxMzoxNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBtZW1vcnkgbGVhayByZXBvcnRpbmcgd2FzIGJyb2tlbiBhZnRlciBhIGNoYW5nZQoJICBvZiB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCB1c2VkIHRvIGFjdGl2YXRlIGl0LgoKVGh1IFNlcCAgNSAxMzoxMDo1NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnkgdG8gbWFrZSB0aGUgY29weSBmdW5jdGlvbiB3b3JrIGZvciBub2RlIG9mCgkgIHR5cGUgWE1MX0RPQ1VNRU5UX0ZSQUdfTk9ERSwgdGhleSBhcmUgb25seSBjcmVhdGVkIGJ5IHRoZQoJICBET00gbGF5ZXJzIHRob3VnaCwgbm90IGxpYnhtbDIgaXRzZWxmLgoKVGh1IFNlcCAgNSAxMjo1NzozOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogdHJ5IHRvIHByb3ZpZGUgZmlsZSBhbmQgbGluZSBpbmZvcm1hdGlvbnMsIG5vdCBhbGwKCSAgbWVzc2FnZXMgYXJlIGNvdmVyZWQsIGJ1dCBpdCdzIGEgKGdvb2QpIHN0YXJ0CgpUaHUgU2VwICA1IDEyOjQ5OjM1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiByZWltcGxlbWVudGVkIGEgbGFyZ2UgcGFydCBvZiB0aGUgWEluY2x1ZGUKCSAgcHJvY2Vzc29yLCB0cnlpbmcgdG8gbWluaW1pemUgcmVzb3VyY2VzIHVzZWQsIEphbWVzIEhlbnN0cmlkZ2UKCSAgcHJvdmlkZWQgYSBodWdlIHRlc3QgY2FzZSB3aGljaCB3YXMgZXhoaWJpdGluZyBzZXZlcmUgbWVtb3J5CgkgIGNvbnN1bXB0aW9uIHByb2JsZW1zLgoKVGh1IFNlcCAgNSAxMDowNzoxMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hyaXN0b3BoZSBNZXJsZXQgdG8KCSAgcmVlc3RhYmxpc2ggREVTVERJUgoKV2VkIFNlcCAgNCAxNDoxMzozNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVzIGxpYmFyeSBwYXRoIGZvciB4ODZfNjQgQU1ECgpUdWUgU2VwICAzIDIxOjE0OjE5IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sOgoJKHBsdXMgcmVzdWx0aW5nIGdlbmVyYXRlZCBodG1sIGZpbGVzKQoJZml4aW5nIG9uZSBzcG90IEkgbWlzc2VkIGluIHRoZSB0dXRvcmlhbCB3aGVyZSBJIGhhZG4ndCBmcmVlZAoJbWVtb3J5IHByb3Blcmx5CgpTYXQgQXVnIDMxIDE5OjMxOjE3IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWFkZGF0dHJpYnV0ZS5jCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlYWRka2V5d29yZC5jCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlZ2V0YXR0cmlidXRlLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwvKi5odG1sOgoJdXBkYXRlIHR1dG9yaWFsIHRvIHByb3Blcmx5IGZyZWUgbWVtb3J5ICh0aGFua3MgdG8gQ2hyaXN0b3BoZXIKCVIuIEhhcnJpcyBmb3IgcG9pbnRpbmcgb3V0IHRoYXQgdGhpcyBuZWVkcyB0byBiZSBkb25lKQoJKiBkb2MvdHV0b3JpYWwvaW1hZ2VzL2NhbGxvdXRzLyoucG5nOgoJYWRkZWQgaW1hZ2UgZmlsZXMgc28gdGhlIGNhbGxvdXRzIGFyZSBncmFwaGljYWwsIG1ha2luZyBpdAoJZWFzaWVyIHRvIHJlYWQgKCB1c2UgIi0tcGFyYW0gY2FsbG91dC5ncmFwaGljcyAxIiB0byBnZW5lcmF0ZQoJaHRtbCB3aXRoIGdyYXBoaWNhbCBjYWxsb3V0cykKCldlZCBBdWcgMjggMTM6NDQ6NTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9MaWJ4bWwyLUxvZ28tMTgweDE2OC5naWYgZG9jL0xpYnhtbDItTG9nby05MHgzNC5naWY6CgkgIG5pY2UgbG9nb3MgZ2VuZXJhdGVkIGJ5IE1hcmMgTGl5YW5hZ2UKCSogZG9jL3NpdGUueHNsICouaHRtbDogY2hhbmdlZCB0aGUgc3R5bGVzaGVldCB0byBzaG93IHRoZSBuZXcKCSAgbG9nbyBhbmQgcmVnZW5lcmF0ZWQgdGhlIHBhZ2VzCgpTdW4gQXVnIDI1IDE2OjM4OjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBoYW5kbGUgV2luZG93cyBzZXBlY2lmaWMgZmlsZTovL2xvY2FsaG9zdC8gc2VtYW50aWMgLi4uCgpUaHUgQXVnIDIyIDIyOjAzOjE5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwb3NzaWJsZSBtZW0gbGVhayBwYXRjaCBmcm9tIEphc29uIEFkYW1zCgpUaHUgQXVnIDIyIDE3OjI3OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBpbnRlZ3JhdGVkIHhmOmVzY2FwZS11cmkoKSBmcm9tIFdlc2xleSBUZXJwc3RyYQoJICBpbiB0aGUgWFF1ZXJ5IG5hbWVzcGFjZQoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjQKCSogZG9jLyouaHRtbDogdXBkYXRlZCB0aGUgd2ViIHBhZ2VzCgpUaHUgQXVnIDIyIDE2OjE5OjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBjbG9zaW5nIGJ1ZyAjODUyNTggYnkgZ2VuZXJhdGluZyBjb25kaXRpb25hbAoJICBjb21waWxlIGNoZWNrIHRvIGF2b2lkIGxpbmtpbmcgdG8gcm91dGluZXMgbm90IGNvbmZpZ3VyZWQgaW4uCgoyMDAyLTA4LTIyICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogYXV0b2dlbi5zaDogdXBkYXRlIGVycm9yIG1lc3NhZ2UgZm9yIG1pc3NpbmcgYXV0b21ha2UKClRodSBBdWcgMjIgMTE6NDU6NTAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogdHlwbyBpbiB0YXJnZXQgbmFtZSByZXN1bHRlZCBpbiBsaWJ4bWwyLnB5CgkgIHRvIG5vdCBiZSByZWJ1aWx0LiBmaXhlZCBERVNURElSIHNpbWlsYXJ5IHRvIHRoZSBsaWJ4c2x0IG9uZS4KClRodSBBdWcgMjIgMDk6MTU6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL3dpbjMyL01ha2VmaWxlLm1pbmd3OiB1cGRhdGVkIHdpdGggdmVyc2lvbiBmcm9tIAoJICBFbGl6YWJldGggQmFyaGFtIGF0IGh0dHA6Ly9zb2dneXRyb3VzZXJzLm5ldC9yZXBvc2l0b3J5LwoKVHVlIEF1ZyAyMCAxNjo0MDo0OCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBhZGRlZCB0aGUgcHJlZml4IGxvY2F0aW9uIHRvIHRoZSBpbmNsdWRlCglhbmQgbGliIHNlYXJjaCBwYXRoLgoKMjAwMi0wOC0xOCAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCgkqIGF1dG9nZW4uc2g6IGhhcmRjb2RlIGFjbG9jYWwtMS40L2F1dG9tYWtlLTEuNCBzbyB0aGF0IHVzZXJzIHdpdGgKCWJvdGggYXV0b21ha2UgMS42IGFuZCAxLjQgaW5zdGFsbGVkIGdldCB0aGUgcmlnaHQgYXV0b21ha2UuIE1lYW5zCgljb21waWxhdGlvbiBmcm9tIENWUyB3aWxsIG5vdyByZXF1aXJlIHRoZSBsYXRlc3QgYXV0b21ha2UgMS40CglyZWxlYXNlLCBvciBtYW51YWxseSBjcmVhdGluZyBzeW1saW5rcyBjYWxsZWQgImF1dG9tYWtlLTEuNCIgYW5kCgkiYWNsb2NhbC0xLjQiCgpXZWQgQXVnIDE0IDE4OjU0OjE5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gcHl0aG9uL01ha2VmaWxlLmFtOiBtb3JlIEFNRCA2NCBpbmR1Y2VkIGNoYW5nZXMgZnJvbQoJICBGcmVkZXJpYyBDcm96YXQKCldlZCBBdWcgMTQgMTY6NDM6NTMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IG9vcHMgSSB3YXMgbWlzc2luZyB0aGUgeG1sOmJhc2UgZml4dXAgdG9vCgkqIHJlc3VsdC9YSW5jbHVkZS8qLnhtbDogdGhpcyBhZGRzIHhtbDpiYXNlIGF0dHJpYnV0ZXMgdG8gbW9zdAoJICByZXN1bHRzIG9mIHRoZSB0ZXN0cwoKV2VkIEF1ZyAxNCAxNjowNTozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogcXVpY2sgYnV0IGFwcGFyZW50bHkgd29ya2luZyBpbXBsZW1lbnRhdGlvbiBvZgoJICB4aTpmYWxsYmFjaywgc2hvdWxkIGNsb3NlIGJ1ZyAjODk2ODQKCSogTWFrZWZpbGUuYW0gdGVzdC9YSW5jbHVkZS9kb2NzL2ZhbGxiYWNrLnhtbCAKCSAgcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrLnhtbDogYWRkZWQgYSBiYXNpYyB0ZXN0IGZvciBmYWxsYmFjaywKCSAgYW5kIHJ1biB3aXRoIC0tbm93YXJuaW5nIHRvIGF2b2lkIGEgc3B1cmlvdXMgd2FybmluZwoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgcGF0Y2ggZnJvbSBGcmVkZXJpYyBDcm96YXQgZm9yIHB5dGhvbgoJICBiaW5kaW5ncyBvbiBBTUQgNjRiaXRzIG1hY2hpbmVzLgoKV2VkIEF1ZyAxNCAxMDo0Nzo0NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHhtbFNBWFVzZXJQYXJzZU1lbW9yeSgpIHJlYWxseSBvdWdodCB0byBmYWlsIGlmCgkgIHRoZSBjYWxsZXIgZG9uJ3QgcGFzcyBhIFNBWCBjYWxsYmFjayBibG9jay4KCldlZCBBdWcgMTQgMTA6Mjk6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCB0aGUgc2FtZSBmaXggZm9yIHRoZSBYTUwtMS4wIG5hbWVzcGFjZSB0bwoJICB4bWxTZWFyY2hOc0J5SHJlZigpIGFzIHdhcyBkb25lIGZvciB4bWxTZWFyY2hOcygpCgpNb24gQXVnIDEyIDE2OjUyOjA4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuMzogc21hbGwgY2xlYW51cCBvZiB0aGUgbWFuIHBhZ2UKCSogSFRNTHRyZWUuYzogZml4ZWQgYSBwb3RlbnRpYWwgcHJvYmxlbSByYWlzZWQgYnkgUGV0ciBWYW5kcm92ZWMKCSAgd2hlbiBzZXJpYWxpemluZyBIUkVGIGF0dHJpYnV0ZXMgZ2VuZXJhdGVkIGJ5IFhTTFQuCgpNb24gQXVnIDEyIDE1OjI0OjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmg6IGludGVncmF0ZWQgYSBjbGVhbmVkIHVwCgkgIHZlcnNpb24gb2YgTWFyYyBMaXlhbmFnZScgcGF0Y2ggZm9yIGJvb2xlYW4gYXR0cmlidXRlcyBpbiBIVE1MCgkgIG91dHB1dAoKTW9uIEF1ZyAxMiAxNDoxMTo1OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3Rlc3RzL3NlcmlhbGl6ZS5weTogZml4ZWQgdGhlIHRlc3QgcmVzdWx0cywgaW5kZW50aW5nCgkgIGJlaGF2aW91ciBjaGFuZ2VkIHNsaWdodGx5CgpUaHUgQXVnICA4IDExOjAwOjI2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkCgluZXcgYzE0biBmdW5jdGlvbiB0byBXaW5kb3dzIGRlZiBmaWxlcwoKRnJpIEF1ZyAgMiAxNjo0Njo0NiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGMxNG4uYzogZml4ZWQgYSBtZW1vcnkgbGVhayBpbiBjMTRuIGNvZGUKClNhdCBBdWcgIDMgMDA6MTU6MDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhZGRpbmcgYSBuZXcgQVBJIGZvciBDaHJpc3RpYW4KCSAgR2xhaG46IHhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXIKCSogdmFsaWQuYzogcGF0Y2ggZnJvbSBSaWNrIEpvbmVzIGZvciBzb21lIGdyYW1tYXIgY2xlYW51cCBpbgoJICB2YWxpZGF0aW9uIG1lc3NhZ2VzCgkqIHJlc3VsdC9WQy8qIHJlc3VsdC92YWxpZC8qOiB0aGlzIHNsaWdodGx5IGNoYW5nZSBzb21lIG9mIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzIG91dHB1dHMKClRodSBBdWcgIDEgMTQ6NTA6MjggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdHJ5aW5nIHRvIGZpeCBhIHByb2JsZW0gaW4gbmFtZXNwYWNlZCBhdHRyaWJ1dGUgaGFuZGxpbmcKCSAgcmFpc2VkIGJ5IENocmlzdGlhbiBHbGFobgoKVGh1IEF1ZyAgMSAxMjoxNzozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYyBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oOiBPcGVuaW5nIHRoZSBpbnRlcmZhY2UKCSAgeG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlciBhcyByZXF1ZXN0ZWQgaW4gIzg5NDE1CgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL3NldHVwLnB5LmluOiBhcHBsaWVkIGNsZWFudXAKCSAgcGF0Y2hlcyBmcm9tIE1hcmMtQW5kcmUgTGVtYnVyZwoJKiB0cmVlLmM6IGZpeGluZyBidWcgIzg5MzMyIG9uIGEgc3BlY2lmaWMgY2FzZSBvZiBsb29zaW5nIAoJICB0aGUgWE1MLTEuMCBuYW1lc3BhY2Ugb24geG1sOnh4eCBhdHRyaWJ1dGVzCgpXZWQgSnVsIDMxIDIzOjI3OjQyIDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jIGluY2x1ZGUvbGlieG1sL2MxNG4uaDogZml4ZWQgb25lIG1vcmUgYzE0biArIG5hbWVzcGFjZXMKCWNvcm5lciBjYXNlIGZyb20gbmV3IE1lcmxpbidzIHRlc3Qgc3VpdGUgYW5kIGFkZGVkIGEgY2FsbGJhY2sKCXRoYXQgd2lsbCBiZSB1c2VkIHRvIGltcHJvdmUgeG1sc2VjIHBlcmZvcm1hbmNlCgpNb24gSnVsIDI5IDE4OjIyOjAwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiB0cnlpbmcgdG8gZml4IHRoZSA8c3R5bGU+IGVzY2FwaW5nIHByb2JsZW0gaW4KCSAgSFRNTCBzZXJpYWxpemF0aW9uIGJ1ZyAjODkzNDIKClRodSBKdWwgMjUgMDE6MzM6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWwuaHRtbCBkb2MvKi5odG1sOiBhcHBsaWVkIHN5bnRheCBwYXRjaCBmcm9tIFJpY2sgSm9uZXMKCSAgYW5kIHJlYnVpbHQgdGhlIHdlYiBzaXRlLgoKTW9uIEp1bCAyMiAxMTowNDo0OCBQRFQgMjAwMiAgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWRkZWQgX3ByaXZhdGUgbWVtYmVyIHRvIHhtbE5zIHN0cnVjdAoKU3VuIEp1bCAyMSAxNzo0ODo0NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhpbmcgYnVnICM4NDg3NiBiYXNlZCBvbiB0aGUgeG1sIHdvcmtpbmcKCSAgY29kZS4KClN1biBKdWwgMjEgMTk6MTU6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IGVuaGFuY2VkIHRvIGZpeCBidWcgNzIwMTIgKGVycm9ycwoJICB3aGVuIHVzaW5nICctalgnIG1ha2UgcGFyYW1ldGVyKQoKRnJpIEp1bCAxOSAxNjozNTowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IHNtYWxsIGFkZGl0aW9uYWwgZW5oYW5jZW1lbnQgZm9yIGJvb2xlYW5zCgkgIGNvbXBhcmVkIHRvIG5vZGVzZXRzCgpXZWQgSnVsIDE3IDE5OjQ4OjE0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBjaGFuZ2VkIHRoZSBvcmRlciBvZiB0aGUgZW5jb2RpbmcgZGVjbGFyYXRpb24KCSAgYXR0cmlidXRlcyBpbiB0aGUgbWV0YSB0YWdzIGR1ZSB0byBhIGJ1ZyBpbiBJRS9NYWMKCkZyaSBKdWwgMTIgMDg6NDU6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBlbmhhbmNlZCBoYW5kbGluZyBvZiBib29sZWFucyAoZXNwZWNpYWxseSAnPScKCSAgYW5kICchPScgZm9yIG5vZGVzZXRzKSAtIGZpeGVzIGJ1ZyA4NTI1Ni4gIEFkZGVkIG5ldwoJICByb3V0aW5lIHhtbFhQYXRoTm90RXF1YWxWYWx1ZXMgZm9yIG1vcmUgcHJvcGVyIGhhbmRsaW5nCgkgIG9mICchPScgd2hlbiBub2Rlc2V0cyBhcmUgaW52b2x2ZWQuCgpUaHUgSnVsIDExIDIxOjQ1OjUyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGluZyBSZWQgSGF0IGJ1ZyAjNjg2MTQgYnkgYWRkaW5nIHRoZQoJICBkb2MveG1sY2F0YWxvZ19tYW4ueG1sIHRvIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uCgpXZWQgSnVsIDEwIDIxOjI2OjEzIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IEFkZGVkIGEgY29weSAqLnBkYiB0byBpbnN0YWxsLCBmZXcgaGF2ZQoJICBhc2tlZCBmb3IgdGhpcy4KClNhdCBKdWwgIDYgMjE6NTU6NTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yMwoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcwoKU2F0IEp1bCAgNiAyMToxMToyMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgIzg0MTY5IGJ5IGZpeGluZyB0aGUKCSAgY29tbWVudCBvZiB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCB0byBkZXNjcmliZSB0aGUgCgkgIGVuY29kaW5nIGRldGVjdGlvbiBwYXJhbWV0ZXJzIGJldHRlci4KClNhdCBKdWwgIDYgMTk6NDQ6NTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyBidWcgIzc5MzMxIGluIG9uZSBwYXRoIHRoZSBsb29rdXAgZm9yCgkgIElEIGF0dHJpYnV0ZXMgb24gYSBuYW1lc3BhY2VkIG5vZGUgd2Fzbid0IGhhbmRsZWQgY29ycmVjdGx5IDotXAoKRnJpIEp1bCAgNSAyMDowNzo0MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB0cnlpbmcgdG8gZml4IDg3MjM1IGFib3V0IGRpc2NhcmRlZCB3aGl0ZQoJICBzcGFjZXMgaW4gdGhlIEhUTUwgcGFyc2VyLgoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgdGhlIG91dHB1dCBvZiBhIG51bWJlciBvZiBIVE1MCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBKdWwgIDEgMjM6MjM6NDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciB0aGUgbmFtZXNwYWNlCgkgIGF4aXMgKyBmaXhlZCBhIG1lbW9yeSBlcnJvci4KCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGFwcGxpZWQgcGF0Y2hlcyBmcm9tIFBldGVyIEphY29iaQoJICByZW1vdmluZyBjdHh0LT50b2tlbiBmb3IgZ29vZC4KCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBhIGZldyBtZW1vcnkgbGVha3MKCSAgcG9wcGVkIG91dCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0cy4KCSogTWFrZWZpbGUuYW06IHBhdGNoIGZvciB0aHJlYWRzIG1ha2VmaWxlIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpGcmkgSnVuIDI4IDE5OjM4OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZW5oYW5jZWQgYmVoYXZpb3VyIG9mIHBvc2l0aW9uKCkgYWZ0ZXIgdXNhZ2Ugb2YKCSAgZXhwcmVzc2lvbnMgaW52b2x2aW5nIHByZWNlZGluZy1zaWJsaW5nIChldCBhbCkuCgpUdWUgSnVuIDE4IDA5OjU4OjQ4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIFBldGVyIEphY29iaSB0byBzb2x2ZSBhIHByb2JsZW0KCSAgd2hlbiBjb21waWxpbmcgd2l0aCB0aGUgV2F0Y29tIEMgb24gV2luMzIgCgkqIHJlc3VsdC9zY2hlbWFzLyouZXJyOiB0aGUgY2hhbmdlIG9mIGhhc2hpbmcgYWxnbyBnZW5lcmF0ZWQKCSAgcGVybXV0YXRpb25zIGluIHRoZSBvdXRwdXQKCk1vbiBKdW4gMTcgMTk6MDI6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogYXBwbGllZCBwYXRjaCBmcm9tIFNhbmRlciBWZXNpayBpbXByb3ZpbmcgdGhlIHF1YWxpdHkgb2YKCSAgdGhlIGhhc2ggZnVuY3Rpb24uCgoyMDAyLTA2LTE0ICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZGVidWdYTUwuYyBlbmNvZGluZy5jCgluYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyB0cmVlLmMgdXJpLmMgeG1sSU8uYwoJeG1sbGludC5jIHhwYXRoLmM6IHJlcGxhY2VkIHNwcmludGYoKSB3aXRoIHNucHJpbnRmKCkKCXRvIHByZXZlbnQgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93ICh0aGUgYnVnIHdhcyBwb2ludGVkCglvdXQgYnkgQW5qdSBQcmVtYWNoYW5kcmFuKSAKClRodSBKdW4gMTMgMTc6MzA6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmVkIGFuIHVuaW5pdGlhbGl6ZWQgZGF0YSBlcnJvciBwb3BwZWQgYnkgdmFsZ3JpbmQKCSAgb24gUEUgcmVmZXJlbmNlcwoKV2VkIEp1biAxMiAyMTozODo0NiBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sCglhZGRpbmcgdHV0b3JpYWwgcmVmZXJlbmNlIHRvIHRoZSB3ZWIgcGFnZQoKV2VkIEp1biAxMiAyMToyNjowOCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGUuaHRtbAoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWdldGF0dHJpYnV0ZS5jCglhZGRpbmcgc2VjdGlvbiB0byB0dXRvcmlhbCBhYm91dCByZXRyaWV2aW5nIGFuIGF0dHJpYnV0ZQoJdmFsdWUKClR1ZSBKdW4gMTEgMTI6MDc6MDQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoZXMgZnJvbSBQZXRlciBKYWNvYmkgdG8gc3RhcnQKCSAgdG8gZ2V0IHJpZCBvZiBjdHh0LT50b2tlbiwgd2l0aCBhIHBvc3NpYmxlIHNpZ25pZmljYW50IHNwZWVkCgkgIGltcHJvdmVtZW50IHRvIGJlIGdhaW5lZCBvbmNlIGRvbmUuIEJldHRlciBjb21wbGlhbmNlIHdpdGggUEUKCSAgcmVmZXJlbmNlcyBjb25zdHJ1Y3RzIGluIERURHMgdG9vLgoJKiB0ZXN0L3ZhbGlkL3RbMC05XSogcmVzdWx0L3ZhbGlkL3RbMC05XSo6IGFkZGVkIGEgc2V0IG9mIHRlc3RzCgkgIGZyb20gUGV0ZXIgdG9vCgpUdWUgSnVuIDExIDA5OjI1OjEyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogQmFiYWsgVmFoZWRpcG91ci1LdW56ZSByZXBvcnRlZCB0aGF0IG9wZW5UYWcgaW4gCgkgIHhtbFBhcnNlRWxlbWVudCB3YXMgbGlrZWx5IHRvIGhhdmUgYmVlbiBkZWFsbG9jYXRlZCBhdCB0aGUKCSAgdGltZSBvZiB0aGUgcmVwb3J0LCBwb3NzaWJseSBsZWFkaW5nIHRvIHNlZ2ZhdWx0LiBKdXN0IHJlcG9ydAoJICB0aGUgdGFnIG5hbWUgbm93LgoKTW9uIEp1biAxMCAxODowMDowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciBYUGF0aCBzdWJzdHJpbmcoKSBmdW5jdGlvbgoJKiByZXN1bHQvWFBhdGgvZXhwci9zdHJpbmdzIHRlc3QvWFBhdGgvZXhwci9zdHJpbmdzOiBuZXcgc2V0IG9mIHRlc3RzCgoyMDAyLTA2LTA2ICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHhtbElPLmM6IHBhdGNoIGZyb20gUmFjaGVsIEhlc3RpbG93IHRvIGZpeCBidWcgIzg0MzQwCgpXZWQgSnVuICA1IDE5OjE0OjQ5IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy9GQVEuaHRtbAoJZml4aW5nIHR5cG9zIGluIEZBUSwgdGhhbmtzIHRvIFJvYmVydCBGdW5uZWxsIGZvciB0aGUKCWVkaXRpbmcgaGVscAoKV2VkIEp1biAgNSAxNDo1MDoyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUzogZ290IGNvbXBsYWludHMgZnJvbSBycG1saW50IHRoYXQgaXQgd2FzIGVtcHR5CgpUdWUgSnVuICA0IDA5OjA5OjE4IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBhZGRlZCBkb2MvdHV0b3JpYWwsIGluY2x1ZGluZzoKCWFwYS5odG1sCglhcGIuaHRtbAoJYXBjLmh0bWwKCWFwZC5odG1sCglhcjAxczAyLmh0bWwKCWFyMDFzMDMuaHRtbAoJYXIwMXMwNC5odG1sCglhcjAxczA1Lmh0bWwKCWFyMDFzMDYuaHRtbAoJaW5jbHVkZWFkZGF0dHJpYnV0ZS5jCglpbmNsdWRlYWRka2V5d29yZC5jCglpbmNsdWRla2V5d29yZC5jCglpbmNsdWRlc3RvcnkueG1sCglpbmRleC5odG1sCgl4bWx0dXRvcmlhbC54bWwKCWxpYnhtbCB0dXRvcmlhbCwgaW5jbHVkaW5nIGdlbmVyYXRlZCBodG1sCgpNb24gSnVuICAzIDIxOjIxOjI2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogcmVzdWx0L2MxNG4vZXhjLXdpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgcmVzdWx0L2MxNG4vd2l0aG91dC1jb21tZW50cy9tZXJsaW4tYzE0bi10d28tKgoJICB0ZXN0L2MxNG4vZXhjLXdpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdC9jMTRuL3dpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdEMxNE4uYyBNYWtlZmlsZS5hbTogYWRkZWQgbWVybGluLWMxNG4tdHdvLnRhci5neiB0ZXN0cyBmb3IgCgljMTRuL2V4Yy1jMTRuIGFuZCBzbGlnaHRseSBtb2RpZmllZCB0ZXN0IHNjcmlwdCB0byBoYW5kbGUKCXRoZXNlIHRlc3QgY2FzZXMKCSogYzE0bi5jOiBmaXhlZCBidWdzIGZvciBjb21wbGljYXRlZCBub2RlcyBzZXQgKG5hbWVzcGFjZQoJd2l0aG91dCBub2RlIGFuZCBvdGhlcnMgZnJvbSBtZXJsaW4tYzE0bi10d28udGFyLmd6KQoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYzogIm9wZW5lZCIgeG1sWFBhdGhOb2RlU2V0RnJlZU5zKCkgZnVuY3Rpb24KCWZvciB4bWxzZWMgcGVyZm9ybWFuY2UgcGF0Y2gKCSogeHBhdGguYzogZml4ZWQgc2VsZjo6bm9kZSgpIGZvciBuYW1lc3BhY2VzIGFuZCBhdHRyaWJ1dGVzCgpNb24gSnVuIDAzIDAwOjA0OjIxIDIwMDIgQ2hlbWEgQ2Vsb3JpbyA8Y2hlbWFAeGltaWFuLmNvbT4KCgkqIHRyZWUuaDogYWRkZWQgeG1sRG9jRm9ybWF0RHVtcCB3aGljaCBpcyBqdXN0IGFzIHhtbERvY0R1bXAKCSAgYnV0IHdpdGggdGhlIGZvcm1hdCBwYXJhbWV0ZXIKCSogdHJlZS5jOiBtYWRlIHhtbERvY0R1bXAgYSB3cmFwcGVyIGFycm91bmQgeG1sRG9jRm9ybWF0RHVtcAoKRnJpIE1heSAzMSAxMjoxNjo0OCAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIE1ha2VmaWxlLmFtOiB1cGRhdGVkIGMxNG4gdGVzdHMgc3VpdGUKCSogYzE0bi5jOiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBmb3IgcHJldmlvdXMgYzE0biBwYXRjaAoKRnJpIE1heSAzMSAxMTo0NzoxMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFub3RoZXIgcGVyb2Zvcm1hbmNlIHBhdGNoIGZyb20gUGV0ZXIgSmFjb2JpLCB0aGF0CgkgIHRpbWUgb24gcGFyc2luZyBhdHRyaWJ1dGUgdmFsdWVzLgoKVGh1IE1heSAzMCAyMzozNDoyNyAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9jMTRuLyogdGVzdC9jMTRuLyo6IEMxNE4gdGVzdHMgaW50ZWdyYXRlZAoJaW50byBMaWJYTUwyIHRlc3Qgc3VpdGUKClRodSBNYXkgMzAgMjE6MjM6MDYgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmM6IHByb3BhZ2F0aW5nIHhwYXRoIGFuY2Vzc3RvcnMgbm9kZSBmaXggdG8gYzE0bgoJcGx1cyBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB0byByZWR1Y2UgbnVtYmVyIG9mCgltYWxsb2NzCgkqIHhwYXRoLmM6IGZpeGVkIGFuY2VzdG9ycyBheGlzIHByb2Nlc3NpbmcgZm9yIG5hbWVzcGFjZSBub2RlcwoKV2VkIE1heSAyOSAxMDoyMTozOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogcGVyZm9ybWFuY2UgcGF0Y2ggZnJvbQoJICBQZXRlciBKYWNvYmkKCk1vbiBNYXkgMjcgMjM6MTg6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yMgoKTW9uIE1heSAyNyAxNjo0NDowNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjCgkgIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDogZml4aW5nICM3OTMzNCBtYWtpbmcgaHRtbFBhcnNlRG9jdW1lbnQKCSAgYSBwdWJsaWMgZW50cnkgcG9pbnQuCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBBUEkgYW5kIGRvY3MKCk1vbiBNYXkgMjcgMTQ6MTY6MjggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyB0byBmaXggYSBwcm9ibGVtIGludHJvZHVjZWQKCSAgaW4gdGhlIHByZXZpb3VzIHBhdGNoIGFuZCBwb2ludGVkIGJ5IE5vcm0KCkZyaSBNYXkgMjQgMTM6MTA6MjIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhpbmcgYnVnICM4MTExMgoKRnJpIE1heSAyNCAxMzowMzoyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGZpeGluZyBidWcgIzgyODQ4CgpGcmkgTWF5IDI0IDA5OjU0OjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nLmZ1bGw6IEFsZWtzZXkncyBjb21taXQgY2hhbmdlZCB0aGUKCSAgb3V0cHV0IG9mIG9uZSBjYXRhbG9nIHRlc3QKCkZyaSAyNCBNYXkgMjAwMiAxMjoxNzo0NSBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGdsb2JhbC5kYXRhIGdsb2JhbHMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIAoJd2luMzIvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IGNoYW5nZWQKCWRlZmF1bHQgdmFsdWUgZm9yIGdsb2JhbCBwYXJhbWV0ZXIgeG1sSW5kZW50VHJlZU91dHB1dCB0byAxIGFuZAoJaW50cm9kdWNlZCBuZXcgZ2xvYmFsIHBhcmFtZXRlciB4bWxUcmVlSW5kZW50U3RyaW5nICh0aGUgc3RyaW5nCgl1c2VkIHRvIGRvIG9uZS1sZXZlbCBpbmRlbnQpIHdpdGggZGVmYXVsdCB2YWx1ZSAiICAiIChhcyBpdCB3YXMKCWluIHRyZWUuYykKClRodSBNYXkgMjMgMTM6NTU6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBNZXJpam4gQnJvZXJlbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2hlbiBjb21waWxpbmcKCSAgd2l0aCB0cmlvIGFuZCBzY2hlbWFzLgoKV2VkIE1heSAyMiAxMTo1Nzo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIHRvIGZpeCB0aGUgcHJvYmxlbSByYWlzZWQgaW4KCSAgaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8yMDAyLUFwcmlsL21zZzAwMjQ2Lmh0bQoKV2VkIE1heSAyMiAwODozODoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhIGJpdCBvZiB3b3JrIG9uIGltcG9ydC4KCSogeG1sc2NoZW1hc3R5cGVzLmM6IENoYXJsZXMgQm96ZW1hbiBwcm92aWRlZCBhIGNvbXBhcmUgZnVuY3Rpb24KCSAgZm9yIGRhdGUvdGltZSB0eXBlcyBzbyBtaW4vbWF4IGZhY2V0IHJlc3RyaWN0aW9ucyBzaG91bGQgd29yaywKCSAgaW5kZXRlcm1pbmF0ZSBjb21wYXJpc29ucyByZXR1cm4gYW4gZXJyb3IgaW5zdGVhZCBvZiBlcXVhbC4KCSogdGVzdC9zY2hlbWFzL2RhdGVfMCogcmVzdWx0L3NjaGVtYXMvZGF0ZV8wXzA6IHNwZWNpZmljIHRlc3QKCSAgZnJvbSBDaGFybGVzIEJvemVtYW4gdG9vCgpTYXQgTWF5IDE4IDA5OjU0OjEyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuMyBkb2MvYnVpbGREb2NCb29rQ2F0YWxvZzogYXBwbHkgYSBjb3VwbGUgb2YgcGF0Y2hlcwoJICBmcm9tIENocmlzdGlhbiBDb3JuZWxzc2VuIGZpeGluZyB0aGUgbWFuIHBhZ2VzIGFuZCB0aGUgQ2F0YWxvZwoJICBidWlsZGluZyBzY3JpcHQuCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IG5vdGhpbmcgbmV3IHlldAoJICBuZXh0IHN0ZXAgaXMgPHhzOmltcG9ydD4gSSBub3cgaGF2ZSBhIHJlYXNvbmFibGUgdW5kZXJzdGFuZGluZwoJICBvZiBob3cgaXQgd29ya3MuCgpUaHUgTWF5IDE2IDEwOjQzOjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIGEgc21hbGwgYnVmZmVyIHBlcmZvcm1hbmNlIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpXZWQgTWF5IDE1IDAwOjI1OjM0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZXhwb3J0ZWQgeG1sWFBhdGhOb2RlU2V0QWRkTnMoKQoKVHVlIE1heSAxNCAxMzowMDo0OCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nIGFuIFhQYXRoIGZ1bmN0aW9uIGV2YWx1dGF0aW9uIGJ1ZyBwb2ludGVkIG91dAoJICBieSBBbGV4ZXkgRWZpbW92IHdoZXJlIHRoZSBjb250ZXh0IHdhcyBsb3N0IHdoZW4gZXZhbHVhdGluZwoJICB0aGUgZnVuY3Rpb24gYXJndW1lbnRzCgpNb24gMTMgTWF5IDIwMDIgMTE6Mzc6MzkgUE0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IG1ha2VkIHhtbFhQYXRoTm9kZVNldEFkZE5zKCkgCgkgIGZ1bmN0aW9uIHB1YmxpYyBmb3IgWE1MU2VjIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMKCk1vbiBNYXkgMTMgMTI6MzI6MjIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgOiBmaXhlZCBhIHByb2JsZW0KCSAgd2l0aCB0aGUgSFRNTCBwYXJzZXIgcG9pbnRlZCBieSBHYXJ5IEJlbnNvbgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5OiBzZGRpbmcgdGhlCgkgIGV4YW1wbGUKClRodSAwOSBNYXkgMjAwMiAxMToxOTowMCBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjODExNTkgKG1lbW9yeSBncm93dGggaW4gU0FYKQoKVHVlIDA3IE1heSAyMDAyIDA5OjIwOjIxIEFNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgIzc4ODU4ICh0aGUgcmVhbCBmaXgpCgpTYXQgMDQgTWF5IDIwMDIgMTE6NTY6MzEgUE0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAjNzg4NTggKHF1aWNrIGFuZCBkdXJ0eSBmaXggdG8gaGlkZSB0aGUgcHJvYmxlbSkKClN1biBNYXkgIDUgMDg6NTc6MDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbW9kaWZpZWQgeG1sTm9kZVNldEJhc2UgdG8gYWxsb3cgY2hhbmdpbmcgdGhlCgkgIGJhc2Ugb2YgYSBkb2N1bWVudC4KCkZyaSBNYXkgIDMgMDk6MjA6NDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBwYXRjaCBDaGFybGVzIEJvemVtYW4gZm9yIHZhbGlkYXRpb24gb2YKCSAgYWxsIHRoZSBkYXRlLCB0aW1lLCBhbmQgZHVyYXRpb24gdHlwZXMKCSogdGVzdC9zY2hlbWFzL2R1cl8wKiByZXN1bHQvc2NoZW1hcy9kdXJfMCo6IGFzc29jaWF0ZWQgdGVzdHMKCSogY29uZmlndXJlLmluOiBmaXhlZCBhbiBlcnJvciBwb2ludGVkIGJ5IGFuIHVzZXIKCSogeG1sMi1jb25maWcuaW46IGZpeGVkIGFuIGVycm9yIHBvaW50ZWQgYnkgYW4gdXNlcgoKV2VkIDAxIE1heSAyMDAyIDExOjI5OjI3IEFNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjCgl3aW4zMi9saWJ4bWwyLmRlZi5zcmMgeG1sSU8uYzogZXhwb3J0ZWQgZGVmYXVsdAoJJ2ZpbGU6JywgJ2h0dHA6JyBhbmQgJ2Z0cDonIHByb3RvY29scyBpbnB1dCBoYW5kbGVycyAKCWFuZCBtYWtlZCBwcm90b2NvbHMgY29tcGFyaXNzb24gY2FzZSBpbnNlbnNpdGl2ZQoKVHVlIEFwciAzMCAxNjoyOTowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBOZXZlbiBIYXMgZGV0ZWN0ZWQgYSB0eXBvCgpUdWUgQXByIDMwIDA4OjQ4OjExIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBBVVRIT1JTIEhBQ0tJTkc6IGFkZGVkIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkgIGFzIG9uZSBvZiB0aGUgcGVyc29ucyBhbGxvd2VkIHRvIGNvbW1pdCBkaXJlY3RseSB0byB0aGUKCSAgbW9kdWxlLgoKTW9uIEFwciAyOSAxNzo0ODoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjIxCgkqIHZhbGlkLmM6IHJhaXNlZCBhIHRvbyBsb3cgbGltaXQKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3MgCgpXZWQgQXByIDI0IDEzOjQxOjAzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzIHRlc3QvWFBhdGgvZXhwci9mdW5jdGlvbnMKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIHJlc3VsdC9YUGF0aC9leHByL2Z1bmN0aW9ucwoJICB4cGF0aC5jOiBhbm90aGVyIFhQYXRoIGNvbmZvcm1hbmNlIHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcwoKVHVlIEFwciAyMyAxOTo1MDo0MCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCB2YWxpZGF0aW9uIG9mIGF0dHJpYnV0ZSBncm91cHMuCgkqIHRlc3Qvc2NoZW1hcyByZXN1bHQvc2NoZW1hczogYWRkZWQgYW4gZXhhbXBsZSBmcm9tIHRoZSBwcmltZXIKClR1ZSBBcHIgMjMgMDk6MTE6MzcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrIG9uIFNjaGVtYXMKCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiB1cGRhdGVkIHRoZSB0ZXN0IGxpc3QKCk1vbiBBcHIgMjIgMTc6NTk6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFRPRE86IHVwZGF0ZWQgYSBiaXQKCSogcGFyc2VyLmM6IG1hZGUgYSBjb21tZW50IG1vcmUgc3BlY2lmaWMKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsgb24gdGhlCgkgIFNjaGVtYXMgY29uZm9ybWFuY2UuCgkqIHRlc3Qvc2NoZW1hcyByZXN1bHQvc2NoZW1hczogdXBkYXRlZCB0aGUgdGVzdCBsaXN0CgpTYXQgQXByIDIwIDE5OjM2OjM5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaDoKCSAgaW1wbGVtZW50aW5nIHhzOmFsbCB3aXRoIG1pbk9jY3VycyA9IDAKCSogdGVzL3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBtb3JlIHRlc3RzIGNvdmVyaW5nCgkgIHhzOmFsbAoKU2F0IEFwciAyMCAwOToyMjo1MCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGZpcnN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBhbGwgcGFydGljbGUsIHRoaXMKCSAgbWF5IG5lZWQgdG8gYmUgcmV2aXNpdGVkIGZvciBjYXNlIHdoZXJlIG5vdCBhbGwgdHJhbnNpdGlvbnMKCSAgbXVzdCBiZSBjcm9zc2VkLgoKRnJpIEFwciAxOSAxODoyNjowNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhbm90aGVyIGVudGl0eSBwcm9jZXNzaW5nIHVwZGF0ZSBmcm9tIE1hcmt1cyBIZW5rZQoKRnJpIEFwciAxOSAxNzoxNDoyNCBDRVNUIDIwMDIgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB0cmlvbmFuLmM6IGZpeGVkIGNyYXNoIG9uIE9TRi8xCgpGcmkgQXByIDE5IDA5OjAwOjU2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IG1vcmUgU2NoZW1hcyB3b3JrCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIG1vcmUgdGVzdHMgY29taW5nCgkgIGZyb20gdGhlIHNwZWMuCgpUaHUgQXByIDE4IDIzOjAwOjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IHBhdGNoIGZyb20gQWxla3NleSBTYW5pbiByZWZsZWN0aW5nIGEgY2hhbmdlIGluIHRoZQoJICBFeGNDMTROIHNwZWNpZmljYXRpb24KClRodSBBcHIgMTggMTg6Mzg6MzAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBNYXJrdXMgSGVua2UsIGZpeCBmb3IgcmVjdXJzaXZlIGVudGl0aWVzLgoKVGh1IEFwciAxOCAxNzo0OToyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4IGEgcHJvYmxlbSB3aXRoIHN0cmluZygpIG9uIGEgZG9jdW1lbnQgbm9kZS4KClRodSBBcHIgMTggMTY6NDA6NDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbHNjaGVtYXMuYzogbW9yZSBTY2hlbWFzIHdvcmsKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgbW9yZSB0ZXN0cyBjb21pbmcKCSAgZnJvbSB0aGUgc3BlYy4KClRodSBBcHIgMTggMTM6NTI6NTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGVkICYgc2VyaWFsaXphdGlvbiBidWcgaW50cm9kdWNlZCBpbiAyLjQuMjAKCSogcmVzdWx0L0hUTUwvKjogdGhpcyBjaGFuZ2VzIGEgZmV3IHRoaW5ncyBpbiB0aGUgcmVzdWx0cwoKV2VkIEFwciAxNyAyMDozNDozNyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGVsaW1pbmF0ZWQgJ2RlY2xhcmF0aW9uIGRpZmZlcmVudCB0aGFuCgkgcHJvdG90eXBlJyB3YXJuaW5nCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogInJlc29sdmVkIiBjb25mbGljdHMgd2l0aCBlcnJuby5oCgpXZWQgQXByIDE3IDE4OjI2OjA3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaDogbW9yZSB3b3JrCgkgIG9uIHRoZSBhdXRvbWF0YSBpbnRlcmZhY2VzIGFuZCBkZWJ1ZyBvZiBjb3VudGVkIGNob2ljZXMKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgYSBudW1iZXIgb2YgdGVzdHMKCldlZCBBcHIgMTcgMTE6MDM6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6CgkgIGEgYml0IG9mIHdvcmsgb24gU2NoZW1hcwoJKiB0ZXN0U2NoZW1hcy5jOiB0cnkgdG8gbWFrZSBpdCBtb3JlIHVzZWZ1bAoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qIE1ha2VmaWxlLmFtOiBjaGFuZ2VkIHRoZQoJICBTY2hlbWFzIHJlZ3Jlc3Npb24gdGVzdCBwcm9jZWR1cmUsIHN0YXJ0ZWQgYWRkaW5nIGEgZmV3IHNhbXBsZXMKClR1ZSBBcHIgMTYgMTk6NTI6MDEgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpemxhdGtvdmljQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaDogUGF0Y2ggZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogUGF0Y2ggZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkqIHRocmVhZHMuYzogUGF0Y2ggZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkqIHdpbjMyL2JjYjU6IE5ldyBkaXJlY3RvcnkgZm9yIHRoZSBCb3JsYW5kIEMrKyBidWlsZGVyCgkgcHJvamVjdCBmaWxlcyAgICAgICAKClR1ZSBBcHIgMTYgMTk6NDY6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpemxhdGtvdmljQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogVXBkYXRlIGZvciBYTUwgU2NoZW1hIHN1cHBvcnQKCSogd2luMzIvY29uZmlndXJlLmpzOiBVcGRhdGUgZm9yIFhNTCBTY2hlbWEgc3VwcG9ydAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IFVwZGF0ZSBmb3IgWE1MIFNjaGVtYSBzdXBwb3J0CgpUdWUgQXByIDE2IDE3OjQ2OjQzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBUT0RPX1NDSEVNQVMgY29uZmlndXJlLmluIGdlblVuaWNvZGUucHkgdGVzdEF1dG9tYXRhLmMKCSB0ZXN0UmVnZXhwLmMgdGVzdFNjaGVtYXMuYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMKCSB4bWx1bmljb2RlLmMgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaAoJIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaAoJIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oIGluY2x1ZGUvbGlieG1sL3htbHVuaWNvZGUuaAoJIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiA6IG1lcmdlZCB0aGUgY3VycmVudCBzdGF0ZSBvZgoJIFhNTCBTY2hlbWFzIGltcGxlbWVudGF0aW9uLCBpdCBpcyBub3QgY29uZmlndXJlZCBpbiBieSBkZWZhdWx0LAoJIGEgc3BlY2lmaWMgLS1zY2hlbWFzIGNvbmZpZ3VyZSBvcHRpb24gaGFzIGJlZW4gYWRkZWQuCgkqIHRlc3QvYXV0b21hdGEgdGVzdC9yZWdleHAgdGVzdC9zY2hlbWFzIE1ha2VmaWxlLmFtCgkgIHJlc3VsdC9hdXRvbWF0YSByZXN1bHQvcmVnZXhwIHJlc3VsdC9zY2hlbWFzOgoJICBtZXJnZWQgYXV0b21hdGEvcmVnZXhwL3NjaGVtYXMgcmVncmVzc2lvbiB0ZXN0cwoKVHVlIEFwciAxNiAwOTo0ODo0NCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogR2FyeSBmb3VuZCBhIGNvbXBpbGUgdGltZSBwcm9ibGVtLCBmaXhlcyAjNzg4MjMKCk1vbiBBcHIgMTUgMTk6MTE6MzYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSBvZiAyLjQuMjAKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCk1vbiBBcHIgMTUgMTQ6NTU6NTMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogcGF0Y2ggZnJvbSBDcmlzdGlhbiBHYWZ0b24gdG8gYnVpbGQgb24KCSAgUmVkIEhhdCA2LjIsIHNob3VsZCBhbHNvIGZpeCAjNzU3NzkKCk1vbiBBcHIgMTUgMTI6MTQ6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpcnN0IHBhcnQgb2YgZml4aW5nICM3ODcyOQoKU3VuIEFwciAxNCAyMzo0NDo1OCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB1cmkuYzogZml4aW5nIGJ1ZyAjNzg2NjIgaS5lLiBhZGQgcHJvcGVyCgkgIGVzY2FwaW5nIG9mIFVSSSB3aGVuIHNhdmluZyBIVE1MIGZpbGVzLgoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGltcGFjdGVkIHNvbWUgdGVzdHMKClN1biBBcHIgMTQgMTQ6NTU6MTUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogdHJ5aW5nIHRvIGZpeCAjNzc0NDEKCkZyaSBBcHIgMTIgMjM6MDI6MTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IEhhbGxza2kgY29tcGxhaW5lZCBpdCBjb3VsZCBub3QgYmUKCSAgaW5jbHVkZWQgYnkgaXRzZWxmLgoKVGh1IEFwciAxMSAxMDoyMzozNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIGFuIElFRUUgZmxhZyBwYXRjaCBmb3IgT1NGLzEgIzc3ODI1CgpXZWQgQXByIDEwIDIzOjMxOjM0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogcGF0Y2ggZnJvbSBOaWxvIGZvciB0aGUgYzE0biBvcHRpb24KCSogd2luMzIvTWFrZWZpbGUubXN2YzogZml4ZWQgbGlieG1sMi5kZWYgZ2VuZXJhdGlvbiB3aXRoIHRocmVhZHMKCldlZCBBcHIgMTAgMjE6MjQ6MTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IFNpbHZhbiBNaW5naGV0dGkKCSAgcG9pbnRlZCBlcnJvbmVvdXMgdXNlIG9mIExJQlhNTF9USFJFQURTX0VOQUJMRUQgaW5zdGVhZCBvZgoJICAgTElCWE1MX1RIUkVBRF9FTkFCTEVECgpXZWQgQXByIDEwIDE4OjEyOjUyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBhbm90aGVyIHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3Igc3Vic3RyaW5nIGNvbmZvcm1hbmNlCgkqIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL3N0cmluZ3MKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIHJlc3VsdC9YUGF0aC9leHByL3N0cmluZ3M6IHVwZGF0ZSBvZiB0aGUKCSAgdGVzdCBzdWl0ZSB0byBjaGVjayB0aG9zZS4KCldlZCBBcHIgMTAgMTM6Mjk6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3IgLnggZmxvYXQgcGFyc2luZy4KClR1ZSBBcHIgIDkgMTg6MDk6MzEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBwYXRjaCBmcm9tIE1hcmt1cyBIZW5rZSB3aGVuIGFuIGVuY29kaW5nIGFpbid0IHJlY29nbml6ZWQKClR1ZSBBcHIgIDkgMTU6NDc6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5tNDogZ290IGEgcmVwb3J0IHRoYXQgI2luY2x1ZGUgPHN0cmluZy5oPiB3YXMgbmVlZGVkCgpUdWUgQXByICA5IDExOjUxOjI1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgYSBmaXggZnJvbSBBbnRob255IEpvbmVzIGZvciAtbyAvLS1vdXRwdXQKClR1ZSBBcHIgIDIgMjA6Mjc6MTEgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9leGFtcGxlLmh0bWw6IGZpeGluZyB0eXBvCgpNb24gQXByICAxIDEwOjAyOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgbm9kZXNldCB0byBib29sZWFuIGNvbXBhcmlzb24gY29kZQoJICBwb2ludGVkIG91dCBieSBNZWx2eW4gU29wYWN1YS4KCkZyaSBNYXIgMjkgMjM6NDE6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBGculk6XJpYyBDcm96YXQgZ2F2ZSBhIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZQoJICBvZiBJbmNsdWRlIHBhdGhzIGJyZWFraW5nIHRoZSBsaWJ4bWwubTQKCkZyaSBNYXIgMjkgMTg6MjU6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogRml4IGJ1ZyAjNzY5MjcgZm9yZ290IHRvIHNhdmUgc29tZSBjb250ZXh0CgkgIHdoZW4gZXZhbHVhdGluZyBiaW5hcnkgZXhwcmVzc2lvbnMKClRodSBNYXIgMjggMTk6MjI6NDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBjb25maWd1cmUgZm9yIE1QRS9pWCBmcm9tIE1hcmt1cyBIZW5rZQoJKiB4bWxtZW1vcnkuYzogZml4ZWQgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMKCSogeHBhdGguYzogYW5vdGhlciBzZXQgb2YgcGF0Y2hlcyBmcm9tIFJpY2hhcmQgSmlua3MgdGhpcwoJICBmaXhlcyAibWFrZSBYUGF0aHRlc3RzIiBvbiBsaW51eAoKV2VkIE1hciAyNyAxNzowOTo0MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmlvbmFuLmMgdHJpb25hbi5oIHhwYXRoLmM6IG1vcmUgcGF0Y2hlcyBmcm9tIFJpY2hhcmQgSmlua3MKCSogdGVzdC9YUGF0aC9leHByL2NvbXBhcmUgdGVzdC9YUGF0aC9leHByL2VxdWFsaXR5CgkgIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL2Z1bmN0aW9ucwoJICB0ZXN0L1hQYXRoL2V4cHIvc3RyaW5ncyByZXN1bHQvWFBhdGgvZXhwci9jb21wYXJlCgkgIHJlc3VsdC9YUGF0aC9leHByL2VxdWFsaXR5IHJlc3VsdC9YUGF0aC9leHByL2Zsb2F0cwoJICByZXN1bHQvWFBhdGgvZXhwci9mdW5jdGlvbnMgcmVzdWx0L1hQYXRoL2V4cHIvc3RyaW5nczogVXBkYXRlZAoJICB0ZXN0cyB0aG91Z2ggdGhleSBzaG93IGEgZGl2ZXJnZW5jZSBvbiBMaW51eAoKV2VkIE1hciAyNyAxMDowNjo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIHRyaW9uYW4uYzogcHJldmlvdXMgY29tbWl0IGFsc28gaW5jbHVkZWQgcGF0Y2hlcwoJICBmcm9tIFJpY2hhcmQgSmlua3Mgb24gc29tZSBJRUVFIHN1cHBvcnQgY29ybmVyIGNhc2UKCldlZCBNYXIgMjcgMTA6MDM6MTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQVVUSE9SUyBIQUNLSU5HOiBBZGRlZCBJZ29yIFpsYXRrb3ZpYyBhcyBvZmZpY2lhbCBtYWludGFpbmVyCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06IEFsYmVydCBDaGluIHBvaW50ZWQKCSAgdGhhdCAkKGRhdGFkaXIpIHNob3VsZCBiZSB1c2VkIGZvciBkb2NzCgpUdWUgTWFyIDI2IDEzOjQzOjE2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IFRob21hcyBTdGVpbmJvcm4gcG9pbnRlZCBvdXQgIzc2NDA0IHRoYXQgbGlieG1sMgoJICBjb3VsZCBsZWFrIGZpbGVkZXNjcmlwdG9ycwoKVHVlIE1hciAyNiAwODo1NTo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbmFub2h0dHAuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsbGFuIENsYXJrIGZvcgoJICBVbml4V2FyZS9PcGVuU2VydmVyCgpNb24gTWFyIDI1IDE3OjQ1OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4xOQoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcwoKTW9uIE1hciAyNSAxNzozNDowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vaHR0cC5jOiBmaXhpbmcgIzc2MDQzLCBnb3QgZmVkIHVwIHdpdGggbm9uLXBvcnRhYmlsaXR5CgkgIG9mIHRoYXQgcGllY2Ugb2YgY29kZS4KCk1vbiBNYXIgMjUgMTM6MDg6MjEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogTmV2ZXIgY29tbWl0IHdpdGhvdXQgcnVubmluZyAibWFrZSB0ZXN0cyIgOi0oCgkgIGZpeCBhIGNvdXBsZSBvZiBzdHVwaWRpdGllcyBpbiB0aGUgcHJldmlvdXMgY29tbWl0CgkqIHJlc3VsdC8qOiBhIGZldyBjaGFuZ2VzIGluIHNvbWUgYXR0cmlidXRlIG9yZGVyIHJlc3VsdCBvZiBwcmV2aW91cwoJICBjb21taXQuCgpNb24gTWFyIDI1IDExOjQ2OjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgU0FYLmM6IGZpeGVkIGJ1ZyAjNzYxNjgsIGF0dHJpYnV0ZSByZWRlY2xhcmVkIGluCgkgIHRoZSBpbnRlcm5hbCBzdWJzZXQgc2hvdWxkIG5vdCByYWlzZSBkdXBsaWNhdGUgSUQgZXJyb3JzLAoJICBhbHNvIHRoZXJlIHdhcyBhIHNtYWxsIGJ1ZyBpbiBjb25qdW5jdGlvbiB0byBuYW1lc3BhY2UKCSAgZGVjbGFyYXRpb25zIGRlZmF1bHRlZCBhbmQgeG1sOnh4eCBhdHRyaWJ1dGVzIERURCBkZWZpbml0aW9ucy4KCkZyaSBNYXIgMjIgMTU6MTM6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogUmljaGFyZCBKaW5rcyBhbHNvIHJhaXNlZCBzb21lIHJvdW5kaW5nIHByb2JsZW1zCgkgIHRoaXMgdHJpZXMgdG8gZml4IHRoZW0KCkZyaSBNYXIgMjIgMTM6MjI6MDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogUmljaGFyZCBKaW5rcyBzcG90dGVkIGFuIGluY29oZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24KCSAgYmVoYXZpb3VyIGluIHhtbFhQYXRoQ2FzdFRvU3RyaW5nKCkKClRodSBNYXIgMjEgMTQ6MjU6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4ZWQgYSBidWcgaW4gdGhlIElTTy1MYXRpbiAxIHRvIFVURjggZW5jb2RlcgoJICByYWlzZWQgYnkgTW9ydXMgV2FsdGVyCgpUaHUgTWFyIDIxIDE0OjA3OjEzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IGFwcGxpZWQgMiBmaXh1cHMKCSAgZnJvbSBJZ29yCgpUaHUgTWFyIDIxIDEzOjMwOjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyAjNzU2MTksIHJlbGF0ZWQgdG8gYSBwcm9ibGVtIHdoZW4gdHJ5aW5nCgkgIHRvIGV2YWx1YXRlIGNvbmRpdGlvbiB3aGVuIHRoZSBjdXJyZW50IG5vZGUgc2V0IHJlc3VsdGluZwoJICBmcm9tIHRoYXQgc3ViLXN0ZXAgZXZhbHVhdGlvbiBpcyBlbXB0eS4gQWxzbyBmaXhlcyAyIHBvdGVudGlhbAoJICBwcm9ibGVtIHdpdGggcHJldmlvdXMtc2libGluZyBhbmQgbmV4dC1zaWJsaW5ncyBheGlzLgoKVGh1IE1hciAyMSAwOTowMzo1OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IHBhdGNoIGZyb20gTWFyayBWYWtvYyB0byBidWlsZCBDMTROIGlmIERvY0Jvb2sgYW5kCgkgIEhUTUwgc3VwcG9ydCBpcyBub3QgY29uZmlndXJlZCBpbi4KCldlZCBNYXIgMjAgMjI6NDI6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGVycm9yLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHhtbElPLmMKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBkb2hoIEkgcmVhbGx5IGRpZG4ndCBpbnRlbmRlZCB0byBjb21taXQKCSAgdGhpcyB0ZXN0IHZlcnNpb24gOi0oCgpXZWQgTWFyIDIwIDIwOjIwOjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RTQVguYzogSSB3YW50ZWQgdG8gc2VlIHRoZSByZWFsIHNwZWVkIGF0IHRoZSBTQVggaW50ZXJmYWNlCgkgIGFmdGVyIGEgbGl0dGxlIHRvbyBtYW55IFhpbWlhbmVyIHN0YXJ0ZWQgY29tcGxhaW5pbmcgYWJvdXQgdGhlCgkgIHBhcnNlciBzcGVlZC4KCSAgYWRkZWQgYSAtLXF1aWV0IG9wdGlvbjoKCSAgcGFwaGlvOn4vWE1MIC0+IGxzIC1sIGRiMTAwMDAwLnhtbCAKCSAgLXJ3LXJ3LXItLSAgICAxIHZlaWxsYXJkIHd3dyAgICAgIDIwMTgyMDQwIE1hciAyMCAxMDozMCBkYjEwMDAwMC54bWwKCSAgcGFwaGlvOn4vWE1MIC0+IHRpbWUgLi90ZXN0U0FYIC0tcXVpZXQgZGIxMDAwMDAueG1sIAoJICAzMjAwMDA2IGNhbGxiYWNrcyBnZW5lcmF0ZWQKCSAgcmVhbAkwbTEuMjcwcwoJICBXaGljaCBtZWFucyAxNk1CeXRlcy9zIGFuZCAzTWNhbGxiYWNrL3MKClR1ZSBNYXIgMTkgMTk6MzM6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogdmFsZ3JpbmQgc3BvdHRlZCBhbm90aGVyIGVycm9yIHRoYXQgdGltZSB3aGVuIHJ1bm5pbmcKCSAgb24gbGlieHNsdCByZWdyZXNzaW9uIHRlc3RzCgpUdWUgTWFyIDE5IDE1OjI0OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhZGRpbmcgIm1ha2UgdmFsZ3JpbmQiIHJ1bm5pbmcgdGhlIGZ1bGwgcmVncmVzc2lvbgoJICB0ZXN0cyAoZXhjZXB0IHB5dGhvbiBvbmVzKSB1bmRlciBWYWxncmluZCAodXNpbmcgdmFsZ3JpbmQgLXEKCSAgd2hpY2ggd2FzIGtpbmRseSBhZGRlZCBieSB0aGUgYXV0aG9yKS4KCSogdmFsaWQuYzogc3R1cGlkIGJ1ZyBwaW5wb2ludGVkIGJ5IFZhbGdyaW5kLCB0aGUgcmVncmVzc2lvbiB0ZXN0cwoJICBwYXNzZXMgY2xlYW5seSBub3cgZXhjZXB0IGFuIG9iY3VyZSBmbG9hdGluZyBwb2ludCBpbml0aWFsaXphdGlvbgoJICByYWlzZWQgaW4gbG9nMTAoKSBpbiBvbmUgWFBhdGggcmVncmVzc2lvbiB0ZXN0ID8/PwoJKiB0cmVlLmM6IGVkaXRlZCBzb21lIGNvbW1lbnRzIHRvIGNsb3NlICM3NTI0NAoKVHVlIE1hciAxOSAxMjoxNToyMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwcmV0dHkgaW5zYW5lIHRoaW5nLCB0aGUgeG1sWFBhdGhGb3JtYXROdW1iZXIoKQoJICB3YXMgbm90IHNlcmlhbGl6aW5nIDEgYXMgIjEiIGlmIExDX0FMTD1zdl9TRSA6LSggYW5kIGluIHRoZQoJICBjb250ZXh0IG9mIFNjcm9sbEtlZXBlciwgbWFkZSBzdXJlIHRoYXQgaWYgdGhlIG51bWJlciBpcwoJICBhbiBpbnRlZ2VyLCB0aGUgc2VyaWFsaXphdGlvbiBmb2xsb3dzIHRoZSBkZXNjcmlwdGlvbiBhdAoJICBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCNzZWN0aW9uLVN0cmluZy1GdW5jdGlvbnMKCk1vbiBNYXIgMTggMTk6MTg6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE4CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSB3ZWIgc2l0ZQoJKiAqLmMgbGlieG1sLmg6IGltcGxlbWVudCB0aGUgbmV3IElOX0xJQlhNTCBzY2hlbWUgZGlzY3Vzc2VkIHdpdGgKCSAgdGhlIFdpbmRvd3MgYW5kIEN5Z3dpbiBtYWludGFpbmVycy4KCSogcGFyc2VyLmM6IGh1bW0sIGNoYW5nZWQgdGhlIHdheSB0aGUgU0FYIHBhcnNlciB3b3JrIHdoZW4KCSAgeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdCgxKSBpcyBzZXQsIGl0IHdpbGwgdGhlbiAKCSAgZG8gdGhlIGVudGl0eSByZWdpc3RyYXRpb24gYW5kIGxvYWRpbmcgYnkgaXRzZWxmIGluIGNhc2UgdGhlCgkgIHVzZXIgcHJvdmlkZWQgU0FYIGdldEVudGl0eSgpIHJldHVybnMgTlVMTC4KCSogdGVzdFNBWC5jOiBhZGRlZCAtLW5vZW50IHRvIHRlc3QgdGhlIGJlaGF2aW91ci4KCk1vbiBNYXIgMTggMTI6NDQ6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IFdpbGZyaWVkIFRlaWtlbiBwcm92aWRlZCBhIGhhY2tpc2ggYnV0IHdvcmtpbmcKCSAgd2F5IHRvIGdldCBjb250ZXh0IHJlcG9ydGVkIGJhY2sgb24gZW50aXRpZXMgd2hlbiBwYXJzaW5nCgkgIHdpdGggU0FYIGFuZCB3aXRob3V0IGJyZWFraW5nIHRoZSBET00gYnVpbGQuCgpTdW4gTWFyIDE3IDExOjMxOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogYXBwbGllZCBhIG5ldyBwYXRjaCBmcm9tIEFsZWtzZXkgU2FuaW4KCSogZG9jL3NpdGUueHNsIGRvYy94bWwuaHRtbCBkb2MvKi5odG1sOiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgkgIHRvIHJlZmVyZW5jZSBBbGVrc2V5IGltcGxlbWVudGF0aW9uIG9mIFhNTCBkaWdpdGFsIFNpZ25hdHVyZXMKClNhdCBNYXIgMTYgMjM6MDE6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogc21hbGwgZml4IHRvIGF2b2lkIHBvdGVudGlhbCBwcm9ibGVtIGR1ZSB0bwoJICBvcmRlcmluZyBvZiBmcmVlaW5nIGRhdGEKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBwZW9wbGUgd2VyZSBjb21wbGFpbmluZyBhYm91dCAKCSAgdGhlIGdlbmVyYXRlZCBmaWxlIGluIHB5dGhvbiBkaXIgbm90IGJlaW5nIGJ1aWx0CgpGcmkgTWFyIDE1IDIzOjIxOjQwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0KCSAgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3R5cGVzLmM6IENsZWFudXAKCSAgb2YgdGhlIHB5dGhvbiBNYWtlZmlsZXMgYmFzZWQgb24gSmFjb2IgYW5kIEphbWVzIGZlZWRiYWNrLAoJICBmaXhlZCB0aGUgc3BlYyBmaWxlIGFjY29yZGluZ2x5LCBmaXhlZCB0aGUgbnVtYmVyIG9mIHdhcm5pbmcKCSAgdGhhdCBwYXNzaW5nIG15IHBlZGFudGljIENGTEFHUyB3YXMgZ2VuZXJhdGluZy4gQ29uY2x1c2lvbgoJICBpcyB0aGF0IFB5dGhvbiBpbmNsdWRlcyBhcmUgcmVhbCBjcmFwLgoKRnJpIE1hciAxNSAxOTo0MToyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUsaW46IGl0IHdhcyByZXBvcnRlZCBxdWl0ZSBhIGZldyB0aW1lcyB0aGF0CgkgIHhtbDItY29uZmlnIC0tY2ZsYWdzIHNob3VsZCBub3Qgb3V0cHV0CgkgIC1JJGluY2x1ZGVwcmVmaXgvbGlieG1sMi9saWJ4bWwgYmVjYXVzZSBsaWJ4bWwyIGhlYWRlciBuYW1lcwoJICBjbGFzaGVzIHdpdGggZXhpc3RpbmcgbmFtZXMgbGlrZSBsaXN0LmggZnJvbSBDKysgc3RsLgoJICBJbmNsdWRlcyBzaG91bGQgYmUgI2luY2x1ZGU8bGlieG1sL3h4eC5oPiBzbyAuLi4KCkZyaSBNYXIgMTUgMTA6NDE6NTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBhbm90aGVyIHBhdGNoIGZyb20gQWxla3NleSBTYW5pbgoKRnJpIE1hciAxNSAwODo1NTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluIGZpeGluZyBhIHByb2JsZW0gaW4gdGhlCgkgIGNhbm9uaWNhbGl6YXRpb24gYWxnb3JpdGhtCgkqIGRvYy94bWwuaHRtbCBkb2MvaW5kZXguaHRtbDogYWRkZWQgdGhlIEMxNE4gcmVmZXJlbmNlcyBvbiB0aGUgCgkgIGluZGV4IHBhZ2UuCgoyMDAyLTAzLTEzICBqYWNvYiBiZXJrbWFuICA8amFjb2JAeGltaWFuLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogcmVtb3ZlIExEQUREIGFuZCBDRkxBR1MgYXMgdGhpcyBpcyBicm9rZW4KCXVzYWdlLCByZWR1bmRhbnQsIGFuZCBnY2Mgc3BlY2lmaWMKCldlZCBNYXIgMTMgMTE6MDA6NTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogc3BlZWR1cCBzb21lIG5vZGUgc2VsZWN0aW9uIG9wZXJhdGlvbnMsIHRoaXMgY2FuCgkgIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gRG9jQm9vayBOb3JtJ3Mgc3R5bGVzaGVldHMKCSogbmFub2h0dHAuYzogc29tZW9uZSByZXBvcnRlZCB0aGF0IFNPQ0tMRU5fVCBtYXkgbm90IGJlIGRlZmluZWQKCSAgbWFrZSBzdXJlIGl0J3MgYWx3YXlzIHRoZSBjYXNlCgkqIGRlYnVnWE1MLmM6IGRpc3Rpbmd1aXNoIENEQVRBIGFuZCBjb21tZW50cyBpbiBscyBvcGVyYXRpb25zCgpUdWUgTWFyIDEyIDE5OjQ1OjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sLyouaDogSGVpa28gVy4gUnVwcCBmaXhlZCBhIGxvdCBvZiBjb21tZW50cwoJICB0byBnZW5lcmF0ZSBiZXR0ZXIgQVBJIGRlc2NyaXB0aW9ucyBldGMuLi4KCk1vbiBNYXIgMTEgMTA6MTA6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBGaXhpbmcgIzc0MTg2LCBtYWRlIHN1cmUgYWxsIGJvb2xlYW4gZXhwcmVzc2lvbnMKCSAgZ2V0IGZ1bGx5IHBhcmVudGhlc2l6ZWQsIHJhbiBpbmRlbnQgb24gdGhlIG91dHB1dAoJKiBjb25maWd1cmUuaW4gSFRNTHRyZWUuYyBTQVguYyBjMTRuLmMgZGVidWdYTUwuYyB0cmVlLmMgeHBvaW50ZXIuYwoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFsc28gIzc0MTg2IHJlbGF0ZWQsIHJlbW92ZWQgdGhlCgkgIC0td2l0aC1idWZmZXJzIG9wdGlvbiwgYW5kIGFsbCB0aGUgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsCgkgIHNlY3Rpb25zIHRoYXQgd2VyZSByZXN1bHRpbmcgZnJvbSBpdC4KClN1biBNYXIgMTAgMTc6NDc6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogYXBwbGllZCBwYXRjaCBmcm9tIERvZGppIFNla2V0ZWxpIGZpeGluZyBhbgoJICB1bmluaXRhaWxpemVkIHZhcmlhYmxlIGluIHhtbFZhbGlkR2V0VmFsaWRFbGVtZW50cygpCgpTYXQgTWFyICA5IDE1OjEwOjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogZml4ZWQgYSBmZXcgY29tbWVudHMKCSogZG9jLyouaHRtbCBkb2MvKi8qLmh0bWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzIGFuZCBhZGRlZAoJICB0aGUgQzE0TiBBUEkKCSogZG9jL2FwaS54c2wgZG9jL2dub21lLXhtbC5zZ21sOiBmaXh1cHMgYW5kIGFkZGVkIElEcwoKU2F0IE1hciAgOSAxMToxNjoxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogZml4IHRvIGFkYXB0IHZhcmFpYXRpb25zIGluIHRoZQoJICBiaW5kaW5ncwoJKiBjb25maWd1cmUuaW4gcHl0aG9uL3NldHVwLnB5IHB5dGhvbi9zZXR1cC5weS5pbjogZml4ZWQgdG8KCSAgaGF2ZSB0aGUgdmVyc2lvbiBvZiB0aGUgcHl0aG9uIHNjcmlwdHMgYXV0b21hdGljYWxseSB1cGRhdGVkCgpGcmkgTWFyICA4IDE2OjQ1OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgbmV3bHkgaW50cm9kdWNlZCBhbmQgcG9pbnRlZCBieSBVd2UgRmVjaG5lcgoJICBpbiB4bWxDb3B5UHJvcCgpCgpGcmkgTWFyICA4IDE1OjQ5OjEwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4xNyByZWxlYXNlCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIHhwYXRoLmM6IGZpeGVkIGEgY29tbWVudAoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIGEgcG9zc2libGUgcmVlbnRyYW5jeSBwcm9ibGVtCgpUaHUgTWFyICA3IDIzOjE5OjI4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2F0dHJpYnMucHk6CgkgIGZpeGVkIHhtbEhhc05zUHJvcCgpIGJ1Z3MgZm9yIGRlZmF1bHRlZCBmcm9tIERURCBhdHRyaWJzLAoJICBhZGRlZCBhIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiB4bWxIYXNOc1Byb3AoKSBhbmQgeG1sSGFzUHJvcCgpIHNoYWxsCgkgIG5vdCByYWlzZSBleGNlcHRpb25zIHdoZW4gZmFpbGluZyB0byBmaW5kIHRoZSBhdHRyaWJ1dGUuCgpUaHUgTWFyICA3IDE2OjExOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWxsaW50LmM6IG93ZW4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdpdGggdGhlCgkgIGZ0bWUgZml4LCBnZXR0aW1lb2ZkYXkoKSB3YXMgbm90IGRldGVjdGVkIGJ5IGNvbmZpZ3VyZSBhbmQKCSAgdGhlIGZ0aW1lIGhlYWRlciB3YXNuJ3QgaW5jbHVkZWQsIGRvaGhoCgpUaHUgTWFyICA3IDEyOjE5OjM2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWxsaW50LmM6IHRyeWluZyB0byBmaXggIzcxNDU3IGZvciB0aW1pbmcKCSAgcHJlY2lzaW9uIHdoZW4gZ2V0dGltZW9mZGF5KCkgaXMgbm90IGF2YWlsYmxlIGJ1dCBmdGltZSgpIGlzCgpUaHUgTWFyICA3IDExOjI0OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIGRvYy9NYWtlZmlsZS5hbTogRml4ZWQgIzczNDA4IG1pc3NpbmcgaW1hZ2VzCgkgIGFyZSBub3cgY29waWVkIG9uIGluc3RhbGwgYW5kIHBhcnQgb2YgdGhlIC1kZXZlbCBSUE0KClRodSBNYXIgIDcgMDk6MzQ6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogdHJ5aW5nIHRvIGF2b2lkIGJ1ZyAjNzIxNTAgd2hpY2ggd2FzIGFwcGFyZW50bHkKCSAgY2F1c2VkIGJ5IGEgZ2NjIGJ1ZyAob3IgYSBwcm9jZXNzb3IgcHJvYmxlbSkgYXMgZGV0YWlsZWQKCSAgYXQgaHR0cDovL3ZlaWxsYXJkLmNvbS9nY2MuYnVnCgpUaHUgTWFyICA3IDAxOjAyOjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2N1dG5wYXN0ZS5weToKCSAgZml4ZWQgeG1sUmVjb25jaWxpYXRlTnMoKSwgYWRkZWQgYSBQeXRob24gdGVzdC9leGFtcGxlIGZvcgoJICBpbnRlci1kb2N1bWVudCBjdXQnbiBwYXN0ZQoJKiBweXRob24vbGlieG1sLnB5OiBmaXhlZCBub2RlLmRvYyBvbiBkb2N1bWVudCBub2RlcyBhbmQgYWRkZWQKCSAgeHBhdGhFdmFsKCkgb250byBub2RlIG9iamVjdHMKCldlZCBNYXIgIDYgMjI6Mzg6MDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgc29tZSBodG1sU2V0TWV0YUVuY29kaW5nKCkgcHJvYmxlbXMKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OgoJICBmaXh1cCBhbmQgaW50ZWdyYXRlZCB0ZXN0cyBmb3IgdGhlIHNlcmlhbGl6YXRpb24gc3R1ZmYKCldlZCBNYXIgIDYgMTk6NDA6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gbGlieG1sLjMgbGlieG1sLjQgbGlieG1sLnNwZWMuaW46IEZpeGVkIGJ1ZyAjNzI1NzAKCSAgbW92ZWQgdGhlIGxpYnhtbCBtYW4gcGFnZSB0byBzZWN0aW9uIDMKCldlZCBNYXIgIDYgMTg6MzQ6MDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXggYnVnICM3MjQ5MAoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogYWRkZWQgbWV0aG9kcyBzZXJpYWxpemUoKQoJICBhbmQgc2F2ZVRvKCkgdG8gYWxsIG5vZGUgZWxlbWVudHMuCgpUdWUgTWFyICA1IDIxOjI3OjAzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGNsb3NlZCAjNzM0MzAsIGRvbid0IHJlYWQgZnJvbSBhbiBpbnB1dCBzb3VyY2UKCSAgd2hpY2ggaW5kaWNhdGVkIGFuIGVuZC1vZi1maWxlIG9yIGFuIGVycm9yLgoKVHVlIE1hciAgNSAxNjozMzo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogbWFrZSBzdXJlIFNBWCBlbmREb2N1bWVudCBpcyBhbHdheXMgY2FsbGVkIGFzCgkgIHRoaXMgY291bGQgcmVzdWx0IGluIGEgUHl0aG9uIG1lbW9yeSBsZWFrIG90aGVyd2lzZSAoaXQncwoJICB1c2VkIHRvIGRlY3JlbWVudCByZWYtY291bnRpbmcpCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL3Rlc3RzL2Vycm9yLnB5IHB5dGhvbi90ZXN0cy94cGF0aC5weTogaW1wbGVtZW50ZWQKCSAgdGhlIHN1Z2dlc3Rpb25zIG1hZGUgYnkgR2FyeSBCZW5zb24gYW5kIGV4dGVuZGVkIHRoZSB0ZXN0cwoJICB0byBtYXRjaCBpdC4KClR1ZSBNYXIgIDUgMTA6MzU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogYXBwbGllZCBwYXRjaCBmaXhpbmcgIzczNDUwCgpNb24gTWFyICA0IDE3OjU5OjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyAjNjEyOTAgIm5hbWVzcGFjZSBub2RlcyBoYXZlIG5vIHBhcmVudCIKCSAgbG9uZyBzdGFuZGluZyBkaXZlcmdlbmNlIGZyb20gdGhlIFhQYXRoIFJFQy4gTm9kZVNldHMKCSAgc2ltcGx5IGhvbGQgYSBjb3B5IG9mIG5hbWVzcGFjZSBub2RlcyBhbmQgdGhvc2Ugbm9kZSAtPm5leHQKCSAgcG9pbnRzIHRvIHRoZSBwYXJlbnQgKHdoaWNoIG1heSBub3QgYmUgdGhlIG5vZGUgY2FycnlpbmcgdGhlCgkgIGRlZmluaXRpb24pLgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBmbGFnZ2VkIGJ1dCBkaWRuJ3QgYWRkZWQgYSBwb3NzaWJsZQoJICBzcGVlZHVwCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmM6IHJlbW92ZWQgc29tZSB3YXJuaW5ncyBmcm9tIHB1c2gKCSAgcGFyc2VyIGR1ZSB0byBuZXcgc3RhdGUgYmVpbmcgYWRkZWQuCgkqIHRyZWUuYzogbmV3IGZpeCBmcm9tIEJvcmlzIEVyZG1hbm4KCSogY29uZmlndXJlLmluIGMxNG4uYyBpbmNsdWRlL2xpYnhtbC9jMTRuLmggdGVzdEMxNE4uYzogYWRkZWQKCSAgdGhlIFhNTCBDYW5vbmFsaXphdGlvbiBzdXBwb3J0IGZyb20gQWxla3NleSBTYW5pbgoKU3VuIE1hciAgMyAxNToxMjo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gQm9yaXMgRXJkbWFubiBmaXhpbmcgc29tZSBuYW1lc3BhY2Ugb2RpdGllcwoJICB3aXRoIHhtbENvcHlOb2RlKCkKClNhdCBNYXIgIDIgMTA6MzM6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZml4IGJ1ZyAjNzI3MDYgd2hlbiBsb2FkaW5nIGEgTlVMTCBlbnRpdHkKCkZyaSBNYXIgIDEgMTc6MTQ6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IEZpeGVkICM3MjM0NiwgYWJvdXQgaGFuZGxpbmcgb2YgeG1sbnM6Zm9vPSIiLCB0aGlzIGNvdWxkCgkgIGFjdHVhbGx5IGNoYW5nZSBpbiBhIGZ1dHVyZSBYTUwgTmFtZXNwYWNlIHJldmlzaW9uLgoKRnJpIE1hciAgMSAxNzoxMjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdHlwZXMuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3hwYXRocmV0LnB5OgoJICBhZGRlZCB0aGUgcG9zc2liaWxpdHkgb2YgcmV0dXJuaW5nIG5vZGVzZXRzIGZyb20gWFBhdGggZXh0ZW5zaW9uCgkgIGZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbgoKRnJpIE1hciAgMSAxMzo1NjoxMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vKjogY29tbWl0aW5nIHNvbWUgUHl0aG9uIGJpbmRpbmdzIHdvcmsgZG9uZSB3aGlsZSB0cmF2ZWxsaW5nCgpGcmkgTWFyICAxIDEwOjExOjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogY2xvc2UgIzcyNjYzIGFuZCAjNzI2NTgsIGRvbid0IG1lbWR1bXAgdW5sZXNzIGNvbXBpbGVkCgkgIGV4cGxpY2l0ZWx5IHdpdGggbWVtb3J5IGRlYnVnZ2luZyBzd2l0Y2hlZCBvbgoKU2F0IEZlYiAyMyAxMTowODowOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzoKCSAgQWRkZWQgd3JhcHBlciBmb3IgdGhlIHhtbFVSSVB0ciB0eXBlLCBwcm92aWRlZCBhY2Nlc3NvcnMsIGZpeGVkCgkgIHRoZSBhY2Nlc3NvciBnZW5lcmF0b3IgZm9yIHN0cmluZ3MKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy90c3RVUkkucHk6IGFkZGVkIGEgc3BlY2lmaWMKCSAgcmVncmVzc2lvbiB0ZXN0LgoKRnJpIEZlYiAyMiAyMzo0NDo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vUkVBRE1FIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9zZXR1cC5weToKCSAgYWRkZWQgdGhlICd1c3VhbCcgc2V0dXAucHkgdG8gYWxsb3cgYnVpbGRpbmcgYSBsaWJ4bWwyLXB5dGhvbgoJICBtb2R1bGUgYmFzZWQgb24gdGhlIHNhbWUgY29kZS4gVGhlIGluaXRpYWxpemF0aW9uIGlzIGhvd2V2ZXIKCSAgZGlmZmVyZW50IHRoZSAyIC5zbyBmaWxlcyBmbyBsaWJ4bWwyIGFuZCBsaWJ4c2x0IGFyZSBpZGVudGljYWwgYW5kCgkgIHRoZXkgZW50cnkgcG9pbnQgaW5pdGlhbGl6ZSBib3RoIGxpYnJhcmllcy4gdGhpcyBpcyBkb25lIHRvIGF2b2lkCgkgIHNvbWUgcG9zc2libGUgbmFzdHkgcHJvYmxlbSBzaW5jZSB0aGUgUHl0aG9uIGRvbid0IG1lcmdlIHRoZSBtYXBzCgkgIG9mIGFsbCBzaGFyZWQgbW9kdWxlcy4KCldlZCBGZWIgMjAgMjM6MTY6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcHVzaC9lbmNvZGluZyBidWcgcmVwb3J0ZWQgYnkgTWljaGFlbAoJICBvbiBsaWJyc3ZnCgpXZWQgRmViIDIwIDE5OjU0OjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBmaXhlcyBhIG1pc3BsYWNlZCAjZW5kaWYKCldlZCBGZWIgMjAgMTc6NDc6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgdmFsaWQuYzogZm91bmQgYW5kIGZpeGVkIGEgY291cGxlIG9mIGFsbG9jYXRpb24gYnVncwoKV2VkIEZlYiAyMCAxNTozNjowMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sLmh0bWwgZG9jL3B5dGhvbi5odG1sIGRvYy8qOiBhZGRlZCBhIFB5dGhvbiBhbmQgYmluZGluZwoJICBwYWdlIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFB5dGhvbiBiaW5kaW5ncyBhbmQgCgkgIGdpdmluZyBwb2ludGVycyB0byB0aGUgb3RoZXIgbGFuZ3VhZ2VzIHdyYXBwZXJzLgoKV2VkIEZlYiAyMCAxMToxNjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTYKCSogZG9jLyogcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MsCgkgIHJlYnVpbHQgdGhlIEFQSSBhbmQgd2ViIHNpdGUKCSogeHBhdGguYzogZml4ZWQgIzcxOTc4IHBvcnRhYmlsaXR5IGJ1Z3MKClR1ZSBGZWIgMTkgMjI6NDk6MzYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IG9vcHMgYnJva2UgYXV0b21hdGljIGRlZmF1bHRpbmcgb2YgbmFtZXNwYWNlcyBhdHRyaWJ1dGVzLgoKVHVlIEZlYiAxOSAyMjowMTozNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBwYXJzZXIuYzogaGFkIHRvIGNoYW5nZQoJICAyIGludGVybmFsIHBhcnNpbmcgQVBJIHdoZW4gcHJvY2Vzc2luZyBkb2N1bWVudCBjb250ZW50CgkgIHRvIGNoZWNrIHRoZSBzdGFydCBhbmQgZW5kIG9mIGVsZW1lbnQgY29udGVudCBhcmUgZGVmaW5lZAoJICBpbiB0aGUgc2FtZSBlbnRpdHkKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBhdHRyaWJ1dGUgbm9ybWFsaXphdGlvbiBjYW4KCSAgZ2VuZXJhdGUgYSB2YWxpZGl0eSBlcnJvciBhZGRlZCB4bWxWYWxpZEN0eHROb3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSgpCgkgIHdpdGggdGhlIGNvbnRleHQgdG8gcmVwb3J0IGl0LgoJKiBTQVguYzogZml4ZWQgdGhlIGxhc3Qga25vd24gYnVncywgY3JhenkgdmFsaWRhdGlvbiBjb25zdHJhaW50cwoJICB3aGVuIGEgZG9jdW1lbnQgaXMgc3RhbmRhbG9uZSBzZWVtcyBjb3JyZWN0bHkgaGFuZGxlZC4gVGhlcmUKCSAgaXMgYSBjb3VwbGUgb2Ygb3BlbiBpc3N1ZXMgbGVmdCB3aGljaCBuZWVkIGNvbnNpZGVyYXRpb24gZXNwZWNpYWxseQoJICBQRTkzIG9uIGV4dGVybmFsIHVucGFyc2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIHN0YXR1cy4gCgkgIFJhbiAxODE5IHRlc3RzOiAxODE3IHN1Y2VlZGVkLCAyIGZhaWxlZCBhbmQgMCBnZW5lcmF0ZWQgYW4gZXJyb3IgaW4gOC4yNiBzLgoJICBUaGUgMiB0ZXN0cyBsZWZ0IGZhaWxpbmcgYXJlIGFjdHVhbGx5IGluIGVycm9yLiBDbGVhbnVwIGRvbmUuCgpUdWUgRmViIDE5IDE1OjE3OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGltcGxlbWVudGVkIEU1OSBzcGFjZXMgaW4gQ0RBVEEgZG9lcyBub3QgbWF0Y2ggdGhlCgkgIG5vbnRlcm1pbmFsIFMKClR1ZSBGZWIgMTkgMTQ6NDQ6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmMgdmFsaWQuYzogbW9yZSB2YWxpZGF0aW9uIHRlc3QgZml4dXBzCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBhZGRlZCBkdXJhdGlvbiBpbmZvIGZvciB0aGUgdGVzdHMKCk1vbiBGZWIgMTggMjM6MjU6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgdmFsaWQuYzogYSBjb3VwbGUgb2YgZXJyb3JzIHdlcmUgcmVwb3J0ZWQgYnV0IG5vdAoJICBzYXZlZCBiYWNrIGFzIHN1Y2ggaW4gdGhlIHBhcnNpbmcgY29udGV4dC4gRG93biB0byAxJSBmYWlsdXJlIHJhdGUKCSAgUmFuIDE4MTkgdGVzdHM6IDE4MDEgc3VjZWVkZWQsIDE4IGZhaWxlZCBhbmQgMCBnZW5lcmF0ZWQgYW4gZXJyb3IKCk1vbiBGZWIgMTggMjA6MTY6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSW50ZXJuYWxkLmM6IGlzRXh0ZW5kZXIgd2FzIG1pc3NpbmcgYSBjaGFyIAoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogJSBhcmUgYWNjZXB0YWJsZSBpbiB0aGUKCSAgaW50ZXJuYWwgc3Vic2V0IGlmIHdpdGhpbiBhIFBVQkxJQyBJRAoKTW9uIEZlYiAxOCAxOToyNzozMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jOiBtb3JlIHdvcmsgb24gdGhlIGNvbmZvcm1hbmNlCgkgIHN1aXRlLiBUb29rIHRoZSBzdGVwIHRvIGZpbmFsbHkgYmxvY2sgZG9jdW1lbnRzIHdpdGggZW5jb2RpbmcKCSAgZXJyb3JzLiBJdCdzIGEgZmF0YWwgZXJyb3IgcGVyIHRoZSBzcGVjLCBwZW9wbGUgc2hvdWxkIGhhdmUgZml4ZWQKCSAgdGhlaXIgZG9jdW1lbnRzIGJ5IG5vdy4KCk1vbiBGZWIgMTggMTU6MzA6MTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGZpeGVkIHRoZSB0ZXN0IHNjcmlwdCBhZnRlciBzb21lIGRpc2N1c3Npb24KCSAgb24gdGhlIHNlbWFudGljIG9mIFRZUEU9ImVycm9yIgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgdGhlIHNjcmlwdCB0byB0aGUgZGlzdHJpYgoKTW9uIEZlYiAxOCAxMjoxNzo0MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBlbnRpdGllcy5jOiBmaXhlZCBhIGNvdXBsZSBvZiBjb25mb3JtYW5jZXMgaXNzdWVzIGRlZXAKCSAgaW50byB0aGUgdmFsaWRhdGlvbiBjb2RlIChzdGFuZGFsb25lIGFuZCB1bmRlY2xhcmVkIE5vdGF0aW9ucykKCk1vbiBGZWIgMTggMDA6MTc6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkICM3MTc0MSBzdXBpZCB0eXBvIGFuIGEgYnVnIGFib3V0IGVuY29kaW5nIHBhcnNpbmcKCSAgc3RheWVkIHRoZXJlIGZvciB5ZWFycyAhCgpNb24gRmViIDE4IDAwOjA2OjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgU0FYLmM6IGZpeGVkICM3MTc0MCBOb3RhdGlvbkRlY2wgd2l0aCBhIHJlcXVpcmVkIGZpZWxkCgkgIG1pc3NpbmcKClN1biBGZWIgMTcgMjM6NDU6NDAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGltcHJvdmVkIHRoZSBiZWhhdmlvdXIgYSBiaXQgYXMKCSAgd2VsbCBhcyB0aGUgbG9ncwoJKiBwYXJzZXIuYyB2YWxpZC5jIFNBWC5jOiBmaXhlZCBhIGZldyBtb3JlIGJ1Z3MgCgkgICJSYW4gMTgxOSB0ZXN0czogMTc3OCBzdWNlZWRlZCwgNDEgZmFpbGVkLCBhbmQgMCBnZW5lcmF0ZWQgYW4gZXJyb3IiCgpTdW4gRmViIDE3IDIwOjQxOjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBweXRob24gc2NyaXB0IHRvIHJ1biByZWdyZXNzaW9uIHRlc3RzCgkgIGFnYWluc3QgdGhlIFhNTCBUZXN0IHN1aXRlIG9mIFczQy9PQVNpcwoJKiBTQVguYzogZml4ZWQgYSB2YWxpZGF0aW9uIGJ1ZwoJKiBwYXJzZXIuYzogZml4ZWQgMyBlcnJvcnMgcG9pbnRlZCBieSB0aGUgdGVzdCBzdWl0ZQoJKiBkb2MvYnVpbGREb2NCb29rQ2F0YWxvZzogZml4ZWQgYSB0eXBvIHBvaW50ZWQgYnkgZHJha2UKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBmaXhlZCBhIGRlcGVuZGVuZHkKCkZyaSBGZWIgMTUgMjE6NDc6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGF2b2lkIGEgd2FybmluZyBidWcgIzcxNTk0CgpXZWQgRmViIDEzIDIyOjEzOjMzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBKZXNzZSBQZXJyeSBwcm92aWRlZCBhIHBhdGNoIHRvIHJlbW92ZSBhIGZldwoJICB3YXJuaW5nIG9uIGFscGhhL1RydTY0CgpXZWQgRmViIDEzIDE0OjMwOjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmg6IGZpeGluZyBhIGNvbW1lbnQKCSogdmFsaWQuYzogZml4aW5nIHNvbWUgdHJvdWJsZXMgd2l0aCB2YWxpZGl0eSBjaGVjayBvbiBuYW1lc3BhY2VzCgkqIHJlc3VsdC9WQy9OUzMgdGVzdC9WQy9OUzM6IGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgpXZWQgRmViIDEzIDE0OjA1OjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogRml4aW5nICM3MTM0MiBzZXJpYWxpemluZyAnXG4nIGluIGF0dHJpYnV0ZSB2YWx1ZXMKCSogcmVzdWx0L25vZW50L2F0dDMgcmVzdWx0L2F0dDMgdGVzdC9hdHQzOiBhZGRlZCBhIHNwZWNpZmljCgkgIHRlc3QuCgpUdWUgRmViIDEyIDE0OjQ1OjMyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogY291cGxlIG9mIGJ1ZyBmaXhlcwoKTW9uIEZlYiAxMSAxOTo0MToyOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vKi5weTogcmVtb3ZlZCB0YWJzIGFuZCB1c2VkIHNwYWNlcy4KCk1vbiBGZWIgMTEgMTk6MjU6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjE1CgkqIGRvYy9uZXdzLmh0bWwgZG9jL3htbC5odG1sIGRvYy94bWxpby5odG1sOiByZWJ1aWx0IHNvbWUgZG9jcwoKTW9uIEZlYiAxMSAxNDo1MzoyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sOiB0cnlpbmcgdG8gY2xvc2UgUmVkIEhhdCBidWcgIzU4NzA3CgkgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTg3MDcKCk1vbiBGZWIgMTEgMDk6NTM6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiB0cnlpbmcgdG8gZml4IHRoZSBpbmNsdWRlIG1lc3MKCk1vbiBGZWIgMTEgMDg6NTM6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IHJldmVydGVkIHBhcnQgb2YgdGhlIHByZXZpb3VzCgkgIGF0dGVtcHQgdG8gcHJvdmlkZSAjNjk2NTUsIHRoaXMgd2FzIGJyZWFraW5nIHRoZSBidWlsZC4KClN1biBGZWIgMTAgMTQ6MTM6MzQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBNYWtlZmlsZS5hbSBidWlsZF9nbG9iLnB5IGNvbmZpZ3VyZS5pbiBkZWJ1Z1hNTC5jCgkgIGdsb2JhbHMuYyBwYXJzZXIuYyB0aHJlYWRzLmMgdHJlZS5jIHZhbGlkLmMgeG1sbWVtb3J5LmMKCSAgeHBhdGguYyB4cG9pbnRlci5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgVGVudGF0aXZlbHkgZml4ZWQgIzY5NjU1ICwgbWFrZSBjb21waWxpbmcgd2l0aCAtV3JlZHVuZGFudC1kZWNscwoJICBjbGVhbi4KCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBhIHdhcm5pbmcuCgpTdW4gRmViIDEwIDEyOjAyOjU5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyB2YWxpZC5jIHhpbmNsdWRlLmM6IGZpeCAjNjg4ODIsIGNsZWFudXAgdGhlIFhJbmNsdWRlCgkgIGNvcHlpbmcgb2Ygbm9kZSwgbWVyZ2UgYmFjayBJRHMgaW4gdGhlIHRhcmdldCBkb2N1bWVudC4KCSogcmVzdWx0L1hJbmNsdWRlL2RvY2lkcy54bWwgdGVzdC9YSW5jbHVkZS9kb2NzL2RvY2lkcy54bWwKCSAgdGVzdC9YSW5jbHVkZS9lbnRzL2lkcy54bWw6IHRlc3QgY2FzZQoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkNDogb3V0cHV0IGNoYW5nZWQgZHVlIHRvIGEgdHlwbyBmaXgKClNhdCBGZWIgIDkgMjM6MTU6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBzZWVtcyBzb21lIHZlcnNpb24gb2YgYXV0b21ha2UgZGlkbid0CgkgIGdlbmVyYXRlIHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQgYXMgSmFjb2IgZm91bmQgb3V0LiBBZGQKCSAgYW4gZXh0cmEgZGVwZW5kZW5jeSBydWxlLgoKU2F0IEZlYiAgOSAxODo1OToyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jOiBKdXN0aW4gRmxldGNoZXIgZm91bmQgc29tZSBwYXJ0cwoJICBvZiB0aGUgY29kZSBuZWVkaW5nIGNsZWFudXAKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IEZpeGVkIHRoZSBweXRob24gTWFrZWZpbGVzCgkgIGNvcnJlY3RlZCBhIGJ1ZyBzaG93aW5nIHVwIG9uIGlhNjQsIGNoYW5nZWQgdGhlIG5hbWUgb2YgdGhlCgkgIHB5dGhvbiBpbnRlcm5hbCBtb2R1bGUgdG9vCgpGcmkgRmViICA4IDE1OjE5OjI4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gQW5kcmlzIFBhdmVuaXMgZm9yIGJpbmFyeQoJICBuYW1lIHN1ZmZpeGVzCgpGcmkgRmViICA4IDE0OjQzOjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyB3aW4zMi93aW4zMmNvbmZpZy5oOiBmaXhpbmcgIzY4NzQ4CgpGcmkgRmViICA4IDE0OjM3OjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyAjNzAxNjYKCkZyaSBGZWIgIDggMTQ6MzE6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4aW5nICM3MDA3NwoKRnJpIEZlYiAgOCAxNDoyNDowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDb3B5cmlnaHQgTWFrZWZpbGUuYW0gUkVBRE1FIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbjoKCSAgQ2hhbmdlZCB0byB0aGUgTUlUIExpY2VuY2UKCSogZG9jL0ZBUS5odG1sIGRvYy9jYXRhbG9nLmh0bWwgZG9jL2ludHJvLmh0bWwgZG9jL3htbC5odG1sCgkgIGRvYy94bWxpby5odG1sOiB1cGRhdGVkIHRoZSBkb2MgYWNjb3JkaW5nbHkKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmggY29uZmlndXJlLmluOiBwcmVwYXJpbmcKCSAgMi40LjE0IHJlbGVhc2UKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6CgkgIGZpeGVkIHRoZSBjb25zdCB4bWxDaGFyICogd3JhcHBlciBhbmQgZ2VuZXJhdG9yLCBYUGF0aCBleHRlbnNpb24KCSAgZnVuY3Rpb25zIG5vdyB1c2UgdGhlIGNvbnRleHQgYXMgZmlyc3QgYXJndW1lbnQKCSogcHl0aG9uL3Rlc3RzL3RzdHhwYXRoLnB5IHB5dGhvbi90ZXN0cy94cGF0aC5weQoJICBweXRob24vdGVzdHMveHBhdGhleHQucHk6IFVwZGF0ZWQgdGhlIHRlc3RzIGFjY29yZGluZ2x5CgkqIHRyZWUuYzogZml4ZWQgYnVnICM3MDA2NwoKVGh1IEZlYiAgNyAxNzozMzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiBkZWJ1Z1hNTC5jOiBhbHdheXMgdXNlIHN0ZG91dCBpZiBvdXRwdXQgaXMgTlVMTAoJKiB4bWxJTy5jOiBkb24ndCBjbG9zZSBmaWxlZGVzY3JpcHRvcnMgcGFzc2VkIHRvIG91dHB1dEJ1ZmZlcnMKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IGF1Z21lbnRlZCB0aGUgbnVtYmVyIG9mIGJpbmRpbmdzCgkgIGhhbmRsaW5nIEZJTEUgKiBhbmQgWFBhdGggY29udGV4dHMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOiBhdm9pZCBhIHN0dXBpZCBwcm9ibGVtIGR1ZSB0byB0aGUKCSAgdXNlIG9mIFRFU1QuCgpXZWQgRmViICA2IDIzOjM3OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgc3R1cGlkIGJ1ZyAjNzA3MzggZm91bmQgYnkgYWxmb25zIGhvb2dlcnZvcnN0CgpXZWQgRmViICA2IDE3OjA0OjUxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9UT0RPIHB5dGhvbi9saWJ4bWwuYzogY2xlYW51cCB0aGUgZXh0ZW5zaW9uIGZ1bmN0aW9uIGxvb2t1cAoJKiB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogYWx3YXlzIGNvbXBpbGUgdGhlIGxpc3QKClR1ZSBGZWIgIDUgMTc6MzM6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogZG8gbm90IGluc3RhbGwgb3V0c2lkZQoJICBvZiBwcmVmaXgKCk1vbiBGZWIgIDQgMTU6MDU6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5jOiBzdGFydGVkIGFkZGluZyBTQVggaW50ZXJmYWNlcwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2hTQVgucHk6IGFkZGVkIGEgYmFzaWMKCSAgU0FYIHRlc3QKCk1vbiBGZWIgIDQgMDE6MTI6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBoYXJkZW5lZCB0aGUgYWRkQ2hpbGQgZnVuY3Rpb24KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL1RPRE86CgkgIGFkZGVkIGFjY2Vzc29ycyBuZWVkZWQgZm9yIHhtbE5vZGUsIGEgYml0IG1vcmUgdGVzdGluZyBhbmQKCSAgZXh0ZW5zaW9uIG9mIGludGVyZmFjZXMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9idWlsZC5weTogYWRkZWQgYSB0ZXN0CgkgIGJ1aWxkIGZyb20gc2NyYXRjaC9zYXZlL2xvYWQvY2hlY2sKClN1biBGZWIgIDMgMjE6MTA6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGNoYW5nZSBhIHNtYWxsIGJpdCBpbiB0aGUgd2F5IHZhbGlkaWR5CgkgIGVycm9yIG1lc3NhZ2VzIGdldCBpbml0aWFsaXplZAoJKiBweXRob24vVE9ETyBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6CgkgIGFkZGVkIHNvbWUgbWVtb3J5IGRlYnVnZ2luZyB0byB0cmFjayBsZWFrcyBhdCB0aGUgbGlieG1sMiBsZXZlbAoJKiBweXRob24vdGVzdHMvKi5weTogY2hhbmdlZCBhbGwgdGVzdHMgdG8gY2hlY2sgZm9yIGxlYWtzLAoJICB0aGVyZSBpcyBqdXN0IG9uZSBsZWZ0IGluIFhQYXRoIGV4dGVuc2lvbiByZWdpc3RyYXRpb25zLgoKU3VuIEZlYiAgMyAxNzo1MDo0NiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vVE9ETyBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBtb3JlIGFjY2Vzc29yIGNsYXNzZXMgZm9yIHRoZSBwYXJzZXIKCSAgY29udGV4dCwgYWxsb3cgdG8gc3dpdGNoIG9uIGFuZCBjaGVjayB2YWxpZGl0eQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2Vycm9yLnB5CgkgIHB5dGhvbi90ZXN0cy9pbnZhbGlkLnhtbCBweXRob24vdGVzdHMvdmFsaWQueG1sCgkgIHB5dGhvbi90ZXN0cy92YWxpZGF0ZS5weTogYXR0ZGVkIG1vcmUgdGVzdCBhbmQgYW5kIGFkZGVkIGVycm9yLnB5CgkgIHdoaWNoIEkgZm9yZ290IHRvIGNvbW1pdCBpbiB0aGUgbGFzdCBzdGVwCgpTdW4gRmViICAzIDE2OjAzOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdHlwZXMuYzogY2xlYW51cAoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weSBweXRob24vbGlieG1sX3dyYXAuaAoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sIAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkZWQgY2xhc3MgZm9yIHBhcnNlciBjb250ZXh0LCBhZGRlZAoJICBmaXJzdCBjdXQgZm9yIHB1c2ggbW9kZSBzdXBwb3J0LiBBZGRlZCBhIGZyYW1ld29yayB0byBnZW5lcmF0ZQoJICBhY2Nlc3NvcnMgZnVuY3Rpb25zLgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2gucHk6IGFkZGVkIGEgcHVzaAoJICB0ZXN0CgpTdW4gRmViICAzIDAwOjE3OjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vVE9ETyBweXRob24vbGlieG1sLnB5OiBmaXhlZCBhIHNtYWxsCgkgIGJ1ZyBhIGJpdCBvZiBjbGVhbnVwLgoKU2F0IEZlYiAgMiAyMjo0NzoxMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRpbmcgZXJyb3IgcmVkaXJlY3Rpb25zIGFuZCBwcmVmb3JtYXQKCSAgdG8gYSBweXRob24gaGFuZGxlcgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzLyoucHk6IGNsZWFudXAgbWFkZSBhbGwKCSAgdGVzdHMgc2VsZiBjaGVja2luZwoKU2F0IEZlYiAgMiAxMzoxODo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogZml4ZWQgYSBzdHVwaWQgYnVnIHdoZW4gcmVuYW1pbmcKCSAgYSBmdW5jdGlvbgoKU2F0IEZlYiAgMiAxMToyNTo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL1RPRE8gcHl0aG9uL2dlbmVyYXRvci5weQoJICBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IFByb2dyZXNzaW5nIHRocm91Z2ggdGhlIFRPRE9zLCBjbGFzcwoJICBkZXNjcmlwdGlvbiBvdXRwdXQsIGV4dHJhIFhNTCBBUEksIFJQTSBub3cgYnVpbGRzIHRoZSB3cmFwcGVycwoJICBmb3IgYWxsIHB5dGhvbiBpbnN0YWxsZWQgdmVyc2lvbnMKClNhdCBGZWIgIDIgMTA6MTM6NTIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vVE9ETwoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRlZCBtb3JlIGluZm9ybWF0aW9ucwoJICBpbiB0aGUgbGlieG1sMi1weXRob24gcGFja2FnZSBpbmNsdWRpbmcgZG9jcy4gU2xpZ2h0bHkgY2hhbmdlZAoJICB0aGUgY2xhc3MgaGllcmFyY2h5CgkqIHB5dGhvbi90ZXN0cy8qOiBhZGRlZCBiYXNpYyByZWdyZXNzaW9uIHRlc3RzIGluZnJhc3RydWN0dXJlIHRvbwoKRnJpIEZlYiAgMSAyMzoxMTo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gZXhhbXBsZS9NYWtlZmlsZS5hbSBweXRob24vTWFrZWZpbGUuYW06CgkgIGFkZGVkIGxpYnhtbDItcHl0aG9uIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2VzIGluc3RhbGxlZAoKRnJpIEZlYiAgMSAxODo0ODoxOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMKCSAgcHl0aG9uL2xpYnhtbC5weTogbW9yZSB3b3JrLCBub3cgYWJsZSB0byBleHRlbmQgdGhlCgkgIFhQYXRoIGludGVycHJldGVyIHdpdGggZnVuY3Rpb25zIHdyaXR0ZW4gaW4gcHl0aG9uLgoKRnJpIEZlYiAgMSAxMDoyODo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IEphY29iIHNlbnQgYSBwYXRjaCB0byBhbGxvdyBidWlsZGluZyBmcm9tCgkgIHRhcmZpbGUuCgpGcmkgRmViICAxIDAwOjQwOjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vbGlieG1sLmMgY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOgoJICBpbnNlcnRlZCB0aGUgcHl0aG9uIHdyYXBwZXJzIGJ1aWxkLCBJIGhvcGUgdGhpcyB3b24ndCBiZSB0b28KCSAgdW5wb3J0YWJsZQoKVGh1IEphbiAzMSAyMToyNzozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBtaW5vciBvcHRpbWl6YXRpb24KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaDogbW9yZSB3b3JrIG9uIHRoZSBweXRob24gYmluZGluZ3MsCgkgIHRoZXkgbm93IHN1cHBvcnQgWFBhdGggYW5kIHRoZXJlIGlzIG5vIGV2aWRlbnQgbGVhawoKVGh1IEphbiAzMSAwMDo0ODowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OgoJICBtb3JlIHdvcmsgb24gdGhlIHB5dGhvbiBiaW5kaW5ncyBnZW5lcmF0b3IuCgpXZWQgSmFuIDMwIDIxOjUxOjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWxfd3JhcC5oOgoJICBtb3JlIHdvcmsgb24gdGhlIHB5dGhvbiBiaW5kaW5ncy4KCldlZCBKYW4gMzAgMTc6MzU6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaDogY29tbWl0ZWQgZWFybHkgdmVyc2lvbiBvZiBhIHB5dGhvbiBiaW5kaW5nCgkgIGZvciBwcml2YXRlIHVzZSBvbmx5IEFUTQoKU2F0IEphbiAyNiAyMjo0MToxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oOiBhcHBsaWVkIHBhdGNoCgkgIGZyb20gQW50aG9ueSBKb25lcyB0byBpbXBsZW1lbnQgY29weSBvZiBEVEQgc3VidHJlZSB0b28uIEhhZAoJICBqdXN0IHRvIGtlZXAgMiBmdW5jdGlvbiBwcml2YXRlIHdoaWNoIHJlYWxseSBvdWdodCB0byBiZWNvbWUKCSAgcHVibGljIG9uZXMuCgpGcmkgSmFuIDI1IDE1OjE0OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkZWQgcG9pbnRlcnMgdG8gdGhlIHdlYiBwYWdlcyBpbiB0aGUgdXNhZ2UoKQoKVGh1IEphbiAyNCAxNzowNDowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IG1vcmUgZml4ZXMgZnJvbSBQZXRyIEtvemVsa2EgZm9yIGF0dHJpYnV0ZSBoYW5kbGluZwoJICBpbiB0aGUgdHJlZSBBUEkgdG8gYWxpZ24gdGhlIHNlbWFudGljIHdpdGggRE9NLgoKVGh1IEphbiAyNCAxNjowMDo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHRyZWUuYyBlbnRpdGllcy5jOiBhbm90aGVyIHNldCBvZiBwYXRjaGVzIGZyb20KCSAgQW50aG9ueSBKb25lcyBmb3IgY29weSBvcGVyYXRpb25zIGNsZWFudXAgYW5kIHJvYnVzdG5lc3MKCldlZCBKYW4gMjMgMTg6NTM6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0FQSWNodW5rKi5odG1sIGRvYy9wYXJzZWRlY2wucHkgZG9jL2FwaS54c2w6IGdlbmVyYXRlZAoJICBhbiBhbHBoYWJldGljIGluZGV4IGJhc2VkIG9uIGNvbW1lbnRzIGNvbnRlbnQKCSogZG9jLyo6IHJlYnVpbHQgdGhlIHdlYiBzaXRlIHdpdGggdGhlIG5ldyByZWZlcmVuY2VzCgpXZWQgSmFuIDIzIDE1OjE0OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5oOiBHcmVnIFNqYWFyZGVtYSBzdWdnZXN0ZWQgdG8gdXNlIGFuCgkgIGVwb25lbnRpYWwgYnVmZmVyIGdyb3RoIHBvbGljeSBpbiB4bWxQYXJzZXJBZGROb2RlSW5mbygpCgpXZWQgSmFuIDIzIDEzOjMyOjQwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9hcGkueHNsIGRvYy9BUEljb25zdHJ1Y3RvcnMuaHRtbCBkb2MvQVBJZmlsZXMuaHRtbAoJICBkb2MvQVBJZnVuY3Rpb25zLmh0bWwgZG9jL0FQSXN5bWJvbHMuaHRtbCBkb2MvbGlieG1sMi1yZWZzLnhtbAoJICBkb2MvcGFyc2VkZWNsLnB5IGRvYy9NYWtlZmlsZS5hbTogdXBkYXRlZCB0aGUgcHl0aG9uIGV4dHJhY3RvcgoJICB0byBnZW5lcmF0ZSBjcm9zcy1yZWZlcmVuY2VzLCBhbmQgYWRkZWQvdXBkYXRlZCB0aGUgc3R5bGVzaGVldHMKCSAgdG8gZ2VuZXJhdGUgYW5kIGxpbmsgQVBJIGluZGV4ZXMuIFRoZSBnZW5lcmljIGtleXdvcmQgaW5kZXgKCSAgaXMgbm90IGRvbmUgeWV0LgoJKiBkb2MvKi5odG1sOiByZWdlbmVyYXRlZCBhbGwgdGhlIHVzdWFsIGRvY3MgdG9vCgpUdWUgSmFuIDIyIDIzOjExOjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFkZGVkIGFuIHhwYXRoIGZ1bmN0aW9uIHRvIHRoZSBzaGVsbCBmb3IgVC4gVi4gUmFtYW4KClR1ZSBKYW4gMjIgMjI6NDI6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogcGF0Y2ggZnJvbSBBbnRob255IEpvbmVzIHRvIGNhdGNoIE5VTEwgbm9kZXMgaW4KCSAgZGVidWcgcm91dGluZXMuCgpUdWUgSmFuIDIyIDIyOjM4OjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbHkgYW4gcGF0Y2ggZnJvbSBQZXRyIEtvemVsa2EgZm9yIHVubGluayBhbmQgcmVwbGFjZSAKCSAgc3VwcG9ydCBvZiBhdHRyaWJ1dGUgbm9kZXMKClR1ZSBKYW4gMjIgMTk6MTI6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvcGFyc2VkZWNsLnB5OiBCdWlsZCBhIG5ldyB2ZXJzaW9uCgkgIGhvcGVmdWxseSBuZWFyIGNvbXBsZXRlIGFuZCBmdWxseSBkb2N1bWVudGVkIG9mIHRoZSBBUEkgaW4gWE1MCgkqIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlcnJvci5jIGdsb2JhbHMuYyBwYXJzZXIuYyB0cmVlLmMKCSB4bWxJTy5jIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBpbmNsdWRlL2xpYnhtbC9oYXNoLmgKCSBpbmNsdWRlL2xpYnhtbC9saXN0LmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaGkKCSBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmhpCgkgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluaQoJIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgQ2xlYW5lZCB1cCB0aGUgZG9jIGNvbW1lbnRzIGEgbG90IGluIHRoZSBwcm9jZXNzLCB0aGUgaW50ZXJmYWNlCgkgIGNvdmVyYWdlIGlzIG5vdyAxMDAlCgpUdWUgSmFuIDIyIDAwOjEyOjU4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weTogaW1wcm92ZWQgdGhlIHNjcmlwdCB0bwoJICBleHRyYWN0cyBjb21tZW50cyBmcm9tIHRoZSBndGstZG9jIERvY0Jvb2sgb3V0cHV0IChhIGJpdAoJICBjb252b2x1dGVkIGJ1dCBzZWVtcyB0byB3b3JrKS4KCk1vbiBKYW4gMjEgMTg6Mjk6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weToKCSAgYWRkZWQgYW4gWE1MIGRlc2NyaXB0aW9uIG9mIHRoZSBBUEksIG1vdmVkIHRoZSBzY3JpcHQgZ2VuZXJhdGluZwoJICBpdCBoZXJlLiBBZGRlZCBhICJtYWtlIGFwaSIgdGFyZ2V0CgpNb24gSmFuIDIxIDE0OjM0OjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQWRhbSBMb3VuZHMgcG9pbnRlZCBvdXQgYSBidWcgaW4geG1sU2VhcmNoTnMoKQoKTW9uIEphbiAyMSAwOTo1NToyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IHRoZSBjaGFuZ2UgbWFkZSB0bwoJICB4bWxYUGF0aEZ1bmNMb29rdXBGdW5jIHdhcyBpbmNvbXBhdGlibGUgcm9sbCBpdCBiYWNrCgpTdW4gSmFuIDIwIDIzOjAzOjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBjbGVhbnVwIHBhdGNoIGZyb20gQW50aG9ueSBKb25lcwoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeCB0aGUgaGVhZGVycyB0byBhdm9pZCBpbiBtYWtlIHNjYW4KCSogcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC8qLmg6IGNsZWFudXAgb2YgdGhlCgkgIGluY2x1ZGVzLCAqIHZzIFB0ciBhbmQgZ2VuZXJhbCBjbGVhbnVwCgkqIHBhcnNlZGVjbC5weTogZmlyc3QgdmVyc2lvbiBvZiBhIHNjcmlwdCB0byBleHRyYWN0IHRoZQoJICBtb2R1bGUgaW50ZXJmYWNlcywgdGhlIGdvYWwgd2lsbCBiZSB0byBwcm92aWRlIC5kZWNsIG9yIFhNTAoJICBzcGVjaWZpY2F0aW9uIG9mIHRoZSBpbnRlcmZhY2VzIHRvIGJ1aWxkIHdyYXBwZXJzLgoKU3VuIEphbiAyMCAxMzozODoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sIHhtbGNhdGFsb2cuYzogRml4ZWQgYnVnICM2ODgzMCwgeG1sY2F0YWxvZwoJICBub3cgcHJvdmlkZXMgcmV0dXJuIGNvZGVzIGluIGNhc2Ugb2YgZXJyb3JzCgpTYXQgSmFuIDE5IDE2OjM2OjIxIENFVCAyMDAyIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpby5oIHRyaW8uYyB0cmlvZGVmLmggdHJpb3AuaCB0cmlvbmFuLmggdHJpb25hbi5jIE1ha2VmaWxlLmFtOgoJICBVcGdyYWRlZCB0byB0cmlvIGJhc2VsaW5lIDEuNgoJKiBzdHJpby5oIHN0cmlvLmM6IFJlcGxhY2VkIGJ5IHRyaW9zdHIuaCBhbmQgdHJpb3N0ci5jCgpGcmkgSmFuIDE4IDE3OjIyOjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB4bWxJTy5jIHhtbGNhdGFsb2cuYzogcmVtb3ZlZCB0aGUgbGFzdCBvY2N1cmVuY2VzCgkgIG9mIHN0cmR1cCB1c2FnZSBpbiB0aGUgY29kZQoKRnJpIEphbiAxOCAxMjo0NzoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBlcnJvci5jOiBLZWl0aCBJc2RhbGUgY29tcGxhaW5lZCByaWdodGx5IHRoYXQgCgkgIHhtbEluaXRQYXJzZXIoKSBkaWQgbm90IHByZXNlcnZlIHZhbHVlIHNldCBieSB4bWxTZXRHZW5lcmljRXJyb3JGdW5jCgpUaHUgSmFuIDE3IDA5OjQ0OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgdGhlIGZ1bnh0aW9uIHRvIHNldCB0aGUgeG1sOiBhdHRyaWJ1dGVzCgkqIGRlYnVnWE1MLmM6IGFkZGVkICJzZXRiYXNlIiB0byB0ZXN0IGl0LgoKV2VkIEphbiAxNiAxNjozNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHVwZGF0ZSB4bWxOb2RlU2V0Q29udGVudCgpIGFuZCB4bWxOb2RlU2V0Q29udGVudExlbigpCgkgIHRvIGFsbG93IHVwZGF0aW5nIGFuIGF0dHJpYnV0ZSBjb250ZW50CgpUdWUgSmFuIDE1IDE4OjA5OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oOiB0cnkgdG8gYXZvaWQgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgb24gV2luZG93cwoKTW9uIEphbiAxNCAxODo1NjoyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IHBhdGNoIGZyb20gQW50aG9ueSBKb25lcyBmb3IgaGFzaC5jIGFsbG9jYXRpb24gc2l6ZQoJKiBNYWtlZmlsZS5hbTogdHJ5aW5nIHRvIHdvcmsgYXJvdW5kIFlldCBBbm90aGVyIExpYnRvb2wgTWFkbmVzcwoJICBhbmQgYnVpbGQgdGhlIDIuNC4xMyByZWxlYXNlIGZpbmFsbHkgLi4uCgpNb24gSmFuIDE0IDE4OjI3OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogdXBkYXRlZCB0byAyLjQuMTMKCSogZG9jLyogOiB1cGRhdGUgb2YgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBKYW4gMTQgMTc6NTM6NDEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0cmVlLmM6IHNvbWUgY2xlYW51cCBhZnRlciBhbiB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdAoJICBhdCBmaXhpbmcgIzYxMjkwIDotKAoKU3VuIEphbiAxMyAyMTozMDo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbFNhdmVGb3JtYXRGaWxlRW5jKCkgd2hlbiBlbmNvZGluZyA9PSBOVUxMCgkgIEZpeGVzIGJ1ZyAjNjcyMjkKClN1biBKYW4gMTMgMTc6MTQ6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gYXZvaWQgdHJvdWJsZXMgd2hlbiBhIHN1YnRyZWUgaXMgY29waWVkCgkgIGFuZCBjb2FsZXNjZWQgaW4gcGFydCB3aXRoIHRoZSB0YXJnZXQgdHJlZS4gU2hvdWxkIGZpeCAKCSAgYnVnICM2NzQwNwoKU3VuIEphbiAxMyAxNjozNzoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCB2YWxpZGF0aW9uIG9mIGF0dHJpYnV0ZXMgY29udGVudCBvZiB0eXBlCgkgIE5BTUUgTkFNRVMgTk1UT0tFTiBhbmQgTk1UT0tFTlMgdG8gYWNjZXB0IGludGVybmF0aW9uYWxpemVkCgkgIHZhbHVlcywgdmVyeSBvbGQgYnVnLiBGaXhlcyAjNjc2NzEKClN1biBKYW4gMTMgMTU6MDc6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggdHJlZS5jOiBpbnRlZ3JhdGVkCgkgIGEgY291cGxlIG9mIGZpeGVzIGFuZCBhIG5ldyBBUEkgZnVuY3Rpb24geG1sU2V0RW50aXR5UmVmZXJlbmNlRnVuYygpCgkgIGZyb20gS2VpdGggSXNkYWxlIGFuZCBkZWRpY2F0ZWQgdG8geHNsZGJnIHRoZSBYU0xUIGRlYnVnZ2VyLgoKU3VuIEphbiAxMyAxNDoyMzoyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgU2VyZ3VlaSBOYXJvam55aSdzIHBhdGNoIHRvIGFkZCBuYXRpdmUKCSAgdGhyZWFkIHN1cHBvcnQgb24gdGhlIFdpbjMyIHBsYXRmb3JtCgkqIHRlc3RUaHJlYWRzV2luMzIuYyBNYWtlZmlsZS5hbTogYWRkZWQgdGhlIHRlc3QgcHJvZ3JhbSBhbHNvCgkgIGZyb20gU2VyZ3VlaSwgV2luMzIgc3BlY2lmaWMKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOgoJICBhZGRlZCBwYXRjaCBmcm9tIElnb3IgZm9yIHRoZSBXaW5kb3dzIHRocmVhZCBzcGVjaWZpYyBkZWZpbmVzLgoKV2VkIEphbiAgOSAxMjo1MDozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBBbnRob255IEpvbmVzIHBvaW50ZWQgYSBidWcgaW4geG1sQ29weUVudGl0eSgpCgpUdWUgSmFuICA4IDE0OjIzOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qLmh0bWwgZG9jL3NpdGUueHNsIGRvYy9NYWtlZmlsZTogcmVuYW1lZCBYTUwuaHRtbAoJICBvdXRwdXQgcGFnZSBpbnRvIFhNTGluZm8uaHRtbC4gQ2xvc2UgYnVnICM2Njk1MSBhbmQKCSAgcmFpc2VkIGJ5IFJvYmVydCBDb2xsaW5zIHRvby4KClR1ZSBKYW4gIDggMTQ6MTM6MTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogUGF1bCBLZW9naCBwb2ludGVkIG91dCBhIHBvc3NpYmlsaXR5IG9mIHNlZ2ZhdWx0CgkgIG9uIHJlcGV0ZWQgeG1sQWRkRW5jb2RpbmdBbGlhcygpIC8geG1sQ2xlYW51cEVuY29kaW5nQWxpYXMoKS4KCSAgQ2xvc2VzIGJ1ZyAjIDY4MjM4CgpUdWUgSmFuICA4IDEyOjQ4OjI3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIEdkb21lMiBsaW5rcwoKVHVlIEphbiAgOCAxMTozMjozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaDogQXBwbGllZCBmb2xsb3dpbmcgcGF0Y2hlcyBmcm9tIFJvYmVydCBDb2xsaW5zCgkgIGFuZCBtYWtlIHN1cmUgSU5fTElCWE1MIGlzIGRlZmluZWQgd2hlbiBjb21waWxpbmcgaXQKCS0tLS0tLS0KCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIChMSUJYTUxfRExMX0lNUE9SVCk6IFVzZSBvbiBDeWd3aW4KCSAgYXMgd2VsbCBhcyBWaXN1YWwgQy4KCSogcGFyc2VyLmMgKFhNTF9ESVJfU0VQKTogRG9uJ3QgdXNlICdcXCcgZm9yIEN5Z3dpbi4KCSogcGFyc2VySW50ZXJuYWxzLmMgKFhNTF9ESVJfU0VQKTogRG9uJ3QgdXNlICdcXCcgZm9yIEN5Z3dpbi4KCSogc3RyaW8uYyAoUExBVEZPUk1fVU5JWCk6IERlZmluZSBmb3IgQ3lnd2luLgoJKiB0cmlvZGVmLmggKFRSSU9fUExBVEZPUk1fVU5JWCk6IERlZmluZSBmb3IgQ3lnd2luLgoJKiB4bWxJTy5jICh4bWxGaWxlT3Blbik6IFVzZSB1bml4IGJlaGF2aW91ciBmb3IgQ3lnd2luLgoJICBVc2UgYmluYXJ5IG1vZGUgb3BlbnMgZm9yIEN5Z3dpbiAoeG1sRmlsZU9wZW5XIHhtbFBhcnNlckdldERpcmVjdG9yeQoJICB4bWxTeXNJREV4aXN0cyB4bWxOb05ldEV4aXN0cykuCgkqIHhtbGxpbnQuYzogRG9uJ3QgaW5jbHVkZSB3aW5zb2NrMi5oIGZvciBDeWd3aW4uCgpNb24gSmFuICA3IDE3OjUyOjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBKaXJrYSBLb3NlayBwb2ludGVyIG91dCBhIGJ1ZyBpbiB4bWxQYXJzZVRleHREZWNsKCkKCSAgd2hlbiB0aGUgdmVyc2lvbiBpbmZvIGlzIG5vdCBwcmVzZW50LgoKTW9uIEphbiAgNyAwMDowMzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEFudGhvbnkgSm9uZXMgIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSBpbgoJICB4bWxTdHJpbmdHZXROb2RlTGlzdCgpIGFuZCBwcm92aWRlZCBhIGZpeCBmb3IgaXQKClN1biBKYW4gIDYgMTM6NDU6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHBhdGNoIGZyb20gRnJhbmsgSiBGcmFua2xpbiB0byByZW1vdmUgYSBidWcgaW4KCSAgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKSB3aGVuIHRoZSBpbml0aWFsIGJ1ZmZlciBwYXNzZWQKCSAgaXMgbGFyZ2UuCgpTYXQgSmFuICA1IDE5OjI0OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyLyo6IGJpZyBjbGVhbnVwIG9mIHRoZSBXaW5kb3dzL01TVkMgcHJvamVjdCBmaWxlcwoJICBmcm9tIElnb3IgWmxhdGtvdmljCgpXZWQgSmFuICAyIDE0OjExOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogc2hvdWxkIGZpeCAjNjc2NzQgYW5kIGF2b2lkIHRyb3VibGVzIGlmIAoJICB4c2x0cHJvYyBpcyBub3QgYXZhaWxhYmxlIG9yIGZhaWxzIGluIHRoZSBwcmVmaXggcHJvdmlkZWQKClR1ZSBKYW4gIDEgMTc6NDg6NTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IG9uZSBtb3JlIGRvYyBwYXRjaCBmcm9tIENoYXJsaWUgQm96ZW1hbi4KCk1vbiBEZWMgMzEgMTc6MzU6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIHBhcnNlci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBGaXhlZCBhIGZldyBvdGhlciBwcm9ibGVtcyByYWlzZWQgYnkgQ2hhcmxpZSBCb3plbWFuLgoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkWzUtN106IGZpeGVkIHRoZSBvdXRwdXQKCk1vbiBEZWMgMzEgMTc6MTM6MzQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogKi5jIGluY2x1ZGUvbGlieG1sLyouaCBkb2MvaHRtbC8qOiBhcHBsaWVkIDQyIGRvY3VtZW50YXRpb24KCSAgcGF0Y2hlcyBmcm9tIENoYXJsaWUgQm96ZW1hbi4gUmVnZW5lcmF0ZWQgdGhlIEhUTUwgZG9jcy4KClRodSBEZWMgMjAgMTQ6NTk6NTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaCB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBmaXhlcwoJICBmb3IgV2luZG93cyBmcm9tIElnb3IKClR1ZSBEZWMgMTggMTI6MTM6MzMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIEp1c3RpbiBGbGV0Y2hlciBwYXRjaCBmb3IgLS1vdXRwdXQgb3IgLW8KClR1ZSBEZWMgMTggMDg6NTI6MzIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGNsb3NlICM2NzAxOQoKVHVlIERlYyAxOCAwODowODo1MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgSnVzdGluIEZsZXRjaGVyIGdlbmVyaWMgdGltaW5nIHBhdGNoCgkgIHNpbWlsYXIgdG8gdGhlIG9uZSBhbHJlYWR5IGFwcGxpZWQgdG8geHNsdHByb2MuCgpNb24gRGVjIDE3IDE2OjI5OjA4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB0cmVlLmM6IGFwcGxpZWQgZG9jdW1lbnRhdGlvbiBwYXRjaGVzCgkgIGZyb20gQ2hhcmxpZSBCb3plbWFuCgpUaHUgRGVjIDEzIDIxOjI0OjE2IE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy94bWxsaW50LnhtbCwgeG1sbGludC4xIC0gZG9jdW1lbnQgLS1kcm9wZHRkCgpUaHUgRGVjIDEzIDIzOjE5OjUwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeCB0aGUgeG1sU3RyZHVwKCkgdXNlZCBpbiB0aGUgcHJldmlvdXMgcGF0Y2guCgkqIHZhbGlkLmM6IGFkZGVkIC0tZHJvcGR0ZAoJKiB0cmVlLmM6IGZpeGVkIHhtbFVubGlua05vZGUgc28gaXQgYWxzbyByZW1vdmVzIHRoZSByZWZlcmVuY2VzCgkgIGZyb20gdGhlIGRvY3VtZW50IGlmIHRoZSBub2RlIGlzIGEgRFRECgpUaHUgRGVjIDEzIDE1OjU0OjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdmFsaWQuYzogY2xlYW51cCBzb21lIHN0YXRpYyBkZWNsYXJhdGlvbnMKClRodSBEZWMgMTMgMTU6MjM6MDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiByZW1vdmVkIGFub3RoZXIgc3RyZHVwKCkKCSogZG9jL0ZBUTogcmVtb3ZlZCB0aGUgSFAvVVggZW50cnkKClRodSBEZWMgMTMgMDk6NDQ6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4IGJ1ZyAjNjY4MTYgd2hlbiB2YWxpZGF0aW5nLgoJKiB4bWxsaW50LmM6IGRvbid0IHVzZSBzeXMvdGltZS5oIGlmIGNvbmZpZ3VyZSBkaWQgbm90IGZvdW5kIGl0CgpNb24gRGVjIDEwIDIxOjM5OjU1IE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2NzL3htbGxpbnQuMSwgeG1sbGludC54bWwsIHhtbGNhdGFsb2cuMSwgeG1sY2F0YWxvZ19tYW4uaHRtbCwKCXhtbGNhdGFsb2dfbWFuLnhtbAoKTW9uIERlYyAxMCAyMjowNjoxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogSGlldGFuaWVtaSBKYXJra28gcG9pbnRlZCBvdXQgdGhhdAoJICB4bWxJbml0TWVtb3J5KCkgd2FzIGRlY2xhcmVkIHR3aWNlCgpTdW4gRGVjICA5IDE0OjU5OjIzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogZG8gbm90IHJlZmVyZW5jZSBzdHJkdXAoKSAhCgkqIGNvbmZpZ3VyZS5pbiBsaWJ4bWwtMi4wLnBjLmluOiB0cnlpbmcgdG8gZml4IHRoZSBsaWJzCgkgIG9mIHRoZSB2YXJpb3VzIGNvbmZpZyBleHRyYWN0aW9uIG1vZHVsZXMKCkZyaSBEZWMgIDcgMTU6MjE6MzMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIDogcHJlcGFyaW5nIDIuNC4xMgoJKiBkb2MvKiA6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCkZyaSBEZWMgIDcgMTI6MzI6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGNsb3NlZCBidWcgIzY2MTU5CgkqIHRlc3RVUkkuYzogYWRkZWQgLS1lc2NhcGUgb3B0aW9uCgkqIGNvbmZpZ3VyZS5pbjogc29tZSBjbGVhbnVwIGZvciB4bWwyLWNvbmZpZyAtLWNmbGFncwoKVGh1IERlYyAgNiAxNTozMTozMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgdGVzdFRocmVhZHMuYzogcmVtb3ZlZCBzb21lIG1pc3BsYWNlZCBpbmNsdWRlcwoJICBvZiB4bWx2ZXJzaW9uLmgKClRodSBEZWMgIDYgMDk6MDY6MDggRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jOiBwYXRjaCBmcm9tIEdhcnkgUGVubmluZ3RvbiBmaXhpbmcgYSBwb3NzaWJsZQoJICBwcm9ibGVtIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCgpXZWQgRGVjICA1IDEzOjAxOjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuaCBwYXJzZXIuYyB0ZXN0VGhyZWFkcy5jIG1hY29zLzogaW50ZWdyYXRlZAoJICBFcmljIExhdmlnbmUgY29udHJpYnV0aW9uIHRvIGJ1aWxkIGxpYnhtbDIgb24gTWFjT1MgdXNpbmcKCSAgQ29kZVdhcnJpb3IuCgpUdWUgRGVjICA0IDE0OjEzOjQ0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBHZWVydCBLbG9vc3Rlcm1hbidzIHBhdGNoIHRvIGZpeAoJICAtLXJlcGVhdCAtLXRpbWluZyBvdXRwdXQKClRodSBOb3YgMjkgMTc6MTA6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IFJvYmluIEJlcmpvbiA8cm9iaW5Aa25vd3NjYXBlLmNvbT4gZm91bmQgYSBjYXNlCgkgIHdoZXJlIG5vbi13ZWxsZm9ybWVkIFhNTCBkZWNsYXJhY3Rpb25zIHdlcmUgbm90IGRldGVjdGVkLgoKV2VkIE5vdiAyOCAxNTo0MTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cG9pbnRlci5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIGJ1ZyBwb2ludGVkIGJ5IERhbm55IEphbXNoeQoKV2VkIE5vdiAyOCAxMDowOTo1MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcyByb2JlcnQgcG9pbnRlZCBhZ2FpbiwgeG1sSW5wdXRDYWxsYmFja0luaXRpYWxpemVkCgkgIGdldHMgcmVzZXQgYnkgeG1sQ2xlYW51cElucHV0Q2FsbGJhY2tzKCkgYW5kIHRoaXMgbWFrZXMgdGhlCgkgIGZ1bmN0aW9uIHVzZWxlc3MuIFNhbWUgZm9yIG91dHB1dC4KClR1ZSBOb3YgMjcgMTc6MjI6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogcm9iZXJ0IHBvaW50ZWQgb3V0IGEgbG9vcCBlcnJvciBpbiBjYWxsYmFjayBjbGVhbnVwcwoKTW9uIE5vdiAyNiAxNjo1NjowMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDoKCSAgbW92ZWQgeG1sR2V0TGluZU5vKCkgYW5kIHhtbEdldE5vZGVQYXRoKCkgaW50byB0aGUgbWFpbiB0cmVlIG1vZHVsZSwKCSAgdGhleSBhcmUgbm90IHJlYWxseSB0aWVkIHRvIGRlYnVnZ2luZwoKTW9uIE5vdiAyNiAxMTozMTozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTEKCSogeG1sbGludC5jOiBiZXR0ZXIgLS1jYXRhbG9ncyBkZXNjcmlwdGlvbgoKU3VuIE5vdiAyNSAxMTozNDoyNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGEgY291cGxlIG9mIHByb2JsZW1zIGluIHhtbFNldFByb3AoKQoKVGh1IE5vdiAyMiAxOToxOToxMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIHRyZWUuYyB4bWxJTy5jIHhtbG1lbW9yeS5jOiBzb21lIGNsZWFudXBzIHdoZW4gY2hhc2luZwoJICB1bmFwcHJvcHJpYXRlIHN0ZG91dCBvdXRwdXQuCgpUaHUgTm92IDIyIDEzOjU4OjE0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogRml4ZWQgYSBjb3VwbGUgb2YgbWFjcm8gZXJyb3JzIHBvaW50ZWQgb3V0CgkgIGJ5IERlbmlzIEJldXJpdmUsIGNsb3NlcyAjNjUxMTEKClR1ZSBOb3YgMjAgMTA6MzQ6MDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogaW4gY2FzZSBvZiBjb250ZW50IG1vZGVsIHZhbGlkaXR5IGVycm9yLCBkb24ndAoJICBwcmludCBpdCBpZiB2YWxpZGl0eSB3YXJuaW5ncyB3ZXJlIG5vdCByZXF1ZXN0ZWQuCgpUdWUgTm92IDIwIDA5OjMwOjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYzogYXBwbGllZCBhIGNvdXBsZSBvZiBwYXRjaGVzIGZyb20gQnJpYW4gRCBSaXBsZXkuCgkqIHBhcnNlckludGVybmFscy5jOiByZW1vdmVkIHRoZSBsYXN0IGV4aXQoKSBjYWxsLiBQcmludCBhbgoJICB1bm1hc2thYmxlIGVycm9yIG9uIHN0ZGVyciBpbnN0ZWFkIChsaWJyYXJ5IG1pc21hdGNoIGRldGVjdGlvbikKClNhdCBOb3YgMTcgMTc6MTY6NTEgTVNUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbCwgZG9jL3htbGxpbnQuMSAtIHVwZGF0ZSB4bWxsaW50IG1hbiBwYWdlIHdpdGgKCXNoZWxsIGluc3RydWN0aW9ucyBmcm9tIEhlaWtvIFJ1cHAKClRodSBOb3YgMTUgMTQ6NTM6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiB1c2UgdGhlIFVSTCBub3RhdGlvbiBmaWxlOi8vIGZvciBkZWZhdWx0IGNhdGFsb2cgcGF0aHMKCldlZCBOb3YgMTQgMTY6MDM6MDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBiZXR0ZXIgY29tbWVudHMgZm9yIF9wcml2YXRlIGZpZWxkcwoJKiB0cmVlLmM6IHJlbW92ZWQgYSBwcm9ibGVtIHdoZW4gY29weWluZyBhbiBlbnRpdHkgcmVmZXJlbmNlLgoKVHVlIE5vdiAxMyAxNjoyMzowNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvKjogdXBkYXRlZCBpbnN0cnVjdGlvbnMgYW5kIGRpZmZzIGZyb20gSm9obiBBIEZvdGhlcmluZ2hhbQoKTW9uIE5vdiAxMiAyMzo0MzoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhdm9pZCBhbiBpbmNsdWRlIHByb2JsZW0gaWYKCSAgI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPiBoYXBwZW5zIGZpcnN0IGluIGNvZGUKCSAgc2VlbXMgdG8gYmUgdGhlIGNhc2UgaW4gS0RFIGxpYnMKCk1vbiBOb3YgMTIgMjI6MzI6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwLyogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IHVwZGF0ZQoJICBmcm9tIElnb3IgZm9yIFdpbmRvd3MKCk1vbiBOb3YgMTIgMTA6MTk6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IEdhcnkgUGVubmluZ3RvbiBwb2ludGVkIG91dCBhIG1pc3NpbmcgcHJlZml4CgpTYXQgTm92IDEwIDEyOjU1OjQyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4xMAoJKiBkb2MvKjogdXBncmFkZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKClNhdCBOb3YgMTAgMTI6MzM6MzggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXggY29tbWVudCBpbiBzY3JpcHRzIGVsZW1lbnQgcGFyc2luZy4KCSogcmVzdWx0L0hUTUwvZG9jMyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMuCgpTYXQgTm92IDEwIDExOjE4OjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBhbm90aGVyIFVSSSBidWcgZml4ICM2MzMzNiwgdXNpbmcgSm9lbCBZb3VuZyBwYXRjaC4KClNhdCBOb3YgMTAgMTE6MDc6MjYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oOiBhZGQgeG1sR2V0Tm9kZVBhdGgoKQoJICBhIGNsZWFuZWQgdXAgdmVyc2lvbiBvZiB0aGUgUHdkIHNoZWxsIHN0cmluZyBnZW5lcmF0aW9uLgoKRnJpIE5vdiAgOSAwMDozNDoxMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogdHJ5aW5nIHRvIGZpeCBuYW1lc3BhY2VzICsKCSAgdmFsaWRhdGlvbiBwcm9ibGVtcyBmb3IgZ29vZCwgY2xvc2luZyAjNjM2MTkgaW4gdGhlIHByb2Nlc3MKCSogcmVzdWx0L3ZhbGlkL2RpYS54bWwgdGVzdC92YWxpZC9kaWEueG1sOiB0aGUgRGlhIHRlc3Qgd2FzCgkgIHdyb25nIGluIHRoaXMgcmVzcGVjdCwgZml4ZWQgaXQuCgpUaHUgTm92ICA4IDE4OjMxOjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogTW9ydXMgV2FsdGVyIHBhdGNoIHRvIGFsbG93IC0tZm9ybWF0IGFuZCAtLWVuY29kZQoKVGh1IE5vdiAgOCAxNDo1MjoxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBTdGVmYW4gS29zdCBwcm92aWRlZCBhbiBoZWxwIGNvbW1hbmQgZm9yIHRoZSBzaGVsbAoKV2VkIE5vdiAgNyAxNDozMjo1NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBIZWlrbyBSdXBwIHBvaW50ZWQgdGhhdCB0aGUgc2hlbGwgd291bGQgY3Jhc2gKCSAgb24gZW1wdHkgbm9kZXNldHMgcmV0dXJucy4KCldlZCBOb3YgIDcgMTM6NTI6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IFdlaXFpIEdhbyBwb2ludGVkIG91dCB0aGF0IHhtbGNhdGFsb2cKCSAgbWlnaCBuZWVkIHRoZSBoaXN0b3J5IGxpYnJhcmllcwoKVHVlIE5vdiAgNiAyMzo0OTowOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgdGVzdC9IVE1ML2x0Lmh0bWwgcmVzdWx0L0hUTUwvbHQuaHRtbCo6CgkgIGhhbmRsZSB0aGUgY2FzZSBvZiA8IGluIHF1b3RlZCBhdHRyaWJ1dGVzLCBCYXN0aWFuIEtsZWluZWlkYW0KClR1ZSBOb3YgIDYgMTY6MjE6MzMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWxlYXNpbmcgMi40LjkKCSAgZml4aW5nIGNhdGFsb2cgYnJlYWthZ2VzCgkqIE1ha2VmaWxlLmFtIGNhdGFsb2cuYyByZXN1bHQvY2F0YWxvZ3MvY2F0YWwgCgkgIHJlc3VsdC9jYXRhbG9ncy9teWNhdGFsb2cuKiB0ZXN0L2NhdGFsb2dzL2NhdGFsKjoKCSAgZml4ZWQgbW9yZSBwcm9ibGVtcyBpbiBjYXRhbG9nIHN1cHBvcnQsIGFkZGVkIG1vcmUgcmVncmVzc2lvbiB0ZXN0cwoJICBmb3IgYm90aCBYTUwgYW5kIFNHTUwgY2F0YWxvZyBoYW5kbGluZwoKTW9uIE5vdiAgNSAyMDoyNjo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhcHBsaWVkIGFuIGltcHJvdmVtZW50IHRvIHhtbEdldExpbmVObygpIGZyb20KCSAgS2VpdGggSXNkYWxlCgpNb24gTm92ICA1IDE1OjIwOjE2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZG9oaGhoIFhNTCBjYXRhbG9nIGFkZCBhbmQgcmVtb3ZlIG9wcyB3ZXJlIGJyb2tlbiB0b28uCgkgIFNpZGUgZWZmZWN0IG9mIHRoZSBwcm9ncmVzc2l2ZSBjYXRhbG9nIGxvYWRpbmcKCk1vbiBOb3YgIDUgMTI6NDA6NTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNvbmZleGVjZGlyIGFuZCBjb25mZXhlY19EQVRBIHdlcmUgZGVmaW5lZCB0d2ljZQoJICBwb2ludGVkIG91dCBieSBLYXJsIEVpY2h3YWxkZXIKClN1biBOb3YgIDQgMjM6MTg6MzQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jOiBhdm9pZCB1bmxpbmsoKSBhbmQgdXNlIHJlbW92ZSgpIGluc3RlYWQuCgpTdW4gTm92ICA0IDIzOjEyOjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBjbGVhbnVwCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiB1cGRhdGVkIHdpdGggMi40LjgKClN1biBOb3YgIDQgMjE6MTc6MjQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYyBnbG9iYWwuZGF0YSBnbG9iYWxzLmMgdGVzdFRocmVhZHMuYzogZml4IGJ1ZyAjNjM3NTIKCSAgb2YgY29tcGlsaW5nIGxpYnhtbCB3aXRoIGEgbm9uIHN0YW5kYXJkIHNldCBvZiBvcHRpb25zCgpTdW4gTm92ICA0IDEzOjExOjQxIE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQKCgkqIGRvYy94bWxsaW50LnhtbCwgeG1sbGludC4xIC0gdXBkYXRpbmcgeG1sbGludCBtYW4gcGFnZSB0bwoJZG9jdW1lbnQgLS1zZ21sIG9wdGlvbiwgZml4aW5nIGdub21lIGJ1Z3ppbGxhICM2MzM4MgoKU3VuIE5vdiAgNCAyMDo1Njo1MyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggY2F0YWxvZy5jOiBGaXhlZCBTR01MIGNhdGFsb2dzCgkgIGJyZWFrYWdlIG9mIDIuNC43LCBhZGRlZCBhIGNvdXBsZSBvZiByZWFsbHkgbmVlZGVkIEFQSXMKCSAgbGlrZSB4bWxDYXRhbG9nSXNFbXB0eSgpIGFuZCB4bWxOZXdDYXRhbG9nKCkKCSogeG1sY2F0YWxvZy5jOiB1cGRhdGVkIC0tc2dtbCAtLW5vb3V0IHRvIGJlIGEgc3VpdGFibGUgcmVwbGFjZW1lbnQKCSAgZm9yIGluc3RhbGwtY2F0YWxvZwoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuOAoKVGh1IE5vdiAgMSAxNToyOTozMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBtb3JlIGluY2x1ZGUKCSAgY2xlYW51cHMsIGV4cG9ydCBjbGVhbmx5IG9uZSBodG1sIG91dHB1dCArIGZvcm1hdCBmdW5jdGlvbi4KClRodSBOb3YgIDEgMTQ6MTI6MTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHJlbW92ZWQgaW5pdEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jIGNhbGwgZnJvbQoJICB4bWxJbml0UGFyc2VyKCkgc2luY2UgaXQgY291bGQgZGVzdHJveSBwcmV2aW91cyBjYWxscyB0bwoJICB4c2x0U2V0R2VuZXJpY0Vycm9yRnVuYygpIGVmZmVjdHMKClRodSBOb3YgIDEgMDk6Mzc6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oOiBib29sIGNhbiBiZSBhIHJlc2VydmVkCgkgIGtleXdvcmQuCgpXZWQgT2N0IDMxIDE4OjUwOjA4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwCgkqIHRocmVhZHMuYzogY2xlYW51cCB0b28KCSogeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBhZGRlZCB4bWxOb05ldEV4dGVybmFsRW50aXR5TG9hZGVyKCkKCSAgZnJvbSB4c2x0cHJvYwoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHRyeWluZyB0byBicmVhayBhCgkgIGRlcGVuZGVuY3kgbG9vcC4KClR1ZSBPY3QgMzAgMTg6Mzg6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBKdXN0aW4gRmxldGNoZXIgcG9pbnRlZCBvdXQgdGhhdCB4bWxQYXJzZVhNTENhdGFsb2cKCSAgd2FzIG5vdCB1c2VkIGFueW1vcmUgIQoKVHVlIE9jdCAzMCAxMzozMzoxMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuNwoJKiBNYWtlZmlsZS5hbSBkb2MvTWFrZWZpbGUuYW06IHN3aXRjaGVkIHRvIHRoZSBsYXRlc3QgeG1sbGludAoJICBtYW51YWwgcGFnZSBmcm9tIEpvaG4KCSogZG9jLyo6IHVwZGF0ZWQgdGhlIGRvYyBhbmQgcmVidWlsdCB0aGUgZ2VuZXJhdGVkIHBhZ2VzCgpUdWUgT2N0IDMwIDExOjMxOjE5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGNsb3NpbmcgYnVnICM2MjcxMSwgdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyCgkgIGNsb3NlIHN0ZGluIG9yIHN0ZG91dC4KClR1ZSBPY3QgMzAgMTA6NDY6MTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IHNlY29uZCBwYXNzIGF0IGZpeGluZyAjNjMzMzYsIHVzaW5nIEpvZWwgWW91bmcKCSAgZmluYWwgcGF0Y2guIGxvb2tzIG9rYXkuCgpUdWUgT2N0IDMwIDAwOjU2OjA1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jIGluY2x1ZGUvbGlieG1sL3VyaS5oOiB0cnlpbmcgdG8gY2xlYXIgIzYzMzM2CgkgIGFsbG93aW5nIHRoZSBlc2NhcGluZyByb3V0aW5lIHRvIHBhcnNlIHVuY29uZm9ybWFudAoJICBVUkktUmVmZXJlbmNlcy4KCk1vbiBPY3QgMjkgMTk6MDk6NDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdm1zL3JlYWRtZS52bXMgdm1zL2J1aWxkX2xpYnhtbC5jb20gbmFub2Z0cC5jIAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IGEgZmV3IFZNUyB1cGRhdGVzIGZyb20KCSAgSm9obiBBIEZvdGhlcmluZ2hhbQoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIHhtbElPLmM6IGFkZGVkIHhtbENsZWFudXBJbnB1dENhbGxiYWNrcygpCgkgIGFuZCB4bWxDbGVhbnVwT3V0cHV0Q2FsbGJhY2tzKCkgZm9yIHRoZSBQZXJsIGJpbmRpbmcgcGVvcGxlLgoKTW9uIE9jdCAyOSAxMjo0NDoxNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBnbG9iYWxzLmMgRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBlcnJvci5jOgoJICBhcHBseSBmaXhlcyB0byBjbG9zZSAjNjMyNzEgYW5kIGF2b2lkIHNlZ2ZhdWx0cyB3aGVuCgkgIHRoZSBlcnJvciByb3V0aW5lIGdldHMgY2FsbGJlZCBiZWZvcmUgeG1sSW5pdFBhcnNlcigpCgkgIGdldCBjYWxsZWQuCgkqIG5hbm9mdHAuYyBlcnJvci5jOiBBcHBsaWVkIHBhdGNoZXMgZnJvbSBKdXN0aW4gRmxldGNoZXIKCSAgY29ycmVjdGluZyBzb21lIHhtbEdlbmVyaWNFcnJvciBtaXN1c2VzLgoKU2F0IE9jdCAyNyAxNDowNDo0NSBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSpkb2MveG1sbGludC54bWwsIGRvYy94bWxsaW50LjEKCU5ldyBhbmQgaW1wcm92ZWQgbWFuIHBhZ2UgZm9yIHhtbGxpbnQgLSAueG1sIGlzIHRoZSBvcmlnaW5hbCwgLjEKCWlzIHRoZSBnZW5lcmF0ZWQgbWFuIHBhZ2UKCldlZCBPY3QgMjQgMTQ6MzQ6MjUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9zaXRlLnhzbCBkb2MvKi5odG1sIGRvYy9NYWtlZmlsZS5hbTogbm93IGF1dG9nZW5lcmF0ZQoJICB0aGUgd2ViIHNpdGUgZnJvbSB0aGUgbWFpbiBIVE1MIGRvY3VtZW50LgoKVHVlIE9jdCAyMyAxNDozMjowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGFuIGVycm9uZW91cyB2YWxpZGF0aW9uIGJ1ZyB3aGVuIFBFIHJlZnMKCSAgb2NjdXJzIGluIGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcyByZWZlcmVuY2VkIGZyb20gdGhlCgkgIGludGVybmFscyBzdWJzZXQKCSogdGVzdC92YWxpZC9pbmRleC54bWwgdGVzdC92YWxpZC9kdGRzL25pdGYtMi01LmR0ZAoJICB0ZXN0L3ZhbGlkL2R0ZHMvTmV3c01MdjEuMC5kdGQgcmVzdWx0L3ZhbGlkL2luZGV4LnhtbCo6CgkgIGFkZGVkIHRoZSBhc3NvY2lhdGVkIHRlc3RjYXNlLCBpdCdzIGEgbmljZSBvbmUuCgkqIEhUTUxwYXJzZXIuYzogZ2VuZXJhdGUgdGhlIERURCBub2RlIGFzIEhUTUwgc3RpbGwgLi4uCgkqIEhUTUx0cmVlLmM6IGZpeGVkIGVycm9ycyBpbiBTZXQvR2V0TWV0YUVuY29kaW5nIAoKTW9uIE9jdCAyMiAxNDoyMDoxNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyBpbiBodG1sTmV3RG9jKCkKCk1vbiBPY3QgMjIgMTE6MzI6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QvdGhyZWFkcy8qOiBhZGRlZCBlbnRpdGllcyB0ZXN0aW5nIHRvIHRoZSBUaHJlYWQgdGVzdAoJKiB0ZXN0VGhyZWFkcy5jOiBtYWtlIHRoZSB0ZXN0IHJlYXNvbmFibGUKCSogRE9DQnBhcnNlci5jOiBmaXggdGhlIERURCBwdWJsaWMgYW5kIHN5c3RlbSBJRAoJKiB4bWxsaW50LmM6IGFkZGVkIC0tc2dtbCBmb3IgU0dNTCBEb2NCb29rIGltcG9ydGluZwoJKiBNYWtlZmlsZS5hbTogYWRkZWQgRG9jYnRlc3RzIHRhcmdldAoKRnJpIE9jdCAxOSAxMTo0NzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jOiB1c2Ugb25seSAiYW5vbnltb3VzQCIgc3RyaW5nIGZvciBhbm9ueW1vdXMgcGFzc3dkcwoJKiB0ZXN0VGhyZWFkcy5jOiByZW1vdmVkIGJvZ3VzIGluY2x1ZGUKClRodSBPY3QgMTggMTY6NTY6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHZhbGlkLmMgcmVzdWx0L3ZhbGlkL3Jzcy54bWwgcmVzdWx0L3ZhbGlkL3Jzcy54bWwuZXJyOgoJICBmaXhlZCBhIHZlcnkgc2VyaW91cyAobG9vcGluZykgdmFsaWRhdGlvbiBidWcKCldlZCBPY3QgMTcgMTE6NTY6MjUgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaCB0aHJlYWRzLmMKCSAgdGVzdFRocmVhZHMuYzogZmFyIG1vcmUgdGVzdGluZywgY2xlYW5pbmcgdXAgYnVncwoJKiAqLmMgOiBtYWtlIHN1cmUgZ2xvYmFscy5oIGlzIGFsd2F5cyBpbmNsdWRlZC4KCldlZCBPY3QgMTcgMTc6NDE6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogdHJ5IHRvIGdldCByaWQgb2YgcGFyc2VyIGxvb3BzIGZvciBnb29kLgoKV2VkIE9jdCAxNyAxMzoyOTowMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBzb21lIGJ1Z3MgaW4gQ0ZMQUdTIHBhc3NpbmcuCgkqIHRlc3QvdGhyZWFkcyBNYWtlZmlsZS5hbSB0ZXN0VGhyZWFkcy5jOiBhZGRlZCBhIHNwZWNpZmljCgkgIHRocmVhZGVkIHRlc3QgY2FzZSAocmVhbGx5IG5hc3R5LCBndWFyYW50ZWVkKS4KClR1ZSBPY3QgMTYgMjM6MDE6NDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogc2VyaW91cyBjbGVhbnVwIG9uIHRoZSBtYW5hZ2VtZW50IG9mIHRoZQoJICBYTUwgY2F0YWxvZyB0cmVlLCBtb3JlIHRlc3RzIGRvbmUsIGVzcGVjaWFsbHkgd2l0aAoJICB0aGUgY2F0YWxvZyBQSS4KClR1ZSBPY3QgMTYgMDg6NDM6NDMgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBhdm9pZCBhIHByb2JsZW0gaW4gY2F0YWxvZyBjbGVhbnVwIG9uIFNNUCBpZgoJICBjYXRhbG9ncyB3ZXJlIG5vdCBpbml0aWFsaXplZC4KClR1ZSBPY3QgMTYgMTQ6MzM6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyB4cGF0aC5jOiB0cnlpbmcgdG8gY2xlYW51cCB0aGUgbm90IHRocmVhZCBzYWZlCgkgIHBhcnRzIG9mIHRoZSBsaWJyYXJ5LgoKTW9uIE9jdCAxNSAxNDozMDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGNvbmZpZ3VyZS5pbiBnbG9iYWwuZGF0YTogbWFrZQoJICB0aGUgYWxsb2NhdGlvbiBiZSBwZXItdGhyZWFkIGEgY29uZmlndXJlIG9wdGlvbgoJKiBlbmNvZGluZy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBmaXhlZCBjb21waWxhdGlvbgoJICBlcnJvcnMKCk1vbiBPY3QgMTUgMTI6NDU6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBOb3JtIHJlcG9ydGVkIHRoYXQgYSBmZXcgbGluZXMKCSAgYWRkZWQgd2VyZSBicmVha2luZyBsaWJ4c2x0IGNvbXBpbGUsIHJlbW92ZWQgdGhlbSBmb3Igbm93CgpTdW4gT2N0IDE0IDA1OjU1OjAxIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRocmVhZHMuYzogZGVidWdnZWQgYW5kIGZpeGVkCgkgIGluaXRpYWxpemF0aW9uIHByb2JsZW1zIHdoaWNoIHdlcmUgZ2l2aW5nIHRyb3VibGVzIG9uIFNNUAoJICBib3hlcy4KClNhdCBPY3QgMTMgMTY6MTc6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBtaXNzaW5nIGdsb2JhbHMuaAoKU2F0IE9jdCAxMyAxNDoxNTowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBhZGRlZCBhIGNvdXBsZSBvZiBzdGFuZGFyZCBpbmNsdWRlcy4KClNhdCBPY3QgMTMgMTE6MDg6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL1NBWC5oIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBIVE1McGFyc2VyLmMgU0FYLmMgZXJyb3IuYyBnbG9iYWxzLmMKCSAgbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGVzdERvY2Jvb2suYwoJICB0ZXN0SFRNTC5jIHRlc3RTQVguYyB0cmVlLmMgdXJpLmMgeGxpbmsuYyB4bWxtZW1vcnkuYzoKCSAgQXBwbGllZCB0aGUgbGFzdCBwYXRjaGVzIGZyb20gR2FyeSwgY2xlYW51cCwgYWN0aXZhdGVkIHRocmVhZGluZwoJICBhbGwgdXNlciBhY2Nlc3NpYmxlIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG5vdyBoYW5kbGVkIGluIGdsb2JhbHMuW2NoXQoJICBTdGlsbCBhIGJpdCByb3VnaHQgYnV0IG1ha2UgdGVzdHMgcGFzc2VzIHdpdGggZWl0aGVyIAoJICAtLXdpdGgtdGhyZWFkcyBkZWZpbmVkIGF0IGNvbmZpZ3VyZSB0aW1lIG9yIG5vdC4KCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogYWRkZWQgZ2xvYmFscy5bY2hdIGFuZCB0aHJlYWRzCgkgIGxpbmtpbmcgb3B0aW9ucwoKRnJpIE9jdCAxMiAxOToyNTo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGdsb2JhbHMuYyAgaW5jbHVkZS9saWJ4bWwvdGhyZWFkcy5oCgkgIHRocmVhZHMuYyBidWlsZF9nbG9iLnB5IGdsb2JhbC5kYXRhIHhtbGNhdGFsb2cuYyBhY2NvbmZpZy5oCgkgIGNvbmZpZ3VyZS5pbjogc3RhcnRlZCBpbnRlZ3JhdGluZyB0aGUgY29yZSBvZiB0aGUgdGhyZWFkIHN1cHBvcnQKCSAgbm90IGFjdGl2YXRlZCB5ZXQgYnV0IGhhbGYgaW50ZWdyYXRlZC4gVGhlIGNvZGUgc2hvdWxkIHN0aWxsCgkgIGNvbXBpbGUgYW5kIHdvcmsgYW55d2F5LgoKRnJpIE9jdCAxMiAwMDo1MzowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBjYXRhbG9nLmMgZGVidWdYTUwuYyBlbnRpdGllcy5jIG5hbm9mdHAuYwoJICBwYXJzZXIuYyB2YWxpZC5jIHhtbG1lbW9yeS5jIHhwYXRoLmMgeHBvaW50ZXIuYzogc3RhcnRlZAoJICBpbnRlZ3JhdGluZyB0aGUgbm9uLWNvbnRyb3ZlcnNpYWwgcGFydHMgb2YgR2FyeSBQZW5uaW5ndG9uCgkgIG11bHRpdGhyZWFkIHBhdGNoZXMKCSogY2F0YWxvZy5jOiBjb3JyZWN0ZWQgYSBzbWFsbCBidWcgaW50cm9kdWNlZAoKVGh1IE9jdCAxMSAyMDo1ODoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaDogdmVyeSBzZXJpb3VzIGNsZWFudXAsCgkgIGlzb2xhdGluZyB1bnBvcnRhYmxlIGNvZGUgYW5kIGFzIG11Y2ggYXMgcG9zc2libGUgdGhlIGFjY2Vzc2VzCgkgIHRvIHRoZSBnbG9iYWwgc2hhcmVkIGNhdGFsb2cuIE1heSBuZWVkIG1vcmUgdGVzdGluZyAhCgpUaHUgT2N0IDExIDExOjEwOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oIGRlYnVnWE1MLmMgdHJlZS5jOiBpbnRlZ3JhdGluZwoJICBLZWl0aCBJc2RhbGUgcGF0Y2hlcyBmb3IgdGhlIFhTTFQgZGVidWdnZXIgaW50ZXJmYWNlcy4gU29tZQoJICBjbGVhbnVwCgpUaHUgT2N0IDExIDA4OjQ0OjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogdXBkYXRlIGZyb20gVG9iaWFzIFBldGVycyBmb3IgMi40LjUKCSogRE9DQnBhcnNlci5jOiBnZW5lcmF0ZSBsaW5lIG51YmVycyBpbiBlbGVtZW50cwoKV2VkIE9jdCAxMCAxMTozNTo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjYgcmVsZWFzZQoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoJKiBpbmNsdWRlL2xpYnhtbC8qLmggKi5jOiBmaXhlZCBhIG51bWJlciBvZiB0ZWgvdGhlIHdpZGh0L3dpZHRoIHR5cG9zCgpNb24gT2N0ICA4IDIwOjM4OjI3IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sLCB4bWxjYXRhbG9nLjEsIHhtbGNhdGFsb2dfbWFuLmh0bWwKCWFkZGluZyBkb2N1bWVudGF0aW9uIGZvciBEVidzIHN1cGVyY2F0YWxvZyBzdXBwb3J0CgpNb24gT2N0ICA4IDE3OjAwOjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggY2F0YWxvZy5jIHhtbGNhdGFsb2cuYzogYWRkaW5nIFNHTUwKCSAgc3VwZXIgY2F0YWxvZyBzdXBwb3J0IGFkZGluZyBvbmUgQVBJIGFuZCBvbmUgZmxhZyAtLXNnbWwgdG8KCSAgeG1sY2F0YWxvZwoKU3VuIE9jdCAgNyAxNjo0Mzo1NyBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZy4xCglPbmUgbW9yZSBjcmFjayBhdAoJaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDM5MiAKClN1biBPY3QgIDcgMTg6NDc6MDIgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiB4cGF0aC5jOiBpbXBsZW1lbnRlZCB4bWxYUGF0aE9iamVjdENvcHkgZm9yIGV4dGVybmFsIG9iamVjdHMKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeG1sWFBhdGhTdGFja0lzRXh0ZXJuYWwKClNhdCBPY3QgIDYgMTY6MjU6NTIgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZ19tYW4uaHRtbCwgeG1sY2F0YWxvZy4xCglmaW5pc2hpbmcgdXAgZml4IHRvCglodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzkyLCBtYWtpbmcKCXRoZSB4bWxjYXRhbG9nIG1hbiBwYWdlIGRpc3BsYXkgbW9yZSBlbGVnYW50bHkKClNhdCBPY3QgIDYgMTU6Mjc6MTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogY2xvc2luZyBidWcgIzYxODMyCgkqIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBhIHdhcm5pbmcKClNhdCBPY3QgIDYgMTU6MDc6MTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyAjNjE2NzMgcGFydCBJLCBkbyBub3QgbG9vc2UgZG9jIGluZm9ybWF0aW9uCgkgIHdoZW4gY29weWluZyByZXN1bHQgdmFsdWUgdHJlZXMuCgpTYXQgT2N0ICA2IDExOjU4OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gaGFyZGVuIHRoZSBYUGF0aCBpbnRlcnByZXRlcgoKRnJpIE9jdCAgNSAyMDozNzo1MSBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2cuMSB1cGRhdGVkIHVzaW5nIGEgbmV3IHN0eWxlc2hlZXQgdG8gYWRkcmVzcywgaW4KCXBhcnQsIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzOTIKCkZyaSBPY3QgIDUgMjM6MzU6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyOiByZXBhaXJlZCBhbm90aGVyIGxvb3AgcHJvYmxlbQoKRnJpIE9jdCAgNSAxMToxNjoyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGFwcGxpZWQgZml4IGZyb20gTWF0aGlhcyBIYXNzZWxtYW5uIGFib3V0IGEgYnVnIGluIFVSSQoJICBwYXJzaW5nLgoJKiB4cGF0aC5jOiBmaXggYnVnICM2MTI5MSB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIG5vZGUgaXMKCSAgbWlzc2luZyBmcm9tIHRoZSBuYW1lc3BhY2UgYXhpcy4KCSogdHJlZS5jOiByZWZ1c2UgdG8gY3JlYXRlIG5hbWVzcGFjZXMgbm9kZXMgd2l0aCBwcmVmaXggInhtbCIKClRodSBPY3QgIDQgMTY6NDc6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBvdWNoIGEgbm9uLWRlZmluZWQgbmFtZXNwYWNlIGNvdWxkIGxlYWQgdG8gYSBjcmFzaCwKCSAgZml4ZWQgIzYxMjE1CgpUaHUgT2N0ICA0IDE2OjI0OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xvc2VkIGJ1ZyAjNjEwNTQKCldlZCBPY3QgIDMgMTU6MTk6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBjbG9zaW5nICM2MDcwOAoKVHVlIE9jdCAgMiAxNTo1MjowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYzoKCSAgYWRkaW5nIHhtbFNBWFBhcnNlRmlsZVdpdGhEYXRhIGZvbGxvd2luZyBNYXJjbyBTdGlwZWsgc3VnZ2VzdGlvbgoKVHVlIE9jdCAgMiAxMToyNzo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogY2xvc2UgYnVnICM2MTU1MCB3aGVuIHhtbDogd2Fzbid0IGNvbnNpZGVyZWQgYSBuYW1lc3BhY2UKClR1ZSBPY3QgIDIgMTE6MTg6MzIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IElnb3IgWmxhdGtvdmljIHBhdGNoZXMKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogZml4ZWQgdHlwb3MKCk1vbiBPY3QgIDEgMDk6MzQ6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogSnVzdGluIEZsZXRjaGVyIHByb3ZpZGVkIGNsZWF1cCBjb2RlIGluIGNhc2UKCSAgSEFWRV9TVEFUIGlzIG5vdCBkZWZpbmVkCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogSWdvciBabGF0a292aWMgc3VnZ2VzdGVkIHRvIGhhdmUKCSAgSEFWRV9TVEFUIGRlZmluZWQgdGhlcmUKClNhdCBTZXAgMjkgMDA6MTU6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjYXRhbG9nLmMgLSBmaXhlZCB0eXBpbmcgZXJyb3IgcmVwb3J0ZWQgYnkgTS4gQmFycm9zCgpTdW4gU2VwIDIzIDIxOjAyOjM5IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiB4bWxsaW50LmMgLSBmaXhpbmcgdHlwbwoKU2F0IFNlcCAyMiAxMDowMDowMCBIS1QgMjAwMSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYzogc21hbGwgZW5oYW5jZW1lbnQgdG8gcHJldmVudCBsb29wIG9uCgkgIHVucmVjb2duaXphYmxlIGRhdGEKCkZyaSBTZXAgMjEgMTE6NDU6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBhcHBseWluZyBwYXRjaCBmcm9tIGJ1ZyAjNjA3NTcgdGhpcwoJICBzaG91bGQgY2xvc2UgaXQKClRodSBTZXAgMjAgMTU6NTQ6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2Ygd2FybmluZwoJKiB4cGF0aC5jOiB0cnkgdG8gc29sdmUgdGhlIGxpbmtpbmcgcHJvYmxlbSBvbiBwbGF0Zm9ybXMKCSAgbmVlZGluZyB0cmlvIHRvIGNvbXBpbGUKCldlZCBTZXAgMTkgMTA6MDE6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBiYWNraW5nIHVwIG5vbi1kb2N1bWVudGVkIGNoYW5nZXMKCSAgY29tbWl0ZWQgd2l0aG91dCByZXZpZXcgb3IgYXByb3ZhbCBieSBKZW5zIEZpbmtlIDxqZW5zQGdub21lLm9yZz4KCSogSEFDS0lORzogbWFkZSAxMDAlIGNsZWFyIHRoYXQgbm8gY29tbWl0IHNob3VsZCBiZSBkb25lIGRpcmVjdGx5CgpNb24gU2VwIDE3IDE4OjUyOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IEpvZSBPcnRvbiBwcm92aWRlZCBhIHBhdGNoIGZpeGluZyBhIHByb2JsZW0KCSAgd2hlbiBpY29udiBpcyBzcGVjaWZpZWQgdG8gYmUgaW4gYSBub24tc3RhbmRhcmQgZGlyZWN0b3J5CgkgIGJ1dCB3YXNuJ3QgZXhwb3J0ZWQgaW4geG1sMi1jb25maWcgLS1jZmxhZ3MKCkZyaSBTZXAgMTQgMTk6MzI6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogbGV0J3Mgc2hpcCAyLjQuNSBiZWZvcmUgZ2V0dGluZyB0b28gbXVjaAoJICB0cm91YmxlcyB3aXRoIDIuNC40IGVycm9ycy4KCkZyaSBTZXAgMTQgMTI6MjY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgZW50aXRpZXMuYzogZG8gbm90IG91dHB1dCBoZXhhZGVjaW1hbCBjaGFycmVmcwoJICB3aGVuIHNlcmlhbGl6aW5nIEhUTUwgc2luY2Ugc29tZSB2ZXJzaW9uIG9mIE5ldHNjYXBlIGNhbid0CgkgIGdyb2sgaXQsIGdlbmVyYXRlIGRlY2ltYWwgb25lcy4KCSogcmVzdWx0L0hUTUwvZG9jMy5odG06IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byBwcmV2aW91cyB0ZXN0CgkqIHBhcnNlckludGVybmFscy5jOiByZXBhaXIgeG1sS2VlcEJsYW5rc0RlZmF1bHQoKSBicm9rZW4gaW4gMi40LjQKClRodSBTZXAgMTMgMTM6MzQ6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IGRvaGggZ2VuZXJhdGVkIHRoZSB3cm9uZyBpbmNsdWRlIHBhdGggOi0oCgkqIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogcmUtZG9oaCBmb3Jnb3QgdGhlIG5ldyBtYW5wYWdlIDotKAoKV2VkIFNlcCAxMiAyMjoxNDo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoJUmVsZWFzZWQgMi40LjQKCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJICBsaWJ4bWwtMi4wLnBjLmluOiBtb3ZlZCBpbmNsdWRlcyB0byBpbmNsdWRlZGlyL2xpYnhtbDIvbGlieG1sLAoJICB1cGRhdGVkIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdHMgc3lzdGVtcyBhY2NvcmRpbmdseQoKV2VkIFNlcCAxMiAyMDo0OTozMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuNC40CgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpXZWQgU2VwIDEyIDE2OjU4OjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiB0cmllZCB0byBpbmNvcnBvcmF0ZSBjb21tZW50cwoJICBmcm9tIGJ1ZyAjNTkyMjAKClR1ZSBTZXAgMTEgMTE6MjU6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHJlc3VsdC9ub2VudC93bWwueG1sOiBmaXhlZCBidWcgIzU5OTgxIHJlbGF0ZWQKCSAgdG8gaGFuZGxpbmcgb2YgJyYnIGluIGF0dHJpYnV0ZXMgd2hlbiBlbnRpdGllcyBhcmUgc3Vic3RpdHVlZAoKTW9uIFNlcCAxMCAyMjoxNDo0MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOgoJICBUcmllZCB0byBjbG9zZSBidWcgIzYwMTMxCgpNb24gU2VwIDEwIDIwOjQ2OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZml4ZWQgYSBidWcgaW4gdGhlIEhUTUwgcGFyc2VyIGludHJvZHVjZWQgU2VwICA5CgpNb24gU2VwIDEwIDIwOjEzOjA5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZml4aW5nIGJ1ZyAjNTk5NDYgb24geG1sbnM9IiIKCk1vbiBTZXAgMTAgMTY6Mzk6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggU0FYLmM6IGZpeGluZyBidWcgNTk3MzIsIHNpbXBsZQoJICBidXQgYWxsb2NhdGVzIGEgbmV3IGVycm9yIGNvZGUuCgpTdW4gU2VwICA5IDEwOjMzOjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IEpvaG4gRmxlY2sgZml4ZWQgdHlwb3MgaW4gdGhlIG9wdGlvbnMgb3V0cHV0CgkqIHBhcnNlci5jIFNBWC5jOiBmaXggaWdub3JhYmxlIHdoaXRlIHNwYWNlIFNBWCBzZWxlY3Rpb24KClNhdCBTZXAgIDggMTE6NDM6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IFN0ZXZlIFVuZGVyd29vZCBmb3VuZCB0aGUgcG9zc2liaWxpdHkgb2YgYW4KCSAgaW5pbml0ZSBsb29wIGluIGNhc2Ugb2YgZXJyb3IuCgpGcmkgU2VwICA3IDExOjM1OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogTmVlZCAkKElDT05WX0xJQlMpIGluIGxpYnhtbDJfbGFfTElCQURECgpXZWQgU2VwICA1IDE3OjQ3OjQzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogd2FybiBpZiB2ZXJzaW9uIGlzIG5vdCAxLjAgYnV0IGl0J3Mgbm90CgkgIHN0cmljdGx5IHNwZWFraW5nIGFuIGVycm9yIGFmdGVyIGFuYWx5emluZyB0aGUgc3BlYwoKTW9uIFNlcCAgMyAxMDowNzowMyBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSpkb2MvY2F0YWxvZy5odG1sIC0gYWRkIGxpbmsgdG8gdGhlIGh0bWwgdmVyc2lvbiBvZiB0aGUKCW1hbiBwYWdlLCBvdGhlciBsaW5ndWlzdGljIGNsZWFudXBzCgpNb24gU2VwICAzIDA5OjEwOjA4IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sLCB4bWxjYXRhbG9nX21hbi5odG1sLCB4bWxjYXRhbG9nLjEKCWFkZGluZyBkb2N1bWVudGF0aW9uIGZvciB4bWxjYXRhbG9nLiBOb3RlOiB4bWxjYXRhbG9nLjEsIHRoZSBtYW4KCWZpbGUsIGhhcyBub3QgeWV0IGJlZW4gaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLgoKU2F0IFNlcCAgMSAxODoxNzo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiByZW1vdmVkIGEgZHVwbGljYXRlIGFmZmVjdGF0aW9uIEp1c3RpbiBGbGV0Y2hlcgoKRnJpIEF1ZyAzMSAyMjowMjoxMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBBcm1pbiBTYW5kZXIgcG9pbnRlZCBhIHBvc3NpYmxlIHRleHQgY29hbGVzY2luZyAKCSAgcHJvYmxlbSwgY29tcGxldGVkIGhpcyBwYXRjaC4KCkZyaSBBdWcgMzEgMTg6MzA6MjggQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpb25hbi5jOiBGaXhlZCBjb25zdCBhbmQgdm9sYXRpbGUgcmUtZGVmaW5pdGlvbiBwcm9ibGVtCgpGcmkgQXVnIDMxIDE2OjUxOjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuNCBwYXJzZXIuYzogZG9jIHVwZGF0ZXMgZnJvbSBIZWlrbyBSdXBwCgkqIHBhcnNlckludGVybmFscy5jOiAyIHNhbml0eSBjaGVja3MgZnJvbSBIZWlrbyBSdXBwCgpUdWUgQXVnIDI4IDIyOjM4OjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBcm1pbiBTYW5kZXIgdG8gbWFrZSBzb21lIHBvaW50ZXJzCgkgIGNvbnN0IGluIHhtbENvcHlOb2RlKCkKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRlZCBmaXggdG8gdGhlIGhlYWRlcgoKTW9uIEF1ZyAyNyAxNjoyNDo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogaHVtLCByZXN0cmljdCB0aGUgaW50ZWdlciB1c2FnZSBnY2MgYnVnIHdvcmthcm91bmQKCSAgdG8gb25seSBnY2MgY29tcGlsZXJzIHNvIHRoYXQgb3RoZXIgYXJjaGl0ZWN0dXJlIGRvbid0IGdldAoJICBwZW5hbGl6ZWQgYnkgdGhpcyBsaW1pdGF0aW9uLgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBzbWFsbCB0eXBvIGZpeCBmcm9tIEhlaWtvIFcuIFJ1cHAKClN1biBBdWcgMjYgMjA6NDU6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVkIGEgV2luZG93cyBjb21waWxlciB3YXJuaW5nIChDaHJpcyBQb2JsZXRlKQoJKiB4cGF0aC5jOiBmaXggZm9yIG1vZCB3aGVuIGRpdmlkZW5kIGlzIDAgKENocmlzIFBvYmxldGUpCgpTYXQgQXVnIDI1IDE1OjMwOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggY2F0YWxvZy5jIHhtbGNhdGFsb2cuYzogYWRkZWQgYSAKCSAgLS1jb252ZXJ0IG9wdGlvbiB0byB4bWxjYXRhbG9nIHRvIGNvbnZlcnQgU0dNTCBvbmVzIHRvCgkgIHRoZSBYTUwgc3ludGF4LgoJKiB4bWxsaW50LmM6IHNtYWxsIGNsZWFudXAgZm9yICRTR01MX0NBVEFMT0dfRklMRVMgc3VwcG9ydC4KCgkyLjQuMyBnb3QgcmVsZWFzZWQgYXQgdGhhdCBwb2ludApUaHUgQXVnIDIzIDIzOjE2OjMyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeG1sSU8uYzogc3RhcnRlZCBzb21lIHNlcmlvdXMgdGVzdGluZyBhbmQgZml4ZWQKCSAgYSBmZXcgYnVnIGFuZCBvcHRtaXphdGlvbiBuZWVkcy4KClRodSBBdWcgMjMgMTc6MjY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcHJlcGFyaW5nIGZvciBhIDIuNC4zIHJlbGVhc2UgZXZlbiBpZiBpdCBtYXkgbm90IGJlIHJlYWR5IHlldAoJKiBjYXRhbG9nLmMgcGFyc2VyLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHJlZGlyZWN0ZWQKCSAgYWxsIGZpbGUgcGFyc2luZyBsb29rdXAgdG8gZ28gdGhyb3VnaCB0aGUgZW50aXR5IHJlc29sdmVyLCBhZGQKCSAgdG8gYWRkIGFuIEFQSSB0byBieXBhc3MgaXQgKG5lZWRlZCB0byBsb2FkIGNhdGFsb2dzIHRoZW1zZWx2ZXMpLAoJICBzb21lIGNsZWFudXAgb24gdGhlIGNhdGFsb2cgY29kZSB0b28uCgkqIG5hbm9mdHAuYzogc21hbGwgY2xlYW51cAoJKiBkb2MvY2F0YWxvZy5odG1sOiBzbWFsbCB1cGRhdGUKClRodSBBdWcgMjMgMTI6MjI6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgYnVnaSAjNTk0MDYgaW4gU0dNTCBjYXRhbG9nIHBhcnNpbmcgcmVwb3J0ZWQgYnkKCSAgSnVuIEt1cml5YW1hCgpUaHUgQXVnIDIzIDAyOjUxOjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvY2F0YWxvZy5odG1sOiBmaW5pc2hlZCB0aGUgY2F0YWxvZyBkb2N1bWVudGF0aW9uCgpUaHUgQXVnIDIzIDAxOjM4OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvY2F0YWxvZy5odG1sIGRvYy94bWwuaHRtbDogYWRkZWQgZG9jdW1lbnRhdGlvbiBhYm91dAoJICBDYXRhbG9nIHN1cHBvcnQsIG1pc3NlcyBhbiBBUEkgZGVzY3JpcHRpb24gCgkqIGRvYy9odG1sLyo6IHJlZXh0cmFjdGVkIHRoZSBBUEkgcGFnZXMKCldlZCBBdWcgMjIgMTg6Mjc6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sSU8uYyBIVE1McGFyc2VyLmM6CgkgIEFkZGVkIHRoZSBwYXJ0IGFib3V0IHNlY3Rpb24gNy4yIG9uIFVSSSByZXNvbHV0aW9uLAoJICBmaXhlZCBhIHNpZGUgZWZmZWN0IGluIHRoZSBIVE1MIHBhcnNlciwgbG9vayBjb21wbGV0ZQoJICBhbmQgcmVhZHkgdG8gcm9jayBleGNlcHQgdGhlIFVSSS9TeXN0ZW1JRCBwYXJ0IQoKV2VkIEF1ZyAyMiAxNjoyNzowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggY2F0YWxvZy5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIHhtbElPLmM6IGFkZGVkIHN1cHBvcnQgYW5kIEFQSXMgbmVlZGVkIGZvciB0aGUgY2F0YWxvZyBQSQoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBjbGVhbnVwCgpXZWQgQXVnIDIyIDAyOjAzOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgcGFyc2VyLmMgeG1sSU8uYyB4bWxjYXRhbG9nLmMgeG1sbGludC5jIAoJICBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHN0YXJ0cyB0byBsb29rIG9rYXksIHJlYWxseQoJICBwbHVnZ2VkIHRoZSBuZXcgZnJhbWV3b3JrLCBjbGVhbmVkIGEgbG90IG9mIHN0dWZmLAoJICBhZGRlZCBzb21lIEFQSXMsIGV4Y2VwdCB0aGUgUEkncyBzdXBwb3J0IG1pc3NpbmcgdGhpcwoJICBzaG91bGQgYmUgbW9zdGx5IGNvbXBsZXRlCgkqIHJlc3VsdC9jYXRhbG9ncy8qIHRlc3QvY2F0YWxvZ3MvKjogYWRkZWQgbmV3IHRlc3QsIGVucmljaGVkCgkgIHRoZSBleGlzdGluZyBvbmUgd2l0aCBVUk4gSUQgdGVzdHMKClR1ZSBBdWcgMjEgMTQ6NTY6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgbmV4dENhdGFsb2cKCSogcmVzdWx0L2NhdGFsb2dzL2RvY2Jvb2sgdGVzdC9jYXRhbG9ncy8qOiBzdGFydGVkIGFkZGluZwoJICBhIHNtYWxsIHJlZ3Jlc3Npb24gdGVzdAoKVHVlIEF1ZyAyMSAxMjo1MjozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY2F0YWxvZy5jIHhtbGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6CgkgIG1vcmUgd29yayBvbiB0aGUgWE1MIGNhdGFsb2cgc3VwcG9ydC4KCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHNtYWxsIGNsZWFudXAgc2VlbXMgdXNpbmcKCSAgbGlzdCBhcyBhIHB1YmxpYyBwYXJhbWV0ZXIgbmFtZSBjYW4gZ2l2ZSBwb3J0YWJpbGl0eSB0cm91YmxlcwoJKiB0cmlvbmFuLmMgdHJpb25hbi5oIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvdHJpb25hbi5oCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IHJlbW92ZWQKCSAgdHJpb25hbiBmcm9tIHRoZSBsaWJ4bWwgQVBJLCBhZGRlZCB4bWxYUGF0aElzSW5mIGFuZCB4bWxYUGF0aElzTmFOCgkgIHdyYXBwZXJzCgpUdWUgQXVnIDIxIDExOjE4OjQ1IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIE1ha2VmaWxlLmFtIHRyaW8uYyB0cmlvZGVmLmggdHJpb25hbi5jIHhwYXRoLmMKCSAgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvdHJpb25hbi5oOgoJICBSZS13b3JrZWQgTm90LUEtTnVtYmVyIGFuZCBJbmZpbml0eSBzdXBwb3J0LgoJKiB4bWxjYXRhbG9nLmM6IGFkZGVkIHJlYWRsaW5lIGluY2x1ZGUgZmlsZXMKCk1vbiBBdWcgMjAgMDI6MDQ6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbGNhdGFsb2cuYyBsaWJ4bWwuc3BlYy5pbjogcmVuYW1pbmcgCgkgIHRlc3RDYXRhbG9nIGFzIHhtbGNhdGFsb2csIG1ha2luZyBpdCBhbiBpbnN0YWxsZWQgYXBwCgkgIGFkZGluZyBhIHNoZWxsLCBhbmQgcHJlcGFyaW5nIGl0IHRvIGJlIGEgL2V0Yy94bWwvY2F0YWxvZwoJICBtYW5hZ2VtZW50IHRvb2wsIHRob3VnaCBub3QgcmVhZHkgeWV0CgkqIGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IGFkZGluZyBzdXBwb3J0IGZvcgoJICBYTUwgQ2F0YWxvZ3MgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS8KCSAgbm90IGZpbmlzaGVkLCB0aGVyZSBpcyBzb21lIGludGVyZXN0aW5nIHRyYWRlb2ZmcyBhbmQgYQoJICBmZXcgb3BlbiBxdWVzdGlvbnMgbGVmdC4KClN1biBBdWcgMTkgMTQ6NTk6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogZml4ZWQgYSBsaW5lIGZvcm1hdHRpbmcgcHJvYmxlbQoKRnJpIEF1ZyAxNyAxMTozNTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2YgdW51c2VkIHZhcmlhYmxlIChBbGJlcnQgQ2hpbikKCkZyaSBBdWcgMTcgMDE6MjU6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDoKCSAgdHJ5aW5nIHRvIGZpeCBzb21lIHRyb3VibGVzIHcuci50LiBmdW5jdGlvbiByZXR1cm5pbmcKCSAgY29uc3QgeHh4UHRyLgoKVGh1IEF1ZyAxNiAyMTozMzoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogYW5vdGhlciBzZXQgb2Ygc3ltYm9scyBjb25kaXRpb25hbGx5CgkgIGRlZmluZWQKClRodSBBdWcgMTYgMjE6MzE6MTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IHJlbW92ZWQgdW51c2VkIHZhcgoKVGh1IEF1ZyAxNiAxODoyNjo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFhQYXRoLmM6IGFub3RoZXIgc21hbGwgY2xlYW51cCBjbG9zaW5nIGJ1ZyAjNTkxMTAKClRodSBBdWcgMTYgMTc6NTk6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IHNtYWxsIGNsZWFudXAgY2xvc2luZyBidWcKCSAgIzU5MTA4CgpXZWQgQXVnIDE1IDIyOjQ2OjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBleGFtcGxlL2dqb2JyZWFkLmM6IGFkZCB4bWxDbGVhbnVwUGFyc2VyKCkgYmVmb3JlIGxlYXZpbmcKCldlZCBBdWcgMTUgMTQ6NTc6MDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZWQgMi40LjIKCldlZCBBdWcgMTUgMTM6NTY6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggZGVidWdYTUwuYyB2YWxpZC5jOiBkZXByZWNhdGUKCSAgdGhlIG5vbi1ib3VuZGNoZWNraW5nIFNwcmludGYgZnVuY3Rpb25zLCBhZGQgU25wcmludGYKCSAgdGhpcyBzaG91bGQgY2xvc2UgYnVnICM1Nzk4NAoKV2VkIEF1ZyAxNSAxMDo0NjowNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUoKSBkaWRuJ3QgdW5lc2NhcGVkCgkgIFVSSXMgYmVmb3JlIGRvaW5nIHRoZSBsb29rdXBzIChwb2ludGVkIGJ5IE1hcmsgVmFrb2MpCgpUdWUgQXVnIDE0IDE4OjM3OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzZXJpb3VzIGNoYW5nZXMgb24gUmVzdWx0IFZhbHVlIFRyZWVzIGFuZCBOb2RlU2V0cwoJICB3LnIudC4gZGVhbGxvY2F0aW9uIGFuZCBjb2xsZWN0IG9wZXJhdGlvbnMuIFByb2JhYmx5IG5vdAoJICAxMDAlIGNsZWFuIChtZXJnZSBvZiBhbGxvY2F0ZWQgdHJlZXMgc21lbGxzIGxpa2UgYSBwcm9ibGVtKS4KCSAgU2VlbXMgc3VmZmljaWVudCB0byBjbG9zZSAjNTg5NDMKClR1ZSBBdWcgMTQgMTY6MTI6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkaW5nIGEgLS1mb3JtYXQgb3B0aW9uCgpUdWUgQXVnIDE0IDE0OjE2OjI0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBjb3VudCgpIHdhcyBicm9rZW4gb24gUmVzdWx0IFZhbHVlIFRyZWUKCSogeG1sSU8uYzogZml4ZWQgZmlsZTovLy8gYWNjZXNzZXMgb24gX1dJTjMyCgpNb24gQXVnIDEzIDEzOjIyOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IHMvTElCWE1MX1ZFUlNJT05fTlVNQkVSL0xJQlhNTF9WRVJTSU9OLyBzZWVtcyB0aGUKCSAgbWFjcm8gd2FzIHJlbmFtZWQsIHRoaXMgc2hvdWxkIGNsb3NlIGJ1ZyAjNTg2ODMKCk1vbiBBdWcgMTMgMTI6MzM6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBzbWFsbCBmaXggZml4aW5nIGJ1ZyAjNTg1MzkgcmVwb3J0ZWQgYnkgY29vbG8sIGluCgkgIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZSB0ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGVudGl0eSBtaWdodAoJICBiZSBhZGRlZCBkdWUgdG8gdGV4dCBjb2FsZXNjaW5nLgoJKiBuYW5vZnRwLmMgcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAKCldlZCBBdWcgIDggMjI6NTc6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhBQ0tJTkc6IGFkZGVkIEpvaG4gRmxlY2sgcmlnaHQgdG8gY29tbWl0IGluIHRoZSBkb2Mgc3ViZGlyCgpUdWUgQXVnICA3IDAzOjA1OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyB0ZXN0WFBhdGguYyB2YWxpZC5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOgoJICBhbGxvdyB0byBpbmhlcml0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgRFREIGRpcmVjdGx5IGluIHRoZQoJICB0cmVlLCB0aGlzIGlzIG5lZWRlZCBmb3IgWFBhdGggYW5kIGNhbiBiZSBhIHVzZWZ1bCBmZWF0dXJlLgoJICBJbmhlcml0ZWQgbmFtZXNwYWNlcyBhcmUgYWx3YXlzIHByb3ZpZGVkIGF0IHRoZSB0cmVlIGxldmVsIG5vdwoJKiB0ZXN0L2RlZmF0dHIqIHJlc3VsdC9kZWZhdHRyKiByZXN1bHQvbm9lbnQvZGVmYXR0cio6IGFkZGVkIGEgY291cGxlCgkgIG9mIHRlc3RzIGZvciB0aGlzIGZlYXR1cmUgKFhTTFQgYmVpbmcgdGhlIHByaW1lIHVzZXIpLgoKRnJpIEF1ZyAgMyAxNDowMjoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIE1ha2VmaWxlLmFtIG5hbm9odHRwLmMgcGFyc2VyLmMgdGVzdEhUTUwuYwoJICB0ZXN0U0FYLmMgeG1sSU8uYyB4bWxsaW50LmMgaW5jbHVkZS93aW4zMmNvbmZpZy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaAoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbiB3aW4zMi9SRUFETUUuTVNEZXYKCSAgd2luMzIvZHNwLyo6IGFwcGxpZWQgV2luMzIgRmFjZWxpZnQgTm8uMiBwYXRjaGVzIGZyb20gCgkgIElnb3IgWmxhdGtvdmljIGZvciBXaW5kb3dzL01TQwoKV2VkIEF1ZyAgMSAyMzoyMTowNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHVucGFyc2VkRW50aXR5RGVjbCgpIHRoZSBVUkkgY29tcHV0YXRpb24gb2YgdGhlCgkgIGVudGl0eSB3YXNuJ3QgZG9uZSBicmVha2luZyBYU0xUIHVucGFyc2VkLWVudGl0eS11cmkoKQoKV2VkIEF1ZyAgMSAxNzo0NDo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYSBidWcgd2hlbiB3YWxraW5nIHRoZSBkZXNjZW5kYW50cyBhbmQKCSAgdGhlIGN1cnJlbnQgbm9kZSBoYXMgbm8gY2hpbGRyZW4KCSogZGVidWdYTUwuYzogc2hvdyB1cCB3aGVuIGEgdGV4dCBub2RlIGlzIHN1cHBvc2VkIHRvIG5vdCBiZSBlc2NhcGVkCgpXZWQgQXVnICAxIDAxOjMzOjM1IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogeHBhdGguYzogZml4ZWQgYSBidWcgaW4geG1sWFBhdGhOb2RlVHJhaWxpbmdTb3J0ZWQgKGZvciBub3cgaXQKCSAgd29ya2VkIGxpa2UgdGhlIHNldDpsZWFkaW5nKCkgZnVuY3Rpb24pCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhtbFhQYXRoTm9kZVNldENvbnRhaW5zCgpUdWUgSnVsIDMxIDE4OjI0OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbmFub2h0dHAuYzogcHJvdGVjdGVkIGFuIHVzZSBvZiBFQUdBSU4sIEJyaWFuIFN0YWZmb3JkCgpUdWUgSnVsIDMxIDE3OjQ4OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogYXBwbHkgY2hhbmdlIHRvIGNsb3NlICM1ODE0MSAKCSogd2luMzIvbGlieG1sMi8qOiB1cGRhdGUgb2YgdGhlIE1TQyBwcm9qZWN0cyBmcm9tIElnb3IgIFpsYXRrb3ZpYwoKVHVlIEp1bCAzMSAxNzowOTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiB3aGVuIHRoZSBpbnRlcm5hbCBzdWJzZXQgdXNlcyBhIFBFLCB0aGVuIHRoZQoJICBpbmNsdWRlZCBlbnRpdHkgY2FuIHVzZSBjb25kaXRpb25hbCBzZWN0aW9ucy4KCk1vbiBKdWwgMzAgMTI6NTg6MzkgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZml4ZWQgYSBzZXJpb3VzIG1lbW9yeSBwcm9ibGVuCgkgIHdoZW4gd2Fsa2luZyB0aGUgbmFtZXNwYWNlIGF4aXMgc2hvd2luZyB1cCBpbgoJICBsaWJ4c3QvdGVzdHMvZ2VuZXJhbC9idWctMTIKCSogeG1sbWVtb3J5LmM6IGFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byB0cmFjZSBhIGdpdmVuIGJsb2NrCgkgIGRlZmluZWQgYnkgaXRzIGFkZHJlc3MKClN1biBKdWwgMjkgMDc6MTg6NTMgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBkb24ndCBvdmVycmlkZSBleGlzdGluZyBlbmNvZGluZyBzcGVjaWZpZWQgYmVmb3JlCgkgIHN0YXJ0aW5nIHhtbFBhcnNlRG9jdW1lbnQoKQoKU2F0IEp1bCAyOCAxMzozMzoxMCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlaW5zZXJ0ZWQsIG5lZWRlZCBmb3IKCSAgV2luZG93cyB1c2VycyBvZiBDVlMKCjIwMDEtMDctMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIGVuY29kaW5nLmM6ICh4bWxJY29udldyYXBwZXIpOiBBZGQgY2FzdCB0byBmaXggd2FybmluZy4KCSogdGVzdENhdGFsb2cuYzogQWRkIGluY2x1ZGUgb2YgPGxpYnhtbC9wYXJzZXIuaD4uCgoyMDAxLTA3LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC8uY3ZzaWdub3JlOgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCVJlbW92ZSB0aGlzIGZpbGUgZnJvbSBDVlMgYmVjYXVzZSBpdCdzIGdlbmVyYXRlZC4KCkZyaSBKdWwgMjcgMTA6MDM6NTYgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhcHBsaWVkIGNvbnN0IHBhdGNoZXMgZnJvbQoJICBUb20gTW9vZyAjNTgwMDIKClRodSBKdWwgMjYgMTg6NTU6NTIgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoeyxJbnRlcm5hbHN9Lmg6IGFkZGVkIGEgZnVuY3Rpb24KCSAgbG9va3VwIGZyYW1ld29yawoKRnJpIEp1bCAyNyAwMTo1MDoyMCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxDb3B5Tm9kZSgpIGZvciBkb2N1bWVudHMKClRodSBKdWwgMjYgMTI6NDA6MzUgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBidWdzICM1ODA3MyByZXBvcnRlZCBieSBHcmVnIFNodGlsbWFuCgpUaHUgSnVsIDI2IDExOjM4OjM3IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZXMgYnVnICM1NzY1MiByZXBvcnRlZCBieSBNb3J1cyBXYWx0ZXIKClRodSBKdWwgMjYgMTA6MjQ6MzQgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIG5hbm9odHRwLmM6IEpvaG4gS3JvbGwgcHJvdmlkZWQgYSBzbWFsbCBmaXggdG8geG1sTmFub0hUVFBTYXZlCgpUaHUgSnVsIDI2IDA3OjE2OjA0IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgdGhlIHhtbExpbmVOdW1iZXJzRGVmYXVsdCgpCgkgIGVycm9ycywgbGVzc29uIGRvbid0IGFkZCBuZXcgZnVuY3Rpb25zIGF0IDFhbSBiZWZvcmUgYSByZWxlYXNlCgkqIHhwYXRoLmM6IGludGVncmF0ZWQgZml4IGZyb20gQmpvcm4gdG8gYXZvaWQgZGl2aWRlIGJ5IHplcm8KCSAgZnJvbSBYUGF0aCBpbml0aWFsaXphdGlvbiB3aGVuIHBvc3NpYmxlLgoKVHVlIEp1bCAyNCAxNTozOToxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHJlc3VsdC9zY3JpcHRzL2Jhc2UqOiByZW1vdmluZyBoaXN0b3J5L3JlYWRsaW5lIGNoYW5nZWQKCSAgdGhpcyBzbGlnaHRseQoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBTQVguYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICB4bWxsaW50LmM6IG1ha2UgZWxlbWVudCBjb250ZW50IGxpbmUgbnVtYmVyIGdlbmVyYXRpb24KCSAgb3B0aW9ubmFsIHRvIGF2b2lkIGJyZWFraW5nIG9sZCBhcHBzIGFkZGVkIGludGVyZmFjZSB0byBzd2l0Y2gKClR1ZSBKdWwgMjQgMTU6MDY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGdldCByaWQgb2YgdGhlIHJlYWRsaW5lIGFuZCBsaWJoaXN0b3J5CgkgIGRlcGVuZGVuY2llcyBieSBkZWZhdWx0LCByZWxlYXNlIDIuNC4xIHdpdGggSUE2NCBmaXgKCSogbmFub2h0dHAuYyB0cmVlLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBpbmNvcnBvcmF0ZWQKCSAgSm9obiBLcm9sbCBmaXhlcyB0byBhbGxvdyBzYXZpbmcgdG8gSFRUUCB2aWEgUFVUIChvcgoJICBQT1NUIG9mIG5lZWRlZCkuCgkqIGRvYy9odG1sLyouaHRtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3MKClN1biBKdWwgMjIgMDU6NTY6MTYgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiBoYXNoLmMgaW5jbHVkZS9saWJ4bWwvaGFzaC5oOiBhZGRlZCB4bWxIYXNoU2Nhbm5lckZ1bGwsCgkgIHhtbEhhc2hTY2FuRnVsbCBhbmQgeG1sSGFzaFNjYW5uRnVsbDMgdG8gZ2V0IHBhc3NlZCB0aGUKCSAgdGhyZWUga2V5cyBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCgpUaHUgSnVsIDE5IDE1OjI5OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiByZW1vdmVkIGxpYnhtbCBzb2Z0bGluayBmb3IgZ29vZAoJKiBpbmNsdWRlL2xpYnhtbC8qLmggKi5jIGRvYy9NYWtlZmlsZS5hbTogY2xlYW51cCB0byBnZXQKCSAgMTAwJSBjb3ZlcmFnZSBieSBndGstZG9jCgpUdWUgSnVsIDE3IDE3OjM2OjQ2IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogZGVidWdnaW5nIG9uIElBNjQsCgkgIGZpeGVkIHNlcmlvdXMgdHJvdWJsZXMgZHVlIHRvIHNpemVfdCB2cy4gaW50IG1pc21hdGNoCgpUdWUgSnVsIDE3IDE2OjA0OjM2IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyB4bWxJTy5jOiBjbGVhbmVkIHVwIHNvbWUgd2FybmluZyBvbiB0aGUgQWxwaGEKCk1vbiBKdWwgMTYgMDY6MzI6NDQgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aHssSW50ZXJuYWxzfS5oIHhwYXRoLmM6IGFkZGVkIGEgbW9yZQoJICBjb252ZW5pZW50IGV4dGVuc2lvbiBBUEkgZm9yIHZhbHVlIGFuZCBjb250ZXh0IG1hbmFnaW5nCgkgIE5vdyBoYW5kbGVzIGV4dGVybmFsIG9iamVjdHMgdGhyb3VnaCB4bWxYUGF0aFBvcEV4dGVybmFsLAoJICB4bWxYUGF0aFdyYXBFeHRlcm5hbCBhbmQgeG1sWFBhdGhSZXR1cm5FeHRlcm5hbC4KCSAgQWRkZWQgZnVuY3Rpb25zIGZvciBzZXRzIG9wZXJhdGlvbnMgKGludGVyc2VjdGlvbiwgZXRjLikKCk1vbiBKdWwgMTYgMjA6MDU6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgKCSAgeG1sSU8uYyB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgZW50aXRpZXMuYyBlbmNvZGluZy5jCgkgIEhUTUxwYXJzZXIuYzogY2xlYW51cCBvZiBnbG9iYWwgdmFyaWFibGVzLCBtYXJraW5nIHNvbWUKCSAgY29uc3Qgb3IgcHJpdmF0ZS4KCk1vbiBKdWwgMTYgMDA6MTc6MTUgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBleHBvcnRlZCB4bWxYUGF0aHtOQU4sUElORixOSU5GfQoJICBmaXhlZCB4bWxYUGF0aE5vZGVTZXRJdGVtIHdoZW4gcGFzc2luZyBpbmRleD0wCgpTdW4gSnVsIDE1IDE3OjU4OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IGFkZGVkIHhtbENoZWNrVmVyc2lvbigpCgpTYXQgSnVsIDE0IDE5OjMxOjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5jOiBmaXhlZCBjb21waWxhdGlvbiB1bmRlciBDeWd3aW4gIzU3NTAzCgkqIFRPRE86IHVwZGF0ZQoKMjAwMS0wNy0xMyAgUGV0ZXIgV2lsbGlhbXMgIDxwZXRlcndAeGltaWFuLmNvbT4KCgkqIGNvbmZpZy5oLmluOiBhZGQgI3VuZGVmIEhBVkVfRExGQ05fSAoKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBDb21waWxlIGZpeCB3aGVuIHNyY2RpciAhPQoJYnVpbGRkaXIuCgpGcmkgSnVsIDEzIDExOjA5OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIGEgY291cGxlIG9mIGV4cG9ydGVkIGVudHJpZXMKCSAgcmFpc2VkIGJ5ICM1NzM0OCBhbmQgIzU3MzgxCgpUaHUgSnVsIDEyIDIxOjIwOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgcGFyc2VyLmMKCSAgdHJlZS5jIHhwb2ludGVyLmM6IHN0b3JlIHRoZSBsaW5lIG51bWJkZXIgaW4gZWxlbWVudC0+Y29udGVudCwKCSAgbWF5IGJyZWFrIHNvbWUgc29mdHdhcmUsIG5lZWQgYSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbQoKMjAwMS0wNy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogLmN2c2lnbm9yZToKCSogZXhhbXBsZS8uY3ZzaWdub3JlOgoJKiBpbmNsdWRlLy5jdnNpZ25vcmU6CgkqIGluY2x1ZGUvbGlieG1sLy5jdnNpZ25vcmU6CglWYXJpb3VzIHRoaW5ncyB0aGF0IGFyZSBnZW5lcmF0ZWQgYW5kIHNob3VsZCBiZSBpZ25vcmVkLgoKVHVlIEp1bCAxMCAxNzo0NzowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVsZWFzZSBvZiAyLjQuMAoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogIHVwZGF0ZWQgdGhlIGRvY3MKCk1vbiBKdWwgIDkgMjI6MDY6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCAiSW50ZXJuYWw6IE1JWEVEIHN0cnVjdCBiYWQiIHdoZW4gI0NEQVRBIGVsZW1lbnRzCgkgIHZhbGlkYXRpb24gb2NjdXJlZCBvbiBjb250ZW50IHdpdGggZWxlbWVudCBjaGlsZAoKTW9uIEp1bCAgOSAxNzo1OTowOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgWE1MIEJhc2UgY29tcHV0YXRpb24gd2hpY2ggd2FzIGJyb2tlbgoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCBhIGJhc2UgZnVuY3Rpb24gdG8gdGhlIHNoZWxsCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9zY3JpcHRzLyogdGVzdC9zY3JpcHRzLyo6IGFkZGVkIHNjcmlwdHMKCSAgYmFzZWQgcmVncmVzc2lvbiB0ZXN0cywgYW5kIGFkZGluZyAyIFhNTCBCYXNlIHRlc3RzCgpNb24gSnVsICA5IDEyOjMxOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBzZXQgcHJvcGVydGllcyBkb2MgYW5kIGNhbGwgeG1sU2V0TGlzdERvYyBmb3IgcHJvcGVydGllcwoJICBjb250ZW50IHdoZW4gZ3JhZnRpbmcgdGhlbSBpbiBhIGRpZmZlcmVudCB0cmVlLgoJKiBhY2xvY2FsLm00OiByZW1vdmUgZnJvbSBDVlMKClN1biBKdWwgIDggMjM6MDk6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgc29tZSBtaXNzaW5nIGVudHJ5IHBvaW50CgkgIGZvciBYUGF0aCAoTWFyayBWYWtvYykKClN1biBKdWwgIDggMjA6MzQ6MzUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBmaXhlZCBhbiBvbGQgYnVnIHJhaXNlZCBieSBCZXJuaGFyZCBad2lzY2gsIHRoZSBJL08KCSAgbGF5ZXIgc2hvdWxkIFVSSS1VbmVzY2FwZSBiZWZvcmUgdHJ5aW5nIHRvIG9wZW4gcmVzb3VyY2VzLgoKU3VuIEp1bCAgOCAxNjoyNjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeCB0aGUgbmFtZSgpIGJ1ZyBmb3IgZWxlbWVudHMgaW4gdGhlIGRlZmF1bHQgCgkgIG5hbWVzcGFjZSByZXBvcnRlZCBieSBDaGFybGllIEJvemVtYW4KClN1biBKdWwgIDggMTU6MTE6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyBwYXJzZXIuYyB0ZXN0WFBhdGguYyB4cGF0aC5jOiB0cnlpbmcgdG8gZml4ICM1Njk0OCwgdGhpcwoJICBsZWQgdG8gYW4gWFBhdGggZml4LCBpbXByb3ZlbWVudHMgb2YgU0FYIGluaXRpYWxpemF0aW9uLCBhbmQKCSAgYW4gYWRkZWQgb3B0aW9uIC0tbm9jZGF0YSB0byB0ZXN0WFBhdGgKClNhdCBKdWwgIDcgMjE6MDk6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvbGlieG1sLWRvYy5lbDogRmVsaXggTmF0dGVyIHByb3ZpZGVkIGFuZXcgdmVyc2lvbiB3b3JraW5nCgkgIHdpdGggWEVtYWNzIHRvbwoKU2F0IEp1bCAgNyAwMjoxNjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IHNtYWxsIGNsZWFudXAKCSogZG9jL3htbC5odG1sOiB1cGRhdGUKCkZyaSBKdWwgIDYgMDE6NDA6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHJlbGVhc2VkIDIuMy4xNAoKRnJpIEp1bCAgNiAwMDo0Nzo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9odG1sLyo6IHJlYnVpbHQgdGhlIGRvY3MgZm9yIHRoZSByZWxlYXNlCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMi4zLjE0IHJlbGVhc2UuCgpUaHUgSnVsICA1IDIyOjAxOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYSBidWcgcmVwb3J0ZWQgYnkgU3RlcGhhbiBLdWxvdyBlbXB0eSBub2Rlc2V0cwoJICB3ZXJlIG5vdCBlcXVhbCB0byBlbXB0eSBzdHJpbmdzCgpUaHUgSnVsICA1IDAwOjUyOjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmM6IGZpeGVkIGEgVVJJLVJlZmVyZW5jZSBjb21wdXRhdGlvbiBwcm9ibGVtIHdoZW4gdmFsaWRhdGluZwoJKiB4bWxJTy5jOiBzbWFsbCBjbGVhbnVwCgpUaHUgSnVsICA1IDAwOjA0OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGltcHJvdmVkIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvdXBsZSBvZiBpbnRlcmZhY2VzCgkgIHVwb24gTGFycnkgU3RhbXBlciBzdWdnZXN0aW9uCgpXZWQgSnVsICA0IDIxOjQyOjI0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgZW50aXRpZXMuYyBwYXJzZXIuYzogY2hhbmdlZCBjb21wbGV0ZWx5IHRoZSB3YXkgZW50aXRpZXMKCSAgYXJlIGhhbmRsZWQgd2hlbiBydW5uaW5nIHRoZSBwYXJzZXIgaW4gZW50aXR5IHN1YnN0aXR1dGlvbiBtb2RlLgoJICBUaGlzIGZpeGVzIGEgYnVnIHJlcG9ydGVkIGJ5IFN0ZXBoYW4gS3Vsb3cgYW5kIG5lYXJseSBkaXZpZGVzCgkgIGJ5IDMgdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgYnkgbGlieHNsdCB0byBsb2FkIGFuZCBwcm9jZXNzCgkgIERvY0Jvb2sgVERHLgoKV2VkIEp1bCAgNCAxODowMjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogZml4aW5nIGEgdG9vIGVhcmx5IHJvb3QgY2xvc2luZyBwcm9ibGVtIHJhaXNlZAoJICBieXQgUHJhc2hhbnRoIE5haWR1CgpXZWQgSnVsICA0IDAxOjQyOjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBtaXNzaW5nIGNvcHkgaW4geG1sWFBhdGhWYXJpYWJsZUxvb2t1cE5TKCkgCgkgIHJhaXNlZCBieSBNYXJrIFZha29jLgoKVHVlIEp1bCAgMyAxODozNTo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW06IGZpeGVkIHRoZSBpbmNsdWRlIHBhdGggdG8gYWRkIHNyY2Rpci9pbmNsdWRlCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogZml4IGZyb20gQWxiZXJ0IENoaW4gZm9yIGljb252IGRldGVjdGlvbgoJICBhbmQgc29tZSBjbGVhbnVwCgpUdWUgSnVsICAzIDEwOjEyOjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6CgkgIGxvdCBvZiBvcHRpbWl6YXRpb24gd29yaywgcmVzdWx0cyBpbiBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMKCSAgd2hlbiBoYW5kbGluZyByZWFsbHkgY29tcGxleCBYUGF0aCBxdWVyaWVzLiBBZGQgYSBzbWFsbCBvcHRpbWl6ZXIKCSAgZm9yIHVuaW9ucywgaW1wcm92ZSBbbl0gYW5kIFtsYXN0KCldLCBhdm9pZCBzb21lIGNvc3RseSBvcHMuCgpGcmkgSnVuIDI5IDIzOjI2OjU0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6IHhtbFN0cnN0ciBhcmdzIGFyZSBib3RoIGNvbnN0CgkqIHhwYXRoLmM6IHNtYWxsIGNsZWFudXAKCSogeG1sR2V0TnNMaXN0OiByZWZvcm1hdGVkLCBmaXhlZCBwcm9ibGVtcyBpZiB1c2VkIG9uIEVudGl0aWVzCgpUaHUgSnVuIDI4IDE4OjE5OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhZGRlZCAxLjguMTQgYW5kIDIuMy4xMyByZWxlYXNlcwoKVGh1IEp1biAyOCAxODoxNjoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVsZWFzZWQgMi4zLjEzCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IHdvcmthcm91bmQgYXV0b21ha2UgZ2VuZXJhdGluZwoJICBlcnJvbmVvdXMgZGVwcwoKVGh1IEp1biAyOCAxNTowODoyMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYnVnICM1NjgwMSBZb24gRGVyZWsgcHJvdmlkZWQgYSBwYXRjaAoJICB0byB0aGUgd2luZG93cyBjb25maWcgZmlsZS4KClRodSBKdW4gMjggMTQ6NTE6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cG9pbnRlci5jIGluY2x1ZGUvd2luMzJjb25maWcuaCB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYwoJICBsaWJ4bWwuaCA6IFlvbiBEZXJlayBwcm92aWRlZCBhIHNldCBvZiBjaGFuZ2VzIHRvIGNvbXBpbGUgZnJvbQoJICBDVlMgb24gV2luZG93cy9NU0MKClRodSBKdW4gMjggMTQ6MTE6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgVVRGOCBCT00gc3VwcG9ydCBpbiBwdXNoIG1vZGUKCSogdGVzdC91dGY4Ym9tLnhtbCByZXN1bHQvdXRmOGJvbS54bWwgcmVzdWx0L25vZW50L3V0Zjhib20ueG1sOgoJICBhZGRlZCBhIHNwZWNpZmljIHRlc3RjYXNlCgpXZWQgSnVuIDI3IDE4OjMzOjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIC0tcHVzaCByZWdyZXNzaW9uIHRlc3RzCgkqIHBhcnNlckludGVybmFscy5jOiB0aGUgWE1MIHBhcnNlciBzZWdmYXVsdGVkIGluIC0tcHVzaCBtb2RlCgpXZWQgSnVuIDI3IDEzOjA5OjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBtb3ZlZCB0aGUgc3ltbGlua3MgZGV0ZWN0aW9uIHdpdGhpbiBhIENWUwoJICBjaGVjaywgdGhpcyBpcyBub3QgcG9ydGFibGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgoJKiB4cGF0aC5jOiBzbWFsbCBjbGVhbnVwL3NwZWVkdXAKClR1ZSBKdW4gMjYgMTg6MDU6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gZG9jL3htbC5odG1sIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJICByZWxlYXNlIG9mIDIuMy4xMgoJKiBwYXJzZXIuYzogbWFrZSBhbiBlcnJvciBtZXNzYWdlIGlmIHVua25vdyBlbnRpdGllcyBpbiBhbGwgY2FzZXMKClR1ZSBKdW4gMjYgMDk6NDY6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB1cmkuYzogZml4ZWQgMiB1cmkgbm9ybWFsaXphdGlvbiBidWdzIG9uICcvLycgcmVkdWN0aW9uCgpNb24gSnVuIDI1IDE4OjA2OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IExhc3psbyBQZXRlciBwb2ludGVkIG91dCB0aGF0CgkgIGluY2x1ZGVzIHdlcmUgaW5zdGFsbGVkIGluIHRoZSB3cm9uZyBkaXIKCk1vbiBKdW4gMjUgMTc6MDc6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvaHRtbC54bWw6IHdhcm4gYWdhaW5zdCBzZW5kaW5nIGNvZGUgdG8gZXhoaWJpdCBidWdzLgoKU3VuIEp1biAyNCAyMzozMTo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHBhdGNoIHRvIHhtbFhQYXRoRm9ybWF0TnVtYmVyIGZvciB0aGUgb3B0aW1pemVyIG9uCgkgIFRydTY0IGZyb20gVGhvbWFzIExlaXRuZXIKClN1biBKdW4gMjQgMTQ6MDU6NTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBBVVRIT1JTOiBhZGRlZCBXaWxsaWFtIGFuZCBCam9ybgoJKiBpbmNsdWRlL2xpYnhtbC8qLmggKi5jIFJFQURNRSBkb2MvKi5odG1sIGV0Yy46IGNoYW5nZWQgb2xkIGVtYWlsIHRvCgkgIGRhbmllbEB2ZWlsbGFyZC5jb20gaG9wZWZ1bGx5IEkgd29uJ3QgaGF2ZSB0byBkbyB0aGlzIGFnYWluCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvaHRtbC8qLmh0bWw6IGNsZWFudXAgbWFrZWZpbGUsIGNoZWNrZWQgdGhhdAoJICBkb2NzIGNhbiBiZSByZWJ1aWx0IGNsZWFubHkgbm93CgkqIGluY2x1ZGUvbGlieG1sL3htbCp2ZXJzaW9uLmgqOiByZW1vdmVkIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaAoJICBmcm9tIENWcyBpdCdzIGdlbmVyYXRlZCwgYWRkZWQgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmgKCSAgYWxzbyBnZW5lcmF0ZWQgYnV0IHdoaWNoIHNob3VsZCBjaGFuZ2UgZmFyIGxlc3MgZnJlcXVlbnRseS4KCSogY2F0YWxvZy5jIG5hbm9mdHAuYzogbWFkZSBzdXJlIHRvIGluY2x1ZGUgbGlieG1sLmggbm90CgkgIGxpYnhtbC94bWx2ZXJzaW9uLmggZGlyZWN0bHkKCSogaW5jbHVkZS9saWJ4bWwvKi5oOiBpbmNsdWRlIHhtbHdpbjMydmVyc2lvbi5oIGluc3RlYWQgb2YgeG1sdmVyc2lvbi5oCgkgIHdoZW4gY29tcGlsaW5nIG9uIFdJTjMyIGFuZCBNU0MKClNhdCBKdW4gMjMgMjM6NTQ6MTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjoKCSAgZml4ZWQgbWFrZSBkaXN0Y2hlY2sgYW5kIHJlYnVpbGRpbmcgdGhlIHJwbXMKClNhdCBKdW4gMjMgMjA6NTA6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHNob3VsZCBmaW5pc2ggdGhlIG1pZ3JhdGlvbiBvZiBleHBvcnRlZCBpbmNsdWRlcwoJICBpbnRvIGEgcmVhbCBpbmNsdWRlL2xpYnhtbCBpbiBDVlMsIGF0IGxlYXN0IGZvciBDVlMgdXNlcnMuCgkqIHJlbW92ZWQgdGhlIGV4cG9ydGVkIGhlYWRlcnMsIGFkZGVkIGluIGluY2x1ZGUvbGlieG1sIChhcyB3ZWxsCgkgIGFzIHhtbHZlcnNpb24uaC5pbikuCgpTYXQgSnVuIDIzIDIwOjM3OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCB0aGUgd2F5IHRvIGRldGVjdCBzeW1saW5rCgpTYXQgSnVuIDIzIDIwOjMwOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiB1cGRhdGVkLCBpbmNsdWRlL2xpYnhtbCBpcyBub3cgYSByZWFsIENWUyBkaXIKClNhdCBKdW4gMjMgMTk6MzY6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvbGlieG1sLWRvYy5lbDogYSBuZXcgdmVyc2lvbiBvZiBsaWJ4bWwtZG9jLmVsLiBUaGlzIG5ldwoJICB2ZXJzaW9uIHdvcmtzIHdpdGggYm90aCBsaWJ4bWwxIGFuZCBsaWJ4bWwyIChpdCBhdXRvZGV0ZWN0cwoJICB0aGUgcHJlZml4IG9mIHRoZSBodG1sLWZpbGVzKSBmcm9tIEZlbGl4IE5hdHRlci4KCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIGRvYyBhY2NvcmRpbmdseQoKU2F0IEp1biAyMyAxODozMDoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBidWcgZ2VuZXJhdGluZyBhIHRlbXBsYXRlIGxvb3AgaW4gbGlieHNsdAoJICB3aGVuIHVzaW5nIGRvY2Jvb2steHNsLTEuNCwgKiBzaG91bGQgZmlsdGVyIG91dCBkb2N1bWVudCBub2RlcwoJKiBIQUNLSU5HOiBhZGRlZCBXaWxsaWFtCgkqIFRPRE86IHVwZGF0ZWQKCkZyaSBKdW4gMjIgMTg6MDI6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvRkFRLmh0bWw6IGFkZGVkIGEgd2FybmluZyBhYm91dCBnY2MtMy4wCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgcmVmZXJlbmNlIHRvIGdkb21lMiBhbmQgcmVtb3ZlZCBhIGNvbmZ1c2luZwoJICBzZW50ZW5jZQoKRnJpIEp1biAyMiAxNzowMjoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbHZlcnNpb24uaDogb2theSB0aGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUsIGJ1dCBXaW5kb3dzCgkgIHVzZXJzIG5lZWQgaXQgYW5kIHRoZXkgY2FuJ3QgZ2VuZXJhdGUgaXQsIGFuZCBJIHdhbnQgQ1ZTCgkgIFdpbmRvd3MgdXNlcnMgLi4uCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMl9zby5kc3A6IFdpbmRvd3MgcHJvamVjdCBmaWxlIGZvciAKCSAgdGhlIHNoYXJlZCBsaWIgdmVyc2lvbiBvZiBsaWJ4bWwyCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBidWcgIzU2NTI3IHNldCBvZiBleHBvcnRlZAoJICByZXNvdXJjZXMgbmVlZGVkIGZvciBsaWJ4c2x0L3hzbHRwcm9jIGJ5IFlvbiBEZXJlawoKRnJpIEp1biAyMiAxNjozOTozNiBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB0cmlvLmM6IE1TVkMgZml4IChwcm92aWRlZCBieSBJZ29yIFpsYXRrb3ZpYykKCkZyaSBKdW4gMjIgMTI6NDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFub3RoZXIgc21hbGwgZml4IGZvciBBVFRSSUJVVEVfVU5VU0VECgpGcmkgSnVuIDIyIDEyOjQyOjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBZb24gRGVyZWsgcHJvdmlkZWQgYSBmaXJzdCBmaXgKCSAgdG8gYmUgYWJsZSB0byBjb21waWxlIGxpYnhzbHQveHNsdHByb2Mgb24gV2luZG93cwoKRnJpIEp1biAyMiAwMDowNDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGF0dGVtcHQgdG8gd29yayBhcm91bmQgd2hhdCBzZWVtZWQgYSBnY2Mgb3B0aW1pemVyCgkgIGJ1ZyB3aGVuIGhhbmRsaW5nIGZsb2F0cyBvbiBpMzg2IGh0dHA6Ly92ZWlsbGFyZC5jb20vZ2NjLmJ1ZwoJKiB0cmVlLmMgZW50aXRpZXMuYyBlbmNvZGluZy5jOiBkb2luZyBzb21lIGNsZWFudXBzIHdoaWxlCgkgIGNoYXNpbmcgaXQKClRodSBKdW4gMjEgMTM6MTM6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cCB3aGVuIC0td2l0aG91dC1kZWJ1ZyBpcyBzcGVjaWZpZWQKCSogeGluY2x1ZGUuYyB4cGF0aC5jIHhwYXRoSW50ZXJuYWxzLmggeHBvaW50ZXIuYzogY2xlYW51cAoJICB3LnIudC4gLS13aXRob3V0LWRlYnVnIGFuZCBvdGhlciBpbmNsdWRlIHBvaW50cwoJKiBjYXRhbG9nLmggdGVzdENhdGFsb2cuYzogYSBiaXQgb2YgY2xlYW51cCBhbmQgcHJlcGFyZSBmb3IgWE1MCgkgIENhdGFsb2dzCgkqIGNvbmZpZ3VyZS5pbiBlbnRpdGllcy5oIHRyZWUuaCBIVE1McGFyc2VyLmM6IHJlbW92ZWQKCSAgLS13aXRob3V0LWNvcmJhLCBtYWRlIHRoZSBfcHJpdmF0ZSBmaWVsZCBtYW5kYXRvcnkKCldlZCBKdW4gMjAgMTk6Mzc6MjUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyBlbmNvZGluZy5jOiBTaW5jZSBOb3RlcGFkIG9uIFdpbjJrCgkgIG91dHB1dHMgYSBCT00gaW4gVVRGOCwgYW4gZXJyYXRhIGhhcyBiZWVuIGlzc3VlZCB0byBhdm9pZCB0aGUKCSAgcHJvYmxlbSwgdGhhdCB3YXMgdGhlIG1vc3QgcmVhc29uYWJsZSBzb2x1dGlvbi4uLiBBZGQgc3VwcG9ydAoJICBmb3IgYSBsZWFkaW5nIFVURjggQk9NIGluIGVudGl0aWVzLgoKV2VkIEp1biAyMCAxNTozODo1OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkIGEgYnVnIGZvdW5kIHdoZW4gcG9zdCB2YWxpZGF0aW5nIGFuIGVudGl0eSByZWYKCSogeG1sbGludC5jOiBhZGRlZCAtLWxvYWRkdGQgYW5kIHNsaWdseSBjaGFuZ2VkIC0tcG9zdHZhbGlkIHRvCgkgIGFjdGl2YXRlIGl0IHRvbwoKVHVlIEp1biAxOSAyMDowMzo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYyB4aW5jbHVkZS5jIHhwb2ludGVyLmM6IGJ1ZyAjNTY0MDIgZXhwb3NlZCBhIG51bWJlciBvZgoJICB3ZWFrbmVzcyBpbiB0aGUgbm9kZSBjb3B5IHRoZSBYUG9pbnRlciBhbmQgdGhlIFhJbmNsdWRlCgkgIGltcGxlbWVudGF0aW9ucy4gU2VyaW91cyBjbGVhbnVwLgoKVHVlIEp1biAxOSAxNDo1MDoxOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBLamFydGFuIE1hcmFhcyBwcm92aWRlZCBhIHNtYWxsIHBhdGNoIHRvCgkgIGFkZCB4bWwyLWNvbmZpZy5pbiB0byBFWFRSQV9ESVNUCgpUdWUgSnVuIDE5IDEzOjA0OjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYyB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmM6IFN0ZXBoYW4gS3Vsb3cKCSAgcHJvdmlkZWQgYW5vdGhlciBmYWlsaW5nIGNhc2UgZm91bmQgaW4gS0RFLCB0aGUgd2F5IHRoZQoJICBjdHh0LT52Y3R4dC5ub2RlVGFiIHdhcyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGNoYW5nZWQgb3ZlcgoJICB0aW1lIGJ1dCBpdCB3YXNuJ3QgY29tcGxldGVseSBjbGVhbmVkIHVwLiBUaGlzIHNob3VsZCBmaXggaXQuCgpTdW4gSnVuIDE3IDE5OjU2OjMzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IFN0ZXBoYW4gS3Vsb3cgYWxzbyByYWlzZWQgdGhlIGZhY3QgdGhhdCBsaW5lIG51bWJlcgoJICBjb3VsZCBnZXQgbWlzY291bnRlZCBtYWtpbmcgZGVidWcgaGFyZGVyLCBmaXhlZCB0aGUgcHJvYmxlbQoJICBpbiB4bWxQYXJzZUNoYXJEYXRhKCkKClN1biBKdW4gMTcgMTk6MTc6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBTdGVwaGFuIEt1bG93IHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aGVuIHZhbGlkYXRpbmcKCSAgYW5kIHVzaW5nIGFuIGVtcHR5IGVudGl0eSwgZm9yZ290IGEgJ2JyZWFrJyBpbiBhIGNhc2UuCgpTdW4gSnVuIDE3IDE2OjQ3OjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxIYXNOc1Byb3AoKSBhY2NvcmRpbmdseSB0byBidWcgIzU1NjgzCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB3aXRoIDIuMy4xMQoKU3VuIEp1biAxNyAxMjoyNDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFRPRE86IHVwZGF0ZWQgYWRkaW5nIGNsZWFudXAgb2YgZ2VuZXJhdGVkIGRvYwoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIHRvIHJlbGVhc2UgMi4zLjExCgkqIHhtbGxpbnQuYzogYWRkZWQgLS12ZXJzaW9uIGZvciBidWcgcmVwb3J0aW5nCgkqIGRvYy9odG1sLyouaHRtbDogcmVidWlsdCB0aGUgZG9jCgpTYXQgSnVuIDE2IDIzOjIzOjMzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZmlyc3QgcGFydCBvZiB0aGUgd29yayBvbiBzZWxlY3RpbmcgbmFtZXNwYWNlIHRvCgkgIGZpeCBidWcgIzU2MTE1IAoKU2F0IEp1biAxNiAwMDoyMDo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IExhc3psbyBQRVRFUiBwcm92aWRlZCBhIGZpeAoJICB3aGVuIHVzaW5nIC1saWNvbnYKCSogVE9ETzogdXBkYXRlZAoKRnJpIEp1biAxNSAwNzowODo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLltjaF06IG1vcmUgd29yayBvbiB0aGUgSFRNTCBzZXJpYWxpemF0aW9uIHJvdXRuZXMsCgkgIGNsZWFudXAsIGVuY29kaW5nIHN1cHBvcnQuCgpUaHUgSnVuIDE0IDEwOjMxOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogVGhvbWFzIEJyb3llciBzdWdnZXN0ZWQgYSBiZXR0ZXIgcGF0Y2ggZm9yIHRoZSAvIGFyZwoKVGh1IEp1biAxNCAwMTowMTozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGJ1ZyBkZXRlY3RlZCBieSBBbmtoIHdoZW4gLyBpcyB1c2VkIGFzIGEgZnVuY3Rpb24gYXJnCgpXZWQgSnVuIDEzIDIzOjA4OjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5bY2hdIEhUTUx0cmVlLmM6IHN0b3JlZCB0aGUgaW5saW5lL2Jsb2NrIHByb3BlcnR5CgkgIG9mIGVsZW1lbnQgYW5kIHVzZSBpdCB0byBhdm9pZCBvdXRwdXR0aW5nIGZvcm1hdHRpbmcgc3BhY2VzIGF0CgkgIHRoZSB3cm9uZyBwbGFjZS4gSW1wbGVtZW50ZWQgdGhlIGZvcm1hdCBwYXJhbWV0ZXIgZm9yIEhUTUwgc2F2ZS4KCSogcmVzdWx0L0hUTUwvZG9jMi5odG0gcmVzdWx0L0hUTUwvZG9jMy5odG0gcmVzdWx0L0hUTUwvZnA0MC5odG0KCSAgcmVzdWx0L0hUTUwvc2NyaXB0Lmh0bWwgcmVzdWx0L0hUTUwvdGVzdDIuaHRtbCByZXN1bHQvSFRNTC90ZXN0My5odG1sCgkgIHJlc3VsdC9IVE1ML3dpcmVkLmh0bWw6IG9mIGNvdXJzZSB0aGlzIGltcGFjdCB0aGUgcmVzdWx0IG9mIGEKCSAgbnVtYmVyIG9mIEhUTUwgdGVzdHMKClRodSBKdW4gMTQgMDk6NDk6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5bY2hdOiBzdGFydGVkIGF1Z21lbnRpbmcgdGhlIEhUTUwgc2F2ZSBBUEkgd2l0aAoJICBlbmNvZGluZyBhbmQgZm9ybWF0dGluZyBwYXJhbWV0ZXJzCgpXZWQgSnVuIDEzIDA5OjQ0OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuaDogY2xlYW51cCBhbmQgc3RhcnRlZCBldmFsdWF0aW5nIHRoZSB3b3JrIG5lZWRlZCBvbgoJICByZXZhbXBpbmcgdGhlIEhUTUwgb3V0cHV0IGNvZGUKCk1vbiBKdW4gMTEgMTk6Mjk6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IGhhbmRsaW5nIG9mIFBJcyBhbmQgPD9zZ21sLWRlY2xhcmF0aW9uIGluIGVudGl0aWVzLgoKVHVlIEp1biAxMiAwODo0NjoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkIGJ1ZyAjNTYwNDksIGZvcmdvdCBvbmUgY2hlY2sgaW4gdGhlCgkgIHZhbGlkYXRpb24gcm91dGluZQoKVHVlIEp1biAxMiAwODowOTo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXTogZ3JyciAuLi4gbmFtZXNwYWNlIGlzIGEgQysrIHJlc2VydmVkIGtleXdvcmQKClR1ZSBKdW4gMTIgMDY6Mjk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBsaWJ4bWwuaDogZml4ZWQgYW4gZXJyb3IgaW4gbGFzdCBjb21taXQKCSogZG9jL0ZBUS5odG1sOiBhZGRlZCBhbiBlbnRyeSBmb3IgY29tcGlsYXRpb24gZnJvbSBDVlMKCk1vbiBKdW4gMTEgMTA6MDc6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWx2ZXJzaW9uLmguaW4gbGlieG1sLmg6IEN5Z3dpbiBwYXRjaGVzCgkqIHRyZWUuYzogeG1sRnJlZU5vZGVMaXN0IHBhdGNoIHNpbWlsYXIgdG8geG1sRnJlZU5vZGUgb25lCgkqIHRyZWUuaDogY2xlYW51cAoKU2F0IEp1biAgOSAxOToxNjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogcGF0Y2hlZCB4bWxGcmVlTm9kZSgpIHRvIGF2b2lkIGZyZWVpbmcoKSBhIHN0YXRpYwoJICBtZW1vcnkgYmxvY2sgaW4gYSBzdHJhbmdlIGNhc2Ugd2hlcmUgbGlieG1sIGlzIGxpbmtlZCB0d2ljZQoJICBpbiB0aGUgYmluYXJ5LgoKU2F0IEp1biAgOSAxODozOTowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IChhPyAsIGI/ICwgYz8gLCAuLi4gLCB6Pykgd2FzIHN0b3JpbmcvcmVzdGF1cmluZwoJICBzdGF0ZSBmYXIgdG9vIG9mdGVuLCBzaW1wbGUgZml4IHVzZWQgdG8gYXZvaWQgaXQuCgpTYXQgSnVuICA5IDE2OjEwOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeGluY2x1ZGUuYzogUmFwaGFlbCBIZXJ0em9nIGhhZCBhIHRyb3VibGUgd2l0aCBEVEQgbm9kZXMKCSAgYmVpbmcgcHJvY2Vzc2VkLCBhcHBsaWVkIGhpcyBwYXRjaAoJKiB0cmVlLmM6IGZpeGVkIGEgYnVnIHJhaXNlZCBpbiB4bWxTdGF0aWNDb3B5Tm9kZUxpc3QoKQoKU2F0IEp1biAgOSAxNTo1MDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHVyaS5jIGluY2x1ZGUvd2luMzJjb25maWcuaDogSWdvciAgWmxhdGtvdmljCgkgIHByb3ZpZGVkIGZpeGVzIHRvIGNvbXBpbGUgb24gTVNDQyBhZ2FpbgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9saWJ4bWwyL2xpYnhtbDIqLmRzcDogaGUKCSAgYWxzbyBwcm92aWRlZCBhbiB1cGRhdGUgZm9yIHRoZSBwcm9qZWN0IGZpbGVzLgoKVGh1IEp1biAgNyAyMTo1MjoxMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogYXBwbGllZCBTdGV2ZSBUaW5uZXkgcGF0Y2ggdG8geG1sTmV3TnNQcm9wIHRvIGZpeAoJICBidWcgIzU1ODEwCgpUaHUgSnVuICA3IDIxOjI5OjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxHZXROc1Byb3AoKSB0byBjbG9zZSBidWcgIzU1NjgzCgkgIE5vdGUgdGhpcyByZXF1aXJlcyBsaWJ4c2x0IHRvIHVzZSBpdCdzIG93biBmdW5jdGlvbiBpbnN0ZWFkLgoKVGh1IEp1biAgNyAxODowNjozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHdoZW4gaW4gYSBwcmUgZWxlbWVudCBubyBmb3JtYXR0aW5nIHNwYWNlIHNob3VsZAoJICBiZSBhZGRlZC4KCSogdGVzdC9IVE1ML3ByZS5odG1sIHJlc3VsdC9IVE1ML3ByZS5odG1sKjogYWRkZWQgYSByZWdyZXNzaW9uIHRlc3QKClRodSBKdW4gIDcgMTc6Mjk6MzggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIHRlc3RzIGZvciBzaWduYWwoKSBhbmQgc2lnbmFsLmgKCkZyaSBKdW4gIDggMTA6MTc6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiByb2JlcnQgcG9pbnRlZCBvdXQgeG1sWFBhdGhOSU5GIHdhcyBub3QgaW5pdGlhbGl6ZWQKCkZyaSBKdW4gIDggMTA6MDE6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvbGlieG1sLWRvYy5lbDogRmVsaXggTmF0dGVyIHByb3ZpZGVkIGEgbmV3IHZlcnNpb24gZm9yCgkgIGxpYnhtbDIKCkZyaSBKdW4gIDggMDc6MjA6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiB3aGVuIGluIGEgcHJlIGVsZW1lbnQgbm8gZm9ybWF0dGluZyBzcGFjZSBzaG91bGQKCSAgYmUgYWRkZWQuCgpXZWQgSnVuICA2IDE4OjA3OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBhZGQgLW1pZWVlIHRvIENGTEFHUyB3aGVuIGNvbXBpbGluZyBvbiBMaW51eC9hbHBoYQoKVGh1IEp1biAgNyAwNjo0NDowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogaW1wbGVtZW50ZWQgdGhlIDw/c2dtbC1kZWNsYXJhdGlvbiBlbmNvZGluZz0ieHh4Ij8+CgkgIGhhY2sKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxIYXNOc1Byb3AgYXMgc3VnZ2VzdGVkIGluIGJ1ZyByZXBvcnQgIzU1NjUzIAoJKiB1cmkuYzogZml4ZWQgYSB3YXJuaW5nCgpUdWUgSnVuICA1IDIyOjU0OjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogdHJ5aW5nIHRvIGNsb3NlIGJ1ZyAjNTU3NzIgZXNjYXBpbmcgaW4gc2NyaXB0CgkgIGVsZW1lbnRzCgkqIGRvYy94bWwuaHRtbDogc3VnZ2VzdCB0byBzZW5kIG1haWwgdG8gdGhlIGxpc3QKClR1ZSBKdW4gIDUgMTk6MTE6MDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlcnJvci5jOiBhdHRlbXB0IHRvIGZpeCB0aGUgeG1sR2V0VmFyU3RyIGJyZWFrYWdlIG9uY2UgYW5kIGZvcgoJICBnb29kLiBVc2UgYSBtYWNybyBhbmQgYmFzZWQgb24gdGhlIHNvbHV0aW9uIHByb3ZpZGVkIGluIAoJICB2c25wcmludGYgbWFudWFsIHBhZ2UgZnJvbSBHTlUuCgpUdWUgSnVuICA1IDE0OjQ2OjEwIENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIGVycm9yLmM6IFdvcmthcm91bmQgZm9yIG5vbi1wcmVzZXJ2aW5nIHZhcmlhZGljIGxpc3QuCgkqIHRyaW8uYyB0cmlvLmggdHJpb3AuaCBzdHJpby5jIHN0cmlvLmg6IFVwZ3JhZGVkIHRvIHRyaW8gYmFzZWxpbmUgMS40CgpTYXQgSnVuICAyIDA2OjEyOjMzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhZGRlZCAyLjMuMTAgcmVsZWFzZQoKRnJpIEp1biAgMSAxMToyNzoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMy4xMAoKVGh1IE1heSAzMSAyMDo0MjozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IEdhcnkgUGVubmluZ3RvbiBzcG90dGVkIGEgZmV3IHRyb3VibGVzIHdpdGggZmlsZTovLy8KClRodSBNYXkgMzEgMjA6MTg6NTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbmNvZGluZy5jOiBSb2JlcnQgQ29sbGlucyBwcm92aWRlZCBhIHBhdGNoIHRvIGFkZCB0aGUKCSAgIlVTLUFTQ0lJIiBlbmNvZGluZyBhbGlhcwoKV2VkIE1heSAzMCAyMToxMjo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgZW5jb2RpbmcuW2NoXTogV2lsbGlhbSBNLiBCcmFjayBwcm92aWRlZCBhIHNldCBvZiBVVEY4CgkgIHN0cmluZyBvcmllbnRlZCBmdW5jdGlvbnMgYW5kIHN0YXJ0ZWQgY2xlYW5pbmcgdGhlIHJlbGF0ZWQgYXJlYXMKCSAgaW4geHBhdGguYyB3aGljaCBuZWVkZWQgZml4aW5nIGluIHRoaXMgcmVzcGVjdAoKV2VkIE1heSAzMCAyMDozMDo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKYXJvc2xhdyBLb2xha293c2tpIHRvIGNsb3NlIGJ1ZwoJICAjNTUzODAKCSogdHJlZS5jOiBwYXRjaCB0byB4bWxOb2RlR2V0Q29udGVudCgpIHRvIGdldCBDREFUQSBzZWN0aW9uIGNvbnRlbnQKCk1vbiBNYXkgMjggMTI6NTY6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBUT0RPOiB1cGRhdGVkCgkqIG5hbm9odHRwLltjaF0gOiBzdGFydGVkIGFkZGluZyBBUElzIHRvIGdldCB0aGUgcmVkaXJlY3RlZCBVUkwKCSAgd2hlbiB0aGlzIG9jY3VycyAobmVlZGVkIGZvciBmdXJ0aGVyIGJhc2UgY29tcHV0YXRpb24KCSogdHJlZS5oOiBjbGVhbnVwCgkqIGVuY29kaW5nLmM6IGNsZWFudXAKCSogU0FYLmM6IG1pbm9yIGNoYW5nZSBhcm91bmQgY3R4dC0+bG9hZHN1YnNldAoKRnJpIE1heSAyNSAwOTozNjoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvTWFrZWZpbGUuYW06IHNtYWxsIGNoYW5nZSB0byBoYXZlCgkgIGluY2x1ZGUvbGlieG1sIHJlYnVpbHQgaWYgd29ya2luZyBmcm9tIENWUy4KCSogdXJpLmM6IGFwcGxpZWQgYW5vdGhlciBwYXRjaCBmcm9tIENhcmwgRG91Z2xhcyBmb3IgVVJJIGVzY2FwaW5nLAoJICB0aGlzIHNob3VsZCBjbG9zZSBidWcgIzUxODc2CgpXZWQgTWF5IDIzIDE1OjQwOjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgWEluY2x1ZGUgcmVjdXJzaXZlIGJlaGF2aW91ciBidWcgIzU0Njc4CgkqIHJlc3VsdC9YSW5jbHVkZS9yZWN1cnNpdmUueG1sIHRlc3QvWEluY2x1ZGUvZG9jcy9yZWN1cnNpdmUueG1sCgkgIHRlc3QvWEluY2x1ZGUvZW50cy9pbmMudHh0IHRlc3QvWEluY2x1ZGUvZW50cy9zdWItaW5jLmVudDoKCSAgYWRkZWQgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHBhcnNlci5oOiBwcmVwYXJpbmcgZm9yIHRoZSBYU0xUIG1vZGUgd2hlcmUgRFREIGluaGVyaXRlZAoJICBhdHRyaWJ1dGVzIGFyZSBhZGRlZCB0byB0aGUgdHJlZS4KCldlZCBNYXkgMjMgMTM6NTk6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5bY2hdOiBVcGRhdGVkIHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBMYXN0IENhbGwgdmVyc2lvbgoJKiByZXN1bHQvWEluY2x1ZGUvaW5jbHVkZSB0ZXN0L1hJbmNsdWRlL2luY2x1ZGU6IHVwZGF0ZWQgdGhlCgkgIHRlc3RzdWl0ZSBhY2NvcmRpbmdseQoKV2VkIE1heSAyMyAxMjoyNzo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5bY2hdOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBDYXJsIERvdWdsYXMgZm9yIFVSSSBlc2NhcGluZywKCSAgcmVsYXRlZCB0byBidWcgIzUxODc2CgpUdWUgTWF5IDIyIDE4OjQ2OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCBhIGdyb3NzIG1pc3Rha2UgaW4gYmFzZSBjb21wdXRhdGlvbiwgeG1sOmJhc2UgaXMKCSAgbm90IGNvbXBsZXRlbHkgY29ycmVjdCB5ZXQgKG5lZWQgY2FzY2FkZSkuCgkqIHhwYXRoLltjaF06IGFkZGVkIHRoZSBmZXcgdGhpbmdzIG5lZWRlZCB0byBmaW5kIGEgZnVuY3Rpb24gbmFtZQoJICBhbmQgVVJJIGZyb20gdGhlIFhQYXRoIGNvbnRleHQgd2hlbiBpdCBpcyBjYWxsZWQuCgpUdWUgTWF5IDIyIDE3OjAwOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY2F0YWxvZy5bY2hdOiBmaXhlcyBhbmQgYWRkIHhtbExvYWRDYXRhbG9ncygpCgkqIERPQ0JwYXJzZXIuYzogc21hbGwgY2xlYW51cAoJKiB4bWxsaW50LmM6IGFkZGVkIGEgLS1jYXRhbG9ncyBvcHRpb24gdG8gbG9hZCBjYXRhbG9ncyBmcm9tCgkgICRTR01MX0NBVEFMT0dfRklMRVMKCSogdHJlZS5jOiBjbGVhbnVwCgkqIGNvbmZpZ3VyZS5pbjogaWNvbnYgbGlicmFyeSBmaXh1cCwgSUNPTlZfTElCUyAKCk1vbiBNYXkgMjEgMTY6MDU6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjYXRhbG9nLmM6IGhhbmRsaW5nIG9mIENBVEFMT0cgZW50cmllcy4gZGV0ZWN0aW9uIG9mIHJlY3Vyc2lvbiwKCSAgYW5kIGEgZmV3IGJ1Z2ZpeGVzCgkqIHhwYXRoLmM6IGZpeGluZyBidWcgIzU0OTUxIFFOQU1FIHdpdGggbm8gcHJlZml4IHNob3VsZCBub3QgbWF0Y2gKCSAgYWdhaW5zdCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKCk1vbiBNYXkgMjEgMTA6MTQ6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBKb2UgT3J0b24gcmVwb3J0ZWQgYSBidWcgZm91bmQgd2l0aCBJUkl4IGNvbXBpbGVyLgoKU3VuIE1heSAyMCAxNToxNTo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBwcm9wYWdhdGlvbiBjb250ZXh0IGluZm8gd2hlbiBwYXJzaW5nIGFuCgkgIGV4dGVybmFsIGVudGl0eS4KCSogZG9jL2h0bWwvKi5odG1sOiByZWdlbmVyYXRlZCBhIGNvdXBsZSBvZiBkb2NzCgpTYXQgTWF5IDE5IDE3OjExOjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiB1cGRhdGUgd2l0aCAyLjMuOSBpbmZvcm1hdGlvbnMKClNhdCBNYXkgMTkgMTY6NTA6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5oIGRlYnVnWE1MLmggcGFyc2VySW50ZXJuYWxzLmggdHJlZS5oIHZhbGlkLmMKCSAgeG1sdmVyc2lvbi5oLmluIHhwYXRoSW50ZXJuYWxzLmggeHBhdGguaDogc29tZSBjbGVhbnVwIGZvciBndGstZG9jCgkqIGRvYy9odG1sLyogOiByZWJ1aWx0IHRoZSBkb2NzCgkqIHZhbGlkLmM6IHNtYWxsIHBhdGNoIHdoaWNoIG1heSBpbXByb3ZlIHNvbWUgY2FzZSB3aGVuCgkgIHZhbGlkYXRpbmcuCgpTYXQgTWF5IDE5IDE1OjIwOjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBDbG9zZWQgYnVnICM1NDg5MQoJKiByZXN1bHQvSFRNTC9jZl8xMjguaHRtbCogdGVzdC9IVE1ML2NmXzEyOC5odG1sOiBhZGRlZCB0aGUgdGVzdAoJICB0byB0aGUgc3VpdGUKClRodSBNYXkgMTcgMTQ6MTU6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbmNvZGluZy5oIGhhc2guYyBuYW5vZnRwLmggcGFyc2VyLmggdHJlZS5oIHVyaS5oIHhsaW5rLmggeHBvaW50ZXIuYzoKCSAgYXBwbGllZCBhIGRvY3VtZW50YXRpb24gcGF0Y2ggZnJvbSBMb3RSIGFuZCBmaWxsZWQgaW4gYSBmZXcgbWlzc2luZwoJICBkZXNjcmlwdGlvbnMKCldlZCBNYXkgMTYgMjM6MDI6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHRyZWUuYyBwYXJzZXIuYzogc3BlZWQgb3B0aW1pemF0aW9ucyBhdCB0aGUgcGFyc2VyIGxldmVsCgkgIGRvY3VtZW50IHRyZWUgZnJlZWluZyBhbmQgeHBhdGggZXZhbHVhdGlvbgoKV2VkIE1heSAxNiAxMjo1NTo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlci5oIHBhcnNlckludGVybmFscy5oOiBmaXhlZCBhIGNvdXBsZSBvZgoJICBpbnRlcmZhY2VzIGZvciBoYW5kbGluZyBtZW1vcnkgYnVmZmVyIGlucHV0IHRvIGNvbnN0IGNoYXIgKgoJICB1cG9uIHN1Z2dlc3Rpb24gb2YgSmFtZXNILgoKVHVlIE1heSAxNSAxNzoyMjoyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogTG9UUiBzZW50IGEgcGF0Y2ggZml4aW5nIHRoZSBwcmV2aW91cyBjb21taXQgCgpUdWUgTWF5IDE1IDE0OjQwOjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiB0cnlpbmcgdG8gZGVhbCBhZ2FpbiB3aXRoIHRoZSBzdG9vcGlkIC1SIGxpbmtpbmcKCSAgZmxhZyBvZiBTb2xhcmlzCgpUdWUgTWF5IDE1IDEyOjQ5OjUwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguaDogdHdvIG5vZGVzZXQgYWNjZXNzIG1hY3JvcyBmcm9tIFRob21hcyBCcm95ZXIKClR1ZSBNYXkgMTUgMTE6NDI6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHhwYXRoLmggeHBhdGhJbnRlcm5hbHMuaDogYXBwbHkgYW4gWFBhdGggQVBJIGNsZWFudXAKCSAgcGF0Y2ggZnJvbSBUaG9tYXMgQnJveWVyCgpUdWUgTWF5IDE1IDEwOjUyOjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYyB0ZXN0L1ZDTS92MlszNF0ueG1sOiBGaXhlZCBidWcgIzU0NjMxIGFkZGVkIHNwZWNpZmljIHRlc3QKCSAgY2FzZQoJKiBJTlNUQUxMOiB3YXMgZW1wdHkgYWRkZWQgc3R1ZmYgZnJvbSB0aGUgRkFRCgpGcmkgTWF5IDExIDE5OjM3OjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdOiBmaXhpbmcgYnVnICM1NDQ0NiwgYnkgY2xlYW5pbmcgc29tZSBidWdzIGluIHRoZQoJICBhdHRyaWJ1dGVzIGhhbmRsaW5nIGFuZCAjNTQ0MzMgYnkgYWRkaW5nIHhtbFVuc2V0UHJvcCgpCgkgIGFuZCB4bWxVbnNldE5zUHJvcCgpCgpGcmkgTWF5IDExIDE2OjA3OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBQYXRjaCBmcm9tIEpvbmFzIEJvcmdzdHL2bQoJKGh0bWxHZXRFbmRQcmlvcml0eSk6IE5ldyBmdW5jdGlvbiwgcmV0dXJucyAKCXRoZSBwcmlvcml0eSBvZiBhIGNlcnRhaW4gZWxlbWVudC4KCShodG1sQXV0b0Nsb3NlT25DbG9zZSk6IE9ubHkgY2xvc2UgaW5saW5lIGVsZW1lbnRzIGlmIHRoZXkgCglhbGwgaGF2ZSBsb3dlciBvciBlcXVhbCBwcmlvcml0eS4KCSogcmVzdWx0L0hUTUw6IHRoaXMgb2YgY291cnNlIGNoYW5nZWQgYSBudW1iZXIgb2YgdGVzdHMgcmVzdWx0cy4KClRodSBNYXkgMTAgMTc6MzA6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jIGNhdGFsb2cuYzogcGx1Z2dlZCBpbiB0aGUgZGVmYXVsdCBjYXRhbG9nIHJlc29sdXRpb24KCSogZG9jL2dub21lLXhtbC5zZ21sOiBsaW5rZWQgaW4gdGhlIERvY2Jvb2sgcGFyc2VyIGFuZCBjYXRhbG9nCgkgIGRvY3VtZW50YXRpb25zCgkqIGRvYy9odG1sL2xpYnhtbC0qLmh0bWw6IHJlYnVpbGQgYWRkZWQgdGhlIG1pc3Npbmcgb25lcyB0byBDVlMKClRodSBNYXkgMTAgMTY6MTQ6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSB4bWx2ZXJzaW9uLmguaW4gY29uZmlndXJlLmluIGluY2x1ZGUvTWFrZWZpbGUuYW06CgkgIGludGVncmF0aW5nIGNhdGFsb2dzCgkqIGNhdGFsb2cuW2NoXSB0ZXN0Q2F0YWxvZy5jOiBhZGRpbmcgYSBzbWFsbCBjYXRhbG8gQVBJCgkgIChvbmx5IFNHTUwgY2F0YWxvZyBzdXBwb3J0KS4KCSogcGFyc2VyLmM6IHJlc3RhdXJlZCB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSBBUEkKCldlZCBNYXkgIDkgMTI6NTA6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHpiQGJpc3AuY29tIHJlcG9ydGVkIGFuIGVycm9yIGluIHhtbE5vZGVHZXRMYW5nKCkKClR1ZSBNYXkgIDggMTI6MzE6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogYWRkZWQgeG1sUGFyc2VFeHRlcm5hbEVudGl0eVByaXZhdGUoKSB0byBhbGxvdwoJICBwcm9wYWdhdGlvbiBvZiBjdHh0LT5fcHJpdmF0ZSB3aGVuIHBhcnNpbmcgZXh0ZXJuYWwgZW50aXRpZXMKClR1ZSBNYXkgIDggMTA6MjY6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCB0aGUgYnVnIHJlcG9ydGVkIGJ5IEJqb3JuIGluIGh0bWxOb2RlRHVtcAoKVHVlIE1heSAgOCAwOTozMDoxMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgYSBzbWFsbCBwb3J0YWJpbGl0eSBwcm9ibGVtIHdpdGggQU1fQ09ORElUSU9OQUwKCk1vbiBNYXkgIDcgMjI6NDQ6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiB3YXJuIHdoZW4gaW5kZXRlcm1pbmlzdCBjb250ZW50IG1vZGVsIGlzIGRldGVjdGVkCgkqIHJlc3VsdC9WQy9FbGVtZW50VmFsaWQ4OiB0aGlzIGFkZHMgYSBtZXNzYWdlCgkqIE1ha2VmaWxlLmFtOiBhZGQgLS1ub3ZhbGlkIGZvciBWQ00gdGVzdHMKCSogcGFyc2VySW50ZXJuYWxzLmM6IGFkZGVkIGEgY2FsbCB0byBJbml0IG1lbW9yeSAKCkZyaSBNYXkgIDQgMTk6NTE6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGh0bWxOZXdEb2MgU1lTVEVNIGFuZCBQVUJMSUMgSUQgaW52ZXJzaW9uCgkgIHdoZW4gYm90aCBwYXJhbWV0ZXJzIGFyZSBOVUxMLgoKRnJpIE1heSAgNCAxNzoxOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGFwcGxpZWQgc21hbGwgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24sIHJlaW5kZW50ZWQKCSAgc29tZSBwYXJ0IG9mIHRoZSBjb2RlLgoKVGh1IE1heSAgMyAxMzoxMDo0MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogcHJlcGFyaW5nIGZvciAyLjMuOAoJICByZWxlYXNlLCB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcwoKVGh1IE1heSAgMyAxMjo0Nzo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIDogY2xhcmlmaWVkIGFuZCBjbGVhbnVwCgkgIHByaW50aW5nIG9mIGFibm9ybWFsIGZsb2F0cyBpbiB0ZXN0cy4KClRodSBNYXkgIDMgMTA6MjU6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IHRyeWluZyB0byBmaXggdGhlIHByb2JsZW0gcmVwb3J0ZWQgYnkgSm9uYXMgQm9yZ3N0cvZtCgkqIHJlc3VsdHMvSFRNTC8gOiBhIGZldyBjaGFuZ2VzIGluIHRoZSBvdXRwdXQgb2YgdGhlIEhUTUwgdGVzdHMgYXMKCSAgYSByZXN1bHQuCgkqIGNvbmZpZ3VyZS5pbjogdHlpbmcgdG8gZml4IC1saWNvbnYgd2hlcmUgbmVlZGVkCgpXZWQgTWF5ICAyIDE5OjEwOjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGZpeGVkIGEgc3R1cGlkIGVycm9yCgpXZWQgTWF5ICAyIDE4OjM5OjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiBtYWtlIHRoZSBpbmNsdXNpb24gb2YgdGhlIHRyaW8KCSAgbW9kdWxlcyBpbiB0aGUgbGlicmFyeSBjb25kaXRpb25hbAoKV2VkIE1heSAgMiAxNDozOTo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogcGF0Y2hlIGZyb20gIEzhc3ps8yBLb3bhY3MsIGZpeGVkIGVudGl0aWVzIHJlZnMKCSAgaW4gYXR0cmlidXRlcyBoYW5kbGluZwoKV2VkIE1heSAgMiAxMjo1NjowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IEJqb3JuIFJlZXNlIHByb3ZpZGVkIGEgZml4IGZvciBhIHByb2JsZW0gb24gYnVmZmVyCgkgZmx1c2hpbmcKCk1vbiBBcHIgMzAgMjI6Mjk6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXggb2YgYW4gWFNMVCBuYW1lc3BhY2UgYnVnIHJlcG9ydGVkIG9uIHRoZSBsaXN0CgkgIGdlbmVyYWwvYnVnLTgtCgpNb24gQXByIDMwIDE5OjQyOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogc3RyaW8uaCB0cmlvLmM6IERhbiBNY05pY2hvbCBzdWdnZXN0ZWQgYSBjb3VwbGUgb2Ygc21hbGwKCSAgZml4ZXMgZm9yIEFJWCA0LjMuMyB1c2luZyBWaXN1YWwgQWdlIDUuMC4yIGNvbXBpbGVyCgpNb24gQXByIDMwIDEzOjQ0OjQ4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jIHBhcnNlci5jIGVuY29kaW5nLmM6IHNwZW50IGEgYml0IG1vcmUgdGltZSBsb29raW5nCgkgIGF0IHRoZSBwYXJzaW5nIHNwZWVkIGFuZCBET00gaGFuZGxpbmcuIEFkZGVkIGEgZmV3IG1vcmUKCSAgc3BlZWR1cHMuCgpTdW4gQXByIDI5IDIxOjUzOjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IHNtYWxsIGJ1dCBlZmZlY3RpdmUgcGFyc2luZyBzcGVlZCBpbXByb3ZlbWVudAoKU3VuIEFwciAyOSAxOTowMjoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZGVmYXVsdCBvbiB0aGUgRG9jQm9vayBwYXJzZXIgaW5jbHVzaW9uIChmb3IgR25vbWUpCgkqIERPQ0JwYXJzZXIuaDogZml4ZWQgYSBoZWFkZXIgcmVmZXJlbmNlCgpTYXQgQXByIDI4IDE5OjAwOjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIHhwYXRoLmM6IGFwcGxpZWQgQmpvcm4gcGF0Y2hlcyBmb3IgRlBFIG9uIHRoZQoJICBhbHBoYQoKU2F0IEFwciAyOCAxODo1NDoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXSB4bWxJTy5oOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9lIE1jQWxlcm5leSB0byBhZGQKCSAgeG1sU2F2ZUZvcm1hdEZpbGVUbygpCgpTYXQgQXByIDI4IDE2OjMzOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogc2ltcGxlIGFuZCBlZmZpY2llbnQgb3B0aW1pemF0aW9uLCBYUGF0aCBmdW5jdGlvbnMKCSAgYXdheXMgYmluZCB0byB0aGUgc2FtZSBjb2RlLCBjYWNoZSB0aGlzCgkqIFRPRE86IHVwZGF0ZWQgKGJ5IHNheWluZyBzb21lIGlzIG9ic29sZXRlKQoKU2F0IEFwciAyOCAxNDoyMzozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IG1vcmUgY2xlYW51cCB3b3JrIG9uIFhQYXRoIG5hbWUgcGFyc2luZyByb3V0aW5lcwoKRnJpIEFwciAyNyAxOTowNjoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlckludGVybmFscy5jIHhwYXRoLltjaF06IHNvbWUgVVRGOCBjbGVhbnVwIG9uCgkgIHhtbFhQYXRoUGFyc2VOYW1lCgkqIHhwYXRoLmM6IElnb3IgWmxhdGtvdmljIHN1Z2dlc3RlZCBhIGNoYW5nZSBmb3IgTkFOIGFuZCBNU0MKCSogZGVidWdYTUwuYzogYXZvaWQgY29tcGlsYXRpb24gcHJvYmxlbXMgaWYgY29tcGlsaW5nIHdpdGhvdXQKCSAgSFRNTCBzdXBwb3J0LCBJZ29yIFpsYXRrb3ZpYwoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYmVpbmcgYWJsZSB0byBjb21waWxlIHdpdGhvdXQKCSAgWFBhdGggb24gV2luZG93cwoKVGh1IEFwciAyNiAyMjo1MzowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5tNDogeWV0IGFub3RoZXIgcGF0Y2ggZnJvbSBUb3NoaW8gS3VyYXRvbWkKClRodSBBcHIgMjYgMjE6Mjc6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBsaWJ4bWwubTQgbGlieG1sMi1zcGVjLmluOiBuZXcgcGF0Y2hlcyBmcm9tIFRvc2hpbyBLdXJhdG9taQoKVGh1IEFwciAyNiAyMDo1Mzo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sU2F2ZUZvcm1hdEZpbGUgaW50ZXJmYWNlIGZvciBzYXZpbmcKCSAgYW5kIGluZGVudGluZyBhIGZpbGUuCgpUaHUgQXByIDI2IDE2OjM1OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYnVnICM1MzY4OSByZWxhdGVkIHRvIHByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKQoKVGh1IEFwciAyNiAxMjo1Nzo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogcGF0Y2hlIGZyb20gIEzhc3ps8yBLb3bhY3MKClRodSBBcHIgMjYgMTE6MzE6NTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBmaXhlcyBmcm9tIENocmlzdGlhbiBHbGFobiBidWcgcmVwb3J0ICM1MzM5MQoKVGh1IEFwciAyNiAxMToxNDo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IEplYW4gRnJhbudvaXMgTGVjb210ZSBwcm92aWRlZCBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uCgkgIGFuZCBhIGZpeCB0byBidWcgIzUzNTM3CgpUaHUgQXByIDI2IDA5OjQyOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbGlieG1sLm00OiBhZGRlZCBBTV9QQVRIX1hNTDIgcHJvdmlkZWQgYnkgVG9zaGlvIEt1cmF0b21pCgpXZWQgQXByIDI1IDIxOjA1OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jIFNBWC5jOiBhIGJpdCBtb3JlIHdvcmsgb24gZW50aXRpZXMgcHJvY2Vzc2luZy4KCSAgU3RpbGwgTmVlZCB0byBjbGVhbnVwIFhNTCBvdXRwdXQgYW5kIHJlZmVyZW5jZXMgaW4gYXR0cmlidXRlcwoKV2VkIEFwciAyNSAxNzo1MjoyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBpbmNsdWRlL01ha2VmaWxlLmFtOiB0d28gcGF0Y2hlcyBmcm9tICBM4XN6bPMgS2924WNzCgpXZWQgQXByIDI1IDE0OjU2OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gZml4ICM1MzU3NCwgbm90IGNvbXBsZXRlbHkgY29tcGxldGUsCgkgIEkgd291bGQgbGlrZSB4bWxsaW50IC0tY29weSAtLWRlYnVnIHRlc3QvZW50MSBhbmQKCSAgeG1sbGludCAtLWRlYnVnIHRlc3QvZW50MSB0byBzaG93IHRoZSBzYW1lIHJlc3VsdC4KCSogeHBhdGguYzogZml4IGEgYnVnIHdoZW4gdHJ5aW5nIHRvIHNvcnQgbmFtZXNwYWNlIG5vZGVzCgpXZWQgQXByIDI1IDEyOjI4OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogcmVhbCBmaXggZm9yICAjNTM0MDIKClR1ZSBBcHIgMjQgMTc6MzY6MzUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jIEhUTUx0cmVlLmggOiBjbG9zaW5nICM1MzQwMiBpLmUuIG91dHB1dCBvZgoJICBQSXMgd2hlbiB1c2luZyB4c2w6b3V0cHV0CgkqIHZhbGlkLmM6IGNsb3NpbmcgIzUzNTM3IHNvbWUgY2FzZSBnZW5lcmF0ZSBzZWdmYXVsdHMgaWYgdGhlcmUKCSAgaXMgdmFsaWRpdHkgZXJyb3JzCgpUdWUgQXByIDI0IDE1OjE5OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgdGVzdERvY2Jvb2suYyBET0NCcGFyc2VyLmM6IG1vcmUgd29yayBvbiB0aGUgc3VwcG9ydAoJICBvZiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMsIGFkZGVkIC0tbm9lbnQgdG8gdGVzdERvY2Jvb2sKCSogdmFsaWQuYzogR2FycnkgUGVubmluZ3RvbiBmb3VuZCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlCgkgIGFjY2VzcyBpbiB4bWxWYWxpZGF0ZUVsZW1lbnRDb250ZW50KCkKClR1ZSBBcHIgMjQgMTQ6NDE6MjUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgOiBIVE1MIHBhcnNpbmcgc3RpbGwgc3Vja3MgLi4uIHRyeWluZyB0byBkZWFsCgkgIHdpdGggbWFkbmVzcwoJKiByZXN1bHQvSFRNTC8gOiB0aGlzIG1vZGlmaWVkIHRoZSByZXN1bHQgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCSAgYSBsb3QuCgpUdWUgQXByIDI0IDE0OjEwOjM4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW50aXRpZXMuYzogeG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQgZml4ZWQgYSBmZXcgYWNjZXNzZXMKCSAgdG8gZG9jIHdoZXJlIGl0IHdhc24ndCBjaGVja2VkIGFnYWluc3QgTlVMTCByZXBvcnRlZCBieQoJICBKZW5zIExhYXMKClR1ZSBBcHIgMjQgMTM6MjE6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IEpvbmFzIEJvcmdzdHL2bSBwYXRjaCwgdGhlIDx0ZD4sIGFuZCA8dGg+IGVsZW1lbnRzCgkgIG5vdyBtZWFucyB0aGUgZW5kIG9mIGFueSBvcGVuIDxzcGFuPiw8Zm9udD4sPGE+LDxiPiw8aT4sPHU+LgoKTW9uIEFwciAyMyAxNTo0MDowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBET0NCcGFyc2VyLmggdGVzdERvY2Jvb2suYyBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0KCSAgeG1sdmVyc2lvbi5oLmluOiBzdGFydGVkIChyZSlpbnRlZ3JhdGluZyB0aGUgRG9jQm9vayBTR01MIHBhcnNlci4KCSogU0FYLltjaF06IGNsZWFudXAgYW5kIHVwZGF0ZXMgZm9yIERvY0Jvb2sKCSogZGVidWdYTUwuYyBwYXJzZXIuaCB0cmVlLltjaF0gdmFsaWQuYyB4cGF0aC5jOiBzbWFsbCBtYWNybyBvcgoJICBleCBTR01MIGlkZW50aWZpZXIgY2hhbmdlcwoJKiB2YWxpZC5jOiByZW1vdmVkIGEgc3RhdGljIHVudXNlZCBmdW5jdGlvbi4KCk1vbiBBcHIgMjMgMTE6MDU6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiBhcHBsaWVkIGNoYW5nZSBmb3IgUGF1bCBTcG9uYWdsIG9uIHNjcmlwdCBzYXZpbmcKCSogTWFrZWZpbGUuYW06IHRoZSB3YXJuaW5nIGFib3V0IGVudGl0eSB0aXRsZS54bWwgYXJlIG5vcm1hbC4KClN1biBBcHIgMjIgMjI6MDk6MzUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2Ugb2YgMi4zLjcKCSogTWFrZWZpbGUuYW06IGZpeGluZyBtYWtlIGRpc3RjaGVjawoKU3VuIEFwciAyMiAyMToyOTo1MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9odG1sLyogZG9jL3htbC5odG1sOiB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcwoKU3VuIEFwciAyMiAyMToxMTo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBYUG9pbnRlciBwcm9ibGVtIGludHJvZHVjZWQgaW4gMi4zLjYKClN1biBBcHIgMjIgMTQ6MTE6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkICM1MzM4OCB3aXRoIHRoZSBwcm92aWRlZCBwYXRjaAoKU3VuIEFwciAyMiAxMjozNDo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IEJqb3JuIGRldGVjdGVkIGFuIGludmFsaWQgbWVtb3J5IGFjY2Vzcy4gRml4ZWQKCSAgdnN0YXRlVlB1c2goKQoKU3VuIEFwciAyMiAxMDo0OToyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHhtbFhQYXRoQ29tcGlsZSB0byBkZXRlY3RlZCB1bnByb3Blcmx5IGVuZGVkIGV4cHIKClNhdCBBcHIgMjEgMTg6Mjc6NTEgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogbGlieG1sLmg6IG5ldyBoZWFkZXIgdXNlZCBvbmx5IGZvciB0aGUgY29tcGlsYXRpb24gb2YgbGlieG1sCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuYyBlbnRpdGllcy5jCgkgIGVycm9yLmMgaGFzaC5jIGxpc3QuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0SFRNTC5jIHRlc3RTQVguYyB0ZXN0VVJJLmMgdGVzdFhQYXRoLmMKCSAgdHJlZS5jIHVyaS5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bGluay5jIHhtbElPLmMgeG1sbGludC5jCgkgIHhtbG1lbW9yeS5jIHhwYXRoLmMgeHBvaW50ZXIuYzogbGlieG1sLmggaW50ZWdyYXRpb24KCSogdHJpby5bY2hdIHRyaW9wLmggc3RyaW8uW2NoXTogdXBncmFkZWQgdG8gdGhlIGxhdGVzdCB0cmlvCgkgIGJhc2VsaW5lICh2ZXJzaW9uIDEuMiBwbHVzIGEgc2luZ2xlIHBhdGNoKS4KCSogeHBhdGguYyByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL2Zsb2F0czogcGFyc2VzCgkgIHNjaWVudGlmaWMgbm90YXRpb24gZm9yIG51bWJlcnMuIFRlc3RzIGFkZGVkLgoJKiB4cGF0aC5jOiBmb3JtYXR0aW5nIG9mIG51bWJlcnMgY2hhbmdlZCB0byB1c2Ugc3ByaW50ZgoJICAoY29udHJpYnV0aW9uIGZyb20gV2lsbGlhbSBCcmFjaykKClNhdCBBcHIgMjEgMTY6MTI6NTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBjbGVhbnVwLCBtb3JlIHVzZWZ1bCBkZWJ1Z2dpbmcKCSogcGFyc2VySW50ZXJuYWxzLmM6IGNsZWFudXAgdmN0eHQubm9kZVRhYiAoZGUpYWxsb2NhdGlvbgoJKiB4bWxJTy5jOiBlbnRpdHkgbG9hZGluZyBpcyBwcmludGVkIGFzIGFuIGVycm9yIHdoZW4gdmFsaWRhdGluZwoKU2F0IEFwciAyMSAxMjoyNTo0OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkIHRvIHZhbGlkYXRlIHdpdGhpbiBlbnRpdGllcwoJKiB0ZXN0L1ZDTS92MjIueG1sOiBhZGRlZCBhIHNwZWNpZmljIHRlc3RjYXNlCgpGcmkgQXByIDIwIDE3OjQ1OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZm9yZ290IGFuIGVwc2lsb24gdHJhbnNpdGlvbiBpbiBmb3IgKCkrCgkqIHRlc3QvVkNNL3YyMS54bWwgOiBhZGRlZCBhIHNwZWNpZmljIHRlc3QgY2FzZQoKRnJpIEFwciAyMCAxNTo0NjowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IHJlbW92ZWQgYSBzdGF0ZSBleHBsb3Npb24gZXhoaWJpdGVkIGJ5IFJTUwoJKiB0ZXN0L3ZhbGlkL3Jzcy54bWwgcmVzdWx0L3ZhbGlkL3Jzcy54bWwqOiBhZGRlZCB0aGUgdGVzdGNhc2UKCSAgZnJvbSBidWcgIzUxODcyCgpGcmkgQXByIDIwIDE0OjUyOjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuW2NoXSB0cmVlLmg6IHdvcmtlZCAqaGFyZCogdG8gZ2V0IG5vbi1kZXRlcm1pbmlzdCBjb250ZW50CgkgIHZhbGlkYXRpb24gd2l0aG91dCB1c2luZyBhbiB1Z2x5IE5GQSAtPiBERkEgYWxnbyBpbiB0aGUgc291cmNlLgoJICBNYWRlIGEgc3BlY2lmaWMgYWxnb3JpdGhtIGVhc2llciB0byBtYWludGFpbiwgdXNpbmcgYSBzaW5nbGUKCSAgc3RhY2sgYW5kIHdpdGhvdXQgcmVjdXJzaW9uLgoJKiBNYWtlZmlsZS5hbSB0ZXN0L1ZDTS8qLnhtbDogYWRkZWQgbW9yZSB0ZXN0cyB0byAibWFrZSBWYWxpZHRlc3RzIgoJKiBoYXNoLmM6IG1hZGUgdGhlIGdyb3dpbmcgcm91dGluZSBzdGF0aWMKCSogdHJlZS5oIHBhcnNlci5jOiBhZGRlZCB0aGUgcGFyZW50IGluZm9ybWF0aW9uIHRvIGFuCgkgIHhtbEVsZW1lbnRDb250ZW50IG5vZGUuCgpXZWQgQXByIDE4IDIzOjMzOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgcGFyc2VyLmMgeHBhdGguYzogZ2VuZXJhdGluZyBJRHMgd2hlbiBub3QgdmFsaWRhdGluZwoJICBmcm9tIGFuIGV4dGVybmFsIHBhcnNlZCBlbnRpdHkgd2FzIHBvaXNvbmluZyB0aGUgSUQgaGFzIHRhYmxlCgkgIHdpdGggcmVtb3ZlZCB2YWx1ZXMuIFRoaXMgd2FzIGtpbGxpbmcgWFNMVCBvbiB0aGUgS0RFIGhlbHAKCSAgYnJvd3Nlci4KCldlZCBBcHIgMTggMTc6MDk6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbnRpdGllcy5oOiBhbmRyZXdAdWdoLm5ldC5hdSBkZXRlY3RlZCBhIGRvdWJsZSBkZWNsYXJhdGlvbgoKV2VkIEFwciAxOCAxNTowNjozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRlYnVnWE1MLmMgaGFzaC5jIHRyZWUuaCB2YWxpZC5jIDogc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8KCSAgdGhlIHZhbGlkYXRpb24gc3Vwb3J0IHRvIGltcHJvdmUgc3BlZWQgd2l0aCBEb2NCb29rCgkqIHJlc3VsdC9WQy9PbmVJRDIgcmVzdWx0L1ZDL09uZUlEMyA6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlcwoJICB0aGUgd2F5IHZhbGlkYXRpb24gZXJyb3JzIGdldCByZXBvcnRlZAoKV2VkIEFwciAxOCAxMTo0Mjo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jOiBhcHBsaWVkIHBhcnQgb2YgdGhlIHBhdGNoZXMgcHJvdmlkZWQKCSAgYnkgUCBDIENob3cgYW5kIFdpbGxpYW0gTS4gQnJhY2sgZm9yIFhTTFQgSFRNTCBvdXRwdXQKCk1vbiBBcHIgMTYgMTk6NDQ6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWx2ZXJzaW9uLmguaW4gd2luMzJjb25maWcuaCB3aW4zMi9saWJ4bWwyLyo6IGFwcGxpZWQgCgkgIElnb3IgWmxhdGtvdmljIHBhdGNoZXMgZm9yIE1TQyBjb21waWxhdGlvbiBhbmQgYWRkZWQgaGlzCgkgIHVwZGF0ZXMKClR1ZSBBcHIgMTcgMTA6MDg6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCgpIHRvIGRvIHByb3BlcgoJICBwcmVmaXggbG9va3VwLgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgdGhlIGJ1ZyByZXBvcnRlZCBieSBNb3J1cyBXYWx0ZXIKCSAgZHVlIHRvIGFuIG9mZiBieSBvbmUgdHlwbyBpbiB4bWxTdHJpbmdDdXJyZW50Q2hhcigpCgpUaHUgQXByIDEyIDE3OjQxOjA5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIHJlc3VsdC9IVE1MLyo6IHJldmFtcGVkIHRoZSB3YXkgdGhlIEhUTUwKCSAgcGFyc2VyIGhhbmRsZXMgZW5kIG9mIHRhZ3Mgb3IgZW5kIG9mIGlucHV0CgpUaHUgQXByIDEyIDEwOjUwOjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sRG9jQ29weU5vZGUgZm9yIGdkb21lMiBzdXBwb3J0CgpXZWQgQXByIDExIDE2OjM3OjUwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5oOiBpbmNsdWRlIHhtbG1lbW9yeS5oIHRoaXMgc2VlbXMgdG8gaGF2b2lkIGEgbmFzdHkgZ2xpYmMKCSAgYnVnIHdoZXJlIHRoZSBsaW5rdGltZSB2ZXJpb25zIG9mIGZyZWUoKSB3b24ndCB3b3JrIC4uLgoKV2VkIEFwciAxMSAxNDoyMTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiB4bWx2ZXJzaW9uLmguaW46IGFkZGVkIGFuc2lkZWNsLmggdGVzdAoKV2VkIEFwciAxMSAxMzo1MDo0MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMi4zLjYgcmVsZWFzZQoKV2VkIEFwciAxMSAxMzoyNjozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sU3RyaW5nR2V0Tm9kZUxpc3QoKSB0byBoYW5kbGUgY2hhcnJlZnMKCSogcmVzdWx0L3dtbC54bWw6IHJlc3VsdGVkIGluIGEgc21hbGwgb3V0cHV0IGNoYW5nZQoKV2VkIEFwciAxMSAwOTo0Nzo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogeG1sTmV3RG9jIHdhcyBtaXNzaW5nIHRoZSBjaGFyc2V0IGluaXRpYWxpemF0aW9uCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1hdXRvIHRvIGF1dG9nZW5lcmF0ZSBhIGRvYywgYWxsb3cgdG8KCSAgcmVwcm9kdWNlIHRoZSBwcm9ibGVtIGZpeGVkIG9uIHhtbE5ld0RvYwoKVHVlIEFwciAxMCAxODoxMzoxMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHRyeWluZyB0byBnZXQgNTI5Nzkgc29sdmVkCgkqIHRyZWUuYyByZXN1bHQvIHJlc3VsdC9ub2VudC86IHRyeWluZyB0byBnZXQgNTI3MTIgc29sdmVkLCB0aGlzCgkgIGFsc28gbWFkZSBtZSBjbGVhbiB1cCB0aGUgZmFjdCB0aGF0IFhNTCBvdXRwdXQgaW4gZ2VuZXJhbCBzaG91bGQKCSAgbm90IGFkZCBmb3JtYXRpbmcgYmxhbmtzIGJ5IGRlZmF1bHQsIHRoaXMgY2hhbmdlZCB0aGUgb3V0cHV0IG9mCgkgIGEgZmV3IHRlc3RzCgpUdWUgQXByIDEwIDE2OjMwOjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogQmlsbCBCcmFjayBwb2ludGVyIGFuIGVycm9yIGluIGRldGVjdGluZyBhIG51bGwgbm9kZXNldAoKU3VuIEFwciAgOCAxNTowNzoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZmluYWxseSByZWxlYXNlZCAyLjMuNgoKU3VuIEFwciAgOCAxMTozOToyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGNoZWNraW5nIGZvciBudWxsIHBvaW50ZXIgZ2VuZXJhdGVkIGJ5IG5ldyBjb2RlCgpGcmkgQXByICA2IDEyOjUzOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBbXSBldmFsdWF0aW9uIHByb2JsZW0gcmVwb3J0ZWQKCSogdGVzdC9YUGF0aC90ZXN0cy9zaW1wbGVhZGRyOiBleHRlbmRlZCB0ZXN0CgkqIHJlc3VsdC9YUGF0aC9zaW1wbGVhZGRyOiB1cGRhdGVkIHJlc3VsdAoKV2VkIEFwciAgNCAwMjowNzo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogRGFuIFRpbWlzIHJlcG9ydGVkIGEgcG9ydGFiaWxpdHkgcHJvYmxlbQoJICBvbiBNYWNzIHdpdGhvdXQgbW1hcCwgZml4ZWQgaXQuCgpUdWUgQXByICAzIDIwOjIwOjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdGVzdFhQYXRoLmMgOiBhZGRlZCBhIC0tdHJlZSBvcHRpb24gYWxsb3dpbmcgdG8gZGlzcGxheSB0aGUKCSAgdHJlZSBkdW1wIG9mIHRoZSBYUGF0aCBleHByZXNzaW9uCgpNb24gQXByICAyIDE3OjEzOjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBtZW1sZWFrIHdoZW4gY29tcGFyaW5nIG5vZGVzZXRzCgkqIEhUTUx0cmVlLmM6IGRvbid0IGludmVudCB0aGUgSFRNTCBkb2N0eXBlIGlmIG5vdCBhdmFpbGFibGUgKFhTTFQpCgkqIHRyZWUuYzogYWRkZWQgYSBUT0RPCgpUdWUgTWFyIDI3IDE0OjMyOjA2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIGNvbmZpZy5oLmluIHhtbHZlcnNpb24uaC5pbjogZGV0ZWN0IGlmCgkgIHdlIG5lZWQgc3RyaW5nIGZ1bmN0aW9ucwoJKiB0cmlvLltjaF0gc3RyaW8uW2NoXTogZW1iZWRkZWQgdGhlIFRyaW8tMC4yMyBzdHJpbmcgZnVuY3Rpb25zCgkgIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gd2hlcmUgbmVlZGVkLiBBcHBsaWVkIHNvbWUgY2hhbmdlcwoJICB0byByZWR1Y2UgbmFtZSBsaW5raW5nIHBvbGx1dGlvbiBhbmQgY29tcGlsZSBpbiBvbmx5IHdoYXQncwoJICBuZWVkZWQuCgkqIEhUTUx0cmVlLmMgZGVidWdYTUwuYyBlbnRpdGllcy5jIGVycm9yLmMgbmFub2Z0cC5jIHZhbGlkLmMKCSAgeGxpbmsuYyB4bWx2ZXJzaW9uLmguaW4geHBhdGguYzogZ290IHJpZCBvZiB0aGUgI2lmZGVmIAoJICBmb3IgdGhlIHN0cmluZyBtYW5pcHVsYXRpb24gZnVuY3Rpb25zCgkqIHhtbG1lbW9yeS5bY2hdOiByZW1vdmVkIERFQlVHX01FTU9SWV9GUkVFRCBhbmQgYWRkZWQgaXQgYXV0b21hdGljYWxseQoJICB0byB0aGUgZnJlZSgpIGZ1bmN0aW9uIG9mIHhtbG1lbW9yeS5jCgkqIGVudGl0aWVzLmMgSFRNTHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdXJpLmMgdmFsaWQuYwoJICB4aW5jbHVkZS5jIHhtbElPLmMgeHBhdGguYyB4cG9pbnRlci5jOiByZW1vdmVkIHRoZSBNRU1fQ0xFQU5VUAoJICB1c2FnZS4KClR1ZSBNYXIgMjcgMDI6MzA6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlcnJvci5jOiBhcHBsaWVkIHRoZSBjb250ZXh0IG91dHB1dCBwYXRjaCBvZiB0aGUgZXJyb3IKCSAgaGFuZGxpbmcgc3VibWl0dGVkIGJ5IENodWNrIEdyaWZmaXRoCgkqIGVycm9yL1ZDLyo6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlIHNvbWUgZXJyb3IgbG9ncwoKVHVlIE1hciAyNyAwMDo1MToyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBsaW5lIG51bWJlciByZXBvcnRpbmcgb24gZXJyb3IKCk1vbiBNYXIgMjYgMjM6MjE6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogU3VsbGl2YW4gYW5kIERhcmluIGZvdW5kIGEgcGFyc2VyIGJ1ZywKCSAgYXBwbGllZCB0aGUgcGF0Y2guCgpNb24gTWFyIDI2IDE4OjI0OjUyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlcnJvci5jIHBhcnNlckludGVybmFscy5jCgkgIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRyZWUuYyB2YWxpZC5jIHhtbElPLmMgeG1sbWVtb3J5LmMKCSAgeG1sdmVyc2lvbi5oLmluIHhwb2ludGVyLmM6IG9mIGNvdXJzZSB0aGUgd2F5IEkgZGVmaW5lZAoJICBVTlVTRUQgYnJlYWtzIG9uIG9sZCBnY2MgdmVyc2lvbi4gVHJ5IHRvIGJlIHNtYXJ0IGFuZAoJICBhbHNvIGRlZmluZSBpdCBkaXJlY3RseSBpbiB4bWx2ZXJzaW9uLmgKCSogY29uZmlndXJlLmluOiByZW1vdmVkIC1hbnNpIGZsYWcgZnJvbSB0aGUgcGVkYW50aWMgc2V0CgpTYXQgTWFyIDI0IDE3OjQ1OjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CglIdWdlIGNsZWFudXAsIEkgc3dpdGNoZWQgdG8gY29tcGlsZSB3aXRoCgktV2FsbCAtZyAtTyAtYW5zaSAtcGVkYW50aWMgLVcgLVd1bnVzZWQgLVdpbXBsaWNpdAoJLVdyZXR1cm4tdHlwZSAtV3N3aXRjaCAtV2NvbW1lbnQgLVd0cmlncmFwaHMgLVdmb3JtYXQKCS1XY2hhci1zdWJzY3JpcHRzIC1XdW5pbml0aWFsaXplZCAtV3BhcmVudGhlc2VzIC1Xc2hhZG93CgktV3BvaW50ZXItYXJpdGggLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtV2FnZ3JlZ2F0ZS1yZXR1cm4KCS1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduZXN0ZWQtZXh0ZXJucyAtV2lubGluZQoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLltjaF0KCSAgZW5jb2RpbmcuaCBlbnRpdGllcy5jIGVycm9yLmMgbGlzdC5bY2hdIG5hbm9mdHAuYwoJICBuYW5vaHR0cC5jIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5bY2hdIHRlc3RIVE1MLmMKCSAgdGVzdFNBWC5jIHRlc3RVUkkuYyB0ZXN0WFBhdGguYyB0cmVlLltjaF0gdXJpLmMKCSAgdmFsaWQuW2NoXSB4aW5jbHVkZS5jIHhtbElPLltjaF0geG1sbGludC5jIHhtbG1lbW9yeS5jCgkgIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaCB4cG9pbnRlci5bY2hdIGV4YW1wbGUvZ2pvYnJlYWQuYzoKCSAgQ2xlYW51cCwgc3RhdGljZmllZCBhIG51bWJlciBvZiBub24tZXhwb3J0ZWQgZnVuY3Rpb25zLAoJICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCBhIGRvemVuIG9mIHByb2JsZW0gZm91bmQgdGhpcyB3YXksCgkgIGF2b2lkZWQgYSBsb3Qgb2YgcHVibGljIGZ1bmN0aW9uIG5hbWUvdHlwZWRlZi9zeXN0ZW0gbmFtZXMgY2xhc2hlcwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQKCSogY29uZmlndXJlLmluOiBzd2l0Y2hlZCBwcml2YXRlIGZsYWdzIHRvIHRoZSByZWFsbHkgcGVkYW50aWMgb25lcy4KClRodSBNYXIgMjIgMjI6NDQ6MTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogMi4zLjUKCSogZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgZG9jcwoKVGh1IE1hciAyMiAxNTozNjo0NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcmVwb3J0ZWQgYnVnIGluIE5PVEFUSU9OIHBhcnNpbmcKCSogdXJpLmM6IGFjY2VwdGVkIGJ1dCBub3QgZml4ZWQgYnVnIDUxODc2LCBhZGRlZCBUT0RPIAoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYnVnIDUxODc2CgpUaHUgTWFyIDIyIDEzOjQxOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gZXJyb3IuYzogZml4IGEgY29tcGlsYXRpb24gcHJvYmxlbQoJICBvbiBwbGF0Zm9ybXMgd2l0aG91dCB2c25wcmludGYgKHhtbEB0aGV3cml0dGVud29yZC5jb20pCgpXZWQgTWFyIDIxIDE5OjA0OjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBmdW5jdGlvbiBuYW1lIGhlYWRlciB0eXBvCgkqIFNBWC5jOiBub3RhdGlvbnMgY2FuIGFsc28gb2NjdXIgaW4gZXh0ZXJuYWwgc3Vic2V0LgoKVHVlIE1hciAyMCAxNDoyMToyOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogcmVtb3ZlZCBhIEMrKyBsaWtlIGNvbW1lbnQKClR1ZSBNYXIgMjAgMTI6MjI6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnIDUyMjk5IHN0cmFuZ2UgY29uZGl0aW9uIGxlYWRpbmcKCSAgdG8gYSBwYXJzZXIgY3Jhc2ggZHVlIHRvIGEgYnVmZmVyIG92ZXJmbG93CgkqIHJlc3VsdC9ub2VudC9hdHRyaWIueG1sIHJlc3VsdC9hdHRyaWIueG1sIHRlc3QvYXR0cmliLnhtbDoKCSAgYWRkZWQgdGhlIHNwZWNpZmljIHRlc3QgY2FzZQoKTW9uIE1hciAxOSAxNjo1MDo1MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXTogc3RpbGwgYSBsb3Qgb2YgY2xlYW51cCBiYXNlZCBvbiBYU0xULCBhZGRlZAoJICB4bWxYUGF0aENvbnZlcnR7U3RyaW5nLE51bWJlcixCb29sZWFufSB0byBiZSBhYmxlIHRvIG1ha2UKCSAgdHlwZSBjYXN0cyB3aXRob3V0IGEgY29udGV4dCBzdGFjaywgZml4ZWQgc29tZSBpbXBsZW1lbnRhdGlvbgoJICBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBhYnNlbmNlIG9mIGNvbnRleHQgYXQgcGFyc2UtdGltZSwKCSAgYWRkZWQgeG1sWFBhdGhFdmFsUHJlZGljYXRlKCkgYW5kIHhtbFhQYXRoRnJlZUNvbXBFeHByKCkKCSAgaW4gdGhlIHB1YmxpYyBBUEkgdG9vCgkqIHhwb2ludGVyLmMgeHBhdGhJbnRlcm5hbHMuaDogd2UgbmVlZCB0byBrbm93IGF0IHBhcnNlIHRpbWUKCSAgd2hldGhlciB3ZSBhcmUgY29tcGlsaW5nIGFuIFhQb2ludGVyCgpNb24gTWFyIDE5IDExOjU0OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IHJlc3RhdXJlZCB0aGUgQmluYXJ5IGFuZCBBUEkgY29tcGF0aWJpbGl0eQoJICBjbGVhbmVkIHVwIHRoZSBwYXJzZXIgaW50ZXJuYWxzLCByZWZhY3RvcmVkIFhQYXRoIGNvZGUsIGFkZGVkCgkgIG5ldyBjb21waWxhdGlvbiBiYXNlZCBBUElzIGFuZCBjbGVhbmx5IHNlcGFyYXRlZCBwdWJsaWMgYW5kCgkgIHByaXZhdGUgQVBJcy4KCk1vbiBNYXIgMTkgMDA6NTk6MjUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmg6IHRoZSBjb21wIGZpZWxkIG11c3QgYmUgYWRkZWQgYXQgdGhlIGVuZCB0byBhdm9pZAoJICBraWxsaW5nIGJpbmFyeSBjb21wYXQuCgpNb24gTWFyIDE5IDAwOjExOjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogZGV0ZWN0IFhQYXRoIG1lbWxlYWtzIGluIHJlZ3Jlc29uIHRlc3RzCgkqIGVycm9yLmM6IGZpeGVkIGFuZCBlcnJvciB3LnIudC4gZXJyb3IgcmVwb3J0aW5nIHN0aWxsIHVzaW5nCgkgIHN0ZGVycgoJKiBoYXNoLmM6IGFkZGVkIG5ldyBsaW5lIGF0IGVuZCBvZiBmaWxlCgkqIHRyZWUuaDogbWlub3IgY2xlYW51cAoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLltjaF06IE1ham9yIGNoYW5nZXMgISBTZXBhcmF0ZWQgWFBhdGgKCSAgZXhwcmVzc2lvbiBwYXJzaW5nIGZyb20gZXZhbHVhdGlvbiwgcmVzdWx0ZWQgaW4gYSBudW1iZXIgb2YKCSAgY2hhbmdlcyBpbnRlcm5hbGx5LCBhbmQgaW4gWFBvaW50ZXIuIExpa2VseSB0byBicmVhayBzdHVmZgoJICB1c2luZyB4cGF0aEludGVybmFscy5oIGJ1dCBzaG91bGQgcmVtYWluIGJpbmFyeSBjb21wYXRpYmxlLAoJICBuZXcgaW50ZXJmYWNlcyB3aWxsIGJlIGFkZGVkLgoKV2VkIE1hciAxNCAyMDozNDowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyByZXBvcnRlZCBieSAKCSAgb2tpZGRsZUB5YWhvby5jby51ayBhbmQgYWxsYW5jQGNoaWNrZW5hbmRwb3JuLmNvbSB3aGVuIGNvbXBpbGluZwoJICB3aXRob3V0IGdjYyBvbiBub24gbGludXggcGxhdGZvcm1zLgoKV2VkIE1hciAxNCAyMDoxMzo1NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL01ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogeWVhcmtlQGVuZy5idWZmYWxvLmVkdSBzdWdnZXN0ZWQKCSAgYSBmaXggZm9yIC0td2l0aC1odG1sLWRpcj0gY29uZmlndXJlIHN1cHBvcnQuIEkgaG9wZSBpdCB3b24ndAoJICBicmVhayBycG0gZ2VuZXJhdGlvbgoKV2VkIE1hciAxNCAxNzoyODo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogb25lIGZ1bmN0aW9uIGNvbW1lbnQgY2xlYW51cC4KCldlZCBNYXIgMTQgMTQ6NTU6NDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jOiBleHRlcm5hbCBzdWJzZXQgbm90YXRpb25zIHdlcmUgaW1wcm9wZXJseSByZWdpc3RlcmVkCgkgIGluIHRoZSBpbnRlcm5hbCBzdWJzZXQuCgpUdWUgTWFyIDEzIDEwOjI4OjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBSRUFETUUuY3ZzLWNvbW1pdHM6IGFkZGVkLCBwb2ludGluZyB0byBIQUNLSU5HCgkqIEhBQ0tJTkc6IHVwZGF0ZWQKCk1vbiBNYXIgMTIgMjI6MDk6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBhbmQgTWF0dCBTZXJnZWFudCBmb3VuZCBvbmUgaW4gdGhlIFhNTCBwdXNoCgkgIHBhcnNlciAoZXJyb25lb3VzIGNoZWNrIEkgZm9yZ290IHRvIHJlbW92ZSB3aGVuIEkgZml4ZWQgdGhlCgkgIG1haW4gcGFyc2VyKS4KCk1vbiBNYXIgMTIgMTk6MTk6MDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHB0aXR0b20gZm91bmQgYSBzbWFsbCBidWcgaW4gVW5hcnlFeHByCgpTYXQgTWFyIDEwIDEzOjA5OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjMuNAoJKiBlcnJvci5jOiBmaXhlZCBidWcgIzUxODYwCgkqIHRyZWUuYzogZml4ZWQgYnVnICM1MTg2MQoJKiB2YWxpZC5jOiBjbGVhbnVwLCBtb3JlIGRlYnVnLCBmYWlsZWQgdG8gZml4IG9uZSBidWcgY3JhcCAuLi4KCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sRGVmYXVsdEJ1ZmZlclNpemUKCSogbmFub2Z0cC5jOiB0eXBvIGluIGZ1bmN0aW9uIG5hbWUgaGVhZGVyIGJsb2NrCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQsIGFkZGVkIGxpbmsgdG8gWE1MOjpMaWJYU0xUCgkqIGRvYy9odG1sLyogOiByZWJ1aWx0IHRoZSBkb2NzCgpXZWQgTWFyICA3IDIwOjQzOjQ3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBTQVguYzogdGhlIG5ldyBjb250ZW50IHBhcnNpbmcgY29kZSByYWlzZWQgYW4KCSAgdWdseSBidWcgaW4gdGhlIGNoYXJhY3RlcnMoKSBTQVggY2FsbGJhY2suIEZvdW5kIGl0CgkgIGp1c3QgYmVjYXVzZSBvZiBzdHJhbmdlbmVzcyBpbiBYU0xUIFhNTCBSZWMgb3VwdHV0IDotKAoKV2VkIE1hciAgNyAxNjo1MDoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IE1hcnRpbiBCYXVsaWcgc3VnZ2VzdGVkIHRvIGFkZCAtbG0KCSogdHJlZS5jOiBmb3VuZCBhbm90aGVyIGJ1ZyBpbiB4bWxOb2RlR2V0Q29udGVudCgpCgpUdWUgTWFyICA2IDA5OjIxOjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBCam9ybiBmb3VuZCB0aGUgZXJyb3IgcmVsYXRlZCB0byBzdHJpY3RuZXNzIG9mIGNvbXBhcmlzb24uCgpNb24gTWFyICA1IDIxOjQ3OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogdHJ5aW5nIHRvIGZpeCB0aGUgRHRkIHBhcnNpbmcgcHJvYmxlbSByZXBvcnRlZAoJICBieSBHYXJ5LCBzaWRlIGVmZmVjdCBvZiBsYXN0IHdlZWsgc3BlZWQgb3B0aW1pemF0aW9ucy4KClNhdCBNYXIgIDMgMTk6NDU6NTkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbDJDb25mLnNoLmluOiBmaXhlcyBwb2ludGVkIG91dCBieSBGcmVkcmlrIEhhbGxlbmJlcmcKCSogcGFyc2VySW50ZXJuYWxzLmM6IHJlbW92ZWQgdW5uZWVkZWQgdGVzdCByYWlzZWQgYnkgU3RyaWMKClNhdCBNYXIgIDMgMTM6MDQ6MzcgQ0VUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB4cGF0aC5jOiBGaXhlZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCAocHJvYmxlbSByZXBvcnRlZAoJICBhbmQgZml4ZWQgYnkgV2lsbGlhbSBCcmFjaykuIEFkZGVkIHhtbFhQYXRoRm9ybWF0TnVtYmVyLgoJICBDaGFuZ2VkIHRoZSBzb3J0aW5nIHNsaWdodGx5LgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogQWRkZWQgLWxtLgoJICBQbGVhc2Ugbm90ZSB0aGF0IGFwcGxpY2F0aW9ucyBsaW5raW5nIHdpdGggbGlieG1sMiwgbXVzdAoJICBhbHNvIGxpa2Ugd2l0aCB0aGUgbWF0aCBsaWJyYXJ5IGZyb20gbm93IG9uLgoKU2F0IE1hciAgMyAwNzozODo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBsb29wIHJlcG9ydGVkIGJ5IE1hcmMgU2FuZmFjb24KClNhdCBNYXIgIDMgMDI6MTA6MjQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBvbmUgbXVzdCByZXBvcnQgc3BhY2VzIGV2ZW4gaWYgdGhlIER0ZCBlbGVtZW50CgkgIGNvbnRlbnQgcHJvdmVzIHRoYXQgdGhpcyBpcyBub3QgcGFydCBvZiB0aGUgZWxlbWVudCBjb250ZW50LgoJKiByZXN1bHQvdmFsaWQvKi54bWw6IHRoaXMgY2hhbmdlZCB0aGUgb3VwdHUgc2xpZ2h0bHkKClRodSBNYXIgIDEgMTc6NTM6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMy4zCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZAoKV2VkIEZlYiAyOCAwMDo0Mzo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBtaW5vciBkb2MgZml4CgkqIHhwYXRoLmM6IGRlYWxsb2NhdGlvbiBpc3N1ZXMgd2hlbiBhIHJlc3VsdCB0cmVlIGhhcyBiZWVuCgkgIGNvbnZlcnRlZCB0byBhIG5vZGUtc2V0CgpNb24gRmViIDI2IDIyOjA5OjQ1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IG9vcHMgY29ycmVjdGVkIGRhdGVzIHMvMjAwMC8yMDAxCgpNb24gRmViIDI2IDEyOjQ4OjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBuZXcgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24KCk1vbiBGZWIgMjYgMDk6MzA6MjMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYXBwbGllZCBwYXRjaCBmcm9tIEFua2gKCk1vbiBGZWIgMjYgMDM6MzQ6NDMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIGEgcHJvYmxlbSBidWlsZGluZyBvbiBNYWMKClN1biBGZWIgMjUgMjE6NTI6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBtb3JlIHdvcmsgb24gaW5jcmVhc2luZyBwYXJzaW5nIGZlcmZvcm1hbmNlcwoKU3VuIEZlYiAyNSAxODowMzo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbWVtb3J5LmggSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgZW50aXRpZXMuYyBwYXJzZXIuYwoJICB4cGF0aC5jIHhwb2ludGVyLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxJTy5jOgoJICBhdm9pZGluZyBtZW1jcHkgaW4gcHJvZHVjdGlvbiBidWlsZHMgTUVNX0NMRUFOVVAgbWFjcm8gdXNlCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5jOiBvcHRpbWl6YXRpb25zIG9mIHRoZSB0aWdodGVzdAoJICBpbnRlcm5hbCBsb29wcyBpbnNpZGUgdGhlIHBhcnNlci4gQmV0dGVyIGNoZWNraW5nIG9mIEkvTwoJICBmbHVzaGluZy9sb2FkaW5nIGNvbmRpdGlvbnMKCSogeG1sbGludC5jIDogYWRkZWQgLS10aW1pbmcKClN1biBGZWIgMjUgMDU6NDg6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMy4yCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCBmb3IgcmVsZWFzZQoKU2F0IEZlYiAyNCAxNDowNzo1MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZm91bmQgYSBtZW1sZWFrIGFuZCBmaXhlZCBhIG5hc3R5IGJ1ZwoKU2F0IEZlYiAyNCAwMzozNTo0OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5bYzFdIDogYWRkZWQgcmV0dXJuIGNvZGUgZXJyb3JzIGZvciB4bWxsaW50CgkqIHhwYXRoLmM6IHNwZWNpZmljIGRlYnVnIGR1bXAgZnVuY3Rpb24gZm9yIHJlc3VsdCB2YWx1ZSB0cmVlcwoKVGh1IEZlYiAyMiAwNzo1MjoyNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZmluYWxseSBpbXBsZW1lbnRlZCB4bWxYUGF0aENvbXBhcmVOb2RlU2V0cwoJKiB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzIHJlc3VsdHMvWFBhdGgvZXhwci9mbG9hdHM6IGFkZGVkIAoJICBhIHRlc3QgZm9yIGZsb2F0IGV4cHJlc3Npb25zCgpUdWUgRmViIDIwIDE4OjU3OjU0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbE5vZGVHZXRDb250ZW50LCBpdCB3YXMgbm90IHJlY3Vyc2luZyBvbiBjaGlsZAoJKiBwYXJzZXJJbnRlcm5hbHMuW2NoXTogdHJ5aW5nIHRvIHNwZWVkIHVwIHBhcnNpbmcKCSogeHBhdGguYyA6IHNwZWVkZWQgdXAgbm9kZSBzZXQgZXF1YWxpdHkgb3AKCk1vbiBGZWIgMTkgMTk6MDE6NTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIHZhbGlkLmMgbGlzdC5bY2hdOiBHYXJ5IFBlbm5pbmd0b24gcHJvdmlkZWQgYQoJICBiZXR0ZXIgaGFuZGxpbmcgb2YgSUQvSURSRUYgYW5kIHRoZSBsaXN0IG1vZHVsZXMgYXNzb2NpYXRlZAoJKiBjb25maWd1cmUuaW46IHNtYWxsIENGTEFHUyBjbGVhbnVwCgpNb24gRmViIDE5IDE2OjEzOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGljb252IGRldGVjdGlvbiBvbiBBSVggKHN0cmljKQoKTW9uIEZlYiAxOSAxMDo1OTo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgIioiICh1bmJlbGlldmFibGUgISkgYW5kIGEgY291cGxlIG9mIHdhcm5pbmdzCgpTdW4gRmViIDE4IDE3OjUyOjM3IE1FVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogeHBhdGguYzogZml4ZWQgd2hpdGVzcGFjZSBoYW5kbGluZyBpbiB4bWxYUGF0aFN0cmluZ0V2YWxOdW1iZXIsCgkgIGFuZCBvcHRpbWl6ZWQgeG1sWFBhdGhOb2RlU2V0U29ydAoKU2F0IEZlYiAxNyAxNDoxODo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGZpeCB3aGVuIGNvbnRleHQgc2l6ZSBpcyAwCgkqIHBhcnNlci5jOiBJIGxpa2UgTm9ybSdzIER0ZCBiZWNhdXNlIHRoZXkgc3RpbGwgbWFuYWdlIHRvIGJyZWFrCgkgIHRoZSBwYXJzZXIgb2NjYXNpb25hbGx5CgpGcmkgRmViIDE2IDE0OjIwOjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB4bWxYUGF0aEVxdWFsTm9kZVNldEZsb2F0IHRoZSBhcmcgaXMgcmVhbGx5IGEgZG91YmxlIG5vdwoKRnJpIEZlYiAxNiAwMToxMDowNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdIHBhcnNlci5jIHhwYXRoLmM6IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGFkZHJlc3NpbmcKCSAgYXR0cmlidXRlcyB3aXRoaW4gdGhlIFhNTC0xLjAgbmFtZXNwYWNlCgpUaHUgRmViIDE1IDE2OjUzOjIwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aEludGVybmFscy5oOiBleHBvcnRlZCBhIGZldyBheGlzIGZ1bmN0aW9ucwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgdGhlIGRvYwoKVGh1IEZlYiAxNSAxNTo1NzoxNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gRGFuaWVsIHZhbiBCYWxlbiBmb3IgT3BlbkJTRAoJICBhbmQgYnVtcGVkIHZlcnNpb24gdG8gMi4zLjEKCSogSFRNTHRyZWUuYyByZXN1bHQvSFRNTC9kb2MzLmh0bSByZXN1bHQvSFRNTC93aXJlZC5odG1sOiB0aGUKCSAgYXR0ZW1wdCB0byBmaW5kIGF1dG9jbG9zaW5nIHdhcyBzaW1wbHkgYnJva2VuLCByZW1vdmVkIGl0LAoJICB1cGRhdGVkIHRoZSBleGFtcGxlcywgdGhpcyBpcyBiZXR0ZXIKCldlZCBGZWIgMTQgMTE6MzU6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGhhc2guW2NoXTogYWRkZWQgUGFvbG8gQ2FzYXJpbmkgcGF0Y2ggdG8gcHJvdmlkZSBEZWxldGUgZnJvbQoJICBoYXNoIGZ1bmN0aW9ubmFsaXRpZXMuCgkqIGRvYy9odG1sLyogOiByZWJ1aWxkIHRoZSBkb2MKClR1ZSBGZWIgMTMgMTg6MDE6NDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL3Rlc3RzL2NoYXB0ZXJzcHJlZm9sOiBidWdmaXhlcyBvbiBvcmRlciBhbmQKCSAgb24gcHJlZGljYXRlCgkqIEhUTUxwYXJzZXIuW2NoXSBIVE1MdHJlZS5jIHJlc3VsdC9IVE1ML2RvYzMuaHRtLmVycgoJICByZXN1bHQvSFRNTC9kb2MzLmh0bS5zYXggcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogc29tZXRpbWVzIG9uZQoJICByZWFsbHkgd2FudCB0byBoYXZlIHRhZ3MgY2xvc2VkIG9uIG91dHB1dCBldmVuIGlmIHdlIGFjY2VwdAoJICB1bmNsb3NlZCBvbmVzIG9uIGlucHV0CgpNb24gRmViIDEyIDE4OjMzOjIwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBvdWNoIGRvbid0IGZyZWUgTlVMTCwgcmFyZSBjYXNlIGZpeGVkCgkqIHRyZWUuYzogZG9uJ3QgY29hbGVzY2UgdGV4dCBub2RlcyBpZiB0aGV5IGRvbid0IGhhdmUgdGhlCgkgIHNhbWUgYmVoYXZpb3VyIHdydCBlc2NhcGluZyBvbiBvdXRwdXQKClN1biBGZWIgMTEgMjE6MTU6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHNtYWxsIGZpeHVwCgkqIFNBWC5jOiBkb24ndCB3YXJuIG9uIGVtcHR5IG5hbWVzcGFjZXMuCgpUaHUgRmViICA4IDExOjI4OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBSRUFETUU6IGEgYml0IG9mIGNsZWFudXAKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuMy4wIHJlbGVhc2UKClRodSBGZWIgIDggMTA6Mzc6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGhhc2guW2NoXTogYWRkZWQgYSBmaXJzdCB2ZXJzaW9uIG9mIHhtbEhhc2hTaXplKCkKCSogdmFsaWQuYzogYW5vdGhlciBidWcgZml4IGZyb20gR2FyeSBQZW5uaW5ndG9uCgpXZWQgRmViICA3IDE5OjIyOjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBjb3VwbGUgb2YgYnVnIGZpeGVzIHBvaW50ZWQgYnkgR2FyeSBQZW5uaW5ndG9uCgkqIEhUTUx0cmVlLmM6ICNpZiAwIGNsZWFudXAKClR1ZSBGZWIgIDYgMTQ6MDI6NTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHN0YXJ0ZWQgcHJvZmlsaW5nIFhTTFQsIGFkZGVkIHhtbFhQYXRoTm9kZVNldEFkZFVuaXF1ZSgpCgkgIHdoaWNoIHJlbW92ZXMgYSB0aW1lIGNvbnN1bWluZyBjaGVjayBvZiB4bWxYUGF0aE5vZGVTZXRBZGQoKQoJICBhbmQgdXNlIGl0IGluIHBsYWNlcyB3aGVyZSB3ZSBhcmUgc3VyZSB0byBub3QgYnJlYWsgdW5pY2l0eQoKTW9uIEZlYiAgNSAxODo1MTozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGZpeGVzIGZvdW5kIGZyb20gWFNMVAoJKiB0cmVlLmM6IHByZXNlcnZlIG5vZGUtPm5hbWUgc3BlY2lhbCB2YWx1ZXMgd2hlbiBjb3B5aW5nIG5vZGVzLgoJKiBwYXJzZXJJbnRlcm5hbHMuW2NoXSBwYXJzZXIuW2NoXSBTQVguYyA6IGFkZGVkIGEgbW9kZSB3aGVyZQoJICBleHRlcm5hbCBzdWJzZXQgYXJlIGZldGNoZWQgd2hlbiBhdmFpbGFibGUgYnV0IHdpdGhvdXQgZnVsbAoJICB2YWxpZGF0aW9uLiBBZGRlZCB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlLCBuZWVkIGEgZnVuY3Rpb24uCgkqIEhUTUx0cmVlLmM6IGFkZCBzdXBwb3J0IGZvciB4bWxTdHJpbmdUZXh0Tm9lbmMgZm9yIFhTTHQgSFRNTAoJICBvdXRwdXQgd2l0aCBlbmNvZGluZyBkaXNhYmxlZC4KClNhdCBGZWIgIDMgMDk6NTA6MjkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGlPLmM6IEhhcnJ5IEJsdW5kZWxsIHBvaW50ZWQgb3V0IHRoYXQgeG1sQ2hlY2tGaWxlbmFtZQoJICB4bWxDaGVja0ZpbGVuYW1lIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20geG1sRmlsZU9wZW5XCgkgIGFuZCB4bWxHemZpbGVPcGVuVwoKRnJpIEZlYiAgMiAxODowNDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLmM6IHJld3JpdGUgb2YgeG1sTm9ybWFsaXplVVJJUGF0aCBmcm9tIFBhdWwgRC4gU21pdGgKCSogdGVzdC9VUkkvc21pdGgudXJpIHJlc3VsdC9VUkkvc21pdGgudXJpIE1ha2VmaWxlLmFtOgoJICBhZGRlZCB0aGUgbmV3IHRlc3RzIGZvciBVUkkgbm9ybWFsaXphdGlvbgoJKiB0ZXN0VVJJLmM6IGZpeGVkIHN0b29waWQgYnVncwoJKiByZXN1bHQvVkMvT25lSUQzIHJlc3VsdC9WQy9VbmlxdWVFbGVtZW50VHlwZURlY2xhcmF0aW9uOgoJICB0aGUgVVJJIGluIHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgbm93IHByb3Blcmx5IG5vcm1hbGl6ZWQKCkZyaSBGZWIgIDIgMDk6MTg6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5jOiBhcHBsaWVkIE1hcmMgU2FuZmFjb24ncyBwYXRjaCBmb3IgeG1sTm9ybWFsaXplVVJJUGF0aAoKVGh1IEZlYiAgMSAwNToyODo1NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBudW1iZXIgb2YgcHJvYmxlbXMgaW4gWFBBVEhfWFNMVF9UUkVFIHByb2Nlc3NpbmcKCldlZCBKYW4gMzEgMjE6NDU6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIG1vZCBvcGVyYXRvcgoKV2VkIEphbiAzMSAxNjo1MDo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIHhtbFN0cmNhdCBkb2MKCSogdHJlZS5jOiAyIGZpeGVzIGZvcm0gQW5kZXJzIENhcmxzb24gZm9yIGNvcHlpbmcgbm9kZXMgYW5kCgkgIHRyZWVzLgoKV2VkIEphbiAzMSAxNDoxOToxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyByZXN1bHQvWFBhdGgvdGVzdHMvY2hhcHRlcnNiYXNlCgkgIHJlc3VsdC9YUGF0aC90ZXN0cy9zaW1wbGViYXNlOiBmaXhlZCBYUGF0aCBub2RlKCkgCgkqIHRyZWUuYzogc21hbGwgZml4IGluIHhtbE5ld05zKCkKCSogTWFrZWZpbGUuYW06IHJlbW92ZWQgZXh0cmFuZW91cyB4bWwyQ29uZi5zaCBydWxlCgpTdW4gSmFuIDI4IDA4OjM3OjAzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gZXhhbXBsZS9NYWtlZmlsZS5hbToKCSAgQ2hhbmdlZCB0aGUgbGlicmFyeSBuYW1lLCBpbiBvcmRlciB0byBnZXQgbGlieG1sLWRldmVsIGFuZAoJICBsaWJ4bWwyLWRldmVsIHRvIGNvZXhpc3Qgb24gYSBzaW5nbGUgc3lzdGVtCgkqIHhtbC1jb25maWcuMSB4bWwtY29uZmlnLmluIHhtbENvbmYuc2guaW46IHJlbmFtZWQKCSogeG1sMi1jb25maWcuMSB4bWwyLWNvbmZpZy5pbiB4bWwyQ29uZi5zaC5pbjogbmV3IGZpbGVzCgpTYXQgSmFuIDI3IDE5OjU4OjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gbGlieG1sLTIuMC5wYy5pbjogc3RhcnRlZCB3b3JraW5nIG9uIGdldHRpbmcKCSAgbGlieG1sMi1kZXZlbCBpbnN0YWxsYWJsZSBpbiAvLyBhcyBsaWJ4bWwtZGV2ZWwuCgpTYXQgSmFuIDI3IDE4OjQ5OjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGVkIG1ha2UgcmVidWlsZCBpbiBkb2MKCSogZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2NzCgpGcmkgSmFuIDI2IDEwOjMwOjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gQmpvcm4gUmVlc2Ugb24geG1sQnVmZmVyQ0NhdAoKVGh1IEphbiAyNSAxOToyMjoyNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBwYWluZnVsIHdvcmsgdG8gZ2V0CgkgIHRoZSBIVE1MIGRvYyB0byBnbyBpbnRvIHRoZSAtZGV2ZWwgUlBNIC4uLgoJKiBhY2xvY2FsLm00IGNvbmZpZy5oLmluOiBzb21lIHVwZGF0ZXMgZHVlIHRvIGF1dG8qIG1hZ2ljCgpUaHUgSmFuIDI1IDE5OjExOjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5oOiBhZGRlZCBhIGhvb2sgaW4gdGhlIGNvbnRleHQgc3RydWN0dXJlIGFsbG93aW5nIHRvCgkgIGxpbmsgdG8gZXh0cmEgc3VwcG9ydCwgbmVlZGVkIGZvciBYU0xUCgpUaHUgSmFuIDI1IDEzOjM0OjExIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IGFkZGVkIHhtbFhQYXRoQ21wTm9kZXMsIGNoYW5nZWQKCSAgeG1sWFB0ckNtcFBvaW50cyB0byB1c2UgaXQuCgkqIHByb3BhZ2F0ZWQgdGhlIGZvbGxvd2luZyBwYXRjaCBmcm9tIEFsZWphbmRybyBGb3Jlcm8KCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oIHhtbElPLmM6IGFwcGxpZWQgZnVydGhlciBzdWdnZXN0aW9ucwoJICBmcm9tIElnb3IgWmxhdGtvdmljIDxpZ29yekBkaWFsdXAubmFjYW1hci5kZT4gYW5kIGNsZWFudXAKCSogZXhhbXBsZS9nam9icmVhZC5jOiBmaXhlZCB3YXJuaW5ncywgbm93IHRoYXQgaXQgYnVpbGRzCgpXZWQgSmFuIDI0IDIwOjI3OjI4IENPVCAyMDAxIEFsZWphbmRybyBGb3Jlcm8gPGJhY2h1ZUBiYWNodWUuY29tPgoKCSogeG1sSU8uYyAoeG1sRmlsZU9wZW4sIHhtbEZpbGVPcGVuVyk6IFJlbW92ZWQgdW5uZWNlc2FyeSBjaGVja3MuCgoJKiB4bWxJTy5jICh4bWxDaGVja0ZpbGVuYW1lKTogRnVuY3Rpb24gYWRkZWQgdG8ga25vdyB3aGV0aGVyIGEgZ2l2ZW4KCSAgZmlsZW5hbWUgcG9pbnRzIHRvIGEgdmFsaWQgZmlsZSAobm90IGEgZGlyZWN0b3J5KS4KCSogeG1sSU8uYyAoeG1sRmlsZU9wZW4sIHhtbEZpbGVPcGVuVywgeG1sR3pmaWxlT3BlbiwgeG1sR3pmaWxlT3BlblcpOgoJICBBZGRlZCBjYWxscyB0byB4bWxDaGVja0ZpbGVuYW1lRGlyLgoKCSogeG1sSU8uYyAoeG1sR3pmaWxlT3BlbiwgeG1sR3pmaWxlT3BlblcsIHhtbEZkT3BlbiwgeG1sRmRPcGVuVyk6IFBhc3MKCSAgYHBhdGgnIChyYXRoZXIgdGhhbiBgZmlsZW5hbWUnKSBhcyB0aGUgcGFyYW1ldGVyIHRvIGd6b3BlbiBhbmQgb3Blbi4KClR1ZSBKYW4gMjMgMTY6MjY6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBFWFRSQV9ESVNUCgpNb24gSmFuIDIyIDIzOjQyOjE3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiBmaW5hbGx5IGZvdW5kIHRoZSB0cmljawoJICB0byBidWlsZCB0aGUgZXhhbXBsZSwgaS5lLiBhZGQgIi4iIGluIFNVQkRJUlMgYmVmb3JlIGV4YW1wbGUKCSAgaW4gdGhlIGxpc3QgPGdyaW4vPgoKTW9uIEphbiAyMiAxNjozMDozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHdpdGggYW4gWFNMVCBzZWN0aW9uLCByZW1vdmVkIHBvaW50ZXIgdG8KCSAgVzNDIENWUyBiYXNlLgoKTW9uIEphbiAyMiAxMTo0MzoyMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogd2hlbiBjb3B5aW5nIGEgWFNMVCB0cmVlIG9iamVjdCB0ZWggdHJlZSBuZWVkIHRvIGJlIGNvcGllZAoJICB0b28sIGFuZCBkZWFsbG9jYXRpb24gbmVlZCB0byBvY2N1ciB0aGUgc2FtZSB3YXkuCgpNb24gSmFuIDIyIDEwOjM1OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aEludGVybmFscy5oIHhwYXRoLltjaF0gZGVidWdYTUwuYzogYWRkZWQgdGhlIFhQQVRIX1hTTFRfVFJFRQoJICB0eXBlIGNvcnJlcG9uZGluZyB0byBhbiBYU0xUIHJlc3VsdCB0cmVlIGZyYWdtZW50LiBTaGFyZSBtb3N0CgkgIG9mIHRoZSBkYXRhIGZvcm1hdCB3aXRoIG5vZGUgc2V0LCBhcyB3ZWxsIGFzIG9wZXJhdG9ycy4KCSogSFRNTHRyZWUuYzogYWRkZWQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3R5cGUgb3V0cHV0CgkgIHdoZSB0aGlzIG9uZSBpcyBub3QgcHJlc2VudCBpbml0aWFsbHkuCgkqIHRyZWUuYzogbWFrZSBzdXJlIHRhaHQgdGhlIHBhcmVudCBhbmQgZG9jIHBvaW50ZXJzIGFyZSBwcm9wZXJseQoJICBzZXQgd2hlbiBjb3B5aW5nIGF0dHJpYnV0ZXMgKGxpc3RzKS4KClN1biBKYW4gMjEgMTA6NDc6MzggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGh0bWxUcmVlLltjaF0geG1sSU8uaDogZXhwb3J0ZWQgaHRtbERvY0NvbnRlbnREdW1wT3V0cHV0CgpGcmkgSmFuIDE5IDE4OjE1OjUwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBzZWVtcyBJIGZpbmFsbHkga2lsbGVkIHRoYXQgdWdseSBwYXRoIGV2YWx1YXRpb24KCSAgY29udGV4dCBidWcgKHRhZ2dlZCA5OTk5IGluIGNhc2UgaXMgaXMgd3JvbmcpCgpGcmkgSmFuIDE5IDA2OjMwOjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhtbFhQYXRoUmVnaXN0ZXJWYXJpYWJsZUxvb2t1cCgpCgkgIGZvciBYU0xUCgpUaHUgSmFuIDE4IDE2OjE5OjQ3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBHYXJ5IFBlbm5pbmd0b24gPEdhcnkuUGVubmluZ3RvbkB1ay5zdW4uY29tPiBmaXgKCSAgZm9yIHhtbEd6ZmlsZU9wZW4oKSBidWcKClRodSBKYW4gMTggMTM6MTE6NTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHJlbW92ZWQgYW4gZXJyb3IgZm91bmQgYnkgWFNMVCB1c2FnZQoJKiB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmg6IHVzZSBhIHByZWRlZmluZWQgc3RhdGljIHN0cmluZwoJICBmb3IgdGV4dCBhbmQgY29tbWVudCBub2RlcywgYXZvaWQgZnJlZWluZyB0aGVtIGluIHhtbEZyZWVOb2RlLAoJICBleHBvcnRlZCB0aGUgc3RyaW5nIG5hbWUgaW4gcGFyc2VySW50ZXJuYWxzLmggYW5kIGFkZGVkCgkgIGFub3RoZXIgdmFsdWUgdG8gZGlzYWJsZSBlbmNvZGluZyBhdCBvdXRwdXQgKGZvciBYU0xUKSwKCSAgZ2FpbiBtZW1vcnksIHRpbWUuCgpXZWQgSmFuIDE3IDA5OjE1OjE2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyX2EuZHNwCgkgIHdpbjMyL2xpYnhtbDIvbGlieG1sMl9zby5kc3A6IG5ldyBtYWtlZmlsZXMgYW5kIHVwZGF0ZQoJICBwcm92aWRlZCBieSBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KClR1ZSBKYW4gMTYgMTg6MjQ6NDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYyA6IHhtbFNhdmVGaWxlLCB4bWxTYXZlRmlsZUVuYywgYXBwbGllZCBwYXRjaCBmcm9tIAoJICBHYXJ5IFBlbm5pbmd0b24KCk1vbiBKYW4gMTUgMjA6MjQ6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBjb21hcHJpc2lvbiBvZiB2YWx1ZXMgYW5kIG5vZGVsaXN0cywKCSAgbmVlZCB0byBjb21wYXJlIG5vZGVsaXN0IHN0aWxsIC4uLgoJKiBkZWJ1Z1hNTC5jOiBhdm9pZGVkIGEgcG9zc2libGUgY29yZSBkdW1wCgkqIEhUTUxwYXJzZXIuYzogY2xlYW51cAoJKiBuYW5vaHR0cC5jOiBjb250cmlidXRlZCBmaXguCgkqIHRyZWUuYzogZml4ZXMgaW4gcHJvcGVydGllcyBoYW5kbGluZyBhZGRlZCB4bWxTZXROc1Byb3AKCSAgbmVlZGVkIGJ5IGxpYnhzbHQKCSogeHBhdGhJbnRlcm5hbHMuaDogZXhwb3J0ZWQgeG1sWFBhdGhCb29sZWFuRnVuY3Rpb24sIGFkZGVkIGEgCgkgIGNvbW1lbnQKCSogVE9ETzogdXBkYXRlZAoKU2F0IEphbiAgNiAyMjowNTowOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGFwcGxpZWQgQmpvcm4gUmVlc2Ugb3B0aW1pemF0aW9uCgkgIHBhdGNoCgpTYXQgSmFuICA2IDE5OjEzOjI3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogYXBwbGllZCBwYXRjaCBmcm8gbWFrZSBjaGVjayBmcm9tIE1hcnRpbiBWaWRuZXIKClRodSBKYW4gIDQgMTk6MDc6NDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuMi4xMQoJKiBkb2MvaHRtbC8qOiByZWJ1aWxkIHRoZSBIVE1MIGZpbGVzCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQKClRodSBKYW4gIDQgMTQ6MDk6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgYSBzdHVwaWQgYnVnCgkqIHZhbGlkLmM6IGFwcGxpZWQgIlBhdWwgRC4gU21pdGgiIDxwYXVzbWl0aEBub3J0ZWxuZXR3b3Jrcy5jb20+CgkgIHBhdGNoZXMgcmVsYXRlZCB0byB2YWxpZGF0aW9uIG9mIGFuIFhJbmNsdWRlIHByb2Nlc3NpbmcgcmVzdWx0CgkqIFRPRE86IHVwZGF0ZWQKClRodSBKYW4gIDQgMTE6NDY6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVuY29kaW5nLmMgeG1sSU8uYzogRml4aW5nIHRoZSBwcm9ibGVtIHJlcG9ydGVkIGJ5IE1hcmMgU2FuZmFjb24KCSAgb24gbGFyZ2UgZmlsZXMKCldlZCBKYW4gIDMgMjE6NTE6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IGZpeGVkIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtIGRvYwoKV2VkIEphbiAgMyAxODo1NjowMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBodG1sQ2hlY2tQYXJhZ3JhcGggdG8gY2hlY2sgaHRtbE9taXR0ZWREZWZhdWx0VmFsdWUsCgkgIHJlcG9ydGVkIGJ5IEpvbmFzIEJvcmdzdHL2bQoJKiBuYW5vaHR0cC5jOiBBcHBsaWVkIEJqb3JuIFJlZXNlJyBJUFY2IGZpcnN0IHBhdGNoCgpXZWQgSmFuICAzIDE2OjE5OjM5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0ZXN0WFBhdGguYyB4cGF0aC5jOiBmaXhpbmcgdGhlIFhQYXRoIHVuaW9uIGV4cHJlc3Npb25zIHByb2JsZW0KCSAgcmVwb3J0ZWQgYnkgIE1hcnRpbiBWaWRuZXIgPG1hcnRpbkBhcnRheC5rYXJsaW4ubWZmLmN1bmkuY3o+CgpXZWQgSmFuICAzIDE0OjIyOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LmM6IE1hZGUgaXMgc28gaWYgdGhlIGZpbGUgbmFtZSBpcyAiLSIgaXMgd2lsbCByZWFkIGZvcm0KCSAgc3RhbmRhcmQgaW5wdXQuIFN2ZW4gSGVpbmlja2UgIDxzdmVuQHplbi5vcmc+CgkqIHRyZWUuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gZ3Jvd2luZyBidWZmZXIKCSogdHJlZS5oOiBmaXhlZCB0aGUgY29tbWVudCBvZiB0aGUgbm9kZSB0eXBlcyBmb2xsb3dpbmcgYW5kZXJzY2EKCSAgY29tbWVudAoJKiBUT0RPOiB1cGRhdGVkCgpXZWQgRGVjIDI3IDEyOjM1OjQ5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXTogYWRkZWQgYSB3YXkgdG8gYXZvaWQgYWRkaW5nIGF1dG9tYXRpY2FsbHkKCSAgb21pdHRlZCB0YWdzLiBodG1sSGFuZGxlT21pdHRlZEVsZW0oKSBhbGxvd3MgdG8gY2hhbmdlIHRoZQoJICBkZWZhdWx0IGhhbmRsaW5nLgoJKiB0cmVlLltjaF0geG1sbGludC5jOiBhZGRlZCB4bWxEb2NEdW1wRm9ybWF0TWVtb3J5KCkgYW5kIAoJICB4bWxEb2NEdW1wRm9ybWF0TWVtb3J5RW5jKCksIHVzZXMgbWVtb3J5IGZ1bmN0aW9ucyBmb3Igb3V0cHV0CgkgIG9mIHhtbGxpbnQgdG9vIHdoZW4gdXNpbmcgLS1tZW1vcnkgZmxhZywgYWRkZWQgYSBtZW1vcnkgdGVzdAoJICBzdWl0ZSBhdCB0aGUgTWFrZWZpbGUgbGV2ZWwuCgkqIHhwYXRoSW50ZXJuYWxzLmggeHBhdGguW2NoXSB4cG9pbnRlci5jOiBmaXhlZCBwcm9ibGVtcwoJICB3aXRoIG5hbWVzcGFjZSB1c2Ugd2hlbiBlbmNvdW50ZXJpbmcgUU5hbWVzIGluIFhQYXRoIGV2YWxhdGlvbiwKCSAgYWRkZWQgeG1sbnMoKSBzY2hlbWUgaW4gWFBvaW50ZXIuCgkqIG5hbm9mdHAuYyA6IGluY29ycG9yYXRlZCBhIGZpeAoJKiBwYXJzZXIuYyB4bWxJTy5jOiBmaXhlZCBwcm9ibGVtcyByYWlzZWQgd2l0aCBlbmNvZGluZyB3aGVuIHVzaW5nCgkgIHRoZSBtZW1vcnkgSS9PCgkqIHBhcnNlckludGVybmFscy5jOiBjbG9zZWQgYnVnIDI1OTM0IHJlcG9ydGVkIGJ5IAoJICB0b3JzdGVuLmxhbmRzY2hvZmZAaW5ub21pbmF0ZS5kZQoJKiBUT0RPOiB1cGRhdGVkCgpTYXQgTm92IDI1IDExOjQ2OjI3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvaHRtbC8qIGRvYy94bWwuaHRtbDogbWFkZSBhIDIuMi45IHJlbGVhc2UKCSAgb24gYSBub24tdXBkYXRlZCB0cmVlIDotKCwgbWFkZSBhIDIuMi4xMCByZWxlYXNlIHRvIGNvcnJlY3QgdGhlCgkgIHNpdHVhdGlvbgoKU2F0IE5vdiAyNSAxMDo0MTozNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jIHBhcnNlci5bY2hdIHRyZWUuW2NoXSB4bWxJTy5bY2hdIHhtbGxpbnQuYyB4cGF0aC5jCgkgIHBhcnNlckludGVybmFscy5oIHZtcy9idWlsZF9saWJ4bWwuY29tIHZtcy9jb25maWcudm1zIE1ha2VmaWxlLmFtOgoJICBpbnRlZ3JhdGVkIGEgc2V0IG9mIE9wZW5WTVMgY2hhbmdlcyBmcm9tIEhvd2FyZCBUYXlsb3IKCSAgPEhvd2FyZC5UYXlsb3JAcGFjb2FzdC5jb20+CgpTYXQgTm92IDI1IDAxOjIxOjAxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSB4bWxJTy5jOiBhZGRlZCB4bWxEb2NEdW1wTWVtb3J5RW5jKCkgZnJvbSBKb2huIEtyb2xsCgkqIGVycm9yLmM6IGFwcGxpZWQgZml4IHN1Z2dlc3RlZCBieSAiTGVvIERhdmlkc29uIiA8bGVvQG94LmNvbXBzb2MubmV0PgoKU2F0IE5vdiAyNSAwMDoyNDo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IHNvbWUgZml4ZXMgb24gYXV0by1vcGVuIG9mIGh0bWwvaGVhZC9ib2R5CgkqIGVuY29kaW5nLmM6IGZpeGVkIGEgY29tcGlsYXRpb24gZXJyb3Igb24gc29tZSBnY2MgZW52CgkqIHhwYXRoLmMgeHBvaW50ZXIuW2NoXSB4cGF0aEludGVybmFscy5oOiBpbXByb3ZlZCB0aGUKCSAgWFBvaW50ZXIgaW1wbGVtZW50YXRpb24KCSogdGVzdC9YUGF0aC94cHRyL3N0cnBvaW50IHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZTM6IGFkZGVkCgkgIHJlbGF0ZWQgWFBvaW50ZXIgdGVzdHMgYW5kIGFzc29jaWF0ZWQgcmVzdWx0cwoKRnJpIE5vdiAyNCAxNDowMTo0NCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sZHRkLmh0bWwgZG9jL3htbC5odG1sOiBmb2xsb3dpbmcgYSBzaG9ydCBzdGVwIGJ5IHN0ZXAKCSAgZ3VpZGFuY2Ugb24gSVJDIHRvIGhlbHAgbWFjaWVqIHdpdGggRFREcyBJIHN0YXJ0ZWQgYSBzbWFsbAoJICBwYWdlIG9uIHRoZSBzdWJqZWN0LgoKRnJpIE5vdiAxNyAxNzoyODowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGhhbmRsaW5nIG9mIGJyb2tlbiBjaGFycmVmcwoJKiB4bWxtZW1vcnkuaCBsaWJ4bWwyLmRzcCBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IHJlcG9ydGluZyBXaW5kb3dzCgkgIHBhdGNoZXMKCk1vbiBOb3YgMTMgMTk6MTc6MjAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyogOiByZWJ1aWx0IHRoZSBkb2NzIGFmdGVyIGFkZGluZwoJICB4aW5jbHVkZSBhbmQgdXBkYXRlZCBwYWdlIGZvciAyLjIuNyBhbmQgMi4yLjgKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMi4yLjgKCk1vbiBOb3YgMTMgMTI6Mzk6MzggQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmM6IGFwcGxpZWQgdGhlIGNvbmRpdGlvbmFsCgkgIHNlY3Rpb24gcHJvY2Vzc2luZyBmaXggZnJvbSBKb25hdGhhbiBQIFNwcmluZ2VyCgkgIDxqb25hdGhhbi5zcHJpbmdlcjJAZ3RlLm5ldD4KCSogeG1sdmVyc2lvbi5oLmluIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kc3AgOiBVcGRhdGVkIE1TCgkgIHByb2plY3QgZmlsZSwgZml4ZWQgaWNvbnYgZGVmYXVsdCBub24gc3VwcG9ydAoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBldmFsdWF0aW5nIHJlbGF0aXZlIGV4cHJlc3Npb25zCgkgIHdoZW4gYSBub2RlIGNvbnRleHQgaXMgcHJvdmlkZWQuCgpTdW4gTm92IDEyIDE2OjMxOjE5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYzogZml4ZWQgZ2NjIDIuOTUgbmV3IHdhcm5pbmdzCgkqIFNBWC5jOiBmaXhlZCBhIHN0dXBpZCBidWcKCSogdHJlZS5jOiBmaXhlZCBhIGZvcm1hdHRpbmcgcHJvYmxlbSB3aGVuIHJvdW5kLXRyaXBwaW5nCgkgIGZyb20vdG8gbWVtb3J5CgkqIHhpbmNsdWRlLmM6IGNoYXNlZCBtZW1sZWFrLCBmaXhlZCBhIGJhc2UgcHJvYmxlbQoJKiB4cG9pbnRlci5jOiBhZGRlZCB4bWxYUHRyQnVpbGRSYW5nZU5vZGVMaXN0KCksIGZpbmlzaGVkID8gCgkgIHhtbFhQdHJCdWlsZE5vZGVMaXN0KCkKCSogVE9ETzogdXBkYXRlZAoJKiBNYWtlZmlsZS5hbSB0ZXN0L1hJbmNsdWRlL2RvY3MgdGVzdC9YSW5jbHVkZS9lbnRzIHJlc3VsdC9YSW5jbHVkZToKCSAgYWRkaW5nIGEgZmlyc3Qgc21hbGwgc2V0IG9mIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFhJbmNsdWRlCgpUdWUgTm92ICA3IDE1OjExOjM0IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLltjaF06IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaGVzIHRvIGFjY2VzcwoJICB0aGUgV1dXLUF1dGhvcml6YXRpb24gaGVhZGVyLgoJKiBwYXJzZXIuYzogQ2xvc2VkIEJ1ZyMzMDg0NzogUHJvYmxlbXMgd2hlbiBzd2l0Y2hpbmcgZW5jb2RpbmcKCSAgaW4gc2hvcnQgZmlsZXMgYnkgYXBwbHlpbmcgU2ltb24gQmVyZydzIHBhdGNoLgoJKiB2YWxpZC5jOiBmaXhlZCBhIHZhbGlkYXRpb24gcHJvYmxlbQoJKiBoYXNoLmMgcGFyc2VyLmggcGFyc2VySW50ZXJuYWxzLmggdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5oCgkgIHhtbGVycm9yLmggeG1sbWVtb3J5LmggeG1sdmVyc2lvbi5oLmluOiBhcHBsaWVkIGEgRExMIHBhdGNoIGZyb20KCSAgV2F5bmUgRGF2aXNvbgoJKiB4cG9pbnRlci5bY2hdOiBhZGRlZCBmaXJzdCB2ZXJzaW9uIG9mIHhtbFhQdHJCdWlsZE5vZGVMaXN0KCkKCSAgbmVlZCB0byBiZSBleHRlbmRlZCB0byBub24gZnVsbCBub2RlcyBzZWxlY3Rpb25zLgoJKiB4aW5jbHVkZS5jOiBzdGFydHMgdG8gd29yayBkZWNlbnRseQoKTW9uIE5vdiAgNiAxNzoyMjo0NiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geGluY2x1ZGUuW2NoXSB4bWxsaW50LmMgY29uZmlndXJlLmluIHZhbGlkLmMKCSAgZGVidWdYTUwuYyB4bWx2ZXJzaW9uLmguaW46IFN0YXJ0ZWQgYWRkaW5nIFhJbmNsdWRlIHN1cHBvcnQsCgkgIHRoaXMgaXMgYSBuZXcgeG1sbGludCBvcHRpb24KCSogdHJlZS5jIHhwYXRoLmM6IGFwcGxpZWQgVE9NIHBhdGNoZXMgZm9yIFhQYXRoCgkqIHhwb2ludGVyLmM6IGZpeGVkIGEgY291cGxlIG9mIGVycm9ycy4KCSogdXJpLmM6IGFkZGVkIGFuIGVzY2FwaW5nIGZ1bmN0aW9uIG5lZWRlZCBmb3IgeGluY2x1ZGUKCSogdGVzdFhQYXRoLmMgaGFzaC5jIEhUTUx0cmVlLmM6IG1pbm9yIGNsZWFudXBzIHJhaXNlZCBieQoJICBuZXcgd2FybmluZyBmcm9tIFJINzAgZ2NjJ3MgdmVyc2lvbgoKVHVlIE9jdCAzMSAxNDoxNDoxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGxvb3Agb24gaW52YWxpZCBjaGFyIGluIHNjcmlwdHMKCSogcGFyc2VyLmM6IHVwZGF0ZSB0byBkZXNjcmlwdGlvbiBvZiB4bWxJT1BhcnNlRFREKCkKCSogbGlieG1sLm00IHhtbHZlcnNpb24uaC5pbjogY2hhbmdlcyBjb250cmlidXRlZCBieQoJICBNaWNoYWVsIFNjaG1laW5nIDxtLnNjaG1laW5nQGludGVybmV0LWZhY3RvcnkuZGU+CgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjIuNwoJKiBNYWtlZmlsZS5hbTogdHJ5aW5nIHRvIGF2b2lkICBjb25maWcuaCBhbmQgYWNjb25maWcuaAoJICBiZWluZyBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2VkIDIuMi43CgpNb24gT2N0IDMwIDE3OjA4OjEwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSBkZWJ1Z1hNTC5jIHBhcnNlckludGVybmFscy5jIHhwYXRoLmM6IERlcHJlY2F0ZWQgUGkncwoJICBsaWtlIG5hbWVzcGFjZXMgZm9yIGdvb2QuIFVuaWZpZWQgeG1sTnMgYW5kIHhtbE5vZGUgc29tZXdoYXQuCgpNb24gT2N0IDMwIDE2OjI2OjQ5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdOiBhZGRlZCB4bWxJT1BhcnNlRFREKCkKCSogeHBvaW50ZXIuYzogYWRkZWQgc3VwcG9ydCBmb3IgdGhlIDIgZXh0cmEgcGFyYW1ldGVycyBvZgoJICBzdHJpbmctcmFuZ2UsIGZpeGVkIGEgc3Rvb3BpZCBlcnJvciB3aGVuICcwJyB3YXMgcHJlc2VudAoJICBpbiBYUG9pbnRlciBleHByZXNzaW9ucwoJKiB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2UyIHJlc3VsdC9YUGF0aC94cHRyL3N0cnJhbmdlMjogYWRkZWQKCSAgdGVzdHN1aXRlIGZvciB0aGUgYWJvdmUKCk1vbiBPY3QgMzAgMTA6MjY6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGltcHJvdmVkIHBhY2thZ2UgZGVzY3JpcHRpb25zCgpTdW4gT2N0IDI5IDE5OjAzOjExIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaDogYXBwbGllZCBhIGxhcmdlIGNsZWFuaW5nIHBhdGNoCgkgIGZyb20gVE9NIDxwdGl0dG9tQGZyZWUuZnI+LCBpdCBhbHNvIGFkZCBuYW1lc3BhY2Ugc3VwcG9ydAoJICBmb3IgZnVuY3Rpb24gYW5kIHZhcmlhYmxlcyByZWdpc3RyYXRpb24uCgpTdW4gT2N0IDI5IDE4OjUxOjQ2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jOiBXYXluZSBEYXZpc29uJ3MgcGF0Y2ggZml4aW5nIHhtbEJ1aWxkVVJJKCkKCSogTWFrZWZpbGUubWluZ3c6IFdheW5lIERhdmlzb24ncyB1cGRhdGUgYWRkaW5nIGhhc2guYwoKU3VuIE9jdCAyOSAxODozODoxMiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgcm9vdCBldmFsdWF0aW9uIHByb2JsZW1zCgkqIEhUTUxwYXJzZXIuYyByZXN1bHQvSFRNTC9kb2MzLmh0bTogZml4ZWQgdGhlIHByb2JsZW0gb2Ygbm9uCgkgIGlnbm9yYWJsZSBzcGFjZXMgd2l0aCA8Yj4gPGJvbGQ+IDxlbT4KCSogdHJlZS5jOiBmaXhlZCBhIGxvb3AgaW4geG1sU2VhcmNoTnNCeUhyZWYoKQoKRnJpIE9jdCAyNyAxODo1NzozMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogYXBwbGllZCBhbm90aGVyIFhQYXRoIHBhdGNoIGZyb20gVE9NIAoJKiB4cGF0aC5jIGluY2x1ZGUvbWFrZWZpbGUuYW06IGFwcGxpZWQgYW5vdGhlciBwYXRjaCBmcm9tIAoJICBjaGluYUB0aGV3cml0dGVud29yZC5jb20gKGNsZWFudXAgb24gSVJJWCkuCgpGcmkgT2N0IDI3IDEzOjQ1OjI4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLjE6IHJlY2VpdmVkIGEgZml4ZWQgdmVyc2lvbiBmcm9tIEZyZWRyaWsgSGFsbGVuYmVyZwoJICA8aGFsbG9uQGx5c2F0b3IubGl1LnNlPgoKVGh1IE9jdCAyNiAxNjowNToyNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB0ZXh0WFBhdGguYyB4cGF0aEludGVybmFscy5oOiBhcHBsaWVkIFRPTSA8cHRpdHRvbUBmcmVlLmZyPgoJICBjbGVhbnVwIHBhdGNoIGZvciBYUGF0aAoKV2VkIE9jdCAyNSAyMTozMToxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGF0Y2hlZCB0byByZWRpcnJlY3QgYWxsICJvdXQgb2YgY29udGV4dCIgZXJyb3IgbWVzc2FnZXMgdG8KCSAgYSByZWNvbmZpZ3VyYWJsZSByb3V0aW5lLiBUaGUgY2hhbmdlcyBhcmU6CgkqIHhtbGVycm9yLmggOiBhZGRlZCB0aGUgZXhwb3J0IG9mIGFuIGVycm9yIGNvbnRleHQgdHlwZSAodm9pZCAqKQoJICBhbiBlcnJvciBoYW5kbGVyIHR5cGUgeG1sR2VuZXJpY0Vycm9yRnVuYyB0aGVyZSBpcyBhbiBpbnRlcmZhY2UKCSAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyh2b2lkICpjdHgsIHhtbEdlbmVyaWNFcnJvckZ1bmMgaGFuZGxlcik7CgkgIHRvIHJlc2V0IHRoZSBlcnJvciBoYW5kbGluZyByb3V0aW5lIGFuZCBpdHMgYXJndW1lbnQKCSAgKGJ5IGRlZmF1bHQgaXQncyBlcXVpdmFsZW50IHRvIHJlc3BlY3RpdmVseSBmcHJpbnRmIGFuZCBzdGRlcnIuCgkqIGFsbCB0aGUgYyBmaWxlczogYWxsIHdpbGQgYWNjZXNzZXMgdG8gc3RkZXJyIG9yIHN0ZG91dCB3aXRoaW4KCSAgdGhlIGxpYnJhcnkgaGF2ZSBiZWVuIHJlcGxhY2VkIHRvIGNhbGxzIHRvIHRoZSBoYW5kbGVyLgoKV2VkIE9jdCAyNSAxNToyNzoxOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNlIDIuMi42CgkqIHhwYXRoLltjaF0geHBvaW50ZXIuYyB4cGF0aEludGVybmFscy5oOiBhZGRlZCB4cGF0aEludGVybmFscy5oCgkgIGV4cG9ydGluZyB0aGUgaW5uZXIgZnVuY3Rpb25zIG9mIHhwYXRoIGZvciBleHRlbnNpb24gbW9kdWxlcwoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jCgpXZWQgT2N0IDI1IDEyOjQ4OjU1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jIDogYXBwbGllZCBXYXluZSBIVFRQIGNsZWFudXAgcGF0Y2gKCSogdHJlZS5bY2hdOiBhcHBsaWVkIFRPTSA8cHRpdHRvbUBmcmVlLmZyPiBmb3IgeG1sTm9kZVNldEJhc2UoKQoJICBhbmQgeG1sTm9kZVNldFNwYWNlUHJlc2VydmUoKQoKV2VkIE9jdCAyNSAxMjoxMTowMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogY2xvc2luZyBidWcgIzI5MjYwCgpUdWUgT2N0IDI0IDE4OjQ5OjM0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBoYXNoLltjaF0gZGVidWdYTUwuYzogZXhwYW5kZWQvZW5oYW5jZWQgdGhlIEFQSSwgYWRkZWQKCSAgbXVsdGlrZXkgdHVwbGVzLCBtYWRlIGhhc2ggc3RydWN0dXJlIG9wYXF1ZQoJKiB2YWxpZC5bY2hdOiBtb3ZlZCBlbGVtZW50cywgYXR0cmlidXRlcywgbm90YXRpb25zIGRlY2FsYXJhdGlvbnMKCSAgYXMgd2VsbCBhcyBJRCBhbmQgcmVmcyB0byBoYXNoIHRhYmxlcy4KCSogZW50aXRpZXMuYzogaGFzaCBjbGVhbnVwCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBhIGR1bXAgcHJvYmxlbSBpbiBkZWJ1ZyBtb2RlCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IHByb2JsZW0gcGFzc2luZyBpbiBERVNURElSPSB2YWx1ZXMgcGF0Y2gKCSAgZnJvbSBNYXJjIENocmlzdGVuc2VuIDxtYXJjQGNhbGRlcmFzeXN0ZW1zLmNvbT4KCSogbmFub2h0dHAuYzogcmVtb3ZlZCBkZWJ1Z2dpbmcgcmVtYWlucwoJKiBIVE1McGFyc2VyLmM6IHRoZSBib2d1cyB0YWcgc2hvdWxkIGJlIGlnbm9yZWQgKFdheW5lKQoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IGZpeGluZyBhIG51bWJlciBvZiBwcm9ibGVtcyB3aXRoIHRoZQoJICBtYWNyb3MgaW4gdGhlICpwYXJzZXIuYyBmaWxlcyAoV2F5bmUpLgoJKiBIVE1McGFyc2VyLmM6IGNsb3NlIHRoZSBwcmV2aW91cyBvcHRpb24gd2hlbiBvcGVuaW5nIGEgbmV3IG9uZQoJICAoTWFyYyBTYW5mYWNvbikuCgkqIHJlc3VsdC9IVE1MLyo6IHVwZGF0ZWQgdGhlIEhUTUwgcmVzdWx0cyBhY2NvcmRpbmdseQoKU3VuIE9jdCAyMiAxODozOToxOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuW2NoXSB4cGF0aC5bY2hdIGhhc2guW2NoXSBkZWJ1Z1hNTC5jIHRyZWUuaDogYWRkZWQvaGFja2VkCgkgIGhhc2ggdGFibGVzIGZyb20gQmpvcm4gUmVlc2UgPGJyZWVzZUBtYWlsMS5zdG9mYW5ldC5kaz4uIFN3aXRjaGVkCgkgIFhQYXRoIGZ1bmN0aW9ucyBhbmQgWE1MIGVudGl0aWVzIHRhYmxlIHRvIHRoZW0uIE1vcmUgdG8gY29tZS4uLgoJKiB4bWxJTy5jOiBmaXhlZCBsaWJ4bWwgY2xvc2luZyBGSUxFcyBpdCBkaWRuJ3Qgb3Blbi4KClN1biBPY3QgMjIgMTM6NTk6NTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogY29hbGVzY2UgYWRqYWNlbnQgdGV4dCBub2RlcwoJKiB2YWxpZC5jOiBoYW5kbGluZyBvZiBibGFuayBub2RlcyBpbiBEVGQgdmFsaWRhdGlvbiAocmFpc2VkCgkgIGJ5IHByb2JsZW1zIHdpdGggYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24pLgoJKiBuYW5vaHR0cC5jOiBjaGFuZ2luZyBiZWhhdmlvdXIgb24gSFRUUCB3cml0ZSBzdHVmZi4KCSogSFRNTHRyZWUuYzogZm9yY2VkIGJvZHkgYW5kIGh0bWwgdG8gYmUgZXhwbGljaXRlbHkgY2xvc2VkLgoJKiB4cGF0aC5oOiBleHBvcnRlZCBtb3JlIFhQYXRoIGZ1bmN0aW9ucy4KClN1biBPY3QgMTUgMjI6Mjg6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbGVhc2Ugb2YgMi4yLjUKCSogeHBvaW50ZXIuYzogcmFuZ2UoKSByYW5nZS1pbnNpZGUgYW5kIG90aGVyIGhlbHBlciBmdW5jdGlvbnMKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHBlcmYgcHJvYmxlbSByYWlzZWQgYnkgcm9sZkBwb2ludHNtYW4uZGUKClN1biBPY3QgMTUgMTY6MjE6MjcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jOiBIVE1MIGF0dHJpYnV0ZXMgbmVlZCBub3JtYWxpemF0aW9uIHRvbyAoQmpvcm4gUmVlc2UpCgkqIEhUTUxwYXJzZXIuW2NoXTogYWRkZGVkIGh0bWxJc1NjcmlwdEF0dHJpYnV0ZSgpCgpTdW4gT2N0IDE1IDEzOjE4OjM2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKjogcmVidWlsdCBkb2NzIHByZXBhcmluZyBmb3IgMi4yLjUgcmVsZWFzZSwgYWRkZWQgVVJJCgkgIGFuZCBYUG9pbnRlciBtb2R1bGVzCgpTdW4gT2N0IDE1IDEyOjEzOjMwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguaDogY2xvc2VkICMyNTEwNwoKU3VuIE9jdCAxNSAxMjowNjoxNiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFNBWC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggY2RhdGEgcmVwb3J0aW5nCgkqIFNBWHJlc3VsdC8qIDogdXBkYXRlZAoKU3VuIE9jdCAxNSAxMjowMDoyNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgdGVzdC93YXAueG1sIHJlc3VsdC9ub2VudC93YXAueG1sIHJlc3VsdC93YXAueG1sOgoJICBDbG9zZWQgYnVnICMyNzQ5OSwgYWRkZWQgdG8gcmVncmVzc2lvbiB0ZXN0cwoJKiBUT0RPOiB1cGRhdGVkCgpTdW4gT2N0IDE1IDAxOjM0OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuW2NoXSBTQVguYyB0ZXN0SFRNTC5jIHRyZWUuYzogZml4ZWQgSFRNTAoJICBzdXBwb3J0IGZvciBTQ1JJUFQgYW5kIFNUWUxFIHdpdGggaGVscCBmcm9tIEJqb3JuIFJlZXNlCgkqIHRlc3QvSFRNTC8qIHJlc3VsdC9IVE1MLyo6IGFkZGVkIHNpbXBsZSB0ZXN0Y2FzZSBhbmQgdXBkYXRlZAoJICB0aGUgZXhpc3Rpbmcgb25lcy4KCkZyaSBPY3QgMTMgMTg6MjQ6MzEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgeHBvaW50ZXIuYzogWFBvaW50ZXIgcmVvcmRlciBvZiByYW5nZXMgc3RhcnQvZW5kIGFuZAoJICBzdHJpbmctcmFuZ2UgZm9yIGVtcHR5IHN0cmluZ3MKCSogdGVzdC9YUGF0aC9kb2NzL3N0ciB0ZXN0L1hQYXRoL3hwdHIvY2hhcHRlcnNyYW5nZQoJICB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2U6IGF1Z21lbnRlZCB0aGUgWFBvaW50ZXIgdGVzdHN1aXRlCgpGcmkgT2N0IDEzIDEyOjIxOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgZG9jL3htbG1lbS5odG1sOiBhZGRlZCBhIG1vZHVsZSBkZXNjcmliaW5nIG1lbW9yeQoJICBpbnRlcmZhY2VzIGFuZCB1c2UsIHVwZGF0ZWQgdGhlIG1haW4gcGFnZS4KCkZyaSBPY3QgMTMgMDE6MjM6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbElPLmM6IFdheW5lIERhdmlzb24gV2luMzIgcGF0Y2gKCSAgbmFub2Z0cCBjb2RlIHdvcmsgb24gV2luZG93cyB0b28gbm93CgpGcmkgT2N0IDEzIDAwOjU0OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBtb3ZlZCBzb21lIGRlYnVnIGZ1bmN0aW9ucyB0byB4cGF0aCBjb3JlCgkqIHhwb2ludGVyLmM6IGltcGxlbWVudGVkIHN0cmluZy1yYW5nZSgpIGF0IGxlYXN0IGEgZ29vZCBmaXJzdCB2ZXJzaW9uCgkqIHRlc3QvWFBhdGgvZG9jcy9zdHIgdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlCgkgIHJlc3VsdC9YUGF0aC94cHRyL3N0cnJhbmdlOiB0aGUgc3RyaW5nLXJhbmdlKCkgdGVzdHMKClRodSBPY3QgMTIgMTA6MDI6NTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS93aW4zMmNvbmZpZy5oCgkgIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBmaXhlZCBwcm9ibGVtcyByZXBvcnRlZCBieSBXYXluZSBEYXZpc29uCgkgIGFuZCBtYWtlIGRpc3RjaGVjawoKVGh1IE9jdCAxMiAwMTo0NDowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogYWRkZWQgeG1sTmFub0hUVFBUaW1lb3V0KGludCBkZWxheSksIHJlbW92ZWQgYSBidWcKCSAgeG1sTmFub0hUVFBNZXRob2Qgb24gaW5wdXQgTWltZVR5cGUgVG9ueSBMYW0gPFRvbnkuTGFtQGVuZy5zdW4uY29tPgoJKiB4cG9pbnRlci5jOiBzbGlnaHQgZXh0ZW5zaW9uIG9mIHhtbFhQdHJMb2NhdGlvblNldE1lcmdlCgpUaHUgT2N0IDEyIDAxOjM3OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sdmVyc2lvbi5oLmluIDoKCSAgcGF0Y2ggZm9yIHNvY2tsZW5fdCBkZXRlY3Rpb24gYnkKCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPgoKV2VkIE9jdCAxMSAxNzo1Mzo1NyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIHZhbGlkLmMgeG1sbGludC5jOiBGaXhlZCBhIGZldyBwb3N0dmFsaWRhdGlvbiBidWdzCgkgIGFuZCBhZGRlZCBhIC0tZHRkdmFsaWQgb3B0aW9uIHRvIHhtbGxpbnQgdXNlZCB0byB0ZXN0IGl0CgpXZWQgT2N0IDExIDE1OjAxOjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLjEgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGFkZGluZyBhIG1hbiBwYWdlIGZvcgoJICB4bWwtY29uZmlnIGJ5IEZyZWRyaWsgSGFsbGVuYmVyZyA8aGFsbG9uQGx5c2F0b3IubGl1LnNlPgoKV2VkIE9jdCAxMSAxMjo0MTozMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSB4cG9pbnRlci5bY2hdOiB3b3JrZWQgb24gWFBhdGggZnVuY3Rpb25zIGFuZCB2YXJpYWJsZQoJICBoYW5kbGluZ3MgKHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBjbGVhbnVwKQoKV2VkIE9jdCAxMSAwMTo0Njo0NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIGluY2x1ZGUvbWFrZWZpbGUuYW06IGFkZGluZyBYUG9pbnRlcgoJICBhbmQgWFB0cnRlc3RzIHRhcmdldAoJKiB4cG9pbnRlci5bY2hdIDogbmV3IGZpbGVzIGZvciBYUG9pbnRlciBzdXBwb3J0CgkqIHRlc3QvWFBhdGgveHB0ciByZXN1bHQvWFBhdGgveHB0cjogYWRkZWQgWFBvaW50ZXIgdGVzdHN1aXRlIGFuZAoJICBtb3JlIFhQYXRoIHRlc3RzCgpXZWQgT2N0IDExIDAxOjIzOjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkLCB2ZXJ5IGJyb2tlbiwgbWFrZSBkaXN0Y2hlY2sgd29ya3MgYWdhaW4KCldlZCBPY3QgMTEgMDI6NTM6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1vcmUgd29yayB0b3dhcmQgMi4yLjUsIGludGVncmF0ZWQgYSBudW1iZXIgb2YgcGF0Y2hlcwoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gd2luMzJjb25maWcuaC5pbjogdHJ5aW5nIHRvIGNsZWFudXAKCSAgbWFrZSBkaXN0Y2hlY2sgLi4uLiBodWggLi4uCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBuZXcgZGlyZWN0b3J5CgkgIGZvciBpbmNsdWRlcwoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndyB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcAoJICB1cGRhdGVkIHRlaCBtYWtlZmlsZXMgYW5kIGluc3RydWN0aW9ucyBmb3IgV0lOMzIKCSogeHBhdGguYzogc21hbGwgZml4ZXMKCSogdGVzdC9YUGF0aC8gcmVzdWx0cy9YUGF0aDogdXBkYXRlZCB0aGUgdGVzdGNhc2VzIGFuZCByZXN1bHRzCgkqIEhUTUxwYXJzZXIuYyBuYW5vaHR0cC5jIHRlc3RYUGF0aC5jOiBpbmNvcnBvcmF0ZWQgcHJvdmlkZWQgb3IKCSAgc3VnZ2VzdGVkIHBhdGNoZXMKCSogdmFsaWQuYzogZml4ZWQgYW4gSUQgYnVnCgpNb24gT2N0ICA5IDE0OjI4OjU2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBtb3ZlZCB4bWwtZXJyb3IuaCB0byB4bWxlcnJvci5oOiBzZWVtcyB0aGlzIGFsbG93ZWQgdG8gYnlwYXNzCgkgIHRoZSBhdXRvbWFrZSBidWcgd2hlcmUgd3JvbmcgZGVwZW5kZW5jaWVzIHdlcmUgZ2VuZXJhdGVkLgoJKiB4cGF0aC5bY2hdOiB3b3JrZWQgb24gWFBvaW50ZXIKCkZyaSBPY3QgIDYgMTI6NTg6MDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogMi4yLjUsIHNoaXAgdGhlIGluY2x1ZGUgaW4gYW4KCSAgaW5jbHVkZS9saWJ4bWwgc3ViZGlyZWN0b3J5LCB1c2Ugc3ltbGlua3Mgd2hlbiB1c2luZyBDVlMKCSogdGVzdFNBWC5jOiBmaXhlZCBzbWFsbCBidWcKCSogdGVzdFhQYXRoLmM6IGNoYW5nZWQgdGhlIHdheSB0ZXN0ZmlsZXMgYXJlIHBhcnNlZAoJKiBkZWJ1Z1hNTC5jOiBzYW1lIGtpbmQgb2YgY2xlYW51cCB3aGVuIHBhcnNpbmcgYW4gYXJndW1lbnQgZXhwcmVzc2lvbgoJICBYUGF0aC9YUG9pbnRlcnMgY2FuIGhhdmUgYmxhbmtzIGVtYmVkZGVkCgkqIHhwYXRoLltjaF06IG1vcmUgY2xlYW51cCwgcmVvcmdzIGZvciBYUG9pbnRlciB3b3JrCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZml4ZWQgd3JvbmcgaW5jbHVkZQoJKiB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcDogV2luZG93cyBzdHVmZgoKVGh1IE9jdCAgNSAxODoxMzoxNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuYyB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBnb3QgcGlzc2VkIGJ5IHNvbWUgbmFzdHluZXNzCgkgIGluIHRoZSBYUGF0aCBlbmdpbmUsIHJld3JvdGUgbGFyZ2UgcGFydHMgb2YgaXQsIG5vdyBpdCdzIGZhcgoJICBjbGVhbmVyIGFuZCBpbiBzeW5jIHdpdGggdGhlIFJFQyBub3QgYW4gb2xkIFdELiBGaXhlZCBhIHBhcnNpbmcKCSAgcHJvYmxlbSBpbiB0aGUgaW50ZXJhY3RpdmUgWE1MIHNoZWxsIGZvdW5kIHdoZW4gdGVzdGluZyBYUGF0aC4KCldlZCBPY3QgIDQgMTU6MjU6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmMgeHBhdGguW2NoXTogTW9yZSB3b3JrIG9uIFhQYXRoL1hwb2ludGVyLAoJICBpbmNvcnBvcmF0ZWQgIihUT00pIiA8cHRpdHRvbUBmcmVlLmZyPiBwYXRjaGVzIHJlYnVpbHQgdGhlIFhQYXRoCgkgIGV4YW1wbGVzIHdpdGggdGhlIGV4dHJhIHRlc3QKCldlZCBPY3QgIDQgMTQ6Mzk6MDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHhtbElPLmMgeG1sSU8uaDogZml4ZWQgYnVnIDI2NjUwLCBhbmQgaW1wcm92ZWQKCSAgdGhlIGdsb2JhbCBpbml0IGZ1bmN0aW9uLgoKVHVlIE9jdCAgMyAxMToyODo1MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBEb29oaGgsIGF0dHJpYnV0ZSBuYW1lIHBhcnNpbmcgd2FzIHN0aWxsIGNhc2UKCSAgc2Vuc2l0aXZlICEgRml4ZWQgdGhpcyAuLi4KCSogcmVzdWx0L0hUTUwvKiA6IHVwZGF0ZWQgdGhlIHRlc3RzIHJlc3VsdHMgYWNjb3JkaW5nbHkKCk1vbiBPY3QgIDIgMjM6NDc6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0gZGVidWdYTUwuYyB0ZXN0WFBhdGguYzogZml4ZWQgdGhlIFhQYXRoIGV2YWx1YXRpb24KCSAgZW5naW5lLCBzaG91bGQgYmUgZmFyIG1vcmUgc3RhYmxlLCBpbmNvcnBvcmF0ZWQgYSBuZXcgdmVyc2lvbiBvZgoJICBwcmVjZWRpbmcvZm9sbG93aW5nIGF4aXMsIG5lZWQgdGVzdGluZwoJKiB1cmkuYzogZml4ZWQgZmlsZTovLy9jOi9hL2IvYyBwcm9ibGVtCgkqIHRlc3QvWFBhdGgvdGVzdHMvaWRzaW1wbGU6IGF1Z21lbnRlZCB0aGUgWFBhdGggdGVzdHMKClN1biBPY3QgIDEgMjI6MzM6MDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIHJlYnVpbGRpbmcgZG9jcyBmb3IgMi4yLjQgcmVsZWFzZQoKU3VuIE9jdCAgMSAyMjoxNjozMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMi4yLjQKCSogcGFyc2VyLltjaF06IGFkZGVkIHhtbFN0ckVxdWFsKCkKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlbnRpdGllcy5jIHBhcnNlci5jCgkgIHRyZWUuYyB2YWxpZC5jIHhsaW5rLmMgeHBhdGguYzogY29udmVydGVkIGFsbCAheG1sU3RyY21wIHRvCgkgIHVzZSB4bWxTdHJFcXVhbCBpbnN0ZWFkCgkqIFRPRE86IHVwZGF0ZWQKCSogYWRkZWQgYW4gWFBhdGggdGVzdAoKU3VuIE9jdCAgMSAyMDoxOTozOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBodG1sU3RhcnRDbG9zZUluZGV4aW5pdGlhbGl6ZWQgaW5pdAoJKiBlbnRpdGllcy5oOiBleHBvcnRlZCB4bWxJbml0aWFsaXplUHJlZGVmaW5lZEVudGl0aWVzCgkqIHBhcnNlci5bY2hdIDogYWRkZWQgeG1sSW5pdFBhcnNlcigpCgkqIHBhcnNlckludGVybmFscy5oIDogaGFkIHRvIGV4cG9ydCBodG1sSW5pdEF1dG9DbG9zZSgpCgpTdW4gT2N0ICAxIDE2OjI4OjIyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5bY2hdIDogZml4ZWQgc29tZSBzZXJpb3VzIFhQYXRoIFByZWRpY2F0ZSBldmFsdWF0aW9uCgkgIHByb2JsZW1zCgkqIE1ha2VmaWxlLmFtIDogYWRkZWQgWFBhdGggcmVncmVzc2lvbiB0ZXN0cyB0byBub3JtYWwgdGVzdHMKCSogdXJpLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGxvY2FsIHBhdGhzLCBjbGVhbnVwCgkqIHBhcnNlci5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBsYXJnZSBDRGF0YSBzZWN0aW9ucwoKU2F0IFNlcCAzMCAxNjozNTo1NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIHhtbC1jb25maWcuaW46IHBhdGNoIGZyb20gIkJlbiBUYXlsb3IiCgkgIDxzb2w3eDg2QGhvdG1haWwuY29tPiBmb3Igc29sYXJpcyBzaGFyZWQgbGlicyBsb29rdXAKCjIwMDAtMDktMzAgIE1hcnRpbiBCYXVsaWcgIDxiYXVsaWdAc3VzZS5kZT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IFByb3ZpZGUgcGtnLWNvbmZpZyBzY3JpcHQuCgoJKiBjb25maWd1cmUuaW46IENyZWF0ZSB0aGUgbGlieG1sLTIuMC5wYyBzY3JpcHQgZnJvbSB0aGUKCWxpYnhtbC0yLjAucGMuaW4gdGVtcGxhdGVzLgoJKiBNYWtlZmlsZS5hbSAocGtnY29uZmlnX0RBVEEpOiBJbnN0YWxsIHRoZSBsaWJ4bWwtMi4wLnBjCglzY3JpcHQgaW4gYCQobGliZGlyKS9wa2djb25maWcnLgoKTW9uIFNlcCAyNSAxNjoyMzo0MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jIHRyZWUuYyB0cmVlLmg6IEF2b2lkaW5nIGEgZmV3IHdhcm5pbmcKCSAgd2hlbiBjb21waWxpbmcgd2l0aCBNU0MKClN1biBTZXAgMjQgMjA6MzI6NTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IHBhdGNoIGZvciBub3JtYWxpemUtc3RyaW5nKCkgc3Vic3RyaW5nLWJlZm9yZSgpLAoJICBzdWJzdHJpbmctYWZ0ZXIoKSBhbmQgdHJhbnNsYXRlKCkgZnVuY3Rpb25zIGZyb20gQmpvcm4gUmVlc2UKCSAgPGJyZWVzZUBtYWlsMS5zdG9mYW5ldC5kaz4KCSogbGlieG1sLm00IE1ha2VmaWxlLmFtOiBhZGRlZCBsaWJ4bWwubTQgZnJvbSBEZWJpYW4gPwoJICBGcmVkcmlrIEhhbGxlbmJlcmcgPGhhbGxvbkBseXNhdG9yLmxpdS5zZT4KCSogVE9ETzogdXBkYXRlZAoKU3VuIFNlcCAyNCAxMDowMDo0OSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sdmVyc2lvbi5oLmluIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiB0cmF5aW5nIHRvIHdvcmsgb3V0IHRoZQoJICBwcm9ibGVtIG9mIHNvY2tsZW5fdCBiZWluZyB1bmRlZmluZWQgb24gYSBudW1iZXIgb2YgcGxhdGZvcm1zCgkqIGRlYnVnWE1MLmM6IGZpeGVkIGEgY29tcGlsYXRpb24gcHJvYmxlbSB3aGVuIHdpdGhvdXQgc25wcmludGYKClNhdCBTZXAgMjMgMTI6MTk6NDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyB1cmkuYzogQW5vdGhlciBwYXRjaCBmcm9tIFdheW5lIERhdmlzb24sIGNvcnJlY3RpbmcKCSAgYW4gVVJJIGJ1ZyBhbmQgYSBmaXggZm9yIHRoZSBjb250cm9sLWNoYXJhY3Rlci1pbmR1Y2VkIGluZmluaXRlIGxvb3AKCSogbmFub2h0dHAuYzogcHJldmVudGl2ZSBmaXggZm9yIGNvbXBpbGluZyBvbiBXSU4zMgoKRnJpIFNlcCAyMiAxODowNjowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1saW50LmM6IGNsb3NpbmcgYnVnICMyNTAwMAoKRnJpIFNlcCAyMiAxNDoxNzo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uaCB0cmVlLmg6IG1hZGUgeG1sTm9kZUR1bXAoKSBhbmQgeG1sTm9kZUR1bXBPdXRwdXQoKSBwdWJsaWMKCSogcGFyc2VyLltjaF0gbmFub2h0dHAuYyBIVE1MdHJlZS5jIEhUTUxwYXJzZXIuYyB0cmVlLmM6IGFwcGxpZWQgYW5kCgkgIG1vZGlmaWVkIHNsaWdodGx5IFdheW5lIERhdmlzb24gcGF0Y2ggYWRkaW5nIHhtbFN0cmNhc2VjbXAgYW5kCgkgIHJlbGF0ZWQgZnVuY3Rpb24sIGZpeGluZyB4bWxTdHJuY21wKCksIGFuZCBhc3NvY2lhdGVkIGNsZWFudXAKCSogcmVzdWx0L0hUTUwvZW50aXRpZXMuaHRtbC5zYXg6IHVwZGF0aW5nIHJlc3VsdAoKVHVlIFNlcCAxOSAxNDoyMDoxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmM6IGFwcGxpZWQgcGF0Y2ggZm9yIFVSSSBlc2NhcGluZyBmcm9tIFdheW5lIERhdmlzb24KCSAgPHdheW5lZEBibG9yZi5uZXQ+CgkqIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyBIVE1McGFyc2VyLmM6IG1lbXNldCBjaGVja3MgcGF0Y2hlcwoJICBmcm9tIERlbmlzIEJhcmJpZXIgPGJhcmJpZXJAaW1hY3MucG9seXRlY2huaXF1ZS5mcj4KCSogSFRNTHBhcnNlci5jOiBVVEY4IGNoYXJhY3RlcnMgaW4gSFRNTCB0YWctYXR0cmlidXRlIHZhbHVlcwoJICBwYXRjaCBmcm9tIFdheW5lIERhdmlzb24KClN1biBTZXAgMTcgMTg6Mzc6MDMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQgd2l0aCBuZXcgcmVsZWFzZXMsIGFkZGluZyAiaG93IHRvIGhlbHAiCgpTdW4gU2VwIDE3IDE3OjU4OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYyBkZWJ1Z1hNTC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB2YWxpZC5jIHhwYXRoLmM6CgkgIHJlbW92ZWQgYSBmZXcgd2FybmluZ3MgaW4gcGVkYW50aWMgbW9kZSAuLi4KCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmM6IG1vdmVkIGVuY29kaW5nIHN3aXRjaGluZyBmdW5jdGlvbgoJICB0byBwYXJzZXJJbnRlcm5hbHMuYwoJKiBjb25maWd1cmUuaW4sIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogcmVsZWFzZWQgMi4yLjMKClNhdCBTZXAgMTYgMjA6MTI6NDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogc2V0IGN0eHQtPmVyck5vIGJlZm9yZSBjYWxsaW5nIHRoZQoJICBlcnJvciBvciB3YXJuaW5nIGhhbmRsZXJzCgpXZWQgU2VwIDEzIDIyOjAzOjE4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXJJbnRlcm5hbHMuaCBwYXJzZXIuYyBNYWtlZmlsZS5hbToKCSAgY3JlYXRlZCBhIG5ldyBtb2R1bGUgcGFyc2VySW50ZXJuYWxzLmMsIG1vdmVkIG1vc3Qgb2YgdGhlCgkgIGNvZGUgc2hhcmVkIGJ5IHRoZSB2YXJpb3VzIHBhcnNlcnMgdGhlcmUsIGFzIHdlbGwgYXMKCSAgZGVwcmVjYXRlZCAgY29kZSBmcm9tIHBhcnNlci5jLiBNb3JlIGNsZWFudXAgb2YgcGFyc2VyLmMKCSogdXJpLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIFVSSSBpcyBOVUxMCgkqIHZhbGlkLmM6IHNwZWVkdXAgd2hlbiBsb29raW5nIGZvciBhbiBhdHRyaWJ1dGUgZGVjbGFyYXRpb24KClN1biBTZXAgMTAgMTc6NTM6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jIHRyZWUuYyBTQVguYyBwYXJzZXIuYyBlbnRpdGllcy5jIGRlYnVnWE1MLmM6IGZpbmlzaGVkCgkgIHRoZSBjbGVhbnVwIG9mIHRoZSBjb21wdXRhdGlvbiBvZiBVUkkgcmVmZXJlbmNlcyB3aGVuIHNlZWtpbmcKCSAgZXh0ZXJuYWwgZW50aXRpZXMuIFRoZSBVUkkgcmVmZXJlbmNlIHN0cmluZyBhbmQgdGhlIHJlc3VsdGluZwoJICBVUkkgYXJlIGJvdGggc3RvcmVkIG5vdy4KCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jIHZhbGlkLmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgeHBhdGguYzoKCSAgbGFyZ2UgcyhuKXByaW50ZiBjaGVja3MgYW5kIGNsZWFudXAgZnJvbSBEZW5pcyBCYXJiaWVyCgkgIDxiYXJiaWVyQGltYWNzLnBvbHl0ZWNobmlxdWUuZnI+CgkqIHhtbHZlcnNpb24uaC5pbiB0cmVlLmg6IGNvdXBsZSBvZiBTR01MIGRlY2xhcmF0aW9ucyBmb3IgYQoJICBwb3NzaWJsZSBkb2Nib29rIG1vZHVsZS4KCSogcmVzdWx0L1ZDLyA6IGEgY291cGxlIG9mIHRlc3Qgb3V0cHV0IGNoYW5nZWQgZHVlIHRvIHRoZSBjaGFuZ2UKCSAgb2YgdGhlIGVudGl0aWVzIFVSSQoKU3VuIFNlcCAxMCAxNTo1OTo1OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmg6IGFkZGVkIGEgX3ByaXZhdGUgZmllbGQgZm9yIGxpbmtpbmcgdXNlcidzIGRhdGEKClN1biBTZXAgMTAgMTU6MTQ6NDMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5oOiBkZW1hY3JvaWZpZWQgbW9zdCBvZiB0aGUgSVNfWFhYCgkgIHRoZSBnYWluIGluIHNpemUgaXMgc2lnbmlmaWNhbnQgc28gLi4uCgpGcmkgU2VwICA4IDIwOjQ4OjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jOiBjYXNlcyB3aGVyZSBsb29raW5nIHVwIGVudGl0aWVzIHdpdGggZG9jPT1OVUxMCgkgIGNvdmVyZWQKClR1ZSBTZXAgIDUgMTI6NDE6MTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jOiBhcHBsaWVkIFdheW5lIERhdmlzb24gcGF0Y2gKCSogTWFrZWZpbGUuaW4gdGVzdC9VUkkvdXJpLmRhdGEgcmVzdWx0L1VSSS91cmkuZGF0YTogdXBkYXRlZCBVUkkgdGVzdHMKCk1vbiBTZXAgIDQgMTM6MDE6NDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jIHRlc3RVcmkuYzogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoZXMKCSogdGVzdC9VUkkvdXJpLmRhdGEgcmVzdWx0L1VSSS91cmkuZGF0YTogZmlyc3Qgc2V0IG9mIHRlc3RzL3Jlc3VsdHMKCSogTWFrZWZpbGUuaW46IGFkZGVkIFVSSXRlc3QgYW5kIGluY2x1ZGVkIHRoZW5pbiAibWFrZSB0ZXN0cyIKClN1biBTZXAgIDMgMTk6MTk6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbjogY2xvc2VkIGJ1ZyAyMjk0MQoKVGh1IEF1ZyAzMSAxNjo1NTo1NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGlvLmh0bWw6IGFkZGVkIGRvYyBhbmQgZXhhbXBsZSBmb3IgZW50aXR5IGxvYWRlcgoJICByZWRlZmluaXRpb24uCgpUaHUgQXVnIDMxIDE0OjU5OjI4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1saW8uaHRtbCBkb2MveG1sLmh0bWw6IGFkZGVkIGEgZG9jIG9uIHRoZSBJL08gbWVjaGFuaXNtCgkgIHVzZWQgYnkgbGlieG1sCgpUdWUgQXVnIDI5IDIwOjIyOjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgYnVnIG9uIGludmFsaWQgb250ZW50IGNoYXJhY3RlcnMgYW5kIHdoZW4gdXNpbmcKCSAgcHVzaC4KCSogeG1sbGludC5jOiBmaXhlZCB4bWxsaW50IGVuZGxpbmcgb2YgZXJyb3JzIGluIHB1c2ggbW9kZQoKVHVlIEF1ZyAyOSAxMToyNDo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHRlc3RIVE1MLmM6IGFwcGxpZWQgdHdvIG5ldyBwYXRjaGVzIGZyb20KCSAgV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCSogcmVzdWx0L0hUTUwvKi5zYXg6IHJlZ2VuZXJhdGVkIEhUTUwgU0FYIG91dHB1dAoJKiBwYXJzZXIuYzogbW9yZSBjbGVhbnVwLgoKTW9uIEF1ZyAyOCAxMTo1ODoxMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdIHRlc3RIVE1MLmM6IGFwcGxpZWQgdGhlIHNlY29uZCBzZXQgb2YKCSAgcGF0Y2hlcyBmcm9tIFdheW5lIERhdmlzb24gPHdheW5lZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LAoJICBhZGRpbmcgaHRtbEVuY29kZUVudGl0aWVzKCkKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBhbiBpZ25vcmFibGUgd2hpdGUgc3BhY2UgZGV0ZWN0aW9uIGJ1ZwoJICBvY2N1cmluZyB3aGVuIHBhcnNpbmcgd2l0aCBTQVggb25seQoJKiByZXN1bHQvSFRNTC8qLnNheDogdXBkYXRlZCBzaW5jZSB0aGUgb3V0cHV0IGlzIG5vdyBIVE1MCgkgIGVuY29kZWQuLi4KCk1vbiBBdWcgMjggMDA6Mzg6MzEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXTogYXBwbGllZCBzb21lIG9mIFdheW5lIERhdmlzb24KCSAgPHdheW5lZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IHBhdGNoZXMKClN1biBBdWcgMjcgMjI6MTQ6MDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jIHRyZWUuYyBkZWJ1Z1hNTC5jOiBmaXhlZCBib2d1cyBiZWhhdmlvdXIgd2hlbiBhbgoJICB1bmRlY2xhcmVkIG5hbWVzcGFjZSBwcmVmaXggd2FzIHVzZWQsIGFkZGVkIGEgd2FybmluZy4KCSAgQ2xlYW5lZCB1cCBzdXBwb3J0IHcuci50LiBlbnRpdGllcywgc3BpbGxpbmcgb3V0IGEgd2FybmluZwoJICBhbmQgYmVpbmcgcGVkYW50aWMgb24gbG9va3Vwcy4KCSogdGVzdC93YXJuaW5nL2VudDkgOiBhZGRlZCB0ZXN0Y2FzZSBmb3IgcHJldmlvdXMgZXhhbXBsZS4KCSogVE9ETzogdXBkYXRlZAoJKiBwYXJzZXJJbnRlcm5hbHMuaCBwYXJzZXIuYzogY2hhbmdlZCB0aGUgd2F5IG5hbWVzIGFyZSBwYXJzZWQKCSAgbm93IGFsbG93IGluZmluaXRlIHNpemUgYW5kIGRlY3JlYXNlIHBlbmFsdHkgZm9yIG5vcm1hbCB1c2UKCSogcGFyc2VyLmM6IFN0YXJ0ZWQgYSBiaWcgY2xlYW51cC9jaGVjayBvZiB0aGUgcGFyc2VyIGNvZGUsCgkgIGZpeGVkIHNvbWUgb2YgdGhlIG1vc3QgdG9ydHVvdXMgZW50aXR5IGNvZGUsIHNwb3R0ZWQgY29kZQoJICB1bnVzZWQgYW55bW9yZQoJKiB0ZXN0Lyo6IGFkZGVkIHRlc3RzIGZvciB2ZXJ5IGxvbmcgbmFtZXMgYW5kIHJlbGF0ZWQgbmFzdHkKCSAgdGhpbmdzLgoKU2F0IEF1ZyAyNiAyMzozMTowNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWw6IGFkZGVkIGVuY29kaW5nIGFsaWFzZXMgZG9jCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlcwoJKiBlbmNvZGluZy5bY2hdOiBhZGRlZCBFbmNvZGluZ0FsaWFzZXMgZnVuY3Rpb25zCgkqIGVudGl0aWVzLltjaF0gdmFsaWQuW2NoXSBkZWJ1Z1hNTC5jOiByZW1vdmVkIHR3byBzZXJpb3VzCgkgIGJvdHRsZW5lY2sgYWZmZWN0aW5nIGxhcmdlIERURHMgbGlrZSBEb2Nib29rCgkqIHBhcnNlci5bY2hdIHhtbGxpbnQuYzogYWRkZWQgYSBwZWRhbnRpYyBvcHRpb24sIHdpbGwgYmUKCSAgdXNlZnVsCgkqIFNBWC5jOiByZWRlZmluaXRpb24gb2YgZW50aXRpZXMgaXMgcmVwb3J0ZWQgaW4gcGVkYW50aWMgbW9kZQoJKiB0ZXN0SFRNTC5jOiB1bmluaXRpYWxpemVkIHdhcm5pbmcgZnJvbSBnY2MKCSogdXJpLmM6IGZpeGVkIGEgY291cGxlIG9mIGJ1Z3MKCSogVE9ETzogYWRkZWQgaXNzdWUgcmFpc2VkIGJ5IE1pY2hhZWwKCldlZCBBdWcgMjMgMDE6NTA6NTEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9lbmNvZGluZy5odG1sOiBwcm9wYWdhdGVkIE1hcnRpbiBEdWVyc3Qgc3VnZ2VzdGlvbnMKCldlZCBBdWcgMjMgMDA6MjM6NDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBGaXhlZCBCdWcjMjE1NTI6IGxpYnhtbCBmYWlscyB0byBkZWNvZGUgJmFtcDsKCSogdXJpLmMgdGVzdFVyaS5jIHBhdGNoZXMsIGJ5IE1hcmMgU2FuZmFjb24gKDEgbGVmdCkKCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBIVE1ML2VuY29kaW5nIHB1c2ggcHJvYmxlbXMgcmVwb3J0ZWRpCgkgIGJ5IFdheW5lIERhdmlzb24KClN1biBBdWcgMjAgMTc6MDM6MzggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBzbWFsbCBjbGVhbnVwCgkqIFRPRE86IHVwZGF0ZWQKClNhdCBBdWcgMTkgMjI6NTc6MDIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGFuIG9sZCBWQyB0ZXN0Y2FzZSBhbmQgdXBkYXRlZCB0aXRsZS54bWwgZW50aXR5CgpTYXQgQXVnIDE5IDIxOjAyOjA4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgU0FYLmMgdHJlZS5jIEhUTUx0cmVlLmggcmVzdWx0L0hUTUwvKjogd29yawoJICBkb25lIG9uIGF1dG8tb3BlbmluZyBvZiA8cD4gdGFncyBhbmQgY2xlYW51cCBvZiBTQVggb3V0cHV0CgpTYXQgQXVnIDE5IDE4OjQ1OjQwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuNCAgeG1sbGludC4xIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBhZGRlZCBtYW4gcGFnZXMKClNhdCBBdWcgMTkgMTg6Mzg6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCBsaWJ4bWwuKiBzdHJ1Y3R1cmUuKjogdXBkYXRlZCB0aGUgZG9jIGEgYml0CgpUaHUgQXVnIDE3IDE1OjUwOjAwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0U0FYLmMgdGVzdEhUTUwuYyByZXN1bHQvSFRNTC86IGNsZWFudXAgb2YgdGhlIG91dHB1dAoJICBvZiBTQVggdGVzdHMKCk1vbiBBdWcgMTQgMTM6NTY6MzMgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+OgoJKiB4bWxsaW50LmM6IHdvcmthcm91bmQgYSBNQVBfRkFJTEVkIGRlZmluaXRpb24gYnVnIGluIERVLTQuMAoKTW9uIEF1ZyAxNCAxMToxMDoyMCBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBQYXRjaCBmcm9tIERhdmUgWWVhcmtlIDx5ZWFya2VAZW5nLmJ1ZmZhbG8uZWR1PjoKCSogdGVzdEhUTUwuYzogZml4IGNvcmUgZHVtcCBvbiBTb2xhcmlzIDIueCBzeXN0ZW1zCgkqIEhUTUxwYXJzZXIuYzogZml4IHNlZ2ZhdWx0IGlmIGN0eHQtPnNheC0+Y2hhcmFjdGVycygpIGlzIE5VTEwKCSogcmVzdWx0L0hUTUwvKi5zYXg6IHByZXZpb3VzIGJ1ZyBmaXggbGVhZCB0byBuZXcgcmVzdWx0cwoKTW9uIEF1ZyAxNCAxMDoyNjowOSBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBQYXRjaCBmcm9tIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT46CgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgLS13aXRoLXJlYWRsaW5lPURJUiB0byBhY2NlcHQgYWx0ZXJuYXRlCgkgIHBhdGggZm9yIHJlYWRsaW5lIGluY2x1ZGUvbGlicmFyeQoJKiBjb25maWd1cmUuaW46IGFkZGVkIEFNX0NfUFJPVE9UWVBFUyB0byBhZGQgLUFhIC1EX0hQVVhfU09VUkNFCgkgIGZvciBBTlNJIHVuZGVyIEhQLVVYCgkqIGNvbmZpZy5pbjogUmVtb3ZlZCBATElCU0AgZnJvbSB4bWwtY29uZmlnIGJlY2F1c2UgQFhNTF9MSUJTQAoJICBpbmNsdWRlcyBATElCU0AKClNhdCBBdWcgMTIgMjM6MTk6NDIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoJKiBnZXR0aW5nIHJlYWR5IGZvciAyLjIuMiByZWxlYXNlCgpTYXQgQXVnIDEyIDE2OjQyOjM3IEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdOiBhZGRlZCB4bWxHZXRGZWF0dXJlc0xpc3QoKSB4bWxHZXRGZWF0dXJlKCkKCSAgYW5kIHhtbEFkZEZlYXR1cmUoKQoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEFkZENoaWxkTGlzdCgpCgkqIHhtbGxpbnQuYzogTUFQX0ZBSUxFRCBtYWNybyB0ZXN0CgkqIHBhcnNlci5oOiBhZGRlZCB4bWxQYXJzZUN0eHRFeHRlcm5hbEVudGl0eSgpCgkqIHZhbGlkLmM6IGFwcGxpZWQgYnVnIGZpeGVzIHJlbW92ZWQgd2FybmluZwoJKiB0cmVlLmM6IGFkZGVkIENEQVRBIGJsb2NrIHRvIGVsZW1lbnRzIGNvbnRlbnQKCSogdGVzdFNBWC5jOiBjbGVhbnVwIG9mIG91dHB1dAoJKiB0ZXN0SFRNTC5jOiBhZGRlZCBTQVggdGVzdGluZwoJKiBlbmNvZGluZy5jOiBiZXR0ZXIgZXJyb3IgcmVjb3ZlcnkKCSogU0FYLmMsIHBhcnNlci5jOiBmaXhlZCBvbmUgb2YgdGhlIGV4dGVybmFsIGVudGl0eSBwcm9jZXNzaW5nCgkgIG9mIHRoZSBPQVNpcyB0ZXN0c3VpdGUKCSogTWFrZWZpbGUuYW06IGFkZGVkIEhUTUwgU0FYIHJlZ3Jlc3Npb24gdGVzdHMKCSogY29uZmlndXJlLmluOiBidW1wZWQgdG8gMi4yLjIKCSogdGVzdC9IVE1MLyByZXN1bHQvSFRNTDogYWRkZWQgYSBmZXcgb2YgSFRNTCB0ZXN0cywgYW5kIGFkZGVkIHRoZQoJICBTQVggcmVzdWx0cwoKRnJpIEF1ZyAgNCAxMToyMTo1MCBQRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHBhdGNoIGZvciBIUCBjb21waWxlcgoKMjAwMC0wOC0wNCAgU3ZlbiBIZWluaWNrZSAgPHN2ZW5AemVuLm9yZz4KCgkqIHhtbGxpbnQuYzogV2FzIGNvcmVkdW1waW5nIHNvbWV0aW1lcyB3aGVuIHRoZSBmaWxlIGdpdmVuIGRpZG4ndAoJZXhpc3QuCgpTYXQgSnVsIDIyIDA1OjU5OjA1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB4bWxJTy5bY2hdOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBlbmNvZGluZyBzdXBwb3J0CgoJICB3aGVuIHVzaW5nIGluIG1lbW9yeSBwYXJzaW5nLiBOZWVkIHNvbWUgY2xlYW51cC4KCSogeG1sbGludC5jIGNvbmZpZ3VyZS5pbjogYWRkZWQgYSAtLW1lbW9yeSBmbGFnIHRvIHRlc3QgbWVtb3J5CgkgIHBhcnNpbmcKCkZyaSBKdWwgMjEgMTc6MDk6NTcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmM6IGZpeGVkIHNvY2tsZW5fdCByZXBsYWNlbWVudCB0byB1bnNpZ25lZCBpbnQKCSogcGFyc2VyLmM6IGZpeGVkIGEgc3BhY2UgaGFuZGRsaW5nIG1pc3NpbmcgYXQgdGhlIGVuZCBvZgoJICBwcm9kdWN0aW9uIDI4IERPQ1RZUEUuCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBhIHN0dXBpZCBidWcgb24gdGhlIHJvdXRpbmUgdG8gb3ZlcnJpZGUKCSAgYWxsb2NhdGlvbiBmdW5jdGlvbnMKCSogVE9ETzogdXBkYXRlZAoKRnJpIEp1bCAxNCAxNzowMToxNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyByZWdlbmVyYXRlZCB0aGUgZG9jcwoKRnJpIEp1bCAxNCAxNjoxMjoyMCBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBJMThOIGRvYwoJKiBlbmNvZGluZy5bY2hdIEhUTUx0cmVlLltjaF0gcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBJMThOIGVuY29kaW5nCgkgIGltcHJvdmVtZW50cywgYm90aCBwYXJzZXIgYW5kIGZpbHRlcnMsIGFkZGVkIEFTQ0lJICYgSFRNTCwKCSAgZml4ZWQgdGhlIElTTy1MYXRpbi0xIG9uZQoJKiB4bWxsaW50LmMgdGVzdEhUTUwuYzogYWRkZWQvbWFkZSB2aXNpYmxlIC0tZW5jb2RlCgkqIGRlYnVnWE1MLmMgOiBjbGVhbnVwCgkqIG1vc3QgLmMgZmlsZXM6IGFwcGxpZWQgcGF0Y2hlcyBkdWUgdG8gd2FybmluZyBvbiBXaW5kb3dzIGFuZAoJICB3aGVuIHVzaW5nIFN1biBQcm8gY2MgY29tcGlsZXIKCSogeHBhdGguYyA6IGNsZWFudXAgbWVtbGVha3MKCSogbmFub2Z0cC5jIDogYWRkZWQgYSBURVNUSU5HIHByZXByb2Nlc3NvciBmbGFnIGZvciBzdGFuZGFsb25nCgkgIGNvbXBpbGUgc28gdGhhdCBwZW9wbGUgY2FuIHJlcG9ydCBidWdzIG1vcmUgZWFzaWxseQoJKiBuYW5vaHR0cC5jIDogZGl0Y2hlZCBzb2NrbGVuX3Qgd2hpY2ggd2FzIGEgcG9ydGFiaWxpdHkgbWVzcwoJICBhbmQgcmVwbGFjZWQgaXQgd2l0aCB1bnNpZ25lZCBpbnQuCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sSGFzUHJvcCgpCgkqIFRPRE86IHVwZGF0ZWQKCSogdGVzdC8gOiBhZGRlZCBtb3JlIHRlc3QgZm9yIGVudGl0aWVzLCBOUywgZW5jb2RpbmcsIEhUTUwsIHdhcAoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi4yLjAgcmVsZWFzZQoKTW9uIEp1bCAxMCAxNjoxNzoxOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBmaXhlZCB0aGUgd2F5IHRoZSBjb250cm9sIGNvbm5lY3Rpb24gaXMgaGFuZGxlZAoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY2xlYW51cAoKTW9uIEp1bCAgMyAxNDozNzowNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sOiBjaGFuZ2VkIHRoZSB4bWxzb2Z0Lm9yZyBzdHJ1Y3R1cmUsIHVwZGF0ZWQgdGhlCgkgIGV4YW1wbGVzIHcuci50LiByb290IGFuZCBjaGlsZHMKClN1biBKdWwgIDIgMjA6NTE6NDMgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCBidWcgIzc0MTksIGRlcGVuZGVuY2llcyBmb3VsZWQgZm9yIGxpYnhtbC1kZXZlbAoKU3VuIEp1bCAgMiAwOTo1Mjo0NSBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBXb3JrIG9uIGNoYXJhY3RlciBlbmNvZGluZyBzdXBwb3J0IGZvciB0aGUgSFRNTCBwYXJzZXIKCSogSFRNTHBhcnNlci5jOiBGaXhlZCBzb21lIGF1dG9vcGVuL2F1dG9jbG9zZSBwcm9icyBmb3IgdGhlIEhUTUwgcGFyc2VyCgkqIGVuY29kaW5nLmM6IEZpeGVkIGEgcG90ZW50aWFsIG1lbWxlYWsgaW4gdGhlIGVuY29kaW5nIHN0dWZmCgpTYXQgSnVsICAxIDEzOjQ0OjIyIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvRkFRLmh0bWwgZG9jL01ha2VmaWxlLmFtIDogYWRkZWQgYSBGQVEKCkZyaSBKdW4gMzAgMjA6Mjk6MDggTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIHZhbGlkLmMgdHJlZS5oIDogbW9yZSBjbGVhbnVwCgkgIG9mIHRoZSBIVE1MIHBhcnNlciB0byBmb3JjZSBpdCB0byBub3QgYnlwYXNzIFNBWAoKRnJpIEp1biAzMCAxMToxOTo1OSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogd2luMzJjb25maWcuaC5pbjogdXBkYXRlZAoJKiB4bWx2ZXJzaW9uLmguaW46IGNyYXAgZm9yZ290IHRvIHVwZGF0ZSB0aGlzLCB0aGlzIG1lYW4gMi4xLjAKCSAgbGFja3MgaWNvbnYgc3VwcG9ydCA6LSggbmVlZCB0byByZWxlYXNlIDIuMS4xCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSAyLjEuMQoJKiBIVE1McGFyc2VyOiBmaXhlZCBidWcgIzE0Nzg0CgkqIHhwYXRoLmMgSFRNTHBhcnNlci5jIGVuY29kaW5nLmMgcGFyc2VyLmM6IGZpeCB3YXJuaW5nIHJhaXNlZAoJICBieSBXaW5kb3dzIGNvbXBpbGVyCgkqIEhUTUxwYXJzZXIuYyBTQVguYyBIVE1MdHJlZS5oIHRyZWUuaDogY3JlYXRlIEhUTUwgZG9jdW1lbnQgaW4KCSAgdGhlIFNBWCBzdGFydERvY3VtZW50KCkgY2FsbGJhY2suCgkqIFRPRE86IHVwZGF0ZWQKClRodSBKdW4gMjkgMTI6MDY6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIHhtbFN0b3BQYXJzZXIoKQoKV2VkIEp1biAyOCAyMzoxMDoyNiBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiAyLjEuMCBwcmVyZWxlYXNlCgkqIExhcmdlIHJlc3luYyBiZXR3ZWVuIFczQyBhbmQgR25vbWUgdHJlZQoJKiBuYW5vZnRwLCBuYW5vaHR0cC5jOiBmaXhlZCBzdGFsbGVkIGNvbm5lY3Rpb25zIHByb2JzCgkqIEhUTUx0cmVlLmMgU0FYLmMgOiBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZXMgaW4KCSAgSFRNTCBmb3IgYW5kZXJzY2EKCSogdmFsaWQuYzogRml4ZWQgbW9zdCB2YWxpZGF0aW9uICsgbmFtZXNwYWNlIHByb2JsZW1zCgkqIEhUTUxwYXJzZXIuYzogc3RhcnQgZG9jdW1lbnQgY2FsbGJhY2sgZm9yIGFuZGVyc2NhCgkqIGRlYnVnWE1MLmMgeHBhdGguYzogbG90cyBvZiBYUGF0aCBmaXh1cHMgZnJvbSBQaWNkYXIgVGVjaG5vbG9neQoJKiBwYXJzZXIuaCwgU0FYLmM6IHNlcmlvdXMgc3BlZWQgaW1wcm92ZW1lbnQgZm9yIGxhcmdlCgkgIENEQVRBIGJsb2NrcwoJKiBlbmNvZGluZy5bY2hdIHhtbElPLltjaF06IEltcHJvdmVkIHNlcmlvdXNseSBzYXZpbmcgdG8KCSAgZGlmZmVyZW50IGVuY29kaW5nCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0gZXhhbXBsZS9nam9icmVhZC5jIHRyZWUuaDogd29yayBvbiAKCSAgbGlieG1sMSBsaWJ4bWwyIGNvbnZlcmdlbmNlLgoJKiBjb25maWcuaC5pbiBwYXJzZXIuYyB4bWxsaW50LmM6IGFkZGVkIHhtbENoZWNrVmVyc2lvbigpCgkgIGFuZCB0aGUgTElCWE1MX1RFU1RfVkVSU0lPTiBtYWNybwoKRnJpIEp1biAyMyAyMjoyNjowNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sOiB2YXJpb3VzIHBhdGNoZXMgYW5kIGltcHJvdmVtZW50cyB0eXBvIGZpeGVkIGJ5CgkgIEZlbGl4IE5hdHRlcgoJKiBkb2MvbGlieG1sLWRvYy5lbDogRW1hY3MgbW9kdWxlIHRvIGxvb2t1cCB0aGUgbGlieG1sIGRvY3VtZW50YXRpb24KCSAgZnJvbSBGZWxpeCBOYXR0ZXIgPGZuYXR0ZXJAZ214Lm5ldD4KClNhdCBNYXkgIDYgMTA6MDk6NDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy91cGdyYWRlLmh0bWw6IHVwZGF0ZWQgd2l0aCBpbnN0cnVjdGlvbnMgZm9yIHN1cHBvcnQgb2YgYm90aAoJICBsaWJ4bWwtMS54IGFuZCBsaWJ4bWwtMi54CgkqIGRvYy9nam9icmVhZC5jIDogYXBwbGllZCBUb2RkIER1a2VzIDx0ZHVrZXNAaWJtb3RvLmNvbT4gcGF0Y2gKCSAgZm9yIDIueCBzdXBwb3J0IGFuZCBhbHNvIGZpeGVkIGluY2x1ZGVzCgpXZWQgTWF5ICAzIDE0OjIxOjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5bY2hdLCB4bWxJTy5bY2hdLCBwYXJzZXIuYywgY29uZmlndXJlLmluIDogcmV2YW1wZWQKCSAgdGhlIGVuY29kaW5nIHN1cHBvcnQsIGFkZGVkIGljb252IHN1cHBvcnQsIHNvIG5vdyBsaWJ4bWwgaWYKCSAgY29tcGlsZWQgd2l0aCBpY29udiBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgamFwYW5lc2UgZW5jb2RpbmdzCgkgIGFtb25nIG90aGVycy4gV29yayBiYXNlZCBvbiBpbml0aWFsIHBhdGNoIGZyb20gWXVhbi1DaGVuIENoZW5nCgkgIEkgbWF5IGhhdmUgYnJva2VuIGJpbmFyeSBjb21wYXQgaW4gdGhlIGVuY29kaW5nIGhhbmRsZXIKCSAgcmVnaXN0cmF0aW9uIHNjaGVtZSwgYnV0IHRoYXQgd2FzIHNvIHV0dGVybHkgYnJva2VuIEkgZG9uJ3QKCSAgZXhwZWN0IGFueWJvZHkgdG8gaGF2ZSB1c2VkIHRoaXMgZmVhdHVyZSB1bnRpbCBub3cuCgkqIHBhcnNlckludGVybmFscy5oOiBmaXh1cCBvbiB0aGUgQ0hBUiByYW5nZSBtYWNybwoJKiB4bWwtZXJyb3IuaCwgcGFyc2VyLmM6IGNhdGNoIFVSTC9VUkkgZXJyb3JzIHVzaW5nIHRoZSB1cmkuYwoJICBjb2RlLgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEJ1ZmZlckdyb3coKSwgd2FzIG5lZWRlZCBmb3IgaWNvbnYKCSogdXJpLmM6IGFkZGVkIHhtbFBhcnNlVVJJKCkgSSBjYW4ndCBiZWxpZXZlIEkgZm9yZ290IHRvCgkgIGltcGxlbWVudCB0aGlzIG9uZSBpbiAyLjAgISEhCgkqIFNBWC5jOiBtb3ZlZCBkb2MtPmVuY29kaW5nIHVwZGF0ZSBpbiB0aGUgZW5kRG9jdW1lbnQoKSBjYWxsLgoJKiBUT0RPOiB1cGRhdGVkLgoKTW9uIEFwciAyNCAxMzozMDoxMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oOiByZW1vdmVkIGV4dHJhbmVvdXMgeG1sUmVtb3ZlUHJvcCBkZWZpbml0aW9uCgkqIFRPRE86IGFkZGVkIGl0ZW0gYWJvdXQgLS1kaXNhYmxlLWNvcmJhIGNvbmZpZ3VyZSBzd2l0Y2gKCSogdHJlZS5jIHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtcyBmb3IgeG1sQ29weURvYyBhbmQgcG9zdHZhbGlkYXRpb24KCSogbmFub2Z0cC5jOiBmaXhlZCBpbmNsdWRlIHByb2JsZW1zIGdpdmluZyB0cm91YmxlcyBvbiBBSVggYW5kIAoJICBzbG93bGFyaXMKCSogeG1sSU8uW2NoXSB2YWxpZC5oIHRyZWUuW2NoXSB4bGluay5jIHhtbG1lbW9yeS5jIHVyaS5jIAoJICBwYXJzZXIuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyBTQVguYyB0ZXN0U0FYLmMgOgoJICBjb21tZW50IGFuZCBoZWFkZXJzIGNoYW5nZXMgdG8gbG93ZXIgZ3RrLWRvYyBudW1iZXIgb2Ygd2FybmluZ3MKCSogZG9jL2h0bWwvKjogcmVidWlsdCBkb2NzCgpTdW4gQXByIDE2IDExOjIzOjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIQUNLSU5HOiBkb2N1bWVudGVkIHRoZSB0YWcgZm9yIDEueCBhbmQgaW5zdHJ1Y3Rpb25zCgpXZWQgQXByIDEyIDE1OjQ3OjIyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxJTy5bY2hdIHBhcnNlci5bY2hdOiBNb3JlIGludGVyZmFjZXMgZm9yIG5ldyBJL08gZnVuY3Rpb25zCgkgIHhtbE5ld0lPSW5wdXRTdHJlYW0sIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlSU8sCgkgIHhtbENyZWF0ZUlPUGFyc2VyQ3R4dAoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuaDogc3BlZWR1cCBvZiBJU19DSEFSIGxpa2UgbWFjcm9zLAoJICBzaWduaWZpY2FudCBvdmVyYWxsIGltcHJvdmVtZW50CgkqIHhtbGxpbnQuYzogYWRkZWQgSS9PIHRlc3QgdG8geG1sbGludAoJKiB0ZXN0U0FYLmM6IGFkZGVkIGEgc3BlZWQgdGVzdAoJKiBkb2MvKiA6IHVwZGF0ZWQvcmVnZW5lcmF0ZWQKClNhdCBBcHIgIDggMTQ6NTQ6NTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgdXJpLmggcGFyc2VySW50ZXJuYWxzLmg6IGNvc21ldGljIGNoYW5nZXMgZnJvbQoJICAiVGltdXIgSS4gQmFrZXlldiIgPHRpbXVyQGJhdC5ydT4sIGluY2x1ZGluZyBtYWtpbmcgCgkgIHhtbENyZWF0ZVVSSSgpIHB1YmxpYwoKRnJpIEFwciAgNyAxODozNTowMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uW2NoXSBwYXJzZXIuYzogY2xlYW5lIHVwIHRoZSB4bWxQYXJzZXJJbnB1dEJ1ZmZlciBtZXNzCgkgIGFuZCB0aGUgY29kZSBhdCB0aGUgc2FtZSB0aW1lLiBBZGRlZCBhIGNsZWFuIG1lY2hhbmlzbSBmb3IKCSAgb3ZlcmxvYWQgb3IgYWRkZWQgaW5wdXQgbWV0aG9kczogeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcygpCgkqIHRyZWUuYzogZml4ZWQgeG1sUHJldlNpYmxpbmcgYW5kIHhtbE5leHRTaWJsaW5nIHBlciAKCSAgQ2hyaXN0b3BoZSBMZSBHYWwgKENocmlzdG9waGUuTGUtR2FsQGltYWcuZnIpIGlucHV0CgkqIFRPRE86IHVwZGF0ZWQKCSogZG9jLyogOiB1cGRhdGVkL3JlZ2VuZXJhdGVkCgkqIGRvYy9NYWtlZmlsZS5hbTogdHdlYWtzIHRvIGF2b2lkIHByb2JsZW0gd2l0aCBsaWJ4bWwgbGluayBpbiB0aGUKCSAgc291cmNlIGRpcgoKV2VkIEFwciAgNSAyMToxMTozNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFVSSS5jOiB5ZXQgYW5vdGhlciBmb3Jnb3R0ZW4gY29tbWl0LCBJIHNob3VsZCBnZXQgc29tZSBzbGVlcCAhCgpXZWQgQXByICA1IDIwOjM2OjQ2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxsaW50LmM6IGZvcmdvdCB0byBjb21taXQgdGhpcyB0b28gPwoKV2VkIEFwciAgNSAxNjoyMjo0NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sdmVyc2lvbi5oLmluIDogZm9yZ290IHRvIGNvbW1pdCB0aGlzIHByZXZpb3VzbHkKCk1vbiBBcHIgIDMgMjE6NDc6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGxpYnhtbC0yLjAuMCB2ZXJzaW9uIGxvb2tzIE9rIHNvIGZhcgoJKiBSRUFETUUgVE9ETzogdXBkYXRlZCBmb3IgcmVsZWFzZQoJKiB1cmkuYyB1cmkuaDogYWRkZWQgYXV0aG9yaXR5IHBhcnNpbmcvc2F2aW5nCgkqIHVyaS5jIHRlc3RVUkkuYyBNYWtlZmlsZS5hbTogbW92ZWQgdGhlIHRlc3RpbmcgY29kZSB0byB0ZXN0VVJJLmMKCSogeG1sdmVyc2lvbi5oLmluIGNvbmZpZ3VyZS5pbiBuYW5vZnRwLltjaF0gbmFub2h0dHAuW2NoXSBlbmNvZGluZy5oCgkgIGRlYnVnWE1MLltjaF0geHBhdGguW2NoXSB4bWxJTy5jIHRlc3Rlci5jIHRlc3RYUGF0aC5jIHRlc3RIVE1MLmMKCSAgdHJlZS5jIEhUTUx0cmVlLmMgSFRNTHBhcnNlci5jIHRyZWUuYyB0cmVlLmggcGFyc2VyLmMKCSAgTWFrZWZpbGUuYW0gOiBhZGRlZCBjb21waWxlLXRpbWUgY3VzdG9taXphdGlvbiBvZiBsaWJ4bWwKCSAgLS13aXRoLWZ0cCAtLXdpdGgtaHR0cCAtLXdpdGgtaHRtbCAtLXdpdGgteHBhdGggLS13aXRoLWRlYnVnCgkgIC0td2l0aC1tZW0tZGVidWcKCSogKi5bY2hdIGF1dG9jb25mLnNoIDogbW92ZWQgdG8gYW4gYWJzb2x1dGUgYWRyZXNzaW5nIG9mIGluY2x1ZGVzIDogCgkgICNpbmNsdWRlIDxsaWJ4bWwveHh4Lmg+IEkgaG9wZSBpdCB3b24ndCBicmVhayB0b28gbXVjaCBzdHVmZgoJICBhbmQgd2lsbCBiZSBtYW5hZ2VhYmxlIGluIHRoZSBmdXR1cmUuLi4KCSogeG1sbGludC5jIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluIDogcmVuYW1lZCB0ZXN0ZXIuYyB0byB4bWxsaW50LmMKCSAgYW5kIGFkZGVkIHhtbGxpbnQgdG8gdGhlIGluc3RhbGxlZCBwcm9ncmFtcwoJKiB1cmkuaDogYWRkZWQgeG1sRnJlZVVSSSgpCgpGcmkgTWFyIDI0IDE0OjM1OjIxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jIHVyaS5oOiBmaW5pc2hlZCB0aGUgZXNjYXBpbmcgaGFuZGxpbmcsIHRoZSBiYXNlIHN1cHBvcnQKCSAgYW5kIHRoZSBVUkkgcGF0aCBub3JtYWxpemF0aW9uLiBMb29rcyBnb29kIGp1c3QgbGFja3MgdGhlCgkgIGF1dGhvcml0eSBjb250ZW50IHBhcnNpbmcgY29kZS4KCSogTWFrZWZpbGUuYW06IGFkZGVkIGluc3RydWN0aW9ucyB0byBnZW5lcmF0ZSB0ZXN0VVJJCgkqIFRPRE86IHVwZGF0ZWQKCSogZG9jL3htbC5odG1sLCBkb2Mvc21hbGxmb290b25seS5naWYgZG9jL3czYy5wbmc6IHVwZGF0ZWQsCgkgIGFkZGVkIGxpbmtzIGFuZCBpY29ucyBmb3IgVzNDIGFuZCBHbm9tZQoKTW9uIE1hciAyMCAxNDowNToyNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuW2NoXSA6IHNlZW1zIEkgZm9yZ290IHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgZmlsZXMgaW4KCSAgdGhlIGxhc3QgY29tbWl0IDotKQoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYW5kIHVwbG9hZGVkIHRoZSBkb2NzCgpNb24gTWFyIDIwIDEyOjMzOjUxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3QvdmFsaWQvZHRkcy94aHRtbCo6IHJlbW92ZWQgUkNTIGluZm9zIChwYWluIHdpdGggQ1ZTKQoJKiBUT0RPOiB1cGRhdGVkCgkqIHhtbG1lbW9yeS5bY2hdIDogYWRkZWQgeG1sTWVtU2V0dXAoKSBhbmQgeG1sTWVtR2V0KCkgdG8gb3ZlcnJpZGUKCSAgbGlieG1sIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbiB3aXRoIGFub3RoZXIgc2V0IChsaWtlIGdtYWxsb2MvCgkgIGdmcmVlKS4KCSogTWFrZWZpbGUuYW0sIHVyaS5jLCB1cmkuaDogYWRkZWQgYSBzZXQgb2YgZnVuY3Rpb25zIHRvIGRvCgkgIGV4YWN0IChsaXR0ZXJhbHkgY29waWVkIGZyb20gdGhlIFJGQyAyMzk2IHByb2R1Y3Rpb25zKSBwYXJzaW5nCgkgIGFuZCBoYW5kbGluZyBvZiBVUkkuIFdpbGwgYmUgbmVlZGVkIGZvciBYTGluaywgb25lIFhNTCBXRkMsIAoJICBYTUwgQmFzZSBhbmQgcmV1c2VkIGluIHRoZSBuYW5vW2Z0cC9odHRwXSBtb2R1bGVzLiBTdGlsbCB3b3JrCgkgIHRvIGJlIGRvbmUuCgpUdWUgTWFyIDE0IDIwOjUyOjM1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgbGlieG1sLnNwZWMuaW4gOiBsaWJ4bWwyCgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jIHBhZ2UsIHJlYnVpbHQgdGhlIGRvY3MKClR1ZSBNYXIgMTQgMTk6MTE6MjkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWxsOiB0YWdnZWQgTElCX1hNTF8xX1gKCSogKi5jICouaCA6IHVwZGF0ZWQgZnJvbSBXM0MgQ1ZTIHRyZWUKCSogY29uZmlndXJlLmluIDogMi4wLjAtYmV0YQoJKiBsaWJ4bWwuc3BlYy5pbiA6IGxpYnhtbDIgcGFja2FnZSBuYW0KCSogcmVzdWx0LyogOiBuZXcgdmVyc2lvbiBvZiB0aGUgdGVzdHMgb3V0cHV0CgpNb24gTWFyICA2IDA5OjM0OjUyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCwgZG9jL3VwZGF0ZS5odG1sOiB1cGRhdGVkIGRvY3MsIDEuOC43CgpTYXQgTWFyICA0IDE2OjE0OjQyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoJKiBwYXJzZXIuYzogZmluYWwgcGF0Y2ggb24gIzY3NjYKCSogdmFsaWQuYzogc21hbGwgcGF0Y2ggb24gdmFsaWRpdHkgY2hlY2tzLgoKU2F0IE1hciAgNCAxMjozODo0MSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvdXBncmFkZS5odG1sOiBpbnN0cnVjdGlvbiBvbiBob3cgdG8gdXBncmFkZSBmcm9tIDEueCB0byAyLngKCSAgYWRkZWQKCSogcGFyc2VyLmM6IGFkZGluZyB4bWxLZWVwQmxhbmtzRGVmYXVsdCgpIGFzIGEgd2F5IHRvIG1hbmFnZQoJICBjb21wYXRpYmlsaXR5IHcuci50LiBYTUwgc3BlYyBhbmQgZXhpc3RpbmcgY29kZS4KClRodSBNYXIgIDIgMDQ6NDU6MTUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHNlZW1zIGEgYmV0dGVyIHNvbHV0aW9uIHRvIDxhPiAgIDwvYT4gZXhpc3RzLAoJICB3aWxsIHRyeSBpdCBmb3IgYSB3aGlsZQoKVGh1IE1hciAgMiAwMjoyNjoxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogdHJpZWQgdG8gcmVtb3ZlIHRoZSA8YT4gICA8L2E+IGdlbmVyYXRpbmcgPGEvPgoJICB0aGlzIGlzIGhhcmQuIExlZnQgYSBmbGFnIGZvciB0aGF0IHB1cnBvc2UuIEZpeGVkIGJ1ZyAjNjc2NgoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIDEuOC43IG5vdCByZWxlYXNlZCwgZHVlIHRvIHByZXZpb3VzCgkgIHByb2JsZW0KClRodSBNYXIgIDIgMDM6MDM6NTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogYXBwbGllZCBzZWNvbmQgcGF0Y2ggZnJvbSBQYXVsIER1Qm9pcwoKVHVlIEZlYiAyOSAyMzo1NToxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiBhcHBsaWVkIHBhdGNoIGZyb20gUGF1bCBEdUJvaXMKClRodSBGZWIgIDMgMTY6MzY6MzkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBkbyBhIGJpdCBvZiBidWZmZXJpemF0aW9uIGluIHB1c2ggbW9kZS4KClRodSBGZWIgIDMgMTU6NTk6MzcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgdHJlZS5jIEhUTUx0cmVlLltjaF0gZGVidWdYTUwuYyB4cGF0aC5jOiBGaXhlZAoJICBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiB2YXJpb3VzIHBsYXRmb3Jtcy4KCSogcGFyc2VyLmM6IEZpeGVkICM1MjgxIHZhbGlkaXR5IGVycm9yIGNhbGxiYWNrcyBhcmUgbm93IGRlc2FjdGl2ZWQKCSAgYnkgZGVmYXVsdCBpZiBub3QgdmFsaWRhdGluZy4KClRodSBGZWIgIDMgMTM6NDY6MTQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jLCB3aW4zMmNvbmZpZy5oLmluOiBwYXRjaGVzIHRvIGNvbXBpbGUgb24gV0lOMzIKCldlZCBGZWIgIDIgMjI6NTE6MTYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBzbnByaW50Zi9zcHJpbnRmIHBhdGNoIGNvdXJ0ZXN5IEdlb3JnZSBLYXRzaXJlbG9zCgkgIDxna2F0c2lAY3MudG9yb250by5lZHU+CgpNb24gSmFuIDMxIDE4OjU4OjIxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBGaXhlZCAnIycgYW5kICc/JyBzdHJpcHBpbmcgd2hlbgoJICBwcm9jZXNzaW5nIFVSTHMKCk1vbiBKYW4gMzEgMTQ6MjU6NTcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBidWcgZml4ZXMsIGludGVncmF0aW9uIGluIHJwbWZpbmQsIGFkZGVkCgkgIHhtbE5hbm9GVFBVcGRhdGVVUkwgZm9yIHBlcnNpc3RlbnQgY29udHJvbCBjb25uZWN0aW9ucy4KCSogY29uZmlndXJlLmluOiAxLjguNgoKVGh1IEphbiAyNyAxNzo1MjoyOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5bY2hdLCBuYW5vZnRwLltjaF06IGNsZWFudXAsIGFkZGVkIHByb3h5IHN1cHBvcnQKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sU2F2ZU5vRW1wdHlUYWdzCgoyMDAwLTAxLTI5ICBKYW1lcyBIZW5zdHJpZGdlIDxqYW1lc0BkYWEuY29tLmF1PgoKCSogbmFub2Z0cC5jOiBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBJUFBST1RPX1RDUC4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBuYW5vZnRwLltjaF0gdG8gdGhlIGJ1aWxkLgoKV2VkIEphbiAyNiAxODoxNDo1NSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLltjaF06IGNsZWFudXAsIGNvbW1lbnRzLCBBUEkKCSogZGVidWdYTUwuYyA6IGZpeGVkIGEgYnVnIGluIHRoZSBjYXQgY29tbWFuZAoJKiBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIGRvY3MKCldlZCBKYW4gMjYgMTY6NTI6NTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdIHBhcnNlci5jIHhtbElPLltjaF06IGFkZGVkIGEgTmFubyBGVFAgaW1wbGVtZW50YXRpb24KCSogZGVidWdYTUwuYyA6IGZpeGVkIGEgYnVnIGluIHRoZSBjYXQgY29tbWFuZAoJKiB2YWxpZC5jOiBmaXhpbmcgc29tZSBzbWFsbCBwcm9icwoJKiBsaWJ4bWwuc3BlYy5pbjogZ2V0IHJpZCBvZiB0aGUgU05BUCBzdWZmaXgKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHRoZSBzdGF0dXMKCk1vbiBKYW4gMjQgMTQ6MzE6MDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy5pbjogeG1sLWNvbmZpZyAtLXZlcnNpb24gdG8ganVzdCByZXR1cm4gdGhlCgkgIHZlcnNpb24gbnVtYmVyCgkqIHhwYXRoLmM6IHNvbWUgY2xlYW51cCB3LnIudC4gYXhpcyB3aGVuIHRoZSBjdXJyZW50IG5vZGUgaXMKCSAgYW4gYXR0cmlidXRlLgoJKiBUT0RPOiB1cGRhdGVkCgpUdWUgSmFuIDE4IDE4OjQ2OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgZm9yIGxpYnhtbC0xLjguNQoJKiBkb2MvKiByZWNvbXBpbGVkIHRoZSBkb2N1bWVudGF0aW9uCgoyMDAwLTAxLTE3ICBKb2R5IEdvbGRiZXJnIDxqZ29sZGJlcmdAaG9tZS5jb20+CgoJKiBjb25maWd1cmUuaW4gOiBXQVJOSU5HIGF1dG9jb25mIHN1YnRsZXR5IGFsZXJ0IDoKCSAgVXNlIEFDX0NIRUNLX0hFQURFUlMgcmF0aGVyIHRoYW4gQUNfQ0hFQ0tfSEVBREVSCgkgIHdoZW4gbG9va2luZyBmb3IgemxpYi5oIHNvIHRoYXQgSEFWRV9aTElCX0ggaXMgZGVmaW5lZC4KCSogY29uZmlnLmguaW4gOiBIYXZlIGEgI3VuZGVmIGZvciBIQVZFX1pMSUJfSCBzbyB0aGF0IGl0IHdpbGwKCSAgZ2V0IGRlZmluZWQgYnkgQUNfQ0hFQ0tfSEVBREVSUy4KCk1vbiBKYW4gMTcgMTc6MDQ6MTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCBhIGhpZGVvdXMgYnVnIGluIHhtbEdldFByb3AoKSB0aGFua3MgdG8KCSAgUnVuZS5EanVyaHV1c0BmYXN0Lm5vCgpTYXQgSmFuIDE1IDE1OjA5OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFRPRE86IHVwZGF0ZWQKCSogdHJlZS5jLCBwYXJzZXIuYzogbWFkZSBzdXJlIHRoYXQgb25seSBtZW1vcnkgYWxsb2MgcHJvYmxlbXMKCSAgYW5kIGludGVybmFsIHBhcnNlciBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gd3JpdGUgdG8gc3Rkb3V0IG9yCgkgIHN0ZGVyci4KClRodSBKYW4gMTMgMTE6NDk6MTEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogcmVzdG9yZWQgeG1sTmV3R2xvYmFsTnMgc2luY2UgdGhpcyBzZWVtcyB1c2VkIGJ5CgkgIGEgbG90IG9mIGV4aXN0aW5nIGNvZGUgOi0oLCBmaXhlZCBhIGJ1ZyBpbiB4bWxOZXdOcwoJKiBuYW5vaHR0cC5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBJTkNMVURFX1dJTlNPQ0sKCSogSFRNTHBhcnNlci5jLCBwYXJzZXIuYywgZW50aXRpZXMuYywgdmFsaWQuYyA6IHJlbW92ZWQgYWxsIGNhbGxzCgkgIHRvIGV4aXQoKSBmcm9tIHRoZSBsaWJyYXJ5IGNvZGUuCgkqIHhwYXRoLmMsIHBhcnNlci5jOiByZW1vdmVkIGJ1Z3Mgb3IgdW51c2VkIGNvZGUgZGV0ZWN0ZWQgYnkgCgkgIFdpbmRvd3MgY29tcGlsZXJzCgkqIHBhcnNlci5jOiBzdGFydGVkIGFkZGluZyBpbnRlcmZhY2VzIGZvciBwYXJzaW5nIHdlbGwgYmFsYW5jZWQKCSAgWE1MIGZyYWdtZW50cwoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAxLjguNAoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKClN1biBKYW4gIDkgMjM6MDM6MjAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sTmV3RG9jRnJhZ21lbnQoKSBmb3IgRE9NCgkqIHRlc3RIVE1MLmM6IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgpXZWQgSmFuICA1IDE3OjI5OjE3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsZCB0aGUgZG9jcwoKV2VkIEphbiAgNSAxNzowODo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhY2NvbmZpZy5oOiByZWFkbGluZSBhbmQgaGlzdG9yeSBwYXRjaAoJKiB2YWxpZC5bY2hdOiBhZGRlZCB4bWxSZW1vdmVJRCgpIGFuZCB4bWxSZW1vdmVSZWYoKQoJKiB0cmVlLmM6IGFkZGVkIGNoZWNrIGFuZCBoYW5kbGluZyB3aGVuIHBvc3NpYmx5IHJlbW92aW5nIGFuIElECgkqIHRyZWUuYywgSFRNTHBhcnNlci5oLCBIVE1MdHJlZS5oOiBmaXhlZCBlbnRpdGllcyBwYXJzaW5nCgkgICAgIGFuZCBzYXZpbmcuCgkqIHRlc3QvSFRNTC9lbnRpdGllcy5odG1sIHJlc3VsdC9IVE1ML2VudGl0aWVzLmh0bWwqIDogdGVzdCBmb3IKCSAgICAgdmFyaW91cyBlbnRpdGllcyByZWZlcmVuY2UgY2FzZXMKCSogcmVzdWx0L0hUTUwvKiA6IGFzIGEgcmVzdWx0IG91dHB1dCBvZiBzb21lIHRlc3RjYXNlIGhhdmUKCSAgICAgY2hhbmdlZAoJKiBIVE1McGFyc2VyLmMsIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgcHVzaCBtb2RlIHRyaWdnZXJlZAoJICAgICBieSBwcmV2aW91cyBleGFtcGxlLiBhZGRlZCB4bWxQYXJzZVRyeU9yRmluaXNoKCkuCgkqIHhwYXRoLmggdHJlZS5oIHBhcnNlci5oIHZhbGlkLmggeG1sSU8uaCB4bGluay5oIGVuY29kaW5nLmgKCSAgZW50aXRpZXMuaCBkZWJ1Z1hNTC5oIEhUTUxwYXJzZXIuaDogY2hhbmdlZCB0aGUgd2F5IHN0cnVjdCBhcmUgCgkgIGRlY2xhcmVkIHRvIGFsbG93IGd0ay1kb2MgdG8gZXhwb3NlIHRob3NlCgkqIHBhcnNlci5jOiBjbG9zZWQgYnVnICM0OTYwICAKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBBcHBsaWVkIHBhdGNoIGZyb20gCgkgIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4gZm9yIGJldHRlciB6bGliCgkgIGFuZCBtYXRoL3NvY2tldCBsaWJzIGRldGVjdGlvbgoKTW9uIEphbiAgMyAxODoyOTo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOiBsaW5rIHRlc3RlciBhZ2FpbnN0IHJlYWRsaW5lCgkqIGRvYy94bWwuaHRtbCBkb2MvKi8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uIHBhZ2VzCgpNb24gSmFuICAzIDExOjU4OjA1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sUmVtb3ZlUHJvcAoJKiB3aW4zMmNvbmZpZy5oLmluIG5hbm9odHRwLmM6IGF2b2lkIGluY2x1ZGluZyB0aGUgV2luZG93cwoJICAgIHNvY2tldCBzdHVmZiBpbiBldmVyeSBDIGZpbGVzCgkqIHBhcnNlci5jOiByZW1vdmVkIGFuIGluZGV0ZXJtaW5hdGlvbiB4bUxEZWNsL1BJKHhtbC4uLikgaW4KCSAgICB0aGUgWG1MIHBhcnNlcihzKQoJKiB0ZXN0L25zNCByZXN1bHQvbnM0IGV0Yy4uLjogYWRkZWQgdGVzdCBjYXNlIGZvciBwcmV2aW91cyBwcm9iICAgIAoJKiB0cmVlLmM6IHhtbE5ld05zIHdhc24ndCBjaGVja2luZyBmb3IgZG91YmxlIGRlZmluaXRpb24KCSogTWFrZWZpbGUuaW46IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGRpc3QtaG9vayBkdXBsaWNhdGVzCgkqIHBhcnNlci5baGNdLCB4bWxJTy5jOiBmaXhlZCB0aGUgbG9hZGluZyBvZiBleHRlcm5hbCBlbnRpdGllcwoJICAgIEFQSXMsIG5vdyB4bWxMb2FkRXh0ZXJuYWxFbnRpdHkoKSBpcyB1c2VkIGV2ZXJ5d2hlcmUgYW5kCgkgICAgc2V0dGluZyB1cCBhbiBhcHAgc3BlY2lmaWMgZnJvbnQtZW5kIHVzaW5nIHRoZSAKCSogU0FYLmMgcGFyc2VyLmM6IHNvbWUgZml4ZXMsIG5vdyB0aGUgeGh0bWwgc3BlYyB2YWxpZGF0ZXMKCSAgICB3aXRoIHRoZSB4aHRtbCBEVEQuCgkqIGVycm9yLmM6IGZpeGVkIGNyYXNoZXMgaW4gY2FzZSBvZiBubyBpbnB1dCBzdHJlYW0gICAgCgkqIHRlc3QvdmFsaWQvW2R0ZHMvXS94aHRtbCogOiBhZGRlZCB0aGUgeGh0bWwgc3BlYyBhbmQgZHRkcwoJICAgIHRvIHRoZSB2YWxpZGF0aW9uIHRlc3RzIGFuZCByZXN1bHRzCgpXZWQgRGVjIDI5IDE1OjI5OjUyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSB0ZXN0SFRNTC5jOiBhZGRlZCBwdXNoIG1vZGUgZm9yIHRoZSBIVE1MIHBhcnNlcgoJICB0b28gaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCkgYW5kIGh0bWxQYXJzZUNodW5rKCkKCSogcGFyc2VyLmM6IGEgYml0IG9mIGNsZWFudXAuCgkqIFNBWC5jLCBIVE1McGFyc2VyLmM6IHNvbWUgYXR0cmlidXRlcyBtYXkgbm90IGhhdmUgdmFsdWVzIChjb250cmFyeQoJICB0byBYTUwpIHJlbW92ZWQgdGhlIGxhc3QgbWVtIGxlYWsga25vd24KCSogSFRNTHRyZWUuYzogb3V0cHV0IG1lc3NhZ2UgY2xlYW51cAoJKiB4bWxtZW1vcnkuYzogZGlzcGxheSBjb250ZW50IGluZm8gYWJvdXQgbWVtb3J5IGJsb2NrcwoJKiByZXN1bHQvSFRNTC93aXJlZC4qIDogbWlzc2luZyBhdHQgdmFsdWUgd2FybmluZyBjaGFuZ2UKClR1ZSBEZWMgMjggMTc6NDI6NDEgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpUdWUgRGVjIDI4IDE4OjQ0OjIyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5oOiBQdXNoIHBhcnNlciBmb3IgWE1MLAoJICAgICBzZWVtcyB0byB3b3JrIGZpbmUgbm93CgkqIHRlc3Rlci5jIGRlYnVnWE1MLltjaF06IEFkZGVkIGFuIFhNTCBzaGVsbCBkZWJ1ZyBmYWNpbGl0eSBhbmQKCSAgICAgLS1wdXNoIGZvciBwdXNoIHRlc3RpbmcKCSogeHBhdGguW2NoXSA6IGNsZWFuZWQgdXAgZm9yIFNoZWxsIHVzYWdlLCBhZGRlZCBtaXNzaW5nIEFQSXMKCSogdGVzdFNBWC5jOiBhZGRlZCAtLXB1c2gKCSogSFRNTHRyZWUuW2NoXSB0cmVlLltjaF06IG5ldyBmdW5jdGlvbnMgZm9yIGR1bXBpbmcgcGFydHMgb2YgdGhlCgkgICAgIHN1YnRyZWUKCSogeG1sSU8uW2NoXSA6IGVucmljaGVkIEFQSSArIGZpeGVzIGZvciBwdXNoIG1vZGUgICAgIAoJKiBlbnRpdGllcy5bY2hdOiBhZGRlZCB0aGUgZW50aXR5IGNvbnRlbnQgbGVuZ3RoIHRvIHRoZSBzdHJ1Y3QuCgkqIHhtbG1lbW9yeS5bY2hdOiBuZXcgQVBJIHRvIHNob3cgdGhlIGxhc3QgZW50cmllcyBmb3IgdGhlIHNoZWxsCgkqIHZhbGlkLmM6IGFkZGVkIHJlcXVpcmVkIGF0dHJpYnV0ZSB0ZXN0aW5nCgkqIFNBWC5jOiB0aGUgY2RhdGEgY2FsbGJhY2sgbm93IG1lcmdlIGNvbnRpZ3VvdXMgZnJhZ21lbnRzCgkqIEhUTUxwYXJzZXIuYzogY2xlYW51cCBvZiBzb21lIG1hY3JvcwoKV2VkIERlYyAyMiAxMjoyMDo1MyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4IGZvciBQSXMgbmFtZSBzdGFydGluZyB3aXRoIHhtbAoJKiB0cmVlLmM6IGZpeGVkIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aCB8fCBhbmQgJiYgb3BzCgkqICouYywgY29uZmlndXJlLmluIHdpbjMyY29uZmlnLmguaW4gOiBnZW5lcmF0ZSB3aW4zMmNvbmZpZy5oIGZvcgoJICB0aG9zZSBvbiB0aGUgT3RoZXIgU2lkZSAhCgpUdWUgRGVjIDIxIDE3OjIyOjE3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHN0dXBpZCA9IHZzLiA9PSBidWcgOi0oCgkqIGRvYy9nbm9tZS14bWwuc2dtbDogcy9nbGFkZS94bWwvCgpUdWUgRGVjIDIxIDE0OjI5OjM0IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVnIGZpeCByZWxlYXNlIDEuOC4yCgkqIGRlYnVnWE1MLmggbmFub2h0dHAuaCB4bWwtZXJyb3IuaCB4bWxtZW1vcnkuaCB4cGF0aC5oIDogCgkgIEhvcGVmdWxseSB0aGUgZW5kIG9mIHRoYXQgc2lsbHkgQysrIGluY2x1ZGUgcHJvYmxlbQoJKiB0cmVlLltjaF06IEFkZGVkIGEgZmV3IGZ1bmN0aW9uczogeG1sUmVwbGFjZU5vZGUsIHhtbEFkZFByZXZTaWJsaW5nLAoJICAgICAgeG1sQWRkTmV4dFNpYmxpbmcsIHhtbE5vZGVTZXROYW1lIGFuZCB4bWxEb2NTZXRSb290RWxlbWVudAoJKiBIVE1McGFyc2VyLmMgSFRNTHBhcnNlci5oIEhUTUx0cmVlLmM6IFdoZW4gc2F2aW5nIEhUTUwgdHJ5IHRvIGF2b2lkIAoJICAgICAgdHJvdWJsZXMgd2l0aCBhdXRvY2xvc2VkIGVsZW1lbnRzIHdoZW4gdGhlIHN0cmVlIHNoYXBlIGRvZXNuJ3QKCSAgICAgIGZvbGxvdyB0aGUgRHREIHNwZWNzLiBBZGRlZCBodG1sSXNBdXRvQ2xvc2VkKCkgYW5kCgkgICAgICBodG1sQXV0b0Nsb3NlVGFnKCkKCSogcmVzdWx0L0hUTUwvKi5odG0qOiBVcGRhdGVkIHRoZSBIVE1MIGV4YW1wbGVzIHJlZ3Jlc3Npb24gdGVzdHMgb3V0cHV0CgkqIFNBWC5jIHRyZWUuYzogZml4ZWQgYnVnIG9uIGRlZmF1bHRpbmcgbmFtZXNwYWNlcyBvbiBhdHRyaWJ1dGVzCgkqIGRlYnVnWE1MLmM6IGZpeGVkIGEgYnVnIG9uIHByaW50aW5nIGRlZmF1bHQgbmFtZXNwYWNlcy4KCSogSFRNTHRyZWUuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gb3V0cHV0aW5nIFhNTCBwYXJzZWQgZG9jcyBhcyBIVE1MCgpNb24gRGVjIDIwIDE2OjIwOjU1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHJlc3VsdC9IVE1MLyouaHRtW2xdIDogdXBkYXRlZCB0aGUgSFRNTCByZWdyZXNzaW9uIHRlc3RzIGFjY29yZGluZwoJICB0byB0aGUgbmV3IG91dHB1dAoJKiB4cGF0aC5oIHhtbC1lcnJvci5oIHZhbGlkLmggdHJlZS5oIHBhcnNlci5oIGVudGl0aWVzLmggU0FYLmgKCSAgSFRNTHRyZWUuaCB0cmVlLmMgZW50aXRpZXMuYzogaGVhZGVycyB0d2Vha2luZ3MgdG8gYXZvaWQgYSBuYXN0eQoJICBwcm9ibGVtIGR1ZSB0byBpbnRlcm1peCBvZiBleHRlcm4gIkMiIHsgLi4uIH0gZGVjbGFyYXRpb25zIGZvciBDKysKCSAgYW5kIHJlY3Vyc2l2ZSBpbmNsdWRlcyBpbiB0aGUgaGVhZGVycwoKMTk5OS0xMi0yMCAgQ2hyaXMgTGFoZXkgIDxjbGFoZXlAdW1pY2guZWR1PgoKCSogSFRNTHRyZWUuYzogTWFkZSBpdCBzbyB0aGF0IGh0bWwgbm9kZXMgd2l0aCBhIHNpbmdsZSBjaGlsZCBkbwoJbm90IGluc2VydCBhIGNhcnJpYWdlIHJldHVybiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaWxkIG5vZGUuCgpTYXQgRGVjIDE4IDE2OjA3OjAzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVnIGZpeCByZWxlYXNlIDEuOC4xCgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzQzNDQKCSogeHBhdGguaCB4bWwtZXJyb3IuaCB4bGluay5oIG5hbm9odHRwLmggZGVidWdYTUwuaCBTQVguaCBIVE1McGFyc2VyLmgKCSAgYWRkZWQgdGhlIGdsdWUgdG8gYXZvaWQgQysrIHByb2JsZW1zCgkqIGRvYy8qIDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KClRodSBEZWMgMTYgMTY6MTk6MjkgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBpbnRyb2R1Y2VkIGluIDEuOC4wIGFuZCBicmVha2luZyBkZWZhdWx0CgkgIG5hbWVzcGFjZSByZWNvZ25pdGlvbiwgYW5kIERpYSBhcyBhIHJlc3VsIDotKAoJKiBlbmNvZGluZy5jOiBjbG9zZWQgYnVnICMzOTUwCgpXZWQgRGVjIDE1IDE5OjIyOjIzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLmM6IGRlYnVnZ2luZyBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbiwgZXhjZXB0IFVSSSBleHBhbnNpb24KCSAgc3R1ZmYgdGhpcyBzaG91bGQgYmUgZml4ZWQgbm93CgkqIHBhcnNlckludGVybmFscy5oOiBmaXhlZCBhIGJ1ZyBpbiBJU19CQVNFQ0hBUiByZXBvcnRlZCBieQoJICBDYXJsIE55Z2FyZCA8Y255Z2FyZEBiZWxsYXRsYW50aWMubmV0PgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1wb3N0dmFsaWQsIGNsZWFuaW5nIG9mIHRoZSBjb2RlCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sRG9jR2V0Um9vdEVsZW1lbnQoKQoKVHVlIERlYyAxNCAyMDozMDozNCBQU1QgMTk5OSBSYW1pcm8gRXN0cnVnbyA8cmFtaXJvQGVhemVsLmNvbT4KCgkqIFNBWC5oLCB0cmVlLmggOiBjaGFuZ2VkICduYW1lc3BhY2UnIHRvICduYW1lU3BhY2UnIHRvIHdvcmthcm91bmQKCWMrKyBsb3NhZ2UuCgpTdW4gRGVjIDEyIDEzOjA4OjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVtcGVkIHRvIDEuOC4wCgkqIHhsaW5rLltjaF0sIE1ha2VmaWxlLmFtIDogYWRkZWQgZnJhbWV3b3JrIGZvciBsaW5rIGRldGVjdGlvbgoJKiBwYXJzZXIuaDogYWRkZWQgbmJDaGFycyB0byBwYXJzZXIgY29udGV4dCwgbmVlZGVkIGZvciBjbGVhbnVwLgoJKiB4bWxtZW1vcnkuYzogcmVtb3ZlZCBhIG5hc3R5IGJ1ZyB3aGVuIG91dCBvZiBtZW0KCSogdmFsaWQuW2NoXTogYWRkaW5nIG5hbWVzcGFjZSBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgZGVjbAoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1kZWJ1Z2VudCBvcHRpb24KCSogZGVidWdYTUwuW2NoXTogYWRkZWQgeG1sRGVidWdEdW1wRW50aXRpZXMoKQoJKiBwYXJzZXIuYzogY2xlYW51cCwgYXZvaWRpbmcgdXNlIG9mIENVUl9QVFIgbGlrZSBwbGFndWUsIHVzaW5nCgkgIGJ1ZmZlcnMgaW5zdGVhZCwgdGhpcyB3YXMgcmVhbGx5IG5lZWRlZCwgdmFsaWRhdGlvbiB3YXMgYnJlYWtpbmcKCSAgaW4gc3RyYW5nZSB3YXlzIGR1ZSB0byB0aGF0LiBBZGRlZCB4bWxQYXJzZVN0cmluZ1BFUmVmZXJlbmNlKCkKCSAgYW5kIG90aGVyIHBhcnNpbmcgZnJvbSBzdHJpbmdzIGZ1bmN0aW9ucy4gRW50aXRpZXMgcHJvY2Vzc2luZwoJICBtb2RpZmllZCBhZ2FpbiwgYnV0IFBFUmVmIGFyZSBzdGlsbCBub3QgaGFuZGxlZCBjb3JyZWNseSBidXQKCSAgdW5sZXNzIHlvdSdyZSBFdmUgTWFsbGVyIHlvdSB3b24ndCBub3RpY2UgOi0pCgkqIEhUTUxwYXJzZXIuYzogbGFyZ2UgY2hhbmdlcyB0b3dhcmQgcmVsaWFiaWxpdHksIGFuZCBzd2l0Y2hlZCB0bwoJICBsb3dlcmNhc2UgaW50ZXJuYWwgdGFncywgWEhUTUwgaXMgbG93ZXJjYXNlLCBzbyBpdCB3aWxsIGhlbHAKCSAgdGhhdCBvdXRwdXQgaXMgY2xvc2VyIHRvIG5leHQgdmVyc2lvbi4KCSogZG9jLyogOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiwgaXQgaXMgbm93IGhvc3RlZCBhdAoJICBodHRwOi8veG1sc29mdC5vcmcvIChzYW1lIGJpdHMgSSBqdXN0IGJvdWdodCB0aGUgZG9tYWluIDotKQoKRnJpIERlYyAgMyAxMzo0NjozMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguaCwgU0FYLmMsIG1ha2VmaWxlLmFtOiBhZGRlZCBTQVguaCBtb3N0bHkgdXNlZnVsIGZvciB0aGUKCSAgICAgICAgIGRvYyBnZW5lcmF0aW9uCgkqIHBhcnNlci5jOiBmaXhlZCBidWdzICMzOTA4IGFuZCAjMzkzNyBhbmQgYSBtZW1vcnkgbGVhawoJICAgICAgICAgaW4gdGhlIFNBWCBBUEkKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYyBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGFwcGVhcnMgaW4gdGhlCgkgICAgICAgICBIVE1MIGZpbGVzCgpXZWQgRGVjICAxIDEwOjI3OjQ3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSBIVE1MdHJlZS5jLCBkZWJ1Z1hNTC5jLCBjb25maWd1cmUuaW4sIHhtbC1jb25maWcuaW46CgkgICAgIGFkZGVkIHRoZSBwYXRjaCBmcm9tIENhcmwgTnlnYXJkIDxjbnlnYXJkQGJlbGxhdGxhbnRpYy5uZXQ+CgkgICAgIHdoaWNoIGFsbG93IGltcHJlc3NpdmUgc3BlZWQgaW1wcm92ZW1lbnQgb24gZGF0YXNldCB3aXRoCgkgICAgIGxhcmdlIHRleHQgcGllY2VzLCBidXQgYXQgdGhlIGNvc3Qgb2YgYnJva2VuIGJpbmFyeQoJICAgICBjb21wYXRpYmlsaXR5IGFuZCBzbGlnaHRseSBiaWdnZXIgbWVtb3J5IHVzYWdlLgoJICAgICBDb25maWd1cmUgd2l0aCAtLXdpdGgtYnVmZmVycyB0byBhY3RpdmF0ZSB0aGVtLCB0aGV5CgkgICAgIGFyZSBwcm90ZWN0ZWQgd2l0aCBYTUxfVVNFX0JVRkZFUl9DT05URU5UIGRlZmluZS4KCSogZW50aXRpZXMuW2NoXSwgcGFyc2VyLmM6IGFkZGVkIHhtbENsZWFudXBQcmVkZWZpbmVkRW50aXRpZXMoKSwKCSAgICAgZ29hbCBpcyAwIG1lbW9yeSBsZWZ0IGFsbG9jYXRlZCBvbmNlIHBhcnNlciBpcyBubyBtb3JlIHVzZWQKCSogdGVzdERBVi5jLCB0ZXN0SFRNTC5jLCB0ZXN0U0FYLmMsIHRlc3RYUGF0aC5jOiBtYWtlIHN1cmUgd2UKCSAgICAgY2FsbCB4bWxDbGVhbnVwUGFyc2VyKCkgYW5kIHhtbE1lbW9yeUR1bXAoKQoKV2VkIE5vdiAyNCAxOTowMDowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geG1sSU8uW2NoXSBwYXJzZXIuYyB2YWxpZC5jOiBjb2RlIGNsZWFudXAgd2l0aCAtcGVkYW50aWMKCSogcGFyc2VyLltjaF0gZW5jb2RpbmcuW2NoXTogYWRkZWQgbWVtb3J5IGNsZWFudXAgcm91dGluZXMKCSogcGFyc2VyLmM6IGNsb3NpbmcgYnVnICMzNzg4CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MKClR1ZSBOb3YgMjMgMTE6MjM6NTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBjbG9zaW5nIGJ1ZyAzNzQ4LCBhZGRlZCB4bWxOZXdEb2NSYXdOb2RlKCksIAoJICAgICAgICAgICAgIHhtbE5ld1RleHRDaGlsZCgpIGFuZCB4bWxTZXRDb21wcmVzc01vZGUoKSBiZWhhdmlvdXIuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWNvbXByZXNzIG9wdGlvbgoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKRnJpIE5vdiAxOSAxODo0MToyOCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGJ1Z2ZpeGluZywgdGhlIGRhbW4gdGhpbmcgTVVTVCBub3QgY3Jhc2ggZXZlbgoJICAgICAgICAgICAgICAgIGlmIGdpdmVuIC9wcm9jL2tjb3JlIGFzIGlucHV0ICEKCSogZG9jL3htbC5odG1sIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpUaHUgTm92IDE4IDE0OjU3OjE4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBGaXhlZCBzb21lIHdyb25nbHkgc3BhY2UgY29sbGFwc2luZyBjb2RlIGR1ZSB0bwoJICAgICAgICAgICAgYSBtaXNyZWFkaW5nIG9mIHRoZSBzcGVjLgoJKiByZXN1bHQvKjogZml4ZWQgdGhlIG91dHB1dCBhY2NvcmRpbmdseQkgICAgCgpXZWQgTm92IDE3IDE4OjI4OjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVuY29kaW5nLmM6IGJ1ZyBmaXggYW5kIHR5cG9zCgkqIHhtbElPLltjaF0gcGFyc2VyLmM6IGZpcnN0IGJpdHMgdG93YXJkIHJlYWwgcHJvZ3Jlc3NpdmUgcGFyc2luZwoJKiBwYXJzZXIuYzogYWRkZWQgYXR0cmlidXRlIG5vcm1hbGl6YXRpb24gY2xvc2luZyBidWcgIzM1OTcKCSogdGVzdC9hdHQqIHJlc3VsdC9hdHQqIFNBWHJlc3VsdC9hdHQqOiB0ZXN0Y2FzZSBmb3IgYXR0cmlidXRlCgkgICAgbm9ybWFsaXphdGlvbgoKTW9uIE5vdiAxNSAxODo1MDo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IGNsb3NpbmcgYnVnICMzMTYzIGJ5IGFkZGluZyBleHRyYSBmbGFncyBmb3IgdGhlCgkgICAgICAgICAgICAgICAgY2MgY29tcGlsZXIgb24gSFAtVVgKCkZyaSBOb3YgMTIgMTc6NDE6MjAgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuW2NoXSA6IHJlbW92ZWQgYSB0eXBvIGFuZCBhbiBlbnVtZXJhdGVkIHR5cGUgYnVnIGluIHRoZQoJICAgICAgICAgICAgICAgeG1sQWRkRWxlbWVudERlY2woKSBmdW5jdGlvbgoJKiB0cmVlLmMgOiBJIGNoYW5nZWQgeG1sU2V0UHJvcCgpIGFuZCB4bWxOZXdQcm9wKCkgdG8gZG8gdGhlCgkgICAgY2FsbCB0byB4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCgpIHNvIHRoYXQgdGhlIGZ1bmN0aW9ucyAKCSAgICBOZXcsIFNldCBhbmQgR2V0IGFyZSBhdCB0aGUgc2FtZSBsZXZlbC4KCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBleHRyYSBtZW1vcnkgYWxsb2NhdGlvbiBidWcgZm9yCgkgICAgYXR0cmlidXRlcyBkZXRlY3RlZCBieSBzb21lb25lIHVzaW5nIGxpYnhtbCBpbiBlbWJlZGRlZCBzeXN0ZW1zIDotKQoKVGh1IE9jdCAyOCAxNzo0OToyNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5Lmg6IHR1cm5lZCBvZmYgbWVtIGRlYnVnIDotXAoKTW9uIE9jdCAyNSAxMjoxMzoyNSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGNsb3NlZCBidWcgIzI3ODQgYSBvbmUgbGluZSBmaXgsIGJ1dCB3b3J0aCBwdXNoaW5nCgkgICAgICAgICAgICBhIG5ldyByZWxlYXNlIG91dAoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGF1dG8tY2xvc2UgYnVncyBvbiBsaXN0IGl0ZW1zLCB6ZXJvaW5nCgkgICAgICAgICAgICBzb21lIHN0cnVjdHVyZXMsIGNvbW1lbnRzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCgkJICAgIG1haW4gZWxlbWVudCwgYW5kIG90aGVyIG5hc3R5bmVzcwoJKiBIVE1MdHJlZS5jIHRyZWUuYzogYWNjb21vZGF0ZSB0aGUgZXh0ZW5kZWQgSFRNTCBzdXBwb3J0ZWQJICAgIAoJKiBjb25maWd1cmUuaW46IHB1c2hpbmcgMS43LjQKCSogdGVzdC9lbnQ4IGFuZCByZWxhdGVkIG91dHB1dHMgOiBhZGRlZCBhIG5ldyB0ZXN0IGZvciBidWcgIzI3ODQKCSogdGVzdC9IVE1ML3dpcmVkLmh0bWwgYW5kIHJlbGF0ZWQgb3V0cHV0OiBhIG5hc3R5IEhUTUwgZXhhbXBsZQoJKiBNYWtlZmlsZS5hbTogaW1wcm92ZWQgdGhlIHRlc3Qgc2NyaXB0cwoJKiBkb2NzLyogOiByZXJhbiB0aGUgZG9jdW1lbnRhdGlvbiBleHRyYWN0b3IsIHVwZGF0ZWQgeG1sLmh0bWwKClRodSBPY3QgMTQgMTA6Mjk6NTYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYywgSFRNTHRyZWUuYywgdHJlZS5oOiBjb21wbGV0ZWx5IHJldmFtcGVkIHRoZQoJICAgICBIVE1McGFyc2VyIGFuZCBkZWJ1Z2dlZCB0aGUgSFRNTCByZWxhdGVkIGNvZGUuIEhUTUwgZG9jdW1lbnRzCgkgICAgIG5vdyBoYXZlIHRoZWlyIG93biB0eXBlCgkqIGVudGl0aWVzLmM6IGRvIG5vdCBkdW1wICZhcG9zOyBmb3IgSFRNTCBvdXRwdXQKCSogeG1sbWVtb3J5LmM6IGltcHJvdmVtZW50LCBicmVha3BvaW50IG1lY2hhbmlzbQoJKiB0ZXN0SFRNTC5jOiBhZGRlZCAtLXNheCAtLXJlcGVhdCAuLi4KCSogTWFrZWZpbGUuYW06IGltcHJvdmVkIHRoZSBIVE1MIHRlc3RzCgkqIHZhbGlkLltjaF06IGFkZGVkIHhtbFZhbGlkR2V0VmFsaWRFbGVtZW50cyBhbmQKCSAgICAgICAgICAgICAgeG1sVmFsaWRHZXRQb3RlbnRpYWxDaGlsZHJlbgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1pbnNlcnQgdG8gdGVzdCB0aGUgMiBuZXcgZnVuY3Rpb25zCgkqIHRlc3QvLyogcmVzdWx0Ly8qIFNBWHJlc3VsdC8vKiA6IHJlZ3Jlc3Npb24gdGVzdCBjbGVhbnVwCgkgICAgICAgICAgICAgICBhbmQgZXh0ZW5zaW9uLgoJKiBkb2MvaHRtbCA6IGFkZGVkIGRvYyBmb3IgbmV3IG1vZHVsZXMgZ25vbWUteG1sLXhtbG1lbW9yeS5odG1sIGFuZAoJICAgICAgICAgICAgIGdub21lLXhtbC1uYW5vaHR0cC5odG1sCgpNb24gT2N0IDExIDE0OjMxOjU4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIHByb2JsZW1zIHdpdGggc29tZSBhdXRvY2xvc2UgdGFncwoJKiB0cmVlLmM6IGZpeGVkIFhNTCBvdXRwdXQgcHJvYmxlbXMuIAoJKiByZXN1bHQvKiBTQVhyZXN1bHQvKjogdXBkYXRlIG9mIHRoZSB0ZXN0cyBvdXRwdXQKClNhdCBPY3QgIDkgMTE6MDI6NTcgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBBcnR1cm8gcGF0Y2ggZm9yIHhtbENvbmYuc2ggdmVyc2lvbiBpbmZvCgkqIHBhcnNlci5jOiBUaW0gSm9zbGluZyBwYXRjaCBmb3Igc2luZ2xlIHF1b3RlZCBpdGVtcwoJKiB0ZXN0ZXIuYzogVGltIEpvc2xpbmcgcGF0Y2ggZm9yIHRlc3RlciBvcHRpb25zIHVzYWdlCgkqIHRyZWUuaDogaW5kZW50IGNsZWFudXAKCkZyaSBPY3QgIDggMTY6MzU6MzcgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuaCA6IEZpeGVkIHByb2JsZW1zIHdpdGggSFRNTCBwYXJzaW5nCgkgICAgcmVwb3J0ZWQgYnkgS3Jpc3RpYW4gSG9nc2JlcmcgS3Jpc3RlbnNlbiA8aG9nc2JlcmdAZGFpbWkuYXUuZGs+CgpGcmkgT2N0ICA4IDExOjM3OjExIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgOiBSYXBoIHBhdGNoIGZvciBpbml0aWFsaXphdGlvbiBvZiBDT1JCQSBmaWVsZHMKCSogcGFyc2VyLmMsIHhwYXRoLmMsIC4uLjogbW9kaWZpY2F0aW9uIG9mIGRvYyBjb21tZW50cwoJKiB4cGF0aC5jIDogYWxsb3cgc3BhY2VzIGluIHhwYXRoIGV4cHJlc3Npb25zCgpNb24gU2VwIDI3IDEwOjE2OjQzIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuaDogdHVybmluZyBvZmYgbWVtb3J5IGRlYnVnIDotKAoKU3VuIFNlcCAyNiAxMzoxNjo1NCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gOiBhZGRlZCB4bWxTQVhVc2VyUGFyc2VGaWxlKCkgYW5kIHhtbFNBWFVzZXJQYXJzZU1lbW9yeSgpCgkgICAgICAgICAgICAgICAgYmV0dGVyIFNBWCBpbnRlcmZhY2VzLgoJKiB0ZXN0U0FYLmM6IHVzZXMgdGhlIG5ldyBTQVggcm91dGluZSwgYXZvaWQgZmV0Y2hpbmcgYW55IHJlbW90ZQoJICAgICAgICAgICAgIGVudGl0eS4KCSogY29uZmlndXJlLmluOiAxLjcuMgoKRnJpIFNlcCAyNCAxNjowMTowMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIHRoZSBVUkwKCSogZG9jL3htbC5odG1sOiBpbXByb3ZlZCB0aGUgZG9jdW1lbnRhdGlvbiBmcm9udC1lbmQKCkZyaSBTZXAgMjQgMDE6MDY6MzYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmM6IGNvbmRpdGlvbm5lZCByZWZlcmVuY2VzIHRvIHNucHJpbnRmIHdpdGggSEFWRV9TTlBSSU5URgoKRnJpIFNlcCAyNCAwMDoxNTo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIHRoZSBhbHBoYSBjb21waWxlIHByb2JsZW0KCSogcGFyc2VyLltjaF06IGNoYW5nZWQgZXJybm8gdG8gZXJyTm8gaW4gdGhlIHBhcnNlciBjb250ZXh0IDotKAoJKiAqLltjaF06IGNoYW5nZWQgQ0hBUiB0byB4bWxDaGFyIHRvIGF2b2lkIHByb2JsZW0gb24gV0lOMzIKCSogZG9jL3htbC5odG1sOiBjaGFuZ2VkIENIQVIgdG8geG1sQ2hhcgoJKiBkb2MvaHRtbC8qOiByZWNvbXBpbGVkIHRoZSBkb2N1bWVudGF0aW9uCgkqIGNvbmZpZ3VyZS5pbjogMS43LjEKCldlZCBTZXAgMjIgMTE6NDA6MzEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oOiBtb2RpZmllZCB0aGUgcGFyc2VyIGNvbnRleHQgc3RydWN0IHRvIHJlZ2FpbiAxLjQuMAoJICAgICAgICAgICAgYmluYXJ5IGNvbXBhdGliaWxpdHkKCSogcGFyc2VyLmMsIHhtbC1lcnJvci5oOiBhZGRlZCBlcnJubyBvdCB0ZWggY29udGV4dCBhbmQgZGVmaW5lZAoJICAgICAgICAgICAgYSBzZXQgb2YgZXJyb3JzIHZhbHVlcyB3aXRoIHVwZGF0ZSBvZiBlcnJubwoJKiBuYW5vaHR0cC5bY2hdOiBtaW5pbWFsaXN0IEhUVFAgZnJvbnQtZW5kIGZvciBmZXRjaGluZyByZW1vdGUKCSAgICAgICAgICAgIERURHMgYW5kIGVudGl0aWVzCgkqICouaCwgKi5jOiBjb21wbGV0ZSBjbGVhbnVwIG9mIHRoZSB1c2Ugb2YgY29uZmlnLmggYW5kIGluY2x1ZGUKCSAgICAgICAgICAgIHByb3RlY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHNldHVwLgoJKiBvdmVyYWxsbCBkZWJ1Z2dpbmcsIG1haW50ZW5hbmNlIGFuZCBidWctZml4aW5nIG9uIGFsbCBtb2R1bGVzCgkqIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCSogcmVhZHkgZm9yIDEuNy4wCgpXZWQgU2VwICA4IDIyOjQ2OjE0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgOiBjbGVhbnVwCgkqIFNBWC5jIHZhbGlkLmMgdmFsaWQuaDogYWRkZWQgSUQvSURSRUYgY2hlY2tpbmcKCSogdHJlZS5jIHRyZWUuaDogZXh0ZW5kZWQgZG9jIHN0cnVjdHVyZSBmb3IgcmVmcwoJKiBjb25maWd1cmUuaW46IDEuNi4yCgkqIHBhcnNlci5jOiBwYXRjaGVkIGJ1ZyBpbiBTQVggdXNlciBhcmcgY2FsbAoJKiBwYXJzZXJJbnRlcm5hbHMuaDogcGF0Y2hlZCBtaXNzaW5nIGNsb3NlIGluIEMrKyB3cmFwcGluZwoJKiB0ZXN0WFBhdGguYyB4cGF0aC5jIHhwYXRoLmg6IHByZXBhcmVkIGZvciBleHRlbnNpYmlsaXR5LAoJICBlc3BlY2lhbGx5IHVwY29taW5nIFhQb2ludGVyIGltcGxlbWVudGF0aW9uLgoJKiBkb2MveG1sLmh0bWw6IGF1Z21lbnRlZCwgdHlwbwoKU2F0IFNlcCAgNCAyMjo0ODowNSBDRVNUIDE5OTkgVGltdXIgQmFrZXlldiA8bWNAYmF0LnJ1PgoKCSogZG9jL01ha2VmaWxlLmFtOiByZXBsYWNlZCAiaW5zdGFsbCAtZCAiIHdpdGggIm1raW5zdGFsbGRpcnMiIC0KCW5vdCBhbGwgaW52b2NhdGlvbnMgb2YgaW5zdGFsbCB1bmRlcnN0YW5kIC1kLgoKU2F0IFNlcCAgNCAyMjoyMDowNyBDRVNUIDE5OTkgVGltdXIgQmFrZXlldiA8bWNAYmF0LnJ1PgoKCSogTWFrZWZpbGUuYW06IHByZXBlbmQgYWxsIHRoZSB0ZXN0KiBjYWxscyB3aXRoICQodG9wX2J1aWxkZGlyKSAtCgl0byBtYWtlICdjaGVjaycgd29ya3MsIHdoZW4gYnVpbGRkaXIgIT0gc3JjZGlyLgoKU2F0IFNlcCAgNCAyMDoyNTo0NiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKRnJpIFNlcCAgMyAwMDowMTowOCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5LltjaF0gTWFrZWZpbGUuYW0gIDphZGRlZCBhIG1lbW9yeSB3cmFwcGVyIHRvIGNoYXNlCgkgICAgICBub3QgZGVhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcwoJKiAqLmMgOiByZXBsYWNlcyBhbGwgY2FsbHMgdG8gbWFsbG9jKCkgZnJlZSgpIGFuZCByZWFsbG9jKCkgdG8KCSAgICAgIHRoZSB3cmFwcGVyIGZ1bmN0aW9ucy9tYWNyb3MKCSogdHJlZS5jIDogcmVtb3ZlZCBtZW1vcnkgbGVha3MgZHVlcyB0byBjYWxsaW5nIHhtbEZyZWVOb2RlKCkKCSAgICAgIGluc3RlYWQgb2YgeG1sRnJlZU5vZGVMaXN0KCkKCldlZCBTZXAgIDEgMTQ6MTU6MDkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogY29ycmVjdGVkIGEgc3R1cGlkIGJ1ZyBsZWFkaW5nIHRvIGNvcmUgZHVtcCBhdAoJICAgICAgICAgICAgICAgIHRyZWUgZGVhbGxvY2F0aW9uLiBSZW1vdmVkIHdhcm5pbmdzIGluZGljYXRlZCBieQoJCQlTdGVwaGFuZS5Db252ZXJzeUBscmkuZnIKCSogZW50aXRpZXMuYzogRml4ZXMgWWV0IEFub3RoZXIgU3R1cGlkIEJ1ZywgZW50aXRpZXMgd2VyZSBub3QKCSAgICAgICAgICAgICAgbG9va2VkIGZvciBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0CgpNb24gQXVnIDMwIDEzOjIyOjI2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB2YWxpZC5bY2hdIHhwYXRoLmM6IHBhdGNoZWQgY29tcGlsYXRpb24gd2FybmluZ3MgcmVwb3J0ZWQKCSAgb24gU0dJIGJ5IFN0ZXBoYW5lLkNvbnZlcnN5QGxyaS5mcgoKU3VuIEF1ZyAyOSAyMjoyNzoyOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWxsIC5oIDogY2hhbmdlZCB0aGUgcHJvdG90eXBlIGRlY2xhcmF0aW9uIGluZGVudCBhcyBpbiBndGsKCSogbW9zdCAuYyA6IHdvcmtpbmcgb24gcmVkdWNpbmcgdGhlIFRPRE9zIGluIHRoZSBjb2RlCgkqIG1vc3QgLmMgOiBjbGVhbnVwIHRob3VnaCAtcGVkYW50aWMgYW5kIEluc3VyZSsrCgkqIGltcHJvdmVtZW50cyBvbiB2YWxpZGF0aW9uIElEIGNoZWNraW5ncy4KCSogdHJlZS5bY2hdIFNBWC5jOiBhZGRlZCBzdXBwb3J0IGZvciBuYW1lc3BhY2Ugb24gYXR0cmlidXRlcyAjMjAyMgoJKiB4bWwtY29uZmlnLmluOiBjbG9zZWQgIzE4MTAKCk1vbiBBdWcgMTYgMDM6Mjc6MzggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdmFsaWQuYywgdmFsaWQuaDogbW9yZSB3b3JrIG9uIHZhbGlkaXR5LCBJRHMKCSogeHBhdGguYzogYWRkZWQvZml4ZWQgY29tcGFyaWRvbiBhbmQgZXF1bGl0eSwgYWRkZWQgYSBuZXcgaXNpbmYKCSAgZGVmaW5pdGlvbiBmb3IgQUlYCgpTdW4gQXVnIDE1IDIxOjE1OjE3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogY29ycmVjdGVkIG1pc3NpbmcgeG1sQ29uZi5zaCBpbgoJICB0aGUgZGlzdHJpYnV0aW9uIGR1ZSB0byBhIGN1dCduIHBhc3RlIGVycm9yIGF0IGxhc3QgY29tbWl0CgpUdWUgQXVnIDEwIDIwOjI4OjA5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHVwZ3JhZGVkIHRvIHZlcnNpb24gMS40LjAKCSogdmFsaWQuW2NoXSwgU0FYLmMsIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5oIC4uLgoJICBCaWcgdXBkYXRlLCBhZGRlZCBhIGxhcmdlIHBhcnQgb2YgdGhlIHZhbGlkYXRpb24gcHJvY2VzcywKCSAgaXQgc2hvdWxkIGJlIHVzYWJsZSwgYnV0IHNvbWUgcGFydHMgYXJlIG1pc3NpbmcKCSogeHBhdGguYzogaW1wcm92ZWQgdGhlIGltcGxlbWVudGF0aW9uIHcuci50LiByb290LgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgbW9yZSB0ZXN0cwoJKiB0ZXN0IGFuZCByZXN1bHQgdHJlZXM6IGFkZGVkIGEgbG90IG9mIHRlc3RzCgkqIGxpYnhtbC5zcGVjLmluOiBleHBvcnQgbGlieG1sLnNvLjAgYW5kIGxpYnhtbC5zby4xCgpUdWUgQXVnIDEwIDExOjMzOjQxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBBZGRlZCBhbiBIQUNLSU5HIGZpbGUKClR1ZSBKdWwgMjcgMjE6NDM6MDAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0gOiBpbXByb3ZlbWVudHMgYW5kIGRlYnVnIG9mIHRoZSBYUGF0aCBpbXBsZW1lbnRhdGlvbgoJKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jIDogbW9kaWZpZWQgdGhlIHBhcnNlcnMgdG8gYmUgcHJvZ3Jlc3NpdmUKCSogdHJlZS5bY2hdIDogZXh0ZW5kZWQgdGhlIEJ1ZmZlciBwcm9taXRpdmVzCgkqIHhtbElPLltjaF0gOiBhZGRlZCBiYXNpYyBJL08gcm91dGluZXMgcHJvdmlkaW5nIHByb2dyZXNzaXZlCgkgIHBhcnNpbmcgYW5kIHJlYWR5IGZvciBJMThOIGNvbnZlcnNpb24gcGx1Z2lucwoJKiBTQVhyZXN1bHQvKiA6IHRoZSBTQVggY2FsbGJhY2sgc2VxdWVuY2UgbWF5YmUgc2xpZ2h0bHkgZGlmZmVyZW50CgkgIG5vdwoJKiB0ZXN0Ki5jIDogaW1wcm92ZWQvdXBkYXRlZCB0aGUgdGVzdHMgcHJvZ3JhbXMKCSogZG9jLyogOiByZWNvbXBpbGVkIHRoZSBkb2NzLgoKMTk5OS0wNy0yNiAgTWljaGFlbCBNZWVrcyAgPG1pY2hhZWxAZWRlbnByb2plY3Qub3JnPgoKCSogdHJlZS5oOiBBZGQgY29uc3QgdG8gJ2NvbnRlbnQnIGluIHhtbE5ld0RvY05vZGUsIHhtbE5ld0NoaWxkCgoJKiB0cmVlLmM6IERpdHRvLgoKVGh1IEp1bCAxNSAxNjoxNzoxNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiB1cGdyYWRlZCB0byB2ZXJzaW9uIDEuNC4wCgkqIHhwYXRoLmMsIHhwYXRoLmgsIHRlc3RYUGF0aC5jLCBtYWtlZmlsZS5hbTogYWRkZWQgY29kZSBmb3IgdGhlIFhQYXRoCgkgIGRyYWZ0IGZyb20gVzNDLiBXaWxsIGJlIHVzZWQgYnkgWFBvaW50ZXIsIFhsaW5rLCBYU0wsIGFuZCBwb3NzaWJseQoJICBYTUwgcXVlcnkgbGFuZ3VhZ2UsIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCBmb3IgbW9yZSBkZXRhaWxzLgoJKiBwYXJzZXIuYywgcGFyc2VyLmg6IGFkZGVkIENIQVIqIHJlbGF0ZWQgc3RyaW5nIGZ1bmN0aW9ucyBmb3IgWFBhdGgKCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5jOiBhIGJpdCBvZiBjbGVhbnVwIG9uIGVudGl0aWVzLgoJKiBkb2MvZ25vbWUteG1sLnNnbWwsIGRvYy9odG1sLyogOiBhZGRlZCBYUGF0aCBhbmQgSFRNTCBkb2N1bWVudGF0aW9uLAoJICByZWJ1aWxkIHRoZSBkb2NzLgoJKiBNYWtlZmlsZS5hbSwgdGVzdC9YUGF0aC8qLCByZXN1bHQvWFBhdGgvKjogYWRkZWQgYW4gWFBhdGh0ZXN0cyB0YXJnZXQKCSAgYW5kIHJlZ3Jlc3Npb24gdGVzdGluZyBjYXBhYmlsaXRpZXMgZm9yIFhQYXRoLgoKTW9uIEp1bCAxMiAxMjozNjozOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gRWxsc29uIDxlbGxzb25AbHVjZW50LmNvbT4KCSAgY2xvc2luZyBidWcgIzE2NDYKCk1vbiBKdWwgMTIgMTE6MDQ6NDQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtLCBleGFtcGxlL01ha2VmaWxlLmFtOiBjbG9zZWQgYnVnICMxNjgzCgpTdW4gSnVsIDExIDE4OjE2OjM0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBleGFtcGxlL01ha2VmaWxlLmFtLCBjb25maWd1cmUuaW46IGFkZGVkIHRoZSBtYWtlZmlsZSBmb3IgdGhlCgkgIGdqb2JyZWFkIGV4YW1wbGUKClNhdCBKdWwgMTAgMTQ6MTk6MTEgQ0VTVCAxOTk5IFRvbWFzeiBLs29jemtvICA8a2xvY3pla0BwbGQub3JnLnBsPgoKCSogZG9jL01ha2VmaWxlLmFtOgoJLSBmaXggd2hpY2ggYWxsb3cgIm1ha2UgaW5zdGFsbCBERVNURElSPTwvaW5zdGFsbC9wcmVmaXg+Ii4KCkZyaSBKdWwgIDkgMTI6MTA6MjQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gRWxsc29uIDxlbGxzb25AbHVjZW50LmNvbT4KCSAgd2hpY2ggZml4ZWQgYSBwcm9ibGVtIG9uIHRoZSBmaWxlIHJlYWRpbmctY29kZS4KCldlZCBKdWwgIDcgMDk6Mjg6NDMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuW2NoXTogbW9yZSB3b3JrIGZvciBIVE1MIHBhcnNpbmcgYW5kCgkgIG91dHB1dC4KCSogTWFrZWZpbGUuYW0sIHRlc3QvSFRNTC8qLCByZXN1bHQvSFRNTC8qOiBhZGRlZCBIVE1MdGVzdHMgdGFyZ2V0ZXN0SFRNTHQKCldlZCBKdWwgIDcgMDA6MjU6NDIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oIDogT29wcyByZW1vdmVkIHRoZSBiaW5hcnkgY29tcGF0aWJpbGl0eSBwcm9ibGVtCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuaCA6IE1vcmUgd29yayBvbiB0aGUgSFRNTCBwYXJzZS9kdW1wCgkqIHBhcnNlci5jLCBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2hlcyBmb3IgcmVhZGluZyBmcm9tIHN0ZGluCgpNb24gSnVsICA1IDE4OjQ1OjMxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYywgdmFsaWQuYzogY2xlYW51cCBidWcgIzE1OTEKCSogY29uZmlndXJlLmluOiBjbGVhbnVwIGJ1ZyAjMTU5MgoJKiBIVE1McGFyc2VyLltjaF0sIHRlc3RIVE1MLmM6IHN0YXJ0ZWQgYWRkaW5nIGFuIEhUTUwgcGFyc2VyIHVzaW5nCgkgIHRoZSBzYW1lIHRyZWUgYmFjay1lbmQuIEhlbmNlIGdkb21lIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBpdC4KCSogZG9jL01ha2VmaWxlLmFtOiBjbG9zZSBidWcgIzYxNwoKU2F0IEp1biAyNiAyMzozNjozOCBFRFQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogYWxsb2N0YXRlIGEgcGVyIHBhcnNlciBjb250ZXh0IFNBWCBpbnRlcmZhY2UgYmxvY2sKClR1ZSBKdW4gMjIgMjM6NDY6MzIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHJlbGVhc2VkIDEuMy4wIHdpdGggeG1sRW5jb2RlRW50aXRpZXMgcmVzdG9yaW5nIG9sZCBiZWhhdmlvdXIKCSAgYW5kIHhtbEVuY29kZUVudGl0aWVzUmVlbnRyYW50IHdpdGggdGhlIGNvcnJlY3Qgb25lIDotXAoKTW9uIEp1biAyMSAxNDowNzo1MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29tbWl0IG9mIG15IGludGVybmFsIFhNTCBiYXNlIGNoYW5nZXMsIHF1aXRlIGEgbG90IG9mCgkgIGNoYW5nZXMsIGNsZWFudXBzLCBiZXR0ZXIgZW50aXRpZXMgc3VwcG9ydCwgZnJhbWV3b3JrIGZvcgoJICBuZXcgSS9PIGFuZCBjaGFyc2V0IGRldGVjdGlvbiBhbmQgaGFuZGxpbmcKCSogRml4ZWQgdGhlIGNvbmZpZ3VyZS9NYWtlZmlsZSBzdHVmZiB0byBnZW5lcmF0ZSBzaGFyZWQgbGlicwoJICB3aXRoIHRoZSBwcm9wZXIgdmVyc2lvbiBpbmZvLCBzbyB3ZSBqdW1wZWQgb24gcmV2IGZyb20KCSAgMC4wLjAgdG8gMS4yLjAgISBUaGUgYmluYXJ5IGludGVyZmFjZXMgaGF2ZSBiZWVuIGJyb2tlbiwKCSAgeG1sRW5jb2RlRW50aXRpZXMoKSByZXN1bHQgbmVlZCB0byBiZSBmcmVlZCBub3csIGFuZCBhIHN0cmluZwoJICB4bWxQYXJzZXJWZXJzaW9uIHByb3ZpZGUgdGhlIGN1cnJlbnQgbGlicmFyeSB2ZXJzaW9uLgoKVHVlIEp1biAxNSAxNDoyNDoxOSAxOTk5ICBSYXBoIExldmllbiAgPHJhcGhAYWNtLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZmZlciBvdmVycnVuIGZvciB3aGVuIHlvdSBoYXZlIGEgdmVyeSBsb25nCglhdHRyaWJ1dGUgd2l0aCBubyBlbnRpdGllcyBpbiBpdC4KCk1vbiBKdW4gMTQgMDA6MTc6NTAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGV4YW1wbGUgZGlyZWN0b3J5CgkqIGFkZGVkIGV4YW1wbGUvZ2pvYnMueG1sIGdqb2JyZWFkLmMsIHN0aWxsIG5lZWQgYSBNYWtlZmlsZS5pbgoKV2VkIEp1biAgMiAxOTo0MDo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUmVsZWFzZSBvZiBsaWJ4bWwtMS4xLCBuZWFybHkgZXZlcnl0aGluZyBoYXMgYmVlbiB0b3VjaGVkIGZvcgoJICB0aGlzLgoJKiBBZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCSogVXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKU2F0IE1heSAyOSAxMzozNDo0MiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiB1bmlmaWVkIHRoZSBYTUxfTk9fQ09SQkEgZGVmaW5lcy4KCSogcGFyc2VyLmMgZW5jb2RpbmcuW2NoXTogc3RhcnRlZCBwbHVnZ2luZyBpbiBjaGFyIGVuY29kaW5nIGRldGVjdGlvbgoKRnJpIE1heSAyOCAyMjo1ODo0MiBFRFQgMTk5OSBNYW5pc2ggVmFjaGhhcmFqYW5pIDxtdmFjaGhhckB2Z2VyLnJ1dGdlcnMuZWR1PgoKCSogdHJlZS5jOiAoeG1sU2F2ZUZpbGUpIC0gcmVtb3ZlZCBkb3VibGUgY2FsbCBvZiB4bWxDb250ZW50RHVtcC4gIAoJICBBbHNvIGZyZWVkIGFsbG9jYXRlZCBidWZmZXIuCgpXZWQgQXByIDIxIDIyOjA3OjM1IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBlbnRpdGllcy5bY2hdIHZhbGlkLltjaF0gOiByZW1vdmVkIHRoZSBtYWluCgkgIHJlZW50cmFuY3kgcHJvYmxlbSBhdCBwcmludGluZy4gT25lIGlzIGxlZnQgaW4gZW50aXRpZXMuYywgdG8KCSAgcmVtb3ZlIEFTQVAKCSogdGVzdFNBWC5jIDogYWRkZWQgYSB0ZXN0IGV4YW1wbGUgc2hvd2luZyB0aGUgdXNlIG9mIHRoZSBTQVggCgkgIGludGVyZmFjZSBpZiBvbmUgZG9lc24ndCB3YW50IHRvIGJ1aWxkIHRoZSBET00gdHJlZS4KCSogaHRtbC9nbm9tZS14bWwtKi5odG1sIGh0bWwvaW5kZXguc2dtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBBcHIgIDUgMTQ6MTQ6NDAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBTQVguYywgcGFyc2VySW50ZXJuYWxzLmggdmFsaWQuW2NoXToKCSAgbGFyZ2UgcmV2YW1waW5nIG9mIHRoZSBwYXJzZXIgdG8gdXNlIFNBWCBjYWxsYmFja3MKCSAgaHR0cDovL3d3dy5tZWdnaW5zb24uY29tL1NBWC8gKG9yIGF0IGxlYXN0IGEgQyBsaWtlIGludGVyZmFjZQoJICBhIGxhIEV4cGF0KS4gSXQncyBub3cgcG9zc2libGUgdG8gc2V0IHVwIHlvdXIgb3duIGNhbGxiYWNrcwoJICBhbmQgdGhlIHBhcnNlciB3aWxsIG5vdCBidWlsZCBhIERPTSB0cmVlLgoJKiB0ZXN0LyogcmVzdWx0Lyo6IHVwZGF0ZWQgdGhlIHRlc3Qgc3VpdGUsIEkgZmluYWxseSByZW1vdmVkCgkgIHRoZSBvbGQgTmFtZXNwYWNlIGRyYWZ0IHN1cHBvcnQgKFBJIGJhc2VkKS4KCkZyaSBBcHIgIDIgMTc6NTc6MzIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCB0ZXN0IHJlc3VsdCB0byBFWFRSQV9ESVNUIGZvciBtYWtlIHRlc3RzCgpXZWQgTWFyIDI0IDIxOjM3OjAyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXJJbnRlcm5hbHMuaDogbW92ZWQgdGhlIGNoYXJzIG1hY3JvIGRlZmluaXRpb25zCgkgIHRvIHBhcnNlckludGVybmFscy5oCgkqIHBhcnNlci5jLCBlcnJvci5jOiBhcHBsaWVkIHBhdGNoZXMgZnJvbSAiS251dCDFa2Vzc29uIgoJICA8a2FAczIuY2hhbG1lcnMuc2U+IGZvciBjbGVhbiBjb21waWxhdGlvbiB1bmRlciBNU1ZDIDYgOi1vCgpUdWUgTWFyIDIzIDExOjEwOjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuaW4gOiBhcHBsaWVkIHBhdGNoIHRvIG1ha2UgLS12ZXJzaW9uIHdvcmsKCjE5OTktMDMtMDUgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoY2hlY2stbG9jYWwpOiBBbGlhcyBmb3IgYHRlc3RzJyB0YXJnZXQuICBUaGlzIHdpbGwKCWNhdXNlIGBtYWtlIGNoZWNrJyB0byBkbyB0aGUgcmlnaHQgdGhpbmcuCgkodGVzdHMpOiBEb24ndCBydW4gdGVzdHMgaW4gc3JjZGlyLiAgQWxzbywgcmVwbGFjZWQgY2FsbHMgdG8KCWJhc2VuYW1lIHdpdGggYSBgc2VkJyAiZXF1aXZhbGVudCIuCgpGcmkgTWFyICA1IDA3OjIzOjUzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbmFtZWQgZXJyb3IuaCB0byB4bWwtZXJyb3IuaCwgY29ycmVjdGVkIE1ha2VmaWxlLmFtIHRvIGxpc3QKCSAgaXQgaW4gdGhlIGhlYWRlciBhbmQgbm90IHRoZSBzb3VyY2VzLCB1cGRhdGVkIHRoZSBkb2MuCgkgIFRoYW5rcyB0byBUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lm5vZGFrLmVkdT4gZm9yCgkgIHBvaW50aW5nIHRoaXMgb3V0LgoKTW9uIE1hciAgMSAxMzoyNzoxNyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oOiBtZW1vcnkgbGVhayBodW50aW5nLAoJICBleHBvcnRlZCB0aGUgaW5wdXRTdHJlYW0gcm91dGluZXMuCgkqIGRvYy9odG1sLyogOiB1cGRhdGVkIGFjY29yZGluZ2x5CgpTdW4gRmViIDI4IDIyOjUxOjMzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXIuaCwgcGFyc2VySW50ZXJuYWxzLmg6IGFkZGVkIGEgZmV3IGV4dHJhCgkgIGludGVybmFsIGNhbGxzIHRvIGFsbG9jYXRlIGFuZCBmcmVlIHBhcnNlciBjb250ZXh0cyAuLi4KCSogZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYWNjb3JkaW5nbHkKClRodSBGZWIgMjUgMTE6NTI6MjQgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbSwgZG9jL21ha2VmaWxlLmFtIDogR2VuZXJhbCBjaGFuZ2VzIGZvcgoJICAxLjAuMCByZWxlYXNlIGFuZCBpbmNsdWRpbmcgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCgpUaHUgRmViIDI1IDA5OjQ0OjUyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG1ha2VmaWxlLmFtIDogYWRkZWQgcGFyc2VySW50ZXJuYWxzLmgsIG9vcHMuCgpNb24gRmViIDIyIDExOjI0OjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlckludGVybmFscy5oOiBhZGRlZCB0aGlzIGhlYWRlciBnaXZpbmcgYWNjZXNzIHRvIHRoZSBwYXJzZXIKCSAgaW50ZXJuYWwgZnVuY3Rpb25zLgoJKiBkb2MvTWFrZWZpbGUuYW0gOiBhZGRlZCBhIHJlYnVpbGQgdGFyZ2V0IHdoaWNoIHJlYnVpbGRzIHRoZSBmdWxsCgkgIHNldCBvZiBkb2N1bWVudGF0aW9ucwoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gdmFsaWQuW2NoXTogc2VyaW91cyB1cGRhdGVzIHcuci50LiBwYXJzaW5nCgkgIHRoZSBpbnRlcm5hbCBzdWJzZXQuIAoJKiAqLmMgKi5oOiBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbiB1c2luZwoJICBndGstZG9jLCBjbGVhbnVwIG9mIGZ1bmN0aW9ucyBibG9ja3MsIHJlb3JnYW5pc2F0aW9uIG9mIHN0cnVjdAoJICBkZWNsYXJhdGlvbnMuCgpUdWUgRmViIDE2IDE3OjI3OjI5IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtLCBzcGVjLCBkb2MvTWFrZWZpbGUuYW0gOiB1cGdyYWRpbmcgdG8gMC45OS44LCBmaXhpbmcKCSAgdGhlIHRhciBhbmQgc3BlYyBmaWxlIHRvIGluY2x1ZGUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jLgoKMTk5OS0wMi0xMyAgTnVubyBGZXJyZWlyYSAgPG5tcmZAcm5sLmlzdC51dGwucHQ+CgoJKiBkb2MvLmN2c2lnbm9yZTogQWRkZWQgdGhpcyBmaWxlLgoKTW9uIEZlYiAgOCAxOToyNzo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldFByb3AgdG8gcmV0dXJuICIiIHdoZW4gdGhlIGF0dHJpYnV0ZQoJICBleGlzdHMsIGV2ZW4gaWYgdGhlIG5vZGUtbGlzdCBpcyBOVUxMLgoKTW9uIEZlYiAgOCAxNjoxMDoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYW4gZXJyb3Igb3V0cHV0dGluZyBlbXB0eSBhdHRyaWJ1dGUgdmFsdWVzLgoJKiBNYWtlZmlsZS5hbSBhbmQgZG9jL21ha2VmaWxlLmFtOiBoYXZlIGJlZW4gdXBkYXRlZCBkdXJpbmcgdGhlCgkgIHdlZWstZW5kLiBTb3JyeSBmb3IgYW4gZW1wdHkgQ1ZTIGxvZywgSSBnb3QgYSBzaGVsbCBwcm9ibGVtLgoKTW9uIEZlYiAgMSAxMjoxMDoxMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmg6IGNsZWFuZWQgdXAgdXNpbmcgZW51bXMgaW5zdGVhZCBvZiBkZWZpbmVzCgkqIHBhcnNlci5jLCB2YWxpZC5bY2hdOiBtb3JlIHdvcmsgb24gcGFyc2luZy9vdXRwdXQgb2YgZWxlbWVudAoJICBkZWNsYXJhdGlvbnMKClN1biBKYW4gMzEgMjI6MDY6NDggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuW2NoXSwgdHJlZS5jLCBwYXJzZXIuYyA6IG1vcmUgd29yayB0b3dhcmQgZnVsbCBwYXJzaW5nCgkgIG9mIFhNTCBEVERzLgoJKiBSRUFETUU6IGFkZGVkIGluZm9ybWF0aW9ucyBhYm91dCBtYWlsaW5nLWxpc3QgYW5kIG9uLWxpbmUKCSAgZG9jdW1lbnRhdGlvbgoKMTk5OS0wMS0yNyAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoWE1MX0lOQ0xVREVESVIpOiBVc2UgLUkgbm90IC1MIGZvciBpbmNsdWRlcy4KClN1biBKYW4gMTcgMjA6MDY6MzYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHRyZWUuW2NoXSA6IG1vcmUgd29yayB0b3dhcmQgY29uZm9ybWFuY2UgdGVzdGluZywKCSAgYWRkZWQgYSBsYXN0IGVsZW1lbnQgdG8gYWNjZWxlcmF0ZSBwYXJzaW5nIG9mIHZlcnkgZmxhdCBzdHJ1Y3R1cmVzCgkgIHN0YXJ0ZWQgd29ya2luZyBvbiBpbnRlcm5hbCBzdWJzZXQgRWxlbWVudCBjb250ZW50IGRlY2xhcmF0aW9uLgoJKiB2YWxpZC5bY2hdIDogZmlyc3QgY3V0IGF0IGFkZGluZyBjb2RlIHRvd2FyZCB2YWxpZGF0aW9uLgoJKiBwcmV2aW91cyBjaGFuZ2VzIGhhZCBhbHNvIHNtYWxsIGltcGFjdCBvbiBtb3N0IGZpbGVzLCBlc3BlY2lhbGx5CgkgIHRoZSBjb25mb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIEphbWVzIENsYXJrIHRlc3Qgc3VpdGUuCgpTdW4gSmFuIDE3IDE0OjQ1OjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3QvKiA6IHVwZGF0ZWQgdGhlIGV4YW1wbGVzLCBtb3N0IG9mIHRoZW0gd2VyZSBub3Qgd2VsbAoJICAgICAgICAgICBmb3JtZWQgKGh1bW0pLCBhbmQgYWRkZWQgcmRmMi4KCSogcmVzdWx0LyogOiByZXN1bHRpbmcgY2hhbmdlcyBpbiB0aGUgb3V0cHV0LgoKU3VuIERlYyAgNiAxMzowNjo1OCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB4bWxHZXRQcm9wIG9uIE5VTEwgdmFsdWVzLgoKU2F0IERlYyAgNSAxMjoyNTowOSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYSBidWcgaW4gdGhlIGdlbmVyYXRpb24gb2YgZW1wdHkgYXR0cmlidXRlcwoKRnJpIE5vdiAyNyAwMTozNjo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5bY2hdLCB0cmVlLltjaF0sIHRlc3Rlci5jOiBhZGRlZCBjb3B5IGludGVyZmFjZXMKCSAgZm9yIG5vZGUvdHJlZXMvZG9jdW1lbnRzLy4uLiBCaWdnZXN0IHByb2JsZW0gaXMgbmFtZXNwYWNlCgkgIHN1cHBvcnQgd2hlbiBjb3B5aW5nIHN1YnRyZWVzLgoKU3VuIE5vdiAxNSAxOTo1OTo0NyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYzogaW1wcm92ZSBlbnRpdGllcyBhbmQgY2hhciByZWYgZW5jb2RpbmcsCgkgIGFuZCBjbGVhbnVwcyBvZiBlcnJvciBtZXNzYWdlcy4KCkZyaSBOb3YgMTMgMTM6MDM6MTAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmM6IHNpbXBsZSBidWcgaHVudGluZyBkb25lIGR1cmluZyBycG0yaHRtbCBhbmQKCSAgcnBtZmluZCBpbnRlZ3JhdGlvbi4KClN1biBOb3YgIDggMTM6MTE6MDcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IEFkZGVkIGludGVyZmFjZXMgYWxsb3dpbmcgdG8gc3BlY2lmeSBhIFNBWAoJICBoYW5kbGVyIGJlZm9yZSBwYXJzaW5nLgoKU3VuIE5vdiAgOCAwOTozOToxNyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogcmVkaXJyZWN0IGFsbCBlcnJvcnMgcmVwb3J0aW5nIHRocm91Z2ggdGhlIFNBWAoJICBlcnJvciBmdW5jdGlvbgoKV2VkIE5vdiAgNCAxNDoyMTo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jOiByYXRoZXIgdXNlIEhBVkVfU05QUklOVEYgYW5kIG5vdCBkZXBlbmQgb24gZ2xpYgoJKiBsaWJ0b29sLCB0bG1haW4gLi4uOiB1cGRhdGUgb2YgdGhlIGxpYnRvb2wgZmlsZXMKCjE5OTgtMTEtMDQgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBlbnRpdGllcy5jOiBVc2UgZ19zbnByaW50ZiBpbnN0ZWRhIG9mIHNucHJpbnRmLgoKU3VuIE5vdiAgMSAxNDozMTowNiBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jLCBwYXJzZXIuYzogZGVidWcgYW5kIGNsZWFudXAgb2YgQ2hhclJlZiBoYW5kbGluZy9zYXZpbmcuCgkgIGFkZGVkIGVudDUgdGVzdCBmb3IgdGhpcyBwdXJwb3NlLgoJKiBwYXJzZXIuYywgcGFyc2VyLmg6IGZvcm1hdHRpbmcsIGNvbW1lbnRzIGFuZCBVVEYtOCBwbGFubmluZy4KCkZyaSBPY3QgMzAgMDE6MzY6NTIgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkPyBhIHN0cmFuZ2UgZXJyb3IgZHVlIHRvIGNvbXByZXNzaW9uIG9uIGEgR1dQCgkgIGRvY3VtZW50LgoKVGh1IE9jdCAyOSAwMDo0ODo0NSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGJ1ZyBmaXhpbmcKCSogZW50aXRpZXMuW2NoXTogZGVmaW5lZCBhIHNwZWNpZmljIHR5cGUgZm9yIHByZWRlZmluZWQgZW50aXRpZXMKCSogZG9jL3htbC5odG1sOiBtb3JlIGRvY3VtZW50YXRpb24gb24gdGhlIGxpYnJhcnksIGhvdyB0byB1c2UgaXQsCgkgIG92ZXJ2aWV3IG9mIHRoZSBpbnRlcmZhY2VzLgoKV2VkIE9jdCAyOCAxNzo1NjozNSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IG1vcmUgY2xlYW51cCBvbiB0aGUgQVBJLCBtYWRlIHRoZSB0cmVlIG1vciBjb25mb3JtYW50LgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNvcnJlY3RlZCBhIHNtYWxsIGJ1ZwoJKiBkb2MveG1sLmh0bWw6IGNvbnRpbnVpbmcgd3JpdGluZyBkb2N1bWVudGF0aW9uLgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5oIGRlYnVnWE1MLmM6IGFkZGVkIGRlYnVnZ2luZyB1dGlsaXRpZXMuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWRlYnVnIHN3aXRjaC4KCSogdHJlZS5jOiBwYXRjaGVkIGFuIGluY29ycmVjdCBub2RlLT50eXBlIGFzc2lnbm1lbnQuCgkqIHBhcnNlci5jOiBmb3JtYXR0aW5nLCBlbnN1cmUgdGhhdCBub2RlLT5kb2MgIT0gTlVMTCBpbiBhdHRyaWJ1dGVzCgpUdWUgT2N0IDI3IDAxOjE1OjM5IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIFNBWC5jIHRyZWUuW2NoXTogbGFyZ2UgYW1vdW50IG9mIGNoYW5nZXMgdG8gaW1wcm92ZQoJICBlbnRpdHkgc3VwcG9ydCBhbmQgcHJvdmlkZSBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBjbG9zZSB0bwoJICBET00gb25lIChlbnRpdHkgcmVmIG5vZGVzLCBhbmQgYXR0cmlidXRlIHZhbHVlIGFzIHRyZWUpLiBJIHRyaWVkCgkgIHRvIHByZXNlcnZlIHRoZSBpbnRlcmZhY2UgYnV0IHRoaXMgd2lsbCBzdXJlbHkgYnJlYWsgc29tZSBhcHBzCgkgIChJIGhhdmUgdG8gY2hhbmdlIHJwbTJodG1sL3JwbWZpbmQgZm9yIGV4YW1wbGUpLiBJIGhhZCB0byBjaGFuZ2UKCSAgdHdvIGludGVyZmFjZXMsIGFuZCB0aGUgZ2VuZXJhdGVkIHRyZWUgaXMgc29tZXdoYXQgZGlmZmVyZW50LgoJKiBkb2MvKiA6IHN0YXJ0ZWQgZG9jdW1lbnRpbmcgdGhlIFhNTCBsaWJyYXJ5LCB0aGUgdHJlZSBhbmQKCSAgRE9NL0NvcmJhLiBUaGlzIGlzIGEgZmlyc3Qgc3RlcC4KClNhdCBPY3QgMjQgMTQ6MjM6NTEgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IFNldCB1cCB0aGUgZm9uY3Rpb25zIGNvbW1lbnQgYmxvY2ssIGJvcmluZyBidXQgdXNlZnVsLgoJKiBwYXJzZXIuaCwgU0FYLmMsIHBhcnNlci5jOiBub3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkIHRocm91Z2gKCSAgdGhlIFNBWCBpbnRlcmZhY2UuIFRoZSBwcm9ibGVtIGlzIHRoYXQgbXkgU0FYIGludGVyZmFjZSBkaXZlcmdlZAoJICBxdWl0ZSBhIGJpdCBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHdlbGwgdGhpcyBpcyBub3QgYW4gb2ZmaWNpYWwKCSAgc3BlYywgYW5kIHRyYW5zbGF0aW5nIGl0IGZyb20gSmF2YSB0byBDIGlzIGhhaXJ5IGFueXdheS4uLgoKVHVlIE9jdCAyMCAwMjoxMToyMSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYywgZW50aXRpZXMuYywgdHJlZS5jLCBlbmNvZGluZy5jLCBlcnJvci5jOiBTZXQgdXAgdGhlCgkgIGZvbmN0aW9ucyBjb21tZW50IGJsb2NrLCBib3JpbmcgYnV0IHVzZWZ1bC4KClN1biBPY3QgMTggMjA6NDA6NTggRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuW2NoXSwgTWFrZWZpbGUuYW06IEFkZGVkIHRoZSBVVEYtOCwgVVRGLTE2IGFuZCBJU08gTGF0aW4gMQoJICBjb252ZXJzaW9uIHJvdXRpbmVzLiBIb3dldmVyIHRoZXkgYXJlIG5vdCB5ZXQgdXNlZCB0byBjb252ZXJ0IHRoZQoJICBpbnB1dHMuIFRoZSBjb3JlIHdpbGwgcnVuIHdpdGggVVRGLTguCgpTdW4gT2N0IDE4IDE1OjA4OjE5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IG1ha2Ugc3VyZSB0aGF0IHRoZSB0eXBlIGlkIGlzIHByb3Blcmx5IHNldC11cCB3aGVuCgkgIGEgbmV3IG9iamVjdCBpcyBhbGxvY2F0ZWQsIG5lZWRlZCBmb3IgRE9NLgoKU2F0IE9jdCAxNyAwMjo0MzoyMSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHRyZWUuYzogT2ssIHRoZSBtYWluIG9iamVjdHMgaW4gdGhlIHRyZWUgd2lsbCBiZSBuYXRpdmUKCSAgY29yYmEgb2JqZWN0cywgaXQgY29zdHMgOCBieXRlcyBwZXIgTm9kZSwgQXR0cmlidXRlIGFuZCBEb2N1bWVudAoJICBidXQgaXQgc2ltcGxpZmllcyB0aGUgQ29yYmEgaW50ZWdyYXRpb24gYSBsb3QgKG5vIGV4dHJhIGludGVyZmFjZQoJICBvYmplY3RzIHRvIGFsbG9jYXRlL2ZyZWUpLgoKVHVlIE9jdCAxMyAyMTo0Njo1NyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHRyZWUuYywgcGFyc2VyLmM6IGFkZGVkIHByZXYgYW5kIGRvYyBwb2ludGVycyB0byBOb2RlLAoJICBhbmQgY2hhbmdlZCBOT0RFcyBjb250YW50cyBmb3IgY29uZm9ybWl0eSB3aXRoIERPTSBMZXZlbCAxCgpXZWQgT2N0ICA3IDIzOjQyOjQ2IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGhvb2tzIHRvIGtlZXAgdHJhY2sgb2Ygc2VydmFudHMgd2hlbiBjcmVhdGluZyBvYmplY3RzCgkgIHhtbERvYyBhbmQgeG1sTm9kZSAoZm9yIENvcmJhIGV4cG9ydCkuCgpTdW4gT2N0ICA0IDAzOjE4OjA5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIHhtbC1jb25maWcgc2NyaXB0LgoKVGh1IE9jdCAgMSAxNjoyMjozNyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhdXRvZ2VuLnNoIDogYXBwbGllZCBwYXRjaCBmcm9tIEZyZWRlcmljIERldmVybmF5IDxkZXZlcm5heUBpc3Rhci5mcj4KCSAgdG8gYXV0b3VwZGF0ZSBsaWJ0b29sIGFuZCBhdXRvbWFrZSBjb25mIGZpbGVzLgoKMTk5OC0wOS0zMCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIE1ha2VmaWxlLmFtOiBVc2UgJz8nIHRvIHNlcGFyYXRlIHRoZSBzZWQKCWNvbW1hbmRzIGFzICcsJyBpcyB1c2VkIHdoZW4gcGVvcGxlIHBhc3MgLVdsLHNvbWV0aGluZy4KClRodSBTZXAgMjQgMTU6MTM6MjkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jLCB0cmVlLmg6IGFkZGVkIGEgcGVyLWRvY3VtZW50IGNvbXByZXNzaW9uIGludGVyZmFjZS4KClR1ZSBTZXAgMjIgMjA6NDc6MzggRURUIDE5OTgKCgkqIHRyZWUuYywgdHJlZS5oOiBhZGRlZCBzYXZpbmcgd2l0aCBjb21wcmVzc2lvbiBhbmQgYWRkZWQgaW50ZXJmYWNlcwoJICB0byBjb250cm9sIHRoZSBjb21wcmVzc2lvbiBsZXZlbCAoeG1sR2V0Q29tcHJlc3NNb2RlLAoJICB4bWxTZXRDb21wcmVzc01vZGUpIGFuZCBhIG5ldyBzYXZlIHRvIGZpbGVuYW1lIGZ1bmN0aW9uICh4bWxTYXZlRmlsZSkuCgpNb24gU2VwIDIxIDIwOjExOjEzIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBjb3JyZWN0ZWQgYSBsb29wIGZvciBmaWxlcyBvZiBzaXplIDAKCjE5OTgtMDgtMjAgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBlcnJvci5oOiBOZXcgZmlsZS4gIENvbnRhaW5zIHByb3RvdHllcyBmcm9tIGBlcnJvci5jJy4KClRodSBBdWcgMTMgMTk6MDI6MzQgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuYW0gKHhtbGluY2Rpcik6IE5ldyBtYWNyby4KCSh4bWxpbmNfSEVBREVSUyk6IFJlbmFtZWQgZnJvbSBpbmNsdWRlX0hFQURFUlMuCgpUaHUgQXVnIDEzIDAwOjQwOjE0IEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhcHBsaWVkIHNtYWxsIHBhdGNoIG9uIG51bWVyaWMgZW50aXRpZXMgZnJvbQoJICBDaHJpc3RvcGhlciBCbGl6emFyZCA8YmxpenphcmRAYXBwbGllZHRoZW9yeS5jb20+CgpXZWQgQXVnIDEyIDIzOjEyOjU4IEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBOZXcgcmVsZWFzZSAwLjIsIHJlbW92ZWQgdGhlIG9sZCB4bWxfKiBmaWxlcyBzbyB0aGF0IGl0J3MKCSAgICBjb2hlcmVudCB3aXRoIHRoZSBvdGhlciBDVlMgYmFzZSAoVzNDKSwgZmFyIGJldHRlciBjb25mb3JtYW5jZQoJICAgIHRvIHN0YW5kYXJkLCBuZXcgbmFtZXNwYWNlcywgZGVjZW50IGVudGl0aWVzIHN1cHBvcnQsIGJlZ2lubmluZwoJICAgIG9mIGEgU0FYLWxpa2UgaW50ZXJmYWNlLiBOZWFybHkgbm90aGluZyBsZWZ0IGludGFjdCwgZXZlbiB0aGUKCSAgICB0ZXN0IGV4YW1wbGVzIC4uLgoKMTk5OC0wNy0zMCAgQ2hyaXN0b3BoZXIgQmxpenphcmQgIDxibGl6emFyZEBhcHBsaWVkdGhlb3J5LmNvbT4KCgkqIC5jdnNpZ25vcmU6IEFkZCAuZGVwcyBkaXIKClN1biBKdWwgMjYgMTc6Mjk6NTIgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbF90cmVlOiBjaGFuZ2VkIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUgZm9yIG5hbWUgaW4geG1sTmV3Tm9kZQoKU3VuIEp1bCAyNiAwMDoxNzo1MSBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBhZGRlZCB0ZXN0IGZvciBDUFAKCSogQVVUSE9SUywgQ2hhbmdlbG9nOiB0aGUgb3JpZ2luYWwgb25lcyBkaWRuJ3QgZ2V0IGNvbW1pdGVkIGJ1dCB0aGUKCSAgICBnbGliIG9uZXMgaW5zdGVhZCwgZml4ZWQuCgkqIE1ha2VmaWxlLmFtOiBjb3JyZWN0ZWQgYW4gZXJyb3IgaW4gbGlicmFyeSBuYW1pbmcKCkZyaSBKdWwgMjQgMTY6NDc6MTQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogaW50ZWdyYXRlZCBjb2RlIGRldmVsb3BwZWQgYXQgVzNDCgkqIGNoYW5nZWQgdGhlIG9yaWdpbmFsIENvcHlyaWdodAoJKiBtaWdyYXRlZCB0byBhdXRvbWFrZQoJKiBwcmVmaXhlZCB0aGUgZmlsZW5hbWVzIGJ5IHhtbF8gdG8gYXZvaWQgZmlsZW5hbWUgY2xhc2hlcwoK