U2F0IERlYyAxNCAyMzo1NzozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBkb2MvbGlieG1sMi1hcGkueG1sOiBhZGRlZCB0aGUgY2xvc2UgYW5kIGdldGF0dHJpYnV0ZQoJICBtZXRob2RzIG9mIFhtbFRleHRSZWFkZXIuCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmMgCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRlZCB0aGUgcmVhZGVyIHRvIHRoZSBQeXRob24gYmluZGluZ3MKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGVzdCBmb3IgdGhlIFB5dGhvbiBiaW5kaW5ncyBvZiB0aGUgUmVhZGVyIEFQSXMKCSogcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAuCgpGcmkgRGVjIDEzIDExOjM5OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZhbGxiYWNrIHdhcyBvbmx5IGNvcHlpbmcgdGhlIGZpcnN0IGNoaWxkIG5vdCB0aGUKCSAgZnVsbCBjaGlsZCBsaXN0IG9mIHRoZSBmYWxsYmFjayBlbGVtZW50LCBjbG9zZXMgIzg5Njg0IGFzIHJlb3BlbmVkCgkgIGJ5IEJlcm5kIEt1ZW1tZXJsZW4KClRodSBEZWMgMTIgMTM6MzQ6NTkgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIGh0bWxOb2RlRHVtcE91dHB1dAoKVGh1IERlYyAxMiAxMDo1OToxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNC4zMAoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbDogZml4dXBzIHRvIHRoZSBhcGkgYnVpbGRlciwKCSAgZ2l2ZXMgZW51bSB2YWx1ZXMsIGZpeCBmdW5jdHlwZSByZXR1cm4gdHlwZSwgcHV0IGJhY2sgZmllbGRzIGluCgkgIHN0cnVjdHMgCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzIHJlYnVpbHQKClRodSBEZWMgMTIgMDE6MDk6MzQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBwYXRjaCBmcm9tIE1hcmsgVmFkb2sKCSAgYWJvdXQgaHRtbE5vZGVEdW1wT3V0cHV0IGxvY2F0aW9uLgoJKiB4cGF0aC5jOiByZW1vdmVkIGFuIHVuZGVmaW5lZCBmdW5jdGlvbiBzaWduYXR1cmUKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWw6IHRoZSBzY3JpcHQgd2FzIGV4cG9ydGluZwoJICB0b28gbWFueSBzeW1ib2xzIGluIHRoZSBBUEkgYnJlYWtpbmcgdGhlIHB5dGhvbiBiaW5kaW5ncy4KCSAgVXBkYXRlZCB3aXRoIHRoZSBsaWJ4c2x0L2xpYmV4c2x0IGNoYW5nZXMuCgpXZWQgRGVjIDExIDIwOjI2OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi40LjI5CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzIGFuZCBBUEkKCSogeG1scmVhZGVyLmM6IGEgZmV3IG1vcmUgZml4ZXMgZm9yIHRoZSBYbWxUZXh0UmVhZGVyIEFQSQoKV2VkIERlYyAxMSAxODowMToxNSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYXBwbGllZCBtaW5ndyBwYXRjaCBmcm9tIE1hZ251cyBIZW5vY2gKCldlZCBEZWMgMTEgMTY6NTg6NDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIGRvYy9saWJ4bWwyLWFwaS54bWw6IGEgYml0IG1vcmUgY2xlYW51cAoKV2VkIERlYyAxMSAxNDo1NDo0NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvTWFrZWZpbGUuYW06IG5ldyBBUEkKCSAgYnVpbGRpbmcgUHl0aG9uIHNjcmlwdCwgZG9lcyB0aGUgQyBwYXJzaW5nIGRpcmVjdGx5LCBnZW5lcmF0ZXMKCSAgYSBiZXR0ZXIgQVBJIGRlc2NyaXB0aW9uIGluY2x1ZGluZyBzdHJ1Y3R1cmUgZmllZHMgZGVmcyBhbmQKCSAgZW51bXMuIFN0aWxsIGEgY291cGxlIG9mIGJ1Z3MsIGJ1dCBnb29kIGVub3VnaCBmb3IgdGhlIHB5dGhvbgoJICB3cmFwcGVycyBub3cuCgkqIERPQ0JwYXJzZXIuYyBTQVguYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYwoJICB2YWxpZC5jIHhtbElPLmMgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1vcmUKCSAgY2xlYW51cCBiYXNlZCBvbiB0aGUgcHl0aG9uIGFuYWx5c2lzIHNjcmlwdCByZXBvcnRzLgoJKiBsaWJ4bWwuc3BlYy5pbjogbWFrZSBzdXJlIHRoZSBBUEkgWE1MIGRlc2NyaXB0aW9uIGlzIHBhcnQgb2YgdGhlCgkgIGRldmVsIHBhY2thZ2UuCgpUdWUgRGVjIDEwIDE2OjE2OjM0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuYyBoYXNoLmMKCSAgbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGVzdEMxNE4uYwoJICB0ZXN0RG9jYm9vay5jIHRocmVhZHMuYyB0cmVlLmMgdmFsaWQuYyB4bWxJTy5jIHhtbGxpbnQuYyB4bWxtZW1vcnkuYwoJICB4bWxyZWFkZXIuYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgeHBhdGguYzoKCSAgY29kZSBjbGVhbnVwLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbiBjb21tZW50cy4KCSogdHJlZS5jOiBmaXhlZCBhIHNtYWxsIGJ1ZyB3aGVuIGZyZWVpbmcgbm9kZXMgd2hpY2ggYXJlIFhJbmNsdWRlIG9uZXMuCgpNb24gRGVjICA5IDE1OjA4OjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiAgQWRkaW5nIGEgbmV3IHNldCBvZiBBUElzIGJhc2VkIG9uCgkgIHRoZSBDIyBUZXh0WG1sUmVhZGVyIEFQSSBidXQgY29udmVydGVkIHRvIEMuIEFsbG93IHRvIHBhcnNlCgkgIGluIGNvbnN0YW50IG1lbW9yeSB1c2FnZSwgZmFyIHNpbXBsZXIgdG8gcHJvZ3JhbSBhbmQgZXhwbGFpbgoJICB0aGFuIHRoZSBTQVggbGlrZSBBUElzLCB1bmZpbmlzaGVkIGJ1dCB3b3JraW5nLgoJKiB0ZXN0UmVhZGVyLmM6IHRlc3QgcHJvZ3JhbQoKU3VuIERlYyAgOCAxODozNjowMSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYXBwbGllZCBZQUxEU1AgZnJvbSBNYXJrIFZha29jCgpXZWQgRGVjICA0IDE2OjA4OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQ2hpcCB0dXJuZXIgaW5kaWNhdGVkIHRoYXQgWEhUTUwxIHNlcmlhbGl6YXRpb24KCSAgcnVsZSBmb3Igc3R5bGUgYWN0dWFsbHkgYnJlYWsgb24gYm90aCBJRSBhbmQgTW96aWxsYSwgCgkgIHRyeSB0byBhdm9pZCB0aGUgcnVsZSBpZiBlc2NhcGluZyBhaW4ndCBuZWNlc3NhcnkKCldlZCBEZWMgIDQgMTI6NDM6MjggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFuaHR0cC5jOiBoYW5kbGUgSFRUUCBVUkwgZXNjYXBpbmcsIHByb2JsZW0gcmVwb3J0ZWQgYnkKCSAgR2xlbiBOYWthbXVyYSBhbmQgU3RlZmFubyBaYWNjaGlyb2xpCgpTYXQgTm92IDMwIDEyOjE5OjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgcGFyc2VyLmMgdmFsaWQuYyB4cGF0aC5jOiBjb2RlIGNsZWFudXAKClRodSBOb3YgMjggMTI6NTM6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IEpvaGFubiBSaWNoYXJkIHBvaW50ZWQgb3V0IHNvbWUgWFBvaW50ZXIgcHJvYmxlbXMgZm9yCgkgIFVSTiBiYXNlZCBVUkkgcmVmZXJlbmNlcyBpbiBYSW5jbHVkZS4gTW9kaWZpZWQgdGhlIFVSSSBwYXJzaW5nCgkgIGFuZCBzYXZpbmcgcm91dGluZXMgdG8gYWxsb3cgY29ycmVjdCBwYXJzaW5nIGFuZCBzYXZpbmcgb2YgCgkgIFhQb2ludGVycywgZXNwZWNpYWxseSB3aGVuIGF0dGFjaGVkIHRvICJvcGFxdWUiIHNjaGVtZSBhY2NvcmRpbmdseQoJICB0byBSRkMgMjM5NgoKV2VkIE5vdiAyNyAyMDozNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmg6IGFwcGxpZWQgdGhlIHNhbWUga2luZAoJICBvZiByZWZhY3RvcmluZyB0byB0aGUgSFRNTCBzYXZpbmcgY29kZS4KCSogZG9jL2xpYnhtbDItKi54bWwgZG9jL0FQSSouaHRtbDogc2xpZ2h0IEFQSSBjaGFuZ2VzIGdvdCByZWZsZWN0ZWQKCSAgaW4gdGhlIGRvYy4KCldlZCBOb3YgMjcgMTI6NDA6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogcmVmYWN0b3JlZCB0aGUgWE1MIGR1bXAgb2YgYSBub2RlCgkgIHRvIGEgYnVmZmVyIEFQSSB0byByZXVzZSB0aGUgZ2VuZXJpYyBkdW1wIHRvIGFuIE91dHB1dElPIGxheWVyLAoJICB0aGlzIHJlZHVjZXMgY29kZSwgZml4ZXMgeG1sTm9kZUR1bXAoKSBmb3IgWEhUTUwsIGFsc28gbWFkZQoJICB4bWxOb2RlRHVtcCgpIG5vdyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlIHdyaXR0ZW4uCgpXZWQgTm92IDI3IDA5OjAwOjAwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9zZXR1cC5weS5pbjogYW5vdGhlciBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3IgCgkgIFB5dGhvbiBiaW5kaW5ncyBvbiBXaW5kb3dzCgkqIGRvYy9wYXJzZWRlY2wucHk6IHNtYWxsIGNsZWFudXAKCk1vbiBOb3YgMjUgMTc6Mjg6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gY29uZmlndXJlLmluOiBhZGQgYSBsaW5lIGluICVjaGFuZ2Vsb2cgZm9yIHJlbGVhc2VzCgpNb24gTm92IDI1IDE0OjE4OjI3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBwYXRjaCBmcm9tIE1hcmN1cyBDbGFya2UgZml4aW5nIGEgcHJvYmxlbSBpbiBlbnRpdGllcwoJICBwYXJzaW5nIHRoYXQgd2FzIGRldGVjdGVkIGluIEtEZSBkb2N1bWVudGF0aW9ucyBlbnZpcm9ubWVudC4KCk1vbiBOb3YgMjQgMTQ6MTM6MjEgQ0VUIDIwMDIgRVJESSBHZXJnbyA8Y2FjdHVzQGNhY3R1cy5ydWxlei5vcmc+CgoJKiBweXRob24vbGlieG1sLmMgKGxpYnhtbF9wcmV2KTogUmV0dXJuIHRoZSBwcmV2aW91cyBhcyBvcHBvc2VkIHRvCgl0aGUgbmV4dCBub2RlIChJIGd1ZXNzIHRoaXMgaXMgdGhlIHJlc3VsdCBvZiBzb21lIGN1dCAmIHBhc3RlIHByb2dyYW1taW5nOikKClNhdCBOb3YgMjMgMTc6MjI6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiBKYW4gUmFmYWogcG9pbnRlZCBhIGJ1ZyBpbiB0aGUgTWFrZWZpbGUuCgpTYXQgTm92IDIzIDEyOjIxOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9zZXR1cC5weS5pbjogdHJ5aW5nCgkgIHRvIGZpeCB0aGUgUHl0aG9uIGJpbmRpbmdzIGJ1aWxkIG9uIFdpbmRvd3MgKFN06XBoYW5lIEJpZG91bCkKCkZyaSBOb3YgMjIgMjI6NDE6MzQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhZGRlZCBvcHRpb24gZm9yIHB5dGhvbiBiaW5kaW5ncwoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgZXhwb3J0cwoKRnJpIE5vdiAyMiAxODo1MDozNCBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBmaXhlZCB1bnJlc29sdmVkIHN5bWJvbHMgd2hlbiBsaW5raW5nIHdpdGgKCSAgcHRocmVhZHMKCSogd2luMzIvd2luY2UvKjogYXBwbGllZCB1cGRhdGVzIHRvIFdpbmRvd3MgQ0UgcG9ydCBmcm9tIEphdmllcgoKRnJpIE5vdiAyMiAxNTo1MToyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjgKCSogbGlieG1sLnNwZWMuaW4gZG9jL01ha2VmaWxlLmFtOiBzb21lIGNsZWFudXAKCSogZG9jLyo6IHVwZGF0ZWQgdGhlIG5ld3MgYW5kIHJlZ2VuZXJhdGVkLgoKRnJpIE5vdiAyMiAxNDoxNToxNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpbmFsIHRvdWNoIGF0IGNsb3NpbmcgIzg3MjM1IDwvcD4gZW5kIHRhZ3MKCSAgbmVlZCB0byBiZSBnZW5lcmF0ZWQuCgkqIHJlc3VsdC9IVE1ML2NmXzEyOC5odG1sIHJlc3VsdC9IVE1ML3Rlc3QyLmh0bWwgcmVzdWx0L0hUTUwvdGVzdDMuaHRtbDoKCSAgdGhpcyBjaGFuZ2Ugc2xpZ2h0bHkgdGhlIG91dHB1dCBvZiBhIGZldyB0ZXN0cwoJKiBkb2MvKjogcmVnZW5lcmF0ZWQKCkZyaSBOb3YgMjIgMTM6MjY6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGluZyBidWcgIzk5MTkwIHdoZW4gVVRGOCBkb2N1bWVudCBhcmUKCSAgcGFyc2VkIHVzaW5nIHRoZSBwcm9ncmVzc2l2ZSBwYXJzZXIgYW5kIHRoZSBlbmQgb2YgdGhlIGNodW5rCgkgIGlzIGluIHRoZSBtaWRkbGUgb2YgYW4gVVRGOCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgoKRnJpIE5vdiAyMiAxMzoxMzowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRocmVhZHMuYzogZml4ZWQgaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBpbiB4bWxOZXdHbG9iYWxTdGF0ZQoJICB3aGljaCB3YXMgY2F1c2luZyBjcmFzaC4KCSogZ2xvYmFscy5jOiByZW1vdmVkIGR1cGxpY2F0ZSBjYWxsIHRvIGluaXR4bWxEZWZhdWx0U0FYSGFuZGxlcgoJICBpbiB4bWxJbml0aWFsaXplR2xvYmFsU3RhdGUuCgkqIHBhcnNlckludGVybmFscy5jOiBjbGVhbmVkIHVwIGN0eHQtPnNheCBpbml0aWFsaXNhdGlvbi4KCQpUaHUgTm92IDIxIDE1OjA1OjQ1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1vZGlmaWVkIHRoZSBleGlzdGluZyBBUElzCgkgIHRvIGhhbmRsZSBYSFRNTDEgc2VyaWFsaXphdGlvbiBydWxlcyBhdXRvbWF0aWNhbGx5LCBhbHNvIGFkZAoJICB4bWxJc1hIVE1MKCkgdG8gbGlieG1sMiBBUEkuIFNvbWUgdHdlYWtpbmcgdG8gbWFrZSBzdXJlCgkgIGxpYnhzbHQgc2VyaWFsaXphdGlvbiB1c2VzIGl0IHdoZW4gbmVlZGVkIHdpdGhvdXQgY2hhbmdpbmcKCSAgdGhlIGxpYnJhcnkgQVBJLgoJKiB0ZXN0L3hodG1sMSByZXN1bHQvbm9lbnQveGh0bWwxIHJlc3VsdC92YWxpZC94aHRtbDEueGh0bWwKCSAgcmVzdWx0L3hodG1sMTogYWRkZWQgYSBuZXcgdGVzdCBzcGVjaWZpY2FsbHkgZm9yIHhodG1sMSBvdXRwdXQKCSAgYW5kIHVwZGF0ZWQgdGhlIHJlc3VsdCBvZiBvbmUgWEhUTUwxIHRlc3QKCldlZCBOb3YgMjAgMTQ6MjQ6NTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyBwYXJzZXJJbnRlcm5hbHMuYyBlbmNvZGluZy5jOiBmaXhlZCAjOTkwODIKCSAgZm9yIHhpOmluY2x1ZGUgZW5jb2Rpbmc9Ii4uLiIgc3VwcG9ydCBvbiB0ZXh0IGluY2x1ZGVzLgoJKiByZXN1bHQvWEluY2x1ZGUvdHN0ZW5jb2RpbmcueG1sIHRlc3QvWEluY2x1ZGUvZG9jcy90c3RlbmNvZGluZy54bWwKCSAgdGVzdC9YSW5jbHVkZS9lbnRzL2lzb2xhdGluLnR4dCA6IGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGZpeGVkIHRoZSBnZW5lcmF0b3IKCSAgdGhlIG5ldyBzZXQgb2YgY29tbWVudHMgZ2VuZXJhdGVkIGZvciBkb2MvbGlieG1sMi1hcGkueG1sIHdlcmUKCSAgYnJlYWtpbmcgdGhlIHB5dGhvbiBnZW5lcmF0aW9uLgoKVHVlIE5vdiAxOSAyMzoyNTo0NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHJlcGFpciBzb21lIHByb2JsZW0gaWYgZ3RrLWRvYyBmYWlsIG9yIHN1Y2gKCSogY29uZmlndXJlLmluOiBwYXRjaCBmb3IgU29sYXJpcyBvbiBuZXcgYXV0b2NvbmYgY2xvc2VzICM5ODg4MCAKCSogZG9jL3BhcnNlZGVjbC5weTogcmVwYWlyIHRoZSBmcmlnZ2luZyBBUEkgYnVpbGRpbmcgc2NyaXB0LAoJICBkaWQgSSBzYXkgdGhhdCBweXRob24geG1sbGliIHN1Y2tzID8KCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbGlieG1sMi1yZWZzLnhtbDogcmVnZW5lcmF0ZWQsIHJlb3JkZXJpbmcKCSAgYW5kIHNvbWUgY29tbWVudCBhcmUgbm8gbW9yZSB0cnVuY2F0ZWQuCgpUdWUgTm92IDE5IDA5OjA5OjA0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBNYXJ0aW4gU3RvaWxvdiBwb2ludGVkIG91dCBhIHBvdGVudGlhbCBsZWFrIGluCgkgIHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQKCk1vbiBOb3YgMTggMTY6MDU6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBidWcgIzk4ODc5IGEgY29ybmVyIGNhc2Ugd2hlbiAwIGlzCgkgIGluY2x1ZGVkIGluIEhUTUwgZG9jdW1lbnRzIGFuZCB1c2luZyB0aGUgcHVzaCBwYXJzZXIuCgpNb24gTm92IDE4IDAwOjExOjI0IENFVCAyMDAyIEVSREkgR2VyZ28gPGNhY3R1c0BjYWN0dXMucnVsZXoub3JnPgoKCSogY29uZmlndXJlLmluIChQWVRIT05fU0lURV9QQUNLQUdFUyk6IElmIC0td2l0aC1weXRob24gaXMKCSAgc3BlY2lmaWVkLCBsb29rIGZvciB0aGUgUHl0aG9uIGludGVycHJldGVyIG5vdCBqdXN0IGluIHRoZQoJICBzcGVjaWZpZWQgcm9vdCBidXQgYWxzbyBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBGaXhlcyAjOTg4MjUKClN1biBOb3YgMTcgMjM6MzY6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhpbmcgYnVnICM5ODc5MiAsIG5vZGUgbWF5IGhhdmUgbm8gZG9jCgkgIGFuZCBkZXJlZmVyZW5jaW5nIHdpdGhvdXQgY2hlY2tpbmcgYWluJ3QgZ29vZCAuLi4KClN1biBOb3YgMTcgMTA6MjU6NDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjQuMjcKCSogZG9jLyogOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogdHJ5IHRvIG1ha2Ugc3VyZSB0aGUgdHV0b3JpYWwKCSAgYW5kIGFsbCB0aGUgZG9jcyBhcmUgYWN0dWFsbHkgcGFja2FnZWQgYW5kIGluIHRoZSBmaW5hbCBSUE1zCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiByZXN0b3JlCgkgIHhtbGxpbnQgLS1yZWNvdmVyIGZlYXR1cmUuCgpTYXQgTm92IDE2IDE2OjMwOjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhwYXRoLmM6IGZpeGluZyAjOTY5MjUgd2ljaCB3YXMgYWxzbyBkZXBlbmRhbnQgb24gdGhlCgkgIHByb2Nlc3Npbmcgb2YgcGFyc2VkIGVudGl0aWVzLCBhbmQgWFBhdGggY29tcHV0YXRpb24gb24gc3VzdGl0dWVkCgkgIGVudGl0aWVzLgoJKiB0ZXN0WFBhdGguYzogbWFrZSBzdXJlIGVudGl0aWVzIGFyZSBzdWJzdGl0dWVkLgoKRnJpIE5vdiAxNSAxNjoyMjo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgIzk2NTk0LCB3aGljaCB3YXMgdG90YWxseSBkZXBlbmRhbnQgb24gdGhlIAoJICBwcm9jZXNzaW5nIG9mIGludGVybmFsIHBhcnNlZCBlbnRpdGllcywgd2hpY2ggaGFkIHRvIGJlIGNoYW5nZWQuCgpGcmkgTm92IDE1IDEyOjE2OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06CgkgIHRyeWluZyB0byBmaXggYnVnICM5ODUxNyBhYm91dCBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UgdHJlZQoJKiBkb2MveG1sLmh0bWwgZG9jL0ZBUS5odG1sOiBmaXhlZCB0aGUgbGluayB0byBsaWJpY29udiAjOTQ1ODUKClRodSBOb3YgMTQgMTg6NDE6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBjbGVhbnVwCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBpbnRlZ3JhdGVkIG1pbmd3IGluIEpTY3JpcHQgY29uZmlndXJlCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IG1vZGlmaWVkIHRvIGFsbG93IG1pbmd3IGNvZXhpc3RlbmNlCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogaW50ZWdyYXRlZCBtaW5ndwoJKiB3aW4zMi9SZWFkbWUudHh0OiBjbGVhbnVwCgpUdWUgTm92IDEyIDIyOjA2OjQ1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogc3RyZW5ndGhlbiB0aGUgZ3VhcmQgaW4gdGhlIFBvcCBtYWNyb3MsCgkgIGxpa2UgaW4gdGhlIFhNTCBwYXJzZXIsIGNsb3NlcyBidWcgIzk3MzE1CgpUdWUgTm92IDEyIDIxOjU2OjM5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBmaXhlZCBidWcgIzk4MzM4ICwgZmF0YWxFcnJvciBTQVgKCSAgY2FsbGJhY2sgaXMgbmV2ZXIgdXNlZC4KClR1ZSBOb3YgMTIgMTM6MzI6NTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0FYIHN0cnVjdHVyZQoJICB3aGljaCB3YXMgYnJlYWtpbmcgeHNsdHByb2MKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBQZXRyIFBhamFzIGZvciBDREFUQSBub2RlcwoJKiB0cmVlLmM6IHBhdGNoIGZyb20gUGV0ciBQYWphcyBpbXByb3ZpbmcgeG1sR2V0Tm9kZVBhdGgoKQoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogcGF0Y2ggZnJvbSBQZXRlciBKb25lcwoJICByZW1vdmluZyBhIGxlYWsgaW4geG1sU0FYUGFyc2VNZW1vcnkoKSBhbmQgYWRkaW5nIHRoZQoJICBmdW5jdGlvbiB4bWxTQVhQYXJzZU1lbW9yeVdpdGhEYXRhKCkKCk1vbiBOb3YgMTEgMjA6NDc6MDMgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCglhZGRpbmcgcGRmIG9mIHR1dG9yaWFsLCBjaGFuZ2luZyB3ZWIgcGFnZSB0byBsaW5rIHRvIGl0CgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC5wZGYKCSogZG9jL3htbC5odG1sCgkqIGRvYy9kb2NzLmh0bWwKClN1biBOb3YgMTAgMjA6NDg6NTcgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9hcjAxczA4Lmh0bWwKCWFkZGluZyBmaWxlIHdoYXQgSSBmb3Jnb3QgZm9yIHR1dG9yaWFsCgoKU3VuIE5vdiAxMCAyMDozMzoxMyBNU1QgMjAwMiBKb2huIEZsZWNrICA8amZsZWNrQGlua3N0YWluLm5ldD4KCglBZGRpbmcgZW5jb2RpbmcgZGlzY3Vzc2lvbiB0byB0dXRvcmlhbAoJQWRkZWQ6CgkqIGRvYy90dXRvcmlhbC9pbWFnZXMvKi5wbmc6IERvY0Jvb2sgYWRtb25pdGlvbiBpbWFnZSBmaWxlcwoJKiBkb2MvdHV0b3JpYWwvYXBmLmh0bWwsIGFwZy5odG1sOiBuZXcgZ2VuZXJhdGVkIGh0bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVjb252ZXJ0LmM6IGNvbnZlcnNpb24gY29kZSBlbnRpdHkgZmlsZQoJY2hhbmdlZDoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbDogRG9jQm9vayBvcmlnaW5hbAoJKiBkb2MvdHV0b3JpYWwvKi5odG1sOiBnZW5lcmF0ZWQgaHRtbAoKRnJpIE5vdiAgOCAxNzo1OTozMiBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC8qLmg6IHJldGlyZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCSogZG9jL01ha2VmaWxlLmFtOiByZXRpcmVkIHhtbHdpbjMydmVyc2lvbi5oCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogcmV0aXJlZCB4bWx3aW4zMnZlcnNpb24uaAoKRnJpIE5vdiAgOCAxNjo1NTo0NyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIGFkZGl0aW9uYWwgc3ltYm9scwoJKiBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogZXhwb3J0ZWQgdGhlIHJlc3Qgb2YgdGhlIHhtbE1lbSogCgkgIHNpc3Rlcmhvb2QKCkZyaSBOb3YgIDggMTY6MDg6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBmaXhlZCBhIHR5cG8gcG9pbnRlZCBvdXQgYnkgSWdvcgoJKiB4cGF0aC5jOiB0cnkgdG8gc3BlZWQgdXAgbm9kZSBjb21wYXJlIHVzaW5nIGxpbmUgbnVtYmVycwoJICBpZiBhdmFpbGFibGUuCgpUaHUgTm92ICA3IDE1OjE2OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbWFrZSB4bWxGcmVlTm9kZSgpIGhhbmRsZSBhdHRyaWJ1dGVzIGNvcnJlY3RseS4KCldlZCBOb3YgIDYgMjM6NTE6MTEgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjYXRhbG9nLmM6IGNvbXBsZXRlZCB0aGUgIzk2OTYzIGZpeCwgYXMgcmVwb3J0ZWQgYnkgS2FybAoJICBFaWNod2FsZGVyCgpXZWQgTm92ICA2IDE2OjQ4OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IHRyaWVkIHRvIGZpeCBidWcgIzk3ODUyIHJlcG9ydGVkIGJ5IE5pY29sYXMgTm9mZmtlCgpTdW4gTm92ICAzIDEwOjQzOjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBzd2l0Y2hlZCB0aGUgb3JkZXIgb2YgYSBjb3VwbGUgb2YgaW5jbHVkZXMKCSAgdG8gZml4IGJ1Z3MgIzk3MTAwCgpUaHUgT2N0IDMxIDE3OjExOjQ2IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgYnVnICM5Njk2MywgcmV2ZXJ0ZWQgdG8gdGhlIG9sZCBiZWhhdmlvdXIgb2YKCSAgeG1sTG9hZENhdGFsb2dzIHRoYXQgdXNlZCB0byBzZXBhcmF0ZSBkaXJlY3RvcmllcyB3aXRoIGEgJzonLgoKVGh1IE9jdCAzMSAxNjo1NToyMSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB0aHJlYWRzLmM6IGltcHJvdmVtZW50cyB0byB0aGUgV2luZG93cy1zaWRlIG9mIHRocmVhZCBoYW5kbGluZwoJKiB0ZXN0VGhyZWFkcy5jOiBjb25kaXRpb25hbGx5IGV4Y2x1ZGVkIHVuaXN0ZC5oCgkqIHRlc3RUaHJhZHNXaW4zMi5jOiBicm9rZSBvdmVybG9uZyBsaW5lcwoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFkYXB0ZWQgdGhyZWFkLXJlbGF0ZWQgbWFjcm9zIHRvIHRoZSBuZXcKCSAgc2NoZW1lIGFuZCBmb3IgcHRocmVhZHMgb24gV2luZG93cwoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBpbnRyb2R1Y2VkIGEgbW9yZSBmbGV4aWJsZSB0aHJlYWQgYnVpbGQsIAoJICBhZGRlZCB0ZXN0VGhyZWFkc1tXaW4zMl0uYyB0byB0aGUgYnVpbGQKCSogd2luMzIvY29uZmlndXJlLmpzOiBpbnRyb2R1Y2VkIGEgbW9yZSBmbGV4aWJsZSB0aHJlYWQgY29uZmlnCgoyMDAyLTEwLTMxICBKb2huIEZsZWNrICA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbCAoYW5kLCBieSBpbXBsaWNhdGlvbiwgRkFRLmh0bWwpCglhZGRlZCBVVEYtOCBjb252ZXJzYWlvbiBGQVEgZnJvbSBNYXJjdXMgTGFiaWIgSXNrYW5kZXIKClR1ZSBPY3QgMjkgMTg6MzI6MzMgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjb25maWd1cmUuaW46IHJlbW92ZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IHJlbW92ZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCk1vbiBPY3QgMjggMTQ6MDE6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQnJpYW4gU3RhZmZvcmQgdG8gZml4IGEgYnVnCgkgIGluIHhtbFJlY29uY2lsaWF0ZU5zKCkKCk1vbiBPY3QgMjggMTM6NTE6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hyaXN0aWFuIEdsYWhuIHRvIGFsbG93CgkgIHhtbE5ld0NoaWxkKCkgb24gZG9jdW1lbnQgZnJhZ21lbnQgbm9kZXMKClNhdCBPY3QgMjYgMTU6Mjc6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBDaHJpc3RpYW4gR2xhaG4gZm91bmQgYSBwcm9ibGVtIHdpdGggYSByZWNlbnQKCSAgcGF0Y2ggdG8geG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcigpCgkqIHhtbHNjaGVtYXMuYzogQ2hhcmxlcyBCb3plbWFuIGZpeGVkIHNvbWUgU2NoZW1hcyB2YWxpZGF0aW9uCgkgIHByb2JsZW1zCgkqIHJlc3VsdC9zY2hlbWFzL2VsZW0qIHJlc3VsdC9zY2hlbWFzL3NlcSogdGVzdC9zY2hlbWFzLmVsZW0qCgkgIHRlc3Qvc2NoZW1hcy9zZXEqOiBhZGRlZCB0aGUgdGVzdCBjYXNlcyBmcm9tIENoYXJsZXMKCldlZCBPY3QgMjMgMTY6NDI6MjkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZy5oLmluIGxpYnhtbC5zcGVjLmluIGRvYy9NYWtlZmlsZS5hbToKCSAgc2VyaW91cyBjbGVhbnVwIG9mIHRoZSBzcGVjIGZpbGUgYW5kIGFzc29jaWF0ZWQgY2hhbmdlcwoJICBpbiB0aGUgTWFrZWZpbGVzLgoJKiB2YWxpZC5jOiB0cnkgdG8gcmVtb3ZlIHNvbWUgd2FybmluZ3Mgb24geDg2XzY0CgpXZWQgT2N0IDIzIDEwOjUzOjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBhZGRlZCB3aW5zb2NrY29tcGF0LmggdG8gRVhUUkFfRElTVCB0bwoJICBmaXggYnVnICM5NjU4NgoKVHVlIE9jdCAyMiAyMToxMzowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBNaWtoYWlsIFNvZ3JpbmUgcG9pbnRlZCBvdXQgYSBidWcgaW4gSFRNTAoJICBwYXJzaW5nLCBhcHBsaWVkIGhpcyBwYXRjaAoJKiByZXN1bHQvSFRNTC9hdHRyZW50cy5odG1sIHJlc3VsdC9IVE1ML2F0dHJlbnRzLmh0bWwuZXJyCgkgIHJlc3VsdC9IVE1ML2F0dHJlbnRzLmh0bWwuc2F4IHRlc3QvSFRNTC9hdHRyZW50cy5odG1sOgoJICBhZGRlZCB0aGUgdGVzdCBhbmQgcmVzdWx0IGNhc2UgcHJvdmlkZWQgYnkgTWlraGFpbCBTb2dyaW5lCgpUdWUgT2N0IDIyIDE5OjMzOjIwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvYnVpbGRfbGlieG1sLmNvbSB2bXMvY29uZmlnLnZtcyB2bXMvcmVhZG1lLnZtcwoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaAoJICBIVE1McGFyc2VyLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgdHJlZS5jIHRyaW9kZWYuaCB0cmlvbmFuLmMgdXJpLmMgeG1sSU8uYyB4cGF0aC5jOgoJICBBcHBsaWVkIHRoZSBWTVMgdXBkYXRlIHBhdGNoIGZyb20gQ3JhaWcgQS4gQmVycnkKCSogZG9jLyouaHRtbDogdXBkYXRlCgpUdWUgT2N0IDIyIDE2OjI3OjMxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIGVuY29kaW5nLmM6IG1hZGUgeG1sR2V0VVRGOENoYXIgcHVibGljCgpUdWUgT2N0IDIyIDE2OjI1OjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRpbmcgYSBncmVwIGNvbW1hbmQgdG8gLS1zaGVsbCBpbiB4bWxsaW50CgkgIGZvciBULlYuIFJhbWFuCgpUdWUgT2N0IDIyIDE2OjIzOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmM6IHRyaWVkIHRvIGZpeCBzb21lIG9mIHRoZSBwcm9ibGVtIHdpdGggLS1zZ21sCgpNb24gT2N0IDIxIDA5OjU3OjEwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdHJpZWQgdG8gZml4IGJ1ZyAjOTE1MDAgd2hlcmUgZG9jLT5jaGlsZHJlbiBtYXkKCSAgYmUgb3ZlcnJpZGVuIGJ5IGEgY2FsbCB0byB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnkoKQoKTW9uIE9jdCAyMSAwOTowNDozMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiB0cmllZCB0byBmaXggYnVnICM5MDk0NSB3LnIudC4gcGFyc2luZyBvZiBzeXN0ZW0KCSAgaWRlbnRpZmllcnMgaW4gU0dNTCBjYXRhbG9ncyBjb250YWluaW5nICcmJwoKU3VuIE9jdCAyMCAyMzozMTo0NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3R5cGVzLmM6IGZpeGVkIGJ1Z3Mgd2hlbiBwYXNzaW5nIHJlc3VsdCB2YWx1ZSB0cmVlCgkgIHRvIFB5dGhvbiBmdW5jdGlvbnMuCgpGcmkgT2N0IDE4IDEzOjE4OjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyB0aGUgcmVsZWFzZSBvZiAyLjQuMjYKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KCldlZCBPY3QgMTYgMjA6MDE6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIFhNTCBOYW1lc3BhY2UgY29tcGxpYW5jZSBidWcgcmVwb3J0ZWQgYnkKCSAgQWxleGFuZGVyIEdyaW1hbG92c2t5CgpXZWQgT2N0IDE2IDE3OjE4OjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBzZXJpYWxpemF0aW9uIG9mIHNjcmlwdCBhbmQgc3R5bGUgd2hlbgoJICB0aGV5IGFyZSBub3QgbG93ZXJjYXNlIChpLmUuIGFkZGVkIHVzaW5nIHRoZSBBUEkgdG8gdGhlIHRyZWUpLgoKV2VkIE9jdCAxNiAxNjozMTowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogbWFrZSB4bWxWYWxpZGF0ZURvY3VtZW50IGVtaXQgYSB3YXJuaW5nIG1zZyBpZiB0aGVyZQoJICBpcyBubyBEVEQsIHBvaW50ZWQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpXZWQgT2N0IDE2IDE2OjA1OjM4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IGZpeGVkIHRoZSB2YWxpZGF0aW9uIG9mIHNlcXVlbmNlcwoJICBjb250ZW50IG1vZGVsIHdoZW4gc29tZSBvZiB0aGUgYmxvY2tzIGhhdmUgbWluIG9yIG1heCwgYW5kIGEgY291cGxlCgkgIG9mIGJ1Z3MgZm91bmQgaW4gdGhlIHByb2Nlc3MuCgkqIHJlc3VsdC9zY2hlbWFzL2xpc3QwKiB0ZXN0L3NjaGVtYXMvbGlzdDAqOiBhZGRlZCBzb21lIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBPY3QgMTUgMTI6NDE6MDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFJFQURNRTogdXBkYXRlZCB0aGUgY29udGFjdCBpbmZvcm1hdGlvbnMKClR1ZSBPY3QgMTUgMTA6MzU6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiB1c2UgdGVzdCAtZiBpbnN0ZWFkIG9mIHRlc3QgLWUgc2luY2UgU29sYXJpcyAvYmluL3NoCgkgIG1pc3NlcyBpdCwgcmVwb3J0ZWQgYnkgUGV0ZXIgQnJheS4KCk1vbiBPY3QgMTQgMTc6Mzc6MzIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogaW52ZXN0aWdhdGluZyB4bWxOb2RlR2V0Q29udGVudCgpIG9uIG5hbWVzcGFjZSBub2RlcwoJICBhbmQgcmVtb3ZlZCBhIGZldyB3YXJuaW5ncwoKTW9uIE9jdCAxNCAxMzoxMjo1NSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IENocmlzdGlhbiBHbGFobiBmb3VuZCBhIHNtYWxsIGJ1ZyBpbiB0aGUgcHVzaCBwYXJzZXIuCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogY2xlYW5lZCB1cCBhbmQgbWFkZSB4bWxDaGVja0ZpbGVuYW1lCgkgIHB1YmxpYwoKV2VkIE9jdCAgOSAyMzoxMTowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogYWRkZWQKCSAgeG1sU2NoZW1hTmV3TWVtUGFyc2VyQ3R4dCB0byBwYXJzZSBhIHNjaGVtYXMgZnJvbSBhIG1lbW9yeSBhcmVhCgkqIHRlc3RTY2hlbWFzLmM6IGFkZGVkIC0tbWVtb3J5IHRvIHRlc3QgdGhlIG5ldyBpbnRlcmZhY2UKCldlZCBPY3QgIDkgMTY6MjI6NTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weSBkb2Mvc2VhcmNoLnBocDogaW50ZWdyYXRlZCB0aGUgWFNMVCBpbmRleGluZywKCSAgYSBmZXcgZml4ZWQgaW4gdGhlIGluZGV4ZXIsIGFkZGVkIGEgc2NvcGUgc2VsZWN0aW9uIGF0IHRoZQoJICBzZWFyY2ggbGV2ZWwuCgpXZWQgT2N0ICA5IDEyOjE4OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBKb2UgTWFyY3VzIENsYXJrZSByZXBvcnRlZCBhIHNlZ2ZhdWx0IG9uIEZCc2QgCgkgIHRoaXMgd2FzIGR1ZSB0byB1bmluaXRpYWxpemVkIHBhcnRzIG9mIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQKClR1ZSBPY3QgIDggMjM6MjQ6MjAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGV4Y2VwdCB0aGUgQVBJCgkgIGNoYW5nZSwgcHJlc2VydmVkIGl0LgoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyB0byBwb2ludCB0byB0aGUgc2VhcmNoIGVuZ2luZSBmb3IKCSAgaW5mb3JtYXRpb24gbG9va3VwIG9yIGJlZm9yZSBidWcvaGVscCByZXBvcnRzLgoKVHVlIE9jdCAgOCAxODo1MzozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2luZGV4LnB5IGRvYy9zZWFyY2gucGhwOiBhZGRlZCBtYWlsaW5nLWxpc3QgYXJjaGl2ZXMKCSAgaW5kZXhpbmcgYW5kIGxvb2t1cAoKVHVlIE9jdCAgOCAxMDoyNTowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdG8gZml4IHhtbE5vZGVHZXRQYXRoKCkKCk1vbiBPY3QgIDcgMTM6MTI6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weTogaW1wcm92ZWQgSFRNTCBpbmRleGluZwoJKiBkb2Mvc2VhcmNoLnBocDogbWFrZSB0aGUgcXVlcmllcyBhbHNvIGxvb2t1cCB0aGUgSFRNTCBiYXNlZCBpbmRleGVzCgpTdW4gT2N0ICA2IDIzOjUwOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHk6IGFkZGVkIEhUTUwgcGFnZSBpbmRleGluZyAKCkZyaSBPY3QgIDQgMTU6MzM6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogeG1sSU8uYzogZXh0ZW5kZWQgV2luZG93cyBwYXRoIG5vcm1hbGlzYXRpb24gdG8gZml4IHRoZSBiYXNlCgkgIHByb2JsZW0gaW4gbGlieHNsdC4KCSogY2F0YWxvZy5jOiBmaXhlZCBsaXN0IGhhbmRsaW5nIGluIFhNTF9DQVRBTE9HX0ZJTEVTCgpGcmkgT2N0ICA0IDEzOjQzOjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB0eXBvL2J1ZyBmb3VuZCBieSBDaHJpc3RpYW4gR2xhaG4KClN1biBTZXAgMjkgMTk6NDQ6MTAgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogeG1sSU8uYzogYXBwbGllZCBXaW5kb3dzIENFIHBhdGNoIGZyb20gSmF2aWVyLgoJKiB3aW4zMi93aW5jZTogbmV3IGRpcmVjdG9yeSwgY29udGFpbnMgc3VwcG9ydCBmb3IgdGhlIFBvY2tldFBDCgkgIHdpdGggV2luZG93cyBDRSBmcm9tIEphdmllci4KCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiByZW9yZ2FuaXNlZCwgcmVtb3ZlZCBkdXBsaWNhdGUgCgkgIGRlZmluaXRpb25zIGFuZCBhcHBsaWVkIFdpbkNFIHBhdGNoIGZyb20gSmF2aWVyLgoJKiBpbmNsdWRlL3dzb2NrY29tcGF0Lmg6IG5ldyBmaWxlLCBub3cgY29udGFpbnMgV2luU29jawoJICBjb21wYXRpYmlsaXR5IG1hY3Jvcy4KCSogd2luMzIvTWFrZWZpbGUubXN2YzogaW50cm9kdWNlZCBkb3VibGUtcnVuIGNvbXBpbGF0aW9uLgoKVGh1IFNlcCAyNiAxOTo0ODowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgcmVsZWFzZQoJICBvZiAyLjQuMjUKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRlaCBkb2NzIGFuZCB3ZWIgcGFnZXMuCgpUaHUgU2VwIDI2IDE3OjMzOjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGZpeGVkIGJ1ZyAjOTI1MTggdmFsaWRhdGlvbgoJICBlcnJvciB3ZXJlIG5vdCBjb3ZlcmluZyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLgoJKiByZXN1bHQvdmFsaWQvZGlhLnhtbCB0ZXN0L3ZhbGlkL2RpYS54bWw6IHRoZSB0ZXN0IHdhc24ndCB2YWxpZCwKCSAgaXQgd2FzIG1pc3NpbmcgdGhlIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBmb3IgdGhlIG5hbWVzcGFjZQoJKiByZXN1bHQvVkMvTlMzOiB0aGUgZml4IG5vdyByZXBvcnQgYnJlYWthZ2VzIGluIHRoYXQgdGVzdAoKVGh1IFNlcCAyNiAxNDozOTowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4aW5nIGJ1ZyAjOTQyNDEgb24gSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMKClRodSBTZXAgMjYgMTQ6MjU6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qOiBhZGRlZCB0aGUgMyBuZXcgbW9kdWxlcyB4bWxyZWdleHAgeG1sYXV0b21hdGEgYW5kIHhtbHVuaWNvZGUKCSAgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkb2NzIGFuZCB3ZWIgc2l0ZQoKVGh1IFNlcCAyNiAxMTo0NTo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgeHBhdGguYzogbWFrZSBzdXJlCgkgIEFUVFJJQlVURV9VTlVTRUQgaXMgYWx3YXlzIHB1dCBhZnRlciB0aGUgYXR0cmlidXRlIGRlY2xhcmF0aW9uLAoJICBub3QgYmVmb3JlCgpUaHUgU2VwIDI2IDExOjMzOjI4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBmaXhlZCBhIHN0dXBpZCBlcnJvcgoJICBicmVha2luZyB0aGUgcHl0aG9uIEFQSQoKVGh1IFNlcCAyNiAwMDozMTo0NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJpby5jIHRyaW8uaCB0cmlvZGVmLmggdHJpb25hbi5jIHRyaW9uYW4uaCB0cmlvcC5oCgkgIHRyaW9zdHIuYyB0cmlvc3RyLmg6IGFwcGxpZWQgYSB0cmlvIHVwZGF0ZSBwYXRjaCBmcm9tIAoJICBCam9ybiBSZWVzZSB3aGljaCBzaG91bGQgd29yayB3aXRoIE1pbkdXCgpUaHUgU2VwIDI2IDAwOjIxOjE4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGltcHJvdmluZyBzb21lIGRvY3VtZW50YXRpb24gY29tbWVudHMKCSogeG1scmVnZXhwLmM6IGZvdW5kIGFuZCBmaXhlZCBhIG1lbSBsZWFrIHdpdGggcHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYyBhbmQgdGhlIEFQSSBYTUwgZmlsZSBpbmNsdWRpbmcgdGhlIAoJICB4bWxyZWdleHAuaCB4bWxhdXRvbWF0YS5oIGFuZCB4bWx1bmljb2RlLmggaGVhZGVycwoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oCgkgIHB5dGhvbi90eXBlcy5jOiBhZGRlZCBhY2Nlc3MgdG8gdGhlIFhNTCBTY2hlbWFzIHJlZ2V4cHMgZnJvbQoJICBweXRob24KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWdleHAucHk6IGFkZGVkIGEgCgkgIHNpbXBsZSByZWdleHAgYmluZGluZ3MgdGVzdAoKVHVlIFNlcCAyNCAwODoxMDo0OCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sOgoJICBmaXhpbmcgZnRwIGxpbmtzIC0gdGhhbmtzIHRvIFZpdGFseSBPc3RhbmluCgpUdWUgU2VwIDI0IDE2OjA4OjE3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4ZWQgdGhlIGRhdGEgY2FsbGJhY2sgb24gdHJhbnNpdGlvbiBmdW5jdGlvbmFsaXR5CgkgIHdoaWNoIHdhcyBicm9rZW4gd2hlbiB1c2luZyB0aGUgY29tcGFjdCBmb3JtCgkqIHJlc3VsdC9zY2hlbWFzLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMsIGxlc3MgdmVyYm9zZSwgYWxsIHRlc3RzCgkgIHBhc3MgbGlrZSBiZWZvcmUKCSogRE9DQnBhcnNlci5jIHRlc3RBdXRvbWF0YS5jIHRlc3RDMTROLmMgdGVzdFNjaGVtYXMuYyB0ZXN0VGhyZWFkcy5jCgkgIHRlc3RYUGF0aC5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxsaW50LmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jCgkgIHhtbHNjaGVtYXN0eXBlcy5jIHhwYXRoLmMgcHl0aG9uL2xpYnhtbC5jOiByZW1vdmVkIGEgYnVuY2ggb2YKCSAgYW5ub3lpbmcgd2FybmluZ3MKCSogeHBhdGguYzogdHJ5IHRvIHByb3ZpZGUgYmV0dGVyIGVycm9yIHJlcG9ydCB3aGVuIHBvc3NpYmxlCgpTYXQgU2VwIDIxIDE0OjU2OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBicmVha2FnZSByYWlzZWQgYnkgSmFjb2IKCkZyaSBTZXAgMjAgMjA6MDg6MTggQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhZGRlZCBIQVZFX0VSUk5PX0ggZGVmaW5pdGlvbiBmb3IgcGFydHMKCSAgd2hpY2ggZG9uJ3QgdXNlIHNvY2tldHMKCkZyaSBTZXAgMjAgMTg6NDA6NTAgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogYXBwbGllZCB6bGliIHBhdGNoIGZyb20gRGFuaWVsIEdlaHJpZ2VyCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCB6bGliIHBhdGNoIGZyb20gRGFuaWVsIEdlaHJpZ2VyCgpGcmkgU2VwIDIwIDE1OjQwOjE0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCB0aGUgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGZvciAKCSAgcmVnZXhwIHN1cHBvcnQKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhcHBsaWVkIHRoZSBwYXRjaCBmcm9tIE1hcmsgVmFrb2MKCSAgZm9yIHJlZ2V4cCBzdXBwb3J0CgkKRnJpIFNlcCAyMCAxNTozNTozMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFzIHBvaW50ZWQgYnkgSWdvciBGbG9hdCBhbmQgRG91YmxlCgkgIHBhcnNpbmcgYWluJ3QgZmluaXNoZWQgeWV0CgpGcmkgU2VwIDIwIDE0OjAwOjE2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IHRyeWluZyB0byBmaXggIzg4NDEyIGJ5IGJ5cGFzc2luZwoJICBhbGwgdGhlIHB5dGhvbiBzdWJkaXIgaWYgcHl0aG9uIGFpbid0IGRldGVjdGVkCgpUaHUgU2VwIDE5IDIxOjQ2OjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBtYWRlIGNvbmZpZ3VyaW5nIHdpdGggcmVnZXhwcy9hdXRvbWF0YS91bmljb2RlIHRoZSBkZWZhdWx0CgkgIGJ1dCB3aXRob3V0IHNjaGVtYXMgQVRNCgkqIHRlc3RSZWdleHAuYyB2YWxpZC5jIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOgoJICBmaXhlZCB0aGUgcmVnZXhwIGJhc2VkIERURCB2YWxpZGF0aW9uIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkKCSAgcHJvYmxlbSBieSBzd2l0Y2hpbmcgdG8gYSBjb21wYWN0IGZvcm0gZm9yIGRldGVybWluaXN0IHJlZ2V4cHMKCSAgYW5kIGRldGVjdGluZyB0aGUgZGV0ZXJtaW5pc20gcHJvcGVydHkgaW4gdGhlIHByb2Nlc3MuIFNlZW1zCgkgIGFzIGZhc3QgYXMgdGhlIG9sZCBEVEQgdmFsaWRhdGlvbiBzcGVjaWZpYyBlbmdpbmUgOi0pIGRlc3BpdGUKCSAgdGhlIHJlZ2V4cCBidWlsdCBhbmQgY29tcGFjdGlvbiBwcm9jZXNzLgoKV2VkIFNlcCAxOCAxODoyNzoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZGV0ZXJtaW5pc20gaXMgZGVidWdnZWQsIG5ldyBEVEQgY2hlY2tpbmcgY29kZSBub3cgd29ya3MKCSAgYnV0IHhtbEZBQ29tcHV0ZXNEZXRlcm1pbmlzbSB0YWtlcyBmYXIgdG9vIG11Y2ggQ1BVIGFuZCB0aGUgd2hvbGUKCSAgc2V0IHVzdWVzIHRvbyBtdWNoIG1lbW9yeSB0byBiZSByZWFsbHkgdXNhYmxlIGFzLWlzCgpXZWQgU2VwIDE4IDAwOjU0OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGFub3RoZXIgc3R1cGlkIGJ1ZyBpbiB4bWxHZXROb2RlUGF0aCgpCgkqIHhtbGxpbnQuYzogLS12ZXJzaW9uIG5vdyByZXBvcnQgdGhlIG9wdGlvbnMgY29tcGlsZWQgaW4KClR1ZSBTZXAgMTcgMjM6NDg6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogc21hbGwgY2xlYW51cAoJKiB2YWxpZC5jIHhtbHJlZ2V4cC5jOiBzd2l0Y2hlZCBEVEQgdmFsaWRhdGlvbiB0byB1c2Ugb25seSByZWdleHAKCSAgd2hlbiBjb25maWd1cmVkIHdpdGggdGhlbS4gQSBiaXQgb2YgZGVidWdnaW5nIGFyb3VuZCB0aGUgZGV0ZXJtaW5pc20KCSAgY2hlY2tzIGlzIHN0aWxsIG5lZWRlZAoKVHVlIFNlcCAxNyAyMToyMjoyNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbF93cmFwLmg6IHN0dXBpZCBidWcgZm91bmQgYnkgbWF0dGFtQG5ldGNvdXJyaWVyLmNvbQoKVHVlIFNlcCAxNyAxOTo1ODoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogc21hbGwgcG9ydGFiaWxpdHkgZ2xpdGNoIGZpeGVkLgoKTW9uIFNlcCAxNyAxMjozODowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGluY29tcGxldGUgc3RlcHMgZm9yIHJlYWwvZG91YmxlIHN1cHBvcnQKCSogdGVzdEF1dG9tYXRhLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDogYXZvaWRpbmcgYSBjb21waWxhdGlvbiBwcm9ibGVtCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogc3RhcnRpbmcgdGhlIHdvcmsgdG93YXJkIHVzaW5nCgkgIHRoZSByZWdleHBzIGZvciBhY3R1YWwgRFREIHZhbGlkYXRpb24KCkZyaSBTZXAgMTMgMTY6NDY6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogY29zbWV0aWMgY2xlYW51cAoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBzdGFydGVkIAoJICBpbnRlZ3JhdGluZyBhIERURCB2YWxpZGF0aW9uIGxheWVyIGJhc2VkIG9uIHRoZSByZWdleHBzCgpUaHUgU2VwIDEyIDE4OjAxOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IGZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IEplZmYgR29mZiwKCSAgdGhlIGRldGVybWluaXNtIHdhcyB0ZXN0ZWQgYmVmb3JlIGVsaW1pbmF0aW5nIHRoZSBlcHNpbG9uCgkgIHRyYW5zaXRpb25zIDotKAoKVGh1IFNlcCAxMiAxNjo1Nzo0NSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogdXBkYXRlZCB0aGUgcHl0aG9uCgkgIGJpbmRpbmdzLCBhZGRlZCBjb2RlIGZvciBlYXNpZXIgRmlsZSBJL08sIGFuZCB0aGUgYWJpbGl0eSB0bwoJICBkZWZpbmUgYSByZXNvbHZlciBmcm9tIFB5dGhvbiBmaXhpbmcgYnVnICM5MTYzNQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2luYnVmLnB5CgkgIHB5dGhvbi90ZXN0cy9vdXRidWYucHkgcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5CgkgIHB5dGhvbi90ZXN0cy9yZXNvbHZlci5weSBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OiB1cGRhdGVkCgkgIGFuZCBhdWdtZW50ZWQgdGhlIHNldCBvZiBQeXRob24gdGVzdHMuCgpUdWUgU2VwIDEwIDIxOjA1OjI4IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYWRkZWQgbW9yZSByZWFkbWUgaW5mbyBmb3IgdGhlIGJpbmFyeQoJICBwYWNrYWdlLgoJClR1ZSBTZXAgMTAgMTQ6MTU6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpeGVkIGEgc3R1cGlkIG91dCBvZiBib3VuZCBhcnJheSBlcnJvcgoKVHVlIFNlcCAxMCAxMzowOToxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB4bWxJTy5jIHBhcnNlci5jIEhUTUxwYXJzZXIuYyBET0NCcGFyc2VyLmM6CgkgIG1lc3NpbmcgYXJvdW5kIHdpdGggc3VwcG9ydCBmb3IgV2luZG93cyBwYXRoLCBjbGVhbnVwcywKCSAgdHJ5aW5nIHRvIGlkZW50aWZ5IGFuZCBmaXggdGhlIHZhcmlvdXMgY29kZSBwYXRoIHRvIHRoZQoJICBmaWxlbmFtZSBhY2Nlc3MuIEFkZGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoKCkKClRodSBTZXAgIDUgMTY6MTk6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgdmFsaWQuYzogd29ya2luZyBvbiBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIG9mIHZhbGlkaXR5CgkgIGVycm9ycywgZXNwZWNpYWxseSBwcm92aWRpbmcgYW4gYWNjdXJhdGUgY29udGV4dC4KCSogcmVzdWx0L3ZhbGlkL3hsaW5rLnhtbC5lcnIgcmVzdWx0L3ZhbGlkL3Jzcy54bWwuZXJyOiBiZXR0ZXIKCSAgZXJyb3IgcmVwb3J0cyBpbiB0aG9zZSBjYXNlcy4KClRodSBTZXAgIDUgMTM6Mjk6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGVudGl0aWVzLmMgbGlzdC5jCgkgIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHhtbElPLmM6IGdldCByaWQgb2YgYWxsIHRoZSAKCSAgcGVycm9yKCkgY2FsbHMgbWFkZSBpbiB0aGUgbGlicmFyeSBleGVjdXRpb24gcGF0aHMuIFRoaXMKCSAgc2hvdWxkIGZpeCBib3RoICM5MjA1OSBhbmQgIzkyMzg1CgpUaHUgU2VwICA1IDEzOjEzOjE3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IG1lbW9yeSBsZWFrIHJlcG9ydGluZyB3YXMgYnJva2VuIGFmdGVyIGEgY2hhbmdlCgkgIG9mIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sIHVzZWQgdG8gYWN0aXZhdGUgaXQuCgpUaHUgU2VwICA1IDEzOjEwOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRyeSB0byBtYWtlIHRoZSBjb3B5IGZ1bmN0aW9uIHdvcmsgZm9yIG5vZGUgb2YKCSAgdHlwZSBYTUxfRE9DVU1FTlRfRlJBR19OT0RFLCB0aGV5IGFyZSBvbmx5IGNyZWF0ZWQgYnkgdGhlCgkgIERPTSBsYXllcnMgdGhvdWdoLCBub3QgbGlieG1sMiBpdHNlbGYuCgpUaHUgU2VwICA1IDEyOjU3OjM4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB0cnkgdG8gcHJvdmlkZSBmaWxlIGFuZCBsaW5lIGluZm9ybWF0aW9ucywgbm90IGFsbAoJICBtZXNzYWdlcyBhcmUgY292ZXJlZCwgYnV0IGl0J3MgYSAoZ29vZCkgc3RhcnQKClRodSBTZXAgIDUgMTI6NDk6MzUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHJlaW1wbGVtZW50ZWQgYSBsYXJnZSBwYXJ0IG9mIHRoZSBYSW5jbHVkZQoJICBwcm9jZXNzb3IsIHRyeWluZyB0byBtaW5pbWl6ZSByZXNvdXJjZXMgdXNlZCwgSmFtZXMgSGVuc3RyaWRnZQoJICBwcm92aWRlZCBhIGh1Z2UgdGVzdCBjYXNlIHdoaWNoIHdhcyBleGhpYml0aW5nIHNldmVyZSBtZW1vcnkKCSAgY29uc3VtcHRpb24gcHJvYmxlbXMuCgpUaHUgU2VwICA1IDEwOjA3OjEzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpc3RvcGhlIE1lcmxldCB0bwoJICByZWVzdGFibGlzaCBERVNURElSCgpXZWQgU2VwICA0IDE0OjEzOjM0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZXMgbGliYXJ5IHBhdGggZm9yIHg4Nl82NCBBTUQKClR1ZSBTZXAgIDMgMjE6MTQ6MTkgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRla2V5d29yZC5jCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWw6CgkocGx1cyByZXN1bHRpbmcgZ2VuZXJhdGVkIGh0bWwgZmlsZXMpCglmaXhpbmcgb25lIHNwb3QgSSBtaXNzZWQgaW4gdGhlIHR1dG9yaWFsIHdoZXJlIEkgaGFkbid0IGZyZWVkCgltZW1vcnkgcHJvcGVybHkKClNhdCBBdWcgMzEgMTk6MzE6MTcgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlYWRkYXR0cmlidXRlLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVhZGRrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVnZXRhdHRyaWJ1dGUuYwoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCgkqIGRvYy90dXRvcmlhbC8qLmh0bWw6Cgl1cGRhdGUgdHV0b3JpYWwgdG8gcHJvcGVybHkgZnJlZSBtZW1vcnkgKHRoYW5rcyB0byBDaHJpc3RvcGhlcgoJUi4gSGFycmlzIGZvciBwb2ludGluZyBvdXQgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUpCgkqIGRvYy90dXRvcmlhbC9pbWFnZXMvY2FsbG91dHMvKi5wbmc6CglhZGRlZCBpbWFnZSBmaWxlcyBzbyB0aGUgY2FsbG91dHMgYXJlIGdyYXBoaWNhbCwgbWFraW5nIGl0CgllYXNpZXIgdG8gcmVhZCAoIHVzZSAiLS1wYXJhbSBjYWxsb3V0LmdyYXBoaWNzIDEiIHRvIGdlbmVyYXRlCglodG1sIHdpdGggZ3JhcGhpY2FsIGNhbGxvdXRzKQoJCldlZCBBdWcgMjggMTM6NDQ6NTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9MaWJ4bWwyLUxvZ28tMTgweDE2OC5naWYgZG9jL0xpYnhtbDItTG9nby05MHgzNC5naWY6CgkgIG5pY2UgbG9nb3MgZ2VuZXJhdGVkIGJ5IE1hcmMgTGl5YW5hZ2UKCSogZG9jL3NpdGUueHNsICouaHRtbDogY2hhbmdlZCB0aGUgc3R5bGVzaGVldCB0byBzaG93IHRoZSBuZXcKCSAgbG9nbyBhbmQgcmVnZW5lcmF0ZWQgdGhlIHBhZ2VzCgpTdW4gQXVnIDI1IDE2OjM4OjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBoYW5kbGUgV2luZG93cyBzZXBlY2lmaWMgZmlsZTovL2xvY2FsaG9zdC8gc2VtYW50aWMgLi4uCgpUaHUgQXVnIDIyIDIyOjAzOjE5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwb3NzaWJsZSBtZW0gbGVhayBwYXRjaCBmcm9tIEphc29uIEFkYW1zCgpUaHUgQXVnIDIyIDE3OjI3OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBpbnRlZ3JhdGVkIHhmOmVzY2FwZS11cmkoKSBmcm9tIFdlc2xleSBUZXJwc3RyYQoJICBpbiB0aGUgWFF1ZXJ5IG5hbWVzcGFjZQoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjQKCSogZG9jLyouaHRtbDogdXBkYXRlZCB0aGUgd2ViIHBhZ2VzCgpUaHUgQXVnIDIyIDE2OjE5OjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBjbG9zaW5nIGJ1ZyAjODUyNTggYnkgZ2VuZXJhdGluZyBjb25kaXRpb25hbAoJICBjb21waWxlIGNoZWNrIHRvIGF2b2lkIGxpbmtpbmcgdG8gcm91dGluZXMgbm90IGNvbmZpZ3VyZWQgaW4uCgoyMDAyLTA4LTIyICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogYXV0b2dlbi5zaDogdXBkYXRlIGVycm9yIG1lc3NhZ2UgZm9yIG1pc3NpbmcgYXV0b21ha2UKClRodSBBdWcgMjIgMTE6NDU6NTAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogdHlwbyBpbiB0YXJnZXQgbmFtZSByZXN1bHRlZCBpbiBsaWJ4bWwyLnB5CgkgIHRvIG5vdCBiZSByZWJ1aWx0LiBmaXhlZCBERVNURElSIHNpbWlsYXJ5IHRvIHRoZSBsaWJ4c2x0IG9uZS4KClRodSBBdWcgMjIgMDk6MTU6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL3dpbjMyL01ha2VmaWxlLm1pbmd3OiB1cGRhdGVkIHdpdGggdmVyc2lvbiBmcm9tIAoJICBFbGl6YWJldGggQmFyaGFtIGF0IGh0dHA6Ly9zb2dneXRyb3VzZXJzLm5ldC9yZXBvc2l0b3J5LwoKVHVlIEF1ZyAyMCAxNjo0MDo0OCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBhZGRlZCB0aGUgcHJlZml4IGxvY2F0aW9uIHRvIHRoZSBpbmNsdWRlCglhbmQgbGliIHNlYXJjaCBwYXRoLgoJCjIwMDItMDgtMTggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBhdXRvZ2VuLnNoOiBoYXJkY29kZSBhY2xvY2FsLTEuNC9hdXRvbWFrZS0xLjQgc28gdGhhdCB1c2VycyB3aXRoCglib3RoIGF1dG9tYWtlIDEuNiBhbmQgMS40IGluc3RhbGxlZCBnZXQgdGhlIHJpZ2h0IGF1dG9tYWtlLiBNZWFucwoJY29tcGlsYXRpb24gZnJvbSBDVlMgd2lsbCBub3cgcmVxdWlyZSB0aGUgbGF0ZXN0IGF1dG9tYWtlIDEuNAoJcmVsZWFzZSwgb3IgbWFudWFsbHkgY3JlYXRpbmcgc3ltbGlua3MgY2FsbGVkICJhdXRvbWFrZS0xLjQiIGFuZAoJImFjbG9jYWwtMS40IgoKV2VkIEF1ZyAxNCAxODo1NDoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogbW9yZSBBTUQgNjQgaW5kdWNlZCBjaGFuZ2VzIGZyb20KCSAgRnJlZGVyaWMgQ3JvemF0CgpXZWQgQXVnIDE0IDE2OjQzOjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBvb3BzIEkgd2FzIG1pc3NpbmcgdGhlIHhtbDpiYXNlIGZpeHVwIHRvbwoJKiByZXN1bHQvWEluY2x1ZGUvKi54bWw6IHRoaXMgYWRkcyB4bWw6YmFzZSBhdHRyaWJ1dGVzIHRvIG1vc3QKCSAgcmVzdWx0cyBvZiB0aGUgdGVzdHMKCldlZCBBdWcgMTQgMTY6MDU6MzcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHF1aWNrIGJ1dCBhcHBhcmVudGx5IHdvcmtpbmcgaW1wbGVtZW50YXRpb24gb2YKCSAgeGk6ZmFsbGJhY2ssIHNob3VsZCBjbG9zZSBidWcgIzg5Njg0CgkqIE1ha2VmaWxlLmFtIHRlc3QvWEluY2x1ZGUvZG9jcy9mYWxsYmFjay54bWwgCgkgIHJlc3VsdC9YSW5jbHVkZS9mYWxsYmFjay54bWw6IGFkZGVkIGEgYmFzaWMgdGVzdCBmb3IgZmFsbGJhY2ssCgkgIGFuZCBydW4gd2l0aCAtLW5vd2FybmluZyB0byBhdm9pZCBhIHNwdXJpb3VzIHdhcm5pbmcKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gRnJlZGVyaWMgQ3JvemF0IGZvciBweXRob24KCSAgYmluZGluZ3Mgb24gQU1EIDY0Yml0cyBtYWNoaW5lcy4KCldlZCBBdWcgMTQgMTA6NDc6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB4bWxTQVhVc2VyUGFyc2VNZW1vcnkoKSByZWFsbHkgb3VnaHQgdG8gZmFpbCBpZgoJICB0aGUgY2FsbGVyIGRvbid0IHBhc3MgYSBTQVggY2FsbGJhY2sgYmxvY2suCgpXZWQgQXVnIDE0IDEwOjI5OjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgdGhlIHNhbWUgZml4IGZvciB0aGUgWE1MLTEuMCBuYW1lc3BhY2UgdG8KCSAgeG1sU2VhcmNoTnNCeUhyZWYoKSBhcyB3YXMgZG9uZSBmb3IgeG1sU2VhcmNoTnMoKQoKTW9uIEF1ZyAxMiAxNjo1MjowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLjM6IHNtYWxsIGNsZWFudXAgb2YgdGhlIG1hbiBwYWdlCgkqIEhUTUx0cmVlLmM6IGZpeGVkIGEgcG90ZW50aWFsIHByb2JsZW0gcmFpc2VkIGJ5IFBldHIgVmFuZHJvdmVjCgkgIHdoZW4gc2VyaWFsaXppbmcgSFJFRiBhdHRyaWJ1dGVzIGdlbmVyYXRlZCBieSBYU0xULgoKTW9uIEF1ZyAxMiAxNToyNDowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBpbnRlZ3JhdGVkIGEgY2xlYW5lZCB1cAoJICB2ZXJzaW9uIG9mIE1hcmMgTGl5YW5hZ2UnIHBhdGNoIGZvciBib29sZWFuIGF0dHJpYnV0ZXMgaW4gSFRNTAoJICBvdXRwdXQKCk1vbiBBdWcgMTIgMTQ6MTE6NTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6IGZpeGVkIHRoZSB0ZXN0IHJlc3VsdHMsIGluZGVudGluZwoJICBiZWhhdmlvdXIgY2hhbmdlZCBzbGlnaHRseQoKVGh1IEF1ZyAgOCAxMTowMDoyNiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMgd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZAoJbmV3IGMxNG4gZnVuY3Rpb24gdG8gV2luZG93cyBkZWYgZmlsZXMKCQpGcmkgQXVnICAyIDE2OjQ2OjQ2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBmaXhlZCBhIG1lbW9yeSBsZWFrIGluIGMxNG4gY29kZQoKU2F0IEF1ZyAgMyAwMDoxNTowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGFkZGluZyBhIG5ldyBBUEkgZm9yIENocmlzdGlhbgoJICBHbGFobjogeG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcgoJKiB2YWxpZC5jOiBwYXRjaCBmcm9tIFJpY2sgSm9uZXMgZm9yIHNvbWUgZ3JhbW1hciBjbGVhbnVwIGluCgkgIHZhbGlkYXRpb24gbWVzc2FnZXMKCSogcmVzdWx0L1ZDLyogcmVzdWx0L3ZhbGlkLyo6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlIHNvbWUgb2YgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMgb3V0cHV0cwoKVGh1IEF1ZyAgMSAxNDo1MDoyOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gZml4IGEgcHJvYmxlbSBpbiBuYW1lc3BhY2VkIGF0dHJpYnV0ZSBoYW5kbGluZwoJICByYWlzZWQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpUaHUgQXVnICAxIDEyOjE3OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmg6IE9wZW5pbmcgdGhlIGludGVyZmFjZQoJICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyIGFzIHJlcXVlc3RlZCBpbiAjODk0MTUKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vc2V0dXAucHkuaW46IGFwcGxpZWQgY2xlYW51cAoJICBwYXRjaGVzIGZyb20gTWFyYy1BbmRyZSBMZW1idXJnCgkqIHRyZWUuYzogZml4aW5nIGJ1ZyAjODkzMzIgb24gYSBzcGVjaWZpYyBjYXNlIG9mIGxvb3NpbmcgCgkgIHRoZSBYTUwtMS4wIG5hbWVzcGFjZSBvbiB4bWw6eHh4IGF0dHJpYnV0ZXMKCldlZCBKdWwgMzEgMjM6Mjc6NDIgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmMgaW5jbHVkZS9saWJ4bWwvYzE0bi5oOiBmaXhlZCBvbmUgbW9yZSBjMTRuICsgbmFtZXNwYWNlcwoJY29ybmVyIGNhc2UgZnJvbSBuZXcgTWVybGluJ3MgdGVzdCBzdWl0ZSBhbmQgYWRkZWQgYSBjYWxsYmFjawoJdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW1wcm92ZSB4bWxzZWMgcGVyZm9ybWFuY2UKCQoKTW9uIEp1bCAyOSAxODoyMjowMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogdHJ5aW5nIHRvIGZpeCB0aGUgPHN0eWxlPiBlc2NhcGluZyBwcm9ibGVtIGluCgkgIEhUTUwgc2VyaWFsaXphdGlvbiBidWcgIzg5MzQyCgpUaHUgSnVsIDI1IDAxOjMzOjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sLmh0bWwgZG9jLyouaHRtbDogYXBwbGllZCBzeW50YXggcGF0Y2ggZnJvbSBSaWNrIEpvbmVzCgkgIGFuZCByZWJ1aWx0IHRoZSB3ZWIgc2l0ZS4KCk1vbiBKdWwgMjIgMTE6MDQ6NDggUERUIDIwMDIgIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIF9wcml2YXRlIG1lbWJlciB0byB4bWxOcyBzdHJ1Y3QKClN1biBKdWwgMjEgMTc6NDg6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4aW5nIGJ1ZyAjODQ4NzYgYmFzZWQgb24gdGhlIHhtbCB3b3JraW5nCgkgIGNvZGUuCgpTdW4gSnVsIDIxIDE5OjE1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBlbmhhbmNlZCB0byBmaXggYnVnIDcyMDEyIChlcnJvcnMKCSAgd2hlbiB1c2luZyAnLWpYJyBtYWtlIHBhcmFtZXRlcikKCkZyaSBKdWwgMTkgMTY6MzU6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBzbWFsbCBhZGRpdGlvbmFsIGVuaGFuY2VtZW50IGZvciBib29sZWFucwoJICBjb21wYXJlZCB0byBub2Rlc2V0cwoKV2VkIEp1bCAxNyAxOTo0ODoxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogY2hhbmdlZCB0aGUgb3JkZXIgb2YgdGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uCgkgIGF0dHJpYnV0ZXMgaW4gdGhlIG1ldGEgdGFncyBkdWUgdG8gYSBidWcgaW4gSUUvTWFjCgpGcmkgSnVsIDEyIDA4OjQ1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZW5oYW5jZWQgaGFuZGxpbmcgb2YgYm9vbGVhbnMgKGVzcGVjaWFsbHkgJz0nCgkgIGFuZCAnIT0nIGZvciBub2Rlc2V0cykgLSBmaXhlcyBidWcgODUyNTYuICBBZGRlZCBuZXcKCSAgcm91dGluZSB4bWxYUGF0aE5vdEVxdWFsVmFsdWVzIGZvciBtb3JlIHByb3BlciBoYW5kbGluZwoJICBvZiAnIT0nIHdoZW4gbm9kZXNldHMgYXJlIGludm9sdmVkLgoKVGh1IEp1bCAxMSAyMTo0NTo1MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiBmaXhpbmcgUmVkIEhhdCBidWcgIzY4NjE0IGJ5IGFkZGluZyB0aGUKCSAgZG9jL3htbGNhdGFsb2dfbWFuLnhtbCB0byB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbgoKV2VkIEp1bCAxMCAyMToyNjoxMyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgkKCSogd2luMzIvTWFrZWZpbGUubXN2YzogQWRkZWQgYSBjb3B5ICoucGRiIHRvIGluc3RhbGwsIGZldyBoYXZlCgkgIGFza2VkIGZvciB0aGlzLgoJClNhdCBKdWwgIDYgMjE6NTU6NTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yMwoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcwoKU2F0IEp1bCAgNiAyMToxMToyMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgIzg0MTY5IGJ5IGZpeGluZyB0aGUKCSAgY29tbWVudCBvZiB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCB0byBkZXNjcmliZSB0aGUgCgkgIGVuY29kaW5nIGRldGVjdGlvbiBwYXJhbWV0ZXJzIGJldHRlci4KClNhdCBKdWwgIDYgMTk6NDQ6NTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyBidWcgIzc5MzMxIGluIG9uZSBwYXRoIHRoZSBsb29rdXAgZm9yCgkgIElEIGF0dHJpYnV0ZXMgb24gYSBuYW1lc3BhY2VkIG5vZGUgd2Fzbid0IGhhbmRsZWQgY29ycmVjdGx5IDotXAoKRnJpIEp1bCAgNSAyMDowNzo0MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB0cnlpbmcgdG8gZml4IDg3MjM1IGFib3V0IGRpc2NhcmRlZCB3aGl0ZQoJICBzcGFjZXMgaW4gdGhlIEhUTUwgcGFyc2VyLgoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgdGhlIG91dHB1dCBvZiBhIG51bWJlciBvZiBIVE1MCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBKdWwgIDEgMjM6MjM6NDEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciB0aGUgbmFtZXNwYWNlCgkgIGF4aXMgKyBmaXhlZCBhIG1lbW9yeSBlcnJvci4KCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGFwcGxpZWQgcGF0Y2hlcyBmcm9tIFBldGVyIEphY29iaQoJICByZW1vdmluZyBjdHh0LT50b2tlbiBmb3IgZ29vZC4KCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBhIGZldyBtZW1vcnkgbGVha3MKCSAgcG9wcGVkIG91dCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0cy4KCSogTWFrZWZpbGUuYW06IHBhdGNoIGZvciB0aHJlYWRzIG1ha2VmaWxlIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpGcmkgSnVuIDI4IDE5OjM4OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZW5oYW5jZWQgYmVoYXZpb3VyIG9mIHBvc2l0aW9uKCkgYWZ0ZXIgdXNhZ2Ugb2YKCSAgZXhwcmVzc2lvbnMgaW52b2x2aW5nIHByZWNlZGluZy1zaWJsaW5nIChldCBhbCkuCgpUdWUgSnVuIDE4IDA5OjU4OjQ4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIFBldGVyIEphY29iaSB0byBzb2x2ZSBhIHByb2JsZW0KCSAgd2hlbiBjb21waWxpbmcgd2l0aCB0aGUgV2F0Y29tIEMgb24gV2luMzIgCgkqIHJlc3VsdC9zY2hlbWFzLyouZXJyOiB0aGUgY2hhbmdlIG9mIGhhc2hpbmcgYWxnbyBnZW5lcmF0ZWQKCSAgcGVybXV0YXRpb25zIGluIHRoZSBvdXRwdXQKCk1vbiBKdW4gMTcgMTk6MDI6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogYXBwbGllZCBwYXRjaCBmcm9tIFNhbmRlciBWZXNpayBpbXByb3ZpbmcgdGhlIHF1YWxpdHkgb2YKCSAgdGhlIGhhc2ggZnVuY3Rpb24uCgoyMDAyLTA2LTE0ICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZGVidWdYTUwuYyBlbmNvZGluZy5jCgluYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyB0cmVlLmMgdXJpLmMgeG1sSU8uYwoJeG1sbGludC5jIHhwYXRoLmM6IHJlcGxhY2VkIHNwcmludGYoKSB3aXRoIHNucHJpbnRmKCkKCXRvIHByZXZlbnQgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93ICh0aGUgYnVnIHdhcyBwb2ludGVkCglvdXQgYnkgQW5qdSBQcmVtYWNoYW5kcmFuKSAKClRodSBKdW4gMTMgMTc6MzA6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmVkIGFuIHVuaW5pdGlhbGl6ZWQgZGF0YSBlcnJvciBwb3BwZWQgYnkgdmFsZ3JpbmQKCSAgb24gUEUgcmVmZXJlbmNlcwoKV2VkIEp1biAxMiAyMTozODo0NiBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sCglhZGRpbmcgdHV0b3JpYWwgcmVmZXJlbmNlIHRvIHRoZSB3ZWIgcGFnZQoKV2VkIEp1biAxMiAyMToyNjowOCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGUuaHRtbAoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWdldGF0dHJpYnV0ZS5jCglhZGRpbmcgc2VjdGlvbiB0byB0dXRvcmlhbCBhYm91dCByZXRyaWV2aW5nIGFuIGF0dHJpYnV0ZQoJdmFsdWUKClR1ZSBKdW4gMTEgMTI6MDc6MDQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoZXMgZnJvbSBQZXRlciBKYWNvYmkgdG8gc3RhcnQKCSAgdG8gZ2V0IHJpZCBvZiBjdHh0LT50b2tlbiwgd2l0aCBhIHBvc3NpYmxlIHNpZ25pZmljYW50IHNwZWVkCgkgIGltcHJvdmVtZW50IHRvIGJlIGdhaW5lZCBvbmNlIGRvbmUuIEJldHRlciBjb21wbGlhbmNlIHdpdGggUEUKCSAgcmVmZXJlbmNlcyBjb25zdHJ1Y3RzIGluIERURHMgdG9vLgoJKiB0ZXN0L3ZhbGlkL3RbMC05XSogcmVzdWx0L3ZhbGlkL3RbMC05XSo6IGFkZGVkIGEgc2V0IG9mIHRlc3RzCgkgIGZyb20gUGV0ZXIgdG9vCgpUdWUgSnVuIDExIDA5OjI1OjEyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogQmFiYWsgVmFoZWRpcG91ci1LdW56ZSByZXBvcnRlZCB0aGF0IG9wZW5UYWcgaW4gCgkgIHhtbFBhcnNlRWxlbWVudCB3YXMgbGlrZWx5IHRvIGhhdmUgYmVlbiBkZWFsbG9jYXRlZCBhdCB0aGUKCSAgdGltZSBvZiB0aGUgcmVwb3J0LCBwb3NzaWJseSBsZWFkaW5nIHRvIHNlZ2ZhdWx0LiBKdXN0IHJlcG9ydAoJICB0aGUgdGFnIG5hbWUgbm93LgoKTW9uIEp1biAxMCAxODowMDowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciBYUGF0aCBzdWJzdHJpbmcoKSBmdW5jdGlvbgoJKiByZXN1bHQvWFBhdGgvZXhwci9zdHJpbmdzIHRlc3QvWFBhdGgvZXhwci9zdHJpbmdzOiBuZXcgc2V0IG9mIHRlc3RzCgoyMDAyLTA2LTA2ICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHhtbElPLmM6IHBhdGNoIGZyb20gUmFjaGVsIEhlc3RpbG93IHRvIGZpeCBidWcgIzg0MzQwCgpXZWQgSnVuICA1IDE5OjE0OjQ5IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy9GQVEuaHRtbAoJZml4aW5nIHR5cG9zIGluIEZBUSwgdGhhbmtzIHRvIFJvYmVydCBGdW5uZWxsIGZvciB0aGUKCWVkaXRpbmcgaGVscAoKV2VkIEp1biAgNSAxNDo1MDoyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUzogZ290IGNvbXBsYWludHMgZnJvbSBycG1saW50IHRoYXQgaXQgd2FzIGVtcHR5CgpUdWUgSnVuICA0IDA5OjA5OjE4IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBhZGRlZCBkb2MvdHV0b3JpYWwsIGluY2x1ZGluZzoKCWFwYS5odG1sCglhcGIuaHRtbAoJYXBjLmh0bWwKCWFwZC5odG1sCglhcjAxczAyLmh0bWwKCWFyMDFzMDMuaHRtbAoJYXIwMXMwNC5odG1sCglhcjAxczA1Lmh0bWwKCWFyMDFzMDYuaHRtbAoJaW5jbHVkZWFkZGF0dHJpYnV0ZS5jCglpbmNsdWRlYWRka2V5d29yZC5jCglpbmNsdWRla2V5d29yZC5jCglpbmNsdWRlc3RvcnkueG1sCglpbmRleC5odG1sCgl4bWx0dXRvcmlhbC54bWwKCWxpYnhtbCB0dXRvcmlhbCwgaW5jbHVkaW5nIGdlbmVyYXRlZCBodG1sCgpNb24gSnVuICAzIDIxOjIxOjI2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogcmVzdWx0L2MxNG4vZXhjLXdpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgcmVzdWx0L2MxNG4vd2l0aG91dC1jb21tZW50cy9tZXJsaW4tYzE0bi10d28tKgoJICB0ZXN0L2MxNG4vZXhjLXdpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdC9jMTRuL3dpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdEMxNE4uYyBNYWtlZmlsZS5hbTogYWRkZWQgbWVybGluLWMxNG4tdHdvLnRhci5neiB0ZXN0cyBmb3IgCgljMTRuL2V4Yy1jMTRuIGFuZCBzbGlnaHRseSBtb2RpZmllZCB0ZXN0IHNjcmlwdCB0byBoYW5kbGUKCXRoZXNlIHRlc3QgY2FzZXMKCSogYzE0bi5jOiBmaXhlZCBidWdzIGZvciBjb21wbGljYXRlZCBub2RlcyBzZXQgKG5hbWVzcGFjZQoJd2l0aG91dCBub2RlIGFuZCBvdGhlcnMgZnJvbSBtZXJsaW4tYzE0bi10d28udGFyLmd6KQoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYzogIm9wZW5lZCIgeG1sWFBhdGhOb2RlU2V0RnJlZU5zKCkgZnVuY3Rpb24KCWZvciB4bWxzZWMgcGVyZm9ybWFuY2UgcGF0Y2gKCSogeHBhdGguYzogZml4ZWQgc2VsZjo6bm9kZSgpIGZvciBuYW1lc3BhY2VzIGFuZCBhdHRyaWJ1dGVzCgpNb24gSnVuIDAzIDAwOjA0OjIxIDIwMDIgQ2hlbWEgQ2Vsb3JpbyA8Y2hlbWFAeGltaWFuLmNvbT4KCgkqIHRyZWUuaDogYWRkZWQgeG1sRG9jRm9ybWF0RHVtcCB3aGljaCBpcyBqdXN0IGFzIHhtbERvY0R1bXAKCSAgYnV0IHdpdGggdGhlIGZvcm1hdCBwYXJhbWV0ZXIKCSogdHJlZS5jOiBtYWRlIHhtbERvY0R1bXAgYSB3cmFwcGVyIGFycm91bmQgeG1sRG9jRm9ybWF0RHVtcAoKRnJpIE1heSAzMSAxMjoxNjo0OCAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIE1ha2VmaWxlLmFtOiB1cGRhdGVkIGMxNG4gdGVzdHMgc3VpdGUKCSogYzE0bi5jOiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBmb3IgcHJldmlvdXMgYzE0biBwYXRjaAoKRnJpIE1heSAzMSAxMTo0NzoxMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFub3RoZXIgcGVyb2Zvcm1hbmNlIHBhdGNoIGZyb20gUGV0ZXIgSmFjb2JpLCB0aGF0CgkgIHRpbWUgb24gcGFyc2luZyBhdHRyaWJ1dGUgdmFsdWVzLgoKVGh1IE1heSAzMCAyMzozNDoyNyAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9jMTRuLyogdGVzdC9jMTRuLyo6IEMxNE4gdGVzdHMgaW50ZWdyYXRlZAoJaW50byBMaWJYTUwyIHRlc3Qgc3VpdGUKClRodSBNYXkgMzAgMjE6MjM6MDYgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmM6IHByb3BhZ2F0aW5nIHhwYXRoIGFuY2Vzc3RvcnMgbm9kZSBmaXggdG8gYzE0bgoJcGx1cyBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB0byByZWR1Y2UgbnVtYmVyIG9mCgltYWxsb2NzCgkqIHhwYXRoLmM6IGZpeGVkIGFuY2VzdG9ycyBheGlzIHByb2Nlc3NpbmcgZm9yIG5hbWVzcGFjZSBub2RlcwoKV2VkIE1heSAyOSAxMDoyMTozOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogcGVyZm9ybWFuY2UgcGF0Y2ggZnJvbQoJICBQZXRlciBKYWNvYmkKCk1vbiBNYXkgMjcgMjM6MTg6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yMgoKTW9uIE1heSAyNyAxNjo0NDowNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjCgkgIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDogZml4aW5nICM3OTMzNCBtYWtpbmcgaHRtbFBhcnNlRG9jdW1lbnQKCSAgYSBwdWJsaWMgZW50cnkgcG9pbnQuCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBBUEkgYW5kIGRvY3MKCk1vbiBNYXkgMjcgMTQ6MTY6MjggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyB0byBmaXggYSBwcm9ibGVtIGludHJvZHVjZWQKCSAgaW4gdGhlIHByZXZpb3VzIHBhdGNoIGFuZCBwb2ludGVkIGJ5IE5vcm0KCkZyaSBNYXkgMjQgMTM6MTA6MjIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhpbmcgYnVnICM4MTExMgoKRnJpIE1heSAyNCAxMzowMzoyNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGZpeGluZyBidWcgIzgyODQ4CgpGcmkgTWF5IDI0IDA5OjU0OjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nLmZ1bGw6IEFsZWtzZXkncyBjb21taXQgY2hhbmdlZCB0aGUKCSAgb3V0cHV0IG9mIG9uZSBjYXRhbG9nIHRlc3QKCkZyaSAyNCBNYXkgMjAwMiAxMjoxNzo0NSBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGdsb2JhbC5kYXRhIGdsb2JhbHMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIAoJd2luMzIvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IGNoYW5nZWQKCWRlZmF1bHQgdmFsdWUgZm9yIGdsb2JhbCBwYXJhbWV0ZXIgeG1sSW5kZW50VHJlZU91dHB1dCB0byAxIGFuZAoJaW50cm9kdWNlZCBuZXcgZ2xvYmFsIHBhcmFtZXRlciB4bWxUcmVlSW5kZW50U3RyaW5nICh0aGUgc3RyaW5nCgl1c2VkIHRvIGRvIG9uZS1sZXZlbCBpbmRlbnQpIHdpdGggZGVmYXVsdCB2YWx1ZSAiICAiIChhcyBpdCB3YXMKCWluIHRyZWUuYykKClRodSBNYXkgMjMgMTM6NTU6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBNZXJpam4gQnJvZXJlbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2hlbiBjb21waWxpbmcKCSAgd2l0aCB0cmlvIGFuZCBzY2hlbWFzLgoKV2VkIE1heSAyMiAxMTo1Nzo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIHRvIGZpeCB0aGUgcHJvYmxlbSByYWlzZWQgaW4KCSAgaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8yMDAyLUFwcmlsL21zZzAwMjQ2Lmh0bQoKV2VkIE1heSAyMiAwODozODoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhIGJpdCBvZiB3b3JrIG9uIGltcG9ydC4KCSogeG1sc2NoZW1hc3R5cGVzLmM6IENoYXJsZXMgQm96ZW1hbiBwcm92aWRlZCBhIGNvbXBhcmUgZnVuY3Rpb24KCSAgZm9yIGRhdGUvdGltZSB0eXBlcyBzbyBtaW4vbWF4IGZhY2V0IHJlc3RyaWN0aW9ucyBzaG91bGQgd29yaywKCSAgaW5kZXRlcm1pbmF0ZSBjb21wYXJpc29ucyByZXR1cm4gYW4gZXJyb3IgaW5zdGVhZCBvZiBlcXVhbC4KCSogdGVzdC9zY2hlbWFzL2RhdGVfMCogcmVzdWx0L3NjaGVtYXMvZGF0ZV8wXzA6IHNwZWNpZmljIHRlc3QKCSAgZnJvbSBDaGFybGVzIEJvemVtYW4gdG9vCgpTYXQgTWF5IDE4IDA5OjU0OjEyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuMyBkb2MvYnVpbGREb2NCb29rQ2F0YWxvZzogYXBwbHkgYSBjb3VwbGUgb2YgcGF0Y2hlcwoJICBmcm9tIENocmlzdGlhbiBDb3JuZWxzc2VuIGZpeGluZyB0aGUgbWFuIHBhZ2VzIGFuZCB0aGUgQ2F0YWxvZwoJICBidWlsZGluZyBzY3JpcHQuCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6IG5vdGhpbmcgbmV3IHlldAoJICBuZXh0IHN0ZXAgaXMgPHhzOmltcG9ydD4gSSBub3cgaGF2ZSBhIHJlYXNvbmFibGUgdW5kZXJzdGFuZGluZwoJICBvZiBob3cgaXQgd29ya3MuCgpUaHUgTWF5IDE2IDEwOjQzOjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIGEgc21hbGwgYnVmZmVyIHBlcmZvcm1hbmNlIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpXZWQgTWF5IDE1IDAwOjI1OjM0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZXhwb3J0ZWQgeG1sWFBhdGhOb2RlU2V0QWRkTnMoKQoKVHVlIE1heSAxNCAxMzowMDo0OCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nIGFuIFhQYXRoIGZ1bmN0aW9uIGV2YWx1dGF0aW9uIGJ1ZyBwb2ludGVkIG91dAoJICBieSBBbGV4ZXkgRWZpbW92IHdoZXJlIHRoZSBjb250ZXh0IHdhcyBsb3N0IHdoZW4gZXZhbHVhdGluZwoJICB0aGUgZnVuY3Rpb24gYXJndW1lbnRzCgpNb24gMTMgTWF5IDIwMDIgMTE6Mzc6MzkgUE0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IG1ha2VkIHhtbFhQYXRoTm9kZVNldEFkZE5zKCkgCgkgIGZ1bmN0aW9uIHB1YmxpYyBmb3IgWE1MU2VjIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMKCk1vbiBNYXkgMTMgMTI6MzI6MjIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgOiBmaXhlZCBhIHByb2JsZW0KCSAgd2l0aCB0aGUgSFRNTCBwYXJzZXIgcG9pbnRlZCBieSBHYXJ5IEJlbnNvbgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5OiBzZGRpbmcgdGhlCgkgIGV4YW1wbGUKClRodSAwOSBNYXkgMjAwMiAxMToxOTowMCBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjODExNTkgKG1lbW9yeSBncm93dGggaW4gU0FYKQoJClR1ZSAwNyBNYXkgMjAwMiAwOToyMDoyMSBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogeHBhdGguYzogZml4ZWQgYnVnICM3ODg1OCAodGhlIHJlYWwgZml4KQoKU2F0IDA0IE1heSAyMDAyIDExOjU2OjMxIFBNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgIzc4ODU4IChxdWljayBhbmQgZHVydHkgZml4IHRvIGhpZGUgdGhlIHByb2JsZW0pCgkKU3VuIE1heSAgNSAwODo1NzowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBtb2RpZmllZCB4bWxOb2RlU2V0QmFzZSB0byBhbGxvdyBjaGFuZ2luZyB0aGUKCSAgYmFzZSBvZiBhIGRvY3VtZW50LgoKRnJpIE1heSAgMyAwOToyMDo0MSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHBhdGNoIENoYXJsZXMgQm96ZW1hbiBmb3IgdmFsaWRhdGlvbiBvZgoJICBhbGwgdGhlIGRhdGUsIHRpbWUsIGFuZCBkdXJhdGlvbiB0eXBlcwoJKiB0ZXN0L3NjaGVtYXMvZHVyXzAqIHJlc3VsdC9zY2hlbWFzL2R1cl8wKjogYXNzb2NpYXRlZCB0ZXN0cwoJKiBjb25maWd1cmUuaW46IGZpeGVkIGFuIGVycm9yIHBvaW50ZWQgYnkgYW4gdXNlcgoJKiB4bWwyLWNvbmZpZy5pbjogZml4ZWQgYW4gZXJyb3IgcG9pbnRlZCBieSBhbiB1c2VyCgpXZWQgMDEgTWF5IDIwMDIgMTE6Mjk6MjcgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYyB4bWxJTy5jOiBleHBvcnRlZCBkZWZhdWx0CgknZmlsZTonLCAnaHR0cDonIGFuZCAnZnRwOicgcHJvdG9jb2xzIGlucHV0IGhhbmRsZXJzIAoJYW5kIG1ha2VkIHByb3RvY29scyBjb21wYXJpc3NvbiBjYXNlIGluc2Vuc2l0aXZlCgpUdWUgQXByIDMwIDE2OjI5OjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IE5ldmVuIEhhcyBkZXRlY3RlZCBhIHR5cG8KClR1ZSBBcHIgMzAgMDg6NDg6MTEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEFVVEhPUlMgSEFDS0lORzogYWRkZWQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSAgYXMgb25lIG9mIHRoZSBwZXJzb25zIGFsbG93ZWQgdG8gY29tbWl0IGRpcmVjdGx5IHRvIHRoZQoJICBtb2R1bGUuCgpNb24gQXByIDI5IDE3OjQ4OjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMjEKCSogdmFsaWQuYzogcmFpc2VkIGEgdG9vIGxvdyBsaW1pdAoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcyAKCldlZCBBcHIgMjQgMTM6NDE6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL2Z1bmN0aW9ucwoJICByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgcmVzdWx0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCgkgIHhwYXRoLmM6IGFub3RoZXIgWFBhdGggY29uZm9ybWFuY2UgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzCgpUdWUgQXByIDIzIDE5OjUwOjQwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIHZhbGlkYXRpb24gb2YgYXR0cmlidXRlIGdyb3Vwcy4KCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiBhZGRlZCBhbiBleGFtcGxlIGZyb20gdGhlIHByaW1lcgoKVHVlIEFwciAyMyAwOToxMTozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsgb24gU2NoZW1hcwoJKiB0ZXN0L3NjaGVtYXMgcmVzdWx0L3NjaGVtYXM6IHVwZGF0ZWQgdGhlIHRlc3QgbGlzdAoKTW9uIEFwciAyMiAxNzo1OToxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogVE9ETzogdXBkYXRlZCBhIGJpdAoJKiBwYXJzZXIuYzogbWFkZSBhIGNvbW1lbnQgbW9yZSBzcGVjaWZpYwoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yayBvbiB0aGUKCSAgU2NoZW1hcyBjb25mb3JtYW5jZS4KCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiB1cGRhdGVkIHRoZSB0ZXN0IGxpc3QKClNhdCBBcHIgMjAgMTk6MzY6MzkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oOgoJICBpbXBsZW1lbnRpbmcgeHM6YWxsIHdpdGggbWluT2NjdXJzID0gMAoJKiB0ZXMvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIG1vcmUgdGVzdHMgY292ZXJpbmcKCSAgeHM6YWxsCgpTYXQgQXByIDIwIDA5OjIyOjUwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFsbCBwYXJ0aWNsZSwgdGhpcwoJICBtYXkgbmVlZCB0byBiZSByZXZpc2l0ZWQgZm9yIGNhc2Ugd2hlcmUgbm90IGFsbCB0cmFuc2l0aW9ucwoJICBtdXN0IGJlIGNyb3NzZWQuCgpGcmkgQXByIDE5IDE4OjI2OjA0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFub3RoZXIgZW50aXR5IHByb2Nlc3NpbmcgdXBkYXRlIGZyb20gTWFya3VzIEhlbmtlCgpGcmkgQXByIDE5IDE3OjE0OjI0IENFU1QgMjAwMiBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW9uYW4uYzogZml4ZWQgY3Jhc2ggb24gT1NGLzEKCkZyaSBBcHIgMTkgMDk6MDA6NTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogbW9yZSBTY2hlbWFzIHdvcmsKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgbW9yZSB0ZXN0cyBjb21pbmcKCSAgZnJvbSB0aGUgc3BlYy4KClRodSBBcHIgMTggMjM6MDA6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluIHJlZmxlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlCgkgIEV4Y0MxNE4gc3BlY2lmaWNhdGlvbgoKVGh1IEFwciAxOCAxODozODozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIE1hcmt1cyBIZW5rZSwgZml4IGZvciByZWN1cnNpdmUgZW50aXRpZXMuCgpUaHUgQXByIDE4IDE3OjQ5OjI0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXggYSBwcm9ibGVtIHdpdGggc3RyaW5nKCkgb24gYSBkb2N1bWVudCBub2RlLgoKVGh1IEFwciAxOCAxNjo0MDo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1sc2NoZW1hcy5jOiBtb3JlIFNjaGVtYXMgd29yawoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBtb3JlIHRlc3RzIGNvbWluZwoJICBmcm9tIHRoZSBzcGVjLgoKVGh1IEFwciAxOCAxMzo1Mjo1MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgJiBzZXJpYWxpemF0aW9uIGJ1ZyBpbnRyb2R1Y2VkIGluIDIuNC4yMAoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgYSBmZXcgdGhpbmdzIGluIHRoZSByZXN1bHRzCgpXZWQgQXByIDE3IDIwOjM0OjM3IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZWxpbWluYXRlZCAnZGVjbGFyYXRpb24gZGlmZmVyZW50IHRoYW4KCSBwcm90b3R5cGUnIHdhcm5pbmcKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiAicmVzb2x2ZWQiIGNvbmZsaWN0cyB3aXRoIGVycm5vLmgKCldlZCBBcHIgMTcgMTg6MjY6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oOiBtb3JlIHdvcmsKCSAgb24gdGhlIGF1dG9tYXRhIGludGVyZmFjZXMgYW5kIGRlYnVnIG9mIGNvdW50ZWQgY2hvaWNlcwoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBhIG51bWJlciBvZiB0ZXN0cwoKV2VkIEFwciAxNyAxMTowMzowMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDoKCSAgYSBiaXQgb2Ygd29yayBvbiBTY2hlbWFzCgkqIHRlc3RTY2hlbWFzLmM6IHRyeSB0byBtYWtlIGl0IG1vcmUgdXNlZnVsCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyogTWFrZWZpbGUuYW06IGNoYW5nZWQgdGhlCgkgIFNjaGVtYXMgcmVncmVzc2lvbiB0ZXN0IHByb2NlZHVyZSwgc3RhcnRlZCBhZGRpbmcgYSBmZXcgc2FtcGxlcwoKVHVlIEFwciAxNiAxOTo1MjowMSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGl6bGF0a292aWNAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogdGhyZWFkcy5jOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogd2luMzIvYmNiNTogTmV3IGRpcmVjdG9yeSBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSBwcm9qZWN0IGZpbGVzICAgICAgIAoKVHVlIEFwciAxNiAxOTo0Njo1NSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGl6bGF0a292aWNAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBVcGRhdGUgZm9yIFhNTCBTY2hlbWEgc3VwcG9ydAoJKiB3aW4zMi9jb25maWd1cmUuanM6IFVwZGF0ZSBmb3IgWE1MIFNjaGVtYSBzdXBwb3J0CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogVXBkYXRlIGZvciBYTUwgU2NoZW1hIHN1cHBvcnQKClR1ZSBBcHIgMTYgMTc6NDY6NDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIFRPRE9fU0NIRU1BUyBjb25maWd1cmUuaW4gZ2VuVW5pY29kZS5weSB0ZXN0QXV0b21hdGEuYwoJIHRlc3RSZWdleHAuYyB0ZXN0U2NoZW1hcy5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJIHhtbHVuaWNvZGUuYyBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oCgkgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmggaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oCgkgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmggaW5jbHVkZS9saWJ4bWwveG1sdW5pY29kZS5oCgkgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIDogbWVyZ2VkIHRoZSBjdXJyZW50IHN0YXRlIG9mCgkgWE1MIFNjaGVtYXMgaW1wbGVtZW50YXRpb24sIGl0IGlzIG5vdCBjb25maWd1cmVkIGluIGJ5IGRlZmF1bHQsCgkgYSBzcGVjaWZpYyAtLXNjaGVtYXMgY29uZmlndXJlIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4KCSogdGVzdC9hdXRvbWF0YSB0ZXN0L3JlZ2V4cCB0ZXN0L3NjaGVtYXMgTWFrZWZpbGUuYW0KCSAgcmVzdWx0L2F1dG9tYXRhIHJlc3VsdC9yZWdleHAgcmVzdWx0L3NjaGVtYXM6CgkgIG1lcmdlZCBhdXRvbWF0YS9yZWdleHAvc2NoZW1hcyByZWdyZXNzaW9uIHRlc3RzCgpUdWUgQXByIDE2IDA5OjQ4OjQ0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBHYXJ5IGZvdW5kIGEgY29tcGlsZSB0aW1lIHByb2JsZW0sIGZpeGVzICM3ODgyMwoKTW9uIEFwciAxNSAxOToxMTozNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNlIG9mIDIuNC4yMAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKTW9uIEFwciAxNSAxNDo1NTo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBwYXRjaCBmcm9tIENyaXN0aWFuIEdhZnRvbiB0byBidWlsZCBvbgoJICBSZWQgSGF0IDYuMiwgc2hvdWxkIGFsc28gZml4ICM3NTc3OQoKTW9uIEFwciAxNSAxMjoxNDo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZmlyc3QgcGFydCBvZiBmaXhpbmcgIzc4NzI5CgpTdW4gQXByIDE0IDIzOjQ0OjU4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHVyaS5jOiBmaXhpbmcgYnVnICM3ODY2MiBpLmUuIGFkZCBwcm9wZXIKCSAgZXNjYXBpbmcgb2YgVVJJIHdoZW4gc2F2aW5nIEhUTUwgZmlsZXMuCgkqIHJlc3VsdC9IVE1MLyo6IHRoaXMgaW1wYWN0ZWQgc29tZSB0ZXN0cwoKU3VuIEFwciAxNCAxNDo1NToxNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiB0cnlpbmcgdG8gZml4ICM3NzQ0MQoKRnJpIEFwciAxMiAyMzowMjoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogSGFsbHNraSBjb21wbGFpbmVkIGl0IGNvdWxkIG5vdCBiZQoJICBpbmNsdWRlZCBieSBpdHNlbGYuCgpUaHUgQXByIDExIDEwOjIzOjM2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgYW4gSUVFRSBmbGFnIHBhdGNoIGZvciBPU0YvMSAjNzc4MjUKCldlZCBBcHIgMTAgMjM6MzE6MzQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBwYXRjaCBmcm9tIE5pbG8gZm9yIHRoZSBjMTRuIG9wdGlvbgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBmaXhlZCBsaWJ4bWwyLmRlZiBnZW5lcmF0aW9uIHdpdGggdGhyZWFkcwoKV2VkIEFwciAxMCAyMToyNDoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogU2lsdmFuIE1pbmdoZXR0aQoJICBwb2ludGVkIGVycm9uZW91cyB1c2Ugb2YgTElCWE1MX1RIUkVBRFNfRU5BQkxFRCBpbnN0ZWFkIG9mCgkgICBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKCldlZCBBcHIgMTAgMTg6MTI6NTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciBzdWJzdHJpbmcgY29uZm9ybWFuY2UKCSogdGVzdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvc3RyaW5ncwoJICByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgcmVzdWx0L1hQYXRoL2V4cHIvc3RyaW5nczogdXBkYXRlIG9mIHRoZQoJICB0ZXN0IHN1aXRlIHRvIGNoZWNrIHRob3NlLgoKV2VkIEFwciAxMCAxMzoyOTo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciAueCBmbG9hdCBwYXJzaW5nLgoKVHVlIEFwciAgOSAxODowOTozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHBhdGNoIGZyb20gTWFya3VzIEhlbmtlIHdoZW4gYW4gZW5jb2RpbmcgYWluJ3QgcmVjb2duaXplZAoKVHVlIEFwciAgOSAxNTo0NzoxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBnb3QgYSByZXBvcnQgdGhhdCAjaW5jbHVkZSA8c3RyaW5nLmg+IHdhcyBuZWVkZWQKClR1ZSBBcHIgIDkgMTE6NTE6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBhIGZpeCBmcm9tIEFudGhvbnkgSm9uZXMgZm9yIC1vIC8tLW91dHB1dAoKVHVlIEFwciAgMiAyMDoyNzoxMSBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2V4YW1wbGUuaHRtbDogZml4aW5nIHR5cG8KCk1vbiBBcHIgIDEgMTA6MDI6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBub2Rlc2V0IHRvIGJvb2xlYW4gY29tcGFyaXNvbiBjb2RlCgkgIHBvaW50ZWQgb3V0IGJ5IE1lbHZ5biBTb3BhY3VhLgoKRnJpIE1hciAyOSAyMzo0MTo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IEZy6WTpcmljIENyb3phdCBnYXZlIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgY2hhbmdlCgkgIG9mIEluY2x1ZGUgcGF0aHMgYnJlYWtpbmcgdGhlIGxpYnhtbC5tNAoKRnJpIE1hciAyOSAxODoyNTo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBGaXggYnVnICM3NjkyNyBmb3Jnb3QgdG8gc2F2ZSBzb21lIGNvbnRleHQKCSAgd2hlbiBldmFsdWF0aW5nIGJpbmFyeSBleHByZXNzaW9ucwoKVGh1IE1hciAyOCAxOToyMjo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGNvbmZpZ3VyZSBmb3IgTVBFL2lYIGZyb20gTWFya3VzIEhlbmtlCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBpbml0aWFsaXphdGlvbiBwcm9ibGVtcwoJKiB4cGF0aC5jOiBhbm90aGVyIHNldCBvZiBwYXRjaGVzIGZyb20gUmljaGFyZCBKaW5rcyB0aGlzCgkgIGZpeGVzICJtYWtlIFhQYXRodGVzdHMiIG9uIGxpbnV4CgpXZWQgTWFyIDI3IDE3OjA5OjQzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyaW9uYW4uYyB0cmlvbmFuLmggeHBhdGguYzogbW9yZSBwYXRjaGVzIGZyb20gUmljaGFyZCBKaW5rcwoJKiB0ZXN0L1hQYXRoL2V4cHIvY29tcGFyZSB0ZXN0L1hQYXRoL2V4cHIvZXF1YWxpdHkKCSAgdGVzdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCgkgIHRlc3QvWFBhdGgvZXhwci9zdHJpbmdzIHJlc3VsdC9YUGF0aC9leHByL2NvbXBhcmUKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZXF1YWxpdHkgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzCgkgIHJlc3VsdC9YUGF0aC9leHByL2Z1bmN0aW9ucyByZXN1bHQvWFBhdGgvZXhwci9zdHJpbmdzOiBVcGRhdGVkCgkgIHRlc3RzIHRob3VnaCB0aGV5IHNob3cgYSBkaXZlcmdlbmNlIG9uIExpbnV4CgpXZWQgTWFyIDI3IDEwOjA2OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmMgdHJpb25hbi5jOiBwcmV2aW91cyBjb21taXQgYWxzbyBpbmNsdWRlZCBwYXRjaGVzCgkgIGZyb20gUmljaGFyZCBKaW5rcyBvbiBzb21lIElFRUUgc3VwcG9ydCBjb3JuZXIgY2FzZQoKV2VkIE1hciAyNyAxMDowMzoxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBBVVRIT1JTIEhBQ0tJTkc6IEFkZGVkIElnb3IgWmxhdGtvdmljIGFzIG9mZmljaWFsIG1haW50YWluZXIKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbTogQWxiZXJ0IENoaW4gcG9pbnRlZAoJICB0aGF0ICQoZGF0YWRpcikgc2hvdWxkIGJlIHVzZWQgZm9yIGRvY3MKClR1ZSBNYXIgMjYgMTM6NDM6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogVGhvbWFzIFN0ZWluYm9ybiBwb2ludGVkIG91dCAjNzY0MDQgdGhhdCBsaWJ4bWwyCgkgIGNvdWxkIGxlYWsgZmlsZWRlc2NyaXB0b3JzCgpUdWUgTWFyIDI2IDA4OjU1OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBuYW5vaHR0cC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWxsYW4gQ2xhcmsgZm9yCgkgIFVuaXhXYXJlL09wZW5TZXJ2ZXIKCk1vbiBNYXIgMjUgMTc6NDU6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE5CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzCgpNb24gTWFyIDI1IDE3OjM0OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9odHRwLmM6IGZpeGluZyAjNzYwNDMsIGdvdCBmZWQgdXAgd2l0aCBub24tcG9ydGFiaWxpdHkKCSAgb2YgdGhhdCBwaWVjZSBvZiBjb2RlLgoKTW9uIE1hciAyNSAxMzowODoyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIFNBWC5jOiBOZXZlciBjb21taXQgd2l0aG91dCBydW5uaW5nICJtYWtlIHRlc3RzIiA6LSgKCSAgZml4IGEgY291cGxlIG9mIHN0dXBpZGl0aWVzIGluIHRoZSBwcmV2aW91cyBjb21taXQKCSogcmVzdWx0Lyo6IGEgZmV3IGNoYW5nZXMgaW4gc29tZSBhdHRyaWJ1dGUgb3JkZXIgcmVzdWx0IG9mIHByZXZpb3VzCgkgIGNvbW1pdC4KCk1vbiBNYXIgMjUgMTE6NDY6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogZml4ZWQgYnVnICM3NjE2OCwgYXR0cmlidXRlIHJlZGVjbGFyZWQgaW4KCSAgdGhlIGludGVybmFsIHN1YnNldCBzaG91bGQgbm90IHJhaXNlIGR1cGxpY2F0ZSBJRCBlcnJvcnMsCgkgIGFsc28gdGhlcmUgd2FzIGEgc21hbGwgYnVnIGluIGNvbmp1bmN0aW9uIHRvIG5hbWVzcGFjZQoJICBkZWNsYXJhdGlvbnMgZGVmYXVsdGVkIGFuZCB4bWw6eHh4IGF0dHJpYnV0ZXMgRFREIGRlZmluaXRpb25zLgoJICAKRnJpIE1hciAyMiAxNToxMzo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBSaWNoYXJkIEppbmtzIGFsc28gcmFpc2VkIHNvbWUgcm91bmRpbmcgcHJvYmxlbXMKCSAgdGhpcyB0cmllcyB0byBmaXggdGhlbQoKRnJpIE1hciAyMiAxMzoyMjowOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBSaWNoYXJkIEppbmtzIHNwb3R0ZWQgYW4gaW5jb2hlcmVudCBtZW1vcnkgYWxsb2NhdGlvbgoJICBiZWhhdmlvdXIgaW4geG1sWFBhdGhDYXN0VG9TdHJpbmcoKQoKVGh1IE1hciAyMSAxNDoyNToyOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgSVNPLUxhdGluIDEgdG8gVVRGOCBlbmNvZGVyCgkgIHJhaXNlZCBieSBNb3J1cyBXYWx0ZXIKClRodSBNYXIgMjEgMTQ6MDc6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogYXBwbGllZCAyIGZpeHVwcwoJICBmcm9tIElnb3IKClRodSBNYXIgMjEgMTM6MzA6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nICM3NTYxOSwgcmVsYXRlZCB0byBhIHByb2JsZW0gd2hlbiB0cnlpbmcKCSAgdG8gZXZhbHVhdGUgY29uZGl0aW9uIHdoZW4gdGhlIGN1cnJlbnQgbm9kZSBzZXQgcmVzdWx0aW5nCgkgIGZyb20gdGhhdCBzdWItc3RlcCBldmFsdWF0aW9uIGlzIGVtcHR5LiBBbHNvIGZpeGVzIDIgcG90ZW50aWFsCgkgIHByb2JsZW0gd2l0aCBwcmV2aW91cy1zaWJsaW5nIGFuZCBuZXh0LXNpYmxpbmdzIGF4aXMuCgpUaHUgTWFyIDIxIDA5OjAzOjU5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRvIGJ1aWxkIEMxNE4gaWYgRG9jQm9vayBhbmQKCSAgSFRNTCBzdXBwb3J0IGlzIG5vdCBjb25maWd1cmVkIGluLgoKV2VkIE1hciAyMCAyMjo0Mjo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgZXJyb3IuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgeG1sSU8uYwoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGRvaGggSSByZWFsbHkgZGlkbid0IGludGVuZGVkIHRvIGNvbW1pdAoJICB0aGlzIHRlc3QgdmVyc2lvbiA6LSgKCldlZCBNYXIgMjAgMjA6MjA6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFNBWC5jOiBJIHdhbnRlZCB0byBzZWUgdGhlIHJlYWwgc3BlZWQgYXQgdGhlIFNBWCBpbnRlcmZhY2UKCSAgYWZ0ZXIgYSBsaXR0bGUgdG9vIG1hbnkgWGltaWFuZXIgc3RhcnRlZCBjb21wbGFpbmluZyBhYm91dCB0aGUKCSAgcGFyc2VyIHNwZWVkLgoJICBhZGRlZCBhIC0tcXVpZXQgb3B0aW9uOgoJICBwYXBoaW86fi9YTUwgLT4gbHMgLWwgZGIxMDAwMDAueG1sIAoJICAtcnctcnctci0tICAgIDEgdmVpbGxhcmQgd3d3ICAgICAgMjAxODIwNDAgTWFyIDIwIDEwOjMwIGRiMTAwMDAwLnhtbAoJICBwYXBoaW86fi9YTUwgLT4gdGltZSAuL3Rlc3RTQVggLS1xdWlldCBkYjEwMDAwMC54bWwgCgkgIDMyMDAwMDYgY2FsbGJhY2tzIGdlbmVyYXRlZAoJICByZWFsCTBtMS4yNzBzCgkgIFdoaWNoIG1lYW5zIDE2TUJ5dGVzL3MgYW5kIDNNY2FsbGJhY2svcwoKVHVlIE1hciAxOSAxOTozMzo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB2YWxncmluZCBzcG90dGVkIGFub3RoZXIgZXJyb3IgdGhhdCB0aW1lIHdoZW4gcnVubmluZwoJICBvbiBsaWJ4c2x0IHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBNYXIgMTkgMTU6MjQ6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZGluZyAibWFrZSB2YWxncmluZCIgcnVubmluZyB0aGUgZnVsbCByZWdyZXNzaW9uCgkgIHRlc3RzIChleGNlcHQgcHl0aG9uIG9uZXMpIHVuZGVyIFZhbGdyaW5kICh1c2luZyB2YWxncmluZCAtcQoJICB3aGljaCB3YXMga2luZGx5IGFkZGVkIGJ5IHRoZSBhdXRob3IpLgoJKiB2YWxpZC5jOiBzdHVwaWQgYnVnIHBpbnBvaW50ZWQgYnkgVmFsZ3JpbmQsIHRoZSByZWdyZXNzaW9uIHRlc3RzCgkgIHBhc3NlcyBjbGVhbmx5IG5vdyBleGNlcHQgYW4gb2JjdXJlIGZsb2F0aW5nIHBvaW50IGluaXRpYWxpemF0aW9uCgkgIHJhaXNlZCBpbiBsb2cxMCgpIGluIG9uZSBYUGF0aCByZWdyZXNzaW9uIHRlc3QgPz8/CgkqIHRyZWUuYzogZWRpdGVkIHNvbWUgY29tbWVudHMgdG8gY2xvc2UgIzc1MjQ0CgpUdWUgTWFyIDE5IDEyOjE1OjIwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHByZXR0eSBpbnNhbmUgdGhpbmcsIHRoZSB4bWxYUGF0aEZvcm1hdE51bWJlcigpCgkgIHdhcyBub3Qgc2VyaWFsaXppbmcgMSBhcyAiMSIgaWYgTENfQUxMPXN2X1NFIDotKCBhbmQgaW4gdGhlCgkgIGNvbnRleHQgb2YgU2Nyb2xsS2VlcGVyLCBtYWRlIHN1cmUgdGhhdCBpZiB0aGUgbnVtYmVyIGlzCgkgIGFuIGludGVnZXIsIHRoZSBzZXJpYWxpemF0aW9uIGZvbGxvd3MgdGhlIGRlc2NyaXB0aW9uIGF0CgkgIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoI3NlY3Rpb24tU3RyaW5nLUZ1bmN0aW9ucwoKTW9uIE1hciAxOCAxOToxODoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMTgKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIHdlYiBzaXRlCgkqICouYyBsaWJ4bWwuaDogaW1wbGVtZW50IHRoZSBuZXcgSU5fTElCWE1MIHNjaGVtZSBkaXNjdXNzZWQgd2l0aAoJICB0aGUgV2luZG93cyBhbmQgQ3lnd2luIG1haW50YWluZXJzLgoJKiBwYXJzZXIuYzogaHVtbSwgY2hhbmdlZCB0aGUgd2F5IHRoZSBTQVggcGFyc2VyIHdvcmsgd2hlbgoJICB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0KDEpIGlzIHNldCwgaXQgd2lsbCB0aGVuIAoJICBkbyB0aGUgZW50aXR5IHJlZ2lzdHJhdGlvbiBhbmQgbG9hZGluZyBieSBpdHNlbGYgaW4gY2FzZSB0aGUKCSAgdXNlciBwcm92aWRlZCBTQVggZ2V0RW50aXR5KCkgcmV0dXJucyBOVUxMLgoJKiB0ZXN0U0FYLmM6IGFkZGVkIC0tbm9lbnQgdG8gdGVzdCB0aGUgYmVoYXZpb3VyLgoKTW9uIE1hciAxOCAxMjo0NDoyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogV2lsZnJpZWQgVGVpa2VuIHByb3ZpZGVkIGEgaGFja2lzaCBidXQgd29ya2luZwoJICB3YXkgdG8gZ2V0IGNvbnRleHQgcmVwb3J0ZWQgYmFjayBvbiBlbnRpdGllcyB3aGVuIHBhcnNpbmcKCSAgd2l0aCBTQVggYW5kIHdpdGhvdXQgYnJlYWtpbmcgdGhlIERPTSBidWlsZC4KClN1biBNYXIgMTcgMTE6MzE6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBhcHBsaWVkIGEgbmV3IHBhdGNoIGZyb20gQWxla3NleSBTYW5pbgoJKiBkb2Mvc2l0ZS54c2wgZG9jL3htbC5odG1sIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCSAgdG8gcmVmZXJlbmNlIEFsZWtzZXkgaW1wbGVtZW50YXRpb24gb2YgWE1MIGRpZ2l0YWwgU2lnbmF0dXJlcwoKU2F0IE1hciAxNiAyMzowMTo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzbWFsbCBmaXggdG8gYXZvaWQgcG90ZW50aWFsIHByb2JsZW0gZHVlIHRvCgkgIG9yZGVyaW5nIG9mIGZyZWVpbmcgZGF0YQoJKiBweXRob24vTWFrZWZpbGUuYW06IHBlb3BsZSB3ZXJlIGNvbXBsYWluaW5nIGFib3V0IAoJICB0aGUgZ2VuZXJhdGVkIGZpbGUgaW4gcHl0aG9uIGRpciBub3QgYmVpbmcgYnVpbHQKCkZyaSBNYXIgMTUgMjM6MjE6NDAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbQoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vdHlwZXMuYzogQ2xlYW51cAoJICBvZiB0aGUgcHl0aG9uIE1ha2VmaWxlcyBiYXNlZCBvbiBKYWNvYiBhbmQgSmFtZXMgZmVlZGJhY2ssCgkgIGZpeGVkIHRoZSBzcGVjIGZpbGUgYWNjb3JkaW5nbHksIGZpeGVkIHRoZSBudW1iZXIgb2Ygd2FybmluZwoJICB0aGF0IHBhc3NpbmcgbXkgcGVkYW50aWMgQ0ZMQUdTIHdhcyBnZW5lcmF0aW5nLiBDb25jbHVzaW9uCgkgIGlzIHRoYXQgUHl0aG9uIGluY2x1ZGVzIGFyZSByZWFsIGNyYXAuCgpGcmkgTWFyIDE1IDE5OjQxOjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZSxpbjogaXQgd2FzIHJlcG9ydGVkIHF1aXRlIGEgZmV3IHRpbWVzIHRoYXQKCSAgeG1sMi1jb25maWcgLS1jZmxhZ3Mgc2hvdWxkIG5vdCBvdXRwdXQKCSAgLUkkaW5jbHVkZXByZWZpeC9saWJ4bWwyL2xpYnhtbCBiZWNhdXNlIGxpYnhtbDIgaGVhZGVyIG5hbWVzCgkgIGNsYXNoZXMgd2l0aCBleGlzdGluZyBuYW1lcyBsaWtlIGxpc3QuaCBmcm9tIEMrKyBzdGwuCgkgIEluY2x1ZGVzIHNob3VsZCBiZSAjaW5jbHVkZTxsaWJ4bWwveHh4Lmg+IHNvIC4uLgoKRnJpIE1hciAxNSAxMDo0MTo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluCgpGcmkgTWFyIDE1IDA4OjU1OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsZWtzZXkgU2FuaW4gZml4aW5nIGEgcHJvYmxlbSBpbiB0aGUKCSAgY2Fub25pY2FsaXphdGlvbiBhbGdvcml0aG0KCSogZG9jL3htbC5odG1sIGRvYy9pbmRleC5odG1sOiBhZGRlZCB0aGUgQzE0TiByZWZlcmVuY2VzIG9uIHRoZSAKCSAgaW5kZXggcGFnZS4KCjIwMDItMDMtMTMgIGphY29iIGJlcmttYW4gIDxqYWNvYkB4aW1pYW4uY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiByZW1vdmUgTERBREQgYW5kIENGTEFHUyBhcyB0aGlzIGlzIGJyb2tlbgoJdXNhZ2UsIHJlZHVuZGFudCwgYW5kIGdjYyBzcGVjaWZpYwoKV2VkIE1hciAxMyAxMTowMDo1OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzcGVlZHVwIHNvbWUgbm9kZSBzZWxlY3Rpb24gb3BlcmF0aW9ucywgdGhpcyBjYW4KCSAgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBEb2NCb29rIE5vcm0ncyBzdHlsZXNoZWV0cwoJKiBuYW5vaHR0cC5jOiBzb21lb25lIHJlcG9ydGVkIHRoYXQgU09DS0xFTl9UIG1heSBub3QgYmUgZGVmaW5lZAoJICBtYWtlIHN1cmUgaXQncyBhbHdheXMgdGhlIGNhc2UKCSogZGVidWdYTUwuYzogZGlzdGluZ3Vpc2ggQ0RBVEEgYW5kIGNvbW1lbnRzIGluIGxzIG9wZXJhdGlvbnMKClR1ZSBNYXIgMTIgMTk6NDU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvKi5oOiBIZWlrbyBXLiBSdXBwIGZpeGVkIGEgbG90IG9mIGNvbW1lbnRzCgkgIHRvIGdlbmVyYXRlIGJldHRlciBBUEkgZGVzY3JpcHRpb25zIGV0Yy4uLgoKTW9uIE1hciAxMSAxMDoxMDozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IEZpeGluZyAjNzQxODYsIG1hZGUgc3VyZSBhbGwgYm9vbGVhbiBleHByZXNzaW9ucwoJICBnZXQgZnVsbHkgcGFyZW50aGVzaXplZCwgcmFuIGluZGVudCBvbiB0aGUgb3V0cHV0CgkqIGNvbmZpZ3VyZS5pbiBIVE1MdHJlZS5jIFNBWC5jIGMxNG4uYyBkZWJ1Z1hNTC5jIHRyZWUuYyB4cG9pbnRlci5jCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWxzbyAjNzQxODYgcmVsYXRlZCwgcmVtb3ZlZCB0aGUKCSAgLS13aXRoLWJ1ZmZlcnMgb3B0aW9uLCBhbmQgYWxsIHRoZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwKCSAgc2VjdGlvbnMgdGhhdCB3ZXJlIHJlc3VsdGluZyBmcm9tIGl0LgoKU3VuIE1hciAxMCAxNzo0Nzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gRG9kamkgU2VrZXRlbGkgZml4aW5nIGFuCgkgIHVuaW5pdGFpbGl6ZWQgdmFyaWFibGUgaW4geG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzKCkKClNhdCBNYXIgIDkgMTU6MTA6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBmaXhlZCBhIGZldyBjb21tZW50cwoJKiBkb2MvKi5odG1sIGRvYy8qLyouaHRtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3MgYW5kIGFkZGVkCgkgIHRoZSBDMTROIEFQSQoJKiBkb2MvYXBpLnhzbCBkb2MvZ25vbWUteG1sLnNnbWw6IGZpeHVwcyBhbmQgYWRkZWQgSURzCgpTYXQgTWFyICA5IDExOjE2OjExIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBmaXggdG8gYWRhcHQgdmFyYWlhdGlvbnMgaW4gdGhlCgkgIGJpbmRpbmdzCgkqIGNvbmZpZ3VyZS5pbiBweXRob24vc2V0dXAucHkgcHl0aG9uL3NldHVwLnB5LmluOiBmaXhlZCB0bwoJICBoYXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBweXRob24gc2NyaXB0cyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQKCkZyaSBNYXIgIDggMTY6NDU6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBuZXdseSBpbnRyb2R1Y2VkIGFuZCBwb2ludGVkIGJ5IFV3ZSBGZWNobmVyCgkgIGluIHhtbENvcHlQcm9wKCkKCkZyaSBNYXIgIDggMTU6NDk6MTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE3IHJlbGVhc2UKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogeHBhdGguYzogZml4ZWQgYSBjb21tZW50CgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgYSBwb3NzaWJsZSByZWVudHJhbmN5IHByb2JsZW0KClRodSBNYXIgIDcgMjM6MTk6MjggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvYXR0cmlicy5weToKCSAgZml4ZWQgeG1sSGFzTnNQcm9wKCkgYnVncyBmb3IgZGVmYXVsdGVkIGZyb20gRFREIGF0dHJpYnMsCgkgIGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IHhtbEhhc05zUHJvcCgpIGFuZCB4bWxIYXNQcm9wKCkgc2hhbGwKCSAgbm90IHJhaXNlIGV4Y2VwdGlvbnMgd2hlbiBmYWlsaW5nIHRvIGZpbmQgdGhlIGF0dHJpYnV0ZS4KClRodSBNYXIgIDcgMTY6MTE6MzUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbGxpbnQuYzogb3dlbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCB0aGUKCSAgZnRtZSBmaXgsIGdldHRpbWVvZmRheSgpIHdhcyBub3QgZGV0ZWN0ZWQgYnkgY29uZmlndXJlIGFuZAoJICB0aGUgZnRpbWUgaGVhZGVyIHdhc24ndCBpbmNsdWRlZCwgZG9oaGgKClRodSBNYXIgIDcgMTI6MTk6MzYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbGxpbnQuYzogdHJ5aW5nIHRvIGZpeCAjNzE0NTcgZm9yIHRpbWluZwoJICBwcmVjaXNpb24gd2hlbiBnZXR0aW1lb2ZkYXkoKSBpcyBub3QgYXZhaWxibGUgYnV0IGZ0aW1lKCkgaXMKClRodSBNYXIgIDcgMTE6MjQ6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gZG9jL01ha2VmaWxlLmFtOiBGaXhlZCAjNzM0MDggbWlzc2luZyBpbWFnZXMKCSAgYXJlIG5vdyBjb3BpZWQgb24gaW5zdGFsbCBhbmQgcGFydCBvZiB0aGUgLWRldmVsIFJQTQoKVGh1IE1hciAgNyAwOTozNDoxNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gYXZvaWQgYnVnICM3MjE1MCB3aGljaCB3YXMgYXBwYXJlbnRseQoJICBjYXVzZWQgYnkgYSBnY2MgYnVnIChvciBhIHByb2Nlc3NvciBwcm9ibGVtKSBhcyBkZXRhaWxlZAoJICBhdCBodHRwOi8vdmVpbGxhcmQuY29tL2djYy5idWcKClRodSBNYXIgIDcgMDE6MDI6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvY3V0bnBhc3RlLnB5OgoJICBmaXhlZCB4bWxSZWNvbmNpbGlhdGVOcygpLCBhZGRlZCBhIFB5dGhvbiB0ZXN0L2V4YW1wbGUgZm9yCgkgIGludGVyLWRvY3VtZW50IGN1dCduIHBhc3RlCgkqIHB5dGhvbi9saWJ4bWwucHk6IGZpeGVkIG5vZGUuZG9jIG9uIGRvY3VtZW50IG5vZGVzIGFuZCBhZGRlZAoJICB4cGF0aEV2YWwoKSBvbnRvIG5vZGUgb2JqZWN0cwoKV2VkIE1hciAgNiAyMjozODowMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBzb21lIGh0bWxTZXRNZXRhRW5jb2RpbmcoKSBwcm9ibGVtcwoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6CgkgIGZpeHVwIGFuZCBpbnRlZ3JhdGVkIHRlc3RzIGZvciB0aGUgc2VyaWFsaXphdGlvbiBzdHVmZgoKV2VkIE1hciAgNiAxOTo0MDo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBsaWJ4bWwuMyBsaWJ4bWwuNCBsaWJ4bWwuc3BlYy5pbjogRml4ZWQgYnVnICM3MjU3MAoJICBtb3ZlZCB0aGUgbGlieG1sIG1hbiBwYWdlIHRvIHNlY3Rpb24gMwoKV2VkIE1hciAgNiAxODozNDowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeCBidWcgIzcyNDkwCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBhZGRlZCBtZXRob2RzIHNlcmlhbGl6ZSgpCgkgIGFuZCBzYXZlVG8oKSB0byBhbGwgbm9kZSBlbGVtZW50cy4KClR1ZSBNYXIgIDUgMjE6Mjc6MDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogY2xvc2VkICM3MzQzMCwgZG9uJ3QgcmVhZCBmcm9tIGFuIGlucHV0IHNvdXJjZQoJICB3aGljaCBpbmRpY2F0ZWQgYW4gZW5kLW9mLWZpbGUgb3IgYW4gZXJyb3IuCgpUdWUgTWFyICA1IDE2OjMzOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtYWtlIHN1cmUgU0FYIGVuZERvY3VtZW50IGlzIGFsd2F5cyBjYWxsZWQgYXMKCSAgdGhpcyBjb3VsZCByZXN1bHQgaW4gYSBQeXRob24gbWVtb3J5IGxlYWsgb3RoZXJ3aXNlIChpdCdzCgkgIHVzZWQgdG8gZGVjcmVtZW50IHJlZi1jb3VudGluZykKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vdGVzdHMvZXJyb3IucHkgcHl0aG9uL3Rlc3RzL3hwYXRoLnB5OiBpbXBsZW1lbnRlZAoJICB0aGUgc3VnZ2VzdGlvbnMgbWFkZSBieSBHYXJ5IEJlbnNvbiBhbmQgZXh0ZW5kZWQgdGhlIHRlc3RzCgkgIHRvIG1hdGNoIGl0LgoKVHVlIE1hciAgNSAxMDozNToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBhcHBsaWVkIHBhdGNoIGZpeGluZyAjNzM0NTAKCk1vbiBNYXIgIDQgMTc6NTk6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nICM2MTI5MCAibmFtZXNwYWNlIG5vZGVzIGhhdmUgbm8gcGFyZW50IgoJICBsb25nIHN0YW5kaW5nIGRpdmVyZ2VuY2UgZnJvbSB0aGUgWFBhdGggUkVDLiBOb2RlU2V0cwoJICBzaW1wbHkgaG9sZCBhIGNvcHkgb2YgbmFtZXNwYWNlIG5vZGVzIGFuZCB0aG9zZSBub2RlIC0+bmV4dAoJICBwb2ludHMgdG8gdGhlIHBhcmVudCAod2hpY2ggbWF5IG5vdCBiZSB0aGUgbm9kZSBjYXJyeWluZyB0aGUKCSAgZGVmaW5pdGlvbikuCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZsYWdnZWQgYnV0IGRpZG4ndCBhZGRlZCBhIHBvc3NpYmxlCgkgIHNwZWVkdXAKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBzb21lIHdhcm5pbmdzIGZyb20gcHVzaAoJICBwYXJzZXIgZHVlIHRvIG5ldyBzdGF0ZSBiZWluZyBhZGRlZC4KCSogdHJlZS5jOiBuZXcgZml4IGZyb20gQm9yaXMgRXJkbWFubgoJKiBjb25maWd1cmUuaW4gYzE0bi5jIGluY2x1ZGUvbGlieG1sL2MxNG4uaCB0ZXN0QzE0Ti5jOiBhZGRlZAoJICB0aGUgWE1MIENhbm9uYWxpemF0aW9uIHN1cHBvcnQgZnJvbSBBbGVrc2V5IFNhbmluCgpTdW4gTWFyICAzIDE1OjEyOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBCb3JpcyBFcmRtYW5uIGZpeGluZyBzb21lIG5hbWVzcGFjZSBvZGl0aWVzCgkgIHdpdGggeG1sQ29weU5vZGUoKQoKU2F0IE1hciAgMiAxMDozMzowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXggYnVnICM3MjcwNiB3aGVuIGxvYWRpbmcgYSBOVUxMIGVudGl0eQoKRnJpIE1hciAgMSAxNzoxNDo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogRml4ZWQgIzcyMzQ2LCBhYm91dCBoYW5kbGluZyBvZiB4bWxuczpmb289IiIsIHRoaXMgY291bGQKCSAgYWN0dWFsbHkgY2hhbmdlIGluIGEgZnV0dXJlIFhNTCBOYW1lc3BhY2UgcmV2aXNpb24uCgpGcmkgTWFyICAxIDE3OjEyOjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90eXBlcy5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMveHBhdGhyZXQucHk6CgkgIGFkZGVkIHRoZSBwb3NzaWJpbGl0eSBvZiByZXR1cm5pbmcgbm9kZXNldHMgZnJvbSBYUGF0aCBleHRlbnNpb24KCSAgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uCgpGcmkgTWFyICAxIDEzOjU2OjEyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi8qOiBjb21taXRpbmcgc29tZSBQeXRob24gYmluZGluZ3Mgd29yayBkb25lIHdoaWxlIHRyYXZlbGxpbmcKCkZyaSBNYXIgIDEgMTA6MTE6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBjbG9zZSAjNzI2NjMgYW5kICM3MjY1OCwgZG9uJ3QgbWVtZHVtcCB1bmxlc3MgY29tcGlsZWQKCSAgZXhwbGljaXRlbHkgd2l0aCBtZW1vcnkgZGVidWdnaW5nIHN3aXRjaGVkIG9uCgpTYXQgRmViIDIzIDExOjA4OjA5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOgoJICBBZGRlZCB3cmFwcGVyIGZvciB0aGUgeG1sVVJJUHRyIHR5cGUsIHByb3ZpZGVkIGFjY2Vzc29ycywgZml4ZWQKCSAgdGhlIGFjY2Vzc29yIGdlbmVyYXRvciBmb3Igc3RyaW5ncwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3RzdFVSSS5weTogYWRkZWQgYSBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3QuCgpGcmkgRmViIDIyIDIzOjQ0OjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9SRUFETUUgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3NldHVwLnB5OgoJICBhZGRlZCB0aGUgJ3VzdWFsJyBzZXR1cC5weSB0byBhbGxvdyBidWlsZGluZyBhIGxpYnhtbDItcHl0aG9uCgkgIG1vZHVsZSBiYXNlZCBvbiB0aGUgc2FtZSBjb2RlLiBUaGUgaW5pdGlhbGl6YXRpb24gaXMgaG93ZXZlcgoJICBkaWZmZXJlbnQgdGhlIDIgLnNvIGZpbGVzIGZvIGxpYnhtbDIgYW5kIGxpYnhzbHQgYXJlIGlkZW50aWNhbCBhbmQKCSAgdGhleSBlbnRyeSBwb2ludCBpbml0aWFsaXplIGJvdGggbGlicmFyaWVzLiB0aGlzIGlzIGRvbmUgdG8gYXZvaWQKCSAgc29tZSBwb3NzaWJsZSBuYXN0eSBwcm9ibGVtIHNpbmNlIHRoZSBQeXRob24gZG9uJ3QgbWVyZ2UgdGhlIG1hcHMKCSAgb2YgYWxsIHNoYXJlZCBtb2R1bGVzLgoKV2VkIEZlYiAyMCAyMzoxNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBwdXNoL2VuY29kaW5nIGJ1ZyByZXBvcnRlZCBieSBNaWNoYWVsCgkgIG9uIGxpYnJzdmcKCldlZCBGZWIgMjAgMTk6NTQ6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IGZpeGVzIGEgbWlzcGxhY2VkICNlbmRpZgoKV2VkIEZlYiAyMCAxNzo0Nzo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jOiBmb3VuZCBhbmQgZml4ZWQgYSBjb3VwbGUgb2YgYWxsb2NhdGlvbiBidWdzCgpXZWQgRmViIDIwIDE1OjM2OjAzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWwuaHRtbCBkb2MvcHl0aG9uLmh0bWwgZG9jLyo6IGFkZGVkIGEgUHl0aG9uIGFuZCBiaW5kaW5nCgkgIHBhZ2UgZGVzY3JpYmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgUHl0aG9uIGJpbmRpbmdzIGFuZCAKCSAgZ2l2aW5nIHBvaW50ZXJzIHRvIHRoZSBvdGhlciBsYW5ndWFnZXMgd3JhcHBlcnMuCgpXZWQgRmViIDIwIDExOjE2OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4xNgoJKiBkb2MvKiBweXRob24vbGlieG1sMmNsYXNzLnR4dDogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcywKCSAgcmVidWlsdCB0aGUgQVBJIGFuZCB3ZWIgc2l0ZQoJKiB4cGF0aC5jOiBmaXhlZCAjNzE5NzggcG9ydGFiaWxpdHkgYnVncwoKVHVlIEZlYiAxOSAyMjo0OTozNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogb29wcyBicm9rZSBhdXRvbWF0aWMgZGVmYXVsdGluZyBvZiBuYW1lc3BhY2VzIGF0dHJpYnV0ZXMuCgpUdWUgRmViIDE5IDIyOjAxOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIHBhcnNlci5jOiBoYWQgdG8gY2hhbmdlCgkgIDIgaW50ZXJuYWwgcGFyc2luZyBBUEkgd2hlbiBwcm9jZXNzaW5nIGRvY3VtZW50IGNvbnRlbnQKCSAgdG8gY2hlY2sgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZWxlbWVudCBjb250ZW50IGFyZSBkZWZpbmVkCgkgIGluIHRoZSBzYW1lIGVudGl0eQoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGF0dHJpYnV0ZSBub3JtYWxpemF0aW9uIGNhbgoJICBnZW5lcmF0ZSBhIHZhbGlkaXR5IGVycm9yIGFkZGVkIHhtbFZhbGlkQ3R4dE5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlKCkKCSAgd2l0aCB0aGUgY29udGV4dCB0byByZXBvcnQgaXQuCgkqIFNBWC5jOiBmaXhlZCB0aGUgbGFzdCBrbm93biBidWdzLCBjcmF6eSB2YWxpZGF0aW9uIGNvbnN0cmFpbnRzCgkgIHdoZW4gYSBkb2N1bWVudCBpcyBzdGFuZGFsb25lIHNlZW1zIGNvcnJlY3RseSBoYW5kbGVkLiBUaGVyZQoJICBpcyBhIGNvdXBsZSBvZiBvcGVuIGlzc3VlcyBsZWZ0IHdoaWNoIG5lZWQgY29uc2lkZXJhdGlvbiBlc3BlY2lhbGx5CgkgIFBFOTMgb24gZXh0ZXJuYWwgdW5wYXJzZWQgZW50aXRpZXMgYW5kIHN0YW5kYWxvbmUgc3RhdHVzLiAKCSAgUmFuIDE4MTkgdGVzdHM6IDE4MTcgc3VjZWVkZWQsIDIgZmFpbGVkIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvciBpbiA4LjI2IHMuCgkgIFRoZSAyIHRlc3RzIGxlZnQgZmFpbGluZyBhcmUgYWN0dWFsbHkgaW4gZXJyb3IuIENsZWFudXAgZG9uZS4KClR1ZSBGZWIgMTkgMTU6MTc6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogaW1wbGVtZW50ZWQgRTU5IHNwYWNlcyBpbiBDREFUQSBkb2VzIG5vdCBtYXRjaCB0aGUKCSAgbm9udGVybWluYWwgUwoKVHVlIEZlYiAxOSAxNDo0NDo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXIuYyB2YWxpZC5jOiBtb3JlIHZhbGlkYXRpb24gdGVzdCBmaXh1cHMKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGFkZGVkIGR1cmF0aW9uIGluZm8gZm9yIHRoZSB0ZXN0cwoKTW9uIEZlYiAxOCAyMzoyNTowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jOiBhIGNvdXBsZSBvZiBlcnJvcnMgd2VyZSByZXBvcnRlZCBidXQgbm90CgkgIHNhdmVkIGJhY2sgYXMgc3VjaCBpbiB0aGUgcGFyc2luZyBjb250ZXh0LiBEb3duIHRvIDElIGZhaWx1cmUgcmF0ZQoJICBSYW4gMTgxOSB0ZXN0czogMTgwMSBzdWNlZWRlZCwgMTggZmFpbGVkIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvcgoKTW9uIEZlYiAxOCAyMDoxNjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJbnRlcm5hbGQuYzogaXNFeHRlbmRlciB3YXMgbWlzc2luZyBhIGNoYXIgCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiAlIGFyZSBhY2NlcHRhYmxlIGluIHRoZQoJICBpbnRlcm5hbCBzdWJzZXQgaWYgd2l0aGluIGEgUFVCTElDIElECgpNb24gRmViIDE4IDE5OjI3OjMyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlckludGVybmFscy5jIHZhbGlkLmM6IG1vcmUgd29yayBvbiB0aGUgY29uZm9ybWFuY2UKCSAgc3VpdGUuIFRvb2sgdGhlIHN0ZXAgdG8gZmluYWxseSBibG9jayBkb2N1bWVudHMgd2l0aCBlbmNvZGluZwoJICBlcnJvcnMuIEl0J3MgYSBmYXRhbCBlcnJvciBwZXIgdGhlIHNwZWMsIHBlb3BsZSBzaG91bGQgaGF2ZSBmaXhlZAoJICB0aGVpciBkb2N1bWVudHMgYnkgbm93LgoKTW9uIEZlYiAxOCAxNTozMDoxNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogZml4ZWQgdGhlIHRlc3Qgc2NyaXB0IGFmdGVyIHNvbWUgZGlzY3Vzc2lvbgoJICBvbiB0aGUgc2VtYW50aWMgb2YgVFlQRT0iZXJyb3IiCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCB0aGUgc2NyaXB0IHRvIHRoZSBkaXN0cmliCgpNb24gRmViIDE4IDEyOjE3OjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIGVudGl0aWVzLmM6IGZpeGVkIGEgY291cGxlIG9mIGNvbmZvcm1hbmNlcyBpc3N1ZXMgZGVlcAoJICBpbnRvIHRoZSB2YWxpZGF0aW9uIGNvZGUgKHN0YW5kYWxvbmUgYW5kIHVuZGVjbGFyZWQgTm90YXRpb25zKQoKTW9uIEZlYiAxOCAwMDoxNzoyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgIzcxNzQxIHN1cGlkIHR5cG8gYW4gYSBidWcgYWJvdXQgZW5jb2RpbmcgcGFyc2luZwoJICBzdGF5ZWQgdGhlcmUgZm9yIHllYXJzICEKCk1vbiBGZWIgMTggMDA6MDY6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogZml4ZWQgIzcxNzQwIE5vdGF0aW9uRGVjbCB3aXRoIGEgcmVxdWlyZWQgZmllbGQKCSAgbWlzc2luZwoKU3VuIEZlYiAxNyAyMzo0NTo0MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogaW1wcm92ZWQgdGhlIGJlaGF2aW91ciBhIGJpdCBhcwoJICB3ZWxsIGFzIHRoZSBsb2dzCgkqIHBhcnNlci5jIHZhbGlkLmMgU0FYLmM6IGZpeGVkIGEgZmV3IG1vcmUgYnVncyAKCSAgIlJhbiAxODE5IHRlc3RzOiAxNzc4IHN1Y2VlZGVkLCA0MSBmYWlsZWQsIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvciIKClN1biBGZWIgMTcgMjA6NDE6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IHB5dGhvbiBzY3JpcHQgdG8gcnVuIHJlZ3Jlc3Npb24gdGVzdHMKCSAgYWdhaW5zdCB0aGUgWE1MIFRlc3Qgc3VpdGUgb2YgVzNDL09BU2lzCgkqIFNBWC5jOiBmaXhlZCBhIHZhbGlkYXRpb24gYnVnCgkqIHBhcnNlci5jOiBmaXhlZCAzIGVycm9ycyBwb2ludGVkIGJ5IHRoZSB0ZXN0IHN1aXRlCgkqIGRvYy9idWlsZERvY0Jvb2tDYXRhbG9nOiBmaXhlZCBhIHR5cG8gcG9pbnRlZCBieSBkcmFrZQoJKiBweXRob24vTWFrZWZpbGUuYW06IGZpeGVkIGEgZGVwZW5kZW5keQoKRnJpIEZlYiAxNSAyMTo0NzoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogYXZvaWQgYSB3YXJuaW5nIGJ1ZyAjNzE1OTQKCldlZCBGZWIgMTMgMjI6MTM6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IEplc3NlIFBlcnJ5IHByb3ZpZGVkIGEgcGF0Y2ggdG8gcmVtb3ZlIGEgZmV3CgkgIHdhcm5pbmcgb24gYWxwaGEvVHJ1NjQKCldlZCBGZWIgMTMgMTQ6MzA6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaDogZml4aW5nIGEgY29tbWVudAoJKiB2YWxpZC5jOiBmaXhpbmcgc29tZSB0cm91YmxlcyB3aXRoIHZhbGlkaXR5IGNoZWNrIG9uIG5hbWVzcGFjZXMKCSogcmVzdWx0L1ZDL05TMyB0ZXN0L1ZDL05TMzogYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QKCldlZCBGZWIgMTMgMTQ6MDU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBGaXhpbmcgIzcxMzQyIHNlcmlhbGl6aW5nICdcbicgaW4gYXR0cmlidXRlIHZhbHVlcwoJKiByZXN1bHQvbm9lbnQvYXR0MyByZXN1bHQvYXR0MyB0ZXN0L2F0dDM6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGVzdC4KClR1ZSBGZWIgMTIgMTQ6NDU6MzIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBjb3VwbGUgb2YgYnVnIGZpeGVzCgpNb24gRmViIDExIDE5OjQxOjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi8qLnB5OiByZW1vdmVkIHRhYnMgYW5kIHVzZWQgc3BhY2VzLgoKTW9uIEZlYiAxMSAxOToyNTo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTUKCSogZG9jL25ld3MuaHRtbCBkb2MveG1sLmh0bWwgZG9jL3htbGlvLmh0bWw6IHJlYnVpbHQgc29tZSBkb2NzCgpNb24gRmViIDExIDE0OjUzOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWw6IHRyeWluZyB0byBjbG9zZSBSZWQgSGF0IGJ1ZyAjNTg3MDcKCSAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01ODcwNwoKTW9uIEZlYiAxMSAwOTo1MzowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmgKCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IHRyeWluZyB0byBmaXggdGhlIGluY2x1ZGUgbWVzcwoKTW9uIEZlYiAxMSAwODo1MzozMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogcmV2ZXJ0ZWQgcGFydCBvZiB0aGUgcHJldmlvdXMKCSAgYXR0ZW1wdCB0byBwcm92aWRlICM2OTY1NSwgdGhpcyB3YXMgYnJlYWtpbmcgdGhlIGJ1aWxkLgoKU3VuIEZlYiAxMCAxNDoxMzozNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIE1ha2VmaWxlLmFtIGJ1aWxkX2dsb2IucHkgY29uZmlndXJlLmluIGRlYnVnWE1MLmMKCSAgZ2xvYmFscy5jIHBhcnNlci5jIHRocmVhZHMuYyB0cmVlLmMgdmFsaWQuYyB4bWxtZW1vcnkuYwoJICB4cGF0aC5jIHhwb2ludGVyLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBUZW50YXRpdmVseSBmaXhlZCAjNjk2NTUgLCBtYWtlIGNvbXBpbGluZyB3aXRoIC1XcmVkdW5kYW50LWRlY2xzCgkgIGNsZWFuLgogICAgICAgICogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBhIHdhcm5pbmcuCgpTdW4gRmViIDEwIDEyOjAyOjU5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyB2YWxpZC5jIHhpbmNsdWRlLmM6IGZpeCAjNjg4ODIsIGNsZWFudXAgdGhlIFhJbmNsdWRlCgkgIGNvcHlpbmcgb2Ygbm9kZSwgbWVyZ2UgYmFjayBJRHMgaW4gdGhlIHRhcmdldCBkb2N1bWVudC4KCSogcmVzdWx0L1hJbmNsdWRlL2RvY2lkcy54bWwgdGVzdC9YSW5jbHVkZS9kb2NzL2RvY2lkcy54bWwKCSAgdGVzdC9YSW5jbHVkZS9lbnRzL2lkcy54bWw6IHRlc3QgY2FzZQoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkNDogb3V0cHV0IGNoYW5nZWQgZHVlIHRvIGEgdHlwbyBmaXgKClNhdCBGZWIgIDkgMjM6MTU6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBzZWVtcyBzb21lIHZlcnNpb24gb2YgYXV0b21ha2UgZGlkbid0CgkgIGdlbmVyYXRlIHRoZSBkZXBlbmRhbmNpZXMgcmlnaHQgYXMgSmFjb2IgZm91bmQgb3V0LiBBZGQKCSAgYW4gZXh0cmEgZGVwZW5kYW5jeSBydWxlLgoKU2F0IEZlYiAgOSAxODo1OToyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jOiBKdXN0aW4gRmxldGNoZXIgZm91bmQgc29tZSBwYXJ0cwoJICBvZiB0aGUgY29kZSBuZWVkaW5nIGNsZWFudXAKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IEZpeGVkIHRoZSBweXRob24gTWFrZWZpbGVzCgkgIGNvcnJlY3RlZCBhIGJ1ZyBzaG93aW5nIHVwIG9uIGlhNjQsIGNoYW5nZWQgdGhlIG5hbWUgb2YgdGhlCgkgIHB5dGhvbiBpbnRlcm5hbCBtb2R1bGUgdG9vCgpGcmkgRmViICA4IDE1OjE5OjI4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gQW5kcmlzIFBhdmVuaXMgZm9yIGJpbmFyeQoJICBuYW1lIHN1ZmZpeGVzCgpGcmkgRmViICA4IDE0OjQzOjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyB3aW4zMi93aW4zMmNvbmZpZy5oOiBmaXhpbmcgIzY4NzQ4CgpGcmkgRmViICA4IDE0OjM3OjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyAjNzAxNjYKCkZyaSBGZWIgIDggMTQ6MzE6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4aW5nICM3MDA3NwoKRnJpIEZlYiAgOCAxNDoyNDowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDb3B5cmlnaHQgTWFrZWZpbGUuYW0gUkVBRE1FIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbjoKCSAgQ2hhbmdlZCB0byB0aGUgTUlUIExpY2VuY2UKCSogZG9jL0ZBUS5odG1sIGRvYy9jYXRhbG9nLmh0bWwgZG9jL2ludHJvLmh0bWwgZG9jL3htbC5odG1sCgkgIGRvYy94bWxpby5odG1sOiB1cGRhdGVkIHRoZSBkb2MgYWNjb3JkaW5nbHkKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmggY29uZmlndXJlLmluOiBwcmVwYXJpbmcKCSAgMi40LjE0IHJlbGVhc2UKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6CgkgIGZpeGVkIHRoZSBjb25zdCB4bWxDaGFyICogd3JhcHBlciBhbmQgZ2VuZXJhdG9yLCBYUGF0aCBleHRlbnNpb24KCSAgZnVuY3Rpb25zIG5vdyB1c2UgdGhlIGNvbnRleHQgYXMgZmlyc3QgYXJndW1lbnQKCSogcHl0aG9uL3Rlc3RzL3RzdHhwYXRoLnB5IHB5dGhvbi90ZXN0cy94cGF0aC5weQoJICBweXRob24vdGVzdHMveHBhdGhleHQucHk6IFVwZGF0ZWQgdGhlIHRlc3RzIGFjY29yZGluZ2x5CgkqIHRyZWUuYzogZml4ZWQgYnVnICM3MDA2NwoKVGh1IEZlYiAgNyAxNzozMzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiBkZWJ1Z1hNTC5jOiBhbHdheXMgdXNlIHN0ZG91dCBpZiBvdXRwdXQgaXMgTlVMTAoJKiB4bWxJTy5jOiBkb24ndCBjbG9zZSBmaWxlZGVzY3JpcHRvcnMgcGFzc2VkIHRvIG91dHB1dEJ1ZmZlcnMKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IGF1Z21lbnRlZCB0aGUgbnVtYmVyIG9mIGJpbmRpbmdzCgkgIGhhbmRsaW5nIEZJTEUgKiBhbmQgWFBhdGggY29udGV4dHMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOiBhdm9pZCBhIHN0dXBpZCBwcm9ibGVtIGR1ZSB0byB0aGUKCSAgdXNlIG9mIFRFU1QuCgpXZWQgRmViICA2IDIzOjM3OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgc3R1cGlkIGJ1ZyAjNzA3MzggZm91bmQgYnkgYWxmb25zIGhvb2dlcnZvcnN0CgpXZWQgRmViICA2IDE3OjA0OjUxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9UT0RPIHB5dGhvbi9saWJ4bWwuYzogY2xlYW51cCB0aGUgZXh0ZW5zaW9uIGZ1bmN0aW9uIGxvb2t1cAoJKiB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogYWx3YXlzIGNvbXBpbGUgdGhlIGxpc3QKClR1ZSBGZWIgIDUgMTc6MzM6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogZG8gbm90IGluc3RhbGwgb3V0c2lkZQoJICBvZiBwcmVmaXgKCk1vbiBGZWIgIDQgMTU6MDU6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5jOiBzdGFydGVkIGFkZGluZyBTQVggaW50ZXJmYWNlcwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2hTQVgucHk6IGFkZGVkIGEgYmFzaWMKCSAgU0FYIHRlc3QKCk1vbiBGZWIgIDQgMDE6MTI6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBoYXJkZW5lZCB0aGUgYWRkQ2hpbGQgZnVuY3Rpb24KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL1RPRE86CgkgIGFkZGVkIGFjY2Vzc29ycyBuZWVkZWQgZm9yIHhtbE5vZGUsIGEgYml0IG1vcmUgdGVzdGluZyBhbmQKCSAgZXh0ZW5zaW9uIG9mIGludGVyZmFjZXMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9idWlsZC5weTogYWRkZWQgYSB0ZXN0CgkgIGJ1aWxkIGZyb20gc2NyYXRjaC9zYXZlL2xvYWQvY2hlY2sKClN1biBGZWIgIDMgMjE6MTA6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGNoYW5nZSBhIHNtYWxsIGJpdCBpbiB0aGUgd2F5IHZhbGlkaWR5CgkgIGVycm9yIG1lc3NhZ2VzIGdldCBpbml0aWFsaXplZAoJKiBweXRob24vVE9ETyBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6CgkgIGFkZGVkIHNvbWUgbWVtb3J5IGRlYnVnZ2luZyB0byB0cmFjayBsZWFrcyBhdCB0aGUgbGlieG1sMiBsZXZlbAoJKiBweXRob24vdGVzdHMvKi5weTogY2hhbmdlZCBhbGwgdGVzdHMgdG8gY2hlY2sgZm9yIGxlYWtzLAoJICB0aGVyZSBpcyBqdXN0IG9uZSBsZWZ0IGluIFhQYXRoIGV4dGVuc2lvbiByZWdpc3RyYXRpb25zLgoKU3VuIEZlYiAgMyAxNzo1MDo0NiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vVE9ETyBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBtb3JlIGFjY2Vzc29yIGNsYXNzZXMgZm9yIHRoZSBwYXJzZXIKCSAgY29udGV4dCwgYWxsb3cgdG8gc3dpdGNoIG9uIGFuZCBjaGVjayB2YWxpZGl0eQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2Vycm9yLnB5CgkgIHB5dGhvbi90ZXN0cy9pbnZhbGlkLnhtbCBweXRob24vdGVzdHMvdmFsaWQueG1sCgkgIHB5dGhvbi90ZXN0cy92YWxpZGF0ZS5weTogYXR0ZGVkIG1vcmUgdGVzdCBhbmQgYW5kIGFkZGVkIGVycm9yLnB5CgkgIHdoaWNoIEkgZm9yZ290IHRvIGNvbW1pdCBpbiB0aGUgbGFzdCBzdGVwCgpTdW4gRmViICAzIDE2OjAzOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdHlwZXMuYzogY2xlYW51cAoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weSBweXRob24vbGlieG1sX3dyYXAuaAoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sIAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkZWQgY2xhc3MgZm9yIHBhcnNlciBjb250ZXh0LCBhZGRlZAoJICBmaXJzdCBjdXQgZm9yIHB1c2ggbW9kZSBzdXBwb3J0LiBBZGRlZCBhIGZyYW1ld29yayB0byBnZW5lcmF0ZQoJICBhY2Nlc3NvcnMgZnVuY3Rpb25zLgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3B1c2gucHk6IGFkZGVkIGEgcHVzaAoJICB0ZXN0CgpTdW4gRmViICAzIDAwOjE3OjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vVE9ETyBweXRob24vbGlieG1sLnB5OiBmaXhlZCBhIHNtYWxsCgkgIGJ1ZyBhIGJpdCBvZiBjbGVhbnVwLgoKU2F0IEZlYiAgMiAyMjo0NzoxMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRpbmcgZXJyb3IgcmVkaXJlY3Rpb25zIGFuZCBwcmVmb3JtYXQKCSAgdG8gYSBweXRob24gaGFuZGxlcgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzLyoucHk6IGNsZWFudXAgbWFkZSBhbGwKCSAgdGVzdHMgc2VsZiBjaGVja2luZwoKU2F0IEZlYiAgMiAxMzoxODo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogZml4ZWQgYSBzdHVwaWQgYnVnIHdoZW4gcmVuYW1pbmcKCSAgYSBmdW5jdGlvbgoKU2F0IEZlYiAgMiAxMToyNTo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL1RPRE8gcHl0aG9uL2dlbmVyYXRvci5weQoJICBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IFByb2dyZXNzaW5nIHRocm91Z2ggdGhlIFRPRE9zLCBjbGFzcwoJICBkZXNjcmlwdGlvbiBvdXRwdXQsIGV4dHJhIFhNTCBBUEksIFJQTSBub3cgYnVpbGRzIHRoZSB3cmFwcGVycwoJICBmb3IgYWxsIHB5dGhvbiBpbnN0YWxsZWQgdmVyc2lvbnMKClNhdCBGZWIgIDIgMTA6MTM6NTIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vVE9ETwoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRlZCBtb3JlIGluZm9ybWF0aW9ucwoJICBpbiB0aGUgbGlieG1sMi1weXRob24gcGFja2FnZSBpbmNsdWRpbmcgZG9jcy4gU2xpZ2h0bHkgY2hhbmdlZAoJICB0aGUgY2xhc3MgaGllcmFyY2h5CgkqIHB5dGhvbi90ZXN0cy8qOiBhZGRlZCBiYXNpYyByZWdyZXNzaW9uIHRlc3RzIGluZnJhc3RydWN0dXJlIHRvbwoKRnJpIEZlYiAgMSAyMzoxMTo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gZXhhbXBsZS9NYWtlZmlsZS5hbSBweXRob24vTWFrZWZpbGUuYW06CgkgIGFkZGVkIGxpYnhtbDItcHl0aG9uIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2VzIGluc3RhbGxlZAoKRnJpIEZlYiAgMSAxODo0ODoxOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMKCSAgcHl0aG9uL2xpYnhtbC5weTogbW9yZSB3b3JrLCBub3cgYWJsZSB0byBleHRlbmQgdGhlCgkgIFhQYXRoIGludGVycHJldGVyIHdpdGggZnVuY3Rpb25zIHdyaXR0ZW4gaW4gcHl0aG9uLgoKRnJpIEZlYiAgMSAxMDoyODo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IEphY29iIHNlbnQgYSBwYXRjaCB0byBhbGxvdyBidWlsZGluZyBmcm9tCgkgIHRhcmZpbGUuCgpGcmkgRmViICAxIDAwOjQwOjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vbGlieG1sLmMgY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOgoJICBpbnNlcnRlZCB0aGUgcHl0aG9uIHdyYXBwZXJzIGJ1aWxkLCBJIGhvcGUgdGhpcyB3b24ndCBiZSB0b28KCSAgdW5wb3J0YWJsZQoKVGh1IEphbiAzMSAyMToyNzozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBtaW5vciBvcHRpbWl6YXRpb24KCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaDogbW9yZSB3b3JrIG9uIHRoZSBweXRob24gYmluZGluZ3MsCgkgIHRoZXkgbm93IHN1cHBvcnQgWFBhdGggYW5kIHRoZXJlIGlzIG5vIGV2aWRlbnQgbGVhawoKVGh1IEphbiAzMSAwMDo0ODowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OgoJICBtb3JlIHdvcmsgb24gdGhlIHB5dGhvbiBiaW5kaW5ncyBnZW5lcmF0b3IuCgpXZWQgSmFuIDMwIDIxOjUxOjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWxfd3JhcC5oOgoJICBtb3JlIHdvcmsgb24gdGhlIHB5dGhvbiBiaW5kaW5ncy4KCldlZCBKYW4gMzAgMTc6MzU6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaDogY29tbWl0ZWQgZWFybHkgdmVyc2lvbiBvZiBhIHB5dGhvbiBiaW5kaW5nCgkgIGZvciBwcml2YXRlIHVzZSBvbmx5IEFUTQoKU2F0IEphbiAyNiAyMjo0MToxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oOiBhcHBsaWVkIHBhdGNoCgkgIGZyb20gQW50aG9ueSBKb25lcyB0byBpbXBsZW1lbnQgY29weSBvZiBEVEQgc3VidHJlZSB0b28uIEhhZAoJICBqdXN0IHRvIGtlZXAgMiBmdW5jdGlvbiBwcml2YXRlIHdoaWNoIHJlYWxseSBvdWdodCB0byBiZWNvbWUKCSAgcHVibGljIG9uZXMuCgpGcmkgSmFuIDI1IDE1OjE0OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkZWQgcG9pbnRlcnMgdG8gdGhlIHdlYiBwYWdlcyBpbiB0aGUgdXNhZ2UoKQoKVGh1IEphbiAyNCAxNzowNDowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IG1vcmUgZml4ZXMgZnJvbSBQZXRyIEtvemVsa2EgZm9yIGF0dHJpYnV0ZSBoYW5kbGluZwoJICBpbiB0aGUgdHJlZSBBUEkgdG8gYWxpZ24gdGhlIHNlbWFudGljIHdpdGggRE9NLgoKVGh1IEphbiAyNCAxNjowMDo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHRyZWUuYyBlbnRpdGllcy5jOiBhbm90aGVyIHNldCBvZiBwYXRjaGVzIGZyb20KCSAgQW50aG9ueSBKb25lcyBmb3IgY29weSBvcGVyYXRpb25zIGNsZWFudXAgYW5kIHJvYnVzdG5lc3MKCldlZCBKYW4gMjMgMTg6NTM6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0FQSWNodW5rKi5odG1sIGRvYy9wYXJzZWRlY2wucHkgZG9jL2FwaS54c2w6IGdlbmVyYXRlZAoJICBhbiBhbHBoYWJldGljIGluZGV4IGJhc2VkIG9uIGNvbW1lbnRzIGNvbnRlbnQKCSogZG9jLyo6IHJlYnVpbHQgdGhlIHdlYiBzaXRlIHdpdGggdGhlIG5ldyByZWZlcmVuY2VzCgpXZWQgSmFuIDIzIDE1OjE0OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5oOiBHcmVnIFNqYWFyZGVtYSBzdWdnZXN0ZWQgdG8gdXNlIGFuCgkgIGVwb25lbnRpYWwgYnVmZmVyIGdyb3RoIHBvbGljeSBpbiB4bWxQYXJzZXJBZGROb2RlSW5mbygpCgpXZWQgSmFuIDIzIDEzOjMyOjQwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9hcGkueHNsIGRvYy9BUEljb25zdHJ1Y3RvcnMuaHRtbCBkb2MvQVBJZmlsZXMuaHRtbAoJICBkb2MvQVBJZnVuY3Rpb25zLmh0bWwgZG9jL0FQSXN5bWJvbHMuaHRtbCBkb2MvbGlieG1sMi1yZWZzLnhtbAoJICBkb2MvcGFyc2VkZWNsLnB5IGRvYy9NYWtlZmlsZS5hbTogdXBkYXRlZCB0aGUgcHl0aG9uIGV4dHJhY3RvcgoJICB0byBnZW5lcmF0ZSBjcm9zcy1yZWZlcmVuY2VzLCBhbmQgYWRkZWQvdXBkYXRlZCB0aGUgc3R5bGVzaGVldHMKCSAgdG8gZ2VuZXJhdGUgYW5kIGxpbmsgQVBJIGluZGV4ZXMuIFRoZSBnZW5lcmljIGtleXdvcmQgaW5kZXgKCSAgaXMgbm90IGRvbmUgeWV0LgoJKiBkb2MvKi5odG1sOiByZWdlbmVyYXRlZCBhbGwgdGhlIHVzdWFsIGRvY3MgdG9vCgpUdWUgSmFuIDIyIDIzOjExOjI2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFkZGVkIGFuIHhwYXRoIGZ1bmN0aW9uIHRvIHRoZSBzaGVsbCBmb3IgVC4gVi4gUmFtYW4KClR1ZSBKYW4gMjIgMjI6NDI6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogcGF0Y2ggZnJvbSBBbnRob255IEpvbmVzIHRvIGNhdGNoIE5VTEwgbm9kZXMgaW4KCSAgZGVidWcgcm91dGluZXMuCgpUdWUgSmFuIDIyIDIyOjM4OjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbHkgYW4gcGF0Y2ggZnJvbSBQZXRyIEtvemVsa2EgZm9yIHVubGluayBhbmQgcmVwbGFjZSAKCSAgc3VwcG9ydCBvZiBhdHRyaWJ1dGUgbm9kZXMKClR1ZSBKYW4gMjIgMTk6MTI6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvcGFyc2VkZWNsLnB5OiBCdWlsZCBhIG5ldyB2ZXJzaW9uCgkgIGhvcGVmdWxseSBuZWFyIGNvbXBsZXRlIGFuZCBmdWxseSBkb2N1bWVudGVkIG9mIHRoZSBBUEkgaW4gWE1MCgkqIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlcnJvci5jIGdsb2JhbHMuYyBwYXJzZXIuYyB0cmVlLmMKCSB4bWxJTy5jIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBpbmNsdWRlL2xpYnhtbC9oYXNoLmgKCSBpbmNsdWRlL2xpYnhtbC9saXN0LmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaGkKCSBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmhpCgkgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluaQoJIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgQ2xlYW5lZCB1cCB0aGUgZG9jIGNvbW1lbnRzIGEgbG90IGluIHRoZSBwcm9jZXNzLCB0aGUgaW50ZXJmYWNlCgkgIGNvdmVyYWdlIGlzIG5vdyAxMDAlCgpUdWUgSmFuIDIyIDAwOjEyOjU4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weTogaW1wcm92ZWQgdGhlIHNjcmlwdCB0bwoJICBleHRyYWN0cyBjb21tZW50cyBmcm9tIHRoZSBndGstZG9jIERvY0Jvb2sgb3V0cHV0IChhIGJpdAoJICBjb252b2x1dGVkIGJ1dCBzZWVtcyB0byB3b3JrKS4KCk1vbiBKYW4gMjEgMTg6Mjk6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weToKCSAgYWRkZWQgYW4gWE1MIGRlc2NyaXB0aW9uIG9mIHRoZSBBUEksIG1vdmVkIHRoZSBzY3JpcHQgZ2VuZXJhdGluZwoJICBpdCBoZXJlLiBBZGRlZCBhICJtYWtlIGFwaSIgdGFyZ2V0CgpNb24gSmFuIDIxIDE0OjM0OjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQWRhbSBMb3VuZHMgcG9pbnRlZCBvdXQgYSBidWcgaW4geG1sU2VhcmNoTnMoKQoJICAKTW9uIEphbiAyMSAwOTo1NToyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IHRoZSBjaGFuZ2UgbWFkZSB0bwoJICB4bWxYUGF0aEZ1bmNMb29rdXBGdW5jIHdhcyBpbmNvbXBhdGlibGUgcm9sbCBpdCBiYWNrCgpTdW4gSmFuIDIwIDIzOjAzOjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBjbGVhbnVwIHBhdGNoIGZyb20gQW50aG9ueSBKb25lcwoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeCB0aGUgaGVhZGVycyB0byBhdm9pZCBpbiBtYWtlIHNjYW4KCSogcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC8qLmg6IGNsZWFudXAgb2YgdGhlCgkgIGluY2x1ZGVzLCAqIHZzIFB0ciBhbmQgZ2VuZXJhbCBjbGVhbnVwCgkqIHBhcnNlZGVjbC5weTogZmlyc3QgdmVyc2lvbiBvZiBhIHNjcmlwdCB0byBleHRyYWN0IHRoZQoJICBtb2R1bGUgaW50ZXJmYWNlcywgdGhlIGdvYWwgd2lsbCBiZSB0byBwcm92aWRlIC5kZWNsIG9yIFhNTAoJICBzcGVjaWZpY2F0aW9uIG9mIHRoZSBpbnRlcmZhY2VzIHRvIGJ1aWxkIHdyYXBwZXJzLgoKU3VuIEphbiAyMCAxMzozODoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sIHhtbGNhdGFsb2cuYzogRml4ZWQgYnVnICM2ODgzMCwgeG1sY2F0YWxvZwoJICBub3cgcHJvdmlkZXMgcmV0dXJuIGNvZGVzIGluIGNhc2Ugb2YgZXJyb3JzCgpTYXQgSmFuIDE5IDE2OjM2OjIxIENFVCAyMDAyIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpby5oIHRyaW8uYyB0cmlvZGVmLmggdHJpb3AuaCB0cmlvbmFuLmggdHJpb25hbi5jIE1ha2VmaWxlLmFtOgoJICBVcGdyYWRlZCB0byB0cmlvIGJhc2VsaW5lIDEuNgoJKiBzdHJpby5oIHN0cmlvLmM6IFJlcGxhY2VkIGJ5IHRyaW9zdHIuaCBhbmQgdHJpb3N0ci5jCgpGcmkgSmFuIDE4IDE3OjIyOjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB4bWxJTy5jIHhtbGNhdGFsb2cuYzogcmVtb3ZlZCB0aGUgbGFzdCBvY2N1cmVuY2VzCgkgIG9mIHN0cmR1cCB1c2FnZSBpbiB0aGUgY29kZQoKRnJpIEphbiAxOCAxMjo0NzoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBlcnJvci5jOiBLZWl0aCBJc2RhbGUgY29tcGxhaW5lZCByaWdodGx5IHRoYXQgCgkgIHhtbEluaXRQYXJzZXIoKSBkaWQgbm90IHByZXNlcnZlIHZhbHVlIHNldCBieSB4bWxTZXRHZW5lcmljRXJyb3JGdW5jCgpUaHUgSmFuIDE3IDA5OjQ0OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgdGhlIGZ1bnh0aW9uIHRvIHNldCB0aGUgeG1sOiBhdHRyaWJ1dGVzCgkqIGRlYnVnWE1MLmM6IGFkZGVkICJzZXRiYXNlIiB0byB0ZXN0IGl0LgoKV2VkIEphbiAxNiAxNjozNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHVwZGF0ZSB4bWxOb2RlU2V0Q29udGVudCgpIGFuZCB4bWxOb2RlU2V0Q29udGVudExlbigpCgkgIHRvIGFsbG93IHVwZGF0aW5nIGFuIGF0dHJpYnV0ZSBjb250ZW50CgpUdWUgSmFuIDE1IDE4OjA5OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oOiB0cnkgdG8gYXZvaWQgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgb24gV2luZG93cwoKTW9uIEphbiAxNCAxODo1NjoyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IHBhdGNoIGZyb20gQW50aG9ueSBKb25lcyBmb3IgaGFzaC5jIGFsbG9jYXRpb24gc2l6ZQoJKiBNYWtlZmlsZS5hbTogdHJ5aW5nIHRvIHdvcmsgYXJvdW5kIFlldCBBbm90aGVyIExpYnRvb2wgTWFkbmVzcwoJICBhbmQgYnVpbGQgdGhlIDIuNC4xMyByZWxlYXNlIGZpbmFsbHkgLi4uCgpNb24gSmFuIDE0IDE4OjI3OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogdXBkYXRlZCB0byAyLjQuMTMKCSogZG9jLyogOiB1cGRhdGUgb2YgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBKYW4gMTQgMTc6NTM6NDEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0cmVlLmM6IHNvbWUgY2xlYW51cCBhZnRlciBhbiB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdAoJICBhdCBmaXhpbmcgIzYxMjkwIDotKAoKU3VuIEphbiAxMyAyMTozMDo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbFNhdmVGb3JtYXRGaWxlRW5jKCkgd2hlbiBlbmNvZGluZyA9PSBOVUxMCgkgIEZpeGVzIGJ1ZyAjNjcyMjkKClN1biBKYW4gMTMgMTc6MTQ6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gYXZvaWQgdHJvdWJsZXMgd2hlbiBhIHN1YnRyZWUgaXMgY29waWVkCgkgIGFuZCBjb2FsZXNjZWQgaW4gcGFydCB3aXRoIHRoZSB0YXJnZXQgdHJlZS4gU2hvdWxkIGZpeCAKCSAgYnVnICM2NzQwNwoKU3VuIEphbiAxMyAxNjozNzoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCB2YWxpZGF0aW9uIG9mIGF0dHJpYnV0ZXMgY29udGVudCBvZiB0eXBlCgkgIE5BTUUgTkFNRVMgTk1UT0tFTiBhbmQgTk1UT0tFTlMgdG8gYWNjZXB0IGludGVybmF0aW9uYWxpemVkCgkgIHZhbHVlcywgdmVyeSBvbGQgYnVnLiBGaXhlcyAjNjc2NzEKClN1biBKYW4gMTMgMTU6MDc6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggdHJlZS5jOiBpbnRlZ3JhdGVkCgkgIGEgY291cGxlIG9mIGZpeGVzIGFuZCBhIG5ldyBBUEkgZnVuY3Rpb24geG1sU2V0RW50aXR5UmVmZXJlbmNlRnVuYygpCgkgIGZyb20gS2VpdGggSXNkYWxlIGFuZCBkZWRpY2F0ZWQgdG8geHNsZGJnIHRoZSBYU0xUIGRlYnVnZ2VyLgoKU3VuIEphbiAxMyAxNDoyMzoyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgU2VyZ3VlaSBOYXJvam55aSdzIHBhdGNoIHRvIGFkZCBuYXRpdmUKCSAgdGhyZWFkIHN1cHBvcnQgb24gdGhlIFdpbjMyIHBsYXRmb3JtCgkqIHRlc3RUaHJlYWRzV2luMzIuYyBNYWtlZmlsZS5hbTogYWRkZWQgdGhlIHRlc3QgcHJvZ3JhbSBhbHNvCgkgIGZyb20gU2VyZ3VlaSwgV2luMzIgc3BlY2lmaWMKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOgoJICBhZGRlZCBwYXRjaCBmcm9tIElnb3IgZm9yIHRoZSBXaW5kb3dzIHRocmVhZCBzcGVjaWZpYyBkZWZpbmVzLgoKV2VkIEphbiAgOSAxMjo1MDozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBBbnRob255IEpvbmVzIHBvaW50ZWQgYSBidWcgaW4geG1sQ29weUVudGl0eSgpCgpUdWUgSmFuICA4IDE0OjIzOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qLmh0bWwgZG9jL3NpdGUueHNsIGRvYy9NYWtlZmlsZTogcmVuYW1lZCBYTUwuaHRtbAoJICBvdXRwdXQgcGFnZSBpbnRvIFhNTGluZm8uaHRtbC4gQ2xvc2UgYnVnICM2Njk1MSBhbmQKCSAgcmFpc2VkIGJ5IFJvYmVydCBDb2xsaW5zIHRvby4KClR1ZSBKYW4gIDggMTQ6MTM6MTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogUGF1bCBLZW9naCBwb2ludGVkIG91dCBhIHBvc3NpYmlsaXR5IG9mIHNlZ2ZhdWx0CgkgIG9uIHJlcGV0ZWQgeG1sQWRkRW5jb2RpbmdBbGlhcygpIC8geG1sQ2xlYW51cEVuY29kaW5nQWxpYXMoKS4KCSAgQ2xvc2VzIGJ1ZyAjIDY4MjM4CgpUdWUgSmFuICA4IDEyOjQ4OjI3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIEdkb21lMiBsaW5rcwoKVHVlIEphbiAgOCAxMTozMjozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaDogQXBwbGllZCBmb2xsb3dpbmcgcGF0Y2hlcyBmcm9tIFJvYmVydCBDb2xsaW5zCgkgIGFuZCBtYWtlIHN1cmUgSU5fTElCWE1MIGlzIGRlZmluZWQgd2hlbiBjb21waWxpbmcgaXQKCS0tLS0tLS0KCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIChMSUJYTUxfRExMX0lNUE9SVCk6IFVzZSBvbiBDeWd3aW4KCSAgYXMgd2VsbCBhcyBWaXN1YWwgQy4KCSogcGFyc2VyLmMgKFhNTF9ESVJfU0VQKTogRG9uJ3QgdXNlICdcXCcgZm9yIEN5Z3dpbi4KCSogcGFyc2VySW50ZXJuYWxzLmMgKFhNTF9ESVJfU0VQKTogRG9uJ3QgdXNlICdcXCcgZm9yIEN5Z3dpbi4KCSogc3RyaW8uYyAoUExBVEZPUk1fVU5JWCk6IERlZmluZSBmb3IgQ3lnd2luLgoJKiB0cmlvZGVmLmggKFRSSU9fUExBVEZPUk1fVU5JWCk6IERlZmluZSBmb3IgQ3lnd2luLgoJKiB4bWxJTy5jICh4bWxGaWxlT3Blbik6IFVzZSB1bml4IGJlaGF2aW91ciBmb3IgQ3lnd2luLgoJICBVc2UgYmluYXJ5IG1vZGUgb3BlbnMgZm9yIEN5Z3dpbiAoeG1sRmlsZU9wZW5XIHhtbFBhcnNlckdldERpcmVjdG9yeQoJICB4bWxTeXNJREV4aXN0cyB4bWxOb05ldEV4aXN0cykuCgkqIHhtbGxpbnQuYzogRG9uJ3QgaW5jbHVkZSB3aW5zb2NrMi5oIGZvciBDeWd3aW4uCgpNb24gSmFuICA3IDE3OjUyOjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBKaXJrYSBLb3NlayBwb2ludGVyIG91dCBhIGJ1ZyBpbiB4bWxQYXJzZVRleHREZWNsKCkKCSAgd2hlbiB0aGUgdmVyc2lvbiBpbmZvIGlzIG5vdCBwcmVzZW50LgoKTW9uIEphbiAgNyAwMDowMzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEFudGhvbnkgSm9uZXMgIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSBpbgoJICB4bWxTdHJpbmdHZXROb2RlTGlzdCgpIGFuZCBwcm92aWRlZCBhIGZpeCBmb3IgaXQKClN1biBKYW4gIDYgMTM6NDU6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHBhdGNoIGZyb20gRnJhbmsgSiBGcmFua2xpbiB0byByZW1vdmUgYSBidWcgaW4KCSAgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKSB3aGVuIHRoZSBpbml0aWFsIGJ1ZmZlciBwYXNzZWQKCSAgaXMgbGFyZ2UuCgpTYXQgSmFuICA1IDE5OjI0OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyLyo6IGJpZyBjbGVhbnVwIG9mIHRoZSBXaW5kb3dzL01TVkMgcHJvamVjdCBmaWxlcwoJICBmcm9tIElnb3IgWmxhdGtvdmljCgpXZWQgSmFuICAyIDE0OjExOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogc2hvdWxkIGZpeCAjNjc2NzQgYW5kIGF2b2lkIHRyb3VibGVzIGlmIAoJICB4c2x0cHJvYyBpcyBub3QgYXZhaWxhYmxlIG9yIGZhaWxzIGluIHRoZSBwcmVmaXggcHJvdmlkZWQKClR1ZSBKYW4gIDEgMTc6NDg6NTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IG9uZSBtb3JlIGRvYyBwYXRjaCBmcm9tIENoYXJsaWUgQm96ZW1hbi4KCk1vbiBEZWMgMzEgMTc6MzU6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIHBhcnNlci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBGaXhlZCBhIGZldyBvdGhlciBwcm9ibGVtcyByYWlzZWQgYnkgQ2hhcmxpZSBCb3plbWFuLgoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkWzUtN106IGZpeGVkIHRoZSBvdXRwdXQKCk1vbiBEZWMgMzEgMTc6MTM6MzQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogKi5jIGluY2x1ZGUvbGlieG1sLyouaCBkb2MvaHRtbC8qOiBhcHBsaWVkIDQyIGRvY3VtZW50YXRpb24KCSAgcGF0Y2hlcyBmcm9tIENoYXJsaWUgQm96ZW1hbi4gUmVnZW5lcmF0ZWQgdGhlIEhUTUwgZG9jcy4KClRodSBEZWMgMjAgMTQ6NTk6NTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaCB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBmaXhlcwoJICBmb3IgV2luZG93cyBmcm9tIElnb3IKClR1ZSBEZWMgMTggMTI6MTM6MzMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIEp1c3RpbiBGbGV0Y2hlciBwYXRjaCBmb3IgLS1vdXRwdXQgb3IgLW8KClR1ZSBEZWMgMTggMDg6NTI6MzIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGNsb3NlICM2NzAxOQoKVHVlIERlYyAxOCAwODowODo1MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgSnVzdGluIEZsZXRjaGVyIGdlbmVyaWMgdGltaW5nIHBhdGNoCgkgIHNpbWlsYXIgdG8gdGhlIG9uZSBhbHJlYWR5IGFwcGxpZWQgdG8geHNsdHByb2MuCgpNb24gRGVjIDE3IDE2OjI5OjA4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB0cmVlLmM6IGFwcGxpZWQgZG9jdW1lbnRhdGlvbiBwYXRjaGVzCgkgIGZyb20gQ2hhcmxpZSBCb3plbWFuCgpUaHUgRGVjIDEzIDIxOjI0OjE2IE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy94bWxsaW50LnhtbCwgeG1sbGludC4xIC0gZG9jdW1lbnQgLS1kcm9wZHRkCgkKVGh1IERlYyAxMyAyMzoxOTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggdGhlIHhtbFN0cmR1cCgpIHVzZWQgaW4gdGhlIHByZXZpb3VzIHBhdGNoLgoJKiB2YWxpZC5jOiBhZGRlZCAtLWRyb3BkdGQKCSogdHJlZS5jOiBmaXhlZCB4bWxVbmxpbmtOb2RlIHNvIGl0IGFsc28gcmVtb3ZlcyB0aGUgcmVmZXJlbmNlcwoJICBmcm9tIHRoZSBkb2N1bWVudCBpZiB0aGUgbm9kZSBpcyBhIERURAoKVGh1IERlYyAxMyAxNTo1NDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHZhbGlkLmM6IGNsZWFudXAgc29tZSBzdGF0aWMgZGVjbGFyYXRpb25zCgpUaHUgRGVjIDEzIDE1OjIzOjA0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogcmVtb3ZlZCBhbm90aGVyIHN0cmR1cCgpCgkqIGRvYy9GQVE6IHJlbW92ZWQgdGhlIEhQL1VYIGVudHJ5CgpUaHUgRGVjIDEzIDA5OjQ0OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeCBidWcgIzY2ODE2IHdoZW4gdmFsaWRhdGluZy4KCSogeG1sbGludC5jOiBkb24ndCB1c2Ugc3lzL3RpbWUuaCBpZiBjb25maWd1cmUgZGlkIG5vdCBmb3VuZCBpdAoKTW9uIERlYyAxMCAyMTozOTo1NSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jcy94bWxsaW50LjEsIHhtbGxpbnQueG1sLCB4bWxjYXRhbG9nLjEsIHhtbGNhdGFsb2dfbWFuLmh0bWwsCgl4bWxjYXRhbG9nX21hbi54bWwKCk1vbiBEZWMgMTAgMjI6MDY6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IEhpZXRhbmllbWkgSmFya2tvIHBvaW50ZWQgb3V0IHRoYXQKCSAgeG1sSW5pdE1lbW9yeSgpIHdhcyBkZWNsYXJlZCB0d2ljZQoKU3VuIERlYyAgOSAxNDo1OToyMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGRvIG5vdCByZWZlcmVuY2Ugc3RyZHVwKCkgIQoJKiBjb25maWd1cmUuaW4gbGlieG1sLTIuMC5wYy5pbjogdHJ5aW5nIHRvIGZpeCB0aGUgbGlicwoJICBvZiB0aGUgdmFyaW91cyBjb25maWcgZXh0cmFjdGlvbiBtb2R1bGVzCgpGcmkgRGVjICA3IDE1OjIxOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiA6IHByZXBhcmluZyAyLjQuMTIKCSogZG9jLyogOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpGcmkgRGVjICA3IDEyOjMyOjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBjbG9zZWQgYnVnICM2NjE1OQoJKiB0ZXN0VVJJLmM6IGFkZGVkIC0tZXNjYXBlIG9wdGlvbgoJKiBjb25maWd1cmUuaW46IHNvbWUgY2xlYW51cCBmb3IgeG1sMi1jb25maWcgLS1jZmxhZ3MKClRodSBEZWMgIDYgMTU6MzE6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHRlc3RUaHJlYWRzLmM6IHJlbW92ZWQgc29tZSBtaXNwbGFjZWQgaW5jbHVkZXMKCSAgb2YgeG1sdmVyc2lvbi5oCgpUaHUgRGVjICA2IDA5OjA2OjA4IEVTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24gZml4aW5nIGEgcG9zc2libGUKCSAgcHJvYmxlbSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgoKV2VkIERlYyAgNSAxMzowMTozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLmggcGFyc2VyLmMgdGVzdFRocmVhZHMuYyBtYWNvcy86IGludGVncmF0ZWQKCSAgRXJpYyBMYXZpZ25lIGNvbnRyaWJ1dGlvbiB0byBidWlsZCBsaWJ4bWwyIG9uIE1hY09TIHVzaW5nCgkgIENvZGVXYXJyaW9yLgoKVHVlIERlYyAgNCAxNDoxMzo0NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgR2VlcnQgS2xvb3N0ZXJtYW4ncyBwYXRjaCB0byBmaXgKCSAgLS1yZXBlYXQgLS10aW1pbmcgb3V0cHV0CgpUaHUgTm92IDI5IDE3OjEwOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBSb2JpbiBCZXJqb24gPHJvYmluQGtub3dzY2FwZS5jb20+IGZvdW5kIGEgY2FzZQoJICB3aGVyZSBub24td2VsbGZvcm1lZCBYTUwgZGVjbGFyYWN0aW9ucyB3ZXJlIG5vdCBkZXRlY3RlZC4KCldlZCBOb3YgMjggMTU6NDE6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBvaW50ZXIuYzogZml4ZWQgYSBjb21waWxhdGlvbiBidWcgcG9pbnRlZCBieSBEYW5ueSBKYW1zaHkKCldlZCBOb3YgMjggMTA6MDk6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXMgcm9iZXJ0IHBvaW50ZWQgYWdhaW4sIHhtbElucHV0Q2FsbGJhY2tJbml0aWFsaXplZAoJICBnZXRzIHJlc2V0IGJ5IHhtbENsZWFudXBJbnB1dENhbGxiYWNrcygpIGFuZCB0aGlzIG1ha2VzIHRoZQoJICBmdW5jdGlvbiB1c2VsZXNzLiBTYW1lIGZvciBvdXRwdXQuCgpUdWUgTm92IDI3IDE3OjIyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHJvYmVydCBwb2ludGVkIG91dCBhIGxvb3AgZXJyb3IgaW4gY2FsbGJhY2sgY2xlYW51cHMKCk1vbiBOb3YgMjYgMTY6NTY6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6CgkgIG1vdmVkIHhtbEdldExpbmVObygpIGFuZCB4bWxHZXROb2RlUGF0aCgpIGludG8gdGhlIG1haW4gdHJlZSBtb2R1bGUsCgkgIHRoZXkgYXJlIG5vdCByZWFsbHkgdGllZCB0byBkZWJ1Z2dpbmcKCk1vbiBOb3YgMjYgMTE6MzE6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjExCgkqIHhtbGxpbnQuYzogYmV0dGVyIC0tY2F0YWxvZ3MgZGVzY3JpcHRpb24KClN1biBOb3YgMjUgMTE6MzQ6MjQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyBpbiB4bWxTZXRQcm9wKCkKClRodSBOb3YgMjIgMTk6MTk6MTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0cmVlLmMgeG1sSU8uYyB4bWxtZW1vcnkuYzogc29tZSBjbGVhbnVwcyB3aGVuIGNoYXNpbmcKCSAgdW5hcHByb3ByaWF0ZSBzdGRvdXQgb3V0cHV0LgoKVGh1IE5vdiAyMiAxMzo1ODoxNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IEZpeGVkIGEgY291cGxlIG9mIG1hY3JvIGVycm9ycyBwb2ludGVkIG91dAoJICBieSBEZW5pcyBCZXVyaXZlLCBjbG9zZXMgIzY1MTExCgpUdWUgTm92IDIwIDEwOjM0OjAxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGluIGNhc2Ugb2YgY29udGVudCBtb2RlbCB2YWxpZGl0eSBlcnJvciwgZG9uJ3QKCSAgcHJpbnQgaXQgaWYgdmFsaWRpdHkgd2FybmluZ3Mgd2VyZSBub3QgcmVxdWVzdGVkLgoKVHVlIE5vdiAyMCAwOTozMDowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2hlcyBmcm9tIEJyaWFuIEQgUmlwbGV5LgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcmVtb3ZlZCB0aGUgbGFzdCBleGl0KCkgY2FsbC4gUHJpbnQgYW4KCSAgdW5tYXNrYWJsZSBlcnJvciBvbiBzdGRlcnIgaW5zdGVhZCAobGlicmFyeSBtaXNtYXRjaCBkZXRlY3Rpb24pCgpTYXQgTm92IDE3IDE3OjE2OjUxIE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwsIGRvYy94bWxsaW50LjEgLSB1cGRhdGUgeG1sbGludCBtYW4gcGFnZSB3aXRoCglzaGVsbCBpbnN0cnVjdGlvbnMgZnJvbSBIZWlrbyBSdXBwCgpUaHUgTm92IDE1IDE0OjUzOjQyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogdXNlIHRoZSBVUkwgbm90YXRpb24gZmlsZTovLyBmb3IgZGVmYXVsdCBjYXRhbG9nIHBhdGhzCgpXZWQgTm92IDE0IDE2OjAzOjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYmV0dGVyIGNvbW1lbnRzIGZvciBfcHJpdmF0ZSBmaWVsZHMKCSogdHJlZS5jOiByZW1vdmVkIGEgcHJvYmxlbSB3aGVuIGNvcHlpbmcgYW4gZW50aXR5IHJlZmVyZW5jZS4KClR1ZSBOb3YgMTMgMTY6MjM6MDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdm1zLyo6IHVwZGF0ZWQgaW5zdHJ1Y3Rpb25zIGFuZCBkaWZmcyBmcm9tIEpvaG4gQSBGb3RoZXJpbmdoYW0KCk1vbiBOb3YgMTIgMjM6NDM6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYXZvaWQgYW4gaW5jbHVkZSBwcm9ibGVtIGlmCgkgICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4gaGFwcGVucyBmaXJzdCBpbiBjb2RlCgkgIHNlZW1zIHRvIGJlIHRoZSBjYXNlIGluIEtERSBsaWJzCgpNb24gTm92IDEyIDIyOjMyOjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC8qIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiB1cGRhdGUKCSAgZnJvbSBJZ29yIGZvciBXaW5kb3dzCgpNb24gTm92IDEyIDEwOjE5OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBHYXJ5IFBlbm5pbmd0b24gcG9pbnRlZCBvdXQgYSBtaXNzaW5nIHByZWZpeAoKU2F0IE5vdiAxMCAxMjo1NTo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTAKCSogZG9jLyo6IHVwZ3JhZGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpTYXQgTm92IDEwIDEyOjMzOjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4IGNvbW1lbnQgaW4gc2NyaXB0cyBlbGVtZW50IHBhcnNpbmcuCgkqIHJlc3VsdC9IVE1ML2RvYzMqOiB1cGRhdGVkIHRoZSByZXN1bHRzLgoKU2F0IE5vdiAxMCAxMToxODoxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogYW5vdGhlciBVUkkgYnVnIGZpeCAjNjMzMzYsIHVzaW5nIEpvZWwgWW91bmcgcGF0Y2guCgpTYXQgTm92IDEwIDExOjA3OjI2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDogYWRkIHhtbEdldE5vZGVQYXRoKCkKCSAgYSBjbGVhbmVkIHVwIHZlcnNpb24gb2YgdGhlIFB3ZCBzaGVsbCBzdHJpbmcgZ2VuZXJhdGlvbi4KCkZyaSBOb3YgIDkgMDA6MzQ6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHRyeWluZyB0byBmaXggbmFtZXNwYWNlcyArCgkgIHZhbGlkYXRpb24gcHJvYmxlbXMgZm9yIGdvb2QsIGNsb3NpbmcgIzYzNjE5IGluIHRoZSBwcm9jZXNzCgkqIHJlc3VsdC92YWxpZC9kaWEueG1sIHRlc3QvdmFsaWQvZGlhLnhtbDogdGhlIERpYSB0ZXN0IHdhcwoJICB3cm9uZyBpbiB0aGlzIHJlc3BlY3QsIGZpeGVkIGl0LgoKVGh1IE5vdiAgOCAxODozMTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IE1vcnVzIFdhbHRlciBwYXRjaCB0byBhbGxvdyAtLWZvcm1hdCBhbmQgLS1lbmNvZGUKClRodSBOb3YgIDggMTQ6NTI6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogU3RlZmFuIEtvc3QgcHJvdmlkZWQgYW4gaGVscCBjb21tYW5kIGZvciB0aGUgc2hlbGwKCldlZCBOb3YgIDcgMTQ6MzI6NTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogSGVpa28gUnVwcCBwb2ludGVkIHRoYXQgdGhlIHNoZWxsIHdvdWxkIGNyYXNoCgkgIG9uIGVtcHR5IG5vZGVzZXRzIHJldHVybnMuCgpXZWQgTm92ICA3IDEzOjUyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBXZWlxaSBHYW8gcG9pbnRlZCBvdXQgdGhhdCB4bWxjYXRhbG9nCgkgIG1pZ2ggbmVlZCB0aGUgaGlzdG9yeSBsaWJyYXJpZXMKClR1ZSBOb3YgIDYgMjM6NDk6MDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHRlc3QvSFRNTC9sdC5odG1sIHJlc3VsdC9IVE1ML2x0Lmh0bWwqOgoJICBoYW5kbGUgdGhlIGNhc2Ugb2YgPCBpbiBxdW90ZWQgYXR0cmlidXRlcywgQmFzdGlhbiBLbGVpbmVpZGFtCgpUdWUgTm92ICA2IDE2OjIxOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVsZWFzaW5nIDIuNC45CgkgIGZpeGluZyBjYXRhbG9nIGJyZWFrYWdlcwoJKiBNYWtlZmlsZS5hbSBjYXRhbG9nLmMgcmVzdWx0L2NhdGFsb2dzL2NhdGFsIAoJICByZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nLiogdGVzdC9jYXRhbG9ncy9jYXRhbCo6CgkgIGZpeGVkIG1vcmUgcHJvYmxlbXMgaW4gY2F0YWxvZyBzdXBwb3J0LCBhZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCSAgZm9yIGJvdGggWE1MIGFuZCBTR01MIGNhdGFsb2cgaGFuZGxpbmcKCk1vbiBOb3YgIDUgMjA6MjY6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYXBwbGllZCBhbiBpbXByb3ZlbWVudCB0byB4bWxHZXRMaW5lTm8oKSBmcm9tCgkgIEtlaXRoIElzZGFsZQoKTW9uIE5vdiAgNSAxNToyMDoxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGRvaGhoaCBYTUwgY2F0YWxvZyBhZGQgYW5kIHJlbW92ZSBvcHMgd2VyZSBicm9rZW4gdG9vLgoJICBTaWRlIGVmZmVjdCBvZiB0aGUgcHJvZ3Jlc3NpdmUgY2F0YWxvZyBsb2FkaW5nCgpNb24gTm92ICA1IDEyOjQwOjU0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjb25mZXhlY2RpciBhbmQgY29uZmV4ZWNfREFUQSB3ZXJlIGRlZmluZWQgdHdpY2UKCSAgcG9pbnRlZCBvdXQgYnkgS2FybCBFaWNod2FsZGVyCgkgIApTdW4gTm92ICA0IDIzOjE4OjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYzogYXZvaWQgdW5saW5rKCkgYW5kIHVzZSByZW1vdmUoKSBpbnN0ZWFkLgoKU3VuIE5vdiAgNCAyMzoxMjozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogY2xlYW51cAoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogdXBkYXRlZCB3aXRoIDIuNC44CgpTdW4gTm92ICA0IDIxOjE3OjI0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgZ2xvYmFsLmRhdGEgZ2xvYmFscy5jIHRlc3RUaHJlYWRzLmM6IGZpeCBidWcgIzYzNzUyCgkgIG9mIGNvbXBpbGluZyBsaWJ4bWwgd2l0aCBhIG5vbiBzdGFuZGFyZCBzZXQgb2Ygb3B0aW9ucwoKU3VuIE5vdiAgNCAxMzoxMTo0MSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0CgoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuMSAtIHVwZGF0aW5nIHhtbGxpbnQgbWFuIHBhZ2UgdG8KCWRvY3VtZW50IC0tc2dtbCBvcHRpb24sIGZpeGluZyBnbm9tZSBidWd6aWxsYSAjNjMzODIKClN1biBOb3YgIDQgMjA6NTY6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYzogRml4ZWQgU0dNTCBjYXRhbG9ncwoJICBicmVha2FnZSBvZiAyLjQuNywgYWRkZWQgYSBjb3VwbGUgb2YgcmVhbGx5IG5lZWRlZCBBUElzCgkgIGxpa2UgeG1sQ2F0YWxvZ0lzRW1wdHkoKSBhbmQgeG1sTmV3Q2F0YWxvZygpCgkqIHhtbGNhdGFsb2cuYzogdXBkYXRlZCAtLXNnbWwgLS1ub291dCB0byBiZSBhIHN1aXRhYmxlIHJlcGxhY2VtZW50CgkgIGZvciBpbnN0YWxsLWNhdGFsb2cKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjgKClRodSBOb3YgIDEgMTU6Mjk6MzEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogbW9yZSBpbmNsdWRlCgkgIGNsZWFudXBzLCBleHBvcnQgY2xlYW5seSBvbmUgaHRtbCBvdXRwdXQgKyBmb3JtYXQgZnVuY3Rpb24uCgpUaHUgTm92ICAxIDE0OjEyOjEyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmVkIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyBjYWxsIGZyb20KCSAgeG1sSW5pdFBhcnNlcigpIHNpbmNlIGl0IGNvdWxkIGRlc3Ryb3kgcHJldmlvdXMgY2FsbHMgdG8KCSAgeHNsdFNldEdlbmVyaWNFcnJvckZ1bmMoKSBlZmZlY3RzCgpUaHUgTm92ICAxIDA5OjM3OjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDogYm9vbCBjYW4gYmUgYSByZXNlcnZlZAoJICBrZXl3b3JkLgoKV2VkIE9jdCAzMSAxODo1MDowOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiB0aHJlYWRzLmM6IGNsZWFudXAgdG9vCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogYWRkZWQgeG1sTm9OZXRFeHRlcm5hbEVudGl0eUxvYWRlcigpCgkgIGZyb20geHNsdHByb2MKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiB0cnlpbmcgdG8gYnJlYWsgYQoJICBkZXBlbmRhbmN5IGxvb3AuCgpUdWUgT2N0IDMwIDE4OjM4OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogSnVzdGluIEZsZXRjaGVyIHBvaW50ZWQgb3V0IHRoYXQgeG1sUGFyc2VYTUxDYXRhbG9nCgkgIHdhcyBub3QgdXNlZCBhbnltb3JlICEKClR1ZSBPY3QgMzAgMTM6MzM6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjcKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtOiBzd2l0Y2hlZCB0byB0aGUgbGF0ZXN0IHhtbGxpbnQKCSAgbWFudWFsIHBhZ2UgZnJvbSBKb2huCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2MgYW5kIHJlYnVpbHQgdGhlIGdlbmVyYXRlZCBwYWdlcwoKVHVlIE9jdCAzMCAxMTozMToxOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBjbG9zaW5nIGJ1ZyAjNjI3MTEsIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlcgoJICBjbG9zZSBzdGRpbiBvciBzdGRvdXQuCgpUdWUgT2N0IDMwIDEwOjQ2OjEyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBzZWNvbmQgcGFzcyBhdCBmaXhpbmcgIzYzMzM2LCB1c2luZyBKb2VsIFlvdW5nCgkgIGZpbmFsIHBhdGNoLiBsb29rcyBva2F5LgoKVHVlIE9jdCAzMCAwMDo1NjowNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYyBpbmNsdWRlL2xpYnhtbC91cmkuaDogdHJ5aW5nIHRvIGNsZWFyICM2MzMzNgoJICBhbGxvd2luZyB0aGUgZXNjYXBpbmcgcm91dGluZSB0byBwYXJzZSB1bmNvbmZvcm1hbnQKCSAgVVJJLVJlZmVyZW5jZXMuCgpNb24gT2N0IDI5IDE5OjA5OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZtcy9yZWFkbWUudm1zIHZtcy9idWlsZF9saWJ4bWwuY29tIG5hbm9mdHAuYyAKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBhIGZldyBWTVMgdXBkYXRlcyBmcm9tCgkgIEpvaG4gQSBGb3RoZXJpbmdoYW0KCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB4bWxJTy5jOiBhZGRlZCB4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MoKQoJICBhbmQgeG1sQ2xlYW51cE91dHB1dENhbGxiYWNrcygpIGZvciB0aGUgUGVybCBiaW5kaW5nIHBlb3BsZS4KCk1vbiBPY3QgMjkgMTI6NDQ6MTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgZ2xvYmFscy5jIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZXJyb3IuYzoKCSAgYXBwbHkgZml4ZXMgdG8gY2xvc2UgIzYzMjcxIGFuZCBhdm9pZCBzZWdmYXVsdHMgd2hlbgoJICB0aGUgZXJyb3Igcm91dGluZSBnZXRzIGNhbGxiZWQgYmVmb3JlIHhtbEluaXRQYXJzZXIoKQoJICBnZXQgY2FsbGVkLgoJKiBuYW5vZnRwLmMgZXJyb3IuYzogQXBwbGllZCBwYXRjaGVzIGZyb20gSnVzdGluIEZsZXRjaGVyCgkgIGNvcnJlY3Rpbmcgc29tZSB4bWxHZW5lcmljRXJyb3IgbWlzdXNlcy4KClNhdCBPY3QgMjcgMTQ6MDQ6NDUgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL3htbGxpbnQueG1sLCBkb2MveG1sbGludC4xCglOZXcgYW5kIGltcHJvdmVkIG1hbiBwYWdlIGZvciB4bWxsaW50IC0gLnhtbCBpcyB0aGUgb3JpZ2luYWwsIC4xCglpcyB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlCgpXZWQgT2N0IDI0IDE0OjM0OjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2Mvc2l0ZS54c2wgZG9jLyouaHRtbCBkb2MvTWFrZWZpbGUuYW06IG5vdyBhdXRvZ2VuZXJhdGUKCSAgdGhlIHdlYiBzaXRlIGZyb20gdGhlIG1haW4gSFRNTCBkb2N1bWVudC4KClR1ZSBPY3QgMjMgMTQ6MzI6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhbiBlcnJvbmVvdXMgdmFsaWRhdGlvbiBidWcgd2hlbiBQRSByZWZzCgkgIG9jY3VycyBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgcmVmZXJlbmNlZCBmcm9tIHRoZQoJICBpbnRlcm5hbHMgc3Vic2V0CgkqIHRlc3QvdmFsaWQvaW5kZXgueG1sIHRlc3QvdmFsaWQvZHRkcy9uaXRmLTItNS5kdGQKCSAgdGVzdC92YWxpZC9kdGRzL05ld3NNTHYxLjAuZHRkIHJlc3VsdC92YWxpZC9pbmRleC54bWwqOgoJICBhZGRlZCB0aGUgYXNzb2NpYXRlZCB0ZXN0Y2FzZSwgaXQncyBhIG5pY2Ugb25lLgoJKiBIVE1McGFyc2VyLmM6IGdlbmVyYXRlIHRoZSBEVEQgbm9kZSBhcyBIVE1MIHN0aWxsIC4uLgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBlcnJvcnMgaW4gU2V0L0dldE1ldGFFbmNvZGluZyAKCk1vbiBPY3QgMjIgMTQ6MjA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYSBidWcgaW4gaHRtbE5ld0RvYygpCgpNb24gT2N0IDIyIDExOjMyOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3RocmVhZHMvKjogYWRkZWQgZW50aXRpZXMgdGVzdGluZyB0byB0aGUgVGhyZWFkIHRlc3QKCSogdGVzdFRocmVhZHMuYzogbWFrZSB0aGUgdGVzdCByZWFzb25hYmxlCgkqIERPQ0JwYXJzZXIuYzogZml4IHRoZSBEVEQgcHVibGljIGFuZCBzeXN0ZW0gSUQKCSogeG1sbGludC5jOiBhZGRlZCAtLXNnbWwgZm9yIFNHTUwgRG9jQm9vayBpbXBvcnRpbmcKCSogTWFrZWZpbGUuYW06IGFkZGVkIERvY2J0ZXN0cyB0YXJnZXQKCkZyaSBPY3QgMTkgMTE6NDc6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYzogdXNlIG9ubHkgImFub255bW91c0AiIHN0cmluZyBmb3IgYW5vbnltb3VzIHBhc3N3ZHMKCSogdGVzdFRocmVhZHMuYzogcmVtb3ZlZCBib2d1cyBpbmNsdWRlCgpUaHUgT2N0IDE4IDE2OjU2OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jIHJlc3VsdC92YWxpZC9yc3MueG1sIHJlc3VsdC92YWxpZC9yc3MueG1sLmVycjoKCSAgZml4ZWQgYSB2ZXJ5IHNlcmlvdXMgKGxvb3BpbmcpIHZhbGlkYXRpb24gYnVnCgpXZWQgT2N0IDE3IDExOjU2OjI1IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmggdGhyZWFkcy5jCgkgIHRlc3RUaHJlYWRzLmM6IGZhciBtb3JlIHRlc3RpbmcsIGNsZWFuaW5nIHVwIGJ1Z3MKCSogKi5jIDogbWFrZSBzdXJlIGdsb2JhbHMuaCBpcyBhbHdheXMgaW5jbHVkZWQuCgpXZWQgT2N0IDE3IDE3OjQxOjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyeSB0byBnZXQgcmlkIG9mIHBhcnNlciBsb29wcyBmb3IgZ29vZC4KCldlZCBPY3QgMTcgMTM6Mjk6MDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgc29tZSBidWdzIGluIENGTEFHUyBwYXNzaW5nLgoJKiB0ZXN0L3RocmVhZHMgTWFrZWZpbGUuYW0gdGVzdFRocmVhZHMuYzogYWRkZWQgYSBzcGVjaWZpYwoJICB0aHJlYWRlZCB0ZXN0IGNhc2UgKHJlYWxseSBuYXN0eSwgZ3VhcmFudGVlZCkuCgpUdWUgT2N0IDE2IDIzOjAxOjQ5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHNlcmlvdXMgY2xlYW51cCBvbiB0aGUgbWFuYWdlbWVudCBvZiB0aGUKCSAgWE1MIGNhdGFsb2cgdHJlZSwgbW9yZSB0ZXN0cyBkb25lLCBlc3BlY2lhbGx5IHdpdGgKCSAgdGhlIGNhdGFsb2cgUEkuCgpUdWUgT2N0IDE2IDA4OjQzOjQzIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogYXZvaWQgYSBwcm9ibGVtIGluIGNhdGFsb2cgY2xlYW51cCBvbiBTTVAgaWYKCSAgY2F0YWxvZ3Mgd2VyZSBub3QgaW5pdGlhbGl6ZWQuCgpUdWUgT2N0IDE2IDE0OjMzOjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeHBhdGguYzogdHJ5aW5nIHRvIGNsZWFudXAgdGhlIG5vdCB0aHJlYWQgc2FmZQoJICBwYXJ0cyBvZiB0aGUgbGlicmFyeS4KCk1vbiBPY3QgMTUgMTQ6MzA6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBjb25maWd1cmUuaW4gZ2xvYmFsLmRhdGE6IG1ha2UKCSAgdGhlIGFsbG9jYXRpb24gYmUgcGVyLXRocmVhZCBhIGNvbmZpZ3VyZSBvcHRpb24KCSogZW5jb2RpbmcuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZml4ZWQgY29tcGlsYXRpb24KCSAgZXJyb3JzCgpNb24gT2N0IDE1IDEyOjQ1OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogTm9ybSByZXBvcnRlZCB0aGF0IGEgZmV3IGxpbmVzCgkgIGFkZGVkIHdlcmUgYnJlYWtpbmcgbGlieHNsdCBjb21waWxlLCByZW1vdmVkIHRoZW0gZm9yIG5vdwoKU3VuIE9jdCAxNCAwNTo1NTowMSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0aHJlYWRzLmM6IGRlYnVnZ2VkIGFuZCBmaXhlZAoJICBpbml0aWFsaXphdGlvbiBwcm9ibGVtcyB3aGljaCB3ZXJlIGdpdmluZyB0cm91YmxlcyBvbiBTTVAKCSAgYm94ZXMuCgpTYXQgT2N0IDEzIDE2OjE3OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogbWlzc2luZyBnbG9iYWxzLmgKClNhdCBPY3QgMTMgMTQ6MTU6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogYWRkZWQgYSBjb3VwbGUgb2Ygc3RhbmRhcmQgaW5jbHVkZXMuCgpTYXQgT2N0IDEzIDExOjA4OjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9TQVguaCBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggSFRNTHBhcnNlci5jIFNBWC5jIGVycm9yLmMgZ2xvYmFscy5jCgkgIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3REb2Nib29rLmMKCSAgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5jIHVyaS5jIHhsaW5rLmMgeG1sbWVtb3J5LmM6CgkgIEFwcGxpZWQgdGhlIGxhc3QgcGF0Y2hlcyBmcm9tIEdhcnksIGNsZWFudXAsIGFjdGl2YXRlZCB0aHJlYWRpbmcKCSAgYWxsIHVzZXIgYWNjZXNzaWJsZSBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3cgaGFuZGxlZCBpbiBnbG9iYWxzLltjaF0KCSAgU3RpbGwgYSBiaXQgcm91Z2h0IGJ1dCBtYWtlIHRlc3RzIHBhc3NlcyB3aXRoIGVpdGhlciAKCSAgLS13aXRoLXRocmVhZHMgZGVmaW5lZCBhdCBjb25maWd1cmUgdGltZSBvciBub3QuCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IGFkZGVkIGdsb2JhbHMuW2NoXSBhbmQgdGhyZWFkcwoJICBsaW5raW5nIG9wdGlvbnMKCkZyaSBPY3QgMTIgMTk6MjU6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBnbG9iYWxzLmMgIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaAoJICB0aHJlYWRzLmMgYnVpbGRfZ2xvYi5weSBnbG9iYWwuZGF0YSB4bWxjYXRhbG9nLmMgYWNjb25maWcuaAoJICBjb25maWd1cmUuaW46IHN0YXJ0ZWQgaW50ZWdyYXRpbmcgdGhlIGNvcmUgb2YgdGhlIHRocmVhZCBzdXBwb3J0CgkgIG5vdCBhY3RpdmF0ZWQgeWV0IGJ1dCBoYWxmIGludGVncmF0ZWQuIFRoZSBjb2RlIHNob3VsZCBzdGlsbAoJICBjb21waWxlIGFuZCB3b3JrIGFueXdheS4KCkZyaSBPY3QgMTIgMDA6NTM6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBuYW5vZnRwLmMKCSAgcGFyc2VyLmMgdmFsaWQuYyB4bWxtZW1vcnkuYyB4cGF0aC5jIHhwb2ludGVyLmM6IHN0YXJ0ZWQKCSAgaW50ZWdyYXRpbmcgdGhlIG5vbi1jb250cm92ZXJzaWFsIHBhcnRzIG9mIEdhcnkgUGVubmluZ3RvbgoJICBtdWx0aXRocmVhZCBwYXRjaGVzCgkqIGNhdGFsb2cuYzogY29ycmVjdGVkIGEgc21hbGwgYnVnIGludHJvZHVjZWQKClRodSBPY3QgMTEgMjA6NTg6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHZlcnkgc2VyaW91cyBjbGVhbnVwLAoJICBpc29sYXRpbmcgdW5wb3J0YWJsZSBjb2RlIGFuZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHRoZSBhY2Nlc3NlcwoJICB0byB0aGUgZ2xvYmFsIHNoYXJlZCBjYXRhbG9nLiBNYXkgbmVlZCBtb3JlIHRlc3RpbmcgIQoKVGh1IE9jdCAxMSAxMToxMDozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaCBkZWJ1Z1hNTC5jIHRyZWUuYzogaW50ZWdyYXRpbmcKCSAgS2VpdGggSXNkYWxlIHBhdGNoZXMgZm9yIHRoZSBYU0xUIGRlYnVnZ2VyIGludGVyZmFjZXMuIFNvbWUKCSAgY2xlYW51cAoKVGh1IE9jdCAxMSAwODo0NDowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IHVwZGF0ZSBmcm9tIFRvYmlhcyBQZXRlcnMgZm9yIDIuNC41CgkqIERPQ0JwYXJzZXIuYzogZ2VuZXJhdGUgbGluZSBudWJlcnMgaW4gZWxlbWVudHMKCldlZCBPY3QgMTAgMTE6MzU6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC42IHJlbGVhc2UKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYzogZml4ZWQgYSBudW1iZXIgb2YgdGVoL3RoZSB3aWRodC93aWR0aCB0eXBvcwoKTW9uIE9jdCAgOCAyMDozODoyNyBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZy4xLCB4bWxjYXRhbG9nX21hbi5odG1sCglhZGRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgRFYncyBzdXBlcmNhdGFsb2cgc3VwcG9ydAoKTW9uIE9jdCAgOCAxNzowMDoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmM6IGFkZGluZyBTR01MCgkgIHN1cGVyIGNhdGFsb2cgc3VwcG9ydCBhZGRpbmcgb25lIEFQSSBhbmQgb25lIGZsYWcgLS1zZ21sIHRvCgkgIHhtbGNhdGFsb2cKClN1biBPY3QgIDcgMTY6NDM6NTcgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2cuMQoJT25lIG1vcmUgY3JhY2sgYXQKCWh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzOTIgCgkKClN1biBPY3QgIDcgMTg6NDc6MDIgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiB4cGF0aC5jOiBpbXBsZW1lbnRlZCB4bWxYUGF0aE9iamVjdENvcHkgZm9yIGV4dGVybmFsIG9iamVjdHMKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeG1sWFBhdGhTdGFja0lzRXh0ZXJuYWwKClNhdCBPY3QgIDYgMTY6MjU6NTIgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZ19tYW4uaHRtbCwgeG1sY2F0YWxvZy4xCglmaW5pc2hpbmcgdXAgZml4IHRvCglodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzkyLCBtYWtpbmcKCXRoZSB4bWxjYXRhbG9nIG1hbiBwYWdlIGRpc3BsYXkgbW9yZSBlbGVnYW50bHkKClNhdCBPY3QgIDYgMTU6Mjc6MTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogY2xvc2luZyBidWcgIzYxODMyCgkqIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBhIHdhcm5pbmcKClNhdCBPY3QgIDYgMTU6MDc6MTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyAjNjE2NzMgcGFydCBJLCBkbyBub3QgbG9vc2UgZG9jIGluZm9ybWF0aW9uCgkgIHdoZW4gY29weWluZyByZXN1bHQgdmFsdWUgdHJlZXMuCgpTYXQgT2N0ICA2IDExOjU4OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gaGFyZGVuIHRoZSBYUGF0aCBpbnRlcnByZXRlcgoKRnJpIE9jdCAgNSAyMDozNzo1MSBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2cuMSB1cGRhdGVkIHVzaW5nIGEgbmV3IHN0eWxlc2hlZXQgdG8gYWRkcmVzcywgaW4KCXBhcnQsIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzOTIKCkZyaSBPY3QgIDUgMjM6MzU6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyOiByZXBhaXJlZCBhbm90aGVyIGxvb3AgcHJvYmxlbQoKRnJpIE9jdCAgNSAxMToxNjoyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGFwcGxpZWQgZml4IGZyb20gTWF0aGlhcyBIYXNzZWxtYW5uIGFib3V0IGEgYnVnIGluIFVSSQoJICBwYXJzaW5nLgoJKiB4cGF0aC5jOiBmaXggYnVnICM2MTI5MSB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIG5vZGUgaXMKCSAgbWlzc2luZyBmcm9tIHRoZSBuYW1lc3BhY2UgYXhpcy4KCSogdHJlZS5jOiByZWZ1c2UgdG8gY3JlYXRlIG5hbWVzcGFjZXMgbm9kZXMgd2l0aCBwcmVmaXggInhtbCIKClRodSBPY3QgIDQgMTY6NDc6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBvdWNoIGEgbm9uLWRlZmluZWQgbmFtZXNwYWNlIGNvdWxkIGxlYWQgdG8gYSBjcmFzaCwKCSAgZml4ZWQgIzYxMjE1CgpUaHUgT2N0ICA0IDE2OjI0OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xvc2VkIGJ1ZyAjNjEwNTQKCldlZCBPY3QgIDMgMTU6MTk6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBjbG9zaW5nICM2MDcwOAoKVHVlIE9jdCAgMiAxNTo1MjowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYzoKCSAgYWRkaW5nIHhtbFNBWFBhcnNlRmlsZVdpdGhEYXRhIGZvbGxvd2luZyBNYXJjbyBTdGlwZWsgc3VnZ2VzdGlvbgoKVHVlIE9jdCAgMiAxMToyNzo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogY2xvc2UgYnVnICM2MTU1MCB3aGVuIHhtbDogd2Fzbid0IGNvbnNpZGVyZWQgYSBuYW1lc3BhY2UKClR1ZSBPY3QgIDIgMTE6MTg6MzIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IElnb3IgWmxhdGtvdmljIHBhdGNoZXMKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogZml4ZWQgdHlwb3MKCk1vbiBPY3QgIDEgMDk6MzQ6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogSnVzdGluIEZsZXRjaGVyIHByb3ZpZGVkIGNsZWF1cCBjb2RlIGluIGNhc2UKCSAgSEFWRV9TVEFUIGlzIG5vdCBkZWZpbmVkCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogSWdvciBabGF0a292aWMgc3VnZ2VzdGVkIHRvIGhhdmUKCSAgSEFWRV9TVEFUIGRlZmluZWQgdGhlcmUKClNhdCBTZXAgMjkgMDA6MTU6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjYXRhbG9nLmMgLSBmaXhlZCB0eXBpbmcgZXJyb3IgcmVwb3J0ZWQgYnkgTS4gQmFycm9zCgpTdW4gU2VwIDIzIDIxOjAyOjM5IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiB4bWxsaW50LmMgLSBmaXhpbmcgdHlwbwoKU2F0IFNlcCAyMiAxMDowMDowMCBIS1QgMjAwMSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYzogc21hbGwgZW5oYW5jZW1lbnQgdG8gcHJldmVudCBsb29wIG9uCgkgIHVucmVjb2duaXphYmxlIGRhdGEKCkZyaSBTZXAgMjEgMTE6NDU6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBhcHBseWluZyBwYXRjaCBmcm9tIGJ1ZyAjNjA3NTcgdGhpcwoJICBzaG91bGQgY2xvc2UgaXQKClRodSBTZXAgMjAgMTU6NTQ6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2Ygd2FybmluZwoJKiB4cGF0aC5jOiB0cnkgdG8gc29sdmUgdGhlIGxpbmtpbmcgcHJvYmxlbSBvbiBwbGF0Zm9ybXMKCSAgbmVlZGluZyB0cmlvIHRvIGNvbXBpbGUKCldlZCBTZXAgMTkgMTA6MDE6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBiYWNraW5nIHVwIG5vbi1kb2N1bWVudGVkIGNoYW5nZXMKCSAgY29tbWl0ZWQgd2l0aG91dCByZXZpZXcgb3IgYXByb3ZhbCBieSBKZW5zIEZpbmtlIDxqZW5zQGdub21lLm9yZz4KCSogSEFDS0lORzogbWFkZSAxMDAlIGNsZWFyIHRoYXQgbm8gY29tbWl0IHNob3VsZCBiZSBkb25lIGRpcmVjdGx5CgpNb24gU2VwIDE3IDE4OjUyOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IEpvZSBPcnRvbiBwcm92aWRlZCBhIHBhdGNoIGZpeGluZyBhIHByb2JsZW0KCSAgd2hlbiBpY29udiBpcyBzcGVjaWZpZWQgdG8gYmUgaW4gYSBub24tc3RhbmRhcmQgZGlyZWN0b3J5CgkgIGJ1dCB3YXNuJ3QgZXhwb3J0ZWQgaW4geG1sMi1jb25maWcgLS1jZmxhZ3MKCkZyaSBTZXAgMTQgMTk6MzI6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogbGV0J3Mgc2hpcCAyLjQuNSBiZWZvcmUgZ2V0dGluZyB0b28gbXVjaAoJICB0cm91YmxlcyB3aXRoIDIuNC40IGVycm9ycy4KCkZyaSBTZXAgMTQgMTI6MjY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgZW50aXRpZXMuYzogZG8gbm90IG91dHB1dCBoZXhhZGVjaW1hbCBjaGFycmVmcwoJICB3aGVuIHNlcmlhbGl6aW5nIEhUTUwgc2luY2Ugc29tZSB2ZXJzaW9uIG9mIE5ldHNjYXBlIGNhbid0CgkgIGdyb2sgaXQsIGdlbmVyYXRlIGRlY2ltYWwgb25lcy4KCSogcmVzdWx0L0hUTUwvZG9jMy5odG06IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byBwcmV2aW91cyB0ZXN0CgkqIHBhcnNlckludGVybmFscy5jOiByZXBhaXIgeG1sS2VlcEJsYW5rc0RlZmF1bHQoKSBicm9rZW4gaW4gMi40LjQKClRodSBTZXAgMTMgMTM6MzQ6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IGRvaGggZ2VuZXJhdGVkIHRoZSB3cm9uZyBpbmNsdWRlIHBhdGggOi0oCgkqIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogcmUtZG9oaCBmb3Jnb3QgdGhlIG5ldyBtYW5wYWdlIDotKAoKV2VkIFNlcCAxMiAyMjoxNDo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgogICAgICAgIFJlbGVhc2VkIDIuNC40CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSAgbGlieG1sLTIuMC5wYy5pbjogbW92ZWQgaW5jbHVkZXMgdG8gaW5jbHVkZWRpci9saWJ4bWwyL2xpYnhtbCwKCSAgdXBkYXRlZCB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHRzIHN5c3RlbXMgYWNjb3JkaW5nbHkKCldlZCBTZXAgMTIgMjA6NDk6MzIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjQuNAoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKV2VkIFNlcCAxMiAxNjo1ODoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogdHJpZWQgdG8gaW5jb3Jwb3JhdGUgY29tbWVudHMKCSAgZnJvbSBidWcgIzU5MjIwCgpUdWUgU2VwIDExIDExOjI1OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyByZXN1bHQvbm9lbnQvd21sLnhtbDogZml4ZWQgYnVnICM1OTk4MSByZWxhdGVkCgkgIHRvIGhhbmRsaW5nIG9mICcmJyBpbiBhdHRyaWJ1dGVzIHdoZW4gZW50aXRpZXMgYXJlIHN1YnN0aXR1ZWQKCk1vbiBTZXAgMTAgMjI6MTQ6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjoKCSAgVHJpZWQgdG8gY2xvc2UgYnVnICM2MDEzMQoKTW9uIFNlcCAxMCAyMDo0NjowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBIVE1MIHBhcnNlciBpbnRyb2R1Y2VkIFNlcCAgOQoKTW9uIFNlcCAxMCAyMDoxMzowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGluZyBidWcgIzU5OTQ2IG9uIHhtbG5zPSIiCgpNb24gU2VwIDEwIDE2OjM5OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIFNBWC5jOiBmaXhpbmcgYnVnIDU5NzMyLCBzaW1wbGUKCSAgYnV0IGFsbG9jYXRlcyBhIG5ldyBlcnJvciBjb2RlLgoKU3VuIFNlcCAgOSAxMDozMzoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBKb2huIEZsZWNrIGZpeGVkIHR5cG9zIGluIHRoZSBvcHRpb25zIG91dHB1dAoJKiBwYXJzZXIuYyBTQVguYzogZml4IGlnbm9yYWJsZSB3aGl0ZSBzcGFjZSBTQVggc2VsZWN0aW9uCgpTYXQgU2VwICA4IDExOjQzOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBTdGV2ZSBVbmRlcndvb2QgZm91bmQgdGhlIHBvc3NpYmlsaXR5IG9mIGFuCgkgIGluaW5pdGUgbG9vcCBpbiBjYXNlIG9mIGVycm9yLgoKRnJpIFNlcCAgNyAxMTozNTowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IE5lZWQgJChJQ09OVl9MSUJTKSBpbiBsaWJ4bWwyX2xhX0xJQkFERAoKV2VkIFNlcCAgNSAxNzo0Nzo0MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHdhcm4gaWYgdmVyc2lvbiBpcyBub3QgMS4wIGJ1dCBpdCdzIG5vdAoJICBzdHJpY3RseSBzcGVha2luZyBhbiBlcnJvciBhZnRlciBhbmFseXppbmcgdGhlIHNwZWMKCk1vbiBTZXAgIDMgMTA6MDc6MDMgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL2NhdGFsb2cuaHRtbCAtIGFkZCBsaW5rIHRvIHRoZSBodG1sIHZlcnNpb24gb2YgdGhlCgltYW4gcGFnZSwgb3RoZXIgbGluZ3Vpc3RpYyBjbGVhbnVwcwoKTW9uIFNlcCAgMyAwOToxMDowOCBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZ19tYW4uaHRtbCwgeG1sY2F0YWxvZy4xCglhZGRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgeG1sY2F0YWxvZy4gTm90ZTogeG1sY2F0YWxvZy4xLCB0aGUgbWFuCglmaWxlLCBoYXMgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIHRoZSBidWlsZC4KClNhdCBTZXAgIDEgMTg6MTc6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogcmVtb3ZlZCBhIGR1cGxpY2F0ZSBhZmZlY3RhdGlvbiBKdXN0aW4gRmxldGNoZXIKCkZyaSBBdWcgMzEgMjI6MDI6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQXJtaW4gU2FuZGVyIHBvaW50ZWQgYSBwb3NzaWJsZSB0ZXh0IGNvYWxlc2NpbmcgCgkgIHByb2JsZW0sIGNvbXBsZXRlZCBoaXMgcGF0Y2guCgpGcmkgQXVnIDMxIDE4OjMwOjI4IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW9uYW4uYzogRml4ZWQgY29uc3QgYW5kIHZvbGF0aWxlIHJlLWRlZmluaXRpb24gcHJvYmxlbQoJCkZyaSBBdWcgMzEgMTY6NTE6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC40IHBhcnNlci5jOiBkb2MgdXBkYXRlcyBmcm9tIEhlaWtvIFJ1cHAKCSogcGFyc2VySW50ZXJuYWxzLmM6IDIgc2FuaXR5IGNoZWNrcyBmcm9tIEhlaWtvIFJ1cHAKClR1ZSBBdWcgMjggMjI6Mzg6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFybWluIFNhbmRlciB0byBtYWtlIHNvbWUgcG9pbnRlcnMKCSAgY29uc3QgaW4geG1sQ29weU5vZGUoKQoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIGZpeCB0byB0aGUgaGVhZGVyCgpNb24gQXVnIDI3IDE2OjI0OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBodW0sIHJlc3RyaWN0IHRoZSBpbnRlZ2VyIHVzYWdlIGdjYyBidWcgd29ya2Fyb3VuZAoJICB0byBvbmx5IGdjYyBjb21waWxlcnMgc28gdGhhdCBvdGhlciBhcmNoaXRlY3R1cmUgZG9uJ3QgZ2V0CgkgIHBlbmFsaXplZCBieSB0aGlzIGxpbWl0YXRpb24uCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IHNtYWxsIHR5cG8gZml4IGZyb20gSGVpa28gVy4gUnVwcAoKU3VuIEF1ZyAyNiAyMDo0NTowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgYSBXaW5kb3dzIGNvbXBpbGVyIHdhcm5pbmcgKENocmlzIFBvYmxldGUpCgkqIHhwYXRoLmM6IGZpeCBmb3IgbW9kIHdoZW4gZGl2aWRlbmQgaXMgMCAoQ2hyaXMgUG9ibGV0ZSkKClNhdCBBdWcgMjUgMTU6MzA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jOiBhZGRlZCBhIAoJICAtLWNvbnZlcnQgb3B0aW9uIHRvIHhtbGNhdGFsb2cgdG8gY29udmVydCBTR01MIG9uZXMgdG8KCSAgdGhlIFhNTCBzeW50YXguCgkqIHhtbGxpbnQuYzogc21hbGwgY2xlYW51cCBmb3IgJFNHTUxfQ0FUQUxPR19GSUxFUyBzdXBwb3J0LgoKICAgICAgICAyLjQuMyBnb3QgcmVsZWFzZWQgYXQgdGhhdCBwb2ludApUaHUgQXVnIDIzIDIzOjE2OjMyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeG1sSU8uYzogc3RhcnRlZCBzb21lIHNlcmlvdXMgdGVzdGluZyBhbmQgZml4ZWQKCSAgYSBmZXcgYnVnIGFuZCBvcHRtaXphdGlvbiBuZWVkcy4KClRodSBBdWcgMjMgMTc6MjY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcHJlcGFyaW5nIGZvciBhIDIuNC4zIHJlbGVhc2UgZXZlbiBpZiBpdCBtYXkgbm90IGJlIHJlYWR5IHlldAoJKiBjYXRhbG9nLmMgcGFyc2VyLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHJlZGlyZWN0ZWQKCSAgYWxsIGZpbGUgcGFyc2luZyBsb29rdXAgdG8gZ28gdGhyb3VnaCB0aGUgZW50aXR5IHJlc29sdmVyLCBhZGQKCSAgdG8gYWRkIGFuIEFQSSB0byBieXBhc3MgaXQgKG5lZWRlZCB0byBsb2FkIGNhdGFsb2dzIHRoZW1zZWx2ZXMpLAoJICBzb21lIGNsZWFudXAgb24gdGhlIGNhdGFsb2cgY29kZSB0b28uCgkqIG5hbm9mdHAuYzogc21hbGwgY2xlYW51cAoJKiBkb2MvY2F0YWxvZy5odG1sOiBzbWFsbCB1cGRhdGUKClRodSBBdWcgMjMgMTI6MjI6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgYnVnaSAjNTk0MDYgaW4gU0dNTCBjYXRhbG9nIHBhcnNpbmcgcmVwb3J0ZWQgYnkKCSAgSnVuIEt1cml5YW1hCgkgIApUaHUgQXVnIDIzIDAyOjUxOjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvY2F0YWxvZy5odG1sOiBmaW5pc2hlZCB0aGUgY2F0YWxvZyBkb2N1bWVudGF0aW9uCgpUaHUgQXVnIDIzIDAxOjM4OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvY2F0YWxvZy5odG1sIGRvYy94bWwuaHRtbDogYWRkZWQgZG9jdW1lbnRhdGlvbiBhYm91dAoJICBDYXRhbG9nIHN1cHBvcnQsIG1pc3NlcyBhbiBBUEkgZGVzY3JpcHRpb24gCgkqIGRvYy9odG1sLyo6IHJlZXh0cmFjdGVkIHRoZSBBUEkgcGFnZXMKCldlZCBBdWcgMjIgMTg6Mjc6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sSU8uYyBIVE1McGFyc2VyLmM6CgkgIEFkZGVkIHRoZSBwYXJ0IGFib3V0IHNlY3Rpb24gNy4yIG9uIFVSSSByZXNvbHV0aW9uLAoJICBmaXhlZCBhIHNpZGUgZWZmZWN0IGluIHRoZSBIVE1MIHBhcnNlciwgbG9vayBjb21wbGV0ZQoJICBhbmQgcmVhZHkgdG8gcm9jayBleGNlcHQgdGhlIFVSSS9TeXN0ZW1JRCBwYXJ0IQoKV2VkIEF1ZyAyMiAxNjoyNzowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggY2F0YWxvZy5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIHhtbElPLmM6IGFkZGVkIHN1cHBvcnQgYW5kIEFQSXMgbmVlZGVkIGZvciB0aGUgY2F0YWxvZyBQSQoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBjbGVhbnVwCgpXZWQgQXVnIDIyIDAyOjAzOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgcGFyc2VyLmMgeG1sSU8uYyB4bWxjYXRhbG9nLmMgeG1sbGludC5jIAoJICBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHN0YXJ0cyB0byBsb29rIG9rYXksIHJlYWxseQoJICBwbHVnZ2VkIHRoZSBuZXcgZnJhbWV3b3JrLCBjbGVhbmVkIGEgbG90IG9mIHN0dWZmLAoJICBhZGRlZCBzb21lIEFQSXMsIGV4Y2VwdCB0aGUgUEkncyBzdXBwb3J0IG1pc3NpbmcgdGhpcwoJICBzaG91bGQgYmUgbW9zdGx5IGNvbXBsZXRlCgkqIHJlc3VsdC9jYXRhbG9ncy8qIHRlc3QvY2F0YWxvZ3MvKjogYWRkZWQgbmV3IHRlc3QsIGVucmljaGVkCgkgIHRoZSBleGlzdGluZyBvbmUgd2l0aCBVUk4gSUQgdGVzdHMKClR1ZSBBdWcgMjEgMTQ6NTY6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgbmV4dENhdGFsb2cKCSogcmVzdWx0L2NhdGFsb2dzL2RvY2Jvb2sgdGVzdC9jYXRhbG9ncy8qOiBzdGFydGVkIGFkZGluZwoJICBhIHNtYWxsIHJlZ3Jlc3Npb24gdGVzdAoKVHVlIEF1ZyAyMSAxMjo1MjozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY2F0YWxvZy5jIHhtbGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6CgkgIG1vcmUgd29yayBvbiB0aGUgWE1MIGNhdGFsb2cgc3VwcG9ydC4KCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHNtYWxsIGNsZWFudXAgc2VlbXMgdXNpbmcKCSAgbGlzdCBhcyBhIHB1YmxpYyBwYXJhbWV0ZXIgbmFtZSBjYW4gZ2l2ZSBwb3J0YWJpbGl0eSB0cm91YmxlcwoJKiB0cmlvbmFuLmMgdHJpb25hbi5oIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvdHJpb25hbi5oCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IHJlbW92ZWQKCSAgdHJpb25hbiBmcm9tIHRoZSBsaWJ4bWwgQVBJLCBhZGRlZCB4bWxYUGF0aElzSW5mIGFuZCB4bWxYUGF0aElzTmFOCgkgIHdyYXBwZXJzCgpUdWUgQXVnIDIxIDExOjE4OjQ1IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIE1ha2VmaWxlLmFtIHRyaW8uYyB0cmlvZGVmLmggdHJpb25hbi5jIHhwYXRoLmMKCSAgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvdHJpb25hbi5oOgoJICBSZS13b3JrZWQgTm90LUEtTnVtYmVyIGFuZCBJbmZpbml0eSBzdXBwb3J0LgoJKiB4bWxjYXRhbG9nLmM6IGFkZGVkIHJlYWRsaW5lIGluY2x1ZGUgZmlsZXMKCk1vbiBBdWcgMjAgMDI6MDQ6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbGNhdGFsb2cuYyBsaWJ4bWwuc3BlYy5pbjogcmVuYW1pbmcgCgkgIHRlc3RDYXRhbG9nIGFzIHhtbGNhdGFsb2csIG1ha2luZyBpdCBhbiBpbnN0YWxsZWQgYXBwCgkgIGFkZGluZyBhIHNoZWxsLCBhbmQgcHJlcGFyaW5nIGl0IHRvIGJlIGEgL2V0Yy94bWwvY2F0YWxvZwoJICBtYW5hZ2VtZW50IHRvb2wsIHRob3VnaCBub3QgcmVhZHkgeWV0CgkqIGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IGFkZGluZyBzdXBwb3J0IGZvcgoJICBYTUwgQ2F0YWxvZ3MgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS8KCSAgbm90IGZpbmlzaGVkLCB0aGVyZSBpcyBzb21lIGludGVyZXN0aW5nIHRyYWRlb2ZmcyBhbmQgYQoJICBmZXcgb3BlbiBxdWVzdGlvbnMgbGVmdC4KClN1biBBdWcgMTkgMTQ6NTk6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogZml4ZWQgYSBsaW5lIGZvcm1hdHRpbmcgcHJvYmxlbQoKRnJpIEF1ZyAxNyAxMTozNTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2YgdW51c2VkIHZhcmlhYmxlIChBbGJlcnQgQ2hpbikKCkZyaSBBdWcgMTcgMDE6MjU6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDoKCSAgdHJ5aW5nIHRvIGZpeCBzb21lIHRyb3VibGVzIHcuci50LiBmdW5jdGlvbiByZXR1cm5pbmcKCSAgY29uc3QgeHh4UHRyLgoKVGh1IEF1ZyAxNiAyMTozMzoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogYW5vdGhlciBzZXQgb2Ygc3ltYm9scyBjb25kaXRpb25hbGx5CgkgIGRlZmluZWQKClRodSBBdWcgMTYgMjE6MzE6MTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IHJlbW92ZWQgdW51c2VkIHZhcgoKVGh1IEF1ZyAxNiAxODoyNjo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFhQYXRoLmM6IGFub3RoZXIgc21hbGwgY2xlYW51cCBjbG9zaW5nIGJ1ZyAjNTkxMTAKClRodSBBdWcgMTYgMTc6NTk6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IHNtYWxsIGNsZWFudXAgY2xvc2luZyBidWcKCSAgIzU5MTA4CgpXZWQgQXVnIDE1IDIyOjQ2OjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBleGFtcGxlL2dqb2JyZWFkLmM6IGFkZCB4bWxDbGVhbnVwUGFyc2VyKCkgYmVmb3JlIGxlYXZpbmcKCldlZCBBdWcgMTUgMTQ6NTc6MDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZWQgMi40LjIKCldlZCBBdWcgMTUgMTM6NTY6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggZGVidWdYTUwuYyB2YWxpZC5jOiBkZXByZWNhdGUKCSAgdGhlIG5vbi1ib3VuZGNoZWNraW5nIFNwcmludGYgZnVuY3Rpb25zLCBhZGQgU25wcmludGYKCSAgdGhpcyBzaG91bGQgY2xvc2UgYnVnICM1Nzk4NAoKV2VkIEF1ZyAxNSAxMDo0NjowNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUoKSBkaWRuJ3QgdW5lc2NhcGVkCgkgIFVSSXMgYmVmb3JlIGRvaW5nIHRoZSBsb29rdXBzIChwb2ludGVkIGJ5IE1hcmsgVmFrb2MpCgpUdWUgQXVnIDE0IDE4OjM3OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzZXJpb3VzIGNoYW5nZXMgb24gUmVzdWx0IFZhbHVlIFRyZWVzIGFuZCBOb2RlU2V0cwoJICB3LnIudC4gZGVhbGxvY2F0aW9uIGFuZCBjb2xsZWN0IG9wZXJhdGlvbnMuIFByb2JhYmx5IG5vdAoJICAxMDAlIGNsZWFuIChtZXJnZSBvZiBhbGxvY2F0ZWQgdHJlZXMgc21lbGxzIGxpa2UgYSBwcm9ibGVtKS4KCSAgU2VlbXMgc3VmZmljaWVudCB0byBjbG9zZSAjNTg5NDMKClR1ZSBBdWcgMTQgMTY6MTI6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkaW5nIGEgLS1mb3JtYXQgb3B0aW9uCgpUdWUgQXVnIDE0IDE0OjE2OjI0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBjb3VudCgpIHdhcyBicm9rZW4gb24gUmVzdWx0IFZhbHVlIFRyZWUKCSogeG1sSU8uYzogZml4ZWQgZmlsZTovLy8gYWNjZXNzZXMgb24gX1dJTjMyCgpNb24gQXVnIDEzIDEzOjIyOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IHMvTElCWE1MX1ZFUlNJT05fTlVNQkVSL0xJQlhNTF9WRVJTSU9OLyBzZWVtcyB0aGUKCSAgbWFjcm8gd2FzIHJlbmFtZWQsIHRoaXMgc2hvdWxkIGNsb3NlIGJ1ZyAjNTg2ODMKCk1vbiBBdWcgMTMgMTI6MzM6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBzbWFsbCBmaXggZml4aW5nIGJ1ZyAjNTg1MzkgcmVwb3J0ZWQgYnkgY29vbG8sIGluCgkgIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZSB0ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGVudGl0eSBtaWdodAoJICBiZSBhZGRlZCBkdWUgdG8gdGV4dCBjb2FsZXNjaW5nLgoJKiBuYW5vZnRwLmMgcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAKCldlZCBBdWcgIDggMjI6NTc6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCiAgICAgICAgKiBIQUNLSU5HOiBhZGRlZCBKb2huIEZsZWNrIHJpZ2h0IHRvIGNvbW1pdCBpbiB0aGUgZG9jIHN1YmRpcgoKVHVlIEF1ZyAgNyAwMzowNTo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgdGVzdFhQYXRoLmMgdmFsaWQuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDoKCSAgYWxsb3cgdG8gaW5oZXJpdCBhdHRyaWJ1dGVzIGZyb20gdGhlIERURCBkaXJlY3RseSBpbiB0aGUKCSAgdHJlZSwgdGhpcyBpcyBuZWVkZWQgZm9yIFhQYXRoIGFuZCBjYW4gYmUgYSB1c2VmdWwgZmVhdHVyZS4KCSAgSW5oZXJpdGVkIG5hbWVzcGFjZXMgYXJlIGFsd2F5cyBwcm92aWRlZCBhdCB0aGUgdHJlZSBsZXZlbCBub3cKCSogdGVzdC9kZWZhdHRyKiByZXN1bHQvZGVmYXR0ciogcmVzdWx0L25vZW50L2RlZmF0dHIqOiBhZGRlZCBhIGNvdXBsZQoJICBvZiB0ZXN0cyBmb3IgdGhpcyBmZWF0dXJlIChYU0xUIGJlaW5nIHRoZSBwcmltZSB1c2VyKS4KCkZyaSBBdWcgIDMgMTQ6MDI6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBNYWtlZmlsZS5hbSBuYW5vaHR0cC5jIHBhcnNlci5jIHRlc3RIVE1MLmMKCSAgdGVzdFNBWC5jIHhtbElPLmMgeG1sbGludC5jIGluY2x1ZGUvd2luMzJjb25maWcuaAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW4gd2luMzIvUkVBRE1FLk1TRGV2CgkgIHdpbjMyL2RzcC8qOiBhcHBsaWVkIFdpbjMyIEZhY2VsaWZ0IE5vLjIgcGF0Y2hlcyBmcm9tIAoJICBJZ29yIFpsYXRrb3ZpYyBmb3IgV2luZG93cy9NU0MKCldlZCBBdWcgIDEgMjM6MjE6MDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiB1bnBhcnNlZEVudGl0eURlY2woKSB0aGUgVVJJIGNvbXB1dGF0aW9uIG9mIHRoZQoJICBlbnRpdHkgd2Fzbid0IGRvbmUgYnJlYWtpbmcgWFNMVCB1bnBhcnNlZC1lbnRpdHktdXJpKCkKCldlZCBBdWcgIDEgMTc6NDQ6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIHdoZW4gd2Fsa2luZyB0aGUgZGVzY2VuZGFudHMgYW5kCgkgIHRoZSBjdXJyZW50IG5vZGUgaGFzIG5vIGNoaWxkcmVuCgkqIGRlYnVnWE1MLmM6IHNob3cgdXAgd2hlbiBhIHRleHQgbm9kZSBpcyBzdXBwb3NlZCB0byBub3QgYmUgZXNjYXBlZAoKV2VkIEF1ZyAgMSAwMTozMzozNSBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIGluIHhtbFhQYXRoTm9kZVRyYWlsaW5nU29ydGVkIChmb3Igbm93IGl0CgkgIHdvcmtlZCBsaWtlIHRoZSBzZXQ6bGVhZGluZygpIGZ1bmN0aW9uKQoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBhZGRlZCB4bWxYUGF0aE5vZGVTZXRDb250YWlucwoKVHVlIEp1bCAzMSAxODoyNDozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIG5hbm9odHRwLmM6IHByb3RlY3RlZCBhbiB1c2Ugb2YgRUFHQUlOLCBCcmlhbiBTdGFmZm9yZAoKVHVlIEp1bCAzMSAxNzo0ODo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGFwcGx5IGNoYW5nZSB0byBjbG9zZSAjNTgxNDEgCgkqIHdpbjMyL2xpYnhtbDIvKjogdXBkYXRlIG9mIHRoZSBNU0MgcHJvamVjdHMgZnJvbSBJZ29yICBabGF0a292aWMKClR1ZSBKdWwgMzEgMTc6MDk6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogd2hlbiB0aGUgaW50ZXJuYWwgc3Vic2V0IHVzZXMgYSBQRSwgdGhlbiB0aGUKCSAgaW5jbHVkZWQgZW50aXR5IGNhbiB1c2UgY29uZGl0aW9uYWwgc2VjdGlvbnMuCgpNb24gSnVsIDMwIDEyOjU4OjM5IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZpeGVkIGEgc2VyaW91cyBtZW1vcnkgcHJvYmxlbgoJICB3aGVuIHdhbGtpbmcgdGhlIG5hbWVzcGFjZSBheGlzIHNob3dpbmcgdXAgaW4KCSAgbGlieHN0L3Rlc3RzL2dlbmVyYWwvYnVnLTEyCgkqIHhtbG1lbW9yeS5jOiBhZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gdHJhY2UgYSBnaXZlbiBibG9jawoJICBkZWZpbmVkIGJ5IGl0cyBhZGRyZXNzCgpTdW4gSnVsIDI5IDA3OjE4OjUzIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgZW5jb2Rpbmcgc3BlY2lmaWVkIGJlZm9yZQoJICBzdGFydGluZyB4bWxQYXJzZURvY3VtZW50KCkKClNhdCBKdWwgMjggMTM6MzM6MTAgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWluc2VydGVkLCBuZWVkZWQgZm9yCgkgIFdpbmRvd3MgdXNlcnMgb2YgQ1ZTCgoyMDAxLTA3LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBlbmNvZGluZy5jOiAoeG1sSWNvbnZXcmFwcGVyKTogQWRkIGNhc3QgdG8gZml4IHdhcm5pbmcuCgkqIHRlc3RDYXRhbG9nLmM6IEFkZCBpbmNsdWRlIG9mIDxsaWJ4bWwvcGFyc2VyLmg+LgoKMjAwMS0wNy0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvLmN2c2lnbm9yZToKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CglSZW1vdmUgdGhpcyBmaWxlIGZyb20gQ1ZTIGJlY2F1c2UgaXQncyBnZW5lcmF0ZWQuCgpGcmkgSnVsIDI3IDEwOjAzOjU2IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYXBwbGllZCBjb25zdCBwYXRjaGVzIGZyb20KCSAgVG9tIE1vb2cgIzU4MDAyCgpUaHUgSnVsIDI2IDE4OjU1OjUyIENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aHssSW50ZXJuYWxzfS5oOiBhZGRlZCBhIGZ1bmN0aW9uCgkgIGxvb2t1cCBmcmFtZXdvcmsKCkZyaSBKdWwgMjcgMDE6NTA6MjAgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sQ29weU5vZGUoKSBmb3IgZG9jdW1lbnRzCgpUaHUgSnVsIDI2IDEyOjQwOjM1IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVncyAjNTgwNzMgcmVwb3J0ZWQgYnkgR3JlZyBTaHRpbG1hbgoKVGh1IEp1bCAyNiAxMTozODozNyBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVzIGJ1ZyAjNTc2NTIgcmVwb3J0ZWQgYnkgTW9ydXMgV2FsdGVyCgpUaHUgSnVsIDI2IDEwOjI0OjM0IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBuYW5vaHR0cC5jOiBKb2huIEtyb2xsIHByb3ZpZGVkIGEgc21hbGwgZml4IHRvIHhtbE5hbm9IVFRQU2F2ZQoKVGh1IEp1bCAyNiAwNzoxNjowNCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSB4bWxMaW5lTnVtYmVyc0RlZmF1bHQoKQoJICBlcnJvcnMsIGxlc3NvbiBkb24ndCBhZGQgbmV3IGZ1bmN0aW9ucyBhdCAxYW0gYmVmb3JlIGEgcmVsZWFzZQoJKiB4cGF0aC5jOiBpbnRlZ3JhdGVkIGZpeCBmcm9tIEJqb3JuIHRvIGF2b2lkIGRpdmlkZSBieSB6ZXJvCgkgIGZyb20gWFBhdGggaW5pdGlhbGl6YXRpb24gd2hlbiBwb3NzaWJsZS4KClR1ZSBKdWwgMjQgMTU6Mzk6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiByZXN1bHQvc2NyaXB0cy9iYXNlKjogcmVtb3ZpbmcgaGlzdG9yeS9yZWFkbGluZSBjaGFuZ2VkCgkgIHRoaXMgc2xpZ2h0bHkKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggU0FYLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgeG1sbGludC5jOiBtYWtlIGVsZW1lbnQgY29udGVudCBsaW5lIG51bWJlciBnZW5lcmF0aW9uCgkgIG9wdGlvbm5hbCB0byBhdm9pZCBicmVha2luZyBvbGQgYXBwcyBhZGRlZCBpbnRlcmZhY2UgdG8gc3dpdGNoCgpUdWUgSnVsIDI0IDE1OjA2OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBnZXQgcmlkIG9mIHRoZSByZWFkbGluZSBhbmQgbGliaGlzdG9yeQoJICBkZXBlbmRhbmNpZXMgYnkgZGVmYXVsdCwgcmVsZWFzZSAyLjQuMSB3aXRoIElBNjQgZml4CgkqIG5hbm9odHRwLmMgdHJlZS5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogaW5jb3Jwb3JhdGVkCgkgIEpvaG4gS3JvbGwgZml4ZXMgdG8gYWxsb3cgc2F2aW5nIHRvIEhUVFAgdmlhIFBVVCAob3IKCSAgUE9TVCBvZiBuZWVkZWQpLgoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpTdW4gSnVsIDIyIDA1OjU2OjE2IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaGFzaC5jIGluY2x1ZGUvbGlieG1sL2hhc2guaDogYWRkZWQgeG1sSGFzaFNjYW5uZXJGdWxsLAoJICB4bWxIYXNoU2NhbkZ1bGwgYW5kIHhtbEhhc2hTY2FubkZ1bGwzIHRvIGdldCBwYXNzZWQgdGhlCgkgIHRocmVlIGtleXMgYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgoKVGh1IEp1bCAxOSAxNToyOToyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogcmVtb3ZlZCBsaWJ4bWwgc29mdGxpbmsgZm9yIGdvb2QKCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYyBkb2MvTWFrZWZpbGUuYW06IGNsZWFudXAgdG8gZ2V0CgkgIDEwMCUgY292ZXJhZ2UgYnkgZ3RrLWRvYwoKVHVlIEp1bCAxNyAxNzozNjo0NiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGRlYnVnZ2luZyBvbiBJQTY0LAoJICBmaXhlZCBzZXJpb3VzIHRyb3VibGVzIGR1ZSB0byBzaXplX3QgdnMuIGludCBtaXNtYXRjaAoKVHVlIEp1bCAxNyAxNjowNDozNiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgeG1sSU8uYzogY2xlYW5lZCB1cCBzb21lIHdhcm5pbmcgb24gdGhlIEFscGhhCgpNb24gSnVsIDE2IDA2OjMyOjQ0IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGh7LEludGVybmFsc30uaCB4cGF0aC5jOiBhZGRlZCBhIG1vcmUKCSAgY29udmVuaWVudCBleHRlbnNpb24gQVBJIGZvciB2YWx1ZSBhbmQgY29udGV4dCBtYW5hZ2luZwoJICBOb3cgaGFuZGxlcyBleHRlcm5hbCBvYmplY3RzIHRocm91Z2ggeG1sWFBhdGhQb3BFeHRlcm5hbCwKCSAgeG1sWFBhdGhXcmFwRXh0ZXJuYWwgYW5kIHhtbFhQYXRoUmV0dXJuRXh0ZXJuYWwuCgkgIEFkZGVkIGZ1bmN0aW9ucyBmb3Igc2V0cyBvcGVyYXRpb25zIChpbnRlcnNlY3Rpb24sIGV0Yy4pCgpNb24gSnVsIDE2IDIwOjA1OjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oCgkgIHhtbElPLmMgdHJlZS5jIHBhcnNlckludGVybmFscy5jIGVudGl0aWVzLmMgZW5jb2RpbmcuYwoJICBIVE1McGFyc2VyLmM6IGNsZWFudXAgb2YgZ2xvYmFsIHZhcmlhYmxlcywgbWFya2luZyBzb21lCgkgIGNvbnN0IG9yIHByaXZhdGUuCgpNb24gSnVsIDE2IDAwOjE3OjE1IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZXhwb3J0ZWQgeG1sWFBhdGh7TkFOLFBJTkYsTklORn0KCSAgZml4ZWQgeG1sWFBhdGhOb2RlU2V0SXRlbSB3aGVuIHBhc3NpbmcgaW5kZXg9MAoKU3VuIEp1bCAxNSAxNzo1ODo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhZGRlZCB4bWxDaGVja1ZlcnNpb24oKQoKU2F0IEp1bCAxNCAxOTozMToyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogZml4ZWQgY29tcGlsYXRpb24gdW5kZXIgQ3lnd2luICM1NzUwMwoJKiBUT0RPOiB1cGRhdGUKCjIwMDEtMDctMTMgIFBldGVyIFdpbGxpYW1zICA8cGV0ZXJ3QHhpbWlhbi5jb20+CgoJKiBjb25maWcuaC5pbjogYWRkICN1bmRlZiBIQVZFX0RMRkNOX0gKCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQ29tcGlsZSBmaXggd2hlbiBzcmNkaXIgIT0KCWJ1aWxkZGlyLgoKRnJpIEp1bCAxMyAxMTowOTo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBhIGNvdXBsZSBvZiBleHBvcnRlZCBlbnRyaWVzCgkgIHJhaXNlZCBieSAjNTczNDggYW5kICM1NzM4MQoKVGh1IEp1bCAxMiAyMToyMDoxNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIHBhcnNlci5jCgkgIHRyZWUuYyB4cG9pbnRlci5jOiBzdG9yZSB0aGUgbGluZSBudW1iZGVyIGluIGVsZW1lbnQtPmNvbnRlbnQsCgkgIG1heSBicmVhayBzb21lIHNvZnR3YXJlLCBuZWVkIGEgY29uZmlndXJhdGlvbiBtZWNoYW5pc20KCjIwMDEtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIC5jdnNpZ25vcmU6CgkqIGV4YW1wbGUvLmN2c2lnbm9yZToKCSogaW5jbHVkZS8uY3ZzaWdub3JlOgoJKiBpbmNsdWRlL2xpYnhtbC8uY3ZzaWdub3JlOgoJVmFyaW91cyB0aGluZ3MgdGhhdCBhcmUgZ2VuZXJhdGVkIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KClR1ZSBKdWwgMTAgMTc6NDc6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2Ugb2YgMi40LjAKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6ICB1cGRhdGVkIHRoZSBkb2NzCgpNb24gSnVsICA5IDIyOjA2OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgIkludGVybmFsOiBNSVhFRCBzdHJ1Y3QgYmFkIiB3aGVuICNDREFUQSBlbGVtZW50cwoJICB2YWxpZGF0aW9uIG9jY3VyZWQgb24gY29udGVudCB3aXRoIGVsZW1lbnQgY2hpbGQKCk1vbiBKdWwgIDkgMTc6NTk6MDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIFhNTCBCYXNlIGNvbXB1dGF0aW9uIHdoaWNoIHdhcyBicm9rZW4KCSogZGVidWdYTUwuYzogYWRkZWQgYSBiYXNlIGZ1bmN0aW9uIHRvIHRoZSBzaGVsbAoJKiBNYWtlZmlsZS5hbSByZXN1bHQvc2NyaXB0cy8qIHRlc3Qvc2NyaXB0cy8qOiBhZGRlZCBzY3JpcHRzCgkgIGJhc2VkIHJlZ3Jlc3Npb24gdGVzdHMsIGFuZCBhZGRpbmcgMiBYTUwgQmFzZSB0ZXN0cwoKTW9uIEp1bCAgOSAxMjozMTowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogc2V0IHByb3BlcnRpZXMgZG9jIGFuZCBjYWxsIHhtbFNldExpc3REb2MgZm9yIHByb3BlcnRpZXMKCSAgY29udGVudCB3aGVuIGdyYWZ0aW5nIHRoZW0gaW4gYSBkaWZmZXJlbnQgdHJlZS4KCSogYWNsb2NhbC5tNDogcmVtb3ZlIGZyb20gQ1ZTCgpTdW4gSnVsICA4IDIzOjA5OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIHNvbWUgbWlzc2luZyBlbnRyeSBwb2ludAoJICBmb3IgWFBhdGggKE1hcmsgVmFrb2MpCgpTdW4gSnVsICA4IDIwOjM0OjM1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogZml4ZWQgYW4gb2xkIGJ1ZyByYWlzZWQgYnkgQmVybmhhcmQgWndpc2NoLCB0aGUgSS9PCgkgIGxheWVyIHNob3VsZCBVUkktVW5lc2NhcGUgYmVmb3JlIHRyeWluZyB0byBvcGVuIHJlc291cmNlcy4KClN1biBKdWwgIDggMTY6MjY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXggdGhlIG5hbWUoKSBidWcgZm9yIGVsZW1lbnRzIGluIHRoZSBkZWZhdWx0IAoJICBuYW1lc3BhY2UgcmVwb3J0ZWQgYnkgQ2hhcmxpZSBCb3plbWFuCgpTdW4gSnVsICA4IDE1OjExOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgcGFyc2VyLmMgdGVzdFhQYXRoLmMgeHBhdGguYzogdHJ5aW5nIHRvIGZpeCAjNTY5NDgsIHRoaXMKCSAgbGVkIHRvIGFuIFhQYXRoIGZpeCwgaW1wcm92ZW1lbnRzIG9mIFNBWCBpbml0aWFsaXphdGlvbiwgYW5kCgkgIGFuIGFkZGVkIG9wdGlvbiAtLW5vY2RhdGEgdG8gdGVzdFhQYXRoCgpTYXQgSnVsICA3IDIxOjA5OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IEZlbGl4IE5hdHRlciBwcm92aWRlZCBhbmV3IHZlcnNpb24gd29ya2luZwoJICB3aXRoIFhFbWFjcyB0b28KClNhdCBKdWwgIDcgMDI6MTY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBzbWFsbCBjbGVhbnVwCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlCgpGcmkgSnVsICA2IDAxOjQwOjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJICByZWxlYXNlZCAyLjMuMTQKCkZyaSBKdWwgIDYgMDA6NDc6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvaHRtbC8qOiByZWJ1aWx0IHRoZSBkb2NzIGZvciB0aGUgcmVsZWFzZQoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDIuMy4xNCByZWxlYXNlLgoKVGh1IEp1bCAgNSAyMjowMTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGEgYnVnIHJlcG9ydGVkIGJ5IFN0ZXBoYW4gS3Vsb3cgZW1wdHkgbm9kZXNldHMKCSAgd2VyZSBub3QgZXF1YWwgdG8gZW1wdHkgc3RyaW5ncwoKVGh1IEp1bCAgNSAwMDo1MjoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jOiBmaXhlZCBhIFVSSS1SZWZlcmVuY2UgY29tcHV0YXRpb24gcHJvYmxlbSB3aGVuIHZhbGlkYXRpbmcKCSogeG1sSU8uYzogc21hbGwgY2xlYW51cAoKVGh1IEp1bCAgNSAwMDowNDo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBpbXByb3ZlZCB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb3VwbGUgb2YgaW50ZXJmYWNlcwoJICB1cG9uIExhcnJ5IFN0YW1wZXIgc3VnZ2VzdGlvbgoKV2VkIEp1bCAgNCAyMTo0MjoyNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIGVudGl0aWVzLmMgcGFyc2VyLmM6IGNoYW5nZWQgY29tcGxldGVseSB0aGUgd2F5IGVudGl0aWVzCgkgIGFyZSBoYW5kbGVkIHdoZW4gcnVubmluZyB0aGUgcGFyc2VyIGluIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZS4KCSAgVGhpcyBmaXhlcyBhIGJ1ZyByZXBvcnRlZCBieSBTdGVwaGFuIEt1bG93IGFuZCBuZWFybHkgZGl2aWRlcwoJICBieSAzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGJ5IGxpYnhzbHQgdG8gbG9hZCBhbmQgcHJvY2VzcwoJICBEb2NCb29rIFRERy4KCldlZCBKdWwgIDQgMTg6MDI6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGluZyBhIHRvbyBlYXJseSByb290IGNsb3NpbmcgcHJvYmxlbSByYWlzZWQKCSAgYnl0IFByYXNoYW50aCBOYWlkdQoKV2VkIEp1bCAgNCAwMTo0MjowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWlzc2luZyBjb3B5IGluIHhtbFhQYXRoVmFyaWFibGVMb29rdXBOUygpIAoJICByYWlzZWQgYnkgTWFyayBWYWtvYy4KClR1ZSBKdWwgIDMgMTg6MzU6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBleGFtcGxlL01ha2VmaWxlLmFtOiBmaXhlZCB0aGUgaW5jbHVkZSBwYXRoIHRvIGFkZCBzcmNkaXIvaW5jbHVkZQoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IGZpeCBmcm9tIEFsYmVydCBDaGluIGZvciBpY29udiBkZXRlY3Rpb24KCSAgYW5kIHNvbWUgY2xlYW51cAoKVHVlIEp1bCAgMyAxMDoxMjowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBsb3Qgb2Ygb3B0aW1pemF0aW9uIHdvcmssIHJlc3VsdHMgaW4gc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzCgkgIHdoZW4gaGFuZGxpbmcgcmVhbGx5IGNvbXBsZXggWFBhdGggcXVlcmllcy4gQWRkIGEgc21hbGwgb3B0aW1pemVyCgkgIGZvciB1bmlvbnMsIGltcHJvdmUgW25dIGFuZCBbbGFzdCgpXSwgYXZvaWQgc29tZSBjb3N0bHkgb3BzLgoKRnJpIEp1biAyOSAyMzoyNjo1NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jOiB4bWxTdHJzdHIgYXJncyBhcmUgYm90aCBjb25zdAoJKiB4cGF0aC5jOiBzbWFsbCBjbGVhbnVwCgkqIHhtbEdldE5zTGlzdDogcmVmb3JtYXRlZCwgZml4ZWQgcHJvYmxlbXMgaWYgdXNlZCBvbiBFbnRpdGllcwoKVGh1IEp1biAyOCAxODoxOTo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMS44LjE0IGFuZCAyLjMuMTMgcmVsZWFzZXMKClRodSBKdW4gMjggMTg6MTY6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2VkIDIuMy4xMwoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiB3b3JrYXJvdW5kIGF1dG9tYWtlIGdlbmVyYXRpbmcKCSAgZXJyb25lb3VzIGRlcHMKClRodSBKdW4gMjggMTU6MDg6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGJ1ZyAjNTY4MDEgWW9uIERlcmVrIHByb3ZpZGVkIGEgcGF0Y2gKCSAgdG8gdGhlIHdpbmRvd3MgY29uZmlnIGZpbGUuCgpUaHUgSnVuIDI4IDE0OjUxOjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBvaW50ZXIuYyBpbmNsdWRlL3dpbjMyY29uZmlnLmggd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmMKCSAgbGlieG1sLmggOiBZb24gRGVyZWsgcHJvdmlkZWQgYSBzZXQgb2YgY2hhbmdlcyB0byBjb21waWxlIGZyb20KCSAgQ1ZTIG9uIFdpbmRvd3MvTVNDCgpUaHUgSnVuIDI4IDE0OjExOjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIFVURjggQk9NIHN1cHBvcnQgaW4gcHVzaCBtb2RlCgkqIHRlc3QvdXRmOGJvbS54bWwgcmVzdWx0L3V0Zjhib20ueG1sIHJlc3VsdC9ub2VudC91dGY4Ym9tLnhtbDoKCSAgYWRkZWQgYSBzcGVjaWZpYyB0ZXN0Y2FzZQoKV2VkIEp1biAyNyAxODozMzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCAtLXB1c2ggcmVncmVzc2lvbiB0ZXN0cwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogdGhlIFhNTCBwYXJzZXIgc2VnZmF1bHRlZCBpbiAtLXB1c2ggbW9kZQoKV2VkIEp1biAyNyAxMzowOTo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogbW92ZWQgdGhlIHN5bWxpbmtzIGRldGVjdGlvbiB3aXRoaW4gYSBDVlMKCSAgY2hlY2ssIHRoaXMgaXMgbm90IHBvcnRhYmxlIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4KCSogeHBhdGguYzogc21hbGwgY2xlYW51cC9zcGVlZHVwCgpUdWUgSnVuIDI2IDE4OjA1OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGRvYy94bWwuaHRtbCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZSBvZiAyLjMuMTIKCSogcGFyc2VyLmM6IG1ha2UgYW4gZXJyb3IgbWVzc2FnZSBpZiB1bmtub3cgZW50aXRpZXMgaW4gYWxsIGNhc2VzCgpUdWUgSnVuIDI2IDA5OjQ2OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLmM6IGZpeGVkIDIgdXJpIG5vcm1hbGl6YXRpb24gYnVncyBvbiAnLy8nIHJlZHVjdGlvbgoKTW9uIEp1biAyNSAxODowNjoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBMYXN6bG8gUGV0ZXIgcG9pbnRlZCBvdXQgdGhhdAoJICBpbmNsdWRlcyB3ZXJlIGluc3RhbGxlZCBpbiB0aGUgd3JvbmcgZGlyCgpNb24gSnVuIDI1IDE3OjA3OjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2h0bWwueG1sOiB3YXJuIGFnYWluc3Qgc2VuZGluZyBjb2RlIHRvIGV4aGliaXQgYnVncy4KClN1biBKdW4gMjQgMjM6MzE6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBwYXRjaCB0byB4bWxYUGF0aEZvcm1hdE51bWJlciBmb3IgdGhlIG9wdGltaXplciBvbgoJICBUcnU2NCBmcm9tIFRob21hcyBMZWl0bmVyCgpTdW4gSnVuIDI0IDE0OjA1OjU0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogQVVUSE9SUzogYWRkZWQgV2lsbGlhbSBhbmQgQmpvcm4KCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYyBSRUFETUUgZG9jLyouaHRtbCBldGMuOiBjaGFuZ2VkIG9sZCBlbWFpbCB0bwoJICBkYW5pZWxAdmVpbGxhcmQuY29tIGhvcGVmdWxseSBJIHdvbid0IGhhdmUgdG8gZG8gdGhpcyBhZ2FpbgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL2h0bWwvKi5odG1sOiBjbGVhbnVwIG1ha2VmaWxlLCBjaGVja2VkIHRoYXQKCSAgZG9jcyBjYW4gYmUgcmVidWlsdCBjbGVhbmx5IG5vdwoJKiBpbmNsdWRlL2xpYnhtbC94bWwqdmVyc2lvbi5oKjogcmVtb3ZlZCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmgKCSAgZnJvbSBDVnMgaXQncyBnZW5lcmF0ZWQsIGFkZGVkIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oCgkgIGFsc28gZ2VuZXJhdGVkIGJ1dCB3aGljaCBzaG91bGQgY2hhbmdlIGZhciBsZXNzIGZyZXF1ZW50bHkuCgkqIGNhdGFsb2cuYyBuYW5vZnRwLmM6IG1hZGUgc3VyZSB0byBpbmNsdWRlIGxpYnhtbC5oIG5vdAoJICBsaWJ4bWwveG1sdmVyc2lvbi5oIGRpcmVjdGx5CgkqIGluY2x1ZGUvbGlieG1sLyouaDogaW5jbHVkZSB4bWx3aW4zMnZlcnNpb24uaCBpbnN0ZWFkIG9mIHhtbHZlcnNpb24uaAoJICB3aGVuIGNvbXBpbGluZyBvbiBXSU4zMiBhbmQgTVNDCgpTYXQgSnVuIDIzIDIzOjU0OjEyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBjb25maWd1cmUuaW46CgkgIGZpeGVkIG1ha2UgZGlzdGNoZWNrIGFuZCByZWJ1aWxkaW5nIHRoZSBycG1zCgpTYXQgSnVuIDIzIDIwOjUwOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBzaG91bGQgZmluaXNoIHRoZSBtaWdyYXRpb24gb2YgZXhwb3J0ZWQgaW5jbHVkZXMKCSAgaW50byBhIHJlYWwgaW5jbHVkZS9saWJ4bWwgaW4gQ1ZTLCBhdCBsZWFzdCBmb3IgQ1ZTIHVzZXJzLgoJKiByZW1vdmVkIHRoZSBleHBvcnRlZCBoZWFkZXJzLCBhZGRlZCBpbiBpbmNsdWRlL2xpYnhtbCAoYXMgd2VsbAoJICBhcyB4bWx2ZXJzaW9uLmguaW4pLgoKU2F0IEp1biAyMyAyMDozNzoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgdGhlIHdheSB0byBkZXRlY3Qgc3ltbGluawoKU2F0IEp1biAyMyAyMDozMDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogdXBkYXRlZCwgaW5jbHVkZS9saWJ4bWwgaXMgbm93IGEgcmVhbCBDVlMgZGlyCgpTYXQgSnVuIDIzIDE5OjM2OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IGEgbmV3IHZlcnNpb24gb2YgbGlieG1sLWRvYy5lbC4gVGhpcyBuZXcKCSAgdmVyc2lvbiB3b3JrcyB3aXRoIGJvdGggbGlieG1sMSBhbmQgbGlieG1sMiAoaXQgYXV0b2RldGVjdHMKCSAgdGhlIHByZWZpeCBvZiB0aGUgaHRtbC1maWxlcykgZnJvbSBGZWxpeCBOYXR0ZXIuCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCBkb2MgYWNjb3JkaW5nbHkKClNhdCBKdW4gMjMgMTg6MzA6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgYnVnIGdlbmVyYXRpbmcgYSB0ZW1wbGF0ZSBsb29wIGluIGxpYnhzbHQKCSAgd2hlbiB1c2luZyBkb2Nib29rLXhzbC0xLjQsICogc2hvdWxkIGZpbHRlciBvdXQgZG9jdW1lbnQgbm9kZXMKCSogSEFDS0lORzogYWRkZWQgV2lsbGlhbQoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVuIDIyIDE4OjAyOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL0ZBUS5odG1sOiBhZGRlZCBhIHdhcm5pbmcgYWJvdXQgZ2NjLTMuMAoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIHJlZmVyZW5jZSB0byBnZG9tZTIgYW5kIHJlbW92ZWQgYSBjb25mdXNpbmcKCSAgc2VudGVuY2UKCkZyaSBKdW4gMjIgMTc6MDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWx2ZXJzaW9uLmg6IG9rYXkgdGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLCBidXQgV2luZG93cwoJICB1c2VycyBuZWVkIGl0IGFuZCB0aGV5IGNhbid0IGdlbmVyYXRlIGl0LCBhbmQgSSB3YW50IENWUwoJICBXaW5kb3dzIHVzZXJzIC4uLgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfc28uZHNwOiBXaW5kb3dzIHByb2plY3QgZmlsZSBmb3IgCgkgIHRoZSBzaGFyZWQgbGliIHZlcnNpb24gb2YgbGlieG1sMgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYnVnICM1NjUyNyBzZXQgb2YgZXhwb3J0ZWQKCSAgcmVzb3VyY2VzIG5lZWRlZCBmb3IgbGlieHNsdC94c2x0cHJvYyBieSBZb24gRGVyZWsKCkZyaSBKdW4gMjIgMTY6Mzk6MzYgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpby5jOiBNU1ZDIGZpeCAocHJvdmlkZWQgYnkgSWdvciBabGF0a292aWMpCgkKRnJpIEp1biAyMiAxMjo0MjoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYW5vdGhlciBzbWFsbCBmaXggZm9yIEFUVFJJQlVURV9VTlVTRUQKCkZyaSBKdW4gMjIgMTI6NDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IFlvbiBEZXJlayBwcm92aWRlZCBhIGZpcnN0IGZpeAoJICB0byBiZSBhYmxlIHRvIGNvbXBpbGUgbGlieHNsdC94c2x0cHJvYyBvbiBXaW5kb3dzCgpGcmkgSnVuIDIyIDAwOjA0OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCB3aGF0IHNlZW1lZCBhIGdjYyBvcHRpbWl6ZXIKCSAgYnVnIHdoZW4gaGFuZGxpbmcgZmxvYXRzIG9uIGkzODYgaHR0cDovL3ZlaWxsYXJkLmNvbS9nY2MuYnVnCgkqIHRyZWUuYyBlbnRpdGllcy5jIGVuY29kaW5nLmM6IGRvaW5nIHNvbWUgY2xlYW51cHMgd2hpbGUKCSAgY2hhc2luZyBpdAoKVGh1IEp1biAyMSAxMzoxMzozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwIHdoZW4gLS13aXRob3V0LWRlYnVnIGlzIHNwZWNpZmllZAoJKiB4aW5jbHVkZS5jIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaCB4cG9pbnRlci5jOiBjbGVhbnVwCgkgIHcuci50LiAtLXdpdGhvdXQtZGVidWcgYW5kIG90aGVyIGluY2x1ZGUgcG9pbnRzCgkqIGNhdGFsb2cuaCB0ZXN0Q2F0YWxvZy5jOiBhIGJpdCBvZiBjbGVhbnVwIGFuZCBwcmVwYXJlIGZvciBYTUwKCSAgQ2F0YWxvZ3MKCSogY29uZmlndXJlLmluIGVudGl0aWVzLmggdHJlZS5oIEhUTUxwYXJzZXIuYzogcmVtb3ZlZAoJICAtLXdpdGhvdXQtY29yYmEsIG1hZGUgdGhlIF9wcml2YXRlIGZpZWxkIG1hbmRhdG9yeQoKV2VkIEp1biAyMCAxOTozNzoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIGVuY29kaW5nLmM6IFNpbmNlIE5vdGVwYWQgb24gV2luMmsKCSAgb3V0cHV0cyBhIEJPTSBpbiBVVEY4LCBhbiBlcnJhdGEgaGFzIGJlZW4gaXNzdWVkIHRvIGF2b2lkIHRoZQoJICBwcm9ibGVtLCB0aGF0IHdhcyB0aGUgbW9zdCByZWFzb25hYmxlIHNvbHV0aW9uLi4uIEFkZCBzdXBwb3J0CgkgIGZvciBhIGxlYWRpbmcgVVRGOCBCT00gaW4gZW50aXRpZXMuCgpXZWQgSnVuIDIwIDE1OjM4OjU5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgYSBidWcgZm91bmQgd2hlbiBwb3N0IHZhbGlkYXRpbmcgYW4gZW50aXR5IHJlZgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tbG9hZGR0ZCBhbmQgc2xpZ2x5IGNoYW5nZWQgLS1wb3N0dmFsaWQgdG8KCSAgYWN0aXZhdGUgaXQgdG9vCgpUdWUgSnVuIDE5IDIwOjAzOjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jIHhpbmNsdWRlLmMgeHBvaW50ZXIuYzogYnVnICM1NjQwMiBleHBvc2VkIGEgbnVtYmVyIG9mCgkgIHdlYWtuZXNzIGluIHRoZSBub2RlIGNvcHkgdGhlIFhQb2ludGVyIGFuZCB0aGUgWEluY2x1ZGUKCSAgaW1wbGVtZW50YXRpb25zLiBTZXJpb3VzIGNsZWFudXAuCgpUdWUgSnVuIDE5IDE0OjUwOjE4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IEtqYXJ0YW4gTWFyYWFzIHByb3ZpZGVkIGEgc21hbGwgcGF0Y2ggdG8KCSAgYWRkIHhtbDItY29uZmlnLmluIHRvIEVYVFJBX0RJU1QKClR1ZSBKdW4gMTkgMTM6MDQ6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYzogU3RlcGhhbiBLdWxvdwoJICBwcm92aWRlZCBhbm90aGVyIGZhaWxpbmcgY2FzZSBmb3VuZCBpbiBLREUsIHRoZSB3YXkgdGhlCgkgIGN0eHQtPnZjdHh0Lm5vZGVUYWIgd2FzIGFsbG9jYXRlZCBhbmQgZnJlZWQgY2hhbmdlZCBvdmVyCgkgIHRpbWUgYnV0IGl0IHdhc24ndCBjb21wbGV0ZWx5IGNsZWFuZWQgdXAuIFRoaXMgc2hvdWxkIGZpeCBpdC4KClN1biBKdW4gMTcgMTk6NTY6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogU3RlcGhhbiBLdWxvdyBhbHNvIHJhaXNlZCB0aGUgZmFjdCB0aGF0IGxpbmUgbnVtYmVyCgkgIGNvdWxkIGdldCBtaXNjb3VudGVkIG1ha2luZyBkZWJ1ZyBoYXJkZXIsIGZpeGVkIHRoZSBwcm9ibGVtCgkgIGluIHhtbFBhcnNlQ2hhckRhdGEoKQoKU3VuIEp1biAxNyAxOToxNzoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IFN0ZXBoYW4gS3Vsb3cgcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdoZW4gdmFsaWRhdGluZwoJICBhbmQgdXNpbmcgYW4gZW1wdHkgZW50aXR5LCBmb3Jnb3QgYSAnYnJlYWsnIGluIGEgY2FzZS4KClN1biBKdW4gMTcgMTY6NDc6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEhhc05zUHJvcCgpIGFjY29yZGluZ2x5IHRvIGJ1ZyAjNTU2ODMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHdpdGggMi4zLjExCgpTdW4gSnVuIDE3IDEyOjI0OjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogVE9ETzogdXBkYXRlZCBhZGRpbmcgY2xlYW51cCBvZiBnZW5lcmF0ZWQgZG9jCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgdG8gcmVsZWFzZSAyLjMuMTEKCSogeG1sbGludC5jOiBhZGRlZCAtLXZlcnNpb24gZm9yIGJ1ZyByZXBvcnRpbmcKCSogZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2MKClNhdCBKdW4gMTYgMjM6MjM6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXJzdCBwYXJ0IG9mIHRoZSB3b3JrIG9uIHNlbGVjdGluZyBuYW1lc3BhY2UgdG8KCSAgZml4IGJ1ZyAjNTYxMTUgCgpTYXQgSnVuIDE2IDAwOjIwOjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogTGFzemxvIFBFVEVSIHByb3ZpZGVkIGEgZml4CgkgIHdoZW4gdXNpbmcgLWxpY29udgoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVuIDE1IDA3OjA4OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuW2NoXTogbW9yZSB3b3JrIG9uIHRoZSBIVE1MIHNlcmlhbGl6YXRpb24gcm91dG5lcywKCSAgY2xlYW51cCwgZW5jb2Rpbmcgc3VwcG9ydC4KClRodSBKdW4gMTQgMTA6MzE6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBUaG9tYXMgQnJveWVyIHN1Z2dlc3RlZCBhIGJldHRlciBwYXRjaCBmb3IgdGhlIC8gYXJnCgpUaHUgSnVuIDE0IDAxOjAxOjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGRldGVjdGVkIGJ5IEFua2ggd2hlbiAvIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBhcmcKCldlZCBKdW4gMTMgMjM6MDg6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYzogc3RvcmVkIHRoZSBpbmxpbmUvYmxvY2sgcHJvcGVydHkKCSAgb2YgZWxlbWVudCBhbmQgdXNlIGl0IHRvIGF2b2lkIG91dHB1dHRpbmcgZm9ybWF0dGluZyBzcGFjZXMgYXQKCSAgdGhlIHdyb25nIHBsYWNlLiBJbXBsZW1lbnRlZCB0aGUgZm9ybWF0IHBhcmFtZXRlciBmb3IgSFRNTCBzYXZlLgoJKiByZXN1bHQvSFRNTC9kb2MyLmh0bSByZXN1bHQvSFRNTC9kb2MzLmh0bSByZXN1bHQvSFRNTC9mcDQwLmh0bQoJICByZXN1bHQvSFRNTC9zY3JpcHQuaHRtbCByZXN1bHQvSFRNTC90ZXN0Mi5odG1sIHJlc3VsdC9IVE1ML3Rlc3QzLmh0bWwKCSAgcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogb2YgY291cnNlIHRoaXMgaW1wYWN0IHRoZSByZXN1bHQgb2YgYQoJICBudW1iZXIgb2YgSFRNTCB0ZXN0cwoKVGh1IEp1biAxNCAwOTo0OTowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLltjaF06IHN0YXJ0ZWQgYXVnbWVudGluZyB0aGUgSFRNTCBzYXZlIEFQSSB3aXRoCgkgIGVuY29kaW5nIGFuZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMKCldlZCBKdW4gMTMgMDk6NDQ6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5oOiBjbGVhbnVwIGFuZCBzdGFydGVkIGV2YWx1YXRpbmcgdGhlIHdvcmsgbmVlZGVkIG9uCgkgIHJldmFtcGluZyB0aGUgSFRNTCBvdXRwdXQgY29kZQoKTW9uIEp1biAxMSAxOToyOTo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogaGFuZGxpbmcgb2YgUElzIGFuZCA8P3NnbWwtZGVjbGFyYXRpb24gaW4gZW50aXRpZXMuCgpUdWUgSnVuIDEyIDA4OjQ2OjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnICM1NjA0OSwgZm9yZ290IG9uZSBjaGVjayBpbiB0aGUKCSAgdmFsaWRhdGlvbiByb3V0aW5lCgpUdWUgSnVuIDEyIDA4OjA5OjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdOiBncnJyIC4uLiBuYW1lc3BhY2UgaXMgYSBDKysgcmVzZXJ2ZWQga2V5d29yZAoKVHVlIEp1biAxMiAwNjoyOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5oOiBmaXhlZCBhbiBlcnJvciBpbiBsYXN0IGNvbW1pdAoJKiBkb2MvRkFRLmh0bWw6IGFkZGVkIGFuIGVudHJ5IGZvciBjb21waWxhdGlvbiBmcm9tIENWUwoKTW9uIEp1biAxMSAxMDowNzoyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbHZlcnNpb24uaC5pbiBsaWJ4bWwuaDogQ3lnd2luIHBhdGNoZXMKCSogdHJlZS5jOiB4bWxGcmVlTm9kZUxpc3QgcGF0Y2ggc2ltaWxhciB0byB4bWxGcmVlTm9kZSBvbmUKCSogdHJlZS5oOiBjbGVhbnVwCgpTYXQgSnVuICA5IDE5OjE2OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBwYXRjaGVkIHhtbEZyZWVOb2RlKCkgdG8gYXZvaWQgZnJlZWluZygpIGEgc3RhdGljCgkgIG1lbW9yeSBibG9jayBpbiBhIHN0cmFuZ2UgY2FzZSB3aGVyZSBsaWJ4bWwgaXMgbGlua2VkIHR3aWNlCgkgIGluIHRoZSBiaW5hcnkuCgpTYXQgSnVuICA5IDE4OjM5OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogKGE/ICwgYj8gLCBjPyAsIC4uLiAsIHo/KSB3YXMgc3RvcmluZy9yZXN0YXVyaW5nCgkgIHN0YXRlIGZhciB0b28gb2Z0ZW4sIHNpbXBsZSBmaXggdXNlZCB0byBhdm9pZCBpdC4KClNhdCBKdW4gIDkgMTY6MTA6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5jOiBSYXBoYWVsIEhlcnR6b2cgaGFkIGEgdHJvdWJsZSB3aXRoIERURCBub2RlcwoJICBiZWluZyBwcm9jZXNzZWQsIGFwcGxpZWQgaGlzIHBhdGNoCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgcmFpc2VkIGluIHhtbFN0YXRpY0NvcHlOb2RlTGlzdCgpCgpTYXQgSnVuICA5IDE1OjUwOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgdXJpLmMgaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBJZ29yICBabGF0a292aWMKCSAgcHJvdmlkZWQgZml4ZXMgdG8gY29tcGlsZSBvbiBNU0NDIGFnYWluCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2xpYnhtbDIvbGlieG1sMiouZHNwOiBoZQoJICBhbHNvIHByb3ZpZGVkIGFuIHVwZGF0ZSBmb3IgdGhlIHByb2plY3QgZmlsZXMuCgpUaHUgSnVuICA3IDIxOjUyOjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBhcHBsaWVkIFN0ZXZlIFRpbm5leSBwYXRjaCB0byB4bWxOZXdOc1Byb3AgdG8gZml4CgkgIGJ1ZyAjNTU4MTAKClRodSBKdW4gIDcgMjE6Mjk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldE5zUHJvcCgpIHRvIGNsb3NlIGJ1ZyAjNTU2ODMKCSAgTm90ZSB0aGlzIHJlcXVpcmVzIGxpYnhzbHQgdG8gdXNlIGl0J3Mgb3duIGZ1bmN0aW9uIGluc3RlYWQuCgpUaHUgSnVuICA3IDE4OjA2OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogd2hlbiBpbiBhIHByZSBlbGVtZW50IG5vIGZvcm1hdHRpbmcgc3BhY2Ugc2hvdWxkCgkgIGJlIGFkZGVkLgoJKiB0ZXN0L0hUTUwvcHJlLmh0bWwgcmVzdWx0L0hUTUwvcHJlLmh0bWwqOiBhZGRlZCBhIHJlZ3Jlc3Npb24gdGVzdAoKVGh1IEp1biAgNyAxNzoyOTozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgdGVzdHMgZm9yIHNpZ25hbCgpIGFuZCBzaWduYWwuaAoKRnJpIEp1biAgOCAxMDoxNzoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHJvYmVydCBwb2ludGVkIG91dCB4bWxYUGF0aE5JTkYgd2FzIG5vdCBpbml0aWFsaXplZAoKRnJpIEp1biAgOCAxMDowMTo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBGZWxpeCBOYXR0ZXIgcHJvdmlkZWQgYSBuZXcgdmVyc2lvbiBmb3IKCSAgbGlieG1sMgoKRnJpIEp1biAgOCAwNzoyMDo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHdoZW4gaW4gYSBwcmUgZWxlbWVudCBubyBmb3JtYXR0aW5nIHNwYWNlIHNob3VsZAoJICBiZSBhZGRlZC4KCldlZCBKdW4gIDYgMTg6MDc6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGFkZCAtbWllZWUgdG8gQ0ZMQUdTIHdoZW4gY29tcGlsaW5nIG9uIExpbnV4L2FscGhhCgpUaHUgSnVuICA3IDA2OjQ0OjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jOiBpbXBsZW1lbnRlZCB0aGUgPD9zZ21sLWRlY2xhcmF0aW9uIGVuY29kaW5nPSJ4eHgiPz4KCSAgaGFjawoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEhhc05zUHJvcCBhcyBzdWdnZXN0ZWQgaW4gYnVnIHJlcG9ydCAjNTU2NTMgCgkqIHVyaS5jOiBmaXhlZCBhIHdhcm5pbmcKClR1ZSBKdW4gIDUgMjI6NTQ6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiB0cnlpbmcgdG8gY2xvc2UgYnVnICM1NTc3MiBlc2NhcGluZyBpbiBzY3JpcHQKCSAgZWxlbWVudHMKCSogZG9jL3htbC5odG1sOiBzdWdnZXN0IHRvIHNlbmQgbWFpbCB0byB0aGUgbGlzdAoKVHVlIEp1biAgNSAxOToxMTowMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IGF0dGVtcHQgdG8gZml4IHRoZSB4bWxHZXRWYXJTdHIgYnJlYWthZ2Ugb25jZSBhbmQgZm9yCgkgIGdvb2QuIFVzZSBhIG1hY3JvIGFuZCBiYXNlZCBvbiB0aGUgc29sdXRpb24gcHJvdmlkZWQgaW4gCgkgIHZzbnByaW50ZiBtYW51YWwgcGFnZSBmcm9tIEdOVS4KClR1ZSBKdW4gIDUgMTQ6NDY6MTAgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogZXJyb3IuYzogV29ya2Fyb3VuZCBmb3Igbm9uLXByZXNlcnZpbmcgdmFyaWFkaWMgbGlzdC4KCSogdHJpby5jIHRyaW8uaCB0cmlvcC5oIHN0cmlvLmMgc3RyaW8uaDogVXBncmFkZWQgdG8gdHJpbyBiYXNlbGluZSAxLjQKCQpTYXQgSnVuICAyIDA2OjEyOjMzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhZGRlZCAyLjMuMTAgcmVsZWFzZQoKRnJpIEp1biAgMSAxMToyNzoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMy4xMAoKVGh1IE1heSAzMSAyMDo0MjozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IEdhcnkgUGVubmluZ3RvbiBzcG90dGVkIGEgZmV3IHRyb3VibGVzIHdpdGggZmlsZTovLy8KClRodSBNYXkgMzEgMjA6MTg6NTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+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+CgoJKiB4cGF0aC5jOiBmaXhlZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCgpIHRvIGRvIHByb3BlcgoJICBwcmVmaXggbG9va3VwLgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgdGhlIGJ1ZyByZXBvcnRlZCBieSBNb3J1cyBXYWx0ZXIKCSAgZHVlIHRvIGFuIG9mZiBieSBvbmUgdHlwbyBpbiB4bWxTdHJpbmdDdXJyZW50Q2hhcigpCgkKVGh1IEFwciAxMiAxNzo0MTowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyByZXN1bHQvSFRNTC8qOiByZXZhbXBlZCB0aGUgd2F5IHRoZSBIVE1MCgkgIHBhcnNlciBoYW5kbGVzIGVuZCBvZiB0YWdzIG9yIGVuZCBvZiBpbnB1dAoKVGh1IEFwciAxMiAxMDo1MDozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbERvY0NvcHlOb2RlIGZvciBnZG9tZTIgc3VwcG9ydAoKV2VkIEFwciAxMSAxNjozNzo1MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuaDogaW5jbHVkZSB4bWxtZW1vcnkuaCB0aGlzIHNlZW1zIHRvIGhhdm9pZCBhIG5hc3R5IGdsaWJjCgkgIGJ1ZyB3aGVyZSB0aGUgbGlua3RpbWUgdmVyaW9ucyBvZiBmcmVlKCkgd29uJ3Qgd29yayAuLi4KCldlZCBBcHIgMTEgMTQ6MjE6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4geG1sdmVyc2lvbi5oLmluOiBhZGRlZCBhbnNpZGVjbC5oIHRlc3QKCldlZCBBcHIgMTEgMTM6NTA6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDIuMy42IHJlbGVhc2UKCldlZCBBcHIgMTEgMTM6MjY6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbFN0cmluZ0dldE5vZGVMaXN0KCkgdG8gaGFuZGxlIGNoYXJyZWZzCgkqIHJlc3VsdC93bWwueG1sOiByZXN1bHRlZCBpbiBhIHNtYWxsIG91dHB1dCBjaGFuZ2UKCldlZCBBcHIgMTEgMDk6NDc6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHhtbE5ld0RvYyB3YXMgbWlzc2luZyB0aGUgY2hhcnNldCBpbml0aWFsaXphdGlvbgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tYXV0byB0byBhdXRvZ2VuZXJhdGUgYSBkb2MsIGFsbG93IHRvCgkgIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSBmaXhlZCBvbiB4bWxOZXdEb2MKClR1ZSBBcHIgMTAgMTg6MTM6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gZ2V0IDUyOTc5IHNvbHZlZAoJKiB0cmVlLmMgcmVzdWx0LyByZXN1bHQvbm9lbnQvOiB0cnlpbmcgdG8gZ2V0IDUyNzEyIHNvbHZlZCwgdGhpcwoJICBhbHNvIG1hZGUgbWUgY2xlYW4gdXAgdGhlIGZhY3QgdGhhdCBYTUwgb3V0cHV0IGluIGdlbmVyYWwgc2hvdWxkCgkgIG5vdCBhZGQgZm9ybWF0aW5nIGJsYW5rcyBieSBkZWZhdWx0LCB0aGlzIGNoYW5nZWQgdGhlIG91dHB1dCBvZgoJICBhIGZldyB0ZXN0cwoKVHVlIEFwciAxMCAxNjozMDoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IEJpbGwgQnJhY2sgcG9pbnRlciBhbiBlcnJvciBpbiBkZXRlY3RpbmcgYSBudWxsIG5vZGVzZXQKClN1biBBcHIgIDggMTU6MDc6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpbmFsbHkgcmVsZWFzZWQgMi4zLjYKClN1biBBcHIgIDggMTE6Mzk6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBjaGVja2luZyBmb3IgbnVsbCBwb2ludGVyIGdlbmVyYXRlZCBieSBuZXcgY29kZQoKRnJpIEFwciAgNiAxMjo1MzowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgW10gZXZhbHVhdGlvbiBwcm9ibGVtIHJlcG9ydGVkCgkqIHRlc3QvWFBhdGgvdGVzdHMvc2ltcGxlYWRkcjogZXh0ZW5kZWQgdGVzdAoJKiByZXN1bHQvWFBhdGgvc2ltcGxlYWRkcjogdXBkYXRlZCByZXN1bHQKCldlZCBBcHIgIDQgMDI6MDc6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LmM6IERhbiBUaW1pcyByZXBvcnRlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0KCSAgb24gTWFjcyB3aXRob3V0IG1tYXAsIGZpeGVkIGl0LgoKVHVlIEFwciAgMyAyMDoyMDo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRlc3RYUGF0aC5jIDogYWRkZWQgYSAtLXRyZWUgb3B0aW9uIGFsbG93aW5nIHRvIGRpc3BsYXkgdGhlCgkgIHRyZWUgZHVtcCBvZiB0aGUgWFBhdGggZXhwcmVzc2lvbgoKTW9uIEFwciAgMiAxNzoxMzo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWVtbGVhayB3aGVuIGNvbXBhcmluZyBub2Rlc2V0cwoJKiBIVE1MdHJlZS5jOiBkb24ndCBpbnZlbnQgdGhlIEhUTUwgZG9jdHlwZSBpZiBub3QgYXZhaWxhYmxlIChYU0xUKQoJKiB0cmVlLmM6IGFkZGVkIGEgVE9ETwoKVHVlIE1hciAyNyAxNDozMjowNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSBjb25maWcuaC5pbiB4bWx2ZXJzaW9uLmguaW46IGRldGVjdCBpZgoJICB3ZSBuZWVkIHN0cmluZyBmdW5jdGlvbnMKCSogdHJpby5bY2hdIHN0cmlvLltjaF06IGVtYmVkZGVkIHRoZSBUcmlvLTAuMjMgc3RyaW5nIGZ1bmN0aW9ucwoJICB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIHdoZXJlIG5lZWRlZC4gQXBwbGllZCBzb21lIGNoYW5nZXMKCSAgdG8gcmVkdWNlIG5hbWUgbGlua2luZyBwb2xsdXRpb24gYW5kIGNvbXBpbGUgaW4gb25seSB3aGF0J3MKCSAgbmVlZGVkLgoJKiBIVE1MdHJlZS5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBlcnJvci5jIG5hbm9mdHAuYyB2YWxpZC5jCgkgIHhsaW5rLmMgeG1sdmVyc2lvbi5oLmluIHhwYXRoLmM6IGdvdCByaWQgb2YgdGhlICNpZmRlZiAKCSAgZm9yIHRoZSBzdHJpbmcgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucwoJKiB4bWxtZW1vcnkuW2NoXTogcmVtb3ZlZCBERUJVR19NRU1PUllfRlJFRUQgYW5kIGFkZGVkIGl0IGF1dG9tYXRpY2FsbHkKCSAgdG8gdGhlIGZyZWUoKSBmdW5jdGlvbiBvZiB4bWxtZW1vcnkuYwoJKiBlbnRpdGllcy5jIEhUTUx0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMKCSAgeGluY2x1ZGUuYyB4bWxJTy5jIHhwYXRoLmMgeHBvaW50ZXIuYzogcmVtb3ZlZCB0aGUgTUVNX0NMRUFOVVAKCSAgdXNhZ2UuCgoKVHVlIE1hciAyNyAwMjozMDoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IGFwcGxpZWQgdGhlIGNvbnRleHQgb3V0cHV0IHBhdGNoIG9mIHRoZSBlcnJvcgoJICBoYW5kbGluZyBzdWJtaXR0ZWQgYnkgQ2h1Y2sgR3JpZmZpdGgKCSogZXJyb3IvVkMvKjogdGhpcyBzbGlnaHRseSBjaGFuZ2Ugc29tZSBlcnJvciBsb2dzCgpUdWUgTWFyIDI3IDAwOjUxOjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGxpbmUgbnVtYmVyIHJlcG9ydGluZyBvbiBlcnJvcgoKTW9uIE1hciAyNiAyMzoyMTo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBTdWxsaXZhbiBhbmQgRGFyaW4gZm91bmQgYSBwYXJzZXIgYnVnLAoJICBhcHBsaWVkIHRoZSBwYXRjaC4KCk1vbiBNYXIgMjYgMTg6MjQ6NTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVycm9yLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5jIHZhbGlkLmMgeG1sSU8uYyB4bWxtZW1vcnkuYwoJICB4bWx2ZXJzaW9uLmguaW4geHBvaW50ZXIuYzogb2YgY291cnNlIHRoZSB3YXkgSSBkZWZpbmVkCgkgIFVOVVNFRCBicmVha3Mgb24gb2xkIGdjYyB2ZXJzaW9uLiBUcnkgdG8gYmUgc21hcnQgYW5kCgkgIGFsc28gZGVmaW5lIGl0IGRpcmVjdGx5IGluIHhtbHZlcnNpb24uaAoJKiBjb25maWd1cmUuaW46IHJlbW92ZWQgLWFuc2kgZmxhZyBmcm9tIHRoZSBwZWRhbnRpYyBzZXQKClNhdCBNYXIgMjQgMTc6NDU6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KICAgICAgICBIdWdlIGNsZWFudXAsIEkgc3dpdGNoZWQgdG8gY29tcGlsZSB3aXRoCgktV2FsbCAtZyAtTyAtYW5zaSAtcGVkYW50aWMgLVcgLVd1bnVzZWQgLVdpbXBsaWNpdAoJLVdyZXR1cm4tdHlwZSAtV3N3aXRjaCAtV2NvbW1lbnQgLVd0cmlncmFwaHMgLVdmb3JtYXQKCS1XY2hhci1zdWJzY3JpcHRzIC1XdW5pbml0aWFsaXplZCAtV3BhcmVudGhlc2VzIC1Xc2hhZG93CgktV3BvaW50ZXItYXJpdGggLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtV2FnZ3JlZ2F0ZS1yZXR1cm4KCS1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduZXN0ZWQtZXh0ZXJucyAtV2lubGluZQoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLltjaF0KCSAgZW5jb2RpbmcuaCBlbnRpdGllcy5jIGVycm9yLmMgbGlzdC5bY2hdIG5hbm9mdHAuYwoJICBuYW5vaHR0cC5jIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5bY2hdIHRlc3RIVE1MLmMKCSAgdGVzdFNBWC5jIHRlc3RVUkkuYyB0ZXN0WFBhdGguYyB0cmVlLltjaF0gdXJpLmMKCSAgdmFsaWQuW2NoXSB4aW5jbHVkZS5jIHhtbElPLltjaF0geG1sbGludC5jIHhtbG1lbW9yeS5jCgkgIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaCB4cG9pbnRlci5bY2hdIGV4YW1wbGUvZ2pvYnJlYWQuYzoKCSAgQ2xlYW51cCwgc3RhdGljZmllZCBhIG51bWJlciBvZiBub24tZXhwb3J0ZWQgZnVuY3Rpb25zLAoJICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCBhIGRvemVuIG9mIHByb2JsZW0gZm91bmQgdGhpcyB3YXksCgkgIGF2b2lkZWQgYSBsb3Qgb2YgcHVibGljIGZ1bmN0aW9uIG5hbWUvdHlwZWRlZi9zeXN0ZW0gbmFtZXMgY2xhc2hlcwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQKCSogY29uZmlndXJlLmluOiBzd2l0Y2hlZCBwcml2YXRlIGZsYWdzIHRvIHRoZSByZWFsbHkgcGVkYW50aWMgb25lcy4KClRodSBNYXIgMjIgMjI6NDQ6MTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogMi4zLjUKCSogZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgZG9jcwoKVGh1IE1hciAyMiAxNTozNjo0NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgcmVwb3J0ZWQgYnVnIGluIE5PVEFUSU9OIHBhcnNpbmcKCSogdXJpLmM6IGFjY2VwdGVkIGJ1dCBub3QgZml4ZWQgYnVnIDUxODc2LCBhZGRlZCBUT0RPIAoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYnVnIDUxODc2CgpUaHUgTWFyIDIyIDEzOjQxOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gZXJyb3IuYzogZml4IGEgY29tcGlsYXRpb24gcHJvYmxlbQoJICBvbiBwbGF0Zm9ybXMgd2l0aG91dCB2c25wcmludGYgKHhtbEB0aGV3cml0dGVud29yZC5jb20pCgpXZWQgTWFyIDIxIDE5OjA0OjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBmdW5jdGlvbiBuYW1lIGhlYWRlciB0eXBvCgkqIFNBWC5jOiBub3RhdGlvbnMgY2FuIGFsc28gb2NjdXIgaW4gZXh0ZXJuYWwgc3Vic2V0LgoKVHVlIE1hciAyMCAxNDoyMToyOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogcmVtb3ZlZCBhIEMrKyBsaWtlIGNvbW1lbnQKClR1ZSBNYXIgMjAgMTI6MjI6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnIDUyMjk5IHN0cmFuZ2UgY29uZGl0aW9uIGxlYWRpbmcKCSAgdG8gYSBwYXJzZXIgY3Jhc2ggZHVlIHRvIGEgYnVmZmVyIG92ZXJmbG93CgkqIHJlc3VsdC9ub2VudC9hdHRyaWIueG1sIHJlc3VsdC9hdHRyaWIueG1sIHRlc3QvYXR0cmliLnhtbDoKCSAgYWRkZWQgdGhlIHNwZWNpZmljIHRlc3QgY2FzZQoKTW9uIE1hciAxOSAxNjo1MDo1MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXTogc3RpbGwgYSBsb3Qgb2YgY2xlYW51cCBiYXNlZCBvbiBYU0xULCBhZGRlZAoJICB4bWxYUGF0aENvbnZlcnR7U3RyaW5nLE51bWJlcixCb29sZWFufSB0byBiZSBhYmxlIHRvIG1ha2UKCSAgdHlwZSBjYXN0cyB3aXRob3V0IGEgY29udGV4dCBzdGFjaywgZml4ZWQgc29tZSBpbXBsZW1lbnRhdGlvbgoJICBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBhYnNlbmNlIG9mIGNvbnRleHQgYXQgcGFyc2UtdGltZSwKCSAgYWRkZWQgeG1sWFBhdGhFdmFsUHJlZGljYXRlKCkgYW5kIHhtbFhQYXRoRnJlZUNvbXBFeHByKCkKCSAgaW4gdGhlIHB1YmxpYyBBUEkgdG9vCgkqIHhwb2ludGVyLmMgeHBhdGhJbnRlcm5hbHMuaDogd2UgbmVlZCB0byBrbm93IGF0IHBhcnNlIHRpbWUKCSAgd2hldGhlciB3ZSBhcmUgY29tcGlsaW5nIGFuIFhQb2ludGVyCgpNb24gTWFyIDE5IDExOjU0OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IHJlc3RhdXJlZCB0aGUgQmluYXJ5IGFuZCBBUEkgY29tcGF0aWJpbGl0eQoJICBjbGVhbmVkIHVwIHRoZSBwYXJzZXIgaW50ZXJuYWxzLCByZWZhY3RvcmVkIFhQYXRoIGNvZGUsIGFkZGVkCgkgIG5ldyBjb21waWxhdGlvbiBiYXNlZCBBUElzIGFuZCBjbGVhbmx5IHNlcGFyYXRlZCBwdWJsaWMgYW5kCgkgIHByaXZhdGUgQVBJcy4KCk1vbiBNYXIgMTkgMDA6NTk6MjUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmg6IHRoZSBjb21wIGZpZWxkIG11c3QgYmUgYWRkZWQgYXQgdGhlIGVuZCB0byBhdm9pZAoJICBraWxsaW5nIGJpbmFyeSBjb21wYXQuCgpNb24gTWFyIDE5IDAwOjExOjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogZGV0ZWN0IFhQYXRoIG1lbWxlYWtzIGluIHJlZ3Jlc29uIHRlc3RzCgkqIGVycm9yLmM6IGZpeGVkIGFuZCBlcnJvciB3LnIudC4gZXJyb3IgcmVwb3J0aW5nIHN0aWxsIHVzaW5nCgkgIHN0ZGVycgoJKiBoYXNoLmM6IGFkZGVkIG5ldyBsaW5lIGF0IGVuZCBvZiBmaWxlCgkqIHRyZWUuaDogbWlub3IgY2xlYW51cAoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLltjaF06IE1ham9yIGNoYW5nZXMgISBTZXBhcmF0ZWQgWFBhdGgKCSAgZXhwcmVzc2lvbiBwYXJzaW5nIGZyb20gZXZhbHVhdGlvbiwgcmVzdWx0ZWQgaW4gYSBudW1iZXIgb2YKCSAgY2hhbmdlcyBpbnRlcm5hbGx5LCBhbmQgaW4gWFBvaW50ZXIuIExpa2VseSB0byBicmVhayBzdHVmZgoJICB1c2luZyB4cGF0aEludGVybmFscy5oIGJ1dCBzaG91bGQgcmVtYWluIGJpbmFyeSBjb21wYXRpYmxlLAoJICBuZXcgaW50ZXJmYWNlcyB3aWxsIGJlIGFkZGVkLgoKV2VkIE1hciAxNCAyMDozNDowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyByZXBvcnRlZCBieSAKCSAgb2tpZGRsZUB5YWhvby5jby51ayBhbmQgYWxsYW5jQGNoaWNrZW5hbmRwb3JuLmNvbSB3aGVuIGNvbXBpbGluZwoJICB3aXRob3V0IGdjYyBvbiBub24gbGludXggcGxhdGZvcm1zLgoKV2VkIE1hciAxNCAyMDoxMzo1NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL01ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogeWVhcmtlQGVuZy5idWZmYWxvLmVkdSBzdWdnZXN0ZWQKCSAgYSBmaXggZm9yIC0td2l0aC1odG1sLWRpcj0gY29uZmlndXJlIHN1cHBvcnQuIEkgaG9wZSBpdCB3b24ndAoJICBicmVhayBycG0gZ2VuZXJhdGlvbgoKV2VkIE1hciAxNCAxNzoyODo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogb25lIGZ1bmN0aW9uIGNvbW1lbnQgY2xlYW51cC4KCldlZCBNYXIgMTQgMTQ6NTU6NDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jOiBleHRlcm5hbCBzdWJzZXQgbm90YXRpb25zIHdlcmUgaW1wcm9wZXJseSByZWdpc3RlcmVkCgkgIGluIHRoZSBpbnRlcm5hbCBzdWJzZXQuCgpUdWUgTWFyIDEzIDEwOjI4OjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBSRUFETUUuY3ZzLWNvbW1pdHM6IGFkZGVkLCBwb2ludGluZyB0byBIQUNLSU5HCgkqIEhBQ0tJTkc6IHVwZGF0ZWQKCk1vbiBNYXIgMTIgMjI6MDk6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBhbmQgTWF0dCBTZXJnZWFudCBmb3VuZCBvbmUgaW4gdGhlIFhNTCBwdXNoCgkgIHBhcnNlciAoZXJyb25lb3VzIGNoZWNrIEkgZm9yZ290IHRvIHJlbW92ZSB3aGVuIEkgZml4ZWQgdGhlCgkgIG1haW4gcGFyc2VyKS4KCk1vbiBNYXIgMTIgMTk6MTk6MDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHB0aXR0b20gZm91bmQgYSBzbWFsbCBidWcgaW4gVW5hcnlFeHByCgpTYXQgTWFyIDEwIDEzOjA5OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjMuNAoJKiBlcnJvci5jOiBmaXhlZCBidWcgIzUxODYwCgkqIHRyZWUuYzogZml4ZWQgYnVnICM1MTg2MQoJKiB2YWxpZC5jOiBjbGVhbnVwLCBtb3JlIGRlYnVnLCBmYWlsZWQgdG8gZml4IG9uZSBidWcgY3JhcCAuLi4KCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sRGVmYXVsdEJ1ZmZlclNpemUKCSogbmFub2Z0cC5jOiB0eXBvIGluIGZ1bmN0aW9uIG5hbWUgaGVhZGVyIGJsb2NrCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQsIGFkZGVkIGxpbmsgdG8gWE1MOjpMaWJYU0xUCgkqIGRvYy9odG1sLyogOiByZWJ1aWx0IHRoZSBkb2NzCgpXZWQgTWFyICA3IDIwOjQzOjQ3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBTQVguYzogdGhlIG5ldyBjb250ZW50IHBhcnNpbmcgY29kZSByYWlzZWQgYW4KCSAgdWdseSBidWcgaW4gdGhlIGNoYXJhY3RlcnMoKSBTQVggY2FsbGJhY2suIEZvdW5kIGl0CgkgIGp1c3QgYmVjYXVzZSBvZiBzdHJhbmdlbmVzcyBpbiBYU0xUIFhNTCBSZWMgb3VwdHV0IDotKAoKV2VkIE1hciAgNyAxNjo1MDoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IE1hcnRpbiBCYXVsaWcgc3VnZ2VzdGVkIHRvIGFkZCAtbG0KCSogdHJlZS5jOiBmb3VuZCBhbm90aGVyIGJ1ZyBpbiB4bWxOb2RlR2V0Q29udGVudCgpCgpUdWUgTWFyICA2IDA5OjIxOjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBCam9ybiBmb3VuZCB0aGUgZXJyb3IgcmVsYXRlZCB0byBzdHJpY3RuZXNzIG9mIGNvbXBhcmlzb24uCgpNb24gTWFyICA1IDIxOjQ3OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogdHJ5aW5nIHRvIGZpeCB0aGUgRHRkIHBhcnNpbmcgcHJvYmxlbSByZXBvcnRlZAoJICBieSBHYXJ5LCBzaWRlIGVmZmVjdCBvZiBsYXN0IHdlZWsgc3BlZWQgb3B0aW1pemF0aW9ucy4KClNhdCBNYXIgIDMgMTk6NDU6NTkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbDJDb25mLnNoLmluOiBmaXhlcyBwb2ludGVkIG91dCBieSBGcmVkcmlrIEhhbGxlbmJlcmcKCSogcGFyc2VySW50ZXJuYWxzLmM6IHJlbW92ZWQgdW5uZWVkZWQgdGVzdCByYWlzZWQgYnkgU3RyaWMKClNhdCBNYXIgIDMgMTM6MDQ6MzcgQ0VUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB4cGF0aC5jOiBGaXhlZCB4bWxYUGF0aE5vZGVDb2xsZWN0QW5kVGVzdCAocHJvYmxlbSByZXBvcnRlZAoJICBhbmQgZml4ZWQgYnkgV2lsbGlhbSBCcmFjaykuIEFkZGVkIHhtbFhQYXRoRm9ybWF0TnVtYmVyLgoJICBDaGFuZ2VkIHRoZSBzb3J0aW5nIHNsaWdodGx5LgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogQWRkZWQgLWxtLgoJICBQbGVhc2Ugbm90ZSB0aGF0IGFwcGxpY2F0aW9ucyBsaW5raW5nIHdpdGggbGlieG1sMiwgbXVzdAoJICBhbHNvIGxpa2Ugd2l0aCB0aGUgbWF0aCBsaWJyYXJ5IGZyb20gbm93IG9uLgoKU2F0IE1hciAgMyAwNzozODo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBsb29wIHJlcG9ydGVkIGJ5IE1hcmMgU2FuZmFjb24KClNhdCBNYXIgIDMgMDI6MTA6MjQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBvbmUgbXVzdCByZXBvcnQgc3BhY2VzIGV2ZW4gaWYgdGhlIER0ZCBlbGVtZW50CgkgIGNvbnRlbnQgcHJvdmVzIHRoYXQgdGhpcyBpcyBub3QgcGFydCBvZiB0aGUgZWxlbWVudCBjb250ZW50LgoJKiByZXN1bHQvdmFsaWQvKi54bWw6IHRoaXMgY2hhbmdlZCB0aGUgb3VwdHUgc2xpZ2h0bHkKClRodSBNYXIgIDEgMTc6NTM6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMy4zCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZAoKV2VkIEZlYiAyOCAwMDo0Mzo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBtaW5vciBkb2MgZml4CgkqIHhwYXRoLmM6IGRlYWxsb2NhdGlvbiBpc3N1ZXMgd2hlbiBhIHJlc3VsdCB0cmVlIGhhcyBiZWVuCgkgIGNvbnZlcnRlZCB0byBhIG5vZGUtc2V0CgpNb24gRmViIDI2IDIyOjA5OjQ1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IG9vcHMgY29ycmVjdGVkIGRhdGVzIHMvMjAwMC8yMDAxCgpNb24gRmViIDI2IDEyOjQ4OjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBuZXcgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24KCk1vbiBGZWIgMjYgMDk6MzA6MjMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYXBwbGllZCBwYXRjaCBmcm9tIEFua2gKCk1vbiBGZWIgMjYgMDM6MzQ6NDMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIGEgcHJvYmxlbSBidWlsZGluZyBvbiBNYWMKClN1biBGZWIgMjUgMjE6NTI6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBtb3JlIHdvcmsgb24gaW5jcmVhc2luZyBwYXJzaW5nIGZlcmZvcm1hbmNlcwoKU3VuIEZlYiAyNSAxODowMzo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbWVtb3J5LmggSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgZW50aXRpZXMuYyBwYXJzZXIuYwoJICB4cGF0aC5jIHhwb2ludGVyLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxJTy5jOgoJICBhdm9pZGluZyBtZW1jcHkgaW4gcHJvZHVjdGlvbiBidWlsZHMgTUVNX0NMRUFOVVAgbWFjcm8gdXNlCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5jOiBvcHRpbWl6YXRpb25zIG9mIHRoZSB0aWdodGVzdAoJICBpbnRlcm5hbCBsb29wcyBpbnNpZGUgdGhlIHBhcnNlci4gQmV0dGVyIGNoZWNraW5nIG9mIEkvTwoJICBmbHVzaGluZy9sb2FkaW5nIGNvbmRpdGlvbnMKCSogeG1sbGludC5jIDogYWRkZWQgLS10aW1pbmcKClN1biBGZWIgMjUgMDU6NDg6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMy4yCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCBmb3IgcmVsZWFzZQoKU2F0IEZlYiAyNCAxNDowNzo1MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZm91bmQgYSBtZW1sZWFrIGFuZCBmaXhlZCBhIG5hc3R5IGJ1ZwoKU2F0IEZlYiAyNCAwMzozNTo0OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5bYzFdIDogYWRkZWQgcmV0dXJuIGNvZGUgZXJyb3JzIGZvciB4bWxsaW50CgkqIHhwYXRoLmM6IHNwZWNpZmljIGRlYnVnIGR1bXAgZnVuY3Rpb24gZm9yIHJlc3VsdCB2YWx1ZSB0cmVlcwoKVGh1IEZlYiAyMiAwNzo1MjoyNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZmluYWxseSBpbXBsZW1lbnRlZCB4bWxYUGF0aENvbXBhcmVOb2RlU2V0cwoJKiB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzIHJlc3VsdHMvWFBhdGgvZXhwci9mbG9hdHM6IGFkZGVkIAoJICBhIHRlc3QgZm9yIGZsb2F0IGV4cHJlc3Npb25zCgpUdWUgRmViIDIwIDE4OjU3OjU0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbE5vZGVHZXRDb250ZW50LCBpdCB3YXMgbm90IHJlY3Vyc2luZyBvbiBjaGlsZAoJKiBwYXJzZXJJbnRlcm5hbHMuW2NoXTogdHJ5aW5nIHRvIHNwZWVkIHVwIHBhcnNpbmcKCSogeHBhdGguYyA6IHNwZWVkZWQgdXAgbm9kZSBzZXQgZXF1YWxpdHkgb3AKCk1vbiBGZWIgMTkgMTk6MDE6NTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIHZhbGlkLmMgbGlzdC5bY2hdOiBHYXJ5IFBlbm5pbmd0b24gcHJvdmlkZWQgYQoJICBiZXR0ZXIgaGFuZGxpbmcgb2YgSUQvSURSRUYgYW5kIHRoZSBsaXN0IG1vZHVsZXMgYXNzb2NpYXRlZAoJKiBjb25maWd1cmUuaW46IHNtYWxsIENGTEFHUyBjbGVhbnVwCgpNb24gRmViIDE5IDE2OjEzOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGljb252IGRldGVjdGlvbiBvbiBBSVggKHN0cmljKQoKTW9uIEZlYiAxOSAxMDo1OTo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgIioiICh1bmJlbGlldmFibGUgISkgYW5kIGEgY291cGxlIG9mIHdhcm5pbmdzCgpTdW4gRmViIDE4IDE3OjUyOjM3IE1FVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogeHBhdGguYzogZml4ZWQgd2hpdGVzcGFjZSBoYW5kbGluZyBpbiB4bWxYUGF0aFN0cmluZ0V2YWxOdW1iZXIsCgkgIGFuZCBvcHRpbWl6ZWQgeG1sWFBhdGhOb2RlU2V0U29ydAoKU2F0IEZlYiAxNyAxNDoxODo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGZpeCB3aGVuIGNvbnRleHQgc2l6ZSBpcyAwCgkqIHBhcnNlci5jOiBJIGxpa2UgTm9ybSdzIER0ZCBiZWNhdXNlIHRoZXkgc3RpbGwgbWFuYWdlIHRvIGJyZWFrCgkgIHRoZSBwYXJzZXIgb2NjYXNpb25hbGx5CgpGcmkgRmViIDE2IDE0OjIwOjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB4bWxYUGF0aEVxdWFsTm9kZVNldEZsb2F0IHRoZSBhcmcgaXMgcmVhbGx5IGEgZG91YmxlIG5vdwoKRnJpIEZlYiAxNiAwMToxMDowNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdIHBhcnNlci5jIHhwYXRoLmM6IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGFkZHJlc3NpbmcKCSAgYXR0cmlidXRlcyB3aXRoaW4gdGhlIFhNTC0xLjAgbmFtZXNwYWNlCgpUaHUgRmViIDE1IDE2OjUzOjIwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aEludGVybmFscy5oOiBleHBvcnRlZCBhIGZldyBheGlzIGZ1bmN0aW9ucwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgdGhlIGRvYwoKVGh1IEZlYiAxNSAxNTo1NzoxNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gRGFuaWVsIHZhbiBCYWxlbiBmb3IgT3BlbkJTRAoJICBhbmQgYnVtcGVkIHZlcnNpb24gdG8gMi4zLjEKCSogSFRNTHRyZWUuYyByZXN1bHQvSFRNTC9kb2MzLmh0bSByZXN1bHQvSFRNTC93aXJlZC5odG1sOiB0aGUKCSAgYXR0ZW1wdCB0byBmaW5kIGF1dG9jbG9zaW5nIHdhcyBzaW1wbHkgYnJva2VuLCByZW1vdmVkIGl0LAoJICB1cGRhdGVkIHRoZSBleGFtcGxlcywgdGhpcyBpcyBiZXR0ZXIKCldlZCBGZWIgMTQgMTE6MzU6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGhhc2guW2NoXTogYWRkZWQgUGFvbG8gQ2FzYXJpbmkgcGF0Y2ggdG8gcHJvdmlkZSBEZWxldGUgZnJvbQoJICBoYXNoIGZ1bmN0aW9ubmFsaXRpZXMuCgkqIGRvYy9odG1sLyogOiByZWJ1aWxkIHRoZSBkb2MKClR1ZSBGZWIgMTMgMTg6MDE6NDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL3Rlc3RzL2NoYXB0ZXJzcHJlZm9sOiBidWdmaXhlcyBvbiBvcmRlciBhbmQKCSAgb24gcHJlZGljYXRlCgkqIEhUTUxwYXJzZXIuW2NoXSBIVE1MdHJlZS5jIHJlc3VsdC9IVE1ML2RvYzMuaHRtLmVycgoJICByZXN1bHQvSFRNTC9kb2MzLmh0bS5zYXggcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogc29tZXRpbWVzIG9uZQoJICByZWFsbHkgd2FudCB0byBoYXZlIHRhZ3MgY2xvc2VkIG9uIG91dHB1dCBldmVuIGlmIHdlIGFjY2VwdAoJICB1bmNsb3NlZCBvbmVzIG9uIGlucHV0CgpNb24gRmViIDEyIDE4OjMzOjIwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBvdWNoIGRvbid0IGZyZWUgTlVMTCwgcmFyZSBjYXNlIGZpeGVkCgkqIHRyZWUuYzogZG9uJ3QgY29hbGVzY2UgdGV4dCBub2RlcyBpZiB0aGV5IGRvbid0IGhhdmUgdGhlCgkgIHNhbWUgYmVoYXZpb3VyIHdydCBlc2NhcGluZyBvbiBvdXRwdXQKClN1biBGZWIgMTEgMjE6MTU6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHNtYWxsIGZpeHVwCgkqIFNBWC5jOiBkb24ndCB3YXJuIG9uIGVtcHR5IG5hbWVzcGFjZXMuCgpUaHUgRmViICA4IDExOjI4OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBSRUFETUU6IGEgYml0IG9mIGNsZWFudXAKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuMy4wIHJlbGVhc2UKClRodSBGZWIgIDggMTA6Mzc6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGhhc2guW2NoXTogYWRkZWQgYSBmaXJzdCB2ZXJzaW9uIG9mIHhtbEhhc2hTaXplKCkKCSogdmFsaWQuYzogYW5vdGhlciBidWcgZml4IGZyb20gR2FyeSBQZW5uaW5ndG9uCgpXZWQgRmViICA3IDE5OjIyOjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBjb3VwbGUgb2YgYnVnIGZpeGVzIHBvaW50ZWQgYnkgR2FyeSBQZW5uaW5ndG9uCgkqIEhUTUx0cmVlLmM6ICNpZiAwIGNsZWFudXAKClR1ZSBGZWIgIDYgMTQ6MDI6NTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHN0YXJ0ZWQgcHJvZmlsaW5nIFhTTFQsIGFkZGVkIHhtbFhQYXRoTm9kZVNldEFkZFVuaXF1ZSgpCgkgIHdoaWNoIHJlbW92ZXMgYSB0aW1lIGNvbnN1bWluZyBjaGVjayBvZiB4bWxYUGF0aE5vZGVTZXRBZGQoKQoJICBhbmQgdXNlIGl0IGluIHBsYWNlcyB3aGVyZSB3ZSBhcmUgc3VyZSB0byBub3QgYnJlYWsgdW5pY2l0eQoKTW9uIEZlYiAgNSAxODo1MTozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGZpeGVzIGZvdW5kIGZyb20gWFNMVAoJKiB0cmVlLmM6IHByZXNlcnZlIG5vZGUtPm5hbWUgc3BlY2lhbCB2YWx1ZXMgd2hlbiBjb3B5aW5nIG5vZGVzLgoJKiBwYXJzZXJJbnRlcm5hbHMuW2NoXSBwYXJzZXIuW2NoXSBTQVguYyA6IGFkZGVkIGEgbW9kZSB3aGVyZQoJICBleHRlcm5hbCBzdWJzZXQgYXJlIGZldGNoZWQgd2hlbiBhdmFpbGFibGUgYnV0IHdpdGhvdXQgZnVsbAoJICB2YWxpZGF0aW9uLiBBZGRlZCB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlLCBuZWVkIGEgZnVuY3Rpb24uCgkqIEhUTUx0cmVlLmM6IGFkZCBzdXBwb3J0IGZvciB4bWxTdHJpbmdUZXh0Tm9lbmMgZm9yIFhTTHQgSFRNTAoJICBvdXRwdXQgd2l0aCBlbmNvZGluZyBkaXNhYmxlZC4KClNhdCBGZWIgIDMgMDk6NTA6MjkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGlPLmM6IEhhcnJ5IEJsdW5kZWxsIHBvaW50ZWQgb3V0IHRoYXQgeG1sQ2hlY2tGaWxlbmFtZQoJICB4bWxDaGVja0ZpbGVuYW1lIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20geG1sRmlsZU9wZW5XCgkgIGFuZCB4bWxHemZpbGVPcGVuVwoKRnJpIEZlYiAgMiAxODowNDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLmM6IHJld3JpdGUgb2YgeG1sTm9ybWFsaXplVVJJUGF0aCBmcm9tIFBhdWwgRC4gU21pdGgKCSogdGVzdC9VUkkvc21pdGgudXJpIHJlc3VsdC9VUkkvc21pdGgudXJpIE1ha2VmaWxlLmFtOgoJICBhZGRlZCB0aGUgbmV3IHRlc3RzIGZvciBVUkkgbm9ybWFsaXphdGlvbgoJKiB0ZXN0VVJJLmM6IGZpeGVkIHN0b29waWQgYnVncwoJKiByZXN1bHQvVkMvT25lSUQzIHJlc3VsdC9WQy9VbmlxdWVFbGVtZW50VHlwZURlY2xhcmF0aW9uOgoJICB0aGUgVVJJIGluIHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgbm93IHByb3Blcmx5IG5vcm1hbGl6ZWQKCkZyaSBGZWIgIDIgMDk6MTg6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5jOiBhcHBsaWVkIE1hcmMgU2FuZmFjb24ncyBwYXRjaCBmb3IgeG1sTm9ybWFsaXplVVJJUGF0aAoKVGh1IEZlYiAgMSAwNToyODo1NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBudW1iZXIgb2YgcHJvYmxlbXMgaW4gWFBBVEhfWFNMVF9UUkVFIHByb2Nlc3NpbmcKCldlZCBKYW4gMzEgMjE6NDU6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIG1vZCBvcGVyYXRvcgoKV2VkIEphbiAzMSAxNjo1MDo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIHhtbFN0cmNhdCBkb2MKCSogdHJlZS5jOiAyIGZpeGVzIGZvcm0gQW5kZXJzIENhcmxzb24gZm9yIGNvcHlpbmcgbm9kZXMgYW5kCgkgIHRyZWVzLgoKV2VkIEphbiAzMSAxNDoxOToxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyByZXN1bHQvWFBhdGgvdGVzdHMvY2hhcHRlcnNiYXNlCgkgIHJlc3VsdC9YUGF0aC90ZXN0cy9zaW1wbGViYXNlOiBmaXhlZCBYUGF0aCBub2RlKCkgCgkqIHRyZWUuYzogc21hbGwgZml4IGluIHhtbE5ld05zKCkKCSogTWFrZWZpbGUuYW06IHJlbW92ZWQgZXh0cmFuZW91cyB4bWwyQ29uZi5zaCBydWxlCgpTdW4gSmFuIDI4IDA4OjM3OjAzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gZXhhbXBsZS9NYWtlZmlsZS5hbToKCSAgQ2hhbmdlZCB0aGUgbGlicmFyeSBuYW1lLCBpbiBvcmRlciB0byBnZXQgbGlieG1sLWRldmVsIGFuZAoJICBsaWJ4bWwyLWRldmVsIHRvIGNvZXhpc3Qgb24gYSBzaW5nbGUgc3lzdGVtCgkqIHhtbC1jb25maWcuMSB4bWwtY29uZmlnLmluIHhtbENvbmYuc2guaW46IHJlbmFtZWQKCSogeG1sMi1jb25maWcuMSB4bWwyLWNvbmZpZy5pbiB4bWwyQ29uZi5zaC5pbjogbmV3IGZpbGVzCgpTYXQgSmFuIDI3IDE5OjU4OjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gbGlieG1sLTIuMC5wYy5pbjogc3RhcnRlZCB3b3JraW5nIG9uIGdldHRpbmcKCSAgbGlieG1sMi1kZXZlbCBpbnN0YWxsYWJsZSBpbiAvLyBhcyBsaWJ4bWwtZGV2ZWwuCgpTYXQgSmFuIDI3IDE4OjQ5OjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGVkIG1ha2UgcmVidWlsZCBpbiBkb2MKCSogZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2NzCgpGcmkgSmFuIDI2IDEwOjMwOjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gQmpvcm4gUmVlc2Ugb24geG1sQnVmZmVyQ0NhdAoKVGh1IEphbiAyNSAxOToyMjoyNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBwYWluZnVsIHdvcmsgdG8gZ2V0CgkgIHRoZSBIVE1MIGRvYyB0byBnbyBpbnRvIHRoZSAtZGV2ZWwgUlBNIC4uLgoJKiBhY2xvY2FsLm00IGNvbmZpZy5oLmluOiBzb21lIHVwZGF0ZXMgZHVlIHRvIGF1dG8qIG1hZ2ljCgpUaHUgSmFuIDI1IDE5OjExOjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5oOiBhZGRlZCBhIGhvb2sgaW4gdGhlIGNvbnRleHQgc3RydWN0dXJlIGFsbG93aW5nIHRvCgkgIGxpbmsgdG8gZXh0cmEgc3VwcG9ydCwgbmVlZGVkIGZvciBYU0xUCgpUaHUgSmFuIDI1IDEzOjM0OjExIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IGFkZGVkIHhtbFhQYXRoQ21wTm9kZXMsIGNoYW5nZWQKCSAgeG1sWFB0ckNtcFBvaW50cyB0byB1c2UgaXQuCgkqIHByb3BhZ2F0ZWQgdGhlIGZvbGxvd2luZyBwYXRjaCBmcm9tIEFsZWphbmRybyBGb3Jlcm8KCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oIHhtbElPLmM6IGFwcGxpZWQgZnVydGhlciBzdWdnZXN0aW9ucwoJICBmcm9tIElnb3IgWmxhdGtvdmljIDxpZ29yekBkaWFsdXAubmFjYW1hci5kZT4gYW5kIGNsZWFudXAKCSogZXhhbXBsZS9nam9icmVhZC5jOiBmaXhlZCB3YXJuaW5ncywgbm93IHRoYXQgaXQgYnVpbGRzCgpXZWQgSmFuIDI0IDIwOjI3OjI4IENPVCAyMDAxIEFsZWphbmRybyBGb3Jlcm8gPGJhY2h1ZUBiYWNodWUuY29tPgoKICAgICAgICAqIHhtbElPLmMgKHhtbEZpbGVPcGVuLCB4bWxGaWxlT3BlblcpOiBSZW1vdmVkIHVubmVjZXNhcnkgY2hlY2tzLgoKICAgICAgICAqIHhtbElPLmMgKHhtbENoZWNrRmlsZW5hbWUpOiBGdW5jdGlvbiBhZGRlZCB0byBrbm93IHdoZXRoZXIgYSBnaXZlbgogICAgICAgICAgZmlsZW5hbWUgcG9pbnRzIHRvIGEgdmFsaWQgZmlsZSAobm90IGEgZGlyZWN0b3J5KS4KICAgICAgICAqIHhtbElPLmMgKHhtbEZpbGVPcGVuLCB4bWxGaWxlT3BlblcsIHhtbEd6ZmlsZU9wZW4sIHhtbEd6ZmlsZU9wZW5XKToKICAgICAgICAgIEFkZGVkIGNhbGxzIHRvIHhtbENoZWNrRmlsZW5hbWVEaXIuCgogICAgICAgICogeG1sSU8uYyAoeG1sR3pmaWxlT3BlbiwgeG1sR3pmaWxlT3BlblcsIHhtbEZkT3BlbiwgeG1sRmRPcGVuVyk6IFBhc3MKICAgICAgICAgIGBwYXRoJyAocmF0aGVyIHRoYW4gYGZpbGVuYW1lJykgYXMgdGhlIHBhcmFtZXRlciB0byBnem9wZW4gYW5kIG9wZW4uCgpUdWUgSmFuIDIzIDE2OjI2OjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBwcm9ibGVtIHdpdGggRVhUUkFfRElTVAoKTW9uIEphbiAyMiAyMzo0MjoxNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogZmluYWxseSBmb3VuZCB0aGUgdHJpY2sKCSAgdG8gYnVpbGQgdGhlIGV4YW1wbGUsIGkuZS4gYWRkICIuIiBpbiBTVUJESVJTIGJlZm9yZSBleGFtcGxlCgkgIGluIHRoZSBsaXN0IDxncmluLz4KCk1vbiBKYW4gMjIgMTY6MzA6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB3aXRoIGFuIFhTTFQgc2VjdGlvbiwgcmVtb3ZlZCBwb2ludGVyIHRvCgkgIFczQyBDVlMgYmFzZS4KCk1vbiBKYW4gMjIgMTE6NDM6MjEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHdoZW4gY29weWluZyBhIFhTTFQgdHJlZSBvYmplY3QgdGVoIHRyZWUgbmVlZCB0byBiZSBjb3BpZWQKCSAgdG9vLCBhbmQgZGVhbGxvY2F0aW9uIG5lZWQgdG8gb2NjdXIgdGhlIHNhbWUgd2F5LgoKTW9uIEphbiAyMiAxMDozNTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGhJbnRlcm5hbHMuaCB4cGF0aC5bY2hdIGRlYnVnWE1MLmM6IGFkZGVkIHRoZSBYUEFUSF9YU0xUX1RSRUUKCSAgdHlwZSBjb3JyZXBvbmRpbmcgdG8gYW4gWFNMVCByZXN1bHQgdHJlZSBmcmFnbWVudC4gU2hhcmUgbW9zdAoJICBvZiB0aGUgZGF0YSBmb3JtYXQgd2l0aCBub2RlIHNldCwgYXMgd2VsbCBhcyBvcGVyYXRvcnMuCgkqIEhUTUx0cmVlLmM6IGFkZGVkIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBkb2N0eXBlIG91dHB1dAoJICB3aGUgdGhpcyBvbmUgaXMgbm90IHByZXNlbnQgaW5pdGlhbGx5LgoJKiB0cmVlLmM6IG1ha2Ugc3VyZSB0YWh0IHRoZSBwYXJlbnQgYW5kIGRvYyBwb2ludGVycyBhcmUgcHJvcGVybHkKCSAgc2V0IHdoZW4gY29weWluZyBhdHRyaWJ1dGVzIChsaXN0cykuCgpTdW4gSmFuIDIxIDEwOjQ3OjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBodG1sVHJlZS5bY2hdIHhtbElPLmg6IGV4cG9ydGVkIGh0bWxEb2NDb250ZW50RHVtcE91dHB1dAoKRnJpIEphbiAxOSAxODoxNTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogc2VlbXMgSSBmaW5hbGx5IGtpbGxlZCB0aGF0IHVnbHkgcGF0aCBldmFsdWF0aW9uCgkgIGNvbnRleHQgYnVnICh0YWdnZWQgOTk5OSBpbiBjYXNlIGlzIGlzIHdyb25nKQoKRnJpIEphbiAxOSAwNjozMDozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXSB4cGF0aEludGVybmFscy5oOiBhZGRlZCB4bWxYUGF0aFJlZ2lzdGVyVmFyaWFibGVMb29rdXAoKQoJICBmb3IgWFNMVAoKVGh1IEphbiAxOCAxNjoxOTo0NyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogR2FyeSBQZW5uaW5ndG9uIDxHYXJ5LlBlbm5pbmd0b25AdWsuc3VuLmNvbT4gZml4CgkgIGZvciB4bWxHemZpbGVPcGVuKCkgYnVnCgpUaHUgSmFuIDE4IDEzOjExOjUwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiByZW1vdmVkIGFuIGVycm9yIGZvdW5kIGJ5IFhTTFQgdXNhZ2UKCSogdHJlZS5jIHBhcnNlckludGVybmFscy5oOiB1c2UgYSBwcmVkZWZpbmVkIHN0YXRpYyBzdHJpbmcKCSAgZm9yIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMsIGF2b2lkIGZyZWVpbmcgdGhlbSBpbiB4bWxGcmVlTm9kZSwKCSAgZXhwb3J0ZWQgdGhlIHN0cmluZyBuYW1lIGluIHBhcnNlckludGVybmFscy5oIGFuZCBhZGRlZAoJICBhbm90aGVyIHZhbHVlIHRvIGRpc2FibGUgZW5jb2RpbmcgYXQgb3V0cHV0IChmb3IgWFNMVCksCgkgIGdhaW4gbWVtb3J5LCB0aW1lLgoKV2VkIEphbiAxNyAwOToxNToxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvUkVBRE1FLk1TRGV2IHdpbjMyL2xpYnhtbDIvbGlieG1sMl9hLmRzcAoJICB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfc28uZHNwOiBuZXcgbWFrZWZpbGVzIGFuZCB1cGRhdGUKCSAgcHJvdmlkZWQgYnkgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgpUdWUgSmFuIDE2IDE4OjI0OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmMgOiB4bWxTYXZlRmlsZSwgeG1sU2F2ZUZpbGVFbmMsIGFwcGxpZWQgcGF0Y2ggZnJvbSAKCSAgR2FyeSBQZW5uaW5ndG9uCgpNb24gSmFuIDE1IDIwOjI0OjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgY29tYXByaXNpb24gb2YgdmFsdWVzIGFuZCBub2RlbGlzdHMsCgkgIG5lZWQgdG8gY29tcGFyZSBub2RlbGlzdCBzdGlsbCAuLi4KCSogZGVidWdYTUwuYzogYXZvaWRlZCBhIHBvc3NpYmxlIGNvcmUgZHVtcAoJKiBIVE1McGFyc2VyLmM6IGNsZWFudXAKCSogbmFub2h0dHAuYzogY29udHJpYnV0ZWQgZml4LgoJKiB0cmVlLmM6IGZpeGVzIGluIHByb3BlcnRpZXMgaGFuZGxpbmcgYWRkZWQgeG1sU2V0TnNQcm9wCgkgIG5lZWRlZCBieSBsaWJ4c2x0CgkqIHhwYXRoSW50ZXJuYWxzLmg6IGV4cG9ydGVkIHhtbFhQYXRoQm9vbGVhbkZ1bmN0aW9uLCBhZGRlZCBhIAoJICBjb21tZW50CgkqIFRPRE86IHVwZGF0ZWQKClNhdCBKYW4gIDYgMjI6MDU6MDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIEJqb3JuIFJlZXNlIG9wdGltaXphdGlvbgoJICBwYXRjaAoKU2F0IEphbiAgNiAxOToxMzoyNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvIG1ha2UgY2hlY2sgZnJvbSBNYXJ0aW4gVmlkbmVyCgpUaHUgSmFuICA0IDE5OjA3OjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjIuMTEKCSogZG9jL2h0bWwvKjogcmVidWlsZCB0aGUgSFRNTCBmaWxlcwoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkCgpUaHUgSmFuICA0IDE0OjA5OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZwoJKiB2YWxpZC5jOiBhcHBsaWVkICJQYXVsIEQuIFNtaXRoIiA8cGF1c21pdGhAbm9ydGVsbmV0d29ya3MuY29tPgoJICBwYXRjaGVzIHJlbGF0ZWQgdG8gdmFsaWRhdGlvbiBvZiBhbiBYSW5jbHVkZSBwcm9jZXNzaW5nIHJlc3VsdAoJKiBUT0RPOiB1cGRhdGVkCgpUaHUgSmFuICA0IDExOjQ2OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbmNvZGluZy5jIHhtbElPLmM6IEZpeGluZyB0aGUgcHJvYmxlbSByZXBvcnRlZCBieSBNYXJjIFNhbmZhY29uCgkgIG9uIGxhcmdlIGZpbGVzCgpXZWQgSmFuICAzIDIxOjUxOjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBmaXhlZCB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbSBkb2MKCldlZCBKYW4gIDMgMTg6NTY6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogaHRtbENoZWNrUGFyYWdyYXBoIHRvIGNoZWNrIGh0bWxPbWl0dGVkRGVmYXVsdFZhbHVlLAoJICByZXBvcnRlZCBieSBKb25hcyBCb3Jnc3Ry9m0KCSogbmFub2h0dHAuYzogQXBwbGllZCBCam9ybiBSZWVzZScgSVBWNiBmaXJzdCBwYXRjaAoKV2VkIEphbiAgMyAxNjoxOTozOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdGVzdFhQYXRoLmMgeHBhdGguYzogZml4aW5nIHRoZSBYUGF0aCB1bmlvbiBleHByZXNzaW9ucyBwcm9ibGVtCgkgIHJlcG9ydGVkIGJ5ICBNYXJ0aW4gVmlkbmVyIDxtYXJ0aW5AYXJ0YXgua2FybGluLm1mZi5jdW5pLmN6PgoKV2VkIEphbiAgMyAxNDoyMjozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5jOiBNYWRlIGlzIHNvIGlmIHRoZSBmaWxlIG5hbWUgaXMgIi0iIGlzIHdpbGwgcmVhZCBmb3JtCgkgIHN0YW5kYXJkIGlucHV0LiBTdmVuIEhlaW5pY2tlICA8c3ZlbkB6ZW4ub3JnPgoJKiB0cmVlLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIGdyb3dpbmcgYnVmZmVyCgkqIHRyZWUuaDogZml4ZWQgdGhlIGNvbW1lbnQgb2YgdGhlIG5vZGUgdHlwZXMgZm9sbG93aW5nIGFuZGVyc2NhCgkgIGNvbW1lbnQKCSogVE9ETzogdXBkYXRlZAoKV2VkIERlYyAyNyAxMjozNTo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF06IGFkZGVkIGEgd2F5IHRvIGF2b2lkIGFkZGluZyBhdXRvbWF0aWNhbGx5CgkgIG9taXR0ZWQgdGFncy4gaHRtbEhhbmRsZU9taXR0ZWRFbGVtKCkgYWxsb3dzIHRvIGNoYW5nZSB0aGUKCSAgZGVmYXVsdCBoYW5kbGluZy4KCSogdHJlZS5bY2hdIHhtbGxpbnQuYzogYWRkZWQgeG1sRG9jRHVtcEZvcm1hdE1lbW9yeSgpIGFuZCAKCSAgeG1sRG9jRHVtcEZvcm1hdE1lbW9yeUVuYygpLCB1c2VzIG1lbW9yeSBmdW5jdGlvbnMgZm9yIG91dHB1dAoJICBvZiB4bWxsaW50IHRvbyB3aGVuIHVzaW5nIC0tbWVtb3J5IGZsYWcsIGFkZGVkIGEgbWVtb3J5IHRlc3QKCSAgc3VpdGUgYXQgdGhlIE1ha2VmaWxlIGxldmVsLgoJKiB4cGF0aEludGVybmFscy5oIHhwYXRoLltjaF0geHBvaW50ZXIuYzogZml4ZWQgcHJvYmxlbXMKCSAgd2l0aCBuYW1lc3BhY2UgdXNlIHdoZW4gZW5jb3VudGVyaW5nIFFOYW1lcyBpbiBYUGF0aCBldmFsYXRpb24sCgkgIGFkZGVkIHhtbG5zKCkgc2NoZW1lIGluIFhQb2ludGVyLgoJKiBuYW5vZnRwLmMgOiBpbmNvcnBvcmF0ZWQgYSBmaXgKCSogcGFyc2VyLmMgeG1sSU8uYzogZml4ZWQgcHJvYmxlbXMgcmFpc2VkIHdpdGggZW5jb2Rpbmcgd2hlbiB1c2luZwoJICB0aGUgbWVtb3J5IEkvTwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xvc2VkIGJ1ZyAyNTkzNCByZXBvcnRlZCBieSAKCSAgdG9yc3Rlbi5sYW5kc2Nob2ZmQGlubm9taW5hdGUuZGUKCSogVE9ETzogdXBkYXRlZAoKU2F0IE5vdiAyNSAxMTo0NjoyNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4gZG9jL2h0bWwvKiBkb2MveG1sLmh0bWw6IG1hZGUgYSAyLjIuOSByZWxlYXNlCgkgIG9uIGEgbm9uLXVwZGF0ZWQgdHJlZSA6LSgsIG1hZGUgYSAyLjIuMTAgcmVsZWFzZSB0byBjb3JyZWN0IHRoZQoJICBzaXR1YXRpb24KClNhdCBOb3YgMjUgMTA6NDE6MzcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYyBwYXJzZXIuW2NoXSB0cmVlLltjaF0geG1sSU8uW2NoXSB4bWxsaW50LmMgeHBhdGguYwoJICBwYXJzZXJJbnRlcm5hbHMuaCB2bXMvYnVpbGRfbGlieG1sLmNvbSB2bXMvY29uZmlnLnZtcyBNYWtlZmlsZS5hbToKCSAgaW50ZWdyYXRlZCBhIHNldCBvZiBPcGVuVk1TIGNoYW5nZXMgZnJvbSBIb3dhcmQgVGF5bG9yCgkgIDxIb3dhcmQuVGF5bG9yQHBhY29hc3QuY29tPgoKU2F0IE5vdiAyNSAwMToyMTowMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geG1sSU8uYzogYWRkZWQgeG1sRG9jRHVtcE1lbW9yeUVuYygpIGZyb20gSm9obiBLcm9sbAoJKiBlcnJvci5jOiBhcHBsaWVkIGZpeCBzdWdnZXN0ZWQgYnkgIkxlbyBEYXZpZHNvbiIgPGxlb0BveC5jb21wc29jLm5ldD4KClNhdCBOb3YgMjUgMDA6MjQ6NDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBzb21lIGZpeGVzIG9uIGF1dG8tb3BlbiBvZiBodG1sL2hlYWQvYm9keQoJKiBlbmNvZGluZy5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIGVycm9yIG9uIHNvbWUgZ2NjIGVudgoJKiB4cGF0aC5jIHhwb2ludGVyLltjaF0geHBhdGhJbnRlcm5hbHMuaDogaW1wcm92ZWQgdGhlCgkgIFhQb2ludGVyIGltcGxlbWVudGF0aW9uCgkqIHRlc3QvWFBhdGgveHB0ci9zdHJwb2ludCB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2UzOiBhZGRlZAoJICByZWxhdGVkIFhQb2ludGVyIHRlc3RzIGFuZCBhc3NvY2lhdGVkIHJlc3VsdHMKCkZyaSBOb3YgMjQgMTQ6MDE6NDQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGR0ZC5odG1sIGRvYy94bWwuaHRtbDogZm9sbG93aW5nIGEgc2hvcnQgc3RlcCBieSBzdGVwCgkgIGd1aWRhbmNlIG9uIElSQyB0byBoZWxwIG1hY2llaiB3aXRoIERURHMgSSBzdGFydGVkIGEgc21hbGwKCSAgcGFnZSBvbiB0aGUgc3ViamVjdC4KCkZyaSBOb3YgMTcgMTc6Mjg6MDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBoYW5kbGluZyBvZiBicm9rZW4gY2hhcnJlZnMKCSogeG1sbWVtb3J5LmggbGlieG1sMi5kc3AgaW5jbHVkZS93aW4zMmNvbmZpZy5oOiByZXBvcnRpbmcgV2luZG93cwoJICBwYXRjaGVzCgpNb24gTm92IDEzIDE5OjE3OjIwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qIDogcmVidWlsdCB0aGUgZG9jcyBhZnRlciBhZGRpbmcKCSAgeGluY2x1ZGUgYW5kIHVwZGF0ZWQgcGFnZSBmb3IgMi4yLjcgYW5kIDIuMi44CgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMi44CgpNb24gTm92IDEzIDEyOjM5OjM4IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIHRoZSBjb25kaXRpb25hbAoJICBzZWN0aW9uIHByb2Nlc3NpbmcgZml4IGZyb20gSm9uYXRoYW4gUCBTcHJpbmdlcgoJICA8am9uYXRoYW4uc3ByaW5nZXIyQGd0ZS5uZXQ+CgkqIHhtbHZlcnNpb24uaC5pbiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZHNwIDogVXBkYXRlZCBNUwoJICBwcm9qZWN0IGZpbGUsIGZpeGVkIGljb252IGRlZmF1bHQgbm9uIHN1cHBvcnQKCSogeHBhdGguYzogZml4ZWQgdGhlIHByb2JsZW0gb2YgZXZhbHVhdGluZyByZWxhdGl2ZSBleHByZXNzaW9ucwoJICB3aGVuIGEgbm9kZSBjb250ZXh0IGlzIHByb3ZpZGVkLgoKU3VuIE5vdiAxMiAxNjozMToxOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IGZpeGVkIGdjYyAyLjk1IG5ldyB3YXJuaW5ncwoJKiBTQVguYzogZml4ZWQgYSBzdHVwaWQgYnVnCgkqIHRyZWUuYzogZml4ZWQgYSBmb3JtYXR0aW5nIHByb2JsZW0gd2hlbiByb3VuZC10cmlwcGluZwoJICBmcm9tL3RvIG1lbW9yeQoJKiB4aW5jbHVkZS5jOiBjaGFzZWQgbWVtbGVhaywgZml4ZWQgYSBiYXNlIHByb2JsZW0KCSogeHBvaW50ZXIuYzogYWRkZWQgeG1sWFB0ckJ1aWxkUmFuZ2VOb2RlTGlzdCgpLCBmaW5pc2hlZCA/IAoJICB4bWxYUHRyQnVpbGROb2RlTGlzdCgpCgkqIFRPRE86IHVwZGF0ZWQKCSogTWFrZWZpbGUuYW0gdGVzdC9YSW5jbHVkZS9kb2NzIHRlc3QvWEluY2x1ZGUvZW50cyByZXN1bHQvWEluY2x1ZGU6CgkgIGFkZGluZyBhIGZpcnN0IHNtYWxsIHNldCBvZiByZWdyZXNzaW9uIHRlc3RzIGZvciBYSW5jbHVkZQoKVHVlIE5vdiAgNyAxNToxMTozNCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5bY2hdOiBhcHBsaWVkIFdheW5lIERhdmlzb24gcGF0Y2hlcyB0byBhY2Nlc3MKCSAgdGhlIFdXVy1BdXRob3JpemF0aW9uIGhlYWRlci4KCSogcGFyc2VyLmM6IENsb3NlZCBCdWcjMzA4NDc6IFByb2JsZW1zIHdoZW4gc3dpdGNoaW5nIGVuY29kaW5nCgkgIGluIHNob3J0IGZpbGVzIGJ5IGFwcGx5aW5nIFNpbW9uIEJlcmcncyBwYXRjaC4KCSogdmFsaWQuYzogZml4ZWQgYSB2YWxpZGF0aW9uIHByb2JsZW0KCSogaGFzaC5jIHBhcnNlci5oIHBhcnNlckludGVybmFscy5oIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRyZWUuaAoJICB4bWxlcnJvci5oIHhtbG1lbW9yeS5oIHhtbHZlcnNpb24uaC5pbjogYXBwbGllZCBhIERMTCBwYXRjaCBmcm9tCgkgIFdheW5lIERhdmlzb24KCSogeHBvaW50ZXIuW2NoXTogYWRkZWQgZmlyc3QgdmVyc2lvbiBvZiB4bWxYUHRyQnVpbGROb2RlTGlzdCgpCgkgIG5lZWQgdG8gYmUgZXh0ZW5kZWQgdG8gbm9uIGZ1bGwgbm9kZXMgc2VsZWN0aW9ucy4KCSogeGluY2x1ZGUuYzogc3RhcnRzIHRvIHdvcmsgZGVjZW50bHkKCk1vbiBOb3YgIDYgMTc6MjI6NDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhpbmNsdWRlLltjaF0geG1sbGludC5jIGNvbmZpZ3VyZS5pbiB2YWxpZC5jCgkgIGRlYnVnWE1MLmMgeG1sdmVyc2lvbi5oLmluOiBTdGFydGVkIGFkZGluZyBYSW5jbHVkZSBzdXBwb3J0LAoJICB0aGlzIGlzIGEgbmV3IHhtbGxpbnQgb3B0aW9uCgkqIHRyZWUuYyB4cGF0aC5jOiBhcHBsaWVkIFRPTSBwYXRjaGVzIGZvciBYUGF0aAoJKiB4cG9pbnRlci5jOiBmaXhlZCBhIGNvdXBsZSBvZiBlcnJvcnMuCgkqIHVyaS5jOiBhZGRlZCBhbiBlc2NhcGluZyBmdW5jdGlvbiBuZWVkZWQgZm9yIHhpbmNsdWRlCgkqIHRlc3RYUGF0aC5jIGhhc2guYyBIVE1MdHJlZS5jOiBtaW5vciBjbGVhbnVwcyByYWlzZWQgYnkKCSAgbmV3IHdhcm5pbmcgZnJvbSBSSDcwIGdjYydzIHZlcnNpb24KClR1ZSBPY3QgMzEgMTQ6MTQ6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBsb29wIG9uIGludmFsaWQgY2hhciBpbiBzY3JpcHRzCgkqIHBhcnNlci5jOiB1cGRhdGUgdG8gZGVzY3JpcHRpb24gb2YgeG1sSU9QYXJzZURURCgpCgkqIGxpYnhtbC5tNCB4bWx2ZXJzaW9uLmguaW46IGNoYW5nZXMgY29udHJpYnV0ZWQgYnkKCSAgTWljaGFlbCBTY2htZWluZyA8bS5zY2htZWluZ0BpbnRlcm5ldC1mYWN0b3J5LmRlPgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi4yLjcKCSogTWFrZWZpbGUuYW06IHRyeWluZyB0byBhdm9pZCAgY29uZmlnLmggYW5kIGFjY29uZmlnLmgKCSAgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWIKCSogY29uZmlndXJlLmluOiByZWxlYXNlZCAyLjIuNwoKTW9uIE9jdCAzMCAxNzowODoxMCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gZGVidWdYTUwuYyBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5jOiBEZXByZWNhdGVkIFBpJ3MKCSAgbGlrZSBuYW1lc3BhY2VzIGZvciBnb29kLiBVbmlmaWVkIHhtbE5zIGFuZCB4bWxOb2RlIHNvbWV3aGF0LgoKTW9uIE9jdCAzMCAxNjoyNjo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sSU9QYXJzZURURCgpCgkqIHhwb2ludGVyLmM6IGFkZGVkIHN1cHBvcnQgZm9yIHRoZSAyIGV4dHJhIHBhcmFtZXRlcnMgb2YKCSAgc3RyaW5nLXJhbmdlLCBmaXhlZCBhIHN0b29waWQgZXJyb3Igd2hlbiAnMCcgd2FzIHByZXNlbnQKCSAgaW4gWFBvaW50ZXIgZXhwcmVzc2lvbnMKCSogdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlMiByZXN1bHQvWFBhdGgveHB0ci9zdHJyYW5nZTI6IGFkZGVkCgkgIHRlc3RzdWl0ZSBmb3IgdGhlIGFib3ZlCgpNb24gT2N0IDMwIDEwOjI2OjQzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBpbXByb3ZlZCBwYWNrYWdlIGRlc2NyaXB0aW9ucwoKU3VuIE9jdCAyOSAxOTowMzoxMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHhwYXRoSW50ZXJuYWxzLmg6IGFwcGxpZWQgYSBsYXJnZSBjbGVhbmluZyBwYXRjaAoJICBmcm9tIFRPTSA8cHRpdHRvbUBmcmVlLmZyPiwgaXQgYWxzbyBhZGQgbmFtZXNwYWNlIHN1cHBvcnQKCSAgZm9yIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZXMgcmVnaXN0cmF0aW9uLgoKU3VuIE9jdCAyOSAxODo1MTo0NiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogV2F5bmUgRGF2aXNvbidzIHBhdGNoIGZpeGluZyB4bWxCdWlsZFVSSSgpCgkqIE1ha2VmaWxlLm1pbmd3OiBXYXluZSBEYXZpc29uJ3MgdXBkYXRlIGFkZGluZyBoYXNoLmMKClN1biBPY3QgMjkgMTg6Mzg6MTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIHJvb3QgZXZhbHVhdGlvbiBwcm9ibGVtcwoJKiBIVE1McGFyc2VyLmMgcmVzdWx0L0hUTUwvZG9jMy5odG06IGZpeGVkIHRoZSBwcm9ibGVtIG9mIG5vbgoJICBpZ25vcmFibGUgc3BhY2VzIHdpdGggPGI+IDxib2xkPiA8ZW0+CgkqIHRyZWUuYzogZml4ZWQgYSBsb29wIGluIHhtbFNlYXJjaE5zQnlIcmVmKCkKCkZyaSBPY3QgMjcgMTg6NTc6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgYW5vdGhlciBYUGF0aCBwYXRjaCBmcm9tIFRPTSAKCSogeHBhdGguYyBpbmNsdWRlL21ha2VmaWxlLmFtOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2ggZnJvbSAKCSAgY2hpbmFAdGhld3JpdHRlbndvcmQuY29tIChjbGVhbnVwIG9uIElSSVgpLgoKRnJpIE9jdCAyNyAxMzo0NToyOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy4xOiByZWNlaXZlZCBhIGZpeGVkIHZlcnNpb24gZnJvbSBGcmVkcmlrIEhhbGxlbmJlcmcKCSAgPGhhbGxvbkBseXNhdG9yLmxpdS5zZT4KClRodSBPY3QgMjYgMTY6MDU6MjUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgdGV4dFhQYXRoLmMgeHBhdGhJbnRlcm5hbHMuaDogYXBwbGllZCBUT00gPHB0aXR0b21AZnJlZS5mcj4KCSAgY2xlYW51cCBwYXRjaCBmb3IgWFBhdGgKCldlZCBPY3QgMjUgMjE6MzE6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhdGNoZWQgdG8gcmVkaXJyZWN0IGFsbCAib3V0IG9mIGNvbnRleHQiIGVycm9yIG1lc3NhZ2VzIHRvCgkgIGEgcmVjb25maWd1cmFibGUgcm91dGluZS4gVGhlIGNoYW5nZXMgYXJlOgoJKiB4bWxlcnJvci5oIDogYWRkZWQgdGhlIGV4cG9ydCBvZiBhbiBlcnJvciBjb250ZXh0IHR5cGUgKHZvaWQgKikKCSAgYW4gZXJyb3IgaGFuZGxlciB0eXBlIHhtbEdlbmVyaWNFcnJvckZ1bmMgdGhlcmUgaXMgYW4gaW50ZXJmYWNlCgkgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmModm9pZCAqY3R4LCB4bWxHZW5lcmljRXJyb3JGdW5jIGhhbmRsZXIpOwoJICB0byByZXNldCB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSBhbmQgaXRzIGFyZ3VtZW50CgkgIChieSBkZWZhdWx0IGl0J3MgZXF1aXZhbGVudCB0byByZXNwZWN0aXZlbHkgZnByaW50ZiBhbmQgc3RkZXJyLgogICAgICAgICogYWxsIHRoZSBjIGZpbGVzOiBhbGwgd2lsZCBhY2Nlc3NlcyB0byBzdGRlcnIgb3Igc3Rkb3V0IHdpdGhpbgoJICB0aGUgbGlicmFyeSBoYXZlIGJlZW4gcmVwbGFjZWQgdG8gY2FsbHMgdG8gdGhlIGhhbmRsZXIuCgpXZWQgT2N0IDI1IDE1OjI3OjE5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2UgMi4yLjYKCSogeHBhdGguW2NoXSB4cG9pbnRlci5jIHhwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhwYXRoSW50ZXJuYWxzLmgKCSAgZXhwb3J0aW5nIHRoZSBpbm5lciBmdW5jdGlvbnMgb2YgeHBhdGggZm9yIGV4dGVuc2lvbiBtb2R1bGVzCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2MKCldlZCBPY3QgMjUgMTI6NDg6NTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmMgOiBhcHBsaWVkIFdheW5lIEhUVFAgY2xlYW51cCBwYXRjaAoJKiB0cmVlLltjaF06IGFwcGxpZWQgVE9NIDxwdGl0dG9tQGZyZWUuZnI+IGZvciB4bWxOb2RlU2V0QmFzZSgpCgkgIGFuZCB4bWxOb2RlU2V0U3BhY2VQcmVzZXJ2ZSgpCgpXZWQgT2N0IDI1IDEyOjExOjAzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBjbG9zaW5nIGJ1ZyAjMjkyNjAKClR1ZSBPY3QgMjQgMTg6NDk6MzQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGhhc2guW2NoXSBkZWJ1Z1hNTC5jOiBleHBhbmRlZC9lbmhhbmNlZCB0aGUgQVBJLCBhZGRlZAoJICBtdWx0aWtleSB0dXBsZXMsIG1hZGUgaGFzaCBzdHJ1Y3R1cmUgb3BhcXVlCgkqIHZhbGlkLltjaF06IG1vdmVkIGVsZW1lbnRzLCBhdHRyaWJ1dGVzLCBub3RhdGlvbnMgZGVjYWxhcmF0aW9ucwoJICBhcyB3ZWxsIGFzIElEIGFuZCByZWZzIHRvIGhhc2ggdGFibGVzLgoJKiBlbnRpdGllcy5jOiBoYXNoIGNsZWFudXAKCSogeG1sbWVtb3J5LmM6IGZpeGVkIGEgZHVtcCBwcm9ibGVtIGluIGRlYnVnIG1vZGUKCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogcHJvYmxlbSBwYXNzaW5nIGluIERFU1RESVI9IHZhbHVlcyBwYXRjaAoJICBmcm9tIE1hcmMgQ2hyaXN0ZW5zZW4gPG1hcmNAY2FsZGVyYXN5c3RlbXMuY29tPgoJKiBuYW5vaHR0cC5jOiByZW1vdmVkIGRlYnVnZ2luZyByZW1haW5zCgkqIEhUTUxwYXJzZXIuYzogdGhlIGJvZ3VzIHRhZyBzaG91bGQgYmUgaWdub3JlZCAoV2F5bmUpCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogZml4aW5nIGEgbnVtYmVyIG9mIHByb2JsZW1zIHdpdGggdGhlCgkgIG1hY3JvcyBpbiB0aGUgKnBhcnNlci5jIGZpbGVzIChXYXluZSkuCgkqIEhUTUxwYXJzZXIuYzogY2xvc2UgdGhlIHByZXZpb3VzIG9wdGlvbiB3aGVuIG9wZW5pbmcgYSBuZXcgb25lCgkgIChNYXJjIFNhbmZhY29uKS4KCSogcmVzdWx0L0hUTUwvKjogdXBkYXRlZCB0aGUgSFRNTCByZXN1bHRzIGFjY29yZGluZ2x5CgpTdW4gT2N0IDIyIDE4OjM5OjE5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5bY2hdIHhwYXRoLltjaF0gaGFzaC5bY2hdIGRlYnVnWE1MLmMgdHJlZS5oOiBhZGRlZC9oYWNrZWQKCSAgaGFzaCB0YWJsZXMgZnJvbSBCam9ybiBSZWVzZSA8YnJlZXNlQG1haWwxLnN0b2ZhbmV0LmRrPi4gU3dpdGNoZWQKCSAgWFBhdGggZnVuY3Rpb25zIGFuZCBYTUwgZW50aXRpZXMgdGFibGUgdG8gdGhlbS4gTW9yZSB0byBjb21lLi4uCgkqIHhtbElPLmM6IGZpeGVkIGxpYnhtbCBjbG9zaW5nIEZJTEVzIGl0IGRpZG4ndCBvcGVuLgoKU3VuIE9jdCAyMiAxMzo1OTo1MCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjb2FsZXNjZSBhZGphY2VudCB0ZXh0IG5vZGVzCgkqIHZhbGlkLmM6IGhhbmRsaW5nIG9mIGJsYW5rIG5vZGVzIGluIERUZCB2YWxpZGF0aW9uIChyYWlzZWQKCSAgYnkgcHJvYmxlbXMgd2l0aCBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbikuCgkqIG5hbm9odHRwLmM6IGNoYW5naW5nIGJlaGF2aW91ciBvbiBIVFRQIHdyaXRlIHN0dWZmLgoJKiBIVE1MdHJlZS5jOiBmb3JjZWQgYm9keSBhbmQgaHRtbCB0byBiZSBleHBsaWNpdGVseSBjbG9zZWQuCgkqIHhwYXRoLmg6IGV4cG9ydGVkIG1vcmUgWFBhdGggZnVuY3Rpb25zLgoKU3VuIE9jdCAxNSAyMjoyODozMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKICAgICAgICAqIFJlbGVhc2Ugb2YgMi4yLjUKCSogeHBvaW50ZXIuYzogcmFuZ2UoKSByYW5nZS1pbnNpZGUgYW5kIG90aGVyIGhlbHBlciBmdW5jdGlvbnMKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHBlcmYgcHJvYmxlbSByYWlzZWQgYnkgcm9sZkBwb2ludHNtYW4uZGUKClN1biBPY3QgMTUgMTY6MjE6MjcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jOiBIVE1MIGF0dHJpYnV0ZXMgbmVlZCBub3JtYWxpemF0aW9uIHRvbyAoQmpvcm4gUmVlc2UpCgkqIEhUTUxwYXJzZXIuW2NoXTogYWRkZGVkIGh0bWxJc1NjcmlwdEF0dHJpYnV0ZSgpCgpTdW4gT2N0IDE1IDEzOjE4OjM2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKjogcmVidWlsdCBkb2NzIHByZXBhcmluZyBmb3IgMi4yLjUgcmVsZWFzZSwgYWRkZWQgVVJJCgkgIGFuZCBYUG9pbnRlciBtb2R1bGVzCgpTdW4gT2N0IDE1IDEyOjEzOjMwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguaDogY2xvc2VkICMyNTEwNwoKU3VuIE9jdCAxNSAxMjowNjoxNiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFNBWC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggY2RhdGEgcmVwb3J0aW5nCgkqIFNBWHJlc3VsdC8qIDogdXBkYXRlZAoKU3VuIE9jdCAxNSAxMjowMDoyNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgdGVzdC93YXAueG1sIHJlc3VsdC9ub2VudC93YXAueG1sIHJlc3VsdC93YXAueG1sOgoJICBDbG9zZWQgYnVnICMyNzQ5OSwgYWRkZWQgdG8gcmVncmVzc2lvbiB0ZXN0cwoJKiBUT0RPOiB1cGRhdGVkCgpTdW4gT2N0IDE1IDAxOjM0OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuW2NoXSBTQVguYyB0ZXN0SFRNTC5jIHRyZWUuYzogZml4ZWQgSFRNTAoJICBzdXBwb3J0IGZvciBTQ1JJUFQgYW5kIFNUWUxFIHdpdGggaGVscCBmcm9tIEJqb3JuIFJlZXNlCgkqIHRlc3QvSFRNTC8qIHJlc3VsdC9IVE1MLyo6IGFkZGVkIHNpbXBsZSB0ZXN0Y2FzZSBhbmQgdXBkYXRlZAoJICB0aGUgZXhpc3Rpbmcgb25lcy4KCSAgCkZyaSBPY3QgMTMgMTg6MjQ6MzEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgeHBvaW50ZXIuYzogWFBvaW50ZXIgcmVvcmRlciBvZiByYW5nZXMgc3RhcnQvZW5kIGFuZAoJICBzdHJpbmctcmFuZ2UgZm9yIGVtcHR5IHN0cmluZ3MKCSogdGVzdC9YUGF0aC9kb2NzL3N0ciB0ZXN0L1hQYXRoL3hwdHIvY2hhcHRlcnNyYW5nZQoJICB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2U6IGF1Z21lbnRlZCB0aGUgWFBvaW50ZXIgdGVzdHN1aXRlCgpGcmkgT2N0IDEzIDEyOjIxOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgZG9jL3htbG1lbS5odG1sOiBhZGRlZCBhIG1vZHVsZSBkZXNjcmliaW5nIG1lbW9yeQoJICBpbnRlcmZhY2VzIGFuZCB1c2UsIHVwZGF0ZWQgdGhlIG1haW4gcGFnZS4KCkZyaSBPY3QgMTMgMDE6MjM6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbElPLmM6IFdheW5lIERhdmlzb24gV2luMzIgcGF0Y2gKCSAgbmFub2Z0cCBjb2RlIHdvcmsgb24gV2luZG93cyB0b28gbm93CgpGcmkgT2N0IDEzIDAwOjU0OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBtb3ZlZCBzb21lIGRlYnVnIGZ1bmN0aW9ucyB0byB4cGF0aCBjb3JlCgkqIHhwb2ludGVyLmM6IGltcGxlbWVudGVkIHN0cmluZy1yYW5nZSgpIGF0IGxlYXN0IGEgZ29vZCBmaXJzdCB2ZXJzaW9uCgkqIHRlc3QvWFBhdGgvZG9jcy9zdHIgdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlCgkgIHJlc3VsdC9YUGF0aC94cHRyL3N0cnJhbmdlOiB0aGUgc3RyaW5nLXJhbmdlKCkgdGVzdHMKClRodSBPY3QgMTIgMTA6MDI6NTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS93aW4zMmNvbmZpZy5oCgkgIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBmaXhlZCBwcm9ibGVtcyByZXBvcnRlZCBieSBXYXluZSBEYXZpc29uCgkgIGFuZCBtYWtlIGRpc3RjaGVjawoKVGh1IE9jdCAxMiAwMTo0NDowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogYWRkZWQgeG1sTmFub0hUVFBUaW1lb3V0KGludCBkZWxheSksIHJlbW92ZWQgYSBidWcKCSAgeG1sTmFub0hUVFBNZXRob2Qgb24gaW5wdXQgTWltZVR5cGUgVG9ueSBMYW0gPFRvbnkuTGFtQGVuZy5zdW4uY29tPgoJKiB4cG9pbnRlci5jOiBzbGlnaHQgZXh0ZW5zaW9uIG9mIHhtbFhQdHJMb2NhdGlvblNldE1lcmdlCgpUaHUgT2N0IDEyIDAxOjM3OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sdmVyc2lvbi5oLmluIDoKCSAgcGF0Y2ggZm9yIHNvY2tsZW5fdCBkZXRlY3Rpb24gYnkKCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPgoKV2VkIE9jdCAxMSAxNzo1Mzo1NyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIHZhbGlkLmMgeG1sbGludC5jOiBGaXhlZCBhIGZldyBwb3N0dmFsaWRhdGlvbiBidWdzCgkgIGFuZCBhZGRlZCBhIC0tZHRkdmFsaWQgb3B0aW9uIHRvIHhtbGxpbnQgdXNlZCB0byB0ZXN0IGl0CgpXZWQgT2N0IDExIDE1OjAxOjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLjEgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGFkZGluZyBhIG1hbiBwYWdlIGZvcgoJICB4bWwtY29uZmlnIGJ5IEZyZWRyaWsgSGFsbGVuYmVyZyA8aGFsbG9uQGx5c2F0b3IubGl1LnNlPgoKV2VkIE9jdCAxMSAxMjo0MTozMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSB4cG9pbnRlci5bY2hdOiB3b3JrZWQgb24gWFBhdGggZnVuY3Rpb25zIGFuZCB2YXJpYWJsZQoJICBoYW5kbGluZ3MgKHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBjbGVhbnVwKQoKV2VkIE9jdCAxMSAwMTo0Njo0NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIGluY2x1ZGUvbWFrZWZpbGUuYW06IGFkZGluZyBYUG9pbnRlcgoJICBhbmQgWFB0cnRlc3RzIHRhcmdldAoJKiB4cG9pbnRlci5bY2hdIDogbmV3IGZpbGVzIGZvciBYUG9pbnRlciBzdXBwb3J0CgkqIHRlc3QvWFBhdGgveHB0ciByZXN1bHQvWFBhdGgveHB0cjogYWRkZWQgWFBvaW50ZXIgdGVzdHN1aXRlIGFuZAoJICBtb3JlIFhQYXRoIHRlc3RzCgpXZWQgT2N0IDExIDAxOjIzOjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkLCB2ZXJ5IGJyb2tlbiwgbWFrZSBkaXN0Y2hlY2sgd29ya3MgYWdhaW4KCldlZCBPY3QgMTEgMDI6NTM6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1vcmUgd29yayB0b3dhcmQgMi4yLjUsIGludGVncmF0ZWQgYSBudW1iZXIgb2YgcGF0Y2hlcwoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gd2luMzJjb25maWcuaC5pbjogdHJ5aW5nIHRvIGNsZWFudXAKCSAgbWFrZSBkaXN0Y2hlY2sgLi4uLiBodWggLi4uCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBuZXcgZGlyZWN0b3J5CgkgIGZvciBpbmNsdWRlcwoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndyB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcAoJICB1cGRhdGVkIHRlaCBtYWtlZmlsZXMgYW5kIGluc3RydWN0aW9ucyBmb3IgV0lOMzIKCSogeHBhdGguYzogc21hbGwgZml4ZXMKCSogdGVzdC9YUGF0aC8gcmVzdWx0cy9YUGF0aDogdXBkYXRlZCB0aGUgdGVzdGNhc2VzIGFuZCByZXN1bHRzCgkqIEhUTUxwYXJzZXIuYyBuYW5vaHR0cC5jIHRlc3RYUGF0aC5jOiBpbmNvcnBvcmF0ZWQgcHJvdmlkZWQgb3IKCSAgc3VnZ2VzdGVkIHBhdGNoZXMKCSogdmFsaWQuYzogZml4ZWQgYW4gSUQgYnVnCgpNb24gT2N0ICA5IDE0OjI4OjU2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBtb3ZlZCB4bWwtZXJyb3IuaCB0byB4bWxlcnJvci5oOiBzZWVtcyB0aGlzIGFsbG93ZWQgdG8gYnlwYXNzCgkgIHRoZSBhdXRvbWFrZSBidWcgd2hlcmUgd3JvbmcgZGVwZW5kYW5jaWVzIHdlcmUgZ2VuZXJhdGVkLgoJKiB4cGF0aC5bY2hdOiB3b3JrZWQgb24gWFBvaW50ZXIKCkZyaSBPY3QgIDYgMTI6NTg6MDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogMi4yLjUsIHNoaXAgdGhlIGluY2x1ZGUgaW4gYW4KCSAgaW5jbHVkZS9saWJ4bWwgc3ViZGlyZWN0b3J5LCB1c2Ugc3ltbGlua3Mgd2hlbiB1c2luZyBDVlMKCSogdGVzdFNBWC5jOiBmaXhlZCBzbWFsbCBidWcKCSogdGVzdFhQYXRoLmM6IGNoYW5nZWQgdGhlIHdheSB0ZXN0ZmlsZXMgYXJlIHBhcnNlZAoJKiBkZWJ1Z1hNTC5jOiBzYW1lIGtpbmQgb2YgY2xlYW51cCB3aGVuIHBhcnNpbmcgYW4gYXJndW1lbnQgZXhwcmVzc2lvbgoJICBYUGF0aC9YUG9pbnRlcnMgY2FuIGhhdmUgYmxhbmtzIGVtYmVkZGVkCgkqIHhwYXRoLltjaF06IG1vcmUgY2xlYW51cCwgcmVvcmdzIGZvciBYUG9pbnRlciB3b3JrCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZml4ZWQgd3JvbmcgaW5jbHVkZQoJKiB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcDogV2luZG93cyBzdHVmZgoKVGh1IE9jdCAgNSAxODoxMzoxNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuYyB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBnb3QgcGlzc2VkIGJ5IHNvbWUgbmFzdHluZXNzCgkgIGluIHRoZSBYUGF0aCBlbmdpbmUsIHJld3JvdGUgbGFyZ2UgcGFydHMgb2YgaXQsIG5vdyBpdCdzIGZhcgoJICBjbGVhbmVyIGFuZCBpbiBzeW5jIHdpdGggdGhlIFJFQyBub3QgYW4gb2xkIFdELiBGaXhlZCBhIHBhcnNpbmcKCSAgcHJvYmxlbSBpbiB0aGUgaW50ZXJhY3RpdmUgWE1MIHNoZWxsIGZvdW5kIHdoZW4gdGVzdGluZyBYUGF0aC4KCldlZCBPY3QgIDQgMTU6MjU6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmMgeHBhdGguW2NoXTogTW9yZSB3b3JrIG9uIFhQYXRoL1hwb2ludGVyLAoJICBpbmNvcnBvcmF0ZWQgIihUT00pIiA8cHRpdHRvbUBmcmVlLmZyPiBwYXRjaGVzIHJlYnVpbHQgdGhlIFhQYXRoCgkgIGV4YW1wbGVzIHdpdGggdGhlIGV4dHJhIHRlc3QKCldlZCBPY3QgIDQgMTQ6Mzk6MDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHhtbElPLmMgeG1sSU8uaDogZml4ZWQgYnVnIDI2NjUwLCBhbmQgaW1wcm92ZWQKCSAgdGhlIGdsb2JhbCBpbml0IGZ1bmN0aW9uLgoKVHVlIE9jdCAgMyAxMToyODo1MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBEb29oaGgsIGF0dHJpYnV0ZSBuYW1lIHBhcnNpbmcgd2FzIHN0aWxsIGNhc2UKCSAgc2Vuc2l0aXZlICEgRml4ZWQgdGhpcyAuLi4KCSogcmVzdWx0L0hUTUwvKiA6IHVwZGF0ZWQgdGhlIHRlc3RzIHJlc3VsdHMgYWNjb3JkaW5nbHkKCk1vbiBPY3QgIDIgMjM6NDc6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0gZGVidWdYTUwuYyB0ZXN0WFBhdGguYzogZml4ZWQgdGhlIFhQYXRoIGV2YWx1YXRpb24KCSAgZW5naW5lLCBzaG91bGQgYmUgZmFyIG1vcmUgc3RhYmxlLCBpbmNvcnBvcmF0ZWQgYSBuZXcgdmVyc2lvbiBvZgoJICBwcmVjZWRpbmcvZm9sbG93aW5nIGF4aXMsIG5lZWQgdGVzdGluZwogICAgICAgICogdXJpLmM6IGZpeGVkIGZpbGU6Ly8vYzovYS9iL2MgcHJvYmxlbQoJKiB0ZXN0L1hQYXRoL3Rlc3RzL2lkc2ltcGxlOiBhdWdtZW50ZWQgdGhlIFhQYXRoIHRlc3RzCgpTdW4gT2N0ICAxIDIyOjMzOjAwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiByZWJ1aWxkaW5nIGRvY3MgZm9yIDIuMi40IHJlbGVhc2UKClN1biBPY3QgIDEgMjI6MTY6MzMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMi40CgkqIHBhcnNlci5bY2hdOiBhZGRlZCB4bWxTdHJFcXVhbCgpCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBwYXJzZXIuYwoJICB0cmVlLmMgdmFsaWQuYyB4bGluay5jIHhwYXRoLmM6IGNvbnZlcnRlZCBhbGwgIXhtbFN0cmNtcCB0bwoJICB1c2UgeG1sU3RyRXF1YWwgaW5zdGVhZAoJKiBUT0RPOiB1cGRhdGVkCgkqIGFkZGVkIGFuIFhQYXRoIHRlc3QKClN1biBPY3QgIDEgMjA6MTk6MzkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgaHRtbFN0YXJ0Q2xvc2VJbmRleGluaXRpYWxpemVkIGluaXQKCSogZW50aXRpZXMuaDogZXhwb3J0ZWQgeG1sSW5pdGlhbGl6ZVByZWRlZmluZWRFbnRpdGllcwoJKiBwYXJzZXIuW2NoXSA6IGFkZGVkIHhtbEluaXRQYXJzZXIoKQoJKiBwYXJzZXJJbnRlcm5hbHMuaCA6IGhhZCB0byBleHBvcnQgaHRtbEluaXRBdXRvQ2xvc2UoKQoKU3VuIE9jdCAgMSAxNjoyODoyMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSA6IGZpeGVkIHNvbWUgc2VyaW91cyBYUGF0aCBQcmVkaWNhdGUgZXZhbHVhdGlvbgoJICBwcm9ibGVtcwoJKiBNYWtlZmlsZS5hbSA6IGFkZGVkIFhQYXRoIHJlZ3Jlc3Npb24gdGVzdHMgdG8gbm9ybWFsIHRlc3RzCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBsb2NhbCBwYXRocywgY2xlYW51cAoJKiBwYXJzZXIuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggbGFyZ2UgQ0RhdGEgc2VjdGlvbnMKClNhdCBTZXAgMzAgMTY6MzU6NTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiB4bWwtY29uZmlnLmluOiBwYXRjaCBmcm9tICJCZW4gVGF5bG9yIgoJICA8c29sN3g4NkBob3RtYWlsLmNvbT4gZm9yIHNvbGFyaXMgc2hhcmVkIGxpYnMgbG9va3VwCgoyMDAwLTA5LTMwICBNYXJ0aW4gQmF1bGlnICA8YmF1bGlnQHN1c2UuZGU+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiBQcm92aWRlIHBrZy1jb25maWcgc2NyaXB0LgoKCSogY29uZmlndXJlLmluOiBDcmVhdGUgdGhlIGxpYnhtbC0yLjAucGMgc2NyaXB0IGZyb20gdGhlCglsaWJ4bWwtMi4wLnBjLmluIHRlbXBsYXRlcy4KCSogTWFrZWZpbGUuYW0gKHBrZ2NvbmZpZ19EQVRBKTogSW5zdGFsbCB0aGUgbGlieG1sLTIuMC5wYwoJc2NyaXB0IGluIGAkKGxpYmRpcikvcGtnY29uZmlnJy4KCk1vbiBTZXAgMjUgMTY6MjM6NDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyB0cmVlLmMgdHJlZS5oOiBBdm9pZGluZyBhIGZldyB3YXJuaW5nCgkgIHdoZW4gY29tcGlsaW5nIHdpdGggTVNDCgpTdW4gU2VwIDI0IDIwOjMyOjUyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBwYXRjaCBmb3Igbm9ybWFsaXplLXN0cmluZygpIHN1YnN0cmluZy1iZWZvcmUoKSwKCSAgc3Vic3RyaW5nLWFmdGVyKCkgYW5kIHRyYW5zbGF0ZSgpIGZ1bmN0aW9ucyBmcm9tIEJqb3JuIFJlZXNlCgkgIDxicmVlc2VAbWFpbDEuc3RvZmFuZXQuZGs+CgkqIGxpYnhtbC5tNCBNYWtlZmlsZS5hbTogYWRkZWQgbGlieG1sLm00IGZyb20gRGViaWFuID8KCSAgRnJlZHJpayBIYWxsZW5iZXJnIDxoYWxsb25AbHlzYXRvci5saXUuc2U+CgkqIFRPRE86IHVwZGF0ZWQKClN1biBTZXAgMjQgMTA6MDA6NDkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbiBuYW5vZnRwLmMgbmFub2h0dHAuYzogdHJheWluZyB0byB3b3JrIG91dCB0aGUKCSAgcHJvYmxlbSBvZiBzb2NrbGVuX3QgYmVpbmcgdW5kZWZpbmVkIG9uIGEgbnVtYmVyIG9mIHBsYXRmb3JtcwoJKiBkZWJ1Z1hNTC5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gd2hlbiB3aXRob3V0IHNucHJpbnRmCgpTYXQgU2VwIDIzIDEyOjE5OjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgdXJpLmM6IEFub3RoZXIgcGF0Y2ggZnJvbSBXYXluZSBEYXZpc29uLCBjb3JyZWN0aW5nCgkgIGFuIFVSSSBidWcgYW5kIGEgZml4IGZvciB0aGUgY29udHJvbC1jaGFyYWN0ZXItaW5kdWNlZCBpbmZpbml0ZSBsb29wCgkqIG5hbm9odHRwLmM6IHByZXZlbnRpdmUgZml4IGZvciBjb21waWxpbmcgb24gV0lOMzIKCkZyaSBTZXAgMjIgMTg6MDY6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbGludC5jOiBjbG9zaW5nIGJ1ZyAjMjUwMDAKCkZyaSBTZXAgMjIgMTQ6MTc6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLmggdHJlZS5oOiBtYWRlIHhtbE5vZGVEdW1wKCkgYW5kIHhtbE5vZGVEdW1wT3V0cHV0KCkgcHVibGljCgkqIHBhcnNlci5bY2hdIG5hbm9odHRwLmMgSFRNTHRyZWUuYyBIVE1McGFyc2VyLmMgdHJlZS5jOiBhcHBsaWVkIGFuZAoJICBtb2RpZmllZCBzbGlnaHRseSBXYXluZSBEYXZpc29uIHBhdGNoIGFkZGluZyB4bWxTdHJjYXNlY21wIGFuZAoJICByZWxhdGVkIGZ1bmN0aW9uLCBmaXhpbmcgeG1sU3RybmNtcCgpLCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwCgkqIHJlc3VsdC9IVE1ML2VudGl0aWVzLmh0bWwuc2F4OiB1cGRhdGluZyByZXN1bHQKClR1ZSBTZXAgMTkgMTQ6MjA6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jOiBhcHBsaWVkIHBhdGNoIGZvciBVUkkgZXNjYXBpbmcgZnJvbSBXYXluZSBEYXZpc29uCgkgIDx3YXluZWRAYmxvcmYubmV0PgoJKiB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgSFRNTHBhcnNlci5jOiBtZW1zZXQgY2hlY2tzIHBhdGNoZXMKCSAgZnJvbSBEZW5pcyBCYXJiaWVyIDxiYXJiaWVyQGltYWNzLnBvbHl0ZWNobmlxdWUuZnI+CgkqIEhUTUxwYXJzZXIuYzogVVRGOCBjaGFyYWN0ZXJzIGluIEhUTUwgdGFnLWF0dHJpYnV0ZSB2YWx1ZXMKCSAgcGF0Y2ggZnJvbSBXYXluZSBEYXZpc29uCgpTdW4gU2VwIDE3IDE4OjM3OjAzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkIHdpdGggbmV3IHJlbGVhc2VzLCBhZGRpbmcgImhvdyB0byBoZWxwIgoKU3VuIFNlcCAxNyAxNzo1ODozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMgZGVidWdYTUwuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdmFsaWQuYyB4cGF0aC5jOgoJICByZW1vdmVkIGEgZmV3IHdhcm5pbmdzIGluIHBlZGFudGljIG1vZGUgLi4uCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jOiBtb3ZlZCBlbmNvZGluZyBzd2l0Y2hpbmcgZnVuY3Rpb24KCSAgdG8gcGFyc2VySW50ZXJuYWxzLmMKCSogY29uZmlndXJlLmluLCBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHJlbGVhc2VkIDIuMi4zCgpTYXQgU2VwIDE2IDIwOjEyOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IHNldCBjdHh0LT5lcnJObyBiZWZvcmUgY2FsbGluZyB0aGUKCSAgZXJyb3Igb3Igd2FybmluZyBoYW5kbGVycwoKV2VkIFNlcCAxMyAyMjowMzoxOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmMgTWFrZWZpbGUuYW06CgkgIGNyZWF0ZWQgYSBuZXcgbW9kdWxlIHBhcnNlckludGVybmFscy5jLCBtb3ZlZCBtb3N0IG9mIHRoZQoJICBjb2RlIHNoYXJlZCBieSB0aGUgdmFyaW91cyBwYXJzZXJzIHRoZXJlLCBhcyB3ZWxsIGFzCgkgIGRlcHJlY2F0ZWQgIGNvZGUgZnJvbSBwYXJzZXIuYy4gTW9yZSBjbGVhbnVwIG9mIHBhcnNlci5jCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBVUkkgaXMgTlVMTAoJKiB2YWxpZC5jOiBzcGVlZHVwIHdoZW4gbG9va2luZyBmb3IgYW4gYXR0cmlidXRlIGRlY2xhcmF0aW9uCgpTdW4gU2VwIDEwIDE3OjUzOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0cmVlLmMgU0FYLmMgcGFyc2VyLmMgZW50aXRpZXMuYyBkZWJ1Z1hNTC5jOiBmaW5pc2hlZAoJICB0aGUgY2xlYW51cCBvZiB0aGUgY29tcHV0YXRpb24gb2YgVVJJIHJlZmVyZW5jZXMgd2hlbiBzZWVraW5nCgkgIGV4dGVybmFsIGVudGl0aWVzLiBUaGUgVVJJIHJlZmVyZW5jZSBzdHJpbmcgYW5kIHRoZSByZXN1bHRpbmcKCSAgVVJJIGFyZSBib3RoIHN0b3JlZCBub3cuCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYyB2YWxpZC5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhwYXRoLmM6CgkgIGxhcmdlIHMobilwcmludGYgY2hlY2tzIGFuZCBjbGVhbnVwIGZyb20gRGVuaXMgQmFyYmllcgoJICA8YmFyYmllckBpbWFjcy5wb2x5dGVjaG5pcXVlLmZyPgoJKiB4bWx2ZXJzaW9uLmguaW4gdHJlZS5oOiBjb3VwbGUgb2YgU0dNTCBkZWNsYXJhdGlvbnMgZm9yIGEKCSAgcG9zc2libGUgZG9jYm9vayBtb2R1bGUuCgkqIHJlc3VsdC9WQy8gOiBhIGNvdXBsZSBvZiB0ZXN0IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byB0aGUgY2hhbmdlCgkgIG9mIHRoZSBlbnRpdGllcyBVUkkKClN1biBTZXAgMTAgMTU6NTk6NTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oOiBhZGRlZCBhIF9wcml2YXRlIGZpZWxkIGZvciBsaW5raW5nIHVzZXIncyBkYXRhCgpTdW4gU2VwIDEwIDE1OjE0OjQzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuaDogZGVtYWNyb2lmaWVkIG1vc3Qgb2YgdGhlIElTX1hYWAoJICB0aGUgZ2FpbiBpbiBzaXplIGlzIHNpZ25pZmljYW50IHNvIC4uLgoKRnJpIFNlcCAgOCAyMDo0ODoyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYzogY2FzZXMgd2hlcmUgbG9va2luZyB1cCBlbnRpdGllcyB3aXRoIGRvYz09TlVMTAoJICBjb3ZlcmVkCgpUdWUgU2VwICA1IDEyOjQxOjE1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoCgkqIE1ha2VmaWxlLmluIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IHVwZGF0ZWQgVVJJIHRlc3RzCgpNb24gU2VwICA0IDEzOjAxOjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0ZXN0VXJpLmM6IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaGVzCgkqIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IGZpcnN0IHNldCBvZiB0ZXN0cy9yZXN1bHRzCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBVUkl0ZXN0IGFuZCBpbmNsdWRlZCB0aGVuaW4gIm1ha2UgdGVzdHMiCgpTdW4gU2VwICAzIDE5OjE5OjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW46IGNsb3NlZCBidWcgMjI5NDEKClRodSBBdWcgMzEgMTY6NTU6NTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxpby5odG1sOiBhZGRlZCBkb2MgYW5kIGV4YW1wbGUgZm9yIGVudGl0eSBsb2FkZXIKCSAgcmVkZWZpbml0aW9uLgoKVGh1IEF1ZyAzMSAxNDo1OToyOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGlvLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBhIGRvYyBvbiB0aGUgSS9PIG1lY2hhbmlzbQoJICB1c2VkIGJ5IGxpYnhtbAoKVHVlIEF1ZyAyOSAyMDoyMjo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIGJ1ZyBvbiBpbnZhbGlkIG9udGVudCBjaGFyYWN0ZXJzIGFuZCB3aGVuIHVzaW5nCgkgIHB1c2guCgkqIHhtbGxpbnQuYzogZml4ZWQgeG1sbGludCBlbmRsaW5nIG9mIGVycm9ycyBpbiBwdXNoIG1vZGUKClR1ZSBBdWcgMjkgMTE6MjQ6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0SFRNTC5jOiBhcHBsaWVkIHR3byBuZXcgcGF0Y2hlcyBmcm9tCgkgIFdheW5lIERhdmlzb24gPHdheW5lZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgkqIHJlc3VsdC9IVE1MLyouc2F4OiByZWdlbmVyYXRlZCBIVE1MIFNBWCBvdXRwdXQKCSogcGFyc2VyLmM6IG1vcmUgY2xlYW51cC4KCk1vbiBBdWcgMjggMTE6NTg6MTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSB0ZXN0SFRNTC5jOiBhcHBsaWVkIHRoZSBzZWNvbmQgc2V0IG9mCgkgIHBhdGNoZXMgZnJvbSBXYXluZSBEYXZpc29uIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwKCSAgYWRkaW5nIGh0bWxFbmNvZGVFbnRpdGllcygpCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYW4gaWdub3JhYmxlIHdoaXRlIHNwYWNlIGRldGVjdGlvbiBidWcKCSAgb2NjdXJpbmcgd2hlbiBwYXJzaW5nIHdpdGggU0FYIG9ubHkKCSogcmVzdWx0L0hUTUwvKi5zYXg6IHVwZGF0ZWQgc2luY2UgdGhlIG91dHB1dCBpcyBub3cgSFRNTAoJICBlbmNvZGVkLi4uCgpNb24gQXVnIDI4IDAwOjM4OjMxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF06IGFwcGxpZWQgc29tZSBvZiBXYXluZSBEYXZpc29uCgkgIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBwYXRjaGVzCgpTdW4gQXVnIDI3IDIyOjE0OjAxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYyB0cmVlLmMgZGVidWdYTUwuYzogZml4ZWQgYm9ndXMgYmVoYXZpb3VyIHdoZW4gYW4KCSAgdW5kZWNsYXJlZCBuYW1lc3BhY2UgcHJlZml4IHdhcyB1c2VkLCBhZGRlZCBhIHdhcm5pbmcuCgkgIENsZWFuZWQgdXAgc3VwcG9ydCB3LnIudC4gZW50aXRpZXMsIHNwaWxsaW5nIG91dCBhIHdhcm5pbmcKCSAgYW5kIGJlaW5nIHBlZGFudGljIG9uIGxvb2t1cHMuCgkqIHRlc3Qvd2FybmluZy9lbnQ5IDogYWRkZWQgdGVzdGNhc2UgZm9yIHByZXZpb3VzIGV4YW1wbGUuCgkqIFRPRE86IHVwZGF0ZWQKCSogcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmM6IGNoYW5nZWQgdGhlIHdheSBuYW1lcyBhcmUgcGFyc2VkCgkgIG5vdyBhbGxvdyBpbmZpbml0ZSBzaXplIGFuZCBkZWNyZWFzZSBwZW5hbHR5IGZvciBub3JtYWwgdXNlCgkqIHBhcnNlci5jOiBTdGFydGVkIGEgYmlnIGNsZWFudXAvY2hlY2sgb2YgdGhlIHBhcnNlciBjb2RlLAoJICBmaXhlZCBzb21lIG9mIHRoZSBtb3N0IHRvcnR1b3VzIGVudGl0eSBjb2RlLCBzcG90dGVkIGNvZGUKCSAgdW51c2VkIGFueW1vcmUKCSogdGVzdC8qOiBhZGRlZCB0ZXN0cyBmb3IgdmVyeSBsb25nIG5hbWVzIGFuZCByZWxhdGVkIG5hc3R5CgkgIHRoaW5ncy4KClNhdCBBdWcgMjYgMjM6MzE6MDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9lbmNvZGluZy5odG1sOiBhZGRlZCBlbmNvZGluZyBhbGlhc2VzIGRvYwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZXMKCSogZW5jb2RpbmcuW2NoXTogYWRkZWQgRW5jb2RpbmdBbGlhc2VzIGZ1bmN0aW9ucwoJKiBlbnRpdGllcy5bY2hdIHZhbGlkLltjaF0gZGVidWdYTUwuYzogcmVtb3ZlZCB0d28gc2VyaW91cwoJICBib3R0bGVuZWNrIGFmZmVjdGluZyBsYXJnZSBEVERzIGxpa2UgRG9jYm9vawoJKiBwYXJzZXIuW2NoXSB4bWxsaW50LmM6IGFkZGVkIGEgcGVkYW50aWMgb3B0aW9uLCB3aWxsIGJlCgkgIHVzZWZ1bAoJKiBTQVguYzogcmVkZWZpbml0aW9uIG9mIGVudGl0aWVzIGlzIHJlcG9ydGVkIGluIHBlZGFudGljIG1vZGUKCSogdGVzdEhUTUwuYzogdW5pbml0aWFsaXplZCB3YXJuaW5nIGZyb20gZ2NjCgkqIHVyaS5jOiBmaXhlZCBhIGNvdXBsZSBvZiBidWdzCgkqIFRPRE86IGFkZGVkIGlzc3VlIHJhaXNlZCBieSBNaWNoYWVsCgpXZWQgQXVnIDIzIDAxOjUwOjUxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbDogcHJvcGFnYXRlZCBNYXJ0aW4gRHVlcnN0IHN1Z2dlc3Rpb25zCgpXZWQgQXVnIDIzIDAwOjIzOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgQnVnIzIxNTUyOiBsaWJ4bWwgZmFpbHMgdG8gZGVjb2RlICZhbXA7CgkqIHVyaS5jIHRlc3RVcmkuYyBwYXRjaGVzLCBieSBNYXJjIFNhbmZhY29uICgxIGxlZnQpCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogSFRNTC9lbmNvZGluZyBwdXNoIHByb2JsZW1zIHJlcG9ydGVkaQoJICBieSBXYXluZSBEYXZpc29uCgpTdW4gQXVnIDIwIDE3OjAzOjM4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogc21hbGwgY2xlYW51cAoJKiBUT0RPOiB1cGRhdGVkCgpTYXQgQXVnIDE5IDIyOjU3OjAyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBhbiBvbGQgVkMgdGVzdGNhc2UgYW5kIHVwZGF0ZWQgdGl0bGUueG1sIGVudGl0eQoKU2F0IEF1ZyAxOSAyMTowMjowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIFNBWC5jIHRyZWUuYyBIVE1MdHJlZS5oIHJlc3VsdC9IVE1MLyo6IHdvcmsKCSAgZG9uZSBvbiBhdXRvLW9wZW5pbmcgb2YgPHA+IHRhZ3MgYW5kIGNsZWFudXAgb2YgU0FYIG91dHB1dAoKU2F0IEF1ZyAxOSAxODo0NTo0MCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLjQgIHhtbGxpbnQuMSBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogYWRkZWQgbWFuIHBhZ2VzCgpTYXQgQXVnIDE5IDE4OjM4OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgbGlieG1sLiogc3RydWN0dXJlLio6IHVwZGF0ZWQgdGhlIGRvYyBhIGJpdAoKVGh1IEF1ZyAxNyAxNTo1MDowMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFNBWC5jIHRlc3RIVE1MLmMgcmVzdWx0L0hUTUwvOiBjbGVhbnVwIG9mIHRoZSBvdXRwdXQKCSAgb2YgU0FYIHRlc3RzCgpNb24gQXVnIDE0IDEzOjU2OjMzIEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPjoKCSogeG1sbGludC5jOiB3b3JrYXJvdW5kIGEgTUFQX0ZBSUxFZCBkZWZpbml0aW9uIGJ1ZyBpbiBEVS00LjAKCk1vbiBBdWcgMTQgMTE6MTA6MjAgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBEYXZlIFllYXJrZSA8eWVhcmtlQGVuZy5idWZmYWxvLmVkdT46CgkqIHRlc3RIVE1MLmM6IGZpeCBjb3JlIGR1bXAgb24gU29sYXJpcyAyLnggc3lzdGVtcwoJKiBIVE1McGFyc2VyLmM6IGZpeCBzZWdmYXVsdCBpZiBjdHh0LT5zYXgtPmNoYXJhY3RlcnMoKSBpcyBOVUxMCgkqIHJlc3VsdC9IVE1MLyouc2F4OiBwcmV2aW91cyBidWcgZml4IGxlYWQgdG8gbmV3IHJlc3VsdHMKCk1vbiBBdWcgMTQgMTA6MjY6MDkgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+OgoJKiBjb25maWd1cmUuaW46IGFkZGVkIC0td2l0aC1yZWFkbGluZT1ESVIgdG8gYWNjZXB0IGFsdGVybmF0ZQoJICBwYXRoIGZvciByZWFkbGluZSBpbmNsdWRlL2xpYnJhcnkKCSogY29uZmlndXJlLmluOiBhZGRlZCBBTV9DX1BST1RPVFlQRVMgdG8gYWRkIC1BYSAtRF9IUFVYX1NPVVJDRQoJICBmb3IgQU5TSSB1bmRlciBIUC1VWAoJKiBjb25maWcuaW46IFJlbW92ZWQgQExJQlNAIGZyb20geG1sLWNvbmZpZyBiZWNhdXNlIEBYTUxfTElCU0AKCSAgaW5jbHVkZXMgQExJQlNACgpTYXQgQXVnIDEyIDIzOjE5OjQyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCSogZ2V0dGluZyByZWFkeSBmb3IgMi4yLjIgcmVsZWFzZQoKU2F0IEF1ZyAxMiAxNjo0MjozNyBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sR2V0RmVhdHVyZXNMaXN0KCkgeG1sR2V0RmVhdHVyZSgpCgkgIGFuZCB4bWxBZGRGZWF0dXJlKCkKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxBZGRDaGlsZExpc3QoKQoJKiB4bWxsaW50LmM6IE1BUF9GQUlMRUQgbWFjcm8gdGVzdAoJKiBwYXJzZXIuaDogYWRkZWQgeG1sUGFyc2VDdHh0RXh0ZXJuYWxFbnRpdHkoKQoJKiB2YWxpZC5jOiBhcHBsaWVkIGJ1ZyBmaXhlcyByZW1vdmVkIHdhcm5pbmcKCSogdHJlZS5jOiBhZGRlZCBDREFUQSBibG9jayB0byBlbGVtZW50cyBjb250ZW50CgkqIHRlc3RTQVguYzogY2xlYW51cCBvZiBvdXRwdXQKCSogdGVzdEhUTUwuYzogYWRkZWQgU0FYIHRlc3RpbmcKCSogZW5jb2RpbmcuYzogYmV0dGVyIGVycm9yIHJlY292ZXJ5CgkqIFNBWC5jLCBwYXJzZXIuYzogZml4ZWQgb25lIG9mIHRoZSBleHRlcm5hbCBlbnRpdHkgcHJvY2Vzc2luZwoJICBvZiB0aGUgT0FTaXMgdGVzdHN1aXRlCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBIVE1MIFNBWCByZWdyZXNzaW9uIHRlc3RzCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMi4yCgkqIHRlc3QvSFRNTC8gcmVzdWx0L0hUTUw6IGFkZGVkIGEgZmV3IG9mIEhUTUwgdGVzdHMsIGFuZCBhZGRlZCB0aGUKCSAgU0FYIHJlc3VsdHMKCkZyaSBBdWcgIDQgMTE6MjE6NTAgUERUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBwYXRjaCBmb3IgSFAgY29tcGlsZXIKCjIwMDAtMDgtMDQgIFN2ZW4gSGVpbmlja2UgIDxzdmVuQHplbi5vcmc+CgoJKiB4bWxsaW50LmM6IFdhcyBjb3JlZHVtcGluZyBzb21ldGltZXMgd2hlbiB0aGUgZmlsZSBnaXZlbiBkaWRuJ3QKCWV4aXN0LgoKU2F0IEp1bCAyMiAwNTo1OTowNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgeG1sSU8uW2NoXTogZml4ZWQgdGhlIHByb2JsZW0gb2YgZW5jb2Rpbmcgc3VwcG9ydAoKCSAgd2hlbiB1c2luZyBpbiBtZW1vcnkgcGFyc2luZy4gTmVlZCBzb21lIGNsZWFudXAuCgkqIHhtbGxpbnQuYyBjb25maWd1cmUuaW46IGFkZGVkIGEgLS1tZW1vcnkgZmxhZyB0byB0ZXN0IG1lbW9yeQoJICBwYXJzaW5nCgkKRnJpIEp1bCAyMSAxNzowOTo1NyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogZml4ZWQgc29ja2xlbl90IHJlcGxhY2VtZW50IHRvIHVuc2lnbmVkIGludAoJKiBwYXJzZXIuYzogZml4ZWQgYSBzcGFjZSBoYW5kZGxpbmcgbWlzc2luZyBhdCB0aGUgZW5kIG9mCgkgIHByb2R1Y3Rpb24gMjggRE9DVFlQRS4KCSogeG1sbWVtb3J5LmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZyBvbiB0aGUgcm91dGluZSB0byBvdmVycmlkZQoJICBhbGxvY2F0aW9uIGZ1bmN0aW9ucwoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVsIDE0IDE3OjAxOjE0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvIHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpGcmkgSnVsIDE0IDE2OjEyOjIwIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbCBkb2MveG1sLmh0bWw6IGFkZGVkIEkxOE4gZG9jCgkqIGVuY29kaW5nLltjaF0gSFRNTHRyZWUuW2NoXSBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IEkxOE4gZW5jb2RpbmcKCSAgaW1wcm92ZW1lbnRzLCBib3RoIHBhcnNlciBhbmQgZmlsdGVycywgYWRkZWQgQVNDSUkgJiBIVE1MLAoJICBmaXhlZCB0aGUgSVNPLUxhdGluLTEgb25lCgkqIHhtbGxpbnQuYyB0ZXN0SFRNTC5jOiBhZGRlZC9tYWRlIHZpc2libGUgLS1lbmNvZGUKCSogZGVidWdYTUwuYyA6IGNsZWFudXAKCSogbW9zdCAuYyBmaWxlczogYXBwbGllZCBwYXRjaGVzIGR1ZSB0byB3YXJuaW5nIG9uIFdpbmRvd3MgYW5kCgkgIHdoZW4gdXNpbmcgU3VuIFBybyBjYyBjb21waWxlcgoJKiB4cGF0aC5jIDogY2xlYW51cCBtZW1sZWFrcwoJKiBuYW5vZnRwLmMgOiBhZGRlZCBhIFRFU1RJTkcgcHJlcHJvY2Vzc29yIGZsYWcgZm9yIHN0YW5kYWxvbmcKCSAgY29tcGlsZSBzbyB0aGF0IHBlb3BsZSBjYW4gcmVwb3J0IGJ1Z3MgbW9yZSBlYXNpbGx5CgkqIG5hbm9odHRwLmMgOiBkaXRjaGVkIHNvY2tsZW5fdCB3aGljaCB3YXMgYSBwb3J0YWJpbGl0eSBtZXNzCgkgIGFuZCByZXBsYWNlZCBpdCB3aXRoIHVuc2lnbmVkIGludC4KCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxIYXNQcm9wKCkKCSogVE9ETzogdXBkYXRlZAoJKiB0ZXN0LyA6IGFkZGVkIG1vcmUgdGVzdCBmb3IgZW50aXRpZXMsIE5TLCBlbmNvZGluZywgSFRNTCwgd2FwCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjIuMCByZWxlYXNlCgpNb24gSnVsIDEwIDE2OjE3OjE4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IGZpeGVkIHRoZSB3YXkgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBpcyBoYW5kbGVkCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgZGVwZW5kYW5jaWVzIGFuZCBjbGVhbnVwCgpNb24gSnVsICAzIDE0OjM3OjA3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWw6IGNoYW5nZWQgdGhlIHhtbHNvZnQub3JnIHN0cnVjdHVyZSwgdXBkYXRlZCB0aGUKCSAgZXhhbXBsZXMgdy5yLnQuIHJvb3QgYW5kIGNoaWxkcwoKU3VuIEp1bCAgMiAyMDo1MTo0MyBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIGJ1ZyAjNzQxOSwgZGVwZW5kYW5jaWVzIGZvdWxlZCBmb3IgbGlieG1sLWRldmVsCgpTdW4gSnVsICAyIDA5OjUyOjQ1IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IFdvcmsgb24gY2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgZm9yIHRoZSBIVE1MIHBhcnNlcgoJKiBIVE1McGFyc2VyLmM6IEZpeGVkIHNvbWUgYXV0b29wZW4vYXV0b2Nsb3NlIHByb2JzIGZvciB0aGUgSFRNTCBwYXJzZXIKCSogZW5jb2RpbmcuYzogRml4ZWQgYSBwb3RlbnRpYWwgbWVtbGVhayBpbiB0aGUgZW5jb2Rpbmcgc3R1ZmYKClNhdCBKdWwgIDEgMTM6NDQ6MjIgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9GQVEuaHRtbCBkb2MvTWFrZWZpbGUuYW0gOiBhZGRlZCBhIEZBUQoKRnJpIEp1biAzMCAyMDoyOTowOCBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgdmFsaWQuYyB0cmVlLmggOiBtb3JlIGNsZWFudXAKCSAgb2YgdGhlIEhUTUwgcGFyc2VyIHRvIGZvcmNlIGl0IHRvIG5vdCBieXBhc3MgU0FYCgpGcmkgSnVuIDMwIDExOjE5OjU5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB3aW4zMmNvbmZpZy5oLmluOiB1cGRhdGVkCgkqIHhtbHZlcnNpb24uaC5pbjogY3JhcCBmb3Jnb3QgdG8gdXBkYXRlIHRoaXMsIHRoaXMgbWVhbiAyLjEuMAoJICBsYWNrcyBpY29udiBzdXBwb3J0IDotKCBuZWVkIHRvIHJlbGVhc2UgMi4xLjEKCSogY29uZmlndXJlLmluOiByZWxlYXNlIDIuMS4xCgkqIEhUTUxwYXJzZXI6IGZpeGVkIGJ1ZyAjMTQ3ODQKCSogeHBhdGguYyBIVE1McGFyc2VyLmMgZW5jb2RpbmcuYyBwYXJzZXIuYzogZml4IHdhcm5pbmcgcmFpc2VkCgkgIGJ5IFdpbmRvd3MgY29tcGlsZXIKCSogSFRNTHBhcnNlci5jIFNBWC5jIEhUTUx0cmVlLmggdHJlZS5oOiBjcmVhdGUgSFRNTCBkb2N1bWVudCBpbgoJICB0aGUgU0FYIHN0YXJ0RG9jdW1lbnQoKSBjYWxsYmFjay4KCSogVE9ETzogdXBkYXRlZAoKVGh1IEp1biAyOSAxMjowNjo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgeG1sU3RvcFBhcnNlcigpCgpXZWQgSnVuIDI4IDIzOjEwOjI2IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IDIuMS4wIHByZXJlbGVhc2UKCSogTGFyZ2UgcmVzeW5jIGJldHdlZW4gVzNDIGFuZCBHbm9tZSB0cmVlCgkqIG5hbm9mdHAsIG5hbm9odHRwLmM6IGZpeGVkIHN0YWxsZWQgY29ubmVjdGlvbnMgcHJvYnMKCSogSFRNTHRyZWUuYyBTQVguYyA6IHN1cHBvcnQgZm9yIGF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlcyBpbgoJICBIVE1MIGZvciBhbmRlcnNjYQoJKiB2YWxpZC5jOiBGaXhlZCBtb3N0IHZhbGlkYXRpb24gKyBuYW1lc3BhY2UgcHJvYmxlbXMKCSogSFRNTHBhcnNlci5jOiBzdGFydCBkb2N1bWVudCBjYWxsYmFjayBmb3IgYW5kZXJzY2EKCSogZGVidWdYTUwuYyB4cGF0aC5jOiBsb3RzIG9mIFhQYXRoIGZpeHVwcyBmcm9tIFBpY2RhciBUZWNobm9sb2d5CgkqIHBhcnNlci5oLCBTQVguYzogc2VyaW91cyBzcGVlZCBpbXByb3ZlbWVudCBmb3IgbGFyZ2UKCSAgQ0RBVEEgYmxvY2tzCgkqIGVuY29kaW5nLltjaF0geG1sSU8uW2NoXTogSW1wcm92ZWQgc2VyaW91c2x5IHNhdmluZyB0bwoJICBkaWZmZXJlbnQgZW5jb2RpbmcKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSBleGFtcGxlL2dqb2JyZWFkLmMgdHJlZS5oOiB3b3JrIG9uIAoJICBsaWJ4bWwxIGxpYnhtbDIgY29udmVyZ2VuY2UuCgkqIGNvbmZpZy5oLmluIHBhcnNlci5jIHhtbGxpbnQuYzogYWRkZWQgeG1sQ2hlY2tWZXJzaW9uKCkKCSAgYW5kIHRoZSBMSUJYTUxfVEVTVF9WRVJTSU9OIG1hY3JvCgpGcmkgSnVuIDIzIDIyOjI2OjA3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWw6IHZhcmlvdXMgcGF0Y2hlcyBhbmQgaW1wcm92ZW1lbnRzIHR5cG8gZml4ZWQgYnkKCSAgRmVsaXggTmF0dGVyCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBFbWFjcyBtb2R1bGUgdG8gbG9va3VwIHRoZSBsaWJ4bWwgZG9jdW1lbnRhdGlvbgoJICBmcm9tIEZlbGl4IE5hdHRlciA8Zm5hdHRlckBnbXgubmV0PgoKU2F0IE1heSAgNiAxMDowOTo0NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3VwZ3JhZGUuaHRtbDogdXBkYXRlZCB3aXRoIGluc3RydWN0aW9ucyBmb3Igc3VwcG9ydCBvZiBib3RoCgkgIGxpYnhtbC0xLnggYW5kIGxpYnhtbC0yLngKCSogZG9jL2dqb2JyZWFkLmMgOiBhcHBsaWVkIFRvZGQgRHVrZXMgPHRkdWtlc0BpYm1vdG8uY29tPiBwYXRjaAoJICBmb3IgMi54IHN1cHBvcnQgYW5kIGFsc28gZml4ZWQgaW5jbHVkZXMKCgpXZWQgTWF5ICAzIDE0OjIxOjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5bY2hdLCB4bWxJTy5bY2hdLCBwYXJzZXIuYywgY29uZmlndXJlLmluIDogcmV2YW1wZWQKCSAgdGhlIGVuY29kaW5nIHN1cHBvcnQsIGFkZGVkIGljb252IHN1cHBvcnQsIHNvIG5vdyBsaWJ4bWwgaWYKCSAgY29tcGlsZWQgd2l0aCBpY29udiBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgamFwYW5lc2UgZW5jb2RpbmdzCgkgIGFtb25nIG90aGVycy4gV29yayBiYXNlZCBvbiBpbml0aWFsIHBhdGNoIGZyb20gWXVhbi1DaGVuIENoZW5nCgkgIEkgbWF5IGhhdmUgYnJva2VuIGJpbmFyeSBjb21wYXQgaW4gdGhlIGVuY29kaW5nIGhhbmRsZXIKCSAgcmVnaXN0cmF0aW9uIHNjaGVtZSwgYnV0IHRoYXQgd2FzIHNvIHV0dGVybHkgYnJva2VuIEkgZG9uJ3QKCSAgZXhwZWN0IGFueWJvZHkgdG8gaGF2ZSB1c2VkIHRoaXMgZmVhdHVyZSB1bnRpbCBub3cuCgkqIHBhcnNlckludGVybmFscy5oOiBmaXh1cCBvbiB0aGUgQ0hBUiByYW5nZSBtYWNybwoJKiB4bWwtZXJyb3IuaCwgcGFyc2VyLmM6IGNhdGNoIFVSTC9VUkkgZXJyb3JzIHVzaW5nIHRoZSB1cmkuYwoJICBjb2RlLgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEJ1ZmZlckdyb3coKSwgd2FzIG5lZWRlZCBmb3IgaWNvbnYKCSogdXJpLmM6IGFkZGVkIHhtbFBhcnNlVVJJKCkgSSBjYW4ndCBiZWxpZXZlIEkgZm9yZ290IHRvCgkgIGltcGxlbWVudCB0aGlzIG9uZSBpbiAyLjAgISEhCgkqIFNBWC5jOiBtb3ZlZCBkb2MtPmVuY29kaW5nIHVwZGF0ZSBpbiB0aGUgZW5kRG9jdW1lbnQoKSBjYWxsLgoJKiBUT0RPOiB1cGRhdGVkLgoKTW9uIEFwciAyNCAxMzozMDoxMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oOiByZW1vdmVkIGV4dHJhbmVvdXMgeG1sUmVtb3ZlUHJvcCBkZWZpbml0aW9uCgkqIFRPRE86IGFkZGVkIGl0ZW0gYWJvdXQgLS1kaXNhYmxlLWNvcmJhIGNvbmZpZ3VyZSBzd2l0Y2gKCSogdHJlZS5jIHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtcyBmb3IgeG1sQ29weURvYyBhbmQgcG9zdHZhbGlkYXRpb24KCSogbmFub2Z0cC5jOiBmaXhlZCBpbmNsdWRlIHByb2JsZW1zIGdpdmluZyB0cm91YmxlcyBvbiBBSVggYW5kIAoJICBzbG93bGFyaXMKCSogeG1sSU8uW2NoXSB2YWxpZC5oIHRyZWUuW2NoXSB4bGluay5jIHhtbG1lbW9yeS5jIHVyaS5jIAoJICBwYXJzZXIuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyBTQVguYyB0ZXN0U0FYLmMgOgoJICBjb21tZW50IGFuZCBoZWFkZXJzIGNoYW5nZXMgdG8gbG93ZXIgZ3RrLWRvYyBudW1iZXIgb2Ygd2FybmluZ3MKCSogZG9jL2h0bWwvKjogcmVidWlsdCBkb2NzCgpTdW4gQXByIDE2IDExOjIzOjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIQUNLSU5HOiBkb2N1bWVudGVkIHRoZSB0YWcgZm9yIDEueCBhbmQgaW5zdHJ1Y3Rpb25zCgpXZWQgQXByIDEyIDE1OjQ3OjIyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxJTy5bY2hdIHBhcnNlci5bY2hdOiBNb3JlIGludGVyZmFjZXMgZm9yIG5ldyBJL08gZnVuY3Rpb25zCgkgIHhtbE5ld0lPSW5wdXRTdHJlYW0sIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlSU8sCgkgIHhtbENyZWF0ZUlPUGFyc2VyQ3R4dAoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuaDogc3BlZWR1cCBvZiBJU19DSEFSIGxpa2UgbWFjcm9zLAoJICBzaWduaWZpY2FudCBvdmVyYWxsIGltcHJvdmVtZW50CgkqIHhtbGxpbnQuYzogYWRkZWQgSS9PIHRlc3QgdG8geG1sbGludAoJKiB0ZXN0U0FYLmM6IGFkZGVkIGEgc3BlZWQgdGVzdAoJKiBkb2MvKiA6IHVwZGF0ZWQvcmVnZW5lcmF0ZWQKClNhdCBBcHIgIDggMTQ6NTQ6NTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgdXJpLmggcGFyc2VySW50ZXJuYWxzLmg6IGNvc21ldGljIGNoYW5nZXMgZnJvbQoJICAiVGltdXIgSS4gQmFrZXlldiIgPHRpbXVyQGJhdC5ydT4sIGluY2x1ZGluZyBtYWtpbmcgCgkgIHhtbENyZWF0ZVVSSSgpIHB1YmxpYwoKRnJpIEFwciAgNyAxODozNTowMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uW2NoXSBwYXJzZXIuYzogY2xlYW5lIHVwIHRoZSB4bWxQYXJzZXJJbnB1dEJ1ZmZlciBtZXNzCgkgIGFuZCB0aGUgY29kZSBhdCB0aGUgc2FtZSB0aW1lLiBBZGRlZCBhIGNsZWFuIG1lY2hhbmlzbSBmb3IKCSAgb3ZlcmxvYWQgb3IgYWRkZWQgaW5wdXQgbWV0aG9kczogeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcygpCgkqIHRyZWUuYzogZml4ZWQgeG1sUHJldlNpYmxpbmcgYW5kIHhtbE5leHRTaWJsaW5nIHBlciAKCSAgQ2hyaXN0b3BoZSBMZSBHYWwgKENocmlzdG9waGUuTGUtR2FsQGltYWcuZnIpIGlucHV0CgkqIFRPRE86IHVwZGF0ZWQKCSogZG9jLyogOiB1cGRhdGVkL3JlZ2VuZXJhdGVkCgkqIGRvYy9NYWtlZmlsZS5hbTogdHdlYWtzIHRvIGF2b2lkIHByb2JsZW0gd2l0aCBsaWJ4bWwgbGluayBpbiB0aGUKCSAgc291cmNlIGRpcgoKV2VkIEFwciAgNSAyMToxMTozNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFVSSS5jOiB5ZXQgYW5vdGhlciBmb3Jnb3R0ZW4gY29tbWl0LCBJIHNob3VsZCBnZXQgc29tZSBzbGVlcCAhCgpXZWQgQXByICA1IDIwOjM2OjQ2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxsaW50LmM6IGZvcmdvdCB0byBjb21taXQgdGhpcyB0b28gPwoKV2VkIEFwciAgNSAxNjoyMjo0NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sdmVyc2lvbi5oLmluIDogZm9yZ290IHRvIGNvbW1pdCB0aGlzIHByZXZpb3VzbHkKCk1vbiBBcHIgIDMgMjE6NDc6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGxpYnhtbC0yLjAuMCB2ZXJzaW9uIGxvb2tzIE9rIHNvIGZhcgoJKiBSRUFETUUgVE9ETzogdXBkYXRlZCBmb3IgcmVsZWFzZQoJKiB1cmkuYyB1cmkuaDogYWRkZWQgYXV0aG9yaXR5IHBhcnNpbmcvc2F2aW5nCgkqIHVyaS5jIHRlc3RVUkkuYyBNYWtlZmlsZS5hbTogbW92ZWQgdGhlIHRlc3RpbmcgY29kZSB0byB0ZXN0VVJJLmMKCSogeG1sdmVyc2lvbi5oLmluIGNvbmZpZ3VyZS5pbiBuYW5vZnRwLltjaF0gbmFub2h0dHAuW2NoXSBlbmNvZGluZy5oCgkgIGRlYnVnWE1MLltjaF0geHBhdGguW2NoXSB4bWxJTy5jIHRlc3Rlci5jIHRlc3RYUGF0aC5jIHRlc3RIVE1MLmMKCSAgdHJlZS5jIEhUTUx0cmVlLmMgSFRNTHBhcnNlci5jIHRyZWUuYyB0cmVlLmggcGFyc2VyLmMKCSAgTWFrZWZpbGUuYW0gOiBhZGRlZCBjb21waWxlLXRpbWUgY3VzdG9taXphdGlvbiBvZiBsaWJ4bWwKCSAgLS13aXRoLWZ0cCAtLXdpdGgtaHR0cCAtLXdpdGgtaHRtbCAtLXdpdGgteHBhdGggLS13aXRoLWRlYnVnCgkgIC0td2l0aC1tZW0tZGVidWcKCSogKi5bY2hdIGF1dG9jb25mLnNoIDogbW92ZWQgdG8gYW4gYWJzb2x1dGUgYWRyZXNzaW5nIG9mIGluY2x1ZGVzIDogCgkgICNpbmNsdWRlIDxsaWJ4bWwveHh4Lmg+IEkgaG9wZSBpdCB3b24ndCBicmVhayB0b28gbXVjaCBzdHVmZgoJICBhbmQgd2lsbCBiZSBtYW5hZ2VhYmxlIGluIHRoZSBmdXR1cmUuLi4KCSogeG1sbGludC5jIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluIDogcmVuYW1lZCB0ZXN0ZXIuYyB0byB4bWxsaW50LmMKCSAgYW5kIGFkZGVkIHhtbGxpbnQgdG8gdGhlIGluc3RhbGxlZCBwcm9ncmFtcwoJKiB1cmkuaDogYWRkZWQgeG1sRnJlZVVSSSgpCgkgIApGcmkgTWFyIDI0IDE0OjM1OjIxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jIHVyaS5oOiBmaW5pc2hlZCB0aGUgZXNjYXBpbmcgaGFuZGxpbmcsIHRoZSBiYXNlIHN1cHBvcnQKCSAgYW5kIHRoZSBVUkkgcGF0aCBub3JtYWxpemF0aW9uLiBMb29rcyBnb29kIGp1c3QgbGFja3MgdGhlCgkgIGF1dGhvcml0eSBjb250ZW50IHBhcnNpbmcgY29kZS4KCSogTWFrZWZpbGUuYW06IGFkZGVkIGluc3RydWN0aW9ucyB0byBnZW5lcmF0ZSB0ZXN0VVJJCgkqIFRPRE86IHVwZGF0ZWQKCSogZG9jL3htbC5odG1sLCBkb2Mvc21hbGxmb290b25seS5naWYgZG9jL3czYy5wbmc6IHVwZGF0ZWQsCgkgIGFkZGVkIGxpbmtzIGFuZCBpY29ucyBmb3IgVzNDIGFuZCBHbm9tZQoKTW9uIE1hciAyMCAxNDowNToyNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuW2NoXSA6IHNlZW1zIEkgZm9yZ290IHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgZmlsZXMgaW4KCSAgdGhlIGxhc3QgY29tbWl0IDotKQoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYW5kIHVwbG9hZGVkIHRoZSBkb2NzCgpNb24gTWFyIDIwIDEyOjMzOjUxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3QvdmFsaWQvZHRkcy94aHRtbCo6IHJlbW92ZWQgUkNTIGluZm9zIChwYWluIHdpdGggQ1ZTKQoJKiBUT0RPOiB1cGRhdGVkCgkqIHhtbG1lbW9yeS5bY2hdIDogYWRkZWQgeG1sTWVtU2V0dXAoKSBhbmQgeG1sTWVtR2V0KCkgdG8gb3ZlcnJpZGUKCSAgbGlieG1sIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbiB3aXRoIGFub3RoZXIgc2V0IChsaWtlIGdtYWxsb2MvCgkgIGdmcmVlKS4KCSogTWFrZWZpbGUuYW0sIHVyaS5jLCB1cmkuaDogYWRkZWQgYSBzZXQgb2YgZnVuY3Rpb25zIHRvIGRvCgkgIGV4YWN0IChsaXR0ZXJhbHkgY29waWVkIGZyb20gdGhlIFJGQyAyMzk2IHByb2R1Y3Rpb25zKSBwYXJzaW5nCgkgIGFuZCBoYW5kbGluZyBvZiBVUkkuIFdpbGwgYmUgbmVlZGVkIGZvciBYTGluaywgb25lIFhNTCBXRkMsIAoJICBYTUwgQmFzZSBhbmQgcmV1c2VkIGluIHRoZSBuYW5vW2Z0cC9odHRwXSBtb2R1bGVzLiBTdGlsbCB3b3JrCgkgIHRvIGJlIGRvbmUuCgpUdWUgTWFyIDE0IDIwOjUyOjM1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgbGlieG1sLnNwZWMuaW4gOiBsaWJ4bWwyCgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jIHBhZ2UsIHJlYnVpbHQgdGhlIGRvY3MKClR1ZSBNYXIgMTQgMTk6MTE6MjkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWxsOiB0YWdnZWQgTElCX1hNTF8xX1gKCSogKi5jICouaCA6IHVwZGF0ZWQgZnJvbSBXM0MgQ1ZTIHRyZWUKCSogY29uZmlndXJlLmluIDogMi4wLjAtYmV0YQoJKiBsaWJ4bWwuc3BlYy5pbiA6IGxpYnhtbDIgcGFja2FnZSBuYW0KCSogcmVzdWx0LyogOiBuZXcgdmVyc2lvbiBvZiB0aGUgdGVzdHMgb3V0cHV0CgpNb24gTWFyICA2IDA5OjM0OjUyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCwgZG9jL3VwZGF0ZS5odG1sOiB1cGRhdGVkIGRvY3MsIDEuOC43CgpTYXQgTWFyICA0IDE2OjE0OjQyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoJKiBwYXJzZXIuYzogZmluYWwgcGF0Y2ggb24gIzY3NjYKCSogdmFsaWQuYzogc21hbGwgcGF0Y2ggb24gdmFsaWRpdHkgY2hlY2tzLgoKU2F0IE1hciAgNCAxMjozODo0MSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvdXBncmFkZS5odG1sOiBpbnN0cnVjdGlvbiBvbiBob3cgdG8gdXBncmFkZSBmcm9tIDEueCB0byAyLngKCSAgYWRkZWQKCSogcGFyc2VyLmM6IGFkZGluZyB4bWxLZWVwQmxhbmtzRGVmYXVsdCgpIGFzIGEgd2F5IHRvIG1hbmFnZQoJICBjb21wYXRpYmlsaXR5IHcuci50LiBYTUwgc3BlYyBhbmQgZXhpc3RpbmcgY29kZS4KClRodSBNYXIgIDIgMDQ6NDU6MTUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHNlZW1zIGEgYmV0dGVyIHNvbHV0aW9uIHRvIDxhPiAgIDwvYT4gZXhpc3RzLAoJICB3aWxsIHRyeSBpdCBmb3IgYSB3aGlsZQoKVGh1IE1hciAgMiAwMjoyNjoxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogdHJpZWQgdG8gcmVtb3ZlIHRoZSA8YT4gICA8L2E+IGdlbmVyYXRpbmcgPGEvPgoJICB0aGlzIGlzIGhhcmQuIExlZnQgYSBmbGFnIGZvciB0aGF0IHB1cnBvc2UuIEZpeGVkIGJ1ZyAjNjc2NgoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIDEuOC43IG5vdCByZWxlYXNlZCwgZHVlIHRvIHByZXZpb3VzCgkgIHByb2JsZW0KClRodSBNYXIgIDIgMDM6MDM6NTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogYXBwbGllZCBzZWNvbmQgcGF0Y2ggZnJvbSBQYXVsIER1Qm9pcwoKVHVlIEZlYiAyOSAyMzo1NToxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiBhcHBsaWVkIHBhdGNoIGZyb20gUGF1bCBEdUJvaXMKClRodSBGZWIgIDMgMTY6MzY6MzkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBkbyBhIGJpdCBvZiBidWZmZXJpemF0aW9uIGluIHB1c2ggbW9kZS4KClRodSBGZWIgIDMgMTU6NTk6MzcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgdHJlZS5jIEhUTUx0cmVlLltjaF0gZGVidWdYTUwuYyB4cGF0aC5jOiBGaXhlZAoJICBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiB2YXJpb3VzIHBsYXRmb3Jtcy4KCSogcGFyc2VyLmM6IEZpeGVkICM1MjgxIHZhbGlkaXR5IGVycm9yIGNhbGxiYWNrcyBhcmUgbm93IGRlc2FjdGl2ZWQKCSAgYnkgZGVmYXVsdCBpZiBub3QgdmFsaWRhdGluZy4KClRodSBGZWIgIDMgMTM6NDY6MTQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jLCB3aW4zMmNvbmZpZy5oLmluOiBwYXRjaGVzIHRvIGNvbXBpbGUgb24gV0lOMzIKCldlZCBGZWIgIDIgMjI6NTE6MTYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBzbnByaW50Zi9zcHJpbnRmIHBhdGNoIGNvdXJ0ZXN5IEdlb3JnZSBLYXRzaXJlbG9zCgkgIDxna2F0c2lAY3MudG9yb250by5lZHU+CgpNb24gSmFuIDMxIDE4OjU4OjIxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBGaXhlZCAnIycgYW5kICc/JyBzdHJpcHBpbmcgd2hlbgoJICBwcm9jZXNzaW5nIFVSTHMKCk1vbiBKYW4gMzEgMTQ6MjU6NTcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBidWcgZml4ZXMsIGludGVncmF0aW9uIGluIHJwbWZpbmQsIGFkZGVkCgkgIHhtbE5hbm9GVFBVcGRhdGVVUkwgZm9yIHBlcnNpc3RlbnQgY29udHJvbCBjb25uZWN0aW9ucy4KCSogY29uZmlndXJlLmluOiAxLjguNgoKVGh1IEphbiAyNyAxNzo1MjoyOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5bY2hdLCBuYW5vZnRwLltjaF06IGNsZWFudXAsIGFkZGVkIHByb3h5IHN1cHBvcnQKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sU2F2ZU5vRW1wdHlUYWdzCgoyMDAwLTAxLTI5ICBKYW1lcyBIZW5zdHJpZGdlIDxqYW1lc0BkYWEuY29tLmF1PgoKCSogbmFub2Z0cC5jOiBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBJUFBST1RPX1RDUC4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBuYW5vZnRwLltjaF0gdG8gdGhlIGJ1aWxkLgoKV2VkIEphbiAyNiAxODoxNDo1NSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLltjaF06IGNsZWFudXAsIGNvbW1lbnRzLCBBUEkKCSogZGVidWdYTUwuYyA6IGZpeGVkIGEgYnVnIGluIHRoZSBjYXQgY29tbWFuZAoJKiBkb2MvKjogcmVnZW5lcmF0ZWQgdGhlIGRvY3MKCldlZCBKYW4gMjYgMTY6NTI6NTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdIHBhcnNlci5jIHhtbElPLltjaF06IGFkZGVkIGEgTmFubyBGVFAgaW1wbGVtZW50YXRpb24KCSogZGVidWdYTUwuYyA6IGZpeGVkIGEgYnVnIGluIHRoZSBjYXQgY29tbWFuZAoJKiB2YWxpZC5jOiBmaXhpbmcgc29tZSBzbWFsbCBwcm9icwoJKiBsaWJ4bWwuc3BlYy5pbjogZ2V0IHJpZCBvZiB0aGUgU05BUCBzdWZmaXgKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHRoZSBzdGF0dXMKCk1vbiBKYW4gMjQgMTQ6MzE6MDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy5pbjogeG1sLWNvbmZpZyAtLXZlcnNpb24gdG8ganVzdCByZXR1cm4gdGhlCgkgIHZlcnNpb24gbnVtYmVyCgkqIHhwYXRoLmM6IHNvbWUgY2xlYW51cCB3LnIudC4gYXhpcyB3aGVuIHRoZSBjdXJyZW50IG5vZGUgaXMKCSAgYW4gYXR0cmlidXRlLgoJKiBUT0RPOiB1cGRhdGVkCgpUdWUgSmFuIDE4IDE4OjQ2OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgZm9yIGxpYnhtbC0xLjguNQoJKiBkb2MvKiByZWNvbXBpbGVkIHRoZSBkb2N1bWVudGF0aW9uCgoyMDAwLTAxLTE3ICBKb2R5IEdvbGRiZXJnIDxqZ29sZGJlcmdAaG9tZS5jb20+CgoJKiBjb25maWd1cmUuaW4gOiBXQVJOSU5HIGF1dG9jb25mIHN1YnRsZXR5IGFsZXJ0IDoKCSAgVXNlIEFDX0NIRUNLX0hFQURFUlMgcmF0aGVyIHRoYW4gQUNfQ0hFQ0tfSEVBREVSCgkgIHdoZW4gbG9va2luZyBmb3IgemxpYi5oIHNvIHRoYXQgSEFWRV9aTElCX0ggaXMgZGVmaW5lZC4KCSogY29uZmlnLmguaW4gOiBIYXZlIGEgI3VuZGVmIGZvciBIQVZFX1pMSUJfSCBzbyB0aGF0IGl0IHdpbGwKCSAgZ2V0IGRlZmluZWQgYnkgQUNfQ0hFQ0tfSEVBREVSUy4KCk1vbiBKYW4gMTcgMTc6MDQ6MTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCBhIGhpZGVvdXMgYnVnIGluIHhtbEdldFByb3AoKSB0aGFua3MgdG8KCSAgUnVuZS5EanVyaHV1c0BmYXN0Lm5vCgpTYXQgSmFuIDE1IDE1OjA5OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFRPRE86IHVwZGF0ZWQKCSogdHJlZS5jLCBwYXJzZXIuYzogbWFkZSBzdXJlIHRoYXQgb25seSBtZW1vcnkgYWxsb2MgcHJvYmxlbXMKCSAgYW5kIGludGVybmFsIHBhcnNlciBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gd3JpdGUgdG8gc3Rkb3V0IG9yCgkgIHN0ZGVyci4KClRodSBKYW4gMTMgMTE6NDk6MTEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogcmVzdG9yZWQgeG1sTmV3R2xvYmFsTnMgc2luY2UgdGhpcyBzZWVtcyB1c2VkIGJ5CgkgIGEgbG90IG9mIGV4aXN0aW5nIGNvZGUgOi0oLCBmaXhlZCBhIGJ1ZyBpbiB4bWxOZXdOcwoJKiBuYW5vaHR0cC5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBJTkNMVURFX1dJTlNPQ0sKCSogSFRNTHBhcnNlci5jLCBwYXJzZXIuYywgZW50aXRpZXMuYywgdmFsaWQuYyA6IHJlbW92ZWQgYWxsIGNhbGxzCgkgIHRvIGV4aXQoKSBmcm9tIHRoZSBsaWJyYXJ5IGNvZGUuCgkqIHhwYXRoLmMsIHBhcnNlci5jOiByZW1vdmVkIGJ1Z3Mgb3IgdW51c2VkIGNvZGUgZGV0ZWN0ZWQgYnkgCgkgIFdpbmRvd3MgY29tcGlsZXJzCgkqIHBhcnNlci5jOiBzdGFydGVkIGFkZGluZyBpbnRlcmZhY2VzIGZvciBwYXJzaW5nIHdlbGwgYmFsYW5jZWQKCSAgWE1MIGZyYWdtZW50cwoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAxLjguNAoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKClN1biBKYW4gIDkgMjM6MDM6MjAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sTmV3RG9jRnJhZ21lbnQoKSBmb3IgRE9NCgkqIHRlc3RIVE1MLmM6IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgpXZWQgSmFuICA1IDE3OjI5OjE3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsZCB0aGUgZG9jcwoKV2VkIEphbiAgNSAxNzowODo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhY2NvbmZpZy5oOiByZWFkbGluZSBhbmQgaGlzdG9yeSBwYXRjaAoJKiB2YWxpZC5bY2hdOiBhZGRlZCB4bWxSZW1vdmVJRCgpIGFuZCB4bWxSZW1vdmVSZWYoKQoJKiB0cmVlLmM6IGFkZGVkIGNoZWNrIGFuZCBoYW5kbGluZyB3aGVuIHBvc3NpYmx5IHJlbW92aW5nIGFuIElECgkqIHRyZWUuYywgSFRNTHBhcnNlci5oLCBIVE1MdHJlZS5oOiBmaXhlZCBlbnRpdGllcyBwYXJzaW5nCgkgICAgIGFuZCBzYXZpbmcuCgkqIHRlc3QvSFRNTC9lbnRpdGllcy5odG1sIHJlc3VsdC9IVE1ML2VudGl0aWVzLmh0bWwqIDogdGVzdCBmb3IKCSAgICAgdmFyaW91cyBlbnRpdGllcyByZWZlcmVuY2UgY2FzZXMKCSogcmVzdWx0L0hUTUwvKiA6IGFzIGEgcmVzdWx0IG91dHB1dCBvZiBzb21lIHRlc3RjYXNlIGhhdmUKCSAgICAgY2hhbmdlZAoJKiBIVE1McGFyc2VyLmMsIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgcHVzaCBtb2RlIHRyaWdnZXJlZAoJICAgICBieSBwcmV2aW91cyBleGFtcGxlLiBhZGRlZCB4bWxQYXJzZVRyeU9yRmluaXNoKCkuCgkqIHhwYXRoLmggdHJlZS5oIHBhcnNlci5oIHZhbGlkLmggeG1sSU8uaCB4bGluay5oIGVuY29kaW5nLmgKCSAgZW50aXRpZXMuaCBkZWJ1Z1hNTC5oIEhUTUxwYXJzZXIuaDogY2hhbmdlZCB0aGUgd2F5IHN0cnVjdCBhcmUgCgkgIGRlY2xhcmVkIHRvIGFsbG93IGd0ay1kb2MgdG8gZXhwb3NlIHRob3NlCgkqIHBhcnNlci5jOiBjbG9zZWQgYnVnICM0OTYwICAKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBBcHBsaWVkIHBhdGNoIGZyb20gCgkgIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4gZm9yIGJldHRlciB6bGliCgkgIGFuZCBtYXRoL3NvY2tldCBsaWJzIGRldGVjdGlvbgoKTW9uIEphbiAgMyAxODoyOTo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOiBsaW5rIHRlc3RlciBhZ2FpbnN0IHJlYWRsaW5lCgkqIGRvYy94bWwuaHRtbCBkb2MvKi8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uIHBhZ2VzCgpNb24gSmFuICAzIDExOjU4OjA1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sUmVtb3ZlUHJvcAoJKiB3aW4zMmNvbmZpZy5oLmluIG5hbm9odHRwLmM6IGF2b2lkIGluY2x1ZGluZyB0aGUgV2luZG93cwoJICAgIHNvY2tldCBzdHVmZiBpbiBldmVyeSBDIGZpbGVzCgkqIHBhcnNlci5jOiByZW1vdmVkIGFuIGluZGV0ZXJtaW5hdGlvbiB4bUxEZWNsL1BJKHhtbC4uLikgaW4KCSAgICB0aGUgWG1MIHBhcnNlcihzKQoJKiB0ZXN0L25zNCByZXN1bHQvbnM0IGV0Yy4uLjogYWRkZWQgdGVzdCBjYXNlIGZvciBwcmV2aW91cyBwcm9iICAgIAoJKiB0cmVlLmM6IHhtbE5ld05zIHdhc24ndCBjaGVja2luZyBmb3IgZG91YmxlIGRlZmluaXRpb24KCSogTWFrZWZpbGUuaW46IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGRpc3QtaG9vayBkdXBsaWNhdGVzCgkqIHBhcnNlci5baGNdLCB4bWxJTy5jOiBmaXhlZCB0aGUgbG9hZGluZyBvZiBleHRlcm5hbCBlbnRpdGllcwoJICAgIEFQSXMsIG5vdyB4bWxMb2FkRXh0ZXJuYWxFbnRpdHkoKSBpcyB1c2VkIGV2ZXJ5d2hlcmUgYW5kCgkgICAgc2V0dGluZyB1cCBhbiBhcHAgc3BlY2lmaWMgZnJvbnQtZW5kIHVzaW5nIHRoZSAKCSogU0FYLmMgcGFyc2VyLmM6IHNvbWUgZml4ZXMsIG5vdyB0aGUgeGh0bWwgc3BlYyB2YWxpZGF0ZXMKCSAgICB3aXRoIHRoZSB4aHRtbCBEVEQuCgkqIGVycm9yLmM6IGZpeGVkIGNyYXNoZXMgaW4gY2FzZSBvZiBubyBpbnB1dCBzdHJlYW0gICAgCgkqIHRlc3QvdmFsaWQvW2R0ZHMvXS94aHRtbCogOiBhZGRlZCB0aGUgeGh0bWwgc3BlYyBhbmQgZHRkcwoJICAgIHRvIHRoZSB2YWxpZGF0aW9uIHRlc3RzIGFuZCByZXN1bHRzCgpXZWQgRGVjIDI5IDE1OjI5OjUyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSB0ZXN0SFRNTC5jOiBhZGRlZCBwdXNoIG1vZGUgZm9yIHRoZSBIVE1MIHBhcnNlcgoJICB0b28gaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCkgYW5kIGh0bWxQYXJzZUNodW5rKCkKCSogcGFyc2VyLmM6IGEgYml0IG9mIGNsZWFudXAuCgkqIFNBWC5jLCBIVE1McGFyc2VyLmM6IHNvbWUgYXR0cmlidXRlcyBtYXkgbm90IGhhdmUgdmFsdWVzIChjb250cmFyeQoJICB0byBYTUwpIHJlbW92ZWQgdGhlIGxhc3QgbWVtIGxlYWsga25vd24KCSogSFRNTHRyZWUuYzogb3V0cHV0IG1lc3NhZ2UgY2xlYW51cAoJKiB4bWxtZW1vcnkuYzogZGlzcGxheSBjb250ZW50IGluZm8gYWJvdXQgbWVtb3J5IGJsb2NrcwoJKiByZXN1bHQvSFRNTC93aXJlZC4qIDogbWlzc2luZyBhdHQgdmFsdWUgd2FybmluZyBjaGFuZ2UKClR1ZSBEZWMgMjggMTc6NDI6NDEgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpUdWUgRGVjIDI4IDE4OjQ0OjIyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5oOiBQdXNoIHBhcnNlciBmb3IgWE1MLAoJICAgICBzZWVtcyB0byB3b3JrIGZpbmUgbm93CgkqIHRlc3Rlci5jIGRlYnVnWE1MLltjaF06IEFkZGVkIGFuIFhNTCBzaGVsbCBkZWJ1ZyBmYWNpbGl0eSBhbmQKCSAgICAgLS1wdXNoIGZvciBwdXNoIHRlc3RpbmcKCSogeHBhdGguW2NoXSA6IGNsZWFuZWQgdXAgZm9yIFNoZWxsIHVzYWdlLCBhZGRlZCBtaXNzaW5nIEFQSXMKCSogdGVzdFNBWC5jOiBhZGRlZCAtLXB1c2gKCSogSFRNTHRyZWUuW2NoXSB0cmVlLltjaF06IG5ldyBmdW5jdGlvbnMgZm9yIGR1bXBpbmcgcGFydHMgb2YgdGhlCgkgICAgIHN1YnRyZWUKCSogeG1sSU8uW2NoXSA6IGVucmljaGVkIEFQSSArIGZpeGVzIGZvciBwdXNoIG1vZGUgICAgIAoJKiBlbnRpdGllcy5bY2hdOiBhZGRlZCB0aGUgZW50aXR5IGNvbnRlbnQgbGVuZ3RoIHRvIHRoZSBzdHJ1Y3QuCgkqIHhtbG1lbW9yeS5bY2hdOiBuZXcgQVBJIHRvIHNob3cgdGhlIGxhc3QgZW50cmllcyBmb3IgdGhlIHNoZWxsCgkqIHZhbGlkLmM6IGFkZGVkIHJlcXVpcmVkIGF0dHJpYnV0ZSB0ZXN0aW5nCgkqIFNBWC5jOiB0aGUgY2RhdGEgY2FsbGJhY2sgbm93IG1lcmdlIGNvbnRpZ3VvdXMgZnJhZ21lbnRzCgkqIEhUTUxwYXJzZXIuYzogY2xlYW51cCBvZiBzb21lIG1hY3JvcwoKV2VkIERlYyAyMiAxMjoyMDo1MyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4IGZvciBQSXMgbmFtZSBzdGFydGluZyB3aXRoIHhtbAoJKiB0cmVlLmM6IGZpeGVkIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aCB8fCBhbmQgJiYgb3BzCgkqICouYywgY29uZmlndXJlLmluIHdpbjMyY29uZmlnLmguaW4gOiBnZW5lcmF0ZSB3aW4zMmNvbmZpZy5oIGZvcgoJICB0aG9zZSBvbiB0aGUgT3RoZXIgU2lkZSAhCgpUdWUgRGVjIDIxIDE3OjIyOjE3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHN0dXBpZCA9IHZzLiA9PSBidWcgOi0oCgkqIGRvYy9nbm9tZS14bWwuc2dtbDogcy9nbGFkZS94bWwvCgpUdWUgRGVjIDIxIDE0OjI5OjM0IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVnIGZpeCByZWxlYXNlIDEuOC4yCgkqIGRlYnVnWE1MLmggbmFub2h0dHAuaCB4bWwtZXJyb3IuaCB4bWxtZW1vcnkuaCB4cGF0aC5oIDogCgkgIEhvcGVmdWxseSB0aGUgZW5kIG9mIHRoYXQgc2lsbHkgQysrIGluY2x1ZGUgcHJvYmxlbQoJKiB0cmVlLltjaF06IEFkZGVkIGEgZmV3IGZ1bmN0aW9uczogeG1sUmVwbGFjZU5vZGUsIHhtbEFkZFByZXZTaWJsaW5nLAoJICAgICAgeG1sQWRkTmV4dFNpYmxpbmcsIHhtbE5vZGVTZXROYW1lIGFuZCB4bWxEb2NTZXRSb290RWxlbWVudAoJKiBIVE1McGFyc2VyLmMgSFRNTHBhcnNlci5oIEhUTUx0cmVlLmM6IFdoZW4gc2F2aW5nIEhUTUwgdHJ5IHRvIGF2b2lkIAoJICAgICAgdHJvdWJsZXMgd2l0aCBhdXRvY2xvc2VkIGVsZW1lbnRzIHdoZW4gdGhlIHN0cmVlIHNoYXBlIGRvZXNuJ3QKCSAgICAgIGZvbGxvdyB0aGUgRHREIHNwZWNzLiBBZGRlZCBodG1sSXNBdXRvQ2xvc2VkKCkgYW5kCgkgICAgICBodG1sQXV0b0Nsb3NlVGFnKCkKCSogcmVzdWx0L0hUTUwvKi5odG0qOiBVcGRhdGVkIHRoZSBIVE1MIGV4YW1wbGVzIHJlZ3Jlc3Npb24gdGVzdHMgb3V0cHV0CgkqIFNBWC5jIHRyZWUuYzogZml4ZWQgYnVnIG9uIGRlZmF1bHRpbmcgbmFtZXNwYWNlcyBvbiBhdHRyaWJ1dGVzCgkqIGRlYnVnWE1MLmM6IGZpeGVkIGEgYnVnIG9uIHByaW50aW5nIGRlZmF1bHQgbmFtZXNwYWNlcy4KCSogSFRNTHRyZWUuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gb3V0cHV0aW5nIFhNTCBwYXJzZWQgZG9jcyBhcyBIVE1MCgpNb24gRGVjIDIwIDE2OjIwOjU1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHJlc3VsdC9IVE1MLyouaHRtW2xdIDogdXBkYXRlZCB0aGUgSFRNTCByZWdyZXNzaW9uIHRlc3RzIGFjY29yZGluZwoJICB0byB0aGUgbmV3IG91dHB1dAoJKiB4cGF0aC5oIHhtbC1lcnJvci5oIHZhbGlkLmggdHJlZS5oIHBhcnNlci5oIGVudGl0aWVzLmggU0FYLmgKCSAgSFRNTHRyZWUuaCB0cmVlLmMgZW50aXRpZXMuYzogaGVhZGVycyB0d2Vha2luZ3MgdG8gYXZvaWQgYSBuYXN0eQoJICBwcm9ibGVtIGR1ZSB0byBpbnRlcm1peCBvZiBleHRlcm4gIkMiIHsgLi4uIH0gZGVjbGFyYXRpb25zIGZvciBDKysKCSAgYW5kIHJlY3Vyc2l2ZSBpbmNsdWRlcyBpbiB0aGUgaGVhZGVycwoKMTk5OS0xMi0yMCAgQ2hyaXMgTGFoZXkgIDxjbGFoZXlAdW1pY2guZWR1PgoKCSogSFRNTHRyZWUuYzogTWFkZSBpdCBzbyB0aGF0IGh0bWwgbm9kZXMgd2l0aCBhIHNpbmdsZSBjaGlsZCBkbwoJbm90IGluc2VydCBhIGNhcnJpYWdlIHJldHVybiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaWxkIG5vZGUuCgpTYXQgRGVjIDE4IDE2OjA3OjAzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVnIGZpeCByZWxlYXNlIDEuOC4xCgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzQzNDQKCSogeHBhdGguaCB4bWwtZXJyb3IuaCB4bGluay5oIG5hbm9odHRwLmggZGVidWdYTUwuaCBTQVguaCBIVE1McGFyc2VyLmgKCSAgYWRkZWQgdGhlIGdsdWUgdG8gYXZvaWQgQysrIHByb2JsZW1zCgkqIGRvYy8qIDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KClRodSBEZWMgMTYgMTY6MTk6MjkgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBpbnRyb2R1Y2VkIGluIDEuOC4wIGFuZCBicmVha2luZyBkZWZhdWx0CgkgIG5hbWVzcGFjZSByZWNvZ25pdGlvbiwgYW5kIERpYSBhcyBhIHJlc3VsIDotKAoJKiBlbmNvZGluZy5jOiBjbG9zZWQgYnVnICMzOTUwCgpXZWQgRGVjIDE1IDE5OjIyOjIzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLmM6IGRlYnVnZ2luZyBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbiwgZXhjZXB0IFVSSSBleHBhbnNpb24KCSAgc3R1ZmYgdGhpcyBzaG91bGQgYmUgZml4ZWQgbm93CgkqIHBhcnNlckludGVybmFscy5oOiBmaXhlZCBhIGJ1ZyBpbiBJU19CQVNFQ0hBUiByZXBvcnRlZCBieQoJICBDYXJsIE55Z2FyZCA8Y255Z2FyZEBiZWxsYXRsYW50aWMubmV0PgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1wb3N0dmFsaWQsIGNsZWFuaW5nIG9mIHRoZSBjb2RlCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sRG9jR2V0Um9vdEVsZW1lbnQoKQoJICAKVHVlIERlYyAxNCAyMDozMDozNCBQU1QgMTk5OSBSYW1pcm8gRXN0cnVnbyA8cmFtaXJvQGVhemVsLmNvbT4KCgkqIFNBWC5oLCB0cmVlLmggOiBjaGFuZ2VkICduYW1lc3BhY2UnIHRvICduYW1lU3BhY2UnIHRvIHdvcmthcm91bmQKCWMrKyBsb3NhZ2UuCgpTdW4gRGVjIDEyIDEzOjA4OjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL3htbC5odG1sIDogYnVtcGVkIHRvIDEuOC4wCgkqIHhsaW5rLltjaF0sIE1ha2VmaWxlLmFtIDogYWRkZWQgZnJhbWV3b3JrIGZvciBsaW5rIGRldGVjdGlvbgoJKiBwYXJzZXIuaDogYWRkZWQgbmJDaGFycyB0byBwYXJzZXIgY29udGV4dCwgbmVlZGVkIGZvciBjbGVhbnVwLgoJKiB4bWxtZW1vcnkuYzogcmVtb3ZlZCBhIG5hc3R5IGJ1ZyB3aGVuIG91dCBvZiBtZW0KCSogdmFsaWQuW2NoXTogYWRkaW5nIG5hbWVzcGFjZSBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgZGVjbAoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1kZWJ1Z2VudCBvcHRpb24KCSogZGVidWdYTUwuW2NoXTogYWRkZWQgeG1sRGVidWdEdW1wRW50aXRpZXMoKQoJKiBwYXJzZXIuYzogY2xlYW51cCwgYXZvaWRpbmcgdXNlIG9mIENVUl9QVFIgbGlrZSBwbGFndWUsIHVzaW5nCgkgIGJ1ZmZlcnMgaW5zdGVhZCwgdGhpcyB3YXMgcmVhbGx5IG5lZWRlZCwgdmFsaWRhdGlvbiB3YXMgYnJlYWtpbmcKCSAgaW4gc3RyYW5nZSB3YXlzIGR1ZSB0byB0aGF0LiBBZGRlZCB4bWxQYXJzZVN0cmluZ1BFUmVmZXJlbmNlKCkKCSAgYW5kIG90aGVyIHBhcnNpbmcgZnJvbSBzdHJpbmdzIGZ1bmN0aW9ucy4gRW50aXRpZXMgcHJvY2Vzc2luZwoJICBtb2RpZmllZCBhZ2FpbiwgYnV0IFBFUmVmIGFyZSBzdGlsbCBub3QgaGFuZGxlZCBjb3JyZWNseSBidXQKCSAgdW5sZXNzIHlvdSdyZSBFdmUgTWFsbGVyIHlvdSB3b24ndCBub3RpY2UgOi0pCgkqIEhUTUxwYXJzZXIuYzogbGFyZ2UgY2hhbmdlcyB0b3dhcmQgcmVsaWFiaWxpdHksIGFuZCBzd2l0Y2hlZCB0bwoJICBsb3dlcmNhc2UgaW50ZXJuYWwgdGFncywgWEhUTUwgaXMgbG93ZXJjYXNlLCBzbyBpdCB3aWxsIGhlbHAKCSAgdGhhdCBvdXRwdXQgaXMgY2xvc2VyIHRvIG5leHQgdmVyc2lvbi4KCSogZG9jLyogOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiwgaXQgaXMgbm93IGhvc3RlZCBhdAoJICBodHRwOi8veG1sc29mdC5vcmcvIChzYW1lIGJpdHMgSSBqdXN0IGJvdWdodCB0aGUgZG9tYWluIDotKQoJCgkKRnJpIERlYyAgMyAxMzo0NjozMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguaCwgU0FYLmMsIG1ha2VmaWxlLmFtOiBhZGRlZCBTQVguaCBtb3N0bHkgdXNlZnVsIGZvciB0aGUKCSAgICAgICAgIGRvYyBnZW5lcmF0aW9uCgkqIHBhcnNlci5jOiBmaXhlZCBidWdzICMzOTA4IGFuZCAjMzkzNyBhbmQgYSBtZW1vcnkgbGVhawoJICAgICAgICAgaW4gdGhlIFNBWCBBUEkKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYyBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGFwcGVhcnMgaW4gdGhlCgkgICAgICAgICBIVE1MIGZpbGVzCgpXZWQgRGVjICAxIDEwOjI3OjQ3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSBIVE1MdHJlZS5jLCBkZWJ1Z1hNTC5jLCBjb25maWd1cmUuaW4sIHhtbC1jb25maWcuaW46CgkgICAgIGFkZGVkIHRoZSBwYXRjaCBmcm9tIENhcmwgTnlnYXJkIDxjbnlnYXJkQGJlbGxhdGxhbnRpYy5uZXQ+CgkgICAgIHdoaWNoIGFsbG93IGltcHJlc3NpdmUgc3BlZWQgaW1wcm92ZW1lbnQgb24gZGF0YXNldCB3aXRoCgkgICAgIGxhcmdlIHRleHQgcGllY2VzLCBidXQgYXQgdGhlIGNvc3Qgb2YgYnJva2VuIGJpbmFyeQoJICAgICBjb21wYXRpYmlsaXR5IGFuZCBzbGlnaHRseSBiaWdnZXIgbWVtb3J5IHVzYWdlLgoJICAgICBDb25maWd1cmUgd2l0aCAtLXdpdGgtYnVmZmVycyB0byBhY3RpdmF0ZSB0aGVtLCB0aGV5CgkgICAgIGFyZSBwcm90ZWN0ZWQgd2l0aCBYTUxfVVNFX0JVRkZFUl9DT05URU5UIGRlZmluZS4KCSogZW50aXRpZXMuW2NoXSwgcGFyc2VyLmM6IGFkZGVkIHhtbENsZWFudXBQcmVkZWZpbmVkRW50aXRpZXMoKSwKCSAgICAgZ29hbCBpcyAwIG1lbW9yeSBsZWZ0IGFsbG9jYXRlZCBvbmNlIHBhcnNlciBpcyBubyBtb3JlIHVzZWQKCSogdGVzdERBVi5jLCB0ZXN0SFRNTC5jLCB0ZXN0U0FYLmMsIHRlc3RYUGF0aC5jOiBtYWtlIHN1cmUgd2UKCSAgICAgY2FsbCB4bWxDbGVhbnVwUGFyc2VyKCkgYW5kIHhtbE1lbW9yeUR1bXAoKQoKV2VkIE5vdiAyNCAxOTowMDowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geG1sSU8uW2NoXSBwYXJzZXIuYyB2YWxpZC5jOiBjb2RlIGNsZWFudXAgd2l0aCAtcGVkYW50aWMKCSogcGFyc2VyLltjaF0gZW5jb2RpbmcuW2NoXTogYWRkZWQgbWVtb3J5IGNsZWFudXAgcm91dGluZXMKCSogcGFyc2VyLmM6IGNsb3NpbmcgYnVnICMzNzg4CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MKClR1ZSBOb3YgMjMgMTE6MjM6NTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBjbG9zaW5nIGJ1ZyAzNzQ4LCBhZGRlZCB4bWxOZXdEb2NSYXdOb2RlKCksIAoJICAgICAgICAgICAgIHhtbE5ld1RleHRDaGlsZCgpIGFuZCB4bWxTZXRDb21wcmVzc01vZGUoKSBiZWhhdmlvdXIuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWNvbXByZXNzIG9wdGlvbgoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKRnJpIE5vdiAxOSAxODo0MToyOCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGJ1Z2ZpeGluZywgdGhlIGRhbW4gdGhpbmcgTVVTVCBub3QgY3Jhc2ggZXZlbgoJICAgICAgICAgICAgICAgIGlmIGdpdmVuIC9wcm9jL2tjb3JlIGFzIGlucHV0ICEKCSogZG9jL3htbC5odG1sIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpUaHUgTm92IDE4IDE0OjU3OjE4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBGaXhlZCBzb21lIHdyb25nbHkgc3BhY2UgY29sbGFwc2luZyBjb2RlIGR1ZSB0bwoJICAgICAgICAgICAgYSBtaXNyZWFkaW5nIG9mIHRoZSBzcGVjLgoJKiByZXN1bHQvKjogZml4ZWQgdGhlIG91dHB1dCBhY2NvcmRpbmdseQkgICAgCgpXZWQgTm92IDE3IDE4OjI4OjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVuY29kaW5nLmM6IGJ1ZyBmaXggYW5kIHR5cG9zCgkqIHhtbElPLltjaF0gcGFyc2VyLmM6IGZpcnN0IGJpdHMgdG93YXJkIHJlYWwgcHJvZ3Jlc3NpdmUgcGFyc2luZwoJKiBwYXJzZXIuYzogYWRkZWQgYXR0cmlidXRlIG5vcm1hbGl6YXRpb24gY2xvc2luZyBidWcgIzM1OTcKCSogdGVzdC9hdHQqIHJlc3VsdC9hdHQqIFNBWHJlc3VsdC9hdHQqOiB0ZXN0Y2FzZSBmb3IgYXR0cmlidXRlCgkgICAgbm9ybWFsaXphdGlvbgoKTW9uIE5vdiAxNSAxODo1MDo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IGNsb3NpbmcgYnVnICMzMTYzIGJ5IGFkZGluZyBleHRyYSBmbGFncyBmb3IgdGhlCgkgICAgICAgICAgICAgICAgY2MgY29tcGlsZXIgb24gSFAtVVgKCkZyaSBOb3YgMTIgMTc6NDE6MjAgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuW2NoXSA6IHJlbW92ZWQgYSB0eXBvIGFuZCBhbiBlbnVtZXJhdGVkIHR5cGUgYnVnIGluIHRoZQoJICAgICAgICAgICAgICAgeG1sQWRkRWxlbWVudERlY2woKSBmdW5jdGlvbgoJKiB0cmVlLmMgOiBJIGNoYW5nZWQgeG1sU2V0UHJvcCgpIGFuZCB4bWxOZXdQcm9wKCkgdG8gZG8gdGhlCgkgICAgY2FsbCB0byB4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCgpIHNvIHRoYXQgdGhlIGZ1bmN0aW9ucyAKCSAgICBOZXcsIFNldCBhbmQgR2V0IGFyZSBhdCB0aGUgc2FtZSBsZXZlbC4KCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBleHRyYSBtZW1vcnkgYWxsb2NhdGlvbiBidWcgZm9yCgkgICAgYXR0cmlidXRlcyBkZXRlY3RlZCBieSBzb21lb25lIHVzaW5nIGxpYnhtbCBpbiBlbWJlZGRlZCBzeXN0ZW1zIDotKQoKVGh1IE9jdCAyOCAxNzo0OToyNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5Lmg6IHR1cm5lZCBvZmYgbWVtIGRlYnVnIDotXAoKTW9uIE9jdCAyNSAxMjoxMzoyNSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGNsb3NlZCBidWcgIzI3ODQgYSBvbmUgbGluZSBmaXgsIGJ1dCB3b3J0aCBwdXNoaW5nCgkgICAgICAgICAgICBhIG5ldyByZWxlYXNlIG91dAogICAgICAgICogSFRNTHBhcnNlci5jOiBmaXhlZCBhdXRvLWNsb3NlIGJ1Z3Mgb24gbGlzdCBpdGVtcywgemVyb2luZwoJICAgICAgICAgICAgc29tZSBzdHJ1Y3R1cmVzLCBjb21tZW50cyBiZWZvcmUgYW5kIGFmdGVyIHRoZQoJCSAgICBtYWluIGVsZW1lbnQsIGFuZCBvdGhlciBuYXN0eW5lc3MKCSogSFRNTHRyZWUuYyB0cmVlLmM6IGFjY29tb2RhdGUgdGhlIGV4dGVuZGVkIEhUTUwgc3VwcG9ydGVkCSAgICAKCSogY29uZmlndXJlLmluOiBwdXNoaW5nIDEuNy40CgkqIHRlc3QvZW50OCBhbmQgcmVsYXRlZCBvdXRwdXRzIDogYWRkZWQgYSBuZXcgdGVzdCBmb3IgYnVnICMyNzg0CgkqIHRlc3QvSFRNTC93aXJlZC5odG1sIGFuZCByZWxhdGVkIG91dHB1dDogYSBuYXN0eSBIVE1MIGV4YW1wbGUKCSogTWFrZWZpbGUuYW06IGltcHJvdmVkIHRoZSB0ZXN0IHNjcmlwdHMKCSogZG9jcy8qIDogcmVyYW4gdGhlIGRvY3VtZW50YXRpb24gZXh0cmFjdG9yLCB1cGRhdGVkIHhtbC5odG1sCgpUaHUgT2N0IDE0IDEwOjI5OjU2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMsIEhUTUx0cmVlLmMsIHRyZWUuaDogY29tcGxldGVseSByZXZhbXBlZCB0aGUKCSAgICAgSFRNTHBhcnNlciBhbmQgZGVidWdnZWQgdGhlIEhUTUwgcmVsYXRlZCBjb2RlLiBIVE1MIGRvY3VtZW50cwoJICAgICBub3cgaGF2ZSB0aGVpciBvd24gdHlwZQoJKiBlbnRpdGllcy5jOiBkbyBub3QgZHVtcCAmYXBvczsgZm9yIEhUTUwgb3V0cHV0CgkqIHhtbG1lbW9yeS5jOiBpbXByb3ZlbWVudCwgYnJlYWtwb2ludCBtZWNoYW5pc20KCSogdGVzdEhUTUwuYzogYWRkZWQgLS1zYXggLS1yZXBlYXQgLi4uCgkqIE1ha2VmaWxlLmFtOiBpbXByb3ZlZCB0aGUgSFRNTCB0ZXN0cwoJKiB2YWxpZC5bY2hdOiBhZGRlZCB4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMgYW5kCgkgICAgICAgICAgICAgIHhtbFZhbGlkR2V0UG90ZW50aWFsQ2hpbGRyZW4KCSogdGVzdGVyLmM6IGFkZGVkIC0taW5zZXJ0IHRvIHRlc3QgdGhlIDIgbmV3IGZ1bmN0aW9ucwoJKiB0ZXN0Ly8qIHJlc3VsdC8vKiBTQVhyZXN1bHQvLyogOiByZWdyZXNzaW9uIHRlc3QgY2xlYW51cAoJICAgICAgICAgICAgICAgYW5kIGV4dGVuc2lvbi4KCSogZG9jL2h0bWwgOiBhZGRlZCBkb2MgZm9yIG5ldyBtb2R1bGVzIGdub21lLXhtbC14bWxtZW1vcnkuaHRtbCBhbmQKCSAgICAgICAgICAgICBnbm9tZS14bWwtbmFub2h0dHAuaHRtbAoKTW9uIE9jdCAxMSAxNDozMTo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtcyB3aXRoIHNvbWUgYXV0b2Nsb3NlIHRhZ3MKCSogdHJlZS5jOiBmaXhlZCBYTUwgb3V0cHV0IHByb2JsZW1zLiAKCSogcmVzdWx0LyogU0FYcmVzdWx0Lyo6IHVwZGF0ZSBvZiB0aGUgdGVzdHMgb3V0cHV0CgpTYXQgT2N0ICA5IDExOjAyOjU3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbTogQXJ0dXJvIHBhdGNoIGZvciB4bWxDb25mLnNoIHZlcnNpb24gaW5mbwoJKiBwYXJzZXIuYzogVGltIEpvc2xpbmcgcGF0Y2ggZm9yIHNpbmdsZSBxdW90ZWQgaXRlbXMKCSogdGVzdGVyLmM6IFRpbSBKb3NsaW5nIHBhdGNoIGZvciB0ZXN0ZXIgb3B0aW9ucyB1c2FnZQoJKiB0cmVlLmg6IGluZGVudCBjbGVhbnVwCgpGcmkgT2N0ICA4IDE2OjM1OjM3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmggOiBGaXhlZCBwcm9ibGVtcyB3aXRoIEhUTUwgcGFyc2luZwoJICAgIHJlcG9ydGVkIGJ5IEtyaXN0aWFuIEhvZ3NiZXJnIEtyaXN0ZW5zZW4gPGhvZ3NiZXJnQGRhaW1pLmF1LmRrPgoKRnJpIE9jdCAgOCAxMTozNzoxMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogUmFwaCBwYXRjaCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgQ09SQkEgZmllbGRzCgkqIHBhcnNlci5jLCB4cGF0aC5jLCAuLi46IG1vZGlmaWNhdGlvbiBvZiBkb2MgY29tbWVudHMKCSogeHBhdGguYyA6IGFsbG93IHNwYWNlcyBpbiB4cGF0aCBleHByZXNzaW9ucwoKTW9uIFNlcCAyNyAxMDoxNjo0MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5Lmg6IHR1cm5pbmcgb2ZmIG1lbW9yeSBkZWJ1ZyA6LSgKClN1biBTZXAgMjYgMTM6MTY6NTQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIDogYWRkZWQgeG1sU0FYVXNlclBhcnNlRmlsZSgpIGFuZCB4bWxTQVhVc2VyUGFyc2VNZW1vcnkoKQoJICAgICAgICAgICAgICAgIGJldHRlciBTQVggaW50ZXJmYWNlcy4KCSogdGVzdFNBWC5jOiB1c2VzIHRoZSBuZXcgU0FYIHJvdXRpbmUsIGF2b2lkIGZldGNoaW5nIGFueSByZW1vdGUKCSAgICAgICAgICAgICBlbnRpdHkuCgkqIGNvbmZpZ3VyZS5pbjogMS43LjIKCkZyaSBTZXAgMjQgMTY6MDE6MDEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgVVJMCgkqIGRvYy94bWwuaHRtbDogaW1wcm92ZWQgdGhlIGRvY3VtZW50YXRpb24gZnJvbnQtZW5kCgpGcmkgU2VwIDI0IDAxOjA2OjM2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jOiBjb25kaXRpb25uZWQgcmVmZXJlbmNlcyB0byBzbnByaW50ZiB3aXRoIEhBVkVfU05QUklOVEYKCkZyaSBTZXAgMjQgMDA6MTU6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgYWxwaGEgY29tcGlsZSBwcm9ibGVtCgkqIHBhcnNlci5bY2hdOiBjaGFuZ2VkIGVycm5vIHRvIGVyck5vIGluIHRoZSBwYXJzZXIgY29udGV4dCA6LSgKCSogKi5bY2hdOiBjaGFuZ2VkIENIQVIgdG8geG1sQ2hhciB0byBhdm9pZCBwcm9ibGVtIG9uIFdJTjMyCgkqIGRvYy94bWwuaHRtbDogY2hhbmdlZCBDSEFSIHRvIHhtbENoYXIKCSogZG9jL2h0bWwvKjogcmVjb21waWxlZCB0aGUgZG9jdW1lbnRhdGlvbgoJKiBjb25maWd1cmUuaW46IDEuNy4xCgpXZWQgU2VwIDIyIDExOjQwOjMxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaDogbW9kaWZpZWQgdGhlIHBhcnNlciBjb250ZXh0IHN0cnVjdCB0byByZWdhaW4gMS40LjAKCSAgICAgICAgICAgIGJpbmFyeSBjb21wYXRpYmlsaXR5CgkqIHBhcnNlci5jLCB4bWwtZXJyb3IuaDogYWRkZWQgZXJybm8gb3QgdGVoIGNvbnRleHQgYW5kIGRlZmluZWQKCSAgICAgICAgICAgIGEgc2V0IG9mIGVycm9ycyB2YWx1ZXMgd2l0aCB1cGRhdGUgb2YgZXJybm8KCSogbmFub2h0dHAuW2NoXTogbWluaW1hbGlzdCBIVFRQIGZyb250LWVuZCBmb3IgZmV0Y2hpbmcgcmVtb3RlCgkgICAgICAgICAgICBEVERzIGFuZCBlbnRpdGllcwoJKiAqLmgsICouYzogY29tcGxldGUgY2xlYW51cCBvZiB0aGUgdXNlIG9mIGNvbmZpZy5oIGFuZCBpbmNsdWRlCgkgICAgICAgICAgICBwcm90ZWN0aW9uIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzZXR1cC4KCSogb3ZlcmFsbGwgZGVidWdnaW5nLCBtYWludGVuYW5jZSBhbmQgYnVnLWZpeGluZyBvbiBhbGwgbW9kdWxlcwoJKiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgkqIHJlYWR5IGZvciAxLjcuMAoKV2VkIFNlcCAgOCAyMjo0NjoxNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIDogY2xlYW51cAoJKiBTQVguYyB2YWxpZC5jIHZhbGlkLmg6IGFkZGVkIElEL0lEUkVGIGNoZWNraW5nCgkqIHRyZWUuYyB0cmVlLmg6IGV4dGVuZGVkIGRvYyBzdHJ1Y3R1cmUgZm9yIHJlZnMKCSogY29uZmlndXJlLmluOiAxLjYuMgoJKiBwYXJzZXIuYzogcGF0Y2hlZCBidWcgaW4gU0FYIHVzZXIgYXJnIGNhbGwKCSogcGFyc2VySW50ZXJuYWxzLmg6IHBhdGNoZWQgbWlzc2luZyBjbG9zZSBpbiBDKysgd3JhcHBpbmcKCSogdGVzdFhQYXRoLmMgeHBhdGguYyB4cGF0aC5oOiBwcmVwYXJlZCBmb3IgZXh0ZW5zaWJpbGl0eSwKCSAgZXNwZWNpYWxseSB1cGNvbWluZyBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbi4KCSogZG9jL3htbC5odG1sOiBhdWdtZW50ZWQsIHR5cG8KClNhdCBTZXAgIDQgMjI6NDg6MDUgQ0VTVCAxOTk5IFRpbXVyIEJha2V5ZXYgPG1jQGJhdC5ydT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogcmVwbGFjZWQgImluc3RhbGwgLWQgIiB3aXRoICJta2luc3RhbGxkaXJzIiAtCglub3QgYWxsIGludm9jYXRpb25zIG9mIGluc3RhbGwgdW5kZXJzdGFuZCAtZC4KClNhdCBTZXAgIDQgMjI6MjA6MDcgQ0VTVCAxOTk5IFRpbXVyIEJha2V5ZXYgPG1jQGJhdC5ydT4KCgkqIE1ha2VmaWxlLmFtOiBwcmVwZW5kIGFsbCB0aGUgdGVzdCogY2FsbHMgd2l0aCAkKHRvcF9idWlsZGRpcikgLQoJdG8gbWFrZSAnY2hlY2snIHdvcmtzLCB3aGVuIGJ1aWxkZGlyICE9IHNyY2Rpci4KClNhdCBTZXAgIDQgMjA6MjU6NDYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCkZyaSBTZXAgIDMgMDA6MDE6MDggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5bY2hdIE1ha2VmaWxlLmFtICA6YWRkZWQgYSBtZW1vcnkgd3JhcHBlciB0byBjaGFzZQoJICAgICAgbm90IGRlYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MKCSogKi5jIDogcmVwbGFjZXMgYWxsIGNhbGxzIHRvIG1hbGxvYygpIGZyZWUoKSBhbmQgcmVhbGxvYygpIHRvCgkgICAgICB0aGUgd3JhcHBlciBmdW5jdGlvbnMvbWFjcm9zCgkqIHRyZWUuYyA6IHJlbW92ZWQgbWVtb3J5IGxlYWtzIGR1ZXMgdG8gY2FsbGluZyB4bWxGcmVlTm9kZSgpCgkgICAgICBpbnN0ZWFkIG9mIHhtbEZyZWVOb2RlTGlzdCgpCgpXZWQgU2VwICAxIDE0OjE1OjA5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGNvcnJlY3RlZCBhIHN0dXBpZCBidWcgbGVhZGluZyB0byBjb3JlIGR1bXAgYXQKCSAgICAgICAgICAgICAgICB0cmVlIGRlYWxsb2NhdGlvbi4gUmVtb3ZlZCB3YXJuaW5ncyBpbmRpY2F0ZWQgYnkKCQkJU3RlcGhhbmUuQ29udmVyc3lAbHJpLmZyCgkqIGVudGl0aWVzLmM6IEZpeGVzIFlldCBBbm90aGVyIFN0dXBpZCBCdWcsIGVudGl0aWVzIHdlcmUgbm90CgkgICAgICAgICAgICAgIGxvb2tlZCBmb3IgaW4gdGhlIGV4dGVybmFsIHN1YnNldAoKTW9uIEF1ZyAzMCAxMzoyMjoyNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgdmFsaWQuW2NoXSB4cGF0aC5jOiBwYXRjaGVkIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHJlcG9ydGVkCgkgIG9uIFNHSSBieSBTdGVwaGFuZS5Db252ZXJzeUBscmkuZnIKClN1biBBdWcgMjkgMjI6Mjc6MjkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFsbCAuaCA6IGNoYW5nZWQgdGhlIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBpbmRlbnQgYXMgaW4gZ3RrCgkqIG1vc3QgLmMgOiB3b3JraW5nIG9uIHJlZHVjaW5nIHRoZSBUT0RPcyBpbiB0aGUgY29kZQoJKiBtb3N0IC5jIDogY2xlYW51cCB0aG91Z2ggLXBlZGFudGljIGFuZCBJbnN1cmUrKwoJKiBpbXByb3ZlbWVudHMgb24gdmFsaWRhdGlvbiBJRCBjaGVja2luZ3MuCgkqIHRyZWUuW2NoXSBTQVguYzogYWRkZWQgc3VwcG9ydCBmb3IgbmFtZXNwYWNlIG9uIGF0dHJpYnV0ZXMgIzIwMjIKCSogeG1sLWNvbmZpZy5pbjogY2xvc2VkICMxODEwCgpNb24gQXVnIDE2IDAzOjI3OjM4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHZhbGlkLmMsIHZhbGlkLmg6IG1vcmUgd29yayBvbiB2YWxpZGl0eSwgSURzCgkqIHhwYXRoLmM6IGFkZGVkL2ZpeGVkIGNvbXBhcmlkb24gYW5kIGVxdWxpdHksIGFkZGVkIGEgbmV3IGlzaW5mCgkgIGRlZmluaXRpb24gZm9yIEFJWAoKU3VuIEF1ZyAxNSAyMToxNToxNyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGNvcnJlY3RlZCBtaXNzaW5nIHhtbENvbmYuc2ggaW4KCSAgdGhlIGRpc3RyaWJ1dGlvbiBkdWUgdG8gYSBjdXQnbiBwYXN0ZSBlcnJvciBhdCBsYXN0IGNvbW1pdAoKVHVlIEF1ZyAxMCAyMDoyODowOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiB1cGdyYWRlZCB0byB2ZXJzaW9uIDEuNC4wCgkqIHZhbGlkLltjaF0sIFNBWC5jLCBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuaCAuLi4KCSAgQmlnIHVwZGF0ZSwgYWRkZWQgYSBsYXJnZSBwYXJ0IG9mIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MsCgkgIGl0IHNob3VsZCBiZSB1c2FibGUsIGJ1dCBzb21lIHBhcnRzIGFyZSBtaXNzaW5nCgkqIHhwYXRoLmM6IGltcHJvdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiB3LnIudC4gcm9vdC4KCSogTWFrZWZpbGUuYW06IGFkZGVkIG1vcmUgdGVzdHMKCSogdGVzdCBhbmQgcmVzdWx0IHRyZWVzOiBhZGRlZCBhIGxvdCBvZiB0ZXN0cwoJKiBsaWJ4bWwuc3BlYy5pbjogZXhwb3J0IGxpYnhtbC5zby4wIGFuZCBsaWJ4bWwuc28uMQoKVHVlIEF1ZyAxMCAxMTozMzo0MSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogQWRkZWQgYW4gSEFDS0lORyBmaWxlCgpUdWUgSnVsIDI3IDIxOjQzOjAwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogeHBhdGguW2NoXSA6IGltcHJvdmVtZW50cyBhbmQgZGVidWcgb2YgdGhlIFhQYXRoIGltcGxlbWVudGF0aW9uCiAgICAgICAgKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jIDogbW9kaWZpZWQgdGhlIHBhcnNlcnMgdG8gYmUgcHJvZ3Jlc3NpdmUKCSogdHJlZS5bY2hdIDogZXh0ZW5kZWQgdGhlIEJ1ZmZlciBwcm9taXRpdmVzCgkqIHhtbElPLltjaF0gOiBhZGRlZCBiYXNpYyBJL08gcm91dGluZXMgcHJvdmlkaW5nIHByb2dyZXNzaXZlCgkgIHBhcnNpbmcgYW5kIHJlYWR5IGZvciBJMThOIGNvbnZlcnNpb24gcGx1Z2lucwoJKiBTQVhyZXN1bHQvKiA6IHRoZSBTQVggY2FsbGJhY2sgc2VxdWVuY2UgbWF5YmUgc2xpZ2h0bHkgZGlmZmVyZW50CgkgIG5vdwoJKiB0ZXN0Ki5jIDogaW1wcm92ZWQvdXBkYXRlZCB0aGUgdGVzdHMgcHJvZ3JhbXMKCSogZG9jLyogOiByZWNvbXBpbGVkIHRoZSBkb2NzLgoKMTk5OS0wNy0yNiAgTWljaGFlbCBNZWVrcyAgPG1pY2hhZWxAZWRlbnByb2plY3Qub3JnPgoKCSogdHJlZS5oOiBBZGQgY29uc3QgdG8gJ2NvbnRlbnQnIGluIHhtbE5ld0RvY05vZGUsIHhtbE5ld0NoaWxkCgoJKiB0cmVlLmM6IERpdHRvLgoKVGh1IEp1bCAxNSAxNjoxNzoxNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiB1cGdyYWRlZCB0byB2ZXJzaW9uIDEuNC4wCgkqIHhwYXRoLmMsIHhwYXRoLmgsIHRlc3RYUGF0aC5jLCBtYWtlZmlsZS5hbTogYWRkZWQgY29kZSBmb3IgdGhlIFhQYXRoCgkgIGRyYWZ0IGZyb20gVzNDLiBXaWxsIGJlIHVzZWQgYnkgWFBvaW50ZXIsIFhsaW5rLCBYU0wsIGFuZCBwb3NzaWJseQoJICBYTUwgcXVlcnkgbGFuZ3VhZ2UsIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCBmb3IgbW9yZSBkZXRhaWxzLgoJKiBwYXJzZXIuYywgcGFyc2VyLmg6IGFkZGVkIENIQVIqIHJlbGF0ZWQgc3RyaW5nIGZ1bmN0aW9ucyBmb3IgWFBhdGgKCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5jOiBhIGJpdCBvZiBjbGVhbnVwIG9uIGVudGl0aWVzLgoJKiBkb2MvZ25vbWUteG1sLnNnbWwsIGRvYy9odG1sLyogOiBhZGRlZCBYUGF0aCBhbmQgSFRNTCBkb2N1bWVudGF0aW9uLAoJICByZWJ1aWxkIHRoZSBkb2NzLgoJKiBNYWtlZmlsZS5hbSwgdGVzdC9YUGF0aC8qLCByZXN1bHQvWFBhdGgvKjogYWRkZWQgYW4gWFBhdGh0ZXN0cyB0YXJnZXQKCSAgYW5kIHJlZ3Jlc3Npb24gdGVzdGluZyBjYXBhYmlsaXRpZXMgZm9yIFhQYXRoLgoKTW9uIEp1bCAxMiAxMjozNjozOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gRWxsc29uIDxlbGxzb25AbHVjZW50LmNvbT4KCSAgY2xvc2luZyBidWcgIzE2NDYKCk1vbiBKdWwgMTIgMTE6MDQ6NDQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtLCBleGFtcGxlL01ha2VmaWxlLmFtOiBjbG9zZWQgYnVnICMxNjgzCgpTdW4gSnVsIDExIDE4OjE2OjM0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBleGFtcGxlL01ha2VmaWxlLmFtLCBjb25maWd1cmUuaW46IGFkZGVkIHRoZSBtYWtlZmlsZSBmb3IgdGhlCgkgIGdqb2JyZWFkIGV4YW1wbGUKClNhdCBKdWwgMTAgMTQ6MTk6MTEgQ0VTVCAxOTk5IFRvbWFzeiBLs29jemtvICA8a2xvY3pla0BwbGQub3JnLnBsPgoKICAgICAgICAqIGRvYy9NYWtlZmlsZS5hbToKICAgICAgICAtIGZpeCB3aGljaCBhbGxvdyAibWFrZSBpbnN0YWxsIERFU1RESVI9PC9pbnN0YWxsL3ByZWZpeD4iLgoKRnJpIEp1bCAgOSAxMjoxMDoyNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9obiBFbGxzb24gPGVsbHNvbkBsdWNlbnQuY29tPgoJICB3aGljaCBmaXhlZCBhIHByb2JsZW0gb24gdGhlIGZpbGUgcmVhZGluZy1jb2RlLgoKV2VkIEp1bCAgNyAwOToyODo0MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5bY2hdOiBtb3JlIHdvcmsgZm9yIEhUTUwgcGFyc2luZyBhbmQKCSAgb3V0cHV0LgogICAgICAgICogTWFrZWZpbGUuYW0sIHRlc3QvSFRNTC8qLCByZXN1bHQvSFRNTC8qOiBhZGRlZCBIVE1MdGVzdHMgdGFyZ2V0ZXN0SFRNTHQKCldlZCBKdWwgIDcgMDA6MjU6NDIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oIDogT29wcyByZW1vdmVkIHRoZSBiaW5hcnkgY29tcGF0aWJpbGl0eSBwcm9ibGVtCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuaCA6IE1vcmUgd29yayBvbiB0aGUgSFRNTCBwYXJzZS9kdW1wCgkqIHBhcnNlci5jLCBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2hlcyBmb3IgcmVhZGluZyBmcm9tIHN0ZGluCgpNb24gSnVsICA1IDE4OjQ1OjMxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYywgdmFsaWQuYzogY2xlYW51cCBidWcgIzE1OTEKCSogY29uZmlndXJlLmluOiBjbGVhbnVwIGJ1ZyAjMTU5MgoJKiBIVE1McGFyc2VyLltjaF0sIHRlc3RIVE1MLmM6IHN0YXJ0ZWQgYWRkaW5nIGFuIEhUTUwgcGFyc2VyIHVzaW5nCgkgIHRoZSBzYW1lIHRyZWUgYmFjay1lbmQuIEhlbmNlIGdkb21lIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBpdC4KCSogZG9jL01ha2VmaWxlLmFtOiBjbG9zZSBidWcgIzYxNwoKU2F0IEp1biAyNiAyMzozNjozOCBFRFQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogYWxsb2N0YXRlIGEgcGVyIHBhcnNlciBjb250ZXh0IFNBWCBpbnRlcmZhY2UgYmxvY2sKClR1ZSBKdW4gMjIgMjM6NDY6MzIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHJlbGVhc2VkIDEuMy4wIHdpdGggeG1sRW5jb2RlRW50aXRpZXMgcmVzdG9yaW5nIG9sZCBiZWhhdmlvdXIKCSAgYW5kIHhtbEVuY29kZUVudGl0aWVzUmVlbnRyYW50IHdpdGggdGhlIGNvcnJlY3Qgb25lIDotXAoKTW9uIEp1biAyMSAxNDowNzo1MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29tbWl0IG9mIG15IGludGVybmFsIFhNTCBiYXNlIGNoYW5nZXMsIHF1aXRlIGEgbG90IG9mCgkgIGNoYW5nZXMsIGNsZWFudXBzLCBiZXR0ZXIgZW50aXRpZXMgc3VwcG9ydCwgZnJhbWV3b3JrIGZvcgoJICBuZXcgSS9PIGFuZCBjaGFyc2V0IGRldGVjdGlvbiBhbmQgaGFuZGxpbmcKCSogRml4ZWQgdGhlIGNvbmZpZ3VyZS9NYWtlZmlsZSBzdHVmZiB0byBnZW5lcmF0ZSBzaGFyZWQgbGlicwoJICB3aXRoIHRoZSBwcm9wZXIgdmVyc2lvbiBpbmZvLCBzbyB3ZSBqdW1wZWQgb24gcmV2IGZyb20KCSAgMC4wLjAgdG8gMS4yLjAgISBUaGUgYmluYXJ5IGludGVyZmFjZXMgaGF2ZSBiZWVuIGJyb2tlbiwKCSAgeG1sRW5jb2RlRW50aXRpZXMoKSByZXN1bHQgbmVlZCB0byBiZSBmcmVlZCBub3csIGFuZCBhIHN0cmluZwoJICB4bWxQYXJzZXJWZXJzaW9uIHByb3ZpZGUgdGhlIGN1cnJlbnQgbGlicmFyeSB2ZXJzaW9uLgoKVHVlIEp1biAxNSAxNDoyNDoxOSAxOTk5ICBSYXBoIExldmllbiAgPHJhcGhAYWNtLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZmZlciBvdmVycnVuIGZvciB3aGVuIHlvdSBoYXZlIGEgdmVyeSBsb25nCglhdHRyaWJ1dGUgd2l0aCBubyBlbnRpdGllcyBpbiBpdC4KCk1vbiBKdW4gMTQgMDA6MTc6NTAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGV4YW1wbGUgZGlyZWN0b3J5CgkqIGFkZGVkIGV4YW1wbGUvZ2pvYnMueG1sIGdqb2JyZWFkLmMsIHN0aWxsIG5lZWQgYSBNYWtlZmlsZS5pbgoKV2VkIEp1biAgMiAxOTo0MDo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUmVsZWFzZSBvZiBsaWJ4bWwtMS4xLCBuZWFybHkgZXZlcnl0aGluZyBoYXMgYmVlbiB0b3VjaGVkIGZvcgoJICB0aGlzLgoJKiBBZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCSogVXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKU2F0IE1heSAyOSAxMzozNDo0MiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiB1bmlmaWVkIHRoZSBYTUxfTk9fQ09SQkEgZGVmaW5lcy4KCSogcGFyc2VyLmMgZW5jb2RpbmcuW2NoXTogc3RhcnRlZCBwbHVnZ2luZyBpbiBjaGFyIGVuY29kaW5nIGRldGVjdGlvbgoKRnJpIE1heSAyOCAyMjo1ODo0MiBFRFQgMTk5OSBNYW5pc2ggVmFjaGhhcmFqYW5pIDxtdmFjaGhhckB2Z2VyLnJ1dGdlcnMuZWR1PgoKCSogdHJlZS5jOiAoeG1sU2F2ZUZpbGUpIC0gcmVtb3ZlZCBkb3VibGUgY2FsbCBvZiB4bWxDb250ZW50RHVtcC4gIAoJICBBbHNvIGZyZWVkIGFsbG9jYXRlZCBidWZmZXIuCgpXZWQgQXByIDIxIDIyOjA3OjM1IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBlbnRpdGllcy5bY2hdIHZhbGlkLltjaF0gOiByZW1vdmVkIHRoZSBtYWluCgkgIHJlZW50cmFuY3kgcHJvYmxlbSBhdCBwcmludGluZy4gT25lIGlzIGxlZnQgaW4gZW50aXRpZXMuYywgdG8KCSAgcmVtb3ZlIEFTQVAKCSogdGVzdFNBWC5jIDogYWRkZWQgYSB0ZXN0IGV4YW1wbGUgc2hvd2luZyB0aGUgdXNlIG9mIHRoZSBTQVggCgkgIGludGVyZmFjZSBpZiBvbmUgZG9lc24ndCB3YW50IHRvIGJ1aWxkIHRoZSBET00gdHJlZS4KCSogaHRtbC9nbm9tZS14bWwtKi5odG1sIGh0bWwvaW5kZXguc2dtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCk1vbiBBcHIgIDUgMTQ6MTQ6NDAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSBTQVguYywgcGFyc2VySW50ZXJuYWxzLmggdmFsaWQuW2NoXToKCSAgbGFyZ2UgcmV2YW1waW5nIG9mIHRoZSBwYXJzZXIgdG8gdXNlIFNBWCBjYWxsYmFja3MKCSAgaHR0cDovL3d3dy5tZWdnaW5zb24uY29tL1NBWC8gKG9yIGF0IGxlYXN0IGEgQyBsaWtlIGludGVyZmFjZQoJICBhIGxhIEV4cGF0KS4gSXQncyBub3cgcG9zc2libGUgdG8gc2V0IHVwIHlvdXIgb3duIGNhbGxiYWNrcwoJICBhbmQgdGhlIHBhcnNlciB3aWxsIG5vdCBidWlsZCBhIERPTSB0cmVlLgoJKiB0ZXN0LyogcmVzdWx0Lyo6IHVwZGF0ZWQgdGhlIHRlc3Qgc3VpdGUsIEkgZmluYWxseSByZW1vdmVkCgkgIHRoZSBvbGQgTmFtZXNwYWNlIGRyYWZ0IHN1cHBvcnQgKFBJIGJhc2VkKS4KCkZyaSBBcHIgIDIgMTc6NTc6MzIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCB0ZXN0IHJlc3VsdCB0byBFWFRSQV9ESVNUIGZvciBtYWtlIHRlc3RzCgpXZWQgTWFyIDI0IDIxOjM3OjAyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXJJbnRlcm5hbHMuaDogbW92ZWQgdGhlIGNoYXJzIG1hY3JvIGRlZmluaXRpb25zCgkgIHRvIHBhcnNlckludGVybmFscy5oCgkqIHBhcnNlci5jLCBlcnJvci5jOiBhcHBsaWVkIHBhdGNoZXMgZnJvbSAiS251dCDFa2Vzc29uIgoJICA8a2FAczIuY2hhbG1lcnMuc2U+IGZvciBjbGVhbiBjb21waWxhdGlvbiB1bmRlciBNU1ZDIDYgOi1vCgpUdWUgTWFyIDIzIDExOjEwOjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuaW4gOiBhcHBsaWVkIHBhdGNoIHRvIG1ha2UgLS12ZXJzaW9uIHdvcmsKCjE5OTktMDMtMDUgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoY2hlY2stbG9jYWwpOiBBbGlhcyBmb3IgYHRlc3RzJyB0YXJnZXQuICBUaGlzIHdpbGwKCWNhdXNlIGBtYWtlIGNoZWNrJyB0byBkbyB0aGUgcmlnaHQgdGhpbmcuCgkodGVzdHMpOiBEb24ndCBydW4gdGVzdHMgaW4gc3JjZGlyLiAgQWxzbywgcmVwbGFjZWQgY2FsbHMgdG8KCWJhc2VuYW1lIHdpdGggYSBgc2VkJyAiZXF1aXZhbGVudCIuCgpGcmkgTWFyICA1IDA3OjIzOjUzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbmFtZWQgZXJyb3IuaCB0byB4bWwtZXJyb3IuaCwgY29ycmVjdGVkIE1ha2VmaWxlLmFtIHRvIGxpc3QKCSAgaXQgaW4gdGhlIGhlYWRlciBhbmQgbm90IHRoZSBzb3VyY2VzLCB1cGRhdGVkIHRoZSBkb2MuCgkgIFRoYW5rcyB0byBUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lm5vZGFrLmVkdT4gZm9yCgkgIHBvaW50aW5nIHRoaXMgb3V0LgoKTW9uIE1hciAgMSAxMzoyNzoxNyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oOiBtZW1vcnkgbGVhayBodW50aW5nLAoJICBleHBvcnRlZCB0aGUgaW5wdXRTdHJlYW0gcm91dGluZXMuCgkqIGRvYy9odG1sLyogOiB1cGRhdGVkIGFjY29yZGluZ2x5CgpTdW4gRmViIDI4IDIyOjUxOjMzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXIuaCwgcGFyc2VySW50ZXJuYWxzLmg6IGFkZGVkIGEgZmV3IGV4dHJhCgkgIGludGVybmFsIGNhbGxzIHRvIGFsbG9jYXRlIGFuZCBmcmVlIHBhcnNlciBjb250ZXh0cyAuLi4KCSogZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYWNjb3JkaW5nbHkKClRodSBGZWIgMjUgMTE6NTI6MjQgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbSwgZG9jL21ha2VmaWxlLmFtIDogR2VuZXJhbCBjaGFuZ2VzIGZvcgoJICAxLjAuMCByZWxlYXNlIGFuZCBpbmNsdWRpbmcgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uCgpUaHUgRmViIDI1IDA5OjQ0OjUyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG1ha2VmaWxlLmFtIDogYWRkZWQgcGFyc2VySW50ZXJuYWxzLmgsIG9vcHMuCgpNb24gRmViIDIyIDExOjI0OjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlckludGVybmFscy5oOiBhZGRlZCB0aGlzIGhlYWRlciBnaXZpbmcgYWNjZXNzIHRvIHRoZSBwYXJzZXIKCSAgaW50ZXJuYWwgZnVuY3Rpb25zLgoJKiBkb2MvTWFrZWZpbGUuYW0gOiBhZGRlZCBhIHJlYnVpbGQgdGFyZ2V0IHdoaWNoIHJlYnVpbGRzIHRoZSBmdWxsCgkgIHNldCBvZiBkb2N1bWVudGF0aW9ucwoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gdmFsaWQuW2NoXTogc2VyaW91cyB1cGRhdGVzIHcuci50LiBwYXJzaW5nCgkgIHRoZSBpbnRlcm5hbCBzdWJzZXQuIAoJKiAqLmMgKi5oOiBtb2RpZmljYXRpb25zIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbiB1c2luZwoJICBndGstZG9jLCBjbGVhbnVwIG9mIGZ1bmN0aW9ucyBibG9ja3MsIHJlb3JnYW5pc2F0aW9uIG9mIHN0cnVjdAoJICBkZWNsYXJhdGlvbnMuCgpUdWUgRmViIDE2IDE3OjI3OjI5IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtLCBzcGVjLCBkb2MvTWFrZWZpbGUuYW0gOiB1cGdyYWRpbmcgdG8gMC45OS44LCBmaXhpbmcKCSAgdGhlIHRhciBhbmQgc3BlYyBmaWxlIHRvIGluY2x1ZGUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jLgoKMTk5OS0wMi0xMyAgTnVubyBGZXJyZWlyYSAgPG5tcmZAcm5sLmlzdC51dGwucHQ+CgoJKiBkb2MvLmN2c2lnbm9yZTogQWRkZWQgdGhpcyBmaWxlLgoKTW9uIEZlYiAgOCAxOToyNzo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldFByb3AgdG8gcmV0dXJuICIiIHdoZW4gdGhlIGF0dHJpYnV0ZQoJICBleGlzdHMsIGV2ZW4gaWYgdGhlIG5vZGUtbGlzdCBpcyBOVUxMLgoKTW9uIEZlYiAgOCAxNjoxMDoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYW4gZXJyb3Igb3V0cHV0dGluZyBlbXB0eSBhdHRyaWJ1dGUgdmFsdWVzLgoJKiBNYWtlZmlsZS5hbSBhbmQgZG9jL21ha2VmaWxlLmFtOiBoYXZlIGJlZW4gdXBkYXRlZCBkdXJpbmcgdGhlCgkgIHdlZWstZW5kLiBTb3JyeSBmb3IgYW4gZW1wdHkgQ1ZTIGxvZywgSSBnb3QgYSBzaGVsbCBwcm9ibGVtLgoKTW9uIEZlYiAgMSAxMjoxMDoxMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmg6IGNsZWFuZWQgdXAgdXNpbmcgZW51bXMgaW5zdGVhZCBvZiBkZWZpbmVzCgkqIHBhcnNlci5jLCB2YWxpZC5bY2hdOiBtb3JlIHdvcmsgb24gcGFyc2luZy9vdXRwdXQgb2YgZWxlbWVudAoJICBkZWNsYXJhdGlvbnMKClN1biBKYW4gMzEgMjI6MDY6NDggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuW2NoXSwgdHJlZS5jLCBwYXJzZXIuYyA6IG1vcmUgd29yayB0b3dhcmQgZnVsbCBwYXJzaW5nCgkgIG9mIFhNTCBEVERzLgoJKiBSRUFETUU6IGFkZGVkIGluZm9ybWF0aW9ucyBhYm91dCBtYWlsaW5nLWxpc3QgYW5kIG9uLWxpbmUKCSAgZG9jdW1lbnRhdGlvbgoKMTk5OS0wMS0yNyAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoWE1MX0lOQ0xVREVESVIpOiBVc2UgLUkgbm90IC1MIGZvciBpbmNsdWRlcy4KClN1biBKYW4gMTcgMjA6MDY6MzYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHRyZWUuW2NoXSA6IG1vcmUgd29yayB0b3dhcmQgY29uZm9ybWFuY2UgdGVzdGluZywKCSAgYWRkZWQgYSBsYXN0IGVsZW1lbnQgdG8gYWNjZWxlcmF0ZSBwYXJzaW5nIG9mIHZlcnkgZmxhdCBzdHJ1Y3R1cmVzCgkgIHN0YXJ0ZWQgd29ya2luZyBvbiBpbnRlcm5hbCBzdWJzZXQgRWxlbWVudCBjb250ZW50IGRlY2xhcmF0aW9uLgoJKiB2YWxpZC5bY2hdIDogZmlyc3QgY3V0IGF0IGFkZGluZyBjb2RlIHRvd2FyZCB2YWxpZGF0aW9uLgoJKiBwcmV2aW91cyBjaGFuZ2VzIGhhZCBhbHNvIHNtYWxsIGltcGFjdCBvbiBtb3N0IGZpbGVzLCBlc3BlY2lhbGx5CgkgIHRoZSBjb25mb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIEphbWVzIENsYXJrIHRlc3Qgc3VpdGUuCgpTdW4gSmFuIDE3IDE0OjQ1OjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3QvKiA6IHVwZGF0ZWQgdGhlIGV4YW1wbGVzLCBtb3N0IG9mIHRoZW0gd2VyZSBub3Qgd2VsbAoJICAgICAgICAgICBmb3JtZWQgKGh1bW0pLCBhbmQgYWRkZWQgcmRmMi4KCSogcmVzdWx0LyogOiByZXN1bHRpbmcgY2hhbmdlcyBpbiB0aGUgb3V0cHV0LgoKU3VuIERlYyAgNiAxMzowNjo1OCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB4bWxHZXRQcm9wIG9uIE5VTEwgdmFsdWVzLgoKU2F0IERlYyAgNSAxMjoyNTowOSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IHBhdGNoZWQgYSBidWcgaW4gdGhlIGdlbmVyYXRpb24gb2YgZW1wdHkgYXR0cmlidXRlcwoKRnJpIE5vdiAyNyAwMTozNjo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5bY2hdLCB0cmVlLltjaF0sIHRlc3Rlci5jOiBhZGRlZCBjb3B5IGludGVyZmFjZXMKCSAgZm9yIG5vZGUvdHJlZXMvZG9jdW1lbnRzLy4uLiBCaWdnZXN0IHByb2JsZW0gaXMgbmFtZXNwYWNlCgkgIHN1cHBvcnQgd2hlbiBjb3B5aW5nIHN1YnRyZWVzLgoKU3VuIE5vdiAxNSAxOTo1OTo0NyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYzogaW1wcm92ZSBlbnRpdGllcyBhbmQgY2hhciByZWYgZW5jb2RpbmcsCgkgIGFuZCBjbGVhbnVwcyBvZiBlcnJvciBtZXNzYWdlcy4KCkZyaSBOb3YgMTMgMTM6MDM6MTAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmM6IHNpbXBsZSBidWcgaHVudGluZyBkb25lIGR1cmluZyBycG0yaHRtbCBhbmQKCSAgcnBtZmluZCBpbnRlZ3JhdGlvbi4KClN1biBOb3YgIDggMTM6MTE6MDcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IEFkZGVkIGludGVyZmFjZXMgYWxsb3dpbmcgdG8gc3BlY2lmeSBhIFNBWAoJICBoYW5kbGVyIGJlZm9yZSBwYXJzaW5nLgoKU3VuIE5vdiAgOCAwOTozOToxNyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogcmVkaXJyZWN0IGFsbCBlcnJvcnMgcmVwb3J0aW5nIHRocm91Z2ggdGhlIFNBWAoJICBlcnJvciBmdW5jdGlvbgoKV2VkIE5vdiAgNCAxNDoyMTo1NCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jOiByYXRoZXIgdXNlIEhBVkVfU05QUklOVEYgYW5kIG5vdCBkZXBlbmQgb24gZ2xpYgoJKiBsaWJ0b29sLCB0bG1haW4gLi4uOiB1cGRhdGUgb2YgdGhlIGxpYnRvb2wgZmlsZXMKCjE5OTgtMTEtMDQgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBlbnRpdGllcy5jOiBVc2UgZ19zbnByaW50ZiBpbnN0ZWRhIG9mIHNucHJpbnRmLgoKU3VuIE5vdiAgMSAxNDozMTowNiBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jLCBwYXJzZXIuYzogZGVidWcgYW5kIGNsZWFudXAgb2YgQ2hhclJlZiBoYW5kbGluZy9zYXZpbmcuCgkgIGFkZGVkIGVudDUgdGVzdCBmb3IgdGhpcyBwdXJwb3NlLgoJKiBwYXJzZXIuYywgcGFyc2VyLmg6IGZvcm1hdHRpbmcsIGNvbW1lbnRzIGFuZCBVVEYtOCBwbGFubmluZy4KCkZyaSBPY3QgMzAgMDE6MzY6NTIgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkPyBhIHN0cmFuZ2UgZXJyb3IgZHVlIHRvIGNvbXByZXNzaW9uIG9uIGEgR1dQCgkgIGRvY3VtZW50LgoKVGh1IE9jdCAyOSAwMDo0ODo0NSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGJ1ZyBmaXhpbmcKCSogZW50aXRpZXMuW2NoXTogZGVmaW5lZCBhIHNwZWNpZmljIHR5cGUgZm9yIHByZWRlZmluZWQgZW50aXRpZXMKCSogZG9jL3htbC5odG1sOiBtb3JlIGRvY3VtZW50YXRpb24gb24gdGhlIGxpYnJhcnksIGhvdyB0byB1c2UgaXQsCgkgIG92ZXJ2aWV3IG9mIHRoZSBpbnRlcmZhY2VzLgoKV2VkIE9jdCAyOCAxNzo1NjozNSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IG1vcmUgY2xlYW51cCBvbiB0aGUgQVBJLCBtYWRlIHRoZSB0cmVlIG1vciBjb25mb3JtYW50LgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNvcnJlY3RlZCBhIHNtYWxsIGJ1ZwoJKiBkb2MveG1sLmh0bWw6IGNvbnRpbnVpbmcgd3JpdGluZyBkb2N1bWVudGF0aW9uLgoKVHVlIE9jdCAyNyAxNzo1NDowMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5oIGRlYnVnWE1MLmM6IGFkZGVkIGRlYnVnZ2luZyB1dGlsaXRpZXMuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWRlYnVnIHN3aXRjaC4KCSogdHJlZS5jOiBwYXRjaGVkIGFuIGluY29ycmVjdCBub2RlLT50eXBlIGFzc2lnbm1lbnQuCgkqIHBhcnNlci5jOiBmb3JtYXR0aW5nLCBlbnN1cmUgdGhhdCBub2RlLT5kb2MgIT0gTlVMTCBpbiBhdHRyaWJ1dGVzCgpUdWUgT2N0IDI3IDAxOjE1OjM5IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBwYXJzZXIuW2NoXSBTQVguYyB0cmVlLltjaF06IGxhcmdlIGFtb3VudCBvZiBjaGFuZ2VzIHRvIGltcHJvdmUKICAgICAgICAgIGVudGl0eSBzdXBwb3J0IGFuZCBwcm92aWRlIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGNsb3NlIHRvCiAgICAgICAgICBET00gb25lIChlbnRpdHkgcmVmIG5vZGVzLCBhbmQgYXR0cmlidXRlIHZhbHVlIGFzIHRyZWUpLiBJIHRyaWVkCiAgICAgICAgICB0byBwcmVzZXJ2ZSB0aGUgaW50ZXJmYWNlIGJ1dCB0aGlzIHdpbGwgc3VyZWx5IGJyZWFrIHNvbWUgYXBwcwogICAgICAgICAgKEkgaGF2ZSB0byBjaGFuZ2UgcnBtMmh0bWwvcnBtZmluZCBmb3IgZXhhbXBsZSkuIEkgaGFkIHRvIGNoYW5nZQoJICB0d28gaW50ZXJmYWNlcywgYW5kIHRoZSBnZW5lcmF0ZWQgdHJlZSBpcyBzb21ld2hhdCBkaWZmZXJlbnQuCgkqIGRvYy8qIDogc3RhcnRlZCBkb2N1bWVudGluZyB0aGUgWE1MIGxpYnJhcnksIHRoZSB0cmVlIGFuZAoJICBET00vQ29yYmEuIFRoaXMgaXMgYSBmaXJzdCBzdGVwLgoKU2F0IE9jdCAyNCAxNDoyMzo1MSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogU2V0IHVwIHRoZSBmb25jdGlvbnMgY29tbWVudCBibG9jaywgYm9yaW5nIGJ1dCB1c2VmdWwuCgkqIHBhcnNlci5oLCBTQVguYywgcGFyc2VyLmM6IG5vdyBhdHRyaWJ1dGVzIGFyZSBwcm9jZXNzZWQgdGhyb3VnaAoJICB0aGUgU0FYIGludGVyZmFjZS4gVGhlIHByb2JsZW0gaXMgdGhhdCBteSBTQVggaW50ZXJmYWNlIGRpdmVyZ2VkCgkgIHF1aXRlIGEgYml0IGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgd2VsbCB0aGlzIGlzIG5vdCBhbiBvZmZpY2lhbAoJICBzcGVjLCBhbmQgdHJhbnNsYXRpbmcgaXQgZnJvbSBKYXZhIHRvIEMgaXMgaGFpcnkgYW55d2F5Li4uCgpUdWUgT2N0IDIwIDAyOjExOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jLCBlbnRpdGllcy5jLCB0cmVlLmMsIGVuY29kaW5nLmMsIGVycm9yLmM6IFNldCB1cCB0aGUKCSAgZm9uY3Rpb25zIGNvbW1lbnQgYmxvY2ssIGJvcmluZyBidXQgdXNlZnVsLgoKU3VuIE9jdCAxOCAyMDo0MDo1OCBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5bY2hdLCBNYWtlZmlsZS5hbTogQWRkZWQgdGhlIFVURi04LCBVVEYtMTYgYW5kIElTTyBMYXRpbiAxCgkgIGNvbnZlcnNpb24gcm91dGluZXMuIEhvd2V2ZXIgdGhleSBhcmUgbm90IHlldCB1c2VkIHRvIGNvbnZlcnQgdGhlCgkgIGlucHV0cy4gVGhlIGNvcmUgd2lsbCBydW4gd2l0aCBVVEYtOC4KClN1biBPY3QgMTggMTU6MDg6MTkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogbWFrZSBzdXJlIHRoYXQgdGhlIHR5cGUgaWQgaXMgcHJvcGVybHkgc2V0LXVwIHdoZW4KCSAgYSBuZXcgb2JqZWN0IGlzIGFsbG9jYXRlZCwgbmVlZGVkIGZvciBET00uCgpTYXQgT2N0IDE3IDAyOjQzOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jOiBPaywgdGhlIG1haW4gb2JqZWN0cyBpbiB0aGUgdHJlZSB3aWxsIGJlIG5hdGl2ZQoJICBjb3JiYSBvYmplY3RzLCBpdCBjb3N0cyA4IGJ5dGVzIHBlciBOb2RlLCBBdHRyaWJ1dGUgYW5kIERvY3VtZW50CgkgIGJ1dCBpdCBzaW1wbGlmaWVzIHRoZSBDb3JiYSBpbnRlZ3JhdGlvbiBhIGxvdCAobm8gZXh0cmEgaW50ZXJmYWNlCgkgIG9iamVjdHMgdG8gYWxsb2NhdGUvZnJlZSkuCgpUdWUgT2N0IDEzIDIxOjQ2OjU3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jLCBwYXJzZXIuYzogYWRkZWQgcHJldiBhbmQgZG9jIHBvaW50ZXJzIHRvIE5vZGUsCgkgIGFuZCBjaGFuZ2VkIE5PREVzIGNvbnRhbnRzIGZvciBjb25mb3JtaXR5IHdpdGggRE9NIExldmVsIDEKCldlZCBPY3QgIDcgMjM6NDI6NDYgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgaG9va3MgdG8ga2VlcCB0cmFjayBvZiBzZXJ2YW50cyB3aGVuIGNyZWF0aW5nIG9iamVjdHMKCSAgeG1sRG9jIGFuZCB4bWxOb2RlIChmb3IgQ29yYmEgZXhwb3J0KS4KClN1biBPY3QgIDQgMDM6MTg6MDkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgeG1sLWNvbmZpZyBzY3JpcHQuCgpUaHUgT2N0ICAxIDE2OjIyOjM3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBhdXRvZ2VuLnNoIDogYXBwbGllZCBwYXRjaCBmcm9tIEZyZWRlcmljIERldmVybmF5IDxkZXZlcm5heUBpc3Rhci5mcj4KCSAgdG8gYXV0b3VwZGF0ZSBsaWJ0b29sIGFuZCBhdXRvbWFrZSBjb25mIGZpbGVzLgoKMTk5OC0wOS0zMCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIE1ha2VmaWxlLmFtOiBVc2UgJz8nIHRvIHNlcGFyYXRlIHRoZSBzZWQKCWNvbW1hbmRzIGFzICcsJyBpcyB1c2VkIHdoZW4gcGVvcGxlIHBhc3MgLVdsLHNvbWV0aGluZy4KCgpUaHUgU2VwIDI0IDE1OjEzOjI5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYywgdHJlZS5oOiBhZGRlZCBhIHBlci1kb2N1bWVudCBjb21wcmVzc2lvbiBpbnRlcmZhY2UuCgpUdWUgU2VwIDIyIDIwOjQ3OjM4IEVEVCAxOTk4CgoJKiB0cmVlLmMsIHRyZWUuaDogYWRkZWQgc2F2aW5nIHdpdGggY29tcHJlc3Npb24gYW5kIGFkZGVkIGludGVyZmFjZXMKCSAgdG8gY29udHJvbCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKHhtbEdldENvbXByZXNzTW9kZSwKCSAgeG1sU2V0Q29tcHJlc3NNb2RlKSBhbmQgYSBuZXcgc2F2ZSB0byBmaWxlbmFtZSBmdW5jdGlvbiAoeG1sU2F2ZUZpbGUpLgoKTW9uIFNlcCAyMSAyMDoxMToxMyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogY29ycmVjdGVkIGEgbG9vcCBmb3IgZmlsZXMgb2Ygc2l6ZSAwCgoxOTk4LTA4LTIwICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogZXJyb3IuaDogTmV3IGZpbGUuICBDb250YWlucyBwcm90b3R5ZXMgZnJvbSBgZXJyb3IuYycuCgpUaHUgQXVnIDEzIDE5OjAyOjM0IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmFtICh4bWxpbmNkaXIpOiBOZXcgbWFjcm8uCgkoeG1saW5jX0hFQURFUlMpOiBSZW5hbWVkIGZyb20gaW5jbHVkZV9IRUFERVJTLgoKVGh1IEF1ZyAxMyAwMDo0MDoxNCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYXBwbGllZCBzbWFsbCBwYXRjaCBvbiBudW1lcmljIGVudGl0aWVzIGZyb20KCSAgQ2hyaXN0b3BoZXIgQmxpenphcmQgPGJsaXp6YXJkQGFwcGxpZWR0aGVvcnkuY29tPgoKV2VkIEF1ZyAxMiAyMzoxMjo1OCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTmV3IHJlbGVhc2UgMC4yLCByZW1vdmVkIHRoZSBvbGQgeG1sXyogZmlsZXMgc28gdGhhdCBpdCdzCgkgICAgY29oZXJlbnQgd2l0aCB0aGUgb3RoZXIgQ1ZTIGJhc2UgKFczQyksIGZhciBiZXR0ZXIgY29uZm9ybWFuY2UKCSAgICB0byBzdGFuZGFyZCwgbmV3IG5hbWVzcGFjZXMsIGRlY2VudCBlbnRpdGllcyBzdXBwb3J0LCBiZWdpbm5pbmcKCSAgICBvZiBhIFNBWC1saWtlIGludGVyZmFjZS4gTmVhcmx5IG5vdGhpbmcgbGVmdCBpbnRhY3QsIGV2ZW4gdGhlCgkgICAgdGVzdCBleGFtcGxlcyAuLi4KCjE5OTgtMDctMzAgIENocmlzdG9waGVyIEJsaXp6YXJkICA8YmxpenphcmRAYXBwbGllZHRoZW9yeS5jb20+CgoJKiAuY3ZzaWdub3JlOiBBZGQgLmRlcHMgZGlyCgpTdW4gSnVsIDI2IDE3OjI5OjUyIEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxfdHJlZTogY2hhbmdlZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lIGZvciBuYW1lIGluIHhtbE5ld05vZGUKClN1biBKdWwgMjYgMDA6MTc6NTEgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiBjb25maWd1cmUuaW46IGFkZGVkIHRlc3QgZm9yIENQUAoJKiBBVVRIT1JTLCBDaGFuZ2Vsb2c6IHRoZSBvcmlnaW5hbCBvbmVzIGRpZG4ndCBnZXQgY29tbWl0ZWQgYnV0IHRoZQoJICAgIGdsaWIgb25lcyBpbnN0ZWFkLCBmaXhlZC4KCSogTWFrZWZpbGUuYW06IGNvcnJlY3RlZCBhbiBlcnJvciBpbiBsaWJyYXJ5IG5hbWluZwoKRnJpIEp1bCAyNCAxNjo0NzoxNCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBpbnRlZ3JhdGVkIGNvZGUgZGV2ZWxvcHBlZCBhdCBXM0MKCSogY2hhbmdlZCB0aGUgb3JpZ2luYWwgQ29weXJpZ2h0CgkqIG1pZ3JhdGVkIHRvIGF1dG9tYWtlCgkqIHByZWZpeGVkIHRoZSBmaWxlbmFtZXMgYnkgeG1sXyB0byBhdm9pZCBmaWxlbmFtZSBjbGFzaGVzCgo=