VHVlIEp1bCAxNyAxNzozNjo0NiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGRlYnVnZ2luZyBvbiBJQTY0LAoJICBmaXhlZCBzZXJpb3VzIHRyb3VibGVzIGR1ZSB0byBzaXplX3QgdnMuIGludCBtaXNtYXRjaAoKVHVlIEp1bCAxNyAxNjowNDozNiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgeG1sSU8uYzogY2xlYW5lZCB1cCBzb21lIHdhcm5pbmcgb24gdGhlIEFscGhhCgpNb24gSnVsIDE2IDA2OjMyOjQ0IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGh7LEludGVybmFsc30uaCB4cGF0aC5jOiBhZGRlZCBhIG1vcmUKCSAgY29udmVuaWVudCBleHRlbnNpb24gQVBJIGZvciB2YWx1ZSBhbmQgY29udGV4dCBtYW5hZ2luZwoJICBOb3cgaGFuZGxlcyBleHRlcm5hbCBvYmplY3RzIHRocm91Z2ggeG1sWFBhdGhQb3BFeHRlcm5hbCwKCSAgeG1sWFBhdGhXcmFwRXh0ZXJuYWwgYW5kIHhtbFhQYXRoUmV0dXJuRXh0ZXJuYWwuCgkgIEFkZGVkIGZ1bmN0aW9ucyBmb3Igc2V0cyBvcGVyYXRpb25zIChpbnRlcnNlY3Rpb24sIGV0Yy4pCgpNb24gSnVsIDE2IDIwOjA1OjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oCgkgIHhtbElPLmMgdHJlZS5jIHBhcnNlckludGVybmFscy5jIGVudGl0aWVzLmMgZW5jb2RpbmcuYwoJICBIVE1McGFyc2VyLmM6IGNsZWFudXAgb2YgZ2xvYmFsIHZhcmlhYmxlcywgbWFya2luZyBzb21lCgkgIGNvbnN0IG9yIHByaXZhdGUuCgpNb24gSnVsIDE2IDAwOjE3OjE1IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZXhwb3J0ZWQgeG1sWFBhdGh7TkFOLFBJTkYsTklORn0KCSAgZml4ZWQgeG1sWFBhdGhOb2RlU2V0SXRlbSB3aGVuIHBhc3NpbmcgaW5kZXg9MAoKU3VuIEp1bCAxNSAxNzo1ODo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhZGRlZCB4bWxDaGVja1ZlcnNpb24oKQoKU2F0IEp1bCAxNCAxOTozMToyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogZml4ZWQgY29tcGlsYXRpb24gdW5kZXIgQ3lnd2luICM1NzUwMwoJKiBUT0RPOiB1cGRhdGUKCjIwMDEtMDctMTMgIFBldGVyIFdpbGxpYW1zICA8cGV0ZXJ3QHhpbWlhbi5jb20+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=