RGlzYXNzZW1ibHkgTGlzdGluZyBmb3IgUElDMzJNRUMxNHh4X1JUT1NEZW1vCkdlbmVyYXRlZCBGcm9tOgpDOi9FL0Rldi9GcmVlUlRPUy9Xb3JraW5nQ29weS9GcmVlUlRPUy9EZW1vL1BJQzMyTUVDMTR4eF9NUExBQi9QSUMzMk1FQzE0eHhfUlRPU0RlbW8uWC9kaXN0L2RlZmF1bHQvZGVidWcvUElDMzJNRUMxNHh4X1JUT1NEZW1vLlguZGVidWcuZWxmCjE1LUp1bC0yMDE1IDE3OjE2OjA3CgotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL3NvdXJjZS90aW1lcnMuYyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4hQU5EIE1PRElGSUVEIEJZITw8IHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQoxMjogICAgICAgICAgICAgICAgICANCjEzOiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE0OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBOT1RFOiBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvICAgICAhPDwNCjE1OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgICAhPDwNCjE2OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvYmxpZ2VkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzICAgICAhPDwNCjE3OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUyBrZXJuZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPDwNCjE4OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE5OiAgICAgICAgICAgICAgICAgIA0KMjA6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQ0KMjE6ICAgICAgICAgICAgICAgICAgICAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MNCjIyOiAgICAgICAgICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBGdWxsIGxpY2Vuc2UgdGV4dCBpcyBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZw0KMjM6ICAgICAgICAgICAgICAgICAgICAgIGxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sDQoyNDogICAgICAgICAgICAgICAgICANCjI1OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMjc6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEZyZWVSVE9TIHByb3ZpZGVzIGNvbXBsZXRlbHkgZnJlZSB5ZXQgcHJvZmVzc2lvbmFsbHkgZGV2ZWxvcGVkLCAgICAqDQoyODogICAgICAgICAgICAgICAgICAgICAgICogICAgcm9idXN0LCBzdHJpY3RseSBxdWFsaXR5IGNvbnRyb2xsZWQsIHN1cHBvcnRlZCwgYW5kIGNyb3NzICAgICAgICAgICoNCjI5OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBwbGF0Zm9ybSBzb2Z0d2FyZSB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IHRoZSBtYXJrZXQgbGVhZGVyLCBpdCAgICAgKg0KMzA6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGlzIHRoZSBpbmR1c3RyeSdzIGRlIGZhY3RvIHN0YW5kYXJkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMTogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMyOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBIZWxwIHlvdXJzZWxmIGdldCBzdGFydGVkIHF1aWNrbHkgd2hpbGUgc2ltdWx0YW5lb3VzbHkgaGVscGluZyAgICAgKg0KMzM6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHRvIHN1cHBvcnQgdGhlIEZyZWVSVE9TIHByb2plY3QgYnkgcHVyY2hhc2luZyBhIEZyZWVSVE9TICAgICAgICAgICAqDQozNDogICAgICAgICAgICAgICAgICAgICAgICogICAgdHV0b3JpYWwgYm9vaywgcmVmZXJlbmNlIG1hbnVhbCwgb3IgYm90aDogICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM1OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgLSBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZw0KNDA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSBGQVEgcGFnZSAiTXkgYXBwbGljYXRpb24gZG9lcyBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyIuICBIYXZlIHlvdQ0KNDE6ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY29uZmlnQVNTRVJUKCk/DQo0MjogICAgICAgICAgICAgICAgICANCjQzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9zdXBwb3J0IC0gSW4gcmV0dXJuIGZvciByZWNlaXZpbmcgdGhpcyB0b3AgcXVhbGl0eQ0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvZnR3YXJlIGZvciBmcmVlIHdlIHJlcXVlc3QgeW91IGFzc2lzdCBvdXIgZ2xvYmFsIGNvbW11bml0eSBieQ0KNDU6ICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN1cHBvcnQgZm9ydW0uDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy90cmFpbmluZyAtIEludmVzdGluZyBpbiB0cmFpbmluZyBhbGxvd3MgeW91ciB0ZWFtIHRvDQo0ODogICAgICAgICAgICAgICAgICAgICAgYmUgYXMgcHJvZHVjdGl2ZSBhcyBwb3NzaWJsZSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE5vdyB5b3UgY2FuIHJlY2VpdmUNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyB0cmFpbmluZyBkaXJlY3RseSBmcm9tIFJpY2hhcmQgQmFycnksIENFTyBvZiBSZWFsIFRpbWUgRW5naW5lZXJzDQo1MDogICAgICAgICAgICAgICAgICAgICAgTHRkLCBhbmQgdGhlIHdvcmxkJ3MgbGVhZGluZyBhdXRob3JpdHkgb24gdGhlIHdvcmxkJ3MgbGVhZGluZyBSVE9TLg0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCjUzOiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLCBhIERPUw0KNTQ6ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgRkFUIGZpbGUgc3lzdGVtLCBhbmQgb3VyIHRpbnkgdGhyZWFkIGF3YXJlIFVEUC9JUCBzdGFjay4NCjU1OiAgICAgICAgICAgICAgICAgIA0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL2xhYnMgLSBXaGVyZSBuZXcgRnJlZVJUT1MgcHJvZHVjdHMgZ28gdG8gaW5jdWJhdGUuDQo1NzogICAgICAgICAgICAgICAgICAgICAgQ29tZSBhbmQgdHJ5IEZyZWVSVE9TK1RDUCwgb3VyIG5ldyBvcGVuIHNvdXJjZSBUQ1AvSVAgc3RhY2sgZm9yIEZyZWVSVE9TLg0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZC4gbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoDQo2MDogICAgICAgICAgICAgICAgICAgICAgSW50ZWdyaXR5IFN5c3RlbXMgbHRkLiB0byBzZWxsIHVuZGVyIHRoZSBPcGVuUlRPUyBicmFuZC4gIExvdyBjb3N0IE9wZW5SVE9TDQo2MTogICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgb2ZmZXIgdGlja2V0ZWQgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uIGFuZCBjb21tZXJjaWFsIG1pZGRsZXdhcmUuDQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbyBwcm92aWRlIGEgc2FmZXR5DQo2NDogICAgICAgICAgICAgICAgICAgICAgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIGZvciB1c2UgaW4gc2FmZXR5IGFuZA0KNjU6ICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb24gY3JpdGljYWwgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBwcm92YWJsZSBkZXBlbmRhYmlsaXR5Lg0KNjY6ICAgICAgICAgICAgICAgICAgDQo2NzogICAgICAgICAgICAgICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQo2ODogICAgICAgICAgICAgICAgICAqLw0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICAvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCjcxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4NCjcyOiAgICAgICAgICAgICAgICAgIA0KNzM6ICAgICAgICAgICAgICAgICAgLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZw0KNzQ6ICAgICAgICAgICAgICAgICAgYWxsIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgTVBVIHdyYXBwZXJzLiAgVGhhdCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4NCjc1OiAgICAgICAgICAgICAgICAgIHRhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQo3NjogICAgICAgICAgICAgICAgICAjZGVmaW5lIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQo3NzogICAgICAgICAgICAgICAgICANCjc4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KNzk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInRhc2suaCINCjgwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJxdWV1ZS5oIg0KODE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInRpbWVycy5oIg0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgPT0gMSApICYmICggY29uZmlnVVNFX1RJTUVSUyA9PSAwICkNCjg0OiAgICAgICAgICAgICAgICAgIAkjZXJyb3IgY29uZmlnVVNFX1RJTUVSUyBtdXN0IGJlIHNldCB0byAxIHRvIG1ha2UgdGhlIHhUaW1lclBlbmRGdW5jdGlvbkNhbGwoKSBmdW5jdGlvbiBhdmFpbGFibGUuDQo4NTogICAgICAgICAgICAgICAgICAjZW5kaWYNCjg2OiAgICAgICAgICAgICAgICAgIA0KODc6ICAgICAgICAgICAgICAgICAgLyogTGludCBlOTYxIGFuZCBlNzUwIGFyZSBzdXBwcmVzc2VkIGFzIGEgTUlTUkEgZXhjZXB0aW9uIGp1c3RpZmllZCBiZWNhdXNlIHRoZQ0KODg6ICAgICAgICAgICAgICAgICAgTVBVIHBvcnRzIHJlcXVpcmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgdG8gYmUgZGVmaW5lZCBmb3IgdGhlDQo4OTogICAgICAgICAgICAgICAgICBoZWFkZXIgZmlsZXMgYWJvdmUsIGJ1dCBub3QgaW4gdGhpcyBmaWxlLCBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdA0KOTA6ICAgICAgICAgICAgICAgICAgcHJpdmlsZWdlZCBWcyB1bnByaXZpbGVnZWQgbGlua2FnZSBhbmQgcGxhY2VtZW50LiAqLw0KOTE6ICAgICAgICAgICAgICAgICAgI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIC8qbGludCAhZTk2MSAhZTc1MC4gKi8NCjkyOiAgICAgICAgICAgICAgICAgIA0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICAvKiBUaGlzIGVudGlyZSBzb3VyY2UgZmlsZSB3aWxsIGJlIHNraXBwZWQgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBjb25maWd1cmVkDQo5NTogICAgICAgICAgICAgICAgICB0byBpbmNsdWRlIHNvZnR3YXJlIHRpbWVyIGZ1bmN0aW9uYWxpdHkuICBUaGlzICNpZiBpcyBjbG9zZWQgYXQgdGhlIHZlcnkgYm90dG9tDQo5NjogICAgICAgICAgICAgICAgICBvZiB0aGlzIGZpbGUuICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHNvZnR3YXJlIHRpbWVyIGZ1bmN0aW9uYWxpdHkgdGhlbiBlbnN1cmUNCjk3OiAgICAgICAgICAgICAgICAgIGNvbmZpZ1VTRV9USU1FUlMgaXMgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaC4gKi8NCjk4OiAgICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApDQo5OTogICAgICAgICAgICAgICAgICANCjEwMDogICAgICAgICAgICAgICAgIC8qIE1pc2MgZGVmaW5pdGlvbnMuICovDQoxMDE6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHRtck5PX0RFTEFZCQkoIFRpY2tUeXBlX3QgKSAwVQ0KMTAyOiAgICAgICAgICAgICAgICAgDQoxMDM6ICAgICAgICAgICAgICAgICAvKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgdGltZXJzIHRoZW1zZWx2ZXMuICovDQoxMDQ6ICAgICAgICAgICAgICAgICB0eXBlZGVmIHN0cnVjdCB0bXJUaW1lckNvbnRyb2wNCjEwNTogICAgICAgICAgICAgICAgIHsNCjEwNjogICAgICAgICAgICAgICAgIAljb25zdCBjaGFyCQkJCSpwY1RpbWVyTmFtZTsJCS8qPDwgVGV4dCBuYW1lLiAgVGhpcyBpcyBub3QgdXNlZCBieSB0aGUga2VybmVsLCBpdCBpcyBpbmNsdWRlZCBzaW1wbHkgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLiAqLyAvKmxpbnQgIWU5NzEgVW5xdWFsaWZpZWQgY2hhciB0eXBlcyBhcmUgYWxsb3dlZCBmb3Igc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMgb25seS4gKi8NCjEwNzogICAgICAgICAgICAgICAgIAlMaXN0SXRlbV90CQkJCXhUaW1lckxpc3RJdGVtOwkJLyo8PCBTdGFuZGFyZCBsaW5rZWQgbGlzdCBpdGVtIGFzIHVzZWQgYnkgYWxsIGtlcm5lbCBmZWF0dXJlcyBmb3IgZXZlbnQgbWFuYWdlbWVudC4gKi8NCjEwODogICAgICAgICAgICAgICAgIAlUaWNrVHlwZV90CQkJCXhUaW1lclBlcmlvZEluVGlja3M7Lyo8PCBIb3cgcXVpY2tseSBhbmQgb2Z0ZW4gdGhlIHRpbWVyIGV4cGlyZXMuICovDQoxMDk6ICAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QJCQkJdXhBdXRvUmVsb2FkOwkJLyo8PCBTZXQgdG8gcGRUUlVFIGlmIHRoZSB0aW1lciBzaG91bGQgYmUgYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgb25jZSBleHBpcmVkLiAgU2V0IHRvIHBkRkFMU0UgaWYgdGhlIHRpbWVyIGlzLCBpbiBlZmZlY3QsIGEgb25lLXNob3QgdGltZXIuICovDQoxMTA6ICAgICAgICAgICAgICAgICAJdm9pZCAJCQkJCSpwdlRpbWVySUQ7CQkJLyo8PCBBbiBJRCB0byBpZGVudGlmeSB0aGUgdGltZXIuICBUaGlzIGFsbG93cyB0aGUgdGltZXIgdG8gYmUgaWRlbnRpZmllZCB3aGVuIHRoZSBzYW1lIGNhbGxiYWNrIGlzIHVzZWQgZm9yIG11bHRpcGxlIHRpbWVycy4gKi8NCjExMTogICAgICAgICAgICAgICAgIAlUaW1lckNhbGxiYWNrRnVuY3Rpb25fdAlweENhbGxiYWNrRnVuY3Rpb247CS8qPDwgVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdGltZXIgZXhwaXJlcy4gKi8NCjExMjogICAgICAgICAgICAgICAgIAkjaWYoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjExMzogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QJCQl1eFRpbWVyTnVtYmVyOwkJLyo8PCBBbiBJRCBhc3NpZ25lZCBieSB0cmFjZSB0b29scyBzdWNoIGFzIEZyZWVSVE9TK1RyYWNlICovDQoxMTQ6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxMTU6ICAgICAgICAgICAgICAgICB9IHhUSU1FUjsNCjExNjogICAgICAgICAgICAgICAgIA0KMTE3OiAgICAgICAgICAgICAgICAgLyogVGhlIG9sZCB4VElNRVIgbmFtZSBpcyBtYWludGFpbmVkIGFib3ZlIHRoZW4gdHlwZWRlZmVkIHRvIHRoZSBuZXcgVGltZXJfdA0KMTE4OiAgICAgICAgICAgICAgICAgbmFtZSBiZWxvdyB0byBlbmFibGUgdGhlIHVzZSBvZiBvbGRlciBrZXJuZWwgYXdhcmUgZGVidWdnZXJzLiAqLw0KMTE5OiAgICAgICAgICAgICAgICAgdHlwZWRlZiB4VElNRVIgVGltZXJfdDsNCjEyMDogICAgICAgICAgICAgICAgIA0KMTIxOiAgICAgICAgICAgICAgICAgLyogVGhlIGRlZmluaXRpb24gb2YgbWVzc2FnZXMgdGhhdCBjYW4gYmUgc2VudCBhbmQgcmVjZWl2ZWQgb24gdGhlIHRpbWVyIHF1ZXVlLg0KMTIyOiAgICAgICAgICAgICAgICAgVHdvIHR5cGVzIG9mIG1lc3NhZ2UgY2FuIGJlIHF1ZXVlZCAtIG1lc3NhZ2VzIHRoYXQgbWFuaXB1bGF0ZSBhIHNvZnR3YXJlIHRpbWVyLA0KMTIzOiAgICAgICAgICAgICAgICAgYW5kIG1lc3NhZ2VzIHRoYXQgcmVxdWVzdCB0aGUgZXhlY3V0aW9uIG9mIGEgbm9uLXRpbWVyIHJlbGF0ZWQgY2FsbGJhY2suICBUaGUNCjEyNDogICAgICAgICAgICAgICAgIHR3byBtZXNzYWdlIHR5cGVzIGFyZSBkZWZpbmVkIGluIHR3byBzZXBhcmF0ZSBzdHJ1Y3R1cmVzLCB4VGltZXJQYXJhbWV0ZXJzVHlwZQ0KMTI1OiAgICAgICAgICAgICAgICAgYW5kIHhDYWxsYmFja1BhcmFtZXRlcnNUeXBlIHJlc3BlY3RpdmVseS4gKi8NCjEyNjogICAgICAgICAgICAgICAgIHR5cGVkZWYgc3RydWN0IHRtclRpbWVyUGFyYW1ldGVycw0KMTI3OiAgICAgICAgICAgICAgICAgew0KMTI4OiAgICAgICAgICAgICAgICAgCVRpY2tUeXBlX3QJCQl4TWVzc2FnZVZhbHVlOwkJLyo8PCBBbiBvcHRpb25hbCB2YWx1ZSB1c2VkIGJ5IGEgc3Vic2V0IG9mIGNvbW1hbmRzLCBmb3IgZXhhbXBsZSwgd2hlbiBjaGFuZ2luZyB0aGUgcGVyaW9kIG9mIGEgdGltZXIuICovDQoxMjk6ICAgICAgICAgICAgICAgICAJVGltZXJfdCAqCQkJcHhUaW1lcjsJCQkvKjw8IFRoZSB0aW1lciB0byB3aGljaCB0aGUgY29tbWFuZCB3aWxsIGJlIGFwcGxpZWQuICovDQoxMzA6ICAgICAgICAgICAgICAgICB9IFRpbWVyUGFyYW1ldGVyX3Q7DQoxMzE6ICAgICAgICAgICAgICAgICANCjEzMjogICAgICAgICAgICAgICAgIA0KMTMzOiAgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgdG1yQ2FsbGJhY2tQYXJhbWV0ZXJzDQoxMzQ6ICAgICAgICAgICAgICAgICB7DQoxMzU6ICAgICAgICAgICAgICAgICAJUGVuZGVkRnVuY3Rpb25fdAlweENhbGxiYWNrRnVuY3Rpb247CS8qIDw8IFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlLiAqLw0KMTM2OiAgICAgICAgICAgICAgICAgCXZvaWQgKnB2UGFyYW1ldGVyMTsJCQkJCQkvKiA8PCBUaGUgdmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBmaXJzdCBwYXJhbWV0ZXIuICovDQoxMzc6ICAgICAgICAgICAgICAgICAJdWludDMyX3QgdWxQYXJhbWV0ZXIyOwkJCQkJLyogPDwgVGhlIHZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgc2Vjb25kIHBhcmFtZXRlci4gKi8NCjEzODogICAgICAgICAgICAgICAgIH0gQ2FsbGJhY2tQYXJhbWV0ZXJzX3Q7DQoxMzk6ICAgICAgICAgICAgICAgICANCjE0MDogICAgICAgICAgICAgICAgIC8qIFRoZSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUgdHdvIG1lc3NhZ2UgdHlwZXMsIGFsb25nIHdpdGggYW4gaWRlbnRpZmllcg0KMTQxOiAgICAgICAgICAgICAgICAgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBtZXNzYWdlIHR5cGUgaXMgdmFsaWQuICovDQoxNDI6ICAgICAgICAgICAgICAgICB0eXBlZGVmIHN0cnVjdCB0bXJUaW1lclF1ZXVlTWVzc2FnZQ0KMTQzOiAgICAgICAgICAgICAgICAgew0KMTQ0OiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QJCQl4TWVzc2FnZUlEOwkJCS8qPDwgVGhlIGNvbW1hbmQgYmVpbmcgc2VudCB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrLiAqLw0KMTQ1OiAgICAgICAgICAgICAgICAgCXVuaW9uDQoxNDY6ICAgICAgICAgICAgICAgICAJew0KMTQ3OiAgICAgICAgICAgICAgICAgCQlUaW1lclBhcmFtZXRlcl90IHhUaW1lclBhcmFtZXRlcnM7DQoxNDg6ICAgICAgICAgICAgICAgICANCjE0OTogICAgICAgICAgICAgICAgIAkJLyogRG9uJ3QgaW5jbHVkZSB4Q2FsbGJhY2tQYXJhbWV0ZXJzIGlmIGl0IGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGFzDQoxNTA6ICAgICAgICAgICAgICAgICAJCWl0IG1ha2VzIHRoZSBzdHJ1Y3R1cmUgKGFuZCB0aGVyZWZvcmUgdGhlIHRpbWVyIHF1ZXVlKSBsYXJnZXIuICovDQoxNTE6ICAgICAgICAgICAgICAgICAJCSNpZiAoIElOQ0xVREVfeFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbCA9PSAxICkNCjE1MjogICAgICAgICAgICAgICAgIAkJCUNhbGxiYWNrUGFyYW1ldGVyc190IHhDYWxsYmFja1BhcmFtZXRlcnM7DQoxNTM6ICAgICAgICAgICAgICAgICAJCSNlbmRpZiAvKiBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgKi8NCjE1NDogICAgICAgICAgICAgICAgIAl9IHU7DQoxNTU6ICAgICAgICAgICAgICAgICB9IERhZW1vblRhc2tNZXNzYWdlX3Q7DQoxNTY6ICAgICAgICAgICAgICAgICANCjE1NzogICAgICAgICAgICAgICAgIC8qbGludCAtZTk1NiBBIG1hbnVhbCBhbmFseXNpcyBhbmQgaW5zcGVjdGlvbiBoYXMgYmVlbiB1c2VkIHRvIGRldGVybWluZSB3aGljaA0KMTU4OiAgICAgICAgICAgICAgICAgc3RhdGljIHZhcmlhYmxlcyBtdXN0IGJlIGRlY2xhcmVkIHZvbGF0aWxlLiAqLw0KMTU5OiAgICAgICAgICAgICAgICAgDQoxNjA6ICAgICAgICAgICAgICAgICAvKiBUaGUgbGlzdCBpbiB3aGljaCBhY3RpdmUgdGltZXJzIGFyZSBzdG9yZWQuICBUaW1lcnMgYXJlIHJlZmVyZW5jZWQgaW4gZXhwaXJlDQoxNjE6ICAgICAgICAgICAgICAgICB0aW1lIG9yZGVyLCB3aXRoIHRoZSBuZWFyZXN0IGV4cGlyeSB0aW1lIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gIE9ubHkgdGhlDQoxNjI6ICAgICAgICAgICAgICAgICB0aW1lciBzZXJ2aWNlIHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgdGhlc2UgbGlzdHMuICovDQoxNjM6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIExpc3RfdCB4QWN0aXZlVGltZXJMaXN0MTsNCjE2NDogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90IHhBY3RpdmVUaW1lckxpc3QyOw0KMTY1OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgKnB4Q3VycmVudFRpbWVyTGlzdDsNCjE2NjogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90ICpweE92ZXJmbG93VGltZXJMaXN0Ow0KMTY3OiAgICAgICAgICAgICAgICAgDQoxNjg6ICAgICAgICAgICAgICAgICAvKiBBIHF1ZXVlIHRoYXQgaXMgdXNlZCB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSB0aW1lciBzZXJ2aWNlIHRhc2suICovDQoxNjk6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIFF1ZXVlSGFuZGxlX3QgeFRpbWVyUXVldWUgPSBOVUxMOw0KMTcwOiAgICAgICAgICAgICAgICAgDQoxNzE6ICAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3hUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSA9PSAxICkNCjE3MjogICAgICAgICAgICAgICAgIA0KMTczOiAgICAgICAgICAgICAgICAgCVBSSVZJTEVHRURfREFUQSBzdGF0aWMgVGFza0hhbmRsZV90IHhUaW1lclRhc2tIYW5kbGUgPSBOVUxMOw0KMTc0OiAgICAgICAgICAgICAgICAgDQoxNzU6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE3NjogICAgICAgICAgICAgICAgIA0KMTc3OiAgICAgICAgICAgICAgICAgLypsaW50ICtlOTU2ICovDQoxNzg6ICAgICAgICAgICAgICAgICANCjE3OTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTgwOiAgICAgICAgICAgICAgICAgDQoxODE6ICAgICAgICAgICAgICAgICAvKg0KMTgyOiAgICAgICAgICAgICAgICAgICogSW5pdGlhbGlzZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgdGltZXIgc2VydmljZSB0YXNrIGlmIGl0IGhhcyBub3QNCjE4MzogICAgICAgICAgICAgICAgICAqIGJlZW4gaW5pdGlhbGlzZWQgYWxyZWFkeS4NCjE4NDogICAgICAgICAgICAgICAgICAqLw0KMTg1OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZSggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoxODY6ICAgICAgICAgICAgICAgICANCjE4NzogICAgICAgICAgICAgICAgIC8qDQoxODg6ICAgICAgICAgICAgICAgICAgKiBUaGUgdGltZXIgc2VydmljZSB0YXNrIChkYWVtb24pLiAgVGltZXIgZnVuY3Rpb25hbGl0eSBpcyBjb250cm9sbGVkIGJ5IHRoaXMNCjE4OTogICAgICAgICAgICAgICAgICAqIHRhc2suICBPdGhlciB0YXNrcyBjb21tdW5pY2F0ZSB3aXRoIHRoZSB0aW1lciBzZXJ2aWNlIHRhc2sgdXNpbmcgdGhlDQoxOTA6ICAgICAgICAgICAgICAgICAgKiB4VGltZXJRdWV1ZSBxdWV1ZS4NCjE5MTogICAgICAgICAgICAgICAgICAqLw0KMTkyOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2VGltZXJUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMTkzOiAgICAgICAgICAgICAgICAgDQoxOTQ6ICAgICAgICAgICAgICAgICAvKg0KMTk1OiAgICAgICAgICAgICAgICAgICogQ2FsbGVkIGJ5IHRoZSB0aW1lciBzZXJ2aWNlIHRhc2sgdG8gaW50ZXJwcmV0IGFuZCBwcm9jZXNzIGEgY29tbWFuZCBpdA0KMTk2OiAgICAgICAgICAgICAgICAgICogcmVjZWl2ZWQgb24gdGhlIHRpbWVyIHF1ZXVlLg0KMTk3OiAgICAgICAgICAgICAgICAgICovDQoxOTg6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZQcm9jZXNzUmVjZWl2ZWRDb21tYW5kcyggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoxOTk6ICAgICAgICAgICAgICAgICANCjIwMDogICAgICAgICAgICAgICAgIC8qDQoyMDE6ICAgICAgICAgICAgICAgICAgKiBJbnNlcnQgdGhlIHRpbWVyIGludG8gZWl0aGVyIHhBY3RpdmVUaW1lckxpc3QxLCBvciB4QWN0aXZlVGltZXJMaXN0MiwNCjIwMjogICAgICAgICAgICAgICAgICAqIGRlcGVuZGluZyBvbiBpZiB0aGUgZXhwaXJlIHRpbWUgY2F1c2VzIGEgdGltZXIgY291bnRlciBvdmVyZmxvdy4NCjIwMzogICAgICAgICAgICAgICAgICAqLw0KMjA0OiAgICAgICAgICAgICAgICAgc3RhdGljIEJhc2VUeXBlX3QgcHJ2SW5zZXJ0VGltZXJJbkFjdGl2ZUxpc3QoIFRpbWVyX3QgKiBjb25zdCBweFRpbWVyLCBjb25zdCBUaWNrVHlwZV90IHhOZXh0RXhwaXJ5VGltZSwgY29uc3QgVGlja1R5cGVfdCB4VGltZU5vdywgY29uc3QgVGlja1R5cGVfdCB4Q29tbWFuZFRpbWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICAvKg0KMjA3OiAgICAgICAgICAgICAgICAgICogQW4gYWN0aXZlIHRpbWVyIGhhcyByZWFjaGVkIGl0cyBleHBpcmUgdGltZS4gIFJlbG9hZCB0aGUgdGltZXIgaWYgaXQgaXMgYW4NCjIwODogICAgICAgICAgICAgICAgICAqIGF1dG8gcmVsb2FkIHRpbWVyLCB0aGVuIGNhbGwgaXRzIGNhbGxiYWNrLg0KMjA5OiAgICAgICAgICAgICAgICAgICovDQoyMTA6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZQcm9jZXNzRXhwaXJlZFRpbWVyKCBjb25zdCBUaWNrVHlwZV90IHhOZXh0RXhwaXJlVGltZSwgY29uc3QgVGlja1R5cGVfdCB4VGltZU5vdyApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMTE6ICAgICAgICAgICAgICAgICANCjIxMjogICAgICAgICAgICAgICAgIC8qDQoyMTM6ICAgICAgICAgICAgICAgICAgKiBUaGUgdGljayBjb3VudCBoYXMgb3ZlcmZsb3dlZC4gIFN3aXRjaCB0aGUgdGltZXIgbGlzdHMgYWZ0ZXIgZW5zdXJpbmcgdGhlDQoyMTQ6ICAgICAgICAgICAgICAgICAgKiBjdXJyZW50IHRpbWVyIGxpc3QgZG9lcyBub3Qgc3RpbGwgcmVmZXJlbmNlIHNvbWUgdGltZXJzLg0KMjE1OiAgICAgICAgICAgICAgICAgICovDQoyMTY6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZTd2l0Y2hUaW1lckxpc3RzKCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjIxNzogICAgICAgICAgICAgICAgIA0KMjE4OiAgICAgICAgICAgICAgICAgLyoNCjIxOTogICAgICAgICAgICAgICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0aWNrIGNvdW50LCBzZXR0aW5nICpweFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgdG8gcGRUUlVFDQoyMjA6ICAgICAgICAgICAgICAgICAgKiBpZiBhIHRpY2sgY291bnQgb3ZlcmZsb3cgb2NjdXJyZWQgc2luY2UgcHJ2U2FtcGxlVGltZU5vdygpIHdhcyBsYXN0IGNhbGxlZC4NCjIyMTogICAgICAgICAgICAgICAgICAqLw0KMjIyOiAgICAgICAgICAgICAgICAgc3RhdGljIFRpY2tUeXBlX3QgcHJ2U2FtcGxlVGltZU5vdyggQmFzZVR5cGVfdCAqIGNvbnN0IHB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMjM6ICAgICAgICAgICAgICAgICANCjIyNDogICAgICAgICAgICAgICAgIC8qDQoyMjU6ICAgICAgICAgICAgICAgICAgKiBJZiB0aGUgdGltZXIgbGlzdCBjb250YWlucyBhbnkgYWN0aXZlIHRpbWVycyB0aGVuIHJldHVybiB0aGUgZXhwaXJlIHRpbWUgb2YNCjIyNjogICAgICAgICAgICAgICAgICAqIHRoZSB0aW1lciB0aGF0IHdpbGwgZXhwaXJlIGZpcnN0IGFuZCBzZXQgKnB4TGlzdFdhc0VtcHR5IHRvIGZhbHNlLiAgSWYgdGhlDQoyMjc6ICAgICAgICAgICAgICAgICAgKiB0aW1lciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYW55IHRpbWVycyB0aGVuIHJldHVybiAwIGFuZCBzZXQgKnB4TGlzdFdhc0VtcHR5DQoyMjg6ICAgICAgICAgICAgICAgICAgKiB0byBwZFRSVUUuDQoyMjk6ICAgICAgICAgICAgICAgICAgKi8NCjIzMDogICAgICAgICAgICAgICAgIHN0YXRpYyBUaWNrVHlwZV90IHBydkdldE5leHRFeHBpcmVUaW1lKCBCYXNlVHlwZV90ICogY29uc3QgcHhMaXN0V2FzRW1wdHkgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjMxOiAgICAgICAgICAgICAgICAgDQoyMzI6ICAgICAgICAgICAgICAgICAvKg0KMjMzOiAgICAgICAgICAgICAgICAgICogSWYgYSB0aW1lciBoYXMgZXhwaXJlZCwgcHJvY2VzcyBpdC4gIE90aGVyd2lzZSwgYmxvY2sgdGhlIHRpbWVyIHNlcnZpY2UgdGFzaw0KMjM0OiAgICAgICAgICAgICAgICAgICogdW50aWwgZWl0aGVyIGEgdGltZXIgZG9lcyBleHBpcmUgb3IgYSBjb21tYW5kIGlzIHJlY2VpdmVkLg0KMjM1OiAgICAgICAgICAgICAgICAgICovDQoyMzY6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZQcm9jZXNzVGltZXJPckJsb2NrVGFzayggY29uc3QgVGlja1R5cGVfdCB4TmV4dEV4cGlyZVRpbWUsIGNvbnN0IEJhc2VUeXBlX3QgeExpc3RXYXNFbXB0eSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMzc6ICAgICAgICAgICAgICAgICANCjIzODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjM5OiAgICAgICAgICAgICAgICAgDQoyNDA6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhUaW1lckNyZWF0ZVRpbWVyVGFzayggdm9pZCApDQoyNDE6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0E2QyAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OApCRkQwN0E2RSAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApCkJGRDA3QTcwICAgICAgQ0JDQSAgIFNXIFM4LCA0MChTUCkKQkZEMDdBNzIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMjQyOiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRGQUlMOw0KQkZEMDdBNzQgIDAwMjBGODFFICAgU1cgWkVSTywgMzIoUzgpCjI0MzogICAgICAgICAgICAgICAgIA0KMjQ0OiAgICAgICAgICAgICAgICAgCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkIGlmDQoyNDU6ICAgICAgICAgICAgICAgICAJY29uZmlnVVNFX1RJTUVSUyBpcyBzZXQgdG8gMS4gIENoZWNrIHRoYXQgdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlDQoyNDY6ICAgICAgICAgICAgICAgICAJdGltZXIgc2VydmljZSB0YXNrIGhhcyBiZWVuIGNyZWF0ZWQvaW5pdGlhbGlzZWQuICBJZiB0aW1lcnMgaGF2ZSBhbHJlYWR5DQoyNDc6ICAgICAgICAgICAgICAgICAJYmVlbiBjcmVhdGVkIHRoZW4gdGhlIGluaXRpYWxpc2F0aW9uIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcGVyZm9ybWVkLiAqLw0KMjQ4OiAgICAgICAgICAgICAgICAgCXBydkNoZWNrRm9yVmFsaWRMaXN0QW5kUXVldWUoKTsNCkJGRDA3QTc4ICAzNUY0NzdFOCAgIEpBTFMgcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZQpCRkQwN0E3QSAgMEMwMDM1RjQgICBMSFUgVDcsIDMwNzIoUzQpCkJGRDA3QTdDICAgICAgMEMwMCAgIE5PUAoyNDk6ICAgICAgICAgICAgICAgICANCjI1MDogICAgICAgICAgICAgICAgIAlpZiggeFRpbWVyUXVldWUgIT0gTlVMTCApDQpCRkQwN0E3RSAgODA2OEZDNUMgICBMVyBWMCwgLTMyNjY0KEdQKQpCRkQwN0E4MiAgMDAxNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0FCMAoyNTE6ICAgICAgICAgICAgICAgICAJew0KMjUyOiAgICAgICAgICAgICAgICAgCQkjaWYgKCBJTkNMVURFX3hUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSA9PSAxICkNCjI1MzogICAgICAgICAgICAgICAgIAkJew0KMjU0OiAgICAgICAgICAgICAgICAgCQkJLyogQ3JlYXRlIHRoZSB0aW1lciB0YXNrLCBzdG9yaW5nIGl0cyBoYW5kbGUgaW4geFRpbWVyVGFza0hhbmRsZSBzbw0KMjU1OiAgICAgICAgICAgICAgICAgCQkJaXQgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSB4VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUoKSBmdW5jdGlvbi4gKi8NCjI1NjogICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB4VGFza0NyZWF0ZSggcHJ2VGltZXJUYXNrLCAiVG1yIFN2YyIsICggdWludDE2X3QgKSBjb25maWdUSU1FUl9UQVNLX1NUQUNLX0RFUFRILCBOVUxMLCAoICggVUJhc2VUeXBlX3QgKSBjb25maWdUSU1FUl9UQVNLX1BSSU9SSVRZICkgfCBwb3J0UFJJVklMRUdFX0JJVCwgJnhUaW1lclRhc2tIYW5kbGUgKTsNCjI1NzogICAgICAgICAgICAgICAgIAkJfQ0KMjU4OiAgICAgICAgICAgICAgICAgCQkjZWxzZQ0KMjU5OiAgICAgICAgICAgICAgICAgCQl7DQoyNjA6ICAgICAgICAgICAgICAgICAJCQkvKiBDcmVhdGUgdGhlIHRpbWVyIHRhc2sgd2l0aG91dCBzdG9yaW5nIGl0cyBoYW5kbGUuICovDQoyNjE6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0geFRhc2tDcmVhdGUoIHBydlRpbWVyVGFzaywgIlRtciBTdmMiLCAoIHVpbnQxNl90ICkgY29uZmlnVElNRVJfVEFTS19TVEFDS19ERVBUSCwgTlVMTCwgKCAoIFVCYXNlVHlwZV90ICkgY29uZmlnVElNRVJfVEFTS19QUklPUklUWSApIHwgcG9ydFBSSVZJTEVHRV9CSVQsIE5VTEwpOw0KQkZEMDdBODYgICAgICBFRDAyICAgTEkgVjAsIDIKQkZEMDdBODggICAgICBDODQ0ICAgU1cgVjAsIDE2KFNQKQpCRkQwN0E4QSAgICAgIEM4MDUgICBTVyBaRVJPLCAyMChTUCkKQkZEMDdBOEMgICAgICBDODA2ICAgU1cgWkVSTywgMjQoU1ApCkJGRDA3QThFICAgICAgQzgwNyAgIFNXIFpFUk8sIDI4KFNQKQpCRkQwN0E5MCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwN0E5MiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA3QTk0ICA5NzM5MzA4MiAgIEFERElVIEEwLCBWMCwgLTI2ODIzCkJGRDA3QTk2ICA0MUEyOTczOSAgIEJFUSBUOSwgVDksIDB4QkZEMEZEREUKQkZEMDdBOTggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDdBOUEgIDMwQTJCRkQxICAgTERDMSBGMzAsIDEyNDUwKFMxKQpCRkQwN0E5QyAgOUFFMDMwQTIgICBBRERJVSBBMSwgVjAsIC0yNTg4OApCRkQwN0E5RSAgMzBDMDlBRTAgICBTV0MxIEYyMywgMTI0ODAoWkVSTykKQkZEMDdBQTAgIDAxN0MzMEMwICAgQURESVUgQTIsIFpFUk8sIDM4MApCRkQwN0FBNCAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPCkJGRDA3QUE2ICAwQTlBNzdFOCAgIEpBTFMgeFRhc2tHZW5lcmljQ3JlYXRlCkJGRDA3QUE4ICAgICAgMEE5QSAgIExCVSBBMSwgMTAoUzEpCkJGRDA3QUFBICAgICAgMEMwMCAgIE5PUApCRkQwN0FBQyAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpCjI2MjogICAgICAgICAgICAgICAgIAkJfQ0KMjYzOiAgICAgICAgICAgICAgICAgCQkjZW5kaWYNCjI2NDogICAgICAgICAgICAgICAgIAl9DQoyNjU6ICAgICAgICAgICAgICAgICAJZWxzZQ0KMjY2OiAgICAgICAgICAgICAgICAgCXsNCjI2NzogICAgICAgICAgICAgICAgIAkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjY4OiAgICAgICAgICAgICAgICAgCX0NCjI2OTogICAgICAgICAgICAgICAgIA0KMjcwOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFJldHVybiApOw0KQkZEMDdBQjAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwN0FCNCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwN0FDQQpCRkQwN0FCOCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwN0FCQSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA3QUJDICA5QUU4MzA4MiAgIEFERElVIEEwLCBWMCwgLTI1ODgwCkJGRDA3QUJFICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkKQkZEMDdBQzAgIDAxMEUzMEEwICAgQURESVUgQTEsIFpFUk8sIDI3MApCRkQwN0FDNCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDdBQzYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDdBQzggICAgICAwQzAwICAgTk9QCjI3MTogICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA3QUNBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKMjcyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDdBQ0UgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDdBRDAgICAgICA0QkVCICAgTFcgUkEsIDQ0KFNQKQpCRkQwN0FEMiAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApCkJGRDA3QUQ0ICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgKQkZEMDdBRDYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwN0FEOCAgICAgIDBDMDAgICBOT1AKMjczOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNzQ6ICAgICAgICAgICAgICAgICANCjI3NTogICAgICAgICAgICAgICAgIFRpbWVySGFuZGxlX3QgeFRpbWVyQ3JlYXRlKCBjb25zdCBjaGFyICogY29uc3QgcGNUaW1lck5hbWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVyUGVyaW9kSW5UaWNrcywgY29uc3QgVUJhc2VUeXBlX3QgdXhBdXRvUmVsb2FkLCB2b2lkICogY29uc3QgcHZUaW1lcklELCBUaW1lckNhbGxiYWNrRnVuY3Rpb25fdCBweENhbGxiYWNrRnVuY3Rpb24gKSAvKmxpbnQgIWU5NzEgVW5xdWFsaWZpZWQgY2hhciB0eXBlcyBhcmUgYWxsb3dlZCBmb3Igc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMgb25seS4gKi8NCjI3NjogICAgICAgICAgICAgICAgIHsNCkJGRDA2MUQ4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA2MURBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDYxREMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNjFERSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNjFFMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA2MUU0ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKQkZEMDYxRTggIDAwMjhGOERFICAgU1cgQTIsIDQwKFM4KQpCRkQwNjFFQyAgMDAyQ0Y4RkUgICBTVyBBMywgNDQoUzgpCjI3NzogICAgICAgICAgICAgICAgIFRpbWVyX3QgKnB4TmV3VGltZXI7DQoyNzg6ICAgICAgICAgICAgICAgICANCjI3OTogICAgICAgICAgICAgICAgIAkvKiBBbGxvY2F0ZSB0aGUgdGltZXIgc3RydWN0dXJlLiAqLw0KMjgwOiAgICAgICAgICAgICAgICAgCWlmKCB4VGltZXJQZXJpb2RJblRpY2tzID09ICggVGlja1R5cGVfdCApIDBVICkNCkJGRDA2MUYwICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDYxRjQgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDYyMDAKMjgxOiAgICAgICAgICAgICAgICAgCXsNCjI4MjogICAgICAgICAgICAgICAgIAkJcHhOZXdUaW1lciA9IE5VTEw7DQpCRkQwNjFGOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKQkZEMDYxRkMgICAgICBDQzJFICAgQiAweEJGRDA2MjVBCkJGRDA2MUZFICAgICAgMEMwMCAgIE5PUAoyODM6ICAgICAgICAgICAgICAgICAJfQ0KMjg0OiAgICAgICAgICAgICAgICAgCWVsc2UNCjI4NTogICAgICAgICAgICAgICAgIAl7DQoyODY6ICAgICAgICAgICAgICAgICAJCXB4TmV3VGltZXIgPSAoIFRpbWVyX3QgKiApIHB2UG9ydE1hbGxvYyggc2l6ZW9mKCBUaW1lcl90ICkgKTsNCkJGRDA2MjAwICAgICAgRUUyOCAgIExJIEEwLCA0MApCRkQwNjIwMiAgMTExNjc3RTggICBKQUxTIHB2UG9ydE1hbGxvYwpCRkQwNjIwNCAgMEMwMDExMTYgICBBRERJIFQwLCBTNiwgMzA3MgpCRkQwNjIwNiAgICAgIDBDMDAgICBOT1AKQkZEMDYyMDggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyODc6ICAgICAgICAgICAgICAgICAJCWlmKCBweE5ld1RpbWVyICE9IE5VTEwgKQ0KQkZEMDYyMEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjIxMCAgMDAyMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjI1QQoyODg6ICAgICAgICAgICAgICAgICAJCXsNCjI4OTogICAgICAgICAgICAgICAgIAkJCS8qIEVuc3VyZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgdGltZXIgc2VydmljZSB0YXNrIGhhcyBiZWVuDQoyOTA6ICAgICAgICAgICAgICAgICAJCQljcmVhdGVkL2luaXRpYWxpc2VkLiAqLw0KMjkxOiAgICAgICAgICAgICAgICAgCQkJcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZSgpOw0KQkZEMDYyMTQgIDM1RjQ3N0U4ICAgSkFMUyBwcnZDaGVja0ZvclZhbGlkTGlzdEFuZFF1ZXVlCkJGRDA2MjE2ICAwQzAwMzVGNCAgIExIVSBUNywgMzA3MihTNCkKQkZEMDYyMTggICAgICAwQzAwICAgTk9QCjI5MjogICAgICAgICAgICAgICAgIA0KMjkzOiAgICAgICAgICAgICAgICAgCQkJLyogSW5pdGlhbGlzZSB0aGUgdGltZXIgc3RydWN0dXJlIG1lbWJlcnMgdXNpbmcgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICovDQoyOTQ6ICAgICAgICAgICAgICAgICAJCQlweE5ld1RpbWVyLT5wY1RpbWVyTmFtZSA9IHBjVGltZXJOYW1lOw0KQkZEMDYyMUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjIxRSAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDA2MjIyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyOTU6ICAgICAgICAgICAgICAgICAJCQlweE5ld1RpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzID0geFRpbWVyUGVyaW9kSW5UaWNrczsNCkJGRDA2MjI0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYyMjggIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQpCRkQwNjIyQyAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApCjI5NjogICAgICAgICAgICAgICAgIAkJCXB4TmV3VGltZXItPnV4QXV0b1JlbG9hZCA9IHV4QXV0b1JlbG9hZDsNCkJGRDA2MjJFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYyMzIgIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQpCRkQwNjIzNiAgICAgIEU5QTcgICBTVyBWMSwgMjgoVjApCjI5NzogICAgICAgICAgICAgICAgIAkJCXB4TmV3VGltZXItPnB2VGltZXJJRCA9IHB2VGltZXJJRDsNCkJGRDA2MjM4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYyM0MgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQpCRkQwNjI0MCAgICAgIEU5QTggICBTVyBWMSwgMzIoVjApCjI5ODogICAgICAgICAgICAgICAgIAkJCXB4TmV3VGltZXItPnB4Q2FsbGJhY2tGdW5jdGlvbiA9IHB4Q2FsbGJhY2tGdW5jdGlvbjsNCkJGRDA2MjQyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYyNDYgIDAwMzBGQzdFICAgTFcgVjEsIDQ4KFM4KQpCRkQwNjI0QSAgICAgIEU5QTkgICBTVyBWMSwgMzYoVjApCjI5OTogICAgICAgICAgICAgICAgIAkJCXZMaXN0SW5pdGlhbGlzZUl0ZW0oICYoIHB4TmV3VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCkJGRDA2MjRDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYyNTAgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA2MjUyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA2MjU0ICA0RUU2NzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlSXRlbQpCRkQwNjI1NiAgICAgIDRFRTYgICBBRERJVSBTNywgUzcsIDMKQkZEMDYyNTggICAgICAwQzAwICAgTk9QCjMwMDogICAgICAgICAgICAgICAgIA0KMzAxOiAgICAgICAgICAgICAgICAgCQkJdHJhY2VUSU1FUl9DUkVBVEUoIHB4TmV3VGltZXIgKTsNCjMwMjogICAgICAgICAgICAgICAgIAkJfQ0KMzAzOiAgICAgICAgICAgICAgICAgCQllbHNlDQozMDQ6ICAgICAgICAgICAgICAgICAJCXsNCjMwNTogICAgICAgICAgICAgICAgIAkJCXRyYWNlVElNRVJfQ1JFQVRFX0ZBSUxFRCgpOw0KMzA2OiAgICAgICAgICAgICAgICAgCQl9DQozMDc6ICAgICAgICAgICAgICAgICAJfQ0KMzA4OiAgICAgICAgICAgICAgICAgDQozMDk6ICAgICAgICAgICAgICAgICAJLyogMCBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgeFRpbWVyUGVyaW9kSW5UaWNrcy4gKi8NCjMxMDogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggeFRpbWVyUGVyaW9kSW5UaWNrcyA+IDAgKSApOw0KQkZEMDYyNUEgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwNjI1RSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjI3NApCRkQwNjI2MiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNjI2NCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA2MjY2ICA5QUU4MzA4MiAgIEFERElVIEEwLCBWMCwgLTI1ODgwCkJGRDA2MjY4ICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkKQkZEMDYyNkEgIDAxMzYzMEEwICAgQURESVUgQTEsIFpFUk8sIDMxMApCRkQwNjI2RSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDYyNzAgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDYyNzIgICAgICAwQzAwICAgTk9QCjMxMTogICAgICAgICAgICAgICAgIA0KMzEyOiAgICAgICAgICAgICAgICAgCXJldHVybiAoIFRpbWVySGFuZGxlX3QgKSBweE5ld1RpbWVyOw0KQkZEMDYyNzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQozMTM6ICAgICAgICAgICAgICAgICB9DQpCRkQwNjI3OCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNjI3QSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA2MjdDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDYyN0UgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNjI4MCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2MjgyICAgICAgMEMwMCAgIE5PUAozMTQ6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxNTogICAgICAgICAgICAgICAgIA0KMzE2OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZXJHZW5lcmljQ29tbWFuZCggVGltZXJIYW5kbGVfdCB4VGltZXIsIGNvbnN0IEJhc2VUeXBlX3QgeENvbW1hbmRJRCwgY29uc3QgVGlja1R5cGVfdCB4T3B0aW9uYWxWYWx1ZSwgQmFzZVR5cGVfdCAqIGNvbnN0IHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4sIGNvbnN0IFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjMxNzogICAgICAgICAgICAgICAgIHsNCkJGRDA1QTFDICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4CkJGRDA1QTFFICAgICAgQ0JFQiAgIFNXIFJBLCA0NChTUCkKQkZEMDVBMjAgICAgICBDQkNBICAgU1cgUzgsIDQwKFNQKQpCRkQwNUEyMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNUEyNCAgMDAzMEY4OUUgICBTVyBBMCwgNDgoUzgpCkJGRDA1QTI4ICAwMDM0RjhCRSAgIFNXIEExLCA1MihTOCkKQkZEMDVBMkMgIDAwMzhGOERFICAgU1cgQTIsIDU2KFM4KQpCRkQwNUEzMCAgMDAzQ0Y4RkUgICBTVyBBMywgNjAoUzgpCjMxODogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybiA9IHBkRkFJTDsNCkJGRDA1QTM0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQozMTk6ICAgICAgICAgICAgICAgICBEYWVtb25UYXNrTWVzc2FnZV90IHhNZXNzYWdlOw0KMzIwOiAgICAgICAgICAgICAgICAgDQozMjE6ICAgICAgICAgICAgICAgICAJLyogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIHRpbWVyIHNlcnZpY2UgdGFzayB0byBwZXJmb3JtIGEgcGFydGljdWxhciBhY3Rpb24NCjMyMjogICAgICAgICAgICAgICAgIAlvbiBhIHBhcnRpY3VsYXIgdGltZXIgZGVmaW5pdGlvbi4gKi8NCjMyMzogICAgICAgICAgICAgICAgIAlpZiggeFRpbWVyUXVldWUgIT0gTlVMTCApDQpCRkQwNUEzOCAgODA2OEZDNUMgICBMVyBWMCwgLTMyNjY0KEdQKQpCRkQwNUEzQyAgMDA0NzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNUFDRQozMjQ6ICAgICAgICAgICAgICAgICAJew0KMzI1OiAgICAgICAgICAgICAgICAgCQkvKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrIHRvIHN0YXJ0IHRoZSB4VGltZXIgdGltZXIuICovDQozMjY6ICAgICAgICAgICAgICAgICAJCXhNZXNzYWdlLnhNZXNzYWdlSUQgPSB4Q29tbWFuZElEOw0KQkZEMDVBNDAgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQpCRkQwNUE0NCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjMyNzogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UudS54VGltZXJQYXJhbWV0ZXJzLnhNZXNzYWdlVmFsdWUgPSB4T3B0aW9uYWxWYWx1ZTsNCkJGRDA1QTQ4ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkKQkZEMDVBNEMgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQozMjg6ICAgICAgICAgICAgICAgICAJCXhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy5weFRpbWVyID0gKCBUaW1lcl90ICogKSB4VGltZXI7DQpCRkQwNUE1MCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDA1QTU0ICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkKMzI5OiAgICAgICAgICAgICAgICAgDQozMzA6ICAgICAgICAgICAgICAgICAJCWlmKCB4Q29tbWFuZElEIDwgdG1yRklSU1RfRlJPTV9JU1JfQ09NTUFORCApDQpCRkQwNUE1OCAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpCkJGRDA1QTVDICAwMDA2OTA0MiAgIFNMVEkgVjAsIFYwLCA2CkJGRDA1QTYwICAwMDI3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1QUIyCjMzMTogICAgICAgICAgICAgICAgIAkJew0KMzMyOiAgICAgICAgICAgICAgICAgCQkJaWYoIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKSA9PSB0YXNrU0NIRURVTEVSX1JVTk5JTkcgKQ0KQkZEMDVBNjQgIDRBOEU3N0U4ICAgSkFMUyB4VGFza0dldFNjaGVkdWxlclN0YXRlCkJGRDA1QTY2ICAgICAgNEE4RSAgIExXIFM0LCA1NihTUCkKQkZEMDVBNjggICAgICAwQzAwICAgTk9QCkJGRDA1QTZBICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDA1QTZDICAgICAgRUQwMiAgIExJIFYwLCAyCkJGRDA1QTZFICAwMDExQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDVBOTQKQkZEMDVBNzAgIDBDMDAwMDExICAgU0xMIFpFUk8sIFMxLCAxCkJGRDA1QTcyICAgICAgMEMwMCAgIE5PUAozMzM6ICAgICAgICAgICAgICAgICAJCQl7DQozMzQ6ICAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHhRdWV1ZVNlbmRUb0JhY2soIHhUaW1lclF1ZXVlLCAmeE1lc3NhZ2UsIHhUaWNrc1RvV2FpdCApOw0KQkZEMDVBNzQgIDgwNjhGQzdDICAgTFcgVjEsIC0zMjY2NChHUCkKQkZEMDVBNzggIDAwMTQzMDVFICAgQURESVUgVjAsIFM4LCAyMApCRkQwNUE3QyAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwNUE3RSAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNUE4MCAgMDA0MEZDREUgICBMVyBBMiwgNjQoUzgpCkJGRDA1QTg0ICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDVBODYgIDA2QTI3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljU2VuZApCRkQwNUE4OCAgICAgIDA2QTIgICBBRERVIEExLCBTMSwgVjAKQkZEMDVBOEEgICAgICAwQzAwICAgTk9QCkJGRDA1QThDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDVBOTAgICAgICBDQzFFICAgQiAweEJGRDA1QUNFCkJGRDA1QTkyICAgICAgMEMwMCAgIE5PUAozMzU6ICAgICAgICAgICAgICAgICAJCQl9DQozMzY6ICAgICAgICAgICAgICAgICAJCQllbHNlDQozMzc6ICAgICAgICAgICAgICAgICAJCQl7DQozMzg6ICAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHhRdWV1ZVNlbmRUb0JhY2soIHhUaW1lclF1ZXVlLCAmeE1lc3NhZ2UsIHRtck5PX0RFTEFZICk7DQpCRkQwNUE5NCAgODA2OEZDN0MgICBMVyBWMSwgLTMyNjY0KEdQKQpCRkQwNUE5OCAgMDAxNDMwNUUgICBBRERJVSBWMCwgUzgsIDIwCkJGRDA1QTlDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDA1QTlFICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA1QUEwICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8KQkZEMDVBQTIgICAgICAwQ0UwICAgTU9WRSBBMywgWkVSTwpCRkQwNUFBNCAgMDZBMjc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNTZW5kCkJGRDA1QUE2ICAgICAgMDZBMiAgIEFERFUgQTEsIFMxLCBWMApCRkQwNUFBOCAgICAgIDBDMDAgICBOT1AKQkZEMDVBQUEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwNUFBRSAgICAgIENDMEYgICBCIDB4QkZEMDVBQ0UKQkZEMDVBQjAgICAgICAwQzAwICAgTk9QCjMzOTogICAgICAgICAgICAgICAgIAkJCX0NCjM0MDogICAgICAgICAgICAgICAgIAkJfQ0KMzQxOiAgICAgICAgICAgICAgICAgCQllbHNlDQozNDI6ICAgICAgICAgICAgICAgICAJCXsNCjM0MzogICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB4UXVldWVTZW5kVG9CYWNrRnJvbUlTUiggeFRpbWVyUXVldWUsICZ4TWVzc2FnZSwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KQkZEMDVBQjIgIDgwNjhGQzdDICAgTFcgVjEsIC0zMjY2NChHUCkKQkZEMDVBQjYgIDAwMTQzMDVFICAgQURESVUgVjAsIFM4LCAyMApCRkQwNUFCQSAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwNUFCQyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNUFCRSAgMDAzQ0ZDREUgICBMVyBBMiwgNjAoUzgpCkJGRDA1QUMyICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDVBQzQgIDExRUE3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljU2VuZEZyb21JU1IKQkZEMDVBQzYgIDBDMDAxMUVBICAgQURESSBUNywgVDIsIDMwNzIKQkZEMDVBQzggICAgICAwQzAwICAgTk9QCkJGRDA1QUNBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzQ0OiAgICAgICAgICAgICAgICAgCQl9DQozNDU6ICAgICAgICAgICAgICAgICANCjM0NjogICAgICAgICAgICAgICAgIAkJdHJhY2VUSU1FUl9DT01NQU5EX1NFTkQoIHhUaW1lciwgeENvbW1hbmRJRCwgeE9wdGlvbmFsVmFsdWUsIHhSZXR1cm4gKTsNCjM0NzogICAgICAgICAgICAgICAgIAl9DQozNDg6ICAgICAgICAgICAgICAgICAJZWxzZQ0KMzQ5OiAgICAgICAgICAgICAgICAgCXsNCjM1MDogICAgICAgICAgICAgICAgIAkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzUxOiAgICAgICAgICAgICAgICAgCX0NCjM1MjogICAgICAgICAgICAgICAgIA0KMzUzOiAgICAgICAgICAgICAgICAgCXJldHVybiB4UmV0dXJuOw0KQkZEMDVBQ0UgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQozNTQ6ICAgICAgICAgICAgICAgICB9DQpCRkQwNUFEMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNUFENCAgICAgIDRCRUIgICBMVyBSQSwgNDQoU1ApCkJGRDA1QUQ2ICAgICAgNEJDQSAgIExXIFM4LCA0MChTUCkKQkZEMDVBRDggICAgICA0QzE5ICAgQURESVUgU1AsIFNQLCA0OApCRkQwNUFEQSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA1QURDICAgICAgMEMwMCAgIE5PUAozNTU6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM1NjogICAgICAgICAgICAgICAgIA0KMzU3OiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV94VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUgPT0gMSApDQozNTg6ICAgICAgICAgICAgICAgICANCjM1OTogICAgICAgICAgICAgICAgIAlUYXNrSGFuZGxlX3QgeFRpbWVyR2V0VGltZXJEYWVtb25UYXNrSGFuZGxlKCB2b2lkICkNCjM2MDogICAgICAgICAgICAgICAgIAl7DQozNjE6ICAgICAgICAgICAgICAgICAJCS8qIElmIHhUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSgpIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBoYXMgYmVlbg0KMzYyOiAgICAgICAgICAgICAgICAgCQlzdGFydGVkLCB0aGVuIHhUaW1lclRhc2tIYW5kbGUgd2lsbCBiZSBOVUxMLiAqLw0KMzYzOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoICggeFRpbWVyVGFza0hhbmRsZSAhPSBOVUxMICkgKTsNCjM2NDogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhUaW1lclRhc2tIYW5kbGU7DQozNjU6ICAgICAgICAgICAgICAgICAJfQ0KMzY2OiAgICAgICAgICAgICAgICAgDQozNjc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjM2ODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzY5OiAgICAgICAgICAgICAgICAgDQozNzA6ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcGNUaW1lckdldFRpbWVyTmFtZSggVGltZXJIYW5kbGVfdCB4VGltZXIgKQ0KMzcxOiAgICAgICAgICAgICAgICAgew0KQkZEMDlCMDQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYKQkZEMDlCMDYgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwOUIwOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUIwQSAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpCjM3MjogICAgICAgICAgICAgICAgIFRpbWVyX3QgKnB4VGltZXIgPSAoIFRpbWVyX3QgKiApIHhUaW1lcjsNCkJGRDA5QjBFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDlCMTIgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCjM3MzogICAgICAgICAgICAgICAgIA0KMzc0OiAgICAgICAgICAgICAgICAgCXJldHVybiBweFRpbWVyLT5wY1RpbWVyTmFtZTsNCkJGRDA5QjE2ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwOUIxQSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKMzc1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlCMUMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlCMUUgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwOUIyMCAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDA5QjIyICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlCMjQgICAgICAwQzAwICAgTk9QCjM3NjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzc3OiAgICAgICAgICAgICAgICAgDQozNzg6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZQcm9jZXNzRXhwaXJlZFRpbWVyKCBjb25zdCBUaWNrVHlwZV90IHhOZXh0RXhwaXJlVGltZSwgY29uc3QgVGlja1R5cGVfdCB4VGltZU5vdyApDQozNzk6ICAgICAgICAgICAgICAgICB7DQpCRkQwNUYyNCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwNUYyNiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDA1RjI4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDVGMkEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDVGMkMgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQpCRkQwNUYzMCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpCjM4MDogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJlc3VsdDsNCjM4MTogICAgICAgICAgICAgICAgIFRpbWVyX3QgKiBjb25zdCBweFRpbWVyID0gKCBUaW1lcl90ICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoIHB4Q3VycmVudFRpbWVyTGlzdCApOw0KQkZEMDVGMzQgIDgwNjBGQzVDICAgTFcgVjAsIC0zMjY3MihHUCkKQkZEMDVGMzggICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwNUYzQSAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA1RjNDICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMzgyOiAgICAgICAgICAgICAgICAgDQozODM6ICAgICAgICAgICAgICAgICAJLyogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSBsaXN0IG9mIGFjdGl2ZSB0aW1lcnMuICBBIGNoZWNrIGhhcyBhbHJlYWR5DQozODQ6ICAgICAgICAgICAgICAgICAJYmVlbiBwZXJmb3JtZWQgdG8gZW5zdXJlIHRoZSBsaXN0IGlzIG5vdCBlbXB0eS4gKi8NCjM4NTogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCkJGRDA1RjQwICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDVGNDQgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA1RjQ2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA1RjQ4ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDA1RjRBICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDVGNEMgICAgICAwQzAwICAgTk9QCjM4NjogICAgICAgICAgICAgICAgIAl0cmFjZVRJTUVSX0VYUElSRUQoIHB4VGltZXIgKTsNCjM4NzogICAgICAgICAgICAgICAgIA0KMzg4OiAgICAgICAgICAgICAgICAgCS8qIElmIHRoZSB0aW1lciBpcyBhbiBhdXRvIHJlbG9hZCB0aW1lciB0aGVuIGNhbGN1bGF0ZSB0aGUgbmV4dA0KMzg5OiAgICAgICAgICAgICAgICAgCWV4cGlyeSB0aW1lIGFuZCByZS1pbnNlcnQgdGhlIHRpbWVyIGluIHRoZSBsaXN0IG9mIGFjdGl2ZSB0aW1lcnMuICovDQozOTA6ICAgICAgICAgICAgICAgICAJaWYoIHB4VGltZXItPnV4QXV0b1JlbG9hZCA9PSAoIFVCYXNlVHlwZV90ICkgcGRUUlVFICkNCkJGRDA1RjRFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDVGNTIgICAgICA2OUE3ICAgTFcgVjEsIDI4KFYwKQpCRkQwNUY1NCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwNUY1NiAgMDAyRkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA1RkI4CkJGRDA1RjU4ICAwQzAwMDAyRiAgIFNMTCBBVCwgVDcsIDEKQkZEMDVGNUEgICAgICAwQzAwICAgTk9QCjM5MTogICAgICAgICAgICAgICAgIAl7DQozOTI6ICAgICAgICAgICAgICAgICAJCS8qIFRoZSB0aW1lciBpcyBpbnNlcnRlZCBpbnRvIGEgbGlzdCB1c2luZyBhIHRpbWUgcmVsYXRpdmUgdG8gYW55dGhpbmcNCjM5MzogICAgICAgICAgICAgICAgIAkJb3RoZXIgdGhhbiB0aGUgY3VycmVudCB0aW1lLiAgSXQgd2lsbCB0aGVyZWZvcmUgYmUgaW5zZXJ0ZWQgaW50byB0aGUNCjM5NDogICAgICAgICAgICAgICAgIAkJY29ycmVjdCBsaXN0IHJlbGF0aXZlIHRvIHRoZSB0aW1lIHRoaXMgdGFzayB0aGlua3MgaXQgaXMgbm93LiAqLw0KMzk1OiAgICAgICAgICAgICAgICAgCQlpZiggcHJ2SW5zZXJ0VGltZXJJbkFjdGl2ZUxpc3QoIHB4VGltZXIsICggeE5leHRFeHBpcmVUaW1lICsgcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyApLCB4VGltZU5vdywgeE5leHRFeHBpcmVUaW1lICkgPT0gcGRUUlVFICkNCkJGRDA1RjVDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDVGNjAgICAgICA2OUE2ICAgTFcgVjEsIDI0KFYwKQpCRkQwNUY2MiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA1RjY2ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNUY2OCAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA1RjZDICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA1RjZFICAwMDJDRkNERSAgIExXIEEyLCA0NChTOCkKQkZEMDVGNzIgIDAwMjhGQ0ZFICAgTFcgQTMsIDQwKFM4KQpCRkQwNUY3NiAgMkJFNDc3RTggICBKQUxTIHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0CkJGRDA1Rjc4ICAgICAgMkJFNCAgIExIVSBBMywgOChBMikKQkZEMDVGN0EgICAgICAwQzAwICAgTk9QCkJGRDA1RjdDICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDA1RjdFICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA1RjgwICAwMDFBQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDVGQjgKQkZEMDVGODIgIDBDMDAwMDFBICAgU0xMIFpFUk8sIEswLCAxCkJGRDA1Rjg0ICAgICAgMEMwMCAgIE5PUAozOTY6ICAgICAgICAgICAgICAgICAJCXsNCjM5NzogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0aW1lciBleHBpcmVkIGJlZm9yZSBpdCB3YXMgYWRkZWQgdG8gdGhlIGFjdGl2ZSB0aW1lcg0KMzk4OiAgICAgICAgICAgICAgICAgCQkJbGlzdC4gIFJlbG9hZCBpdCBub3cuICAqLw0KMzk5OiAgICAgICAgICAgICAgICAgCQkJeFJlc3VsdCA9IHhUaW1lckdlbmVyaWNDb21tYW5kKCBweFRpbWVyLCB0bXJDT01NQU5EX1NUQVJUX0RPTlRfVFJBQ0UsIHhOZXh0RXhwaXJlVGltZSwgTlVMTCwgdG1yTk9fREVMQVkgKTsNCkJGRDA1Rjg2ICAgICAgQzgwNCAgIFNXIFpFUk8sIDE2KFNQKQpCRkQwNUY4OCAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA1RjhDICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8KQkZEMDVGOEUgIDAwMjhGQ0RFICAgTFcgQTIsIDQwKFM4KQpCRkQwNUY5MiAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPCkJGRDA1Rjk0ICAyRDBFNzdFOCAgIEpBTFMgeFRpbWVyR2VuZXJpY0NvbW1hbmQKQkZEMDVGOTYgICAgICAyRDBFICAgQU5ESSBWMCwgUzAsIDB4ODAwMApCRkQwNUY5OCAgICAgIDBDMDAgICBOT1AKQkZEMDVGOUEgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo0MDA6ICAgICAgICAgICAgICAgICAJCQljb25maWdBU1NFUlQoIHhSZXN1bHQgKTsNCkJGRDA1RjlFICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDVGQTIgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDVGQjgKQkZEMDVGQTYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDVGQTggIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNUZBQSAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MApCRkQwNUZBQyAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApCkJGRDA1RkFFICAwMTkwMzBBMCAgIEFERElVIEExLCBaRVJPLCA0MDAKQkZEMDVGQjIgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA1RkI0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA1RkI2ICAgICAgMEMwMCAgIE5PUAo0MDE6ICAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSB4UmVzdWx0Ow0KNDAyOiAgICAgICAgICAgICAgICAgCQl9DQo0MDM6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjQwNDogICAgICAgICAgICAgICAgIAkJew0KNDA1OiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNDA2OiAgICAgICAgICAgICAgICAgCQl9DQo0MDc6ICAgICAgICAgICAgICAgICAJfQ0KNDA4OiAgICAgICAgICAgICAgICAgCWVsc2UNCjQwOTogICAgICAgICAgICAgICAgIAl7DQo0MTA6ICAgICAgICAgICAgICAgICAJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjQxMTogICAgICAgICAgICAgICAgIAl9DQo0MTI6ICAgICAgICAgICAgICAgICANCjQxMzogICAgICAgICAgICAgICAgIAkvKiBDYWxsIHRoZSB0aW1lciBjYWxsYmFjay4gKi8NCjQxNDogICAgICAgICAgICAgICAgIAlweFRpbWVyLT5weENhbGxiYWNrRnVuY3Rpb24oICggVGltZXJIYW5kbGVfdCApIHB4VGltZXIgKTsNCkJGRDA1RkI4ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDVGQkMgICAgICA2OTI5ICAgTFcgVjAsIDM2KFYwKQpCRkQwNUZCRSAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA1RkMyICAgICAgNDVFMiAgIEpBTFJTMTYgVjAKQkZEMDVGQzQgICAgICAwQzAwICAgTk9QCjQxNTogICAgICAgICAgICAgICAgIH0NCkJGRDA1RkM2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA1RkM4ICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDVGQ0EgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwNUZDQyAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDA1RkNFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDVGRDAgICAgICAwQzAwICAgTk9QCjQxNjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDE3OiAgICAgICAgICAgICAgICAgDQo0MTg6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZUaW1lclRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQo0MTk6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTczOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOTczQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA5NzNDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDk3M0UgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk3NDAgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQo0MjA6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhOZXh0RXhwaXJlVGltZTsNCjQyMTogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeExpc3RXYXNFbXB0eTsNCjQyMjogICAgICAgICAgICAgICAgIA0KNDIzOiAgICAgICAgICAgICAgICAgCS8qIEp1c3QgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuICovDQo0MjQ6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgcHZQYXJhbWV0ZXJzOw0KNDI1OiAgICAgICAgICAgICAgICAgDQo0MjY6ICAgICAgICAgICAgICAgICAJZm9yKCA7OyApDQo0Mjc6ICAgICAgICAgICAgICAgICAJew0KNDI4OiAgICAgICAgICAgICAgICAgCQkvKiBRdWVyeSB0aGUgdGltZXJzIGxpc3QgdG8gc2VlIGlmIGl0IGNvbnRhaW5zIGFueSB0aW1lcnMsIGFuZCBpZiBzbywNCjQyOTogICAgICAgICAgICAgICAgIAkJb2J0YWluIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBuZXh0IHRpbWVyIHdpbGwgZXhwaXJlLiAqLw0KNDMwOiAgICAgICAgICAgICAgICAgCQl4TmV4dEV4cGlyZVRpbWUgPSBwcnZHZXROZXh0RXhwaXJlVGltZSggJnhMaXN0V2FzRW1wdHkgKTsNCkJGRDA5NzQ0ICAwMDE0MzA1RSAgIEFERElVIFYwLCBTOCwgMjAKQkZEMDk3NDggICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDk3NEEgIDQ3RUU3N0U4ICAgSkFMUyBwcnZHZXROZXh0RXhwaXJlVGltZQpCRkQwOTc0RSAgICAgIDBDMDAgICBOT1AKQkZEMDk3NTAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo0MzE6ICAgICAgICAgICAgICAgICANCjQzMjogICAgICAgICAgICAgICAgIAkJLyogSWYgYSB0aW1lciBoYXMgZXhwaXJlZCwgcHJvY2VzcyBpdC4gIE90aGVyd2lzZSwgYmxvY2sgdGhpcyB0YXNrDQo0MzM6ICAgICAgICAgICAgICAgICAJCXVudGlsIGVpdGhlciBhIHRpbWVyIGRvZXMgZXhwaXJlLCBvciBhIGNvbW1hbmQgaXMgcmVjZWl2ZWQuICovDQo0MzQ6ICAgICAgICAgICAgICAgICAJCXBydlByb2Nlc3NUaW1lck9yQmxvY2tUYXNrKCB4TmV4dEV4cGlyZVRpbWUsIHhMaXN0V2FzRW1wdHkgKTsNCkJGRDA5NzU0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDk3NTggIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQpCRkQwOTc1QyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwOTc1RSAgMkQ3MDc3RTggICBKQUxTIHBydlByb2Nlc3NUaW1lck9yQmxvY2tUYXNrCkJGRDA5NzYwICAgICAgMkQ3MCAgIEFOREkgVjAsIEEzLCAweDgwCkJGRDA5NzYyICAgICAgMEMwMCAgIE5PUAo0MzU6ICAgICAgICAgICAgICAgICANCjQzNjogICAgICAgICAgICAgICAgIAkJLyogRW1wdHkgdGhlIGNvbW1hbmQgcXVldWUuICovDQo0Mzc6ICAgICAgICAgICAgICAgICAJCXBydlByb2Nlc3NSZWNlaXZlZENvbW1hbmRzKCk7DQpCRkQwOTc2NCAgMEI5QTc3RTggICBKQUxTIHBydlByb2Nlc3NSZWNlaXZlZENvbW1hbmRzCkJGRDA5NzY2ICAgICAgMEI5QSAgIExCVSBBMywgMTAoUzEpCkJGRDA5NzY4ICAgICAgMEMwMCAgIE5PUAo0Mzg6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDk3NkEgICAgICBDRkVDICAgQiAweEJGRDA5NzQ0CkJGRDA5NzZDICAgICAgMEMwMCAgIE5PUAo0Mzk6ICAgICAgICAgICAgICAgICB9DQo0NDA6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQ0MTogICAgICAgICAgICAgICAgIA0KNDQyOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc1RpbWVyT3JCbG9ja1Rhc2soIGNvbnN0IFRpY2tUeXBlX3QgeE5leHRFeHBpcmVUaW1lLCBjb25zdCBCYXNlVHlwZV90IHhMaXN0V2FzRW1wdHkgKQ0KNDQzOiAgICAgICAgICAgICAgICAgew0KQkZEMDVBRTAgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDVBRTIgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwNUFFNCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDA1QUU2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA1QUU4ICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKQkZEMDVBRUMgIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQo0NDQ6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaW1lTm93Ow0KNDQ1OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZDsNCjQ0NjogICAgICAgICAgICAgICAgIA0KNDQ3OiAgICAgICAgICAgICAgICAgCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDVBRjAgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwKQkZEMDVBRjIgICAgICA0RUY0ICAgQURESVUgUzcsIFM3LCAtNgpCRkQwNUFGNCAgICAgIDBDMDAgICBOT1AKNDQ4OiAgICAgICAgICAgICAgICAgCXsNCjQ0OTogICAgICAgICAgICAgICAgIAkJLyogT2J0YWluIHRoZSB0aW1lIG5vdyB0byBtYWtlIGFuIGFzc2Vzc21lbnQgYXMgdG8gd2hldGhlciB0aGUgdGltZXINCjQ1MDogICAgICAgICAgICAgICAgIAkJaGFzIGV4cGlyZWQgb3Igbm90LiAgSWYgb2J0YWluaW5nIHRoZSB0aW1lIGNhdXNlcyB0aGUgbGlzdHMgdG8gc3dpdGNoDQo0NTE6ICAgICAgICAgICAgICAgICAJCXRoZW4gZG9uJ3QgcHJvY2VzcyB0aGlzIHRpbWVyIGFzIGFueSB0aW1lcnMgdGhhdCByZW1haW5lZCBpbiB0aGUgbGlzdA0KNDUyOiAgICAgICAgICAgICAgICAgCQl3aGVuIHRoZSBsaXN0cyB3ZXJlIHN3aXRjaGVkIHdpbGwgaGF2ZSBiZWVuIHByb2Nlc3NlZCB3aXRoaW4gdGhlDQo0NTM6ICAgICAgICAgICAgICAgICAJCXBydlNhbXBsZVRpbWVOb3coKSBmdW5jdGlvbi4gKi8NCjQ1NDogICAgICAgICAgICAgICAgIAkJeFRpbWVOb3cgPSBwcnZTYW1wbGVUaW1lTm93KCAmeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgKTsNCkJGRDA1QUY2ICAwMDE4MzA1RSAgIEFERElVIFYwLCBTOCwgMjQKQkZEMDVBRkEgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDVBRkMgIDQyQTg3N0U4ICAgSkFMUyBwcnZTYW1wbGVUaW1lTm93CkJGRDA1QUZFICAwQzAwNDJBOCAgIEJDMlQgMiwgMHhCRkQwNzMwMgpCRkQwNUIwMCAgICAgIDBDMDAgICBOT1AKQkZEMDVCMDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo0NTU6ICAgICAgICAgICAgICAgICAJCWlmKCB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCA9PSBwZEZBTFNFICkNCkJGRDA1QjA2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDVCMEEgIDAwM0Q0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDVCODgKNDU2OiAgICAgICAgICAgICAgICAgCQl7DQo0NTc6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgdGljayBjb3VudCBoYXMgbm90IG92ZXJmbG93ZWQsIGhhcyB0aGUgdGltZXIgZXhwaXJlZD8gKi8NCjQ1ODogICAgICAgICAgICAgICAgIAkJCWlmKCAoIHhMaXN0V2FzRW1wdHkgPT0gcGRGQUxTRSApICYmICggeE5leHRFeHBpcmVUaW1lIDw9IHhUaW1lTm93ICkgKQ0KQkZEMDVCMEUgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwNUIxMiAgMDAxNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUIzRQpCRkQwNUIxNiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpCkJGRDA1QjFBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDVCMUUgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxCkJGRDA1QjIwICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0NgpCRkQwNUIyMiAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUIzRQo0NTk6ICAgICAgICAgICAgICAgICAJCQl7DQo0NjA6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDA1QjI2ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDVCMjggIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwNUIyQSAgICAgIDBDMDAgICBOT1AKNDYxOiAgICAgICAgICAgICAgICAgCQkJCXBydlByb2Nlc3NFeHBpcmVkVGltZXIoIHhOZXh0RXhwaXJlVGltZSwgeFRpbWVOb3cgKTsNCkJGRDA1QjJDICAwMDI4RkM5RSAgIExXIEEwLCA0MChTOCkKQkZEMDVCMzAgIDAwMTBGQ0JFICAgTFcgQTEsIDE2KFM4KQpCRkQwNUIzNCAgMkY5Mjc3RTggICBKQUxTIHBydlByb2Nlc3NFeHBpcmVkVGltZXIKQkZEMDVCMzYgICAgICAyRjkyICAgQU5ESSBBMywgUzEsIDB4MgpCRkQwNUIzOCAgICAgIDBDMDAgICBOT1AKQkZEMDVCM0EgICAgICBDQzJDICAgQiAweEJGRDA1Qjk0CkJGRDA1QjNDICAgICAgMEMwMCAgIE5PUAo0NjI6ICAgICAgICAgICAgICAgICAJCQl9DQo0NjM6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo0NjQ6ICAgICAgICAgICAgICAgICAJCQl7DQo0NjU6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRpY2sgY291bnQgaGFzIG5vdCBvdmVyZmxvd2VkLCBhbmQgdGhlIG5leHQgZXhwaXJlDQo0NjY6ICAgICAgICAgICAgICAgICAJCQkJdGltZSBoYXMgbm90IGJlZW4gcmVhY2hlZCB5ZXQuICBUaGlzIHRhc2sgc2hvdWxkIHRoZXJlZm9yZQ0KNDY3OiAgICAgICAgICAgICAgICAgCQkJCWJsb2NrIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGV4cGlyZSB0aW1lIG9yIGEgY29tbWFuZCB0byBiZQ0KNDY4OiAgICAgICAgICAgICAgICAgCQkJCXJlY2VpdmVkIC0gd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVGhlIGZvbGxvd2luZyBsaW5lIGNhbm5vdA0KNDY5OiAgICAgICAgICAgICAgICAgCQkJCWJlIHJlYWNoZWQgdW5sZXNzIHhOZXh0RXhwaXJlVGltZSA+IHhUaW1lTm93LCBleGNlcHQgaW4gdGhlDQo0NzA6ICAgICAgICAgICAgICAgICAJCQkJY2FzZSB3aGVuIHRoZSBjdXJyZW50IHRpbWVyIGxpc3QgaXMgZW1wdHkuICovDQo0NzE6ICAgICAgICAgICAgICAgICAJCQkJdlF1ZXVlV2FpdEZvck1lc3NhZ2VSZXN0cmljdGVkKCB4VGltZXJRdWV1ZSwgKCB4TmV4dEV4cGlyZVRpbWUgLSB4VGltZU5vdyApLCB4TGlzdFdhc0VtcHR5ICk7DQpCRkQwNUIzRSAgODA2OEZDN0MgICBMVyBWMSwgLTMyNjY0KEdQKQpCRkQwNUI0MiAgMDAyOEZDOUUgICBMVyBBMCwgNDAoUzgpCkJGRDA1QjQ2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDVCNEEgICAgICAwNTI5ICAgU1VCVSBWMCwgQTAsIFYwCkJGRDA1QjRDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDA1QjRFICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA1QjUwICAwMDJDRkNERSAgIExXIEEyLCA0NChTOCkKQkZEMDVCNTQgIDM0OTQ3N0U4ICAgSkFMUyB2UXVldWVXYWl0Rm9yTWVzc2FnZVJlc3RyaWN0ZWQKQkZEMDVCNTYgIDBDMDAzNDk0ICAgTEhVIEEwLCAzMDcyKFM0KQpCRkQwNUI1OCAgICAgIDBDMDAgICBOT1AKNDcyOiAgICAgICAgICAgICAgICAgDQo0NzM6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrUmVzdW1lQWxsKCkgPT0gcGRGQUxTRSApDQpCRkQwNUI1QSAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsCkJGRDA1QjVDICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikKQkZEMDVCNUUgICAgICAwQzAwICAgTk9QCkJGRDA1QjYwICAwMDE3NDBBMiAgIEJORVpDIFYwLCAweEJGRDA1QjkyCjQ3NDogICAgICAgICAgICAgICAgIAkJCQl7DQo0NzU6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFlpZWxkIHRvIHdhaXQgZm9yIGVpdGhlciBhIGNvbW1hbmQgdG8gYXJyaXZlLCBvciB0aGUNCjQ3NjogICAgICAgICAgICAgICAgIAkJCQkJYmxvY2sgdGltZSB0byBleHBpcmUuICBJZiBhIGNvbW1hbmQgYXJyaXZlZCBiZXR3ZWVuIHRoZQ0KNDc3OiAgICAgICAgICAgICAgICAgCQkJCQljcml0aWNhbCBzZWN0aW9uIGJlaW5nIGV4aXRlZCBhbmQgdGhpcyB5aWVsZCB0aGVuIHRoZSB5aWVsZA0KNDc4OiAgICAgICAgICAgICAgICAgCQkJCQl3aWxsIG5vdCBjYXVzZSB0aGUgdGFzayB0byBibG9jay4gKi8NCjQ3OTogICAgICAgICAgICAgICAgIAkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDA1QjY0ICA0RTc2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDVCNjYgICAgICA0RTc2ICAgQURESVUgUzMsIFMzLCAtNQpCRkQwNUI2OCAgICAgIDBDMDAgICBOT1AKQkZEMDVCNkEgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQpCRkQwNUI2RSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA1QjcyICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwNUI3NiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCkJGRDA1QjdBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDVCN0UgIDRFODY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDA1QjgwICAgICAgNEU4NiAgIEFERElVIFM0LCBTNCwgMwpCRkQwNUI4MiAgICAgIDBDMDAgICBOT1AKQkZEMDVCODQgICAgICBDQzA3ICAgQiAweEJGRDA1Qjk0CkJGRDA1Qjg2ICAgICAgMEMwMCAgIE5PUApCRkQwNUI5MiAgICAgIDBDMDAgICBOT1AKNDgwOiAgICAgICAgICAgICAgICAgCQkJCX0NCjQ4MTogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo0ODI6ICAgICAgICAgICAgICAgICAJCQkJew0KNDgzOiAgICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0ODQ6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNDg1OiAgICAgICAgICAgICAgICAgCQkJfQ0KNDg2OiAgICAgICAgICAgICAgICAgCQl9DQo0ODc6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjQ4ODogICAgICAgICAgICAgICAgIAkJew0KNDg5OiAgICAgICAgICAgICAgICAgCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDA1Qjg4ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDVCOEEgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwNUI4QyAgICAgIDBDMDAgICBOT1AKQkZEMDVCOEUgICAgICBDQzAyICAgQiAweEJGRDA1Qjk0CkJGRDA1QjkwICAgICAgMEMwMCAgIE5PUAo0OTA6ICAgICAgICAgICAgICAgICAJCX0NCjQ5MTogICAgICAgICAgICAgICAgIAl9DQo0OTI6ICAgICAgICAgICAgICAgICB9DQpCRkQwNUI5NCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNUI5NiAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApCkJGRDA1Qjk4ICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkKQkZEMDVCOUEgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MApCRkQwNUI5QyAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA1QjlFICAgICAgMEMwMCAgIE5PUAo0OTM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQ5NDogICAgICAgICAgICAgICAgIA0KNDk1OiAgICAgICAgICAgICAgICAgc3RhdGljIFRpY2tUeXBlX3QgcHJ2R2V0TmV4dEV4cGlyZVRpbWUoIEJhc2VUeXBlX3QgKiBjb25zdCBweExpc3RXYXNFbXB0eSApDQo0OTY6ICAgICAgICAgICAgICAgICB7DQpCRkQwOEZEQyAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNgpCRkQwOEZERSAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA4RkUwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4RkUyICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkKNDk3OiAgICAgICAgICAgICAgICAgVGlja1R5cGVfdCB4TmV4dEV4cGlyZVRpbWU7DQo0OTg6ICAgICAgICAgICAgICAgICANCjQ5OTogICAgICAgICAgICAgICAgIAkvKiBUaW1lcnMgYXJlIGxpc3RlZCBpbiBleHBpcnkgdGltZSBvcmRlciwgd2l0aCB0aGUgaGVhZCBvZiB0aGUgbGlzdA0KNTAwOiAgICAgICAgICAgICAgICAgCXJlZmVyZW5jaW5nIHRoZSB0YXNrIHRoYXQgd2lsbCBleHBpcmUgZmlyc3QuICBPYnRhaW4gdGhlIHRpbWUgYXQgd2hpY2gNCjUwMTogICAgICAgICAgICAgICAgIAl0aGUgdGltZXIgd2l0aCB0aGUgbmVhcmVzdCBleHBpcnkgdGltZSB3aWxsIGV4cGlyZS4gIElmIHRoZXJlIGFyZSBubw0KNTAyOiAgICAgICAgICAgICAgICAgCWFjdGl2ZSB0aW1lcnMgdGhlbiBqdXN0IHNldCB0aGUgbmV4dCBleHBpcmUgdGltZSB0byAwLiAgVGhhdCB3aWxsIGNhdXNlDQo1MDM6ICAgICAgICAgICAgICAgICAJdGhpcyB0YXNrIHRvIHVuYmxvY2sgd2hlbiB0aGUgdGljayBjb3VudCBvdmVyZmxvd3MsIGF0IHdoaWNoIHBvaW50IHRoZQ0KNTA0OiAgICAgICAgICAgICAgICAgCXRpbWVyIGxpc3RzIHdpbGwgYmUgc3dpdGNoZWQgYW5kIHRoZSBuZXh0IGV4cGlyeSB0aW1lIGNhbiBiZQ0KNTA1OiAgICAgICAgICAgICAgICAgCXJlLWFzc2Vzc2VkLiAgKi8NCjUwNjogICAgICAgICAgICAgICAgIAkqcHhMaXN0V2FzRW1wdHkgPSBsaXN0TElTVF9JU19FTVBUWSggcHhDdXJyZW50VGltZXJMaXN0ICk7DQpCRkQwOEZFNiAgODA2MEZDNUMgICBMVyBWMCwgLTMyNjcyKEdQKQpCRkQwOEZFQSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDhGRUMgIDAwMDFCMDYyICAgU0xUSVUgVjEsIFYwLCAxCkJGRDA4RkYwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDhGRjQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjUwNzogICAgICAgICAgICAgICAgIAlpZiggKnB4TGlzdFdhc0VtcHR5ID09IHBkRkFMU0UgKQ0KQkZEMDhGRjYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOEZGQSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDhGRkMgIDAwMDg0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDkwMTAKNTA4OiAgICAgICAgICAgICAgICAgCXsNCjUwOTogICAgICAgICAgICAgICAgIAkJeE5leHRFeHBpcmVUaW1lID0gbGlzdEdFVF9JVEVNX1ZBTFVFX09GX0hFQURfRU5UUlkoIHB4Q3VycmVudFRpbWVyTGlzdCApOw0KQkZEMDkwMDAgIDgwNjBGQzVDICAgTFcgVjAsIC0zMjY3MihHUCkKQkZEMDkwMDQgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwOTAwNiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDkwMDggIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCkJGRDA5MDBDICAgICAgQ0MwMyAgIEIgMHhCRkQwOTAxNApCRkQwOTAwRSAgICAgIDBDMDAgICBOT1AKNTEwOiAgICAgICAgICAgICAgICAgCX0NCjUxMTogICAgICAgICAgICAgICAgIAllbHNlDQo1MTI6ICAgICAgICAgICAgICAgICAJew0KNTEzOiAgICAgICAgICAgICAgICAgCQkvKiBFbnN1cmUgdGhlIHRhc2sgdW5ibG9ja3Mgd2hlbiB0aGUgdGljayBjb3VudCByb2xscyBvdmVyLiAqLw0KNTE0OiAgICAgICAgICAgICAgICAgCQl4TmV4dEV4cGlyZVRpbWUgPSAoIFRpY2tUeXBlX3QgKSAwVTsNCkJGRDA5MDEwICAwMDAwRjgxRSAgIFNXIFpFUk8sIDAoUzgpCjUxNTogICAgICAgICAgICAgICAgIAl9DQo1MTY6ICAgICAgICAgICAgICAgICANCjUxNzogICAgICAgICAgICAgICAgIAlyZXR1cm4geE5leHRFeHBpcmVUaW1lOw0KQkZEMDkwMTQgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCjUxODogICAgICAgICAgICAgICAgIH0NCkJGRDA5MDE4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5MDFBICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDkwMUMgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwOTAxRSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5MDIwICAgICAgMEMwMCAgIE5PUAo1MTk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjUyMDogICAgICAgICAgICAgICAgIA0KNTIxOiAgICAgICAgICAgICAgICAgc3RhdGljIFRpY2tUeXBlX3QgcHJ2U2FtcGxlVGltZU5vdyggQmFzZVR5cGVfdCAqIGNvbnN0IHB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCApDQo1MjI6ICAgICAgICAgICAgICAgICB7DQpCRkQwODU1MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODU1MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4NTU0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDg1NTYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDg1NTggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQo1MjM6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaW1lTm93Ow0KNTI0OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBUaWNrVHlwZV90IHhMYXN0VGltZSA9ICggVGlja1R5cGVfdCApIDBVOyAvKmxpbnQgIWU5NTYgVmFyaWFibGUgaXMgb25seSBhY2Nlc3NpYmxlIHRvIG9uZSB0YXNrLiAqLw0KNTI1OiAgICAgICAgICAgICAgICAgDQo1MjY6ICAgICAgICAgICAgICAgICAJeFRpbWVOb3cgPSB4VGFza0dldFRpY2tDb3VudCgpOw0KQkZEMDg1NUMgIDRDQ0E3N0U4ICAgSkFMUyB4VGFza0dldFRpY2tDb3VudApCRkQwODU1RSAgICAgIDRDQ0EgICBBRERJVSBBMiwgQTIsIDUKQkZEMDg1NjAgICAgICAwQzAwICAgTk9QCkJGRDA4NTYyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNTI3OiAgICAgICAgICAgICAgICAgDQo1Mjg6ICAgICAgICAgICAgICAgICAJaWYoIHhUaW1lTm93IDwgeExhc3RUaW1lICkNCkJGRDA4NTY2ICA4MDZDRkM1QyAgIExXIFYwLCAtMzI2NjAoR1ApCkJGRDA4NTZBICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDg1NkUgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA4NTcwICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwODU3MiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODU4OAo1Mjk6ICAgICAgICAgICAgICAgICAJew0KNTMwOiAgICAgICAgICAgICAgICAgCQlwcnZTd2l0Y2hUaW1lckxpc3RzKCk7DQpCRkQwODU3NiAgMUY3ODc3RTggICBKQUxTIHBydlN3aXRjaFRpbWVyTGlzdHMKQkZEMDg1NzggIDBDMDAxRjc4ICAgTEIgSzEsIDMwNzIoVDgpCkJGRDA4NTdBICAgICAgMEMwMCAgIE5PUAo1MzE6ICAgICAgICAgICAgICAgICAJCSpweFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgPSBwZFRSVUU7DQpCRkQwODU3QyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA4NTgwICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA4NTgyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQpCRkQwODU4NCAgICAgIENDMDQgICBCIDB4QkZEMDg1OEUKQkZEMDg1ODYgICAgICAwQzAwICAgTk9QCjUzMjogICAgICAgICAgICAgICAgIAl9DQo1MzM6ICAgICAgICAgICAgICAgICAJZWxzZQ0KNTM0OiAgICAgICAgICAgICAgICAgCXsNCjUzNTogICAgICAgICAgICAgICAgIAkJKnB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCA9IHBkRkFMU0U7DQpCRkQwODU4OCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA4NThDICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQo1MzY6ICAgICAgICAgICAgICAgICAJfQ0KNTM3OiAgICAgICAgICAgICAgICAgDQo1Mzg6ICAgICAgICAgICAgICAgICAJeExhc3RUaW1lID0geFRpbWVOb3c7DQpCRkQwODU4RSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4NTkyICA4MDZDRjg1QyAgIFNXIFYwLCAtMzI2NjAoR1ApCjUzOTogICAgICAgICAgICAgICAgIA0KNTQwOiAgICAgICAgICAgICAgICAgCXJldHVybiB4VGltZU5vdzsNCkJGRDA4NTk2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKNTQxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDg1OUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDg1OUMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwODU5RSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4NUEwICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDg1QTIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODVBNCAgICAgIDBDMDAgICBOT1AKNTQyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo1NDM6ICAgICAgICAgICAgICAgICANCjU0NDogICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0KCBUaW1lcl90ICogY29uc3QgcHhUaW1lciwgY29uc3QgVGlja1R5cGVfdCB4TmV4dEV4cGlyeVRpbWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVOb3csIGNvbnN0IFRpY2tUeXBlX3QgeENvbW1hbmRUaW1lICkNCjU0NTogICAgICAgICAgICAgICAgIHsNCkJGRDA1N0M4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA1N0NBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDU3Q0MgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNTdDRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNTdEMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA1N0Q0ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKQkZEMDU3RDggIDAwMjhGOERFICAgU1cgQTIsIDQwKFM4KQpCRkQwNTdEQyAgMDAyQ0Y4RkUgICBTVyBBMywgNDQoUzgpCjU0NjogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFByb2Nlc3NUaW1lck5vdyA9IHBkRkFMU0U7DQpCRkQwNTdFMCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKNTQ3OiAgICAgICAgICAgICAgICAgDQo1NDg6ICAgICAgICAgICAgICAgICAJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICksIHhOZXh0RXhwaXJ5VGltZSApOw0KQkZEMDU3RTQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNTdFOCAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpCkJGRDA1N0VDICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQo1NDk6ICAgICAgICAgICAgICAgICAJbGlzdFNFVF9MSVNUX0lURU1fT1dORVIoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICksIHB4VGltZXIgKTsNCkJGRDA1N0VFICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDU3RjIgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQpCRkQwNTdGNiAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjU1MDogICAgICAgICAgICAgICAgIA0KNTUxOiAgICAgICAgICAgICAgICAgCWlmKCB4TmV4dEV4cGlyeVRpbWUgPD0geFRpbWVOb3cgKQ0KQkZEMDU3RjggIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQpCRkQwNTdGQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA1ODAwICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQpCRkQwNTgwMiAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDU4MDQgIDAwMUQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDU4NDIKNTUyOiAgICAgICAgICAgICAgICAgCXsNCjU1MzogICAgICAgICAgICAgICAgIAkJLyogSGFzIHRoZSBleHBpcnkgdGltZSBlbGFwc2VkIGJldHdlZW4gdGhlIGNvbW1hbmQgdG8gc3RhcnQvcmVzZXQgYQ0KNTU0OiAgICAgICAgICAgICAgICAgCQl0aW1lciB3YXMgaXNzdWVkLCBhbmQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHByb2Nlc3NlZD8gKi8NCjU1NTogICAgICAgICAgICAgICAgIAkJaWYoICggeFRpbWVOb3cgLSB4Q29tbWFuZFRpbWUgKSA+PSBweFRpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzICkNCkJGRDA1ODA4ICAwMDI4RkM3RSAgIExXIFYxLCA0MChTOCkKQkZEMDU4MEMgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwNTgxMCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjAKQkZEMDU4MTIgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNTgxNiAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApCkJGRDA1ODE4ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwNTgxQSAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDU4MUMgIDAwMDU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDU4MkEKNTU2OiAgICAgICAgICAgICAgICAgCQl7DQo1NTc6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgdGltZSBiZXR3ZWVuIGEgY29tbWFuZCBiZWluZyBpc3N1ZWQgYW5kIHRoZSBjb21tYW5kIGJlaW5nDQo1NTg6ICAgICAgICAgICAgICAgICAJCQlwcm9jZXNzZWQgYWN0dWFsbHkgZXhjZWVkcyB0aGUgdGltZXJzIHBlcmlvZC4gICovDQo1NTk6ICAgICAgICAgICAgICAgICAJCQl4UHJvY2Vzc1RpbWVyTm93ID0gcGRUUlVFOw0KQkZEMDU4MjAgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDU4MjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwNTgyNCAgQ0MyQzAwMTAgICBFWFQgWkVSTywgUzAsIDE2LCAyNgpCRkQwNTgyNiAgICAgIENDMkMgICBCIDB4QkZEMDU4ODAKQkZEMDU4MjggICAgICAwQzAwICAgTk9QCjU2MDogICAgICAgICAgICAgICAgIAkJfQ0KNTYxOiAgICAgICAgICAgICAgICAgCQllbHNlDQo1NjI6ICAgICAgICAgICAgICAgICAJCXsNCjU2MzogICAgICAgICAgICAgICAgIAkJCXZMaXN0SW5zZXJ0KCBweE92ZXJmbG93VGltZXJMaXN0LCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQpCRkQwNTgyQSAgODA2NEZDN0MgICBMVyBWMSwgLTMyNjY4KEdQKQpCRkQwNTgyRSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA1ODMyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwNTgzNCAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwNTgzNiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNTgzOCAgMzA0MDc3RTggICBKQUxTIHZMaXN0SW5zZXJ0CkJGRDA1ODNBICAwQzAwMzA0MCAgIEFERElVIFYwLCBaRVJPLCAzMDcyCkJGRDA1ODNDICAgICAgMEMwMCAgIE5PUApCRkQwNTgzRSAgICAgIENDMjAgICBCIDB4QkZEMDU4ODAKQkZEMDU4NDAgICAgICAwQzAwICAgTk9QCjU2NDogICAgICAgICAgICAgICAgIAkJfQ0KNTY1OiAgICAgICAgICAgICAgICAgCX0NCjU2NjogICAgICAgICAgICAgICAgIAllbHNlDQo1Njc6ICAgICAgICAgICAgICAgICAJew0KNTY4OiAgICAgICAgICAgICAgICAgCQlpZiggKCB4VGltZU5vdyA8IHhDb21tYW5kVGltZSApICYmICggeE5leHRFeHBpcnlUaW1lID49IHhDb21tYW5kVGltZSApICkNCkJGRDA1ODQyICAwMDI4RkM3RSAgIExXIFYxLCA0MChTOCkKQkZEMDU4NDYgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwNTg0QSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDU4NEMgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDA1ODRFICAwMDBENDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1ODZDCkJGRDA1ODUyICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkKQkZEMDU4NTYgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwNTg1QSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDU4NUMgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDA1ODVFICAwMDA1NDBBMiAgIEJORVpDIFYwLCAweEJGRDA1ODZDCjU2OTogICAgICAgICAgICAgICAgIAkJew0KNTcwOiAgICAgICAgICAgICAgICAgCQkJLyogSWYsIHNpbmNlIHRoZSBjb21tYW5kIHdhcyBpc3N1ZWQsIHRoZSB0aWNrIGNvdW50IGhhcyBvdmVyZmxvd2VkDQo1NzE6ICAgICAgICAgICAgICAgICAJCQlidXQgdGhlIGV4cGlyeSB0aW1lIGhhcyBub3QsIHRoZW4gdGhlIHRpbWVyIG11c3QgaGF2ZSBhbHJlYWR5IHBhc3NlZA0KNTcyOiAgICAgICAgICAgICAgICAgCQkJaXRzIGV4cGlyeSB0aW1lIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LiAqLw0KNTczOiAgICAgICAgICAgICAgICAgCQkJeFByb2Nlc3NUaW1lck5vdyA9IHBkVFJVRTsNCkJGRDA1ODYyICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA1ODY0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDU4NjggICAgICBDQzBCICAgQiAweEJGRDA1ODgwCkJGRDA1ODZBICAgICAgMEMwMCAgIE5PUAo1NzQ6ICAgICAgICAgICAgICAgICAJCX0NCjU3NTogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNTc2OiAgICAgICAgICAgICAgICAgCQl7DQo1Nzc6ICAgICAgICAgICAgICAgICAJCQl2TGlzdEluc2VydCggcHhDdXJyZW50VGltZXJMaXN0LCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQpCRkQwNTg2QyAgODA2MEZDN0MgICBMVyBWMSwgLTMyNjcyKEdQKQpCRkQwNTg3MCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA1ODc0ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwNTg3NiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwNTg3OCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNTg3QSAgMzA0MDc3RTggICBKQUxTIHZMaXN0SW5zZXJ0CkJGRDA1ODdDICAwQzAwMzA0MCAgIEFERElVIFYwLCBaRVJPLCAzMDcyCkJGRDA1ODdFICAgICAgMEMwMCAgIE5PUAo1Nzg6ICAgICAgICAgICAgICAgICAJCX0NCjU3OTogICAgICAgICAgICAgICAgIAl9DQo1ODA6ICAgICAgICAgICAgICAgICANCjU4MTogICAgICAgICAgICAgICAgIAlyZXR1cm4geFByb2Nlc3NUaW1lck5vdzsNCkJGRDA1ODgwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKNTgyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDU4ODQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDU4ODYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNTg4OCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA1ODhBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDU4OEMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNTg4RSAgICAgIDBDMDAgICBOT1AKNTgzOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo1ODQ6ICAgICAgICAgICAgICAgICANCjU4NTogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkCXBydlByb2Nlc3NSZWNlaXZlZENvbW1hbmRzKCB2b2lkICkNCjU4NjogICAgICAgICAgICAgICAgIHsNCkJGRDAxNzM0ICAgICAgNEZERCAgIEFERElVIFNQLCBTUCwgLTcyCkJGRDAxNzM2ICAgICAgQ0JGMSAgIFNXIFJBLCA2OChTUCkKQkZEMDE3MzggICAgICBDQkQwICAgU1cgUzgsIDY0KFNQKQpCRkQwMTczQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo1ODc6ICAgICAgICAgICAgICAgICBEYWVtb25UYXNrTWVzc2FnZV90IHhNZXNzYWdlOw0KNTg4OiAgICAgICAgICAgICAgICAgVGltZXJfdCAqcHhUaW1lcjsNCjU4OTogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQsIHhSZXN1bHQ7DQo1OTA6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaW1lTm93Ow0KNTkxOiAgICAgICAgICAgICAgICAgDQo1OTI6ICAgICAgICAgICAgICAgICAJd2hpbGUoIHhRdWV1ZVJlY2VpdmUoIHhUaW1lclF1ZXVlLCAmeE1lc3NhZ2UsIHRtck5PX0RFTEFZICkgIT0gcGRGQUlMICkgLypsaW50ICFlNjAzIHhNZXNzYWdlIGRvZXMgbm90IGhhdmUgdG8gYmUgaW5pdGlhbGlzZWQgYXMgaXQgaXMgcGFzc2VkIG91dCwgbm90IGluLCBhbmQgaXQgaXMgbm90IHVzZWQgdW5sZXNzIHhRdWV1ZVJlY2VpdmUoKSByZXR1cm5zIHBkVFJVRS4gKi8NCkJGRDAxNzNDICAgICAgQ0NFMCAgIEIgMHhCRkQwMThGRQpCRkQwMTczRSAgICAgIDBDMDAgICBOT1AKQkZEMDE4RkUgIDgwNjhGQzdDICAgTFcgVjEsIC0zMjY2NChHUCkKQkZEMDE5MDIgIDAwMjgzMDVFICAgQURESVUgVjAsIFM4LCA0MApCRkQwMTkwNiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMTkwOCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMTkwQSAgICAgIDBDQzAgICBNT1ZFIEEyLCBaRVJPCkJGRDAxOTBDICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDE5MEUgIDA4MUU3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljUmVjZWl2ZQpCRkQwMTkxMCAgICAgIDA4MUUgICBMQlUgUzAsIDE0KFMxKQpCRkQwMTkxMiAgICAgIDBDMDAgICBOT1AKQkZEMDE5MTQgIEZGMTQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE3NDAKQkZEMDE5MTYgIDBGQkVGRjE0ICAgTFcgVDgsIDQwMzAoUzQpCjU5MzogICAgICAgICAgICAgICAgIAl7DQo1OTQ6ICAgICAgICAgICAgICAgICAJCSNpZiAoIElOQ0xVREVfeFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbCA9PSAxICkNCjU5NTogICAgICAgICAgICAgICAgIAkJew0KNTk2OiAgICAgICAgICAgICAgICAgCQkJLyogTmVnYXRpdmUgY29tbWFuZHMgYXJlIHBlbmRlZCBmdW5jdGlvbiBjYWxscyByYXRoZXIgdGhhbiB0aW1lcg0KNTk3OiAgICAgICAgICAgICAgICAgCQkJY29tbWFuZHMuICovDQo1OTg6ICAgICAgICAgICAgICAgICAJCQlpZiggeE1lc3NhZ2UueE1lc3NhZ2VJRCA8ICggQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDE3NDAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwMTc0NCAgMDAxRjQwNDIgICBCR0VaIFYwLCAweEJGRDAxNzg2CkJGRDAxNzQ2ICAwQzAwMDAxRiAgIFNMTCBaRVJPLCBSQSwgMQpCRkQwMTc0OCAgICAgIDBDMDAgICBOT1AKNTk5OiAgICAgICAgICAgICAgICAgCQkJew0KNjAwOiAgICAgICAgICAgICAgICAgCQkJCWNvbnN0IENhbGxiYWNrUGFyYW1ldGVyc190ICogY29uc3QgcHhDYWxsYmFjayA9ICYoIHhNZXNzYWdlLnUueENhbGxiYWNrUGFyYW1ldGVycyApOw0KQkZEMDE3NEEgIDAwMjgzMDVFICAgQURESVUgVjAsIFM4LCA0MApCRkQwMTc0RSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDE3NTAgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQo2MDE6ICAgICAgICAgICAgICAgICANCjYwMjogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgdGltZXIgdXNlcyB0aGUgeENhbGxiYWNrUGFyYW1ldGVycyBtZW1iZXIgdG8gcmVxdWVzdCBhDQo2MDM6ICAgICAgICAgICAgICAgICAJCQkJY2FsbGJhY2sgYmUgZXhlY3V0ZWQuICBDaGVjayB0aGUgY2FsbGJhY2sgaXMgbm90IE5VTEwuICovDQo2MDQ6ICAgICAgICAgICAgICAgICAJCQkJY29uZmlnQVNTRVJUKCBweENhbGxiYWNrICk7DQpCRkQwMTc1NCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAxNzU4ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxNzZFCkJGRDAxNzVDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAxNzVFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDE3NjAgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODAKQkZEMDE3NjIgIDMwQTA5QUU4ICAgU1dDMSBGMjMsIDEyNDQ4KFQwKQpCRkQwMTc2NCAgMDI1QzMwQTAgICBBRERJVSBBMSwgWkVSTywgNjA0CkJGRDAxNzY4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMTc2QSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMTc2QyAgICAgIDBDMDAgICBOT1AKNjA1OiAgICAgICAgICAgICAgICAgDQo2MDY6ICAgICAgICAgICAgICAgICAJCQkJLyogQ2FsbCB0aGUgZnVuY3Rpb24uICovDQo2MDc6ICAgICAgICAgICAgICAgICAJCQkJcHhDYWxsYmFjay0+cHhDYWxsYmFja0Z1bmN0aW9uKCBweENhbGxiYWNrLT5wdlBhcmFtZXRlcjEsIHB4Q2FsbGJhY2stPnVsUGFyYW1ldGVyMiApOw0KQkZEMDE3NkUgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwMTc3MiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDE3NzQgIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQpCRkQwMTc3OCAgICAgIDZBMzEgICBMVyBBMCwgNChWMSkKQkZEMDE3N0EgIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQpCRkQwMTc3RSAgICAgIDY5QjIgICBMVyBWMSwgOChWMSkKQkZEMDE3ODAgICAgICAwQ0EzICAgTU9WRSBBMSwgVjEKQkZEMDE3ODIgICAgICA0NUUyICAgSkFMUlMxNiBWMApCRkQwMTc4NCAgICAgIDBDMDAgICBOT1AKNjA4OiAgICAgICAgICAgICAgICAgCQkJfQ0KNjA5OiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNjEwOiAgICAgICAgICAgICAgICAgCQkJew0KNjExOiAgICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjYxMjogICAgICAgICAgICAgICAgIAkJCX0NCjYxMzogICAgICAgICAgICAgICAgIAkJfQ0KNjE0OiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsICovDQo2MTU6ICAgICAgICAgICAgICAgICANCjYxNjogICAgICAgICAgICAgICAgIAkJLyogQ29tbWFuZHMgdGhhdCBhcmUgcG9zaXRpdmUgYXJlIHRpbWVyIGNvbW1hbmRzIHJhdGhlciB0aGFuIHBlbmRlZA0KNjE3OiAgICAgICAgICAgICAgICAgCQlmdW5jdGlvbiBjYWxscy4gKi8NCjYxODogICAgICAgICAgICAgICAgIAkJaWYoIHhNZXNzYWdlLnhNZXNzYWdlSUQgPj0gKCBCYXNlVHlwZV90ICkgMCApDQpCRkQwMTc4NiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAxNzhBICAwMEI4NDAwMiAgIEJMVFogVjAsIDB4QkZEMDE4RkUKQkZEMDE3OEMgIDBDMDAwMEI4ICAgU0xMIEExLCBUOCwgMQpCRkQwMTc4RSAgICAgIDBDMDAgICBOT1AKNjE5OiAgICAgICAgICAgICAgICAgCQl7DQo2MjA6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgbWVzc2FnZXMgdXNlcyB0aGUgeFRpbWVyUGFyYW1ldGVycyBtZW1iZXIgdG8gd29yayBvbiBhDQo2MjE6ICAgICAgICAgICAgICAgICAJCQlzb2Z0d2FyZSB0aW1lci4gKi8NCjYyMjogICAgICAgICAgICAgICAgIAkJCXB4VGltZXIgPSB4TWVzc2FnZS51LnhUaW1lclBhcmFtZXRlcnMucHhUaW1lcjsNCkJGRDAxNzkwICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDE3OTQgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo2MjM6ICAgICAgICAgICAgICAgICANCjYyNDogICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0SVNfQ09OVEFJTkVEX1dJVEhJTiggTlVMTCwgJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSApID09IHBkRkFMU0UgKQ0KQkZEMDE3OTggIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTc5QyAgICAgIDY5MjUgICBMVyBWMCwgMjAoVjApCkJGRDAxNzlFICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxN0IwCjYyNTogICAgICAgICAgICAgICAgIAkJCXsNCjYyNjogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgdGltZXIgaXMgaW4gYSBsaXN0LCByZW1vdmUgaXQuICovDQo2Mjc6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQpCRkQwMTdBMiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAxN0E2ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMTdBOCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMTdBQSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMTdBQyAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAxN0FFICAgICAgMEMwMCAgIE5PUAo2Mjg6ICAgICAgICAgICAgICAgICAJCQl9DQo2Mjk6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo2MzA6ICAgICAgICAgICAgICAgICAJCQl7DQo2MzE6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjMyOiAgICAgICAgICAgICAgICAgCQkJfQ0KNjMzOiAgICAgICAgICAgICAgICAgDQo2MzQ6ICAgICAgICAgICAgICAgICAJCQl0cmFjZVRJTUVSX0NPTU1BTkRfUkVDRUlWRUQoIHB4VGltZXIsIHhNZXNzYWdlLnhNZXNzYWdlSUQsIHhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy54TWVzc2FnZVZhbHVlICk7DQo2MzU6ICAgICAgICAgICAgICAgICANCjYzNjogICAgICAgICAgICAgICAgIAkJCS8qIEluIHRoaXMgY2FzZSB0aGUgeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLCBidXQNCjYzNzogICAgICAgICAgICAgICAgIAkJCWl0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgZnVuY3Rpb24gY2FsbC4gIHBydlNhbXBsZVRpbWVOb3coKSBtdXN0IGJlDQo2Mzg6ICAgICAgICAgICAgICAgICAJCQljYWxsZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZnJvbSB4VGltZXJRdWV1ZSBzbyB0aGVyZSBpcyBubw0KNjM5OiAgICAgICAgICAgICAgICAgCQkJcG9zc2liaWxpdHkgb2YgYSBoaWdoZXIgcHJpb3JpdHkgdGFzayBhZGRpbmcgYSBtZXNzYWdlIHRvIHRoZSBtZXNzYWdlDQo2NDA6ICAgICAgICAgICAgICAgICAJCQlxdWV1ZSB3aXRoIGEgdGltZSB0aGF0IGlzIGFoZWFkIG9mIHRoZSB0aW1lciBkYWVtb24gdGFzayAoYmVjYXVzZSBpdA0KNjQxOiAgICAgICAgICAgICAgICAgCQkJcHJlLWVtcHRlZCB0aGUgdGltZXIgZGFlbW9uIHRhc2sgYWZ0ZXIgdGhlIHhUaW1lTm93IHZhbHVlIHdhcyBzZXQpLiAqLw0KNjQyOiAgICAgICAgICAgICAgICAgCQkJeFRpbWVOb3cgPSBwcnZTYW1wbGVUaW1lTm93KCAmeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgKTsNCkJGRDAxN0IwICAwMDM4MzA1RSAgIEFERElVIFYwLCBTOCwgNTYKQkZEMDE3QjQgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDE3QjYgIDQyQTg3N0U4ICAgSkFMUyBwcnZTYW1wbGVUaW1lTm93CkJGRDAxN0I4ICAwQzAwNDJBOCAgIEJDMlQgMiwgMHhCRkQwMkZCQwpCRkQwMTdCQSAgICAgIDBDMDAgICBOT1AKQkZEMDE3QkMgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQo2NDM6ICAgICAgICAgICAgICAgICANCjY0NDogICAgICAgICAgICAgICAgIAkJCXN3aXRjaCggeE1lc3NhZ2UueE1lc3NhZ2VJRCApDQpCRkQwMTdDMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAxN0M0ICAwMDBBQjA2MiAgIFNMVElVIFYxLCBWMCwgMTAKQkZEMDE3QzggIDAwOEM0MEUzICAgQkVRWkMgVjEsIDB4QkZEMDE4RTQKQkZEMDE3Q0MgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMTdDRSAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMApCRkQwMTdEMCAgMzA0MkJGRDAgICBMREMxIEYzMCwgMTIzNTQoUzApCkJGRDAxN0QyICAxN0RDMzA0MiAgIEFERElVIFYwLCBWMCwgNjEwOApCRkQwMTdENCAgMDUyNjE3REMgICBMQlUgUzgsIDEzMTgoR1ApCkJGRDAxN0Q2ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwMTdEOCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDE3REEgICAgICA0NUEyICAgSlJDIFYwCkJGRDAxN0RDICBCRkQwMTgwNSAgIFNCIFpFUk8sIC0xNjQzMihBMSkKQkZEMDE3REUgIDE4MDVCRkQwICAgTERDMSBGMzAsIDYxNDkoUzApCkJGRDAxN0UwICBCRkQwMTgwNSAgIFNCIFpFUk8sIC0xNjQzMihBMSkKQkZEMDE3RTIgIDE4MDVCRkQwICAgTERDMSBGMzAsIDYxNDkoUzApCkJGRDAxN0U0ICBCRkQwMTgwNSAgIFNCIFpFUk8sIC0xNjQzMihBMSkKQkZEMDE3RTYgIDE4RUJCRkQwICAgTERDMSBGMzAsIDYzNzkoUzApCkJGRDAxN0U4ICBCRkQwMThFQiAgIFNCIEEzLCAtMTY0MzIoVDMpCkJGRDAxN0VBICAxODhEQkZEMCAgIExEQzEgRjMwLCA2Mjg1KFMwKQpCRkQwMTdFQyAgQkZEMDE4OEQgICBTQiBBMCwgLTE2NDMyKFQ1KQpCRkQwMTdFRSAgMThEN0JGRDAgICBMREMxIEYzMCwgNjM1OShTMCkKQkZEMDE3RjAgIEJGRDAxOEQ3ICAgU0IgQTIsIC0xNjQzMihTNykKQkZEMDE3RjIgIDE4MDVCRkQwICAgTERDMSBGMzAsIDYxNDkoUzApCkJGRDAxN0Y0ICBCRkQwMTgwNSAgIFNCIFpFUk8sIC0xNjQzMihBMSkKQkZEMDE3RjYgIDE4MDVCRkQwICAgTERDMSBGMzAsIDYxNDkoUzApCkJGRDAxN0Y4ICBCRkQwMTgwNSAgIFNCIFpFUk8sIC0xNjQzMihBMSkKQkZEMDE3RkEgIDE4RUJCRkQwICAgTERDMSBGMzAsIDYzNzkoUzApCkJGRDAxN0ZDICBCRkQwMThFQiAgIFNCIEEzLCAtMTY0MzIoVDMpCkJGRDAxN0ZFICAxODhEQkZEMCAgIExEQzEgRjMwLCA2Mjg1KFMwKQpCRkQwMTgwMCAgQkZEMDE4OEQgICBTQiBBMCwgLTE2NDMyKFQ1KQpCRkQwMTgwMiAgRkM3RUJGRDAgICBMREMxIEYzMCwgLTg5OChTMCkKNjQ1OiAgICAgICAgICAgICAgICAgCQkJew0KNjQ2OiAgICAgICAgICAgICAgICAgCQkJCWNhc2UgdG1yQ09NTUFORF9TVEFSVCA6DQo2NDc6ICAgICAgICAgICAgICAgICAJCQkgICAgY2FzZSB0bXJDT01NQU5EX1NUQVJUX0ZST01fSVNSIDoNCjY0ODogICAgICAgICAgICAgICAgIAkJCSAgICBjYXNlIHRtckNPTU1BTkRfUkVTRVQgOg0KNjQ5OiAgICAgICAgICAgICAgICAgCQkJICAgIGNhc2UgdG1yQ09NTUFORF9SRVNFVF9GUk9NX0lTUiA6DQo2NTA6ICAgICAgICAgICAgICAgICAJCQkJY2FzZSB0bXJDT01NQU5EX1NUQVJUX0RPTlRfVFJBQ0UgOg0KNjUxOiAgICAgICAgICAgICAgICAgCQkJCQkvKiBTdGFydCBvciByZXN0YXJ0IGEgdGltZXIuICovDQo2NTI6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCBwcnZJbnNlcnRUaW1lckluQWN0aXZlTGlzdCggcHhUaW1lciwgIHhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy54TWVzc2FnZVZhbHVlICsgcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcywgeFRpbWVOb3csIHhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy54TWVzc2FnZVZhbHVlICkgPT0gcGRUUlVFICkNCkJGRDAxODA0ICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkKQkZEMDE4MDggIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTgwQyAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApCkJGRDAxODBFICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwMTgxMCAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAxODE0ICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkKQkZEMDE4MTggICAgICAwQ0EzICAgTU9WRSBBMSwgVjEKQkZEMDE4MUEgIDAwMjBGQ0RFICAgTFcgQTIsIDMyKFM4KQpCRkQwMTgxRSAgICAgIDBDRTIgICBNT1ZFIEEzLCBWMApCRkQwMTgyMCAgMkJFNDc3RTggICBKQUxTIHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0CkJGRDAxODIyICAgICAgMkJFNCAgIExIVSBBMywgOChBMikKQkZEMDE4MjQgICAgICAwQzAwICAgTk9QCkJGRDAxODI2ICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDAxODI4ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxODJBICAwMDYxQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDE4RjAKQkZEMDE4MkMgIDBDMDAwMDYxICAgU0xMIFYxLCBBVCwgMQpCRkQwMTgyRSAgICAgIDBDMDAgICBOT1AKNjUzOiAgICAgICAgICAgICAgICAgCQkJCQl7DQo2NTQ6ICAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgdGltZXIgZXhwaXJlZCBiZWZvcmUgaXQgd2FzIGFkZGVkIHRvIHRoZSBhY3RpdmUNCjY1NTogICAgICAgICAgICAgICAgIAkJCQkJCXRpbWVyIGxpc3QuICBQcm9jZXNzIGl0IG5vdy4gKi8NCjY1NjogICAgICAgICAgICAgICAgIAkJCQkJCXB4VGltZXItPnB4Q2FsbGJhY2tGdW5jdGlvbiggKCBUaW1lckhhbmRsZV90ICkgcHhUaW1lciApOw0KQkZEMDE4MzAgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTgzNCAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApCkJGRDAxODM2ICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkKQkZEMDE4M0EgICAgICA0NUUyICAgSkFMUlMxNiBWMApCRkQwMTgzQyAgICAgIDBDMDAgICBOT1AKNjU3OiAgICAgICAgICAgICAgICAgCQkJCQkJdHJhY2VUSU1FUl9FWFBJUkVEKCBweFRpbWVyICk7DQo2NTg6ICAgICAgICAgICAgICAgICANCjY1OTogICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBweFRpbWVyLT51eEF1dG9SZWxvYWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkVFJVRSApDQpCRkQwMTgzRSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAxODQyICAgICAgNjlBNyAgIExXIFYxLCAyOChWMCkKQkZEMDE4NDQgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDE4NDYgIDAwNTZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMThGNgpCRkQwMTg0OCAgMEMwMDAwNTYgICBTTEwgVjAsIFM2LCAxCkJGRDAxODRBICAgICAgMEMwMCAgIE5PUAo2NjA6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo2NjE6ICAgICAgICAgICAgICAgICAJCQkJCQkJeFJlc3VsdCA9IHhUaW1lckdlbmVyaWNDb21tYW5kKCBweFRpbWVyLCB0bXJDT01NQU5EX1NUQVJUX0RPTlRfVFJBQ0UsIHhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy54TWVzc2FnZVZhbHVlICsgcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcywgTlVMTCwgdG1yTk9fREVMQVkgKTsNCkJGRDAxODRDICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkKQkZEMDE4NTAgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTg1NCAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApCkJGRDAxODU2ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwMTg1OCAgICAgIEM4MDQgICBTVyBaRVJPLCAxNihTUCkKQkZEMDE4NUEgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQpCRkQwMTg1RSAgICAgIDBDQTAgICBNT1ZFIEExLCBaRVJPCkJGRDAxODYwICAgICAgMENDMiAgIE1PVkUgQTIsIFYwCkJGRDAxODYyICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDE4NjQgIDJEMEU3N0U4ICAgSkFMUyB4VGltZXJHZW5lcmljQ29tbWFuZApCRkQwMTg2NiAgICAgIDJEMEUgICBBTkRJIFYwLCBTMCwgMHg4MDAwCkJGRDAxODY4ICAgICAgMEMwMCAgIE5PUApCRkQwMTg2QSAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpCjY2MjogICAgICAgICAgICAgICAgIAkJCQkJCQljb25maWdBU1NFUlQoIHhSZXN1bHQgKTsNCkJGRDAxODZFICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDE4NzIgIDAwNDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE4RkMKQkZEMDE4NzYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDE4NzggIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMTg3QSAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MApCRkQwMTg3QyAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApCkJGRDAxODdFICAwMjk2MzBBMCAgIEFERElVIEExLCBaRVJPLCA2NjIKQkZEMDE4ODIgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAxODg0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAxODg2ICAgICAgMEMwMCAgIE5PUAo2NjM6ICAgICAgICAgICAgICAgICAJCQkJCQkJKCB2b2lkICkgeFJlc3VsdDsNCjY2NDogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjY2NTogICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjY2NjogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjY2NzogICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo2Njg6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo2Njk6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjY3MDogICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KNjcxOiAgICAgICAgICAgICAgICAgCQkJCQl7DQo2NzI6ICAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo2NzM6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjY3NDogICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMTg4OCAgICAgIENDM0EgICBCIDB4QkZEMDE4RkUKQkZEMDE4OEEgICAgICAwQzAwICAgTk9QCkJGRDAxOEYwICAgICAgMEMwMCAgIE5PUApCRkQwMThGMiAgICAgIENDMDUgICBCIDB4QkZEMDE4RkUKQkZEMDE4RjQgICAgICAwQzAwICAgTk9QCkJGRDAxOEY2ICAgICAgMEMwMCAgIE5PUApCRkQwMThGOCAgICAgIENDMDIgICBCIDB4QkZEMDE4RkUKQkZEMDE4RkEgICAgICAwQzAwICAgTk9QCkJGRDAxOEZDICAgICAgMEMwMCAgIE5PUAo2NzU6ICAgICAgICAgICAgICAgICANCjY3NjogICAgICAgICAgICAgICAgIAkJCQljYXNlIHRtckNPTU1BTkRfU1RPUCA6DQo2Nzc6ICAgICAgICAgICAgICAgICAJCQkJY2FzZSB0bXJDT01NQU5EX1NUT1BfRlJPTV9JU1IgOg0KNjc4OiAgICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgdGltZXIgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIGFjdGl2ZSBsaXN0Lg0KNjc5OiAgICAgICAgICAgICAgICAgCQkJCQlUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuICovDQo2ODA6ICAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDE4RUEgICAgICAwQzAwICAgTk9QCkJGRDAxOEVDICAgICAgQ0MwOCAgIEIgMHhCRkQwMThGRQpCRkQwMThFRSAgICAgIDBDMDAgICBOT1AKNjgxOiAgICAgICAgICAgICAgICAgDQo2ODI6ICAgICAgICAgICAgICAgICAJCQkJY2FzZSB0bXJDT01NQU5EX0NIQU5HRV9QRVJJT0QgOg0KNjgzOiAgICAgICAgICAgICAgICAgCQkJCWNhc2UgdG1yQ09NTUFORF9DSEFOR0VfUEVSSU9EX0ZST01fSVNSIDoNCjY4NDogICAgICAgICAgICAgICAgIAkJCQkJcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyA9IHhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy54TWVzc2FnZVZhbHVlOw0KQkZEMDE4OEMgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQpCRkQwMTg5MCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAxODk0ICAgICAgRTlBNiAgIFNXIFYxLCAyNChWMCkKNjg1OiAgICAgICAgICAgICAgICAgCQkJCQljb25maWdBU1NFUlQoICggcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyA+IDAgKSApOw0KQkZEMDE4OTYgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTg5QSAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApCkJGRDAxODlDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxOEIyCkJGRDAxOEEwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAxOEEyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDE4QTQgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODAKQkZEMDE4QTYgIDMwQTA5QUU4ICAgU1dDMSBGMjMsIDEyNDQ4KFQwKQpCRkQwMThBOCAgMDJBRDMwQTAgICBBRERJVSBBMSwgWkVSTywgNjg1CkJGRDAxOEFDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMThBRSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMThCMCAgICAgIDBDMDAgICBOT1AKNjg2OiAgICAgICAgICAgICAgICAgDQo2ODc6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBuZXcgcGVyaW9kIGRvZXMgbm90IHJlYWxseSBoYXZlIGEgcmVmZXJlbmNlLCBhbmQgY2FuIGJlDQo2ODg6ICAgICAgICAgICAgICAgICAJCQkJCWxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9sZCBvbmUuICBUaGUgY29tbWFuZCB0aW1lIGlzDQo2ODk6ICAgICAgICAgICAgICAgICAJCQkJCXRoZXJlZm9yZSBzZXQgdG8gdGhlIGN1cnJlbnQgdGltZSwgYW5kIGFzIHRoZSBwZXJpb2QgY2Fubm90IGJlDQo2OTA6ICAgICAgICAgICAgICAgICAJCQkJCXplcm8gdGhlIG5leHQgZXhwaXJ5IHRpbWUgY2FuIG9ubHkgYmUgaW4gdGhlIGZ1dHVyZSwgbWVhbmluZw0KNjkxOiAgICAgICAgICAgICAgICAgCQkJCQkodW5saWtlIGZvciB0aGUgeFRpbWVyU3RhcnQoKSBjYXNlIGFib3ZlKSB0aGVyZSBpcyBubyBmYWlsIGNhc2UNCjY5MjogICAgICAgICAgICAgICAgIAkJCQkJdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkIGhlcmUuICovDQo2OTM6ICAgICAgICAgICAgICAgICAJCQkJCSggdm9pZCApIHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0KCBweFRpbWVyLCAoIHhUaW1lTm93ICsgcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyApLCB4VGltZU5vdywgeFRpbWVOb3cgKTsNCkJGRDAxOEIyICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDE4QjYgICAgICA2OUE2ICAgTFcgVjEsIDI0KFYwKQpCRkQwMThCOCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAxOEJDICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwMThCRSAgMDAxQ0ZDOUUgICBMVyBBMCwgMjgoUzgpCkJGRDAxOEMyICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDAxOEM0ICAwMDIwRkNERSAgIExXIEEyLCAzMihTOCkKQkZEMDE4QzggIDAwMjBGQ0ZFICAgTFcgQTMsIDMyKFM4KQpCRkQwMThDQyAgMkJFNDc3RTggICBKQUxTIHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0CkJGRDAxOENFICAgICAgMkJFNCAgIExIVSBBMywgOChBMikKQkZEMDE4RDAgICAgICAwQzAwICAgTk9QCjY5NDogICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMThEMiAgICAgIENDMTUgICBCIDB4QkZEMDE4RkUKQkZEMDE4RDQgICAgICAwQzAwICAgTk9QCjY5NTogICAgICAgICAgICAgICAgIA0KNjk2OiAgICAgICAgICAgICAgICAgCQkJCWNhc2UgdG1yQ09NTUFORF9ERUxFVEUgOg0KNjk3OiAgICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgdGltZXIgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIGFjdGl2ZSBsaXN0LA0KNjk4OiAgICAgICAgICAgICAgICAgCQkJCQlqdXN0IGZyZWUgdXAgdGhlIG1lbW9yeS4gKi8NCjY5OTogICAgICAgICAgICAgICAgIAkJCQkJdlBvcnRGcmVlKCBweFRpbWVyICk7DQpCRkQwMThENiAgMDAxQ0ZDOUUgICBMVyBBMCwgMjgoUzgpCkJGRDAxOERBICAyRkVBNzdFOCAgIEpBTFMgdlBvcnRGcmVlCkJGRDAxOERDICAgICAgMkZFQSAgIEFOREkgQTMsIEEyLCAweDIwCkJGRDAxOERFICAgICAgMEMwMCAgIE5PUAo3MDA6ICAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDE4RTAgICAgICBDQzBFICAgQiAweEJGRDAxOEZFCkJGRDAxOEUyICAgICAgMEMwMCAgIE5PUAo3MDE6ICAgICAgICAgICAgICAgICANCjcwMjogICAgICAgICAgICAgICAgIAkJCQlkZWZhdWx0CToNCjcwMzogICAgICAgICAgICAgICAgIAkJCQkJLyogRG9uJ3QgZXhwZWN0IHRvIGdldCBoZXJlLiAqLw0KNzA0OiAgICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxOEU0ICAgICAgMEMwMCAgIE5PUApCRkQwMThFNiAgICAgIENDMEIgICBCIDB4QkZEMDE4RkUKQkZEMDE4RTggICAgICAwQzAwICAgTk9QCjcwNTogICAgICAgICAgICAgICAgIAkJCX0NCjcwNjogICAgICAgICAgICAgICAgIAkJfQ0KNzA3OiAgICAgICAgICAgICAgICAgCX0NCjcwODogICAgICAgICAgICAgICAgIH0NCkJGRDAxOTE4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAxOTFBICAgICAgNEJGMSAgIExXIFJBLCA2OChTUCkKQkZEMDE5MUMgICAgICA0QkQwICAgTFcgUzgsIDY0KFNQKQpCRkQwMTkxRSAgICAgIDRDMjUgICBBRERJVSBTUCwgU1AsIDcyCkJGRDAxOTIwICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDE5MjIgICAgICAwQzAwICAgTk9QCjcwOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNzEwOiAgICAgICAgICAgICAgICAgDQo3MTE6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZTd2l0Y2hUaW1lckxpc3RzKCB2b2lkICkNCjcxMjogICAgICAgICAgICAgICAgIHsNCkJGRDAzRUYwICAgICAgNEZFNSAgIEFERElVIFNQLCBTUCwgLTU2CkJGRDAzRUYyICAgICAgQ0JFRCAgIFNXIFJBLCA1MihTUCkKQkZEMDNFRjQgICAgICBDQkNDICAgU1cgUzgsIDQ4KFNQKQpCRkQwM0VGNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo3MTM6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhOZXh0RXhwaXJlVGltZSwgeFJlbG9hZFRpbWU7DQo3MTQ6ICAgICAgICAgICAgICAgICBMaXN0X3QgKnB4VGVtcDsNCjcxNTogICAgICAgICAgICAgICAgIFRpbWVyX3QgKnB4VGltZXI7DQo3MTY6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXN1bHQ7DQo3MTc6ICAgICAgICAgICAgICAgICANCjcxODogICAgICAgICAgICAgICAgIAkvKiBUaGUgdGljayBjb3VudCBoYXMgb3ZlcmZsb3dlZC4gIFRoZSB0aW1lciBsaXN0cyBtdXN0IGJlIHN3aXRjaGVkLg0KNzE5OiAgICAgICAgICAgICAgICAgCUlmIHRoZXJlIGFyZSBhbnkgdGltZXJzIHN0aWxsIHJlZmVyZW5jZWQgZnJvbSB0aGUgY3VycmVudCB0aW1lciBsaXN0DQo3MjA6ICAgICAgICAgICAgICAgICAJdGhlbiB0aGV5IG11c3QgaGF2ZSBleHBpcmVkIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbGlzdHMNCjcyMTogICAgICAgICAgICAgICAgIAlhcmUgc3dpdGNoZWQuICovDQo3MjI6ICAgICAgICAgICAgICAgICAJd2hpbGUoIGxpc3RMSVNUX0lTX0VNUFRZKCBweEN1cnJlbnRUaW1lckxpc3QgKSA9PSBwZEZBTFNFICkNCkJGRDAzRUY4ICAgICAgQ0M2MSAgIEIgMHhCRkQwM0ZCQwpCRkQwM0VGQSAgICAgIDBDMDAgICBOT1AKQkZEMDNGQkMgIDgwNjBGQzVDICAgTFcgVjAsIC0zMjY3MihHUCkKQkZEMDNGQzAgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAzRkMyICBGRjlCNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzRUZDCkJGRDAzRkM0ICBGQzVDRkY5QiAgIExXIEdQLCAtOTMyKEsxKQo3MjM6ICAgICAgICAgICAgICAgICAJew0KNzI0OiAgICAgICAgICAgICAgICAgCQl4TmV4dEV4cGlyZVRpbWUgPSBsaXN0R0VUX0lURU1fVkFMVUVfT0ZfSEVBRF9FTlRSWSggcHhDdXJyZW50VGltZXJMaXN0ICk7DQpCRkQwM0VGQyAgODA2MEZDNUMgICBMVyBWMCwgLTMyNjcyKEdQKQpCRkQwM0YwMCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDAzRjAyICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwM0YwNCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjcyNTogICAgICAgICAgICAgICAgIA0KNzI2OiAgICAgICAgICAgICAgICAgCQkvKiBSZW1vdmUgdGhlIHRpbWVyIGZyb20gdGhlIGxpc3QuICovDQo3Mjc6ICAgICAgICAgICAgICAgICAJCXB4VGltZXIgPSAoIFRpbWVyX3QgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggcHhDdXJyZW50VGltZXJMaXN0ICk7DQpCRkQwM0YwOCAgODA2MEZDNUMgICBMVyBWMCwgLTMyNjcyKEdQKQpCRkQwM0YwQyAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDAzRjBFICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkKQkZEMDNGMTAgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo3Mjg6ICAgICAgICAgICAgICAgICAJCSggdm9pZCApIHV4TGlzdFJlbW92ZSggJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSApOw0KQkZEMDNGMTQgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwM0YxOCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDNGMUEgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDNGMUMgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUKQkZEMDNGMUUgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQpCRkQwM0YyMCAgICAgIDBDMDAgICBOT1AKNzI5OiAgICAgICAgICAgICAgICAgCQl0cmFjZVRJTUVSX0VYUElSRUQoIHB4VGltZXIgKTsNCjczMDogICAgICAgICAgICAgICAgIA0KNzMxOiAgICAgICAgICAgICAgICAgCQkvKiBFeGVjdXRlIGl0cyBjYWxsYmFjaywgdGhlbiBzZW5kIGEgY29tbWFuZCB0byByZXN0YXJ0IHRoZSB0aW1lciBpZg0KNzMyOiAgICAgICAgICAgICAgICAgCQlpdCBpcyBhbiBhdXRvLXJlbG9hZCB0aW1lci4gIEl0IGNhbm5vdCBiZSByZXN0YXJ0ZWQgaGVyZSBhcyB0aGUgbGlzdHMNCjczMzogICAgICAgICAgICAgICAgIAkJaGF2ZSBub3QgeWV0IGJlZW4gc3dpdGNoZWQuICovDQo3MzQ6ICAgICAgICAgICAgICAgICAJCXB4VGltZXItPnB4Q2FsbGJhY2tGdW5jdGlvbiggKCBUaW1lckhhbmRsZV90ICkgcHhUaW1lciApOw0KQkZEMDNGMjIgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwM0YyNiAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApCkJGRDAzRjI4ICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkKQkZEMDNGMkMgICAgICA0NUUyICAgSkFMUlMxNiBWMApCRkQwM0YyRSAgICAgIDBDMDAgICBOT1AKNzM1OiAgICAgICAgICAgICAgICAgDQo3MzY6ICAgICAgICAgICAgICAgICAJCWlmKCBweFRpbWVyLT51eEF1dG9SZWxvYWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkVFJVRSApDQpCRkQwM0YzMCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAzRjM0ICAgICAgNjlBNyAgIExXIFYxLCAyOChWMCkKQkZEMDNGMzYgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDNGMzggIDAwNDBCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwM0ZCQwpCRkQwM0YzQSAgMEMwMDAwNDAgICBTTEwgVjAsIFpFUk8sIDEKQkZEMDNGM0MgICAgICAwQzAwICAgTk9QCjczNzogICAgICAgICAgICAgICAgIAkJew0KNzM4OiAgICAgICAgICAgICAgICAgCQkJLyogQ2FsY3VsYXRlIHRoZSByZWxvYWQgdmFsdWUsIGFuZCBpZiB0aGUgcmVsb2FkIHZhbHVlIHJlc3VsdHMgaW4NCjczOTogICAgICAgICAgICAgICAgIAkJCXRoZSB0aW1lciBnb2luZyBpbnRvIHRoZSBzYW1lIHRpbWVyIGxpc3QgdGhlbiBpdCBoYXMgYWxyZWFkeSBleHBpcmVkDQo3NDA6ICAgICAgICAgICAgICAgICAJCQlhbmQgdGhlIHRpbWVyIHNob3VsZCBiZSByZS1pbnNlcnRlZCBpbnRvIHRoZSBjdXJyZW50IGxpc3Qgc28gaXQgaXMNCjc0MTogICAgICAgICAgICAgICAgIAkJCXByb2Nlc3NlZCBhZ2FpbiB3aXRoaW4gdGhpcyBsb29wLiAgT3RoZXJ3aXNlIGEgY29tbWFuZCBzaG91bGQgYmUgc2VudA0KNzQyOiAgICAgICAgICAgICAgICAgCQkJdG8gcmVzdGFydCB0aGUgdGltZXIgdG8gZW5zdXJlIGl0IGlzIG9ubHkgaW5zZXJ0ZWQgaW50byBhIGxpc3QgYWZ0ZXINCjc0MzogICAgICAgICAgICAgICAgIAkJCXRoZSBsaXN0cyBoYXZlIGJlZW4gc3dhcHBlZC4gKi8NCjc0NDogICAgICAgICAgICAgICAgIAkJCXhSZWxvYWRUaW1lID0gKCB4TmV4dEV4cGlyZVRpbWUgKyBweFRpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzICk7DQpCRkQwM0YzRSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAzRjQyICAgICAgNjlBNiAgIExXIFYxLCAyNChWMCkKQkZEMDNGNDQgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0Y0OCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDNGNEEgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQo3NDU6ICAgICAgICAgICAgICAgICAJCQlpZiggeFJlbG9hZFRpbWUgPiB4TmV4dEV4cGlyZVRpbWUgKQ0KQkZEMDNGNEUgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQpCRkQwM0Y1MiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAzRjU2ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQpCRkQwM0Y1OCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTAKQkZEMDNGNUEgIDAwMTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNGOEEKNzQ2OiAgICAgICAgICAgICAgICAgCQkJew0KNzQ3OiAgICAgICAgICAgICAgICAgCQkJCWxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApLCB4UmVsb2FkVGltZSApOw0KQkZEMDNGNUUgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwM0Y2MiAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDAzRjY2ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQo3NDg6ICAgICAgICAgICAgICAgICAJCQkJbGlzdFNFVF9MSVNUX0lURU1fT1dORVIoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICksIHB4VGltZXIgKTsNCkJGRDAzRjY4ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDNGNkMgIDAwMUNGQzdFICAgTFcgVjEsIDI4KFM4KQpCRkQwM0Y3MCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjc0OTogICAgICAgICAgICAgICAgIAkJCQl2TGlzdEluc2VydCggcHhDdXJyZW50VGltZXJMaXN0LCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQpCRkQwM0Y3MiAgODA2MEZDN0MgICBMVyBWMSwgLTMyNjcyKEdQKQpCRkQwM0Y3NiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAzRjdBICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwM0Y3QyAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwM0Y3RSAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwM0Y4MCAgMzA0MDc3RTggICBKQUxTIHZMaXN0SW5zZXJ0CkJGRDAzRjgyICAwQzAwMzA0MCAgIEFERElVIFYwLCBaRVJPLCAzMDcyCkJGRDAzRjg0ICAgICAgMEMwMCAgIE5PUApCRkQwM0Y4NiAgICAgIENDMUEgICBCIDB4QkZEMDNGQkMKQkZEMDNGODggICAgICAwQzAwICAgTk9QCjc1MDogICAgICAgICAgICAgICAgIAkJCX0NCjc1MTogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjc1MjogICAgICAgICAgICAgICAgIAkJCXsNCjc1MzogICAgICAgICAgICAgICAgIAkJCQl4UmVzdWx0ID0geFRpbWVyR2VuZXJpY0NvbW1hbmQoIHB4VGltZXIsIHRtckNPTU1BTkRfU1RBUlRfRE9OVF9UUkFDRSwgeE5leHRFeHBpcmVUaW1lLCBOVUxMLCB0bXJOT19ERUxBWSApOw0KQkZEMDNGOEEgICAgICBDODA0ICAgU1cgWkVSTywgMTYoU1ApCkJGRDAzRjhDICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkKQkZEMDNGOTAgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTwpCRkQwM0Y5MiAgMDAxOEZDREUgICBMVyBBMiwgMjQoUzgpCkJGRDAzRjk2ICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDNGOTggIDJEMEU3N0U4ICAgSkFMUyB4VGltZXJHZW5lcmljQ29tbWFuZApCRkQwM0Y5QSAgICAgIDJEMEUgICBBTkRJIFYwLCBTMCwgMHg4MDAwCkJGRDAzRjlDICAgICAgMEMwMCAgIE5PUApCRkQwM0Y5RSAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpCjc1NDogICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIHhSZXN1bHQgKTsNCkJGRDAzRkEyICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDNGQTYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNGQkMKQkZEMDNGQUEgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDNGQUMgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwM0ZBRSAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MApCRkQwM0ZCMCAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApCkJGRDAzRkIyICAwMkYyMzBBMCAgIEFERElVIEExLCBaRVJPLCA3NTQKQkZEMDNGQjYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAzRkI4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAzRkJBICAgICAgMEMwMCAgIE5PUAo3NTU6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFJlc3VsdDsNCjc1NjogICAgICAgICAgICAgICAgIAkJCX0NCjc1NzogICAgICAgICAgICAgICAgIAkJfQ0KNzU4OiAgICAgICAgICAgICAgICAgCQllbHNlDQo3NTk6ICAgICAgICAgICAgICAgICAJCXsNCjc2MDogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjc2MTogICAgICAgICAgICAgICAgIAkJfQ0KNzYyOiAgICAgICAgICAgICAgICAgCX0NCjc2MzogICAgICAgICAgICAgICAgIA0KNzY0OiAgICAgICAgICAgICAgICAgCXB4VGVtcCA9IHB4Q3VycmVudFRpbWVyTGlzdDsNCkJGRDAzRkM2ICA4MDYwRkM1QyAgIExXIFYwLCAtMzI2NzIoR1ApCkJGRDAzRkNBICAwMDI4Rjg1RSAgIFNXIFYwLCA0MChTOCkKNzY1OiAgICAgICAgICAgICAgICAgCXB4Q3VycmVudFRpbWVyTGlzdCA9IHB4T3ZlcmZsb3dUaW1lckxpc3Q7DQpCRkQwM0ZDRSAgODA2NEZDNUMgICBMVyBWMCwgLTMyNjY4KEdQKQpCRkQwM0ZEMiAgODA2MEY4NUMgICBTVyBWMCwgLTMyNjcyKEdQKQo3NjY6ICAgICAgICAgICAgICAgICAJcHhPdmVyZmxvd1RpbWVyTGlzdCA9IHB4VGVtcDsNCkJGRDAzRkQ2ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDNGREEgIDgwNjRGODVDICAgU1cgVjAsIC0zMjY2OChHUCkKNzY3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDNGREUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDNGRTAgICAgICA0QkVEICAgTFcgUkEsIDUyKFNQKQpCRkQwM0ZFMiAgICAgIDRCQ0MgICBMVyBTOCwgNDgoU1ApCkJGRDAzRkU0ICAgICAgNEMxRCAgIEFERElVIFNQLCBTUCwgNTYKQkZEMDNGRTYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwM0ZFOCAgICAgIDBDMDAgICBOT1AKNzY4OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo3Njk6ICAgICAgICAgICAgICAgICANCjc3MDogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkNoZWNrRm9yVmFsaWRMaXN0QW5kUXVldWUoIHZvaWQgKQ0KNzcxOiAgICAgICAgICAgICAgICAgew0KQkZEMDZCRTggICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQKQkZEMDZCRUEgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQpCRkQwNkJFQyAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApCkJGRDA2QkVFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjc3MjogICAgICAgICAgICAgICAgIAkvKiBDaGVjayB0aGF0IHRoZSBsaXN0IGZyb20gd2hpY2ggYWN0aXZlIHRpbWVycyBhcmUgcmVmZXJlbmNlZCwgYW5kIHRoZQ0KNzczOiAgICAgICAgICAgICAgICAgCXF1ZXVlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgdGltZXIgc2VydmljZSwgaGF2ZSBiZWVuDQo3NzQ6ICAgICAgICAgICAgICAgICAJaW5pdGlhbGlzZWQuICovDQo3NzU6ICAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwNkJGMCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwNkJGMiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDZCRjQgICAgICAwQzAwICAgTk9QCjc3NjogICAgICAgICAgICAgICAgIAl7DQo3Nzc6ICAgICAgICAgICAgICAgICAJCWlmKCB4VGltZXJRdWV1ZSA9PSBOVUxMICkNCkJGRDA2QkY2ICA4MDY4RkM1QyAgIExXIFYwLCAtMzI2NjQoR1ApCkJGRDA2QkZBICAwMDJGNDBBMiAgIEJORVpDIFYwLCAweEJGRDA2QzVDCjc3ODogICAgICAgICAgICAgICAgIAkJew0KNzc5OiAgICAgICAgICAgICAgICAgCQkJdkxpc3RJbml0aWFsaXNlKCAmeEFjdGl2ZVRpbWVyTGlzdDEgKTsNCkJGRDA2QkZFICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2QzAwICAzMDgyQkZEMiAgIExEQzEgRjMwLCAxMjQxOChTMikKQkZEMDZDMDIgIEI5NDgzMDgyICAgQURESVUgQTAsIFYwLCAtMTgxMDQKQkZEMDZDMDQgIDc3RThCOTQ4ICAgU0RDMSBGMTAsIDMwNjk2KFQwKQpCRkQwNkMwNiAgNDU3MDc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZQpCRkQwNkMwOCAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApCkJGRDA2QzBBICAgICAgMEMwMCAgIE5PUAo3ODA6ICAgICAgICAgICAgICAgICAJCQl2TGlzdEluaXRpYWxpc2UoICZ4QWN0aXZlVGltZXJMaXN0MiApOw0KQkZEMDZDMEMgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDZDMEUgIDMwODJCRkQyICAgTERDMSBGMzAsIDEyNDE4KFMyKQpCRkQwNkMxMCAgQjk1QzMwODIgICBBRERJVSBBMCwgVjAsIC0xODA4NApCRkQwNkMxMiAgNzdFOEI5NUMgICBTREMxIEYxMCwgMzA2OTYoR1ApCkJGRDA2QzE0ICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlCkJGRDA2QzE2ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkKQkZEMDZDMTggICAgICAwQzAwICAgTk9QCjc4MTogICAgICAgICAgICAgICAgIAkJCXB4Q3VycmVudFRpbWVyTGlzdCA9ICZ4QWN0aXZlVGltZXJMaXN0MTsNCkJGRDA2QzFBICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2QzFDICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDZDMUUgIEI5NDgzMDQyICAgQURESVUgVjAsIFYwLCAtMTgxMDQKQkZEMDZDMjAgIEY4NUNCOTQ4ICAgU0RDMSBGMTAsIC0xOTU2KFQwKQpCRkQwNkMyMiAgODA2MEY4NUMgICBTVyBWMCwgLTMyNjcyKEdQKQo3ODI6ICAgICAgICAgICAgICAgICAJCQlweE92ZXJmbG93VGltZXJMaXN0ID0gJnhBY3RpdmVUaW1lckxpc3QyOw0KQkZEMDZDMjYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDZDMjggIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwNkMyQSAgQjk1QzMwNDIgICBBRERJVSBWMCwgVjAsIC0xODA4NApCRkQwNkMyQyAgRjg1Q0I5NUMgICBTREMxIEYxMCwgLTE5NTYoR1ApCkJGRDA2QzJFICA4MDY0Rjg1QyAgIFNXIFYwLCAtMzI2NjgoR1ApCjc4MzogICAgICAgICAgICAgICAgIAkJCXhUaW1lclF1ZXVlID0geFF1ZXVlQ3JlYXRlKCAoIFVCYXNlVHlwZV90ICkgY29uZmlnVElNRVJfUVVFVUVfTEVOR1RILCBzaXplb2YoIERhZW1vblRhc2tNZXNzYWdlX3QgKSApOw0KQkZEMDZDMzIgICAgICBFRTA1ICAgTEkgQTAsIDUKQkZEMDZDMzQgICAgICBFRTkwICAgTEkgQTEsIDE2CkJGRDA2QzM2ICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8KQkZEMDZDMzggIDFFRkE3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljQ3JlYXRlCkJGRDA2QzNBICAwQzAwMUVGQSAgIExCIFM3LCAzMDcyKEswKQpCRkQwNkMzQyAgICAgIDBDMDAgICBOT1AKQkZEMDZDM0UgIDgwNjhGODVDICAgU1cgVjAsIC0zMjY2NChHUCkKNzg0OiAgICAgICAgICAgICAgICAgCQkJY29uZmlnQVNTRVJUKCB4VGltZXJRdWV1ZSApOw0KQkZEMDZDNDIgIDgwNjhGQzVDICAgTFcgVjAsIC0zMjY2NChHUCkKQkZEMDZDNDYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZDNUMKQkZEMDZDNEEgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDZDNEMgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNkM0RSAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MApCRkQwNkM1MCAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApCkJGRDA2QzUyICAwMzEwMzBBMCAgIEFERElVIEExLCBaRVJPLCA3ODQKQkZEMDZDNTYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA2QzU4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA2QzVBICAgICAgMEMwMCAgIE5PUAo3ODU6ICAgICAgICAgICAgICAgICANCjc4NjogICAgICAgICAgICAgICAgIAkJCSNpZiAoIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgPiAwICkNCjc4NzogICAgICAgICAgICAgICAgIAkJCXsNCjc4ODogICAgICAgICAgICAgICAgIAkJCQlpZiggeFRpbWVyUXVldWUgIT0gTlVMTCApDQo3ODk6ICAgICAgICAgICAgICAgICAJCQkJew0KNzkwOiAgICAgICAgICAgICAgICAgCQkJCQl2UXVldWVBZGRUb1JlZ2lzdHJ5KCB4VGltZXJRdWV1ZSwgIlRtclEiICk7DQo3OTE6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNzkyOiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjc5MzogICAgICAgICAgICAgICAgIAkJCQl7DQo3OTQ6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjc5NTogICAgICAgICAgICAgICAgIAkJCQl9DQo3OTY6ICAgICAgICAgICAgICAgICAJCQl9DQo3OTc6ICAgICAgICAgICAgICAgICAJCQkjZW5kaWYgLyogY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSAqLw0KNzk4OiAgICAgICAgICAgICAgICAgCQl9DQo3OTk6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjgwMDogICAgICAgICAgICAgICAgIAkJew0KODAxOiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KODAyOiAgICAgICAgICAgICAgICAgCQl9DQo4MDM6ICAgICAgICAgICAgICAgICAJfQ0KODA0OiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwNkM1QyAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA2QzVFICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA4NDYyCkJGRDA2QzYwICAgICAgMEMwMCAgIE5PUAo4MDU6ICAgICAgICAgICAgICAgICB9DQpCRkQwNkM2MiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNkM2NCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA2QzY2ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDZDNjggICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwNkM2QSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2QzZDICAgICAgMEMwMCAgIE5PUAo4MDY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjgwNzogICAgICAgICAgICAgICAgIA0KODA4OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZXJJc1RpbWVyQWN0aXZlKCBUaW1lckhhbmRsZV90IHhUaW1lciApDQo4MDk6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTNFMCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOTNFMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA5M0U0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDkzRTYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDkzRTggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQo4MTA6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhUaW1lcklzSW5BY3RpdmVMaXN0Ow0KODExOiAgICAgICAgICAgICAgICAgVGltZXJfdCAqcHhUaW1lciA9ICggVGltZXJfdCAqICkgeFRpbWVyOw0KQkZEMDkzRUMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwOTNGMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjgxMjogICAgICAgICAgICAgICAgIA0KODEzOiAgICAgICAgICAgICAgICAgCS8qIElzIHRoZSB0aW1lciBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzPyAqLw0KODE0OiAgICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDkzRjQgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDkzRjYgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA5M0Y4ICAgICAgMEMwMCAgIE5PUAo4MTU6ICAgICAgICAgICAgICAgICAJew0KODE2OiAgICAgICAgICAgICAgICAgCQkvKiBDaGVja2luZyB0byBzZWUgaWYgaXQgaXMgaW4gdGhlIE5VTEwgbGlzdCBpbiBlZmZlY3QgY2hlY2tzIHRvIHNlZSBpZg0KODE3OiAgICAgICAgICAgICAgICAgCQlpdCBpcyByZWZlcmVuY2VkIGZyb20gZWl0aGVyIHRoZSBjdXJyZW50IG9yIHRoZSBvdmVyZmxvdyB0aW1lciBsaXN0cyBpbg0KODE4OiAgICAgICAgICAgICAgICAgCQlvbmUgZ28sIGJ1dCB0aGUgbG9naWMgaGFzIHRvIGJlIHJldmVyc2VkLCBoZW5jZSB0aGUgJyEnLiAqLw0KODE5OiAgICAgICAgICAgICAgICAgCQl4VGltZXJJc0luQWN0aXZlTGlzdCA9ICggQmFzZVR5cGVfdCApICEoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCBOVUxMLCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICkgKTsNCkJGRDA5M0ZBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDkzRkUgICAgICA2OTI1ICAgTFcgVjAsIDIwKFYwKQpCRkQwOTQwMCAgMTM5MDAwNDAgICBTTFRVIFYwLCBaRVJPLCBWMApCRkQwOTQwMiAgRjg1RTEzOTAgICBBRERJIEdQLCBTMCwgLTE5NTQKQkZEMDk0MDQgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo4MjA6ICAgICAgICAgICAgICAgICAJfQ0KODIxOiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwOTQwOCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA5NDBBICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDBBQzBFCkJGRDA5NDBDICAgICAgMEMwMCAgIE5PUAo4MjI6ICAgICAgICAgICAgICAgICANCjgyMzogICAgICAgICAgICAgICAgIAlyZXR1cm4geFRpbWVySXNJbkFjdGl2ZUxpc3Q7DQpCRkQwOTQwRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCjgyNDogICAgICAgICAgICAgICAgIH0gLypsaW50ICFlODE4IENhbid0IGJlIHBvaW50ZXIgdG8gY29uc3QgZHVlIHRvIHRoZSB0eXBlZGVmLiAqLw0KQkZEMDk0MTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk0MTQgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTQxNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5NDE4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDk0MUEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTQxQyAgICAgIDBDMDAgICBOT1AKODI1OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4MjY6ICAgICAgICAgICAgICAgICANCjgyNzogICAgICAgICAgICAgICAgIHZvaWQgKnB2VGltZXJHZXRUaW1lcklEKCBjb25zdCBUaW1lckhhbmRsZV90IHhUaW1lciApDQo4Mjg6ICAgICAgICAgICAgICAgICB7DQpCRkQwODc1QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODc1RSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4NzYwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDg3NjIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDg3NjQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQo4Mjk6ICAgICAgICAgICAgICAgICBUaW1lcl90ICogY29uc3QgcHhUaW1lciA9ICggVGltZXJfdCAqICkgeFRpbWVyOw0KQkZEMDg3NjggIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwODc2QyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjgzMDogICAgICAgICAgICAgICAgIHZvaWQgKnB2UmV0dXJuOw0KODMxOiAgICAgICAgICAgICAgICAgDQo4MzI6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4VGltZXIgKTsNCkJGRDA4NzcwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDg3NzQgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg3OEEKQkZEMDg3NzggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDg3N0EgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwODc3QyAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MApCRkQwODc3RSAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApCkJGRDA4NzgwICAwMzQwMzBBMCAgIEFERElVIEExLCBaRVJPLCA4MzIKQkZEMDg3ODQgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA4Nzg2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA4Nzg4ICAgICAgMEMwMCAgIE5PUAo4MzM6ICAgICAgICAgICAgICAgICANCjgzNDogICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA4NzhBICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDA4NzhDICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwODc4RSAgICAgIDBDMDAgICBOT1AKODM1OiAgICAgICAgICAgICAgICAgCXsNCjgzNjogICAgICAgICAgICAgICAgIAkJcHZSZXR1cm4gPSBweFRpbWVyLT5wdlRpbWVySUQ7DQpCRkQwODc5MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4Nzk0ICAgICAgNjkyOCAgIExXIFYwLCAzMihWMCkKQkZEMDg3OTYgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo4Mzc6ICAgICAgICAgICAgICAgICAJfQ0KODM4OiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwODc5QSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA4NzlDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA5RkEwCkJGRDA4NzlFICAgICAgMEMwMCAgIE5PUAo4Mzk6ICAgICAgICAgICAgICAgICANCjg0MDogICAgICAgICAgICAgICAgIAlyZXR1cm4gcHZSZXR1cm47DQpCRkQwODdBMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCjg0MTogICAgICAgICAgICAgICAgIH0NCkJGRDA4N0E0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4N0E2ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDg3QTggICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwODdBQSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4N0FDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDg3QUUgICAgICAwQzAwICAgTk9QCjg0MjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KODQzOiAgICAgICAgICAgICAgICAgDQo4NDQ6ICAgICAgICAgICAgICAgICB2b2lkIHZUaW1lclNldFRpbWVySUQoIFRpbWVySGFuZGxlX3QgeFRpbWVyLCB2b2lkICpwdk5ld0lEICkNCjg0NTogICAgICAgICAgICAgICAgIHsNCkJGRDA4N0IwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4N0IyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDg3QjQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODdCNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODdCOCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA4N0JDICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKODQ2OiAgICAgICAgICAgICAgICAgVGltZXJfdCAqIGNvbnN0IHB4VGltZXIgPSAoIFRpbWVyX3QgKiApIHhUaW1lcjsNCkJGRDA4N0MwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDg3QzQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo4NDc6ICAgICAgICAgICAgICAgICANCjg0ODogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHhUaW1lciApOw0KQkZEMDg3QzggIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwODdDQyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODdFMgpCRkQwODdEMCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwODdEMiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA4N0Q0ICA5QUU4MzA4MiAgIEFERElVIEEwLCBWMCwgLTI1ODgwCkJGRDA4N0Q2ICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkKQkZEMDg3RDggIDAzNTAzMEEwICAgQURESVUgQTEsIFpFUk8sIDg0OApCRkQwODdEQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDg3REUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDg3RTAgICAgICAwQzAwICAgTk9QCjg0OTogICAgICAgICAgICAgICAgIA0KODUwOiAgICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDg3RTIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDg3RTQgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA4N0U2ICAgICAgMEMwMCAgIE5PUAo4NTE6ICAgICAgICAgICAgICAgICAJew0KODUyOiAgICAgICAgICAgICAgICAgCQlweFRpbWVyLT5wdlRpbWVySUQgPSBwdk5ld0lEOw0KQkZEMDg3RTggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODdFQyAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpCkJGRDA4N0YwICAgICAgRTlBOCAgIFNXIFYxLCAzMihWMCkKODUzOiAgICAgICAgICAgICAgICAgCX0NCjg1NDogICAgICAgICAgICAgICAgIAl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDg3RjIgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwODdGNCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwOUZGOApCRkQwODdGNiAgICAgIDBDMDAgICBOT1AKODU1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDg3RjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDg3RkEgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwODdGQyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4N0ZFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDg4MDAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODgwMiAgICAgIDBDMDAgICBOT1AKODU2OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4NTc6ICAgICAgICAgICAgICAgICANCjg1ODogICAgICAgICAgICAgICAgICNpZiggSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsID09IDEgKQ0KODU5OiAgICAgICAgICAgICAgICAgDQo4NjA6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGltZXJQZW5kRnVuY3Rpb25DYWxsRnJvbUlTUiggUGVuZGVkRnVuY3Rpb25fdCB4RnVuY3Rpb25Ub1BlbmQsIHZvaWQgKnB2UGFyYW1ldGVyMSwgdWludDMyX3QgdWxQYXJhbWV0ZXIyLCBCYXNlVHlwZV90ICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCjg2MTogICAgICAgICAgICAgICAgIAl7DQpCRkQwN0Y2NCAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OApCRkQwN0Y2NiAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApCkJGRDA3RjY4ICAgICAgQ0JDQSAgIFNXIFM4LCA0MChTUCkKQkZEMDdGNkEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDdGNkMgIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQpCRkQwN0Y3MCAgMDAzNEY4QkUgICBTVyBBMSwgNTIoUzgpCkJGRDA3Rjc0ICAwMDM4RjhERSAgIFNXIEEyLCA1NihTOCkKQkZEMDdGNzggIDAwM0NGOEZFICAgU1cgQTMsIDYwKFM4KQpCRkQwN0Y3QSAgMzA0MDAwM0MgICBTUkwgQVQsIEdQLCA2Cjg2MjogICAgICAgICAgICAgICAgIAlEYWVtb25UYXNrTWVzc2FnZV90IHhNZXNzYWdlOw0KODYzOiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjg2NDogICAgICAgICAgICAgICAgIA0KODY1OiAgICAgICAgICAgICAgICAgCQkvKiBDb21wbGV0ZSB0aGUgbWVzc2FnZSB3aXRoIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBwb3N0IGl0IHRvIHRoZQ0KODY2OiAgICAgICAgICAgICAgICAgCQlkYWVtb24gdGFzay4gKi8NCjg2NzogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UueE1lc3NhZ2VJRCA9IHRtckNPTU1BTkRfRVhFQ1VURV9DQUxMQkFDS19GUk9NX0lTUjsNCkJGRDA3RjdDICBGRkZFMzA0MCAgIEFERElVIFYwLCBaRVJPLCAtMgpCRkQwN0Y3RSAgRjg1RUZGRkUgICBMVyBSQSwgLTE5NTQoUzgpCkJGRDA3RjgwICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKODY4OiAgICAgICAgICAgICAgICAgCQl4TWVzc2FnZS51LnhDYWxsYmFja1BhcmFtZXRlcnMucHhDYWxsYmFja0Z1bmN0aW9uID0geEZ1bmN0aW9uVG9QZW5kOw0KQkZEMDdGODQgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwN0Y4OCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjg2OTogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UudS54Q2FsbGJhY2tQYXJhbWV0ZXJzLnB2UGFyYW1ldGVyMSA9IHB2UGFyYW1ldGVyMTsNCkJGRDA3RjhDICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkKQkZEMDdGOTAgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo4NzA6ICAgICAgICAgICAgICAgICAJCXhNZXNzYWdlLnUueENhbGxiYWNrUGFyYW1ldGVycy51bFBhcmFtZXRlcjIgPSB1bFBhcmFtZXRlcjI7DQpCRkQwN0Y5NCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpCkJGRDA3Rjk4ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKODcxOiAgICAgICAgICAgICAgICAgDQo4NzI6ICAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSB4UXVldWVTZW5kRnJvbUlTUiggeFRpbWVyUXVldWUsICZ4TWVzc2FnZSwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KQkZEMDdGOUMgIDgwNjhGQzdDICAgTFcgVjEsIC0zMjY2NChHUCkKQkZEMDdGQTAgIDAwMTQzMDVFICAgQURESVUgVjAsIFM4LCAyMApCRkQwN0ZBNCAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwN0ZBNiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwN0ZBOCAgMDAzQ0ZDREUgICBMVyBBMiwgNjAoUzgpCkJGRDA3RkFDICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDdGQUUgIDExRUE3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljU2VuZEZyb21JU1IKQkZEMDdGQjAgIDBDMDAxMUVBICAgQURESSBUNywgVDIsIDMwNzIKQkZEMDdGQjIgICAgICAwQzAwICAgTk9QCkJGRDA3RkI0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKODczOiAgICAgICAgICAgICAgICAgDQo4NzQ6ICAgICAgICAgICAgICAgICAJCXRyYWNlUEVORF9GVU5DX0NBTExfRlJPTV9JU1IoIHhGdW5jdGlvblRvUGVuZCwgcHZQYXJhbWV0ZXIxLCB1bFBhcmFtZXRlcjIsIHhSZXR1cm4gKTsNCjg3NTogICAgICAgICAgICAgICAgIA0KODc2OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA3RkI4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKODc3OiAgICAgICAgICAgICAgICAgCX0NCkJGRDA3RkJDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3RkJFICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkKQkZEMDdGQzAgICAgICA0QkNBICAgTFcgUzgsIDQwKFNQKQpCRkQwN0ZDMiAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4CkJGRDA3RkM0ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDdGQzYgICAgICAwQzAwICAgTk9QCjg3ODogICAgICAgICAgICAgICAgIA0KODc5OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfeFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbCAqLw0KODgwOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4ODE6ICAgICAgICAgICAgICAgICANCjg4MjogICAgICAgICAgICAgICAgICNpZiggSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsID09IDEgKQ0KODgzOiAgICAgICAgICAgICAgICAgDQo4ODQ6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGltZXJQZW5kRnVuY3Rpb25DYWxsKCBQZW5kZWRGdW5jdGlvbl90IHhGdW5jdGlvblRvUGVuZCwgdm9pZCAqcHZQYXJhbWV0ZXIxLCB1aW50MzJfdCB1bFBhcmFtZXRlcjIsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjg4NTogICAgICAgICAgICAgICAgIAl7DQpCRkQwNkQ3MCAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OApCRkQwNkQ3MiAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApCkJGRDA2RDc0ICAgICAgQ0JDQSAgIFNXIFM4LCA0MChTUCkKQkZEMDZENzYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDZENzggIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQpCRkQwNkQ3QyAgMDAzNEY4QkUgICBTVyBBMSwgNTIoUzgpCkJGRDA2RDgwICAwMDM4RjhERSAgIFNXIEEyLCA1NihTOCkKQkZEMDZEODQgIDAwM0NGOEZFICAgU1cgQTMsIDYwKFM4KQo4ODY6ICAgICAgICAgICAgICAgICAJRGFlbW9uVGFza01lc3NhZ2VfdCB4TWVzc2FnZTsNCjg4NzogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQo4ODg6ICAgICAgICAgICAgICAgICANCjg4OTogICAgICAgICAgICAgICAgIAkJLyogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSB0aW1lciBoYXMgYmVlbiBjcmVhdGVkIG9yDQo4OTA6ICAgICAgICAgICAgICAgICAJCWFmdGVyIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZCBiZWNhdXNlLCB1bnRpbCB0aGVuLCB0aGUgdGltZXINCjg5MTogICAgICAgICAgICAgICAgIAkJcXVldWUgZG9lcyBub3QgZXhpc3QuICovDQo4OTI6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRpbWVyUXVldWUgKTsNCkJGRDA2RDg4ICA4MDY4RkM1QyAgIExXIFYwLCAtMzI2NjQoR1ApCkJGRDA2RDhDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2REEyCkJGRDA2RDkwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA2RDkyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDZEOTQgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODAKQkZEMDZEOTYgIDMwQTA5QUU4ICAgU1dDMSBGMjMsIDEyNDQ4KFQwKQpCRkQwNkQ5OCAgMDM3QzMwQTAgICBBRERJVSBBMSwgWkVSTywgODkyCkJGRDA2RDlDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNkQ5RSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNkRBMCAgICAgIDBDMDAgICBOT1AKODkzOiAgICAgICAgICAgICAgICAgDQo4OTQ6ICAgICAgICAgICAgICAgICAJCS8qIENvbXBsZXRlIHRoZSBtZXNzYWdlIHdpdGggdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIHBvc3QgaXQgdG8gdGhlDQo4OTU6ICAgICAgICAgICAgICAgICAJCWRhZW1vbiB0YXNrLiAqLw0KODk2OiAgICAgICAgICAgICAgICAgCQl4TWVzc2FnZS54TWVzc2FnZUlEID0gdG1yQ09NTUFORF9FWEVDVVRFX0NBTExCQUNLOw0KQkZEMDZEQTIgICAgICBFRDdGICAgTEkgVjAsIC0xCkJGRDA2REE0ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKODk3OiAgICAgICAgICAgICAgICAgCQl4TWVzc2FnZS51LnhDYWxsYmFja1BhcmFtZXRlcnMucHhDYWxsYmFja0Z1bmN0aW9uID0geEZ1bmN0aW9uVG9QZW5kOw0KQkZEMDZEQTggIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwNkRBQyAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjg5ODogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UudS54Q2FsbGJhY2tQYXJhbWV0ZXJzLnB2UGFyYW1ldGVyMSA9IHB2UGFyYW1ldGVyMTsNCkJGRDA2REIwICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkKQkZEMDZEQjQgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo4OTk6ICAgICAgICAgICAgICAgICAJCXhNZXNzYWdlLnUueENhbGxiYWNrUGFyYW1ldGVycy51bFBhcmFtZXRlcjIgPSB1bFBhcmFtZXRlcjI7DQpCRkQwNkRCOCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpCkJGRDA2REJDICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKOTAwOiAgICAgICAgICAgICAgICAgDQo5MDE6ICAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSB4UXVldWVTZW5kVG9CYWNrKCB4VGltZXJRdWV1ZSwgJnhNZXNzYWdlLCB4VGlja3NUb1dhaXQgKTsNCkJGRDA2REMwICA4MDY4RkM3QyAgIExXIFYxLCAtMzI2NjQoR1ApCkJGRDA2REM0ICAwMDE0MzA1RSAgIEFERElVIFYwLCBTOCwgMjAKQkZEMDZEQzggICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDZEQ0EgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDZEQ0MgIDAwM0NGQ0RFICAgTFcgQTIsIDYwKFM4KQpCRkQwNkREMCAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPCkJGRDA2REQyICAwNkEyNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1NlbmQKQkZEMDZERDQgICAgICAwNkEyICAgQUREVSBBMSwgUzEsIFYwCkJGRDA2REQ2ICAgICAgMEMwMCAgIE5PUApCRkQwNkREOCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjkwMjogICAgICAgICAgICAgICAgIA0KOTAzOiAgICAgICAgICAgICAgICAgCQl0cmFjZVBFTkRfRlVOQ19DQUxMKCB4RnVuY3Rpb25Ub1BlbmQsIHB2UGFyYW1ldGVyMSwgdWxQYXJhbWV0ZXIyLCB4UmV0dXJuICk7DQo5MDQ6ICAgICAgICAgICAgICAgICANCjkwNTogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwNkREQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjkwNjogICAgICAgICAgICAgICAgIAl9DQpCRkQwNkRFMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNkRFMiAgICAgIDRCRUIgICBMVyBSQSwgNDQoU1ApCkJGRDA2REU0ICAgICAgNEJDQSAgIExXIFM4LCA0MChTUCkKQkZEMDZERTYgICAgICA0QzE5ICAgQURESVUgU1AsIFNQLCA0OApCRkQwNkRFOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2REVBICAgICAgMEMwMCAgIE5PUAo5MDc6ICAgICAgICAgICAgICAgICANCjkwODogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgKi8NCjkwOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KOTEwOiAgICAgICAgICAgICAgICAgDQo5MTE6ICAgICAgICAgICAgICAgICAvKiBUaGlzIGVudGlyZSBzb3VyY2UgZmlsZSB3aWxsIGJlIHNraXBwZWQgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBjb25maWd1cmVkDQo5MTI6ICAgICAgICAgICAgICAgICB0byBpbmNsdWRlIHNvZnR3YXJlIHRpbWVyIGZ1bmN0aW9uYWxpdHkuICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHNvZnR3YXJlIHRpbWVyDQo5MTM6ICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IHRoZW4gZW5zdXJlIGNvbmZpZ1VTRV9USU1FUlMgaXMgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaC4gKi8NCjkxNDogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVElNRVJTID09IDEgKi8NCjkxNTogICAgICAgICAgICAgICAgIA0KOTE2OiAgICAgICAgICAgICAgICAgDQo5MTc6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3Mvc291cmNlL3Rhc2tzLmMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKg0KMjogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIFY4LjIuMSAtIENvcHlyaWdodCAoQykgMjAxNSBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCjM6ICAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQo0OiAgICAgICAgICAgICAgICAgICANCjU6ICAgICAgICAgICAgICAgICAgICAgICBWSVNJVCBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBUTyBFTlNVUkUgWU9VIEFSRSBVU0lORyBUSEUgTEFURVNUIFZFUlNJT04uDQo2OiAgICAgICAgICAgICAgICAgICANCjc6ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KODogICAgICAgICAgICAgICAgICAgDQo5OiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KMTA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KMTE6ICAgICAgICAgICAgICAgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA+PiFBTkQgTU9ESUZJRUQgQlkhPDwgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCjEyOiAgICAgICAgICAgICAgICAgIA0KMTM6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTQ6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIE5PVEU6IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8gICAgICE8PA0KMTU6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyAgICE8PA0KMTY6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIG9ibGlnZWQgdG8gcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgICAgICE8PA0KMTc6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TIGtlcm5lbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE8PA0KMTg6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTk6ICAgICAgICAgICAgICAgICAgDQoyMDogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZDQoyMTogICAgICAgICAgICAgICAgICAgICAgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUw0KMjI6ICAgICAgICAgICAgICAgICAgICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEZ1bGwgbGljZW5zZSB0ZXh0IGlzIGF2YWlsYWJsZSBvbiB0aGUgZm9sbG93aW5nDQoyMzogICAgICAgICAgICAgICAgICAgICAgbGluazogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwNCjI0OiAgICAgICAgICAgICAgICAgIA0KMjU6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoyNzogICAgICAgICAgICAgICAgICAgICAgICogICAgRnJlZVJUT1MgcHJvdmlkZXMgY29tcGxldGVseSBmcmVlIHlldCBwcm9mZXNzaW9uYWxseSBkZXZlbG9wZWQsICAgICoNCjI4OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICByb2J1c3QsIHN0cmljdGx5IHF1YWxpdHkgY29udHJvbGxlZCwgc3VwcG9ydGVkLCBhbmQgY3Jvc3MgICAgICAgICAgKg0KMjk6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHBsYXRmb3JtIHNvZnR3YXJlIHRoYXQgaXMgbW9yZSB0aGFuIGp1c3QgdGhlIG1hcmtldCBsZWFkZXIsIGl0ICAgICAqDQozMDogICAgICAgICAgICAgICAgICAgICAgICogICAgaXMgdGhlIGluZHVzdHJ5J3MgZGUgZmFjdG8gc3RhbmRhcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMxOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzI6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEhlbHAgeW91cnNlbGYgZ2V0IHN0YXJ0ZWQgcXVpY2tseSB3aGlsZSBzaW11bHRhbmVvdXNseSBoZWxwaW5nICAgICAqDQozMzogICAgICAgICAgICAgICAgICAgICAgICogICAgdG8gc3VwcG9ydCB0aGUgRnJlZVJUT1MgcHJvamVjdCBieSBwdXJjaGFzaW5nIGEgRnJlZVJUT1MgICAgICAgICAgICoNCjM0OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0dXRvcmlhbCBib29rLCByZWZlcmVuY2UgbWFudWFsLCBvciBib3RoOiAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzU6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM3OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAtIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nDQo0MDogICAgICAgICAgICAgICAgICAgICAgdGhlIEZBUSBwYWdlICJNeSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/Ii4gIEhhdmUgeW91DQo0MTogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBjb25maWdBU1NFUlQoKT8NCjQyOiAgICAgICAgICAgICAgICAgIA0KNDM6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3N1cHBvcnQgLSBJbiByZXR1cm4gZm9yIHJlY2VpdmluZyB0aGlzIHRvcCBxdWFsaXR5DQo0NDogICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgc29mdHdhcmUgZm9yIGZyZWUgd2UgcmVxdWVzdCB5b3UgYXNzaXN0IG91ciBnbG9iYWwgY29tbXVuaXR5IGJ5DQo0NTogICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhdGluZyBpbiB0aGUgc3VwcG9ydCBmb3J1bS4NCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3RyYWluaW5nIC0gSW52ZXN0aW5nIGluIHRyYWluaW5nIGFsbG93cyB5b3VyIHRlYW0gdG8NCjQ4OiAgICAgICAgICAgICAgICAgICAgICBiZSBhcyBwcm9kdWN0aXZlIGFzIHBvc3NpYmxlIGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAgTm93IHlvdSBjYW4gcmVjZWl2ZQ0KNDk6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIHRyYWluaW5nIGRpcmVjdGx5IGZyb20gUmljaGFyZCBCYXJyeSwgQ0VPIG9mIFJlYWwgVGltZSBFbmdpbmVlcnMNCjUwOiAgICAgICAgICAgICAgICAgICAgICBMdGQsIGFuZCB0aGUgd29ybGQncyBsZWFkaW5nIGF1dGhvcml0eSBvbiB0aGUgd29ybGQncyBsZWFkaW5nIFJUT1MuDQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KNTM6ICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wsIGEgRE9TDQo1NDogICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSBGQVQgZmlsZSBzeXN0ZW0sIGFuZCBvdXIgdGlueSB0aHJlYWQgYXdhcmUgVURQL0lQIHN0YWNrLg0KNTU6ICAgICAgICAgICAgICAgICAgDQo1NjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvbGFicyAtIFdoZXJlIG5ldyBGcmVlUlRPUyBwcm9kdWN0cyBnbyB0byBpbmN1YmF0ZS4NCjU3OiAgICAgICAgICAgICAgICAgICAgICBDb21lIGFuZCB0cnkgRnJlZVJUT1MrVENQLCBvdXIgbmV3IG9wZW4gc291cmNlIFRDUC9JUCBzdGFjayBmb3IgRnJlZVJUT1MuDQo1ODogICAgICAgICAgICAgICAgICANCjU5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkLiBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2gNCjYwOiAgICAgICAgICAgICAgICAgICAgICBJbnRlZ3JpdHkgU3lzdGVtcyBsdGQuIHRvIHNlbGwgdW5kZXIgdGhlIE9wZW5SVE9TIGJyYW5kLiAgTG93IGNvc3QgT3BlblJUT1MNCjYxOiAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcyBvZmZlciB0aWNrZXRlZCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24gYW5kIGNvbW1lcmNpYWwgbWlkZGxld2FyZS4NCjYyOiAgICAgICAgICAgICAgICAgIA0KNjM6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvIHByb3ZpZGUgYSBzYWZldHkNCjY0OiAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gZm9yIHVzZSBpbiBzYWZldHkgYW5kDQo2NTogICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIHByb3ZhYmxlIGRlcGVuZGFiaWxpdHkuDQo2NjogICAgICAgICAgICAgICAgICANCjY3OiAgICAgICAgICAgICAgICAgICAgICAxIHRhYiA9PSA0IHNwYWNlcyENCjY4OiAgICAgICAgICAgICAgICAgICovDQo2OTogICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgIC8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KNzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KNzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPg0KNzM6ICAgICAgICAgICAgICAgICAgDQo3NDogICAgICAgICAgICAgICAgICAvKiBEZWZpbmluZyBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSBwcmV2ZW50cyB0YXNrLmggZnJvbSByZWRlZmluaW5nDQo3NTogICAgICAgICAgICAgICAgICBhbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KNzY6ICAgICAgICAgICAgICAgICAgdGFzay5oIGlzIGluY2x1ZGVkIGZyb20gYW4gYXBwbGljYXRpb24gZmlsZS4gKi8NCjc3OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCjc4OiAgICAgICAgICAgICAgICAgIA0KNzk6ICAgICAgICAgICAgICAgICAgLyogRnJlZVJUT1MgaW5jbHVkZXMuICovDQo4MDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCjgxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJ0YXNrLmgiDQo4MjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGltZXJzLmgiDQo4MzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiU3RhY2tNYWNyb3MuaCINCjg0OiAgICAgICAgICAgICAgICAgIA0KODU6ICAgICAgICAgICAgICAgICAgLyogTGludCBlOTYxIGFuZCBlNzUwIGFyZSBzdXBwcmVzc2VkIGFzIGEgTUlTUkEgZXhjZXB0aW9uIGp1c3RpZmllZCBiZWNhdXNlIHRoZQ0KODY6ICAgICAgICAgICAgICAgICAgTVBVIHBvcnRzIHJlcXVpcmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgdG8gYmUgZGVmaW5lZCBmb3IgdGhlDQo4NzogICAgICAgICAgICAgICAgICBoZWFkZXIgZmlsZXMgYWJvdmUsIGJ1dCBub3QgaW4gdGhpcyBmaWxlLCBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdA0KODg6ICAgICAgICAgICAgICAgICAgcHJpdmlsZWdlZCBWcyB1bnByaXZpbGVnZWQgbGlua2FnZSBhbmQgcGxhY2VtZW50LiAqLw0KODk6ICAgICAgICAgICAgICAgICAgI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIC8qbGludCAhZTk2MSAhZTc1MC4gKi8NCjkwOiAgICAgICAgICAgICAgICAgIA0KOTE6ICAgICAgICAgICAgICAgICAgLyogU2V0IGNvbmZpZ1VTRV9TVEFUU19GT1JNQVRUSU5HX0ZVTkNUSU9OUyB0byAyIHRvIGluY2x1ZGUgdGhlIHN0YXRzIGZvcm1hdHRpbmcNCjkyOiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBidXQgd2l0aG91dCBpbmNsdWRpbmcgc3RkaW8uaCBoZXJlLiAqLw0KOTM6ICAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID09IDEgKQ0KOTQ6ICAgICAgICAgICAgICAgICAgCS8qIEF0IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlIGFyZSB0d28gb3B0aW9uYWwgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQNCjk1OiAgICAgICAgICAgICAgICAgIAl0byBnZW5lcmF0ZSBodW1hbiByZWFkYWJsZSB0ZXh0IGZyb20gdGhlIHJhdyBkYXRhIGdlbmVyYXRlZCBieSB0aGUNCjk2OiAgICAgICAgICAgICAgICAgIAl1eFRhc2tHZXRTeXN0ZW1TdGF0ZSgpIGZ1bmN0aW9uLiAgTm90ZSB0aGUgZm9ybWF0dGluZyBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkDQo5NzogICAgICAgICAgICAgICAgICAJZm9yIGNvbnZlbmllbmNlIG9ubHksIGFuZCBhcmUgTk9UIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUga2VybmVsLiAqLw0KOTg6ICAgICAgICAgICAgICAgICAgCSNpbmNsdWRlIDxzdGRpby5oPg0KOTk6ICAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9TVEFUU19GT1JNQVRUSU5HX0ZVTkNUSU9OUyA9PSAxICkgKi8NCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KMTAyOiAgICAgICAgICAgICAgICAgI2lmKCBjb25maWdVU0VfVElDS0xFU1NfSURMRSAhPSAwICkNCjEwMzogICAgICAgICAgICAgICAgIAkjaWYoIElOQ0xVREVfdlRhc2tTdXNwZW5kICE9IDEgKQ0KMTA0OiAgICAgICAgICAgICAgICAgCQkjZXJyb3IgSU5DTFVERV92VGFza1N1c3BlbmQgbXVzdCBiZSBzZXQgdG8gMSBpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSBpcyBub3Qgc2V0IHRvIDANCjEwNTogICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjEwNjogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVElDS0xFU1NfSURMRSAqLw0KMTA3OiAgICAgICAgICAgICAgICAgDQoxMDg6ICAgICAgICAgICAgICAgICAvKg0KMTA5OiAgICAgICAgICAgICAgICAgICogRGVmaW5lcyB0aGUgc2l6ZSwgaW4gd29yZHMsIG9mIHRoZSBzdGFjayBhbGxvY2F0ZWQgdG8gdGhlIGlkbGUgdGFzay4NCjExMDogICAgICAgICAgICAgICAgICAqLw0KMTExOiAgICAgICAgICAgICAgICAgI2RlZmluZSB0c2tJRExFX1NUQUNLX1NJWkUJY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFDQoxMTI6ICAgICAgICAgICAgICAgICANCjExMzogICAgICAgICAgICAgICAgICNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCApDQoxMTQ6ICAgICAgICAgICAgICAgICAJLyogSWYgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkIHRoZW4gYSB5aWVsZCBzaG91bGQgbm90IGJlDQoxMTU6ICAgICAgICAgICAgICAgICAJcGVyZm9ybWVkIGp1c3QgYmVjYXVzZSBhIGhpZ2hlciBwcmlvcml0eSB0YXNrIGhhcyBiZWVuIHdva2VuLiAqLw0KMTE2OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgdGFza1lJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKQ0KMTE3OiAgICAgICAgICAgICAgICAgI2Vsc2UNCjExODogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHRhc2tZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCkgcG9ydFlJRUxEX1dJVEhJTl9BUEkoKQ0KMTE5OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMjA6ICAgICAgICAgICAgICAgICANCjEyMTogICAgICAgICAgICAgICAgIC8qIFZhbHVlIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSBlTm90aWZ5U3RhdGUgbWVtYmVyIG9mIHRoZSBUQ0IuICovDQoxMjI6ICAgICAgICAgICAgICAgICB0eXBlZGVmIGVudW0NCjEyMzogICAgICAgICAgICAgICAgIHsNCjEyNDogICAgICAgICAgICAgICAgIAllTm90V2FpdGluZ05vdGlmaWNhdGlvbiA9IDAsDQoxMjU6ICAgICAgICAgICAgICAgICAJZVdhaXRpbmdOb3RpZmljYXRpb24sDQoxMjY6ICAgICAgICAgICAgICAgICAJZU5vdGlmaWVkDQoxMjc6ICAgICAgICAgICAgICAgICB9IGVOb3RpZnlWYWx1ZTsNCjEyODogICAgICAgICAgICAgICAgIA0KMTI5OiAgICAgICAgICAgICAgICAgLyoNCjEzMDogICAgICAgICAgICAgICAgICAqIFRhc2sgY29udHJvbCBibG9jay4gIEEgdGFzayBjb250cm9sIGJsb2NrIChUQ0IpIGlzIGFsbG9jYXRlZCBmb3IgZWFjaCB0YXNrLA0KMTMxOiAgICAgICAgICAgICAgICAgICogYW5kIHN0b3JlcyB0YXNrIHN0YXRlIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgYSBwb2ludGVyIHRvIHRoZSB0YXNrJ3MgY29udGV4dA0KMTMyOiAgICAgICAgICAgICAgICAgICogKHRoZSB0YXNrJ3MgcnVuIHRpbWUgZW52aXJvbm1lbnQsIGluY2x1ZGluZyByZWdpc3RlciB2YWx1ZXMpDQoxMzM6ICAgICAgICAgICAgICAgICAgKi8NCjEzNDogICAgICAgICAgICAgICAgIHR5cGVkZWYgc3RydWN0IHRza1Rhc2tDb250cm9sQmxvY2sNCjEzNTogICAgICAgICAgICAgICAgIHsNCjEzNjogICAgICAgICAgICAgICAgIAl2b2xhdGlsZSBTdGFja1R5cGVfdAkqcHhUb3BPZlN0YWNrOwkvKjwgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGFzdCBpdGVtIHBsYWNlZCBvbiB0aGUgdGFza3Mgc3RhY2suICBUSElTIE1VU1QgQkUgVEhFIEZJUlNUIE1FTUJFUiBPRiBUSEUgVENCIFNUUlVDVC4gKi8NCjEzNzogICAgICAgICAgICAgICAgIA0KMTM4OiAgICAgICAgICAgICAgICAgCSNpZiAoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQoxMzk6ICAgICAgICAgICAgICAgICAJCXhNUFVfU0VUVElOR1MJeE1QVVNldHRpbmdzOwkJLyo8IFRoZSBNUFUgc2V0dGluZ3MgYXJlIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgcG9ydCBsYXllci4gIFRISVMgTVVTVCBCRSBUSEUgU0VDT05EIE1FTUJFUiBPRiBUSEUgVENCIFNUUlVDVC4gKi8NCjE0MDogICAgICAgICAgICAgICAgIAkJQmFzZVR5cGVfdAkJeFVzaW5nU3RhdGljYWxseUFsbG9jYXRlZFN0YWNrOyAvKiBTZXQgdG8gcGRUUlVFIGlmIHRoZSBzdGFjayBpcyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5LCBhbmQgcGRGQUxTRSBpZiB0aGUgc3RhY2sgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLw0KMTQxOiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMTQyOiAgICAgICAgICAgICAgICAgDQoxNDM6ICAgICAgICAgICAgICAgICAJTGlzdEl0ZW1fdAkJCXhHZW5lcmljTGlzdEl0ZW07CS8qPCBUaGUgbGlzdCB0aGF0IHRoZSBzdGF0ZSBsaXN0IGl0ZW0gb2YgYSB0YXNrIGlzIHJlZmVyZW5jZSBmcm9tIGRlbm90ZXMgdGhlIHN0YXRlIG9mIHRoYXQgdGFzayAoUmVhZHksIEJsb2NrZWQsIFN1c3BlbmRlZCApLiAqLw0KMTQ0OiAgICAgICAgICAgICAgICAgCUxpc3RJdGVtX3QJCQl4RXZlbnRMaXN0SXRlbTsJCS8qPCBVc2VkIHRvIHJlZmVyZW5jZSBhIHRhc2sgZnJvbSBhbiBldmVudCBsaXN0LiAqLw0KMTQ1OiAgICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90CQkJdXhQcmlvcml0eTsJCQkvKjwgVGhlIHByaW9yaXR5IG9mIHRoZSB0YXNrLiAgMCBpcyB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KMTQ2OiAgICAgICAgICAgICAgICAgCVN0YWNrVHlwZV90CQkJKnB4U3RhY2s7CQkJLyo8IFBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrLiAqLw0KMTQ3OiAgICAgICAgICAgICAgICAgCWNoYXIJCQkJcGNUYXNrTmFtZVsgY29uZmlnTUFYX1RBU0tfTkFNRV9MRU4gXTsvKjwgRGVzY3JpcHRpdmUgbmFtZSBnaXZlbiB0byB0aGUgdGFzayB3aGVuIGNyZWF0ZWQuICBGYWNpbGl0YXRlcyBkZWJ1Z2dpbmcgb25seS4gKi8gLypsaW50ICFlOTcxIFVucXVhbGlmaWVkIGNoYXIgdHlwZXMgYXJlIGFsbG93ZWQgZm9yIHN0cmluZ3MgYW5kIHNpbmdsZSBjaGFyYWN0ZXJzIG9ubHkuICovDQoxNDg6ICAgICAgICAgICAgICAgICANCjE0OTogICAgICAgICAgICAgICAgIAkjaWYgKCBwb3J0U1RBQ0tfR1JPV1RIID4gMCApDQoxNTA6ICAgICAgICAgICAgICAgICAJCVN0YWNrVHlwZV90CQkqcHhFbmRPZlN0YWNrOwkJLyo8IFBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBzdGFjayBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoZSBzdGFjayBncm93cyB1cCBmcm9tIGxvdyBtZW1vcnkuICovDQoxNTE6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNTI6ICAgICAgICAgICAgICAgICANCjE1MzogICAgICAgICAgICAgICAgIAkjaWYgKCBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgPT0gMSApDQoxNTQ6ICAgICAgICAgICAgICAgICAJCVVCYXNlVHlwZV90IAl1eENyaXRpY2FsTmVzdGluZzsgCS8qPCBIb2xkcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoIGZvciBwb3J0cyB0aGF0IGRvIG5vdCBtYWludGFpbiB0aGVpciBvd24gY291bnQgaW4gdGhlIHBvcnQgbGF5ZXIuICovDQoxNTU6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNTY6ICAgICAgICAgICAgICAgICANCjE1NzogICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoxNTg6ICAgICAgICAgICAgICAgICAJCVVCYXNlVHlwZV90CQl1eFRDQk51bWJlcjsJCS8qPCBTdG9yZXMgYSBudW1iZXIgdGhhdCBpbmNyZW1lbnRzIGVhY2ggdGltZSBhIFRDQiBpcyBjcmVhdGVkLiAgSXQgYWxsb3dzIGRlYnVnZ2VycyB0byBkZXRlcm1pbmUgd2hlbiBhIHRhc2sgaGFzIGJlZW4gZGVsZXRlZCBhbmQgdGhlbiByZWNyZWF0ZWQuICovDQoxNTk6ICAgICAgICAgICAgICAgICAJCVVCYXNlVHlwZV90ICAJdXhUYXNrTnVtYmVyOwkJLyo8IFN0b3JlcyBhIG51bWJlciBzcGVjaWZpY2FsbHkgZm9yIHVzZSBieSB0aGlyZCBwYXJ0eSB0cmFjZSBjb2RlLiAqLw0KMTYwOiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMTYxOiAgICAgICAgICAgICAgICAgDQoxNjI6ICAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxNjM6ICAgICAgICAgICAgICAgICAJCVVCYXNlVHlwZV90IAl1eEJhc2VQcmlvcml0eTsJCS8qPCBUaGUgcHJpb3JpdHkgbGFzdCBhc3NpZ25lZCB0byB0aGUgdGFzayAtIHVzZWQgYnkgdGhlIHByaW9yaXR5IGluaGVyaXRhbmNlIG1lY2hhbmlzbS4gKi8NCjE2NDogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QgCXV4TXV0ZXhlc0hlbGQ7DQoxNjU6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNjY6ICAgICAgICAgICAgICAgICANCjE2NzogICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgPT0gMSApDQoxNjg6ICAgICAgICAgICAgICAgICAJCVRhc2tIb29rRnVuY3Rpb25fdCBweFRhc2tUYWc7DQoxNjk6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNzA6ICAgICAgICAgICAgICAgICANCjE3MTogICAgICAgICAgICAgICAgIAkjaWYoIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyA+IDAgKQ0KMTcyOiAgICAgICAgICAgICAgICAgCQl2b2lkICpwdlRocmVhZExvY2FsU3RvcmFnZVBvaW50ZXJzWyBjb25maWdOVU1fVEhSRUFEX0xPQ0FMX1NUT1JBR0VfUE9JTlRFUlMgXTsNCjE3MzogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE3NDogICAgICAgICAgICAgICAgIA0KMTc1OiAgICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKQ0KMTc2OiAgICAgICAgICAgICAgICAgCQl1aW50MzJfdAkJdWxSdW5UaW1lQ291bnRlcjsJLyo8IFN0b3JlcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIHRhc2sgaGFzIHNwZW50IGluIHRoZSBSdW5uaW5nIHN0YXRlLiAqLw0KMTc3OiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMTc4OiAgICAgICAgICAgICAgICAgDQoxNzk6ICAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX05FV0xJQl9SRUVOVFJBTlQgPT0gMSApDQoxODA6ICAgICAgICAgICAgICAgICAJCS8qIEFsbG9jYXRlIGEgTmV3bGliIHJlZW50IHN0cnVjdHVyZSB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgdGFzay4NCjE4MTogICAgICAgICAgICAgICAgIAkJTm90ZSBOZXdsaWIgc3VwcG9ydCBoYXMgYmVlbiBpbmNsdWRlZCBieSBwb3B1bGFyIGRlbWFuZCwgYnV0IGlzIG5vdA0KMTgyOiAgICAgICAgICAgICAgICAgCQl1c2VkIGJ5IHRoZSBGcmVlUlRPUyBtYWludGFpbmVycyB0aGVtc2VsdmVzLiAgRnJlZVJUT1MgaXMgbm90DQoxODM6ICAgICAgICAgICAgICAgICAJCXJlc3BvbnNpYmxlIGZvciByZXN1bHRpbmcgbmV3bGliIG9wZXJhdGlvbi4gIFVzZXIgbXVzdCBiZSBmYW1pbGlhciB3aXRoDQoxODQ6ICAgICAgICAgICAgICAgICAJCW5ld2xpYiBhbmQgbXVzdCBwcm92aWRlIHN5c3RlbS13aWRlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgbmVjZXNzYXJ5DQoxODU6ICAgICAgICAgICAgICAgICAJCXN0dWJzLiBCZSB3YXJuZWQgdGhhdCAoYXQgdGhlIHRpbWUgb2Ygd3JpdGluZykgdGhlIGN1cnJlbnQgbmV3bGliIGRlc2lnbg0KMTg2OiAgICAgICAgICAgICAgICAgCQlpbXBsZW1lbnRzIGEgc3lzdGVtLXdpZGUgbWFsbG9jKCkgdGhhdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggbG9ja3MuICovDQoxODc6ICAgICAgICAgICAgICAgICAJCXN0cnVjdCAJX3JlZW50IHhOZXdMaWJfcmVlbnQ7DQoxODg6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxODk6ICAgICAgICAgICAgICAgICANCjE5MDogICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdVU0VfVEFTS19OT1RJRklDQVRJT05TID09IDEgKQ0KMTkxOiAgICAgICAgICAgICAgICAgCQl2b2xhdGlsZSB1aW50MzJfdCB1bE5vdGlmaWVkVmFsdWU7DQoxOTI6ICAgICAgICAgICAgICAgICAJCXZvbGF0aWxlIGVOb3RpZnlWYWx1ZSBlTm90aWZ5U3RhdGU7DQoxOTM6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxOTQ6ICAgICAgICAgICAgICAgICANCjE5NTogICAgICAgICAgICAgICAgIH0gdHNrVENCOw0KMTk2OiAgICAgICAgICAgICAgICAgDQoxOTc6ICAgICAgICAgICAgICAgICAvKiBUaGUgb2xkIHRza1RDQiBuYW1lIGlzIG1haW50YWluZWQgYWJvdmUgdGhlbiB0eXBlZGVmZWQgdG8gdGhlIG5ldyBUQ0JfdCBuYW1lDQoxOTg6ICAgICAgICAgICAgICAgICBiZWxvdyB0byBlbmFibGUgdGhlIHVzZSBvZiBvbGRlciBrZXJuZWwgYXdhcmUgZGVidWdnZXJzLiAqLw0KMTk5OiAgICAgICAgICAgICAgICAgdHlwZWRlZiB0c2tUQ0IgVENCX3Q7DQoyMDA6ICAgICAgICAgICAgICAgICANCjIwMTogICAgICAgICAgICAgICAgIC8qDQoyMDI6ICAgICAgICAgICAgICAgICAgKiBTb21lIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMgcmVxdWlyZSB0aGUgZGF0YSB0aGUgZGVidWdnZXIgbmVlZHMgYWNjZXNzIHRvIHRvDQoyMDM6ICAgICAgICAgICAgICAgICAgKiBiZSBnbG9iYWwsIHJhdGhlciB0aGFuIGZpbGUgc2NvcGUuDQoyMDQ6ICAgICAgICAgICAgICAgICAgKi8NCjIwNTogICAgICAgICAgICAgICAgICNpZmRlZiBwb3J0UkVNT1ZFX1NUQVRJQ19RVUFMSUZJRVINCjIwNjogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHN0YXRpYw0KMjA3OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyMDg6ICAgICAgICAgICAgICAgICANCjIwOTogICAgICAgICAgICAgICAgIC8qbGludCAtZTk1NiBBIG1hbnVhbCBhbmFseXNpcyBhbmQgaW5zcGVjdGlvbiBoYXMgYmVlbiB1c2VkIHRvIGRldGVybWluZSB3aGljaA0KMjEwOiAgICAgICAgICAgICAgICAgc3RhdGljIHZhcmlhYmxlcyBtdXN0IGJlIGRlY2xhcmVkIHZvbGF0aWxlLiAqLw0KMjExOiAgICAgICAgICAgICAgICAgDQoyMTI6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0IgPSBOVUxMOw0KMjEzOiAgICAgICAgICAgICAgICAgDQoyMTQ6ICAgICAgICAgICAgICAgICAvKiBMaXN0cyBmb3IgcmVhZHkgYW5kIGJsb2NrZWQgdGFza3MuIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIxNTogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90IHB4UmVhZHlUYXNrc0xpc3RzWyBjb25maWdNQVhfUFJJT1JJVElFUyBdOy8qPCBQcmlvcml0aXNlZCByZWFkeSB0YXNrcy4gKi8NCjIxNjogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90IHhEZWxheWVkVGFza0xpc3QxOwkJCQkJCS8qPCBEZWxheWVkIHRhc2tzLiAqLw0KMjE3OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgeERlbGF5ZWRUYXNrTGlzdDI7CQkJCQkJLyo8IERlbGF5ZWQgdGFza3MgKHR3byBsaXN0cyBhcmUgdXNlZCAtIG9uZSBmb3IgZGVsYXlzIHRoYXQgaGF2ZSBvdmVyZmxvd2VkIHRoZSBjdXJyZW50IHRpY2sgY291bnQuICovDQoyMTg6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIExpc3RfdCAqIHZvbGF0aWxlIHB4RGVsYXllZFRhc2tMaXN0OwkJCQkvKjwgUG9pbnRzIHRvIHRoZSBkZWxheWVkIHRhc2sgbGlzdCBjdXJyZW50bHkgYmVpbmcgdXNlZC4gKi8NCjIxOTogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90ICogdm9sYXRpbGUgcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdDsJCS8qPCBQb2ludHMgdG8gdGhlIGRlbGF5ZWQgdGFzayBsaXN0IGN1cnJlbnRseSBiZWluZyB1c2VkIHRvIGhvbGQgdGFza3MgdGhhdCBoYXZlIG92ZXJmbG93ZWQgdGhlIGN1cnJlbnQgdGljayBjb3VudC4gKi8NCjIyMDogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90IHhQZW5kaW5nUmVhZHlMaXN0OwkJCQkJCS8qPCBUYXNrcyB0aGF0IGhhdmUgYmVlbiByZWFkaWVkIHdoaWxlIHRoZSBzY2hlZHVsZXIgd2FzIHN1c3BlbmRlZC4gIFRoZXkgd2lsbCBiZSBtb3ZlZCB0byB0aGUgcmVhZHkgbGlzdCB3aGVuIHRoZSBzY2hlZHVsZXIgaXMgcmVzdW1lZC4gKi8NCjIyMTogICAgICAgICAgICAgICAgIA0KMjIyOiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza0RlbGV0ZSA9PSAxICkNCjIyMzogICAgICAgICAgICAgICAgIA0KMjI0OiAgICAgICAgICAgICAgICAgCVBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90IHhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbjsJCQkJLyo8IFRhc2tzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQgLSBidXQgdGhlaXIgbWVtb3J5IG5vdCB5ZXQgZnJlZWQuICovDQoyMjU6ICAgICAgICAgICAgICAgICAJUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eFRhc2tzRGVsZXRlZCA9ICggVUJhc2VUeXBlX3QgKSAwVTsNCjIyNjogICAgICAgICAgICAgICAgIA0KMjI3OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyMjg6ICAgICAgICAgICAgICAgICANCjIyOTogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KMjMwOiAgICAgICAgICAgICAgICAgDQoyMzE6ICAgICAgICAgICAgICAgICAJUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgeFN1c3BlbmRlZFRhc2tMaXN0OwkJCQkJLyo8IFRhc2tzIHRoYXQgYXJlIGN1cnJlbnRseSBzdXNwZW5kZWQuICovDQoyMzI6ICAgICAgICAgICAgICAgICANCjIzMzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjM0OiAgICAgICAgICAgICAgICAgDQoyMzU6ICAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3hUYXNrR2V0SWRsZVRhc2tIYW5kbGUgPT0gMSApDQoyMzY6ICAgICAgICAgICAgICAgICANCjIzNzogICAgICAgICAgICAgICAgIAlQUklWSUxFR0VEX0RBVEEgc3RhdGljIFRhc2tIYW5kbGVfdCB4SWRsZVRhc2tIYW5kbGUgPSBOVUxMOwkJCS8qPCBIb2xkcyB0aGUgaGFuZGxlIG9mIHRoZSBpZGxlIHRhc2suICBUaGUgaWRsZSB0YXNrIGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4gKi8NCjIzODogICAgICAgICAgICAgICAgIA0KMjM5OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyNDA6ICAgICAgICAgICAgICAgICANCjI0MTogICAgICAgICAgICAgICAgIC8qIE90aGVyIGZpbGUgcHJpdmF0ZSB2YXJpYWJsZXMuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI0MjogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhDdXJyZW50TnVtYmVyT2ZUYXNrcyAJPSAoIFVCYXNlVHlwZV90ICkgMFU7DQoyNDM6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIFRpY2tUeXBlX3QgeFRpY2tDb3VudCAJCQkJPSAoIFRpY2tUeXBlX3QgKSAwVTsNCjI0NDogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhUb3BSZWFkeVByaW9yaXR5IAkJPSB0c2tJRExFX1BSSU9SSVRZOw0KMjQ1OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBCYXNlVHlwZV90IHhTY2hlZHVsZXJSdW5uaW5nIAkJPSBwZEZBTFNFOw0KMjQ2OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eFBlbmRlZFRpY2tzIAkJCT0gKCBVQmFzZVR5cGVfdCApIDBVOw0KMjQ3OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBCYXNlVHlwZV90IHhZaWVsZFBlbmRpbmcgCQkJPSBwZEZBTFNFOw0KMjQ4OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBCYXNlVHlwZV90IHhOdW1PZk92ZXJmbG93cyAJCQk9ICggQmFzZVR5cGVfdCApIDA7DQoyNDk6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIFVCYXNlVHlwZV90IHV4VGFza051bWJlciAJCQkJCT0gKCBVQmFzZVR5cGVfdCApIDBVOw0KMjUwOiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBUaWNrVHlwZV90IHhOZXh0VGFza1VuYmxvY2tUaW1lCQk9ICggVGlja1R5cGVfdCApIDBVOyAvKiBJbml0aWFsaXNlZCB0byBwb3J0TUFYX0RFTEFZOyBiZWZvcmUgdGhlIHNjaGVkdWxlciBzdGFydHMuICovDQoyNTE6ICAgICAgICAgICAgICAgICANCjI1MjogICAgICAgICAgICAgICAgIC8qIENvbnRleHQgc3dpdGNoZXMgYXJlIGhlbGQgcGVuZGluZyB3aGlsZSB0aGUgc2NoZWR1bGVyIGlzIHN1c3BlbmRlZC4gIEFsc28sDQoyNTM6ICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzIG11c3Qgbm90IG1hbmlwdWxhdGUgdGhlIHhHZW5lcmljTGlzdEl0ZW0gb2YgYSBUQ0IsIG9yIGFueSBvZiB0aGUNCjI1NDogICAgICAgICAgICAgICAgIGxpc3RzIHRoZSB4R2VuZXJpY0xpc3RJdGVtIGNhbiBiZSByZWZlcmVuY2VkIGZyb20sIGlmIHRoZSBzY2hlZHVsZXIgaXMgc3VzcGVuZGVkLg0KMjU1OiAgICAgICAgICAgICAgICAgSWYgYW4gaW50ZXJydXB0IG5lZWRzIHRvIHVuYmxvY2sgYSB0YXNrIHdoaWxlIHRoZSBzY2hlZHVsZXIgaXMgc3VzcGVuZGVkIHRoZW4gaXQNCjI1NjogICAgICAgICAgICAgICAgIG1vdmVzIHRoZSB0YXNrJ3MgZXZlbnQgbGlzdCBpdGVtIGludG8gdGhlIHhQZW5kaW5nUmVhZHlMaXN0LCByZWFkeSBmb3IgdGhlDQoyNTc6ICAgICAgICAgICAgICAgICBrZXJuZWwgdG8gbW92ZSB0aGUgdGFzayBmcm9tIHRoZSBwZW5kaW5nIHJlYWR5IGxpc3QgaW50byB0aGUgcmVhbCByZWFkeSBsaXN0DQoyNTg6ICAgICAgICAgICAgICAgICB3aGVuIHRoZSBzY2hlZHVsZXIgaXMgdW5zdXNwZW5kZWQuICBUaGUgcGVuZGluZyByZWFkeSBsaXN0IGl0c2VsZiBjYW4gb25seSBiZQ0KMjU5OiAgICAgICAgICAgICAgICAgYWNjZXNzZWQgZnJvbSBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQoyNjA6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4U2NoZWR1bGVyU3VzcGVuZGVkCT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0U7DQoyNjE6ICAgICAgICAgICAgICAgICANCjI2MjogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKQ0KMjYzOiAgICAgICAgICAgICAgICAgDQoyNjQ6ICAgICAgICAgICAgICAgICAJUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB1aW50MzJfdCB1bFRhc2tTd2l0Y2hlZEluVGltZSA9IDBVTDsJLyo8IEhvbGRzIHRoZSB2YWx1ZSBvZiBhIHRpbWVyL2NvdW50ZXIgdGhlIGxhc3QgdGltZSBhIHRhc2sgd2FzIHN3aXRjaGVkIGluLiAqLw0KMjY1OiAgICAgICAgICAgICAgICAgCVBSSVZJTEVHRURfREFUQSBzdGF0aWMgdWludDMyX3QgdWxUb3RhbFJ1blRpbWUgPSAwVUw7CQkvKjwgSG9sZHMgdGhlIHRvdGFsIGFtb3VudCBvZiBleGVjdXRpb24gdGltZSBhcyBkZWZpbmVkIGJ5IHRoZSBydW4gdGltZSBjb3VudGVyIGNsb2NrLiAqLw0KMjY2OiAgICAgICAgICAgICAgICAgDQoyNjc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjI2ODogICAgICAgICAgICAgICAgIA0KMjY5OiAgICAgICAgICAgICAgICAgLypsaW50ICtlOTU2ICovDQoyNzA6ICAgICAgICAgICAgICAgICANCjI3MTogICAgICAgICAgICAgICAgIC8qIERlYnVnZ2luZyBhbmQgdHJhY2UgZmFjaWxpdGllcyBwcml2YXRlIHZhcmlhYmxlcyBhbmQgbWFjcm9zLiAtLS0tLS0tLS0tLS0qLw0KMjcyOiAgICAgICAgICAgICAgICAgDQoyNzM6ICAgICAgICAgICAgICAgICAvKg0KMjc0OiAgICAgICAgICAgICAgICAgICogVGhlIHZhbHVlIHVzZWQgdG8gZmlsbCB0aGUgc3RhY2sgb2YgYSB0YXNrIHdoZW4gdGhlIHRhc2sgaXMgY3JlYXRlZC4gIFRoaXMNCjI3NTogICAgICAgICAgICAgICAgICAqIGlzIHVzZWQgcHVyZWx5IGZvciBjaGVja2luZyB0aGUgaGlnaCB3YXRlciBtYXJrIGZvciB0YXNrcy4NCjI3NjogICAgICAgICAgICAgICAgICAqLw0KMjc3OiAgICAgICAgICAgICAgICAgI2RlZmluZSB0c2tTVEFDS19GSUxMX0JZVEUJKCAweGE1VSApDQoyNzg6ICAgICAgICAgICAgICAgICANCjI3OTogICAgICAgICAgICAgICAgIC8qDQoyODA6ICAgICAgICAgICAgICAgICAgKiBNYWNyb3MgdXNlZCBieSB2TGlzdFRhc2sgdG8gaW5kaWNhdGUgd2hpY2ggc3RhdGUgYSB0YXNrIGlzIGluLg0KMjgxOiAgICAgICAgICAgICAgICAgICovDQoyODI6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHRza0JMT0NLRURfQ0hBUgkJKCAnQicgKQ0KMjgzOiAgICAgICAgICAgICAgICAgI2RlZmluZSB0c2tSRUFEWV9DSEFSCQkoICdSJyApDQoyODQ6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHRza0RFTEVURURfQ0hBUgkJKCAnRCcgKQ0KMjg1OiAgICAgICAgICAgICAgICAgI2RlZmluZSB0c2tTVVNQRU5ERURfQ0hBUgkoICdTJyApDQoyODY6ICAgICAgICAgICAgICAgICANCjI4NzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjg4OiAgICAgICAgICAgICAgICAgDQoyODk6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMCApDQoyOTA6ICAgICAgICAgICAgICAgICANCjI5MTogICAgICAgICAgICAgICAgIAkvKiBJZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gaXMgMCB0aGVuIHRhc2sgc2VsZWN0aW9uIGlzDQoyOTI6ICAgICAgICAgICAgICAgICAJcGVyZm9ybWVkIGluIGEgZ2VuZXJpYyB3YXkgdGhhdCBpcyBub3Qgb3B0aW1pc2VkIHRvIGFueSBwYXJ0aWN1bGFyDQoyOTM6ICAgICAgICAgICAgICAgICAJbWljcm9jb250cm9sbGVyIGFyY2hpdGVjdHVyZS4gKi8NCjI5NDogICAgICAgICAgICAgICAgIA0KMjk1OiAgICAgICAgICAgICAgICAgCS8qIHV4VG9wUmVhZHlQcmlvcml0eSBob2xkcyB0aGUgcHJpb3JpdHkgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcmVhZHkNCjI5NjogICAgICAgICAgICAgICAgIAlzdGF0ZSB0YXNrLiAqLw0KMjk3OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgdGFza1JFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSApCQkJCQkJCQkJCQkJCQlcDQoyOTg6ICAgICAgICAgICAgICAgICAJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoyOTk6ICAgICAgICAgICAgICAgICAJCWlmKCAoIHV4UHJpb3JpdHkgKSA+IHV4VG9wUmVhZHlQcmlvcml0eSApCQkJCQkJCQkJCQkJCQlcDQozMDA6ICAgICAgICAgICAgICAgICAJCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozMDE6ICAgICAgICAgICAgICAgICAJCQl1eFRvcFJlYWR5UHJpb3JpdHkgPSAoIHV4UHJpb3JpdHkgKTsJCQkJCQkJCQkJCQkJCVwNCjMwMjogICAgICAgICAgICAgICAgIAkJfQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjMwMzogICAgICAgICAgICAgICAgIAl9IC8qIHRhc2tSRUNPUkRfUkVBRFlfUFJJT1JJVFkgKi8NCjMwNDogICAgICAgICAgICAgICAgIA0KMzA1OiAgICAgICAgICAgICAgICAgCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzA2OiAgICAgICAgICAgICAgICAgDQozMDc6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrU0VMRUNUX0hJR0hFU1RfUFJJT1JJVFlfVEFTSygpCQkJCQkJCQkJCQkJCQkJXA0KMzA4OiAgICAgICAgICAgICAgICAgCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzA5OiAgICAgICAgICAgICAgICAgCQkvKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHRoYXQgY29udGFpbnMgcmVhZHkgdGFza3MuICovCQkJCQkJCQlcDQozMTA6ICAgICAgICAgICAgICAgICAJCXdoaWxlKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4VG9wUmVhZHlQcmlvcml0eSBdICkgKSApCQkJCQkJXA0KMzExOiAgICAgICAgICAgICAgICAgCQl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzEyOiAgICAgICAgICAgICAgICAgCQkJY29uZmlnQVNTRVJUKCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsJCQkJCQkJCQkJCQkJCQlcDQozMTM6ICAgICAgICAgICAgICAgICAJCQktLXV4VG9wUmVhZHlQcmlvcml0eTsJCQkJCQkJCQkJCQkJCQkJCQlcDQozMTQ6ICAgICAgICAgICAgICAgICAJCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozMTU6ICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjMxNjogICAgICAgICAgICAgICAgIAkJLyogbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZIGluZGV4ZXMgdGhyb3VnaCB0aGUgbGlzdCwgc28gdGhlIHRhc2tzIG9mCQkJCQkJXA0KMzE3OiAgICAgICAgICAgICAgICAgCQl0aGUJc2FtZSBwcmlvcml0eSBnZXQgYW4gZXF1YWwgc2hhcmUgb2YgdGhlIHByb2Nlc3NvciB0aW1lLiAqLwkJCQkJCQkJCVwNCjMxODogICAgICAgICAgICAgICAgIAkJbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZKCBweEN1cnJlbnRUQ0IsICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB1eFRvcFJlYWR5UHJpb3JpdHkgXSApICk7CQlcDQozMTk6ICAgICAgICAgICAgICAgICAJfSAvKiB0YXNrU0VMRUNUX0hJR0hFU1RfUFJJT1JJVFlfVEFTSyAqLw0KMzIwOiAgICAgICAgICAgICAgICAgDQozMjE6ICAgICAgICAgICAgICAgICAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMjI6ICAgICAgICAgICAgICAgICANCjMyMzogICAgICAgICAgICAgICAgIAkvKiBEZWZpbmUgYXdheSB0YXNrUkVTRVRfUkVBRFlfUFJJT1JJVFkoKSBhbmQgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCkgYXMNCjMyNDogICAgICAgICAgICAgICAgIAl0aGV5IGFyZSBvbmx5IHJlcXVpcmVkIHdoZW4gYSBwb3J0IG9wdGltaXNlZCBtZXRob2Qgb2YgdGFzayBzZWxlY3Rpb24gaXMNCjMyNTogICAgICAgICAgICAgICAgIAliZWluZyB1c2VkLiAqLw0KMzI2OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgdGFza1JFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5ICkNCjMyNzogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhUb3BSZWFkeVByaW9yaXR5ICkNCjMyODogICAgICAgICAgICAgICAgIA0KMzI5OiAgICAgICAgICAgICAgICAgI2Vsc2UgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQozMzA6ICAgICAgICAgICAgICAgICANCjMzMTogICAgICAgICAgICAgICAgIAkvKiBJZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gaXMgMSB0aGVuIHRhc2sgc2VsZWN0aW9uIGlzDQozMzI6ICAgICAgICAgICAgICAgICAJcGVyZm9ybWVkIGluIGEgd2F5IHRoYXQgaXMgdGFpbG9yZWQgdG8gdGhlIHBhcnRpY3VsYXIgbWljcm9jb250cm9sbGVyDQozMzM6ICAgICAgICAgICAgICAgICAJYXJjaGl0ZWN0dXJlIGJlaW5nIHVzZWQuICovDQozMzQ6ICAgICAgICAgICAgICAgICANCjMzNTogICAgICAgICAgICAgICAgIAkvKiBBIHBvcnQgb3B0aW1pc2VkIHZlcnNpb24gaXMgcHJvdmlkZWQuICBDYWxsIHRoZSBwb3J0IGRlZmluZWQgbWFjcm9zLiAqLw0KMzM2OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgdGFza1JFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSApCXBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApDQozMzc6ICAgICAgICAgICAgICAgICANCjMzODogICAgICAgICAgICAgICAgIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMzOTogICAgICAgICAgICAgICAgIA0KMzQwOiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgdGFza1NFTEVDVF9ISUdIRVNUX1BSSU9SSVRZX1RBU0soKQkJCQkJCQkJCQkJCQkJXA0KMzQxOiAgICAgICAgICAgICAgICAgCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozNDI6ICAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhUb3BQcmlvcml0eTsJCQkJCQkJCQkJCQkJCQkJCQlcDQozNDM6ICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzQ0OiAgICAgICAgICAgICAgICAgCQkvKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHRoYXQgY29udGFpbnMgcmVhZHkgdGFza3MuICovCQkJCQkJCVwNCjM0NTogICAgICAgICAgICAgICAgIAkJcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsJCQkJCQkJCVwNCjM0NjogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4VG9wUHJpb3JpdHkgXSApICkgPiAwICk7CQlcDQozNDc6ICAgICAgICAgICAgICAgICAJCWxpc3RHRVRfT1dORVJfT0ZfTkVYVF9FTlRSWSggcHhDdXJyZW50VENCLCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdXhUb3BQcmlvcml0eSBdICkgKTsJCVwNCjM0ODogICAgICAgICAgICAgICAgIAl9IC8qIHRhc2tTRUxFQ1RfSElHSEVTVF9QUklPUklUWV9UQVNLKCkgKi8NCjM0OTogICAgICAgICAgICAgICAgIA0KMzUwOiAgICAgICAgICAgICAgICAgCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzUxOiAgICAgICAgICAgICAgICAgDQozNTI6ICAgICAgICAgICAgICAgICAJLyogQSBwb3J0IG9wdGltaXNlZCB2ZXJzaW9uIGlzIHByb3ZpZGVkLCBjYWxsIGl0IG9ubHkgaWYgdGhlIFRDQiBiZWluZyByZXNldA0KMzUzOiAgICAgICAgICAgICAgICAgCWlzIGJlaW5nIHJlZmVyZW5jZWQgZnJvbSBhIHJlYWR5IGxpc3QuICBJZiBpdCBpcyByZWZlcmVuY2VkIGZyb20gYSBkZWxheWVkDQozNTQ6ICAgICAgICAgICAgICAgICAJb3Igc3VzcGVuZGVkIGxpc3QgdGhlbiBpdCB3b24ndCBiZSBpbiBhIHJlYWR5IGxpc3QuICovDQozNTU6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrUkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHkgKQkJCQkJCQkJCQkJCQkJXA0KMzU2OiAgICAgICAgICAgICAgICAgCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzU3OiAgICAgICAgICAgICAgICAgCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoICYoIHB4UmVhZHlUYXNrc0xpc3RzWyAoIHV4UHJpb3JpdHkgKSBdICkgKSA9PSAoIFVCYXNlVHlwZV90ICkgMCApCVwNCjM1ODogICAgICAgICAgICAgICAgIAkJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjM1OTogICAgICAgICAgICAgICAgIAkJCXBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggKCB1eFByaW9yaXR5ICksICggdXhUb3BSZWFkeVByaW9yaXR5ICkgKTsJCQkJCQkJXA0KMzYwOiAgICAgICAgICAgICAgICAgCQl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzYxOiAgICAgICAgICAgICAgICAgCX0NCjM2MjogICAgICAgICAgICAgICAgIA0KMzYzOiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KMzY0OiAgICAgICAgICAgICAgICAgDQozNjU6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM2NjogICAgICAgICAgICAgICAgIA0KMzY3OiAgICAgICAgICAgICAgICAgLyogcHhEZWxheWVkVGFza0xpc3QgYW5kIHB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3QgYXJlIHN3aXRjaGVkIHdoZW4gdGhlIHRpY2sNCjM2ODogICAgICAgICAgICAgICAgIGNvdW50IG92ZXJmbG93cy4gKi8NCjM2OTogICAgICAgICAgICAgICAgICNkZWZpbmUgdGFza1NXSVRDSF9ERUxBWUVEX0xJU1RTKCkJCQkJCQkJCQkJCQkJCQkJCVwNCjM3MDogICAgICAgICAgICAgICAgIHsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzcxOiAgICAgICAgICAgICAgICAgCUxpc3RfdCAqcHhUZW1wOwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjM3MjogICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozNzM6ICAgICAgICAgICAgICAgICAJLyogVGhlIGRlbGF5ZWQgdGFza3MgbGlzdCBzaG91bGQgYmUgZW1wdHkgd2hlbiB0aGUgbGlzdHMgYXJlIHN3aXRjaGVkLiAqLwkJCQkJCVwNCjM3NDogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggbGlzdExJU1RfSVNfRU1QVFkoIHB4RGVsYXllZFRhc2tMaXN0ICkgKSApOwkJCQkJCQkJCQlcDQozNzU6ICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzc2OiAgICAgICAgICAgICAgICAgCXB4VGVtcCA9IHB4RGVsYXllZFRhc2tMaXN0OwkJCQkJCQkJCQkJCQkJCQkJCVwNCjM3NzogICAgICAgICAgICAgICAgIAlweERlbGF5ZWRUYXNrTGlzdCA9IHB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3Q7CQkJCQkJCQkJCQkJCVwNCjM3ODogICAgICAgICAgICAgICAgIAlweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0ID0gcHhUZW1wOwkJCQkJCQkJCQkJCQkJCQlcDQozNzk6ICAgICAgICAgICAgICAgICAJeE51bU9mT3ZlcmZsb3dzKys7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozODA6ICAgICAgICAgICAgICAgICAJcHJ2UmVzZXROZXh0VGFza1VuYmxvY2tUaW1lKCk7CQkJCQkJCQkJCQkJCQkJCQlcDQozODE6ICAgICAgICAgICAgICAgICB9DQozODI6ICAgICAgICAgICAgICAgICANCjM4MzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzg0OiAgICAgICAgICAgICAgICAgDQozODU6ICAgICAgICAgICAgICAgICAvKg0KMzg2OiAgICAgICAgICAgICAgICAgICogUGxhY2UgdGhlIHRhc2sgcmVwcmVzZW50ZWQgYnkgcHhUQ0IgaW50byB0aGUgYXBwcm9wcmlhdGUgcmVhZHkgbGlzdCBmb3INCjM4NzogICAgICAgICAgICAgICAgICAqIHRoZSB0YXNrLiAgSXQgaXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4NCjM4ODogICAgICAgICAgICAgICAgICAqLw0KMzg5OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwcnZBZGRUYXNrVG9SZWFkeUxpc3QoIHB4VENCICkJCQkJCQkJCQkJCQkJCQkJXA0KMzkwOiAgICAgICAgICAgICAgICAgCXRyYWNlTU9WRURfVEFTS19UT19SRUFEWV9TVEFURSggcHhUQ0IgKTsJCQkJCQkJCQkJCQkJCVwNCjM5MTogICAgICAgICAgICAgICAgIAl0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZKCAoIHB4VENCICktPnV4UHJpb3JpdHkgKTsJCQkJCQkJCQkJCQlcDQozOTI6ICAgICAgICAgICAgICAgICAJdkxpc3RJbnNlcnRFbmQoICYoIHB4UmVhZHlUYXNrc0xpc3RzWyAoIHB4VENCICktPnV4UHJpb3JpdHkgXSApLCAmKCAoIHB4VENCICktPnhHZW5lcmljTGlzdEl0ZW0gKSApDQozOTM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM5NDogICAgICAgICAgICAgICAgIA0KMzk1OiAgICAgICAgICAgICAgICAgLyoNCjM5NjogICAgICAgICAgICAgICAgICAqIFNldmVyYWwgZnVuY3Rpb25zIHRha2UgYW4gVGFza0hhbmRsZV90IHBhcmFtZXRlciB0aGF0IGNhbiBvcHRpb25hbGx5IGJlIE5VTEwsDQozOTc6ICAgICAgICAgICAgICAgICAgKiB3aGVyZSBOVUxMIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaGFuZGxlIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nDQozOTg6ICAgICAgICAgICAgICAgICAgKiB0YXNrIHNob3VsZCBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZSBwYXJhbWV0ZXIuICBUaGlzIG1hY3JvIHNpbXBseSBjaGVja3MgdG8NCjM5OTogICAgICAgICAgICAgICAgICAqIHNlZSBpZiB0aGUgcGFyYW1ldGVyIGlzIE5VTEwgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBUQ0IuDQo0MDA6ICAgICAgICAgICAgICAgICAgKi8NCjQwMTogICAgICAgICAgICAgICAgICNkZWZpbmUgcHJ2R2V0VENCRnJvbUhhbmRsZSggcHhIYW5kbGUgKSAoICggKCBweEhhbmRsZSApID09IE5VTEwgKSA/ICggVENCX3QgKiApIHB4Q3VycmVudFRDQiA6ICggVENCX3QgKiApICggcHhIYW5kbGUgKSApDQo0MDI6ICAgICAgICAgICAgICAgICANCjQwMzogICAgICAgICAgICAgICAgIC8qIFRoZSBpdGVtIHZhbHVlIG9mIHRoZSBldmVudCBsaXN0IGl0ZW0gaXMgbm9ybWFsbHkgdXNlZCB0byBob2xkIHRoZSBwcmlvcml0eQ0KNDA0OiAgICAgICAgICAgICAgICAgb2YgdGhlIHRhc2sgdG8gd2hpY2ggaXQgYmVsb25ncyAoY29kZWQgdG8gYWxsb3cgaXQgdG8gYmUgaGVsZCBpbiByZXZlcnNlDQo0MDU6ICAgICAgICAgICAgICAgICBwcmlvcml0eSBvcmRlcikuICBIb3dldmVyLCBpdCBpcyBvY2Nhc2lvbmFsbHkgYm9ycm93ZWQgZm9yIG90aGVyIHB1cnBvc2VzLiAgSXQNCjQwNjogICAgICAgICAgICAgICAgIGlzIGltcG9ydGFudCBpdHMgdmFsdWUgaXMgbm90IHVwZGF0ZWQgZHVlIHRvIGEgdGFzayBwcmlvcml0eSBjaGFuZ2Ugd2hpbGUgaXQgaXMNCjQwNzogICAgICAgICAgICAgICAgIGJlaW5nIHVzZWQgZm9yIGFub3RoZXIgcHVycG9zZS4gIFRoZSBmb2xsb3dpbmcgYml0IGRlZmluaXRpb24gaXMgdXNlZCB0byBpbmZvcm0NCjQwODogICAgICAgICAgICAgICAgIHRoZSBzY2hlZHVsZXIgdGhhdCB0aGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIC0gaW4gd2hpY2ggY2FzZSBpdCBpcyB0aGUNCjQwOTogICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHdoaWNoZXZlciBtb2R1bGUgaXMgdXNpbmcgdGhlIHZhbHVlIHRvIGVuc3VyZSBpdCBnZXRzIHNldCBiYWNrDQo0MTA6ICAgICAgICAgICAgICAgICB0byBpdHMgb3JpZ2luYWwgdmFsdWUgd2hlbiBpdCBpcyByZWxlYXNlZC4gKi8NCjQxMTogICAgICAgICAgICAgICAgICNpZiBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDENCjQxMjogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHRhc2tFVkVOVF9MSVNUX0lURU1fVkFMVUVfSU5fVVNFCTB4ODAwMFUNCjQxMzogICAgICAgICAgICAgICAgICNlbHNlDQo0MTQ6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrRVZFTlRfTElTVF9JVEVNX1ZBTFVFX0lOX1VTRQkweDgwMDAwMDAwVUwNCjQxNTogICAgICAgICAgICAgICAgICNlbmRpZg0KNDE2OiAgICAgICAgICAgICAgICAgDQo0MTc6ICAgICAgICAgICAgICAgICAvKiBDYWxsYmFjayBmdW5jdGlvbiBwcm90b3R5cGVzLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0MTg6ICAgICAgICAgICAgICAgICAjaWYgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMA0KNDE5OiAgICAgICAgICAgICAgICAgCWV4dGVybiB2b2lkIHZBcHBsaWNhdGlvblN0YWNrT3ZlcmZsb3dIb29rKCBUYXNrSGFuZGxlX3QgeFRhc2ssIGNoYXIgKnBjVGFza05hbWUgKTsNCjQyMDogICAgICAgICAgICAgICAgICNlbmRpZg0KNDIxOiAgICAgICAgICAgICAgICAgDQo0MjI6ICAgICAgICAgICAgICAgICAjaWYgY29uZmlnVVNFX1RJQ0tfSE9PSyA+IDANCjQyMzogICAgICAgICAgICAgICAgIAlleHRlcm4gdm9pZCB2QXBwbGljYXRpb25UaWNrSG9vayggdm9pZCApOw0KNDI0OiAgICAgICAgICAgICAgICAgI2VuZGlmDQo0MjU6ICAgICAgICAgICAgICAgICANCjQyNjogICAgICAgICAgICAgICAgIC8qIEZpbGUgcHJpdmF0ZSBmdW5jdGlvbnMuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQyNzogICAgICAgICAgICAgICAgIA0KNDI4OiAgICAgICAgICAgICAgICAgLyoNCjQyOTogICAgICAgICAgICAgICAgICAqIFV0aWxpdHkgdG8gcmVhZHkgYSBUQ0IgZm9yIGEgZ2l2ZW4gdGFzay4gIE1haW5seSBqdXN0IGNvcGllcyB0aGUgcGFyYW1ldGVycw0KNDMwOiAgICAgICAgICAgICAgICAgICogaW50byB0aGUgVENCIHN0cnVjdHVyZS4NCjQzMTogICAgICAgICAgICAgICAgICAqLw0KNDMyOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2SW5pdGlhbGlzZVRDQlZhcmlhYmxlcyggVENCX3QgKiBjb25zdCBweFRDQiwgY29uc3QgY2hhciAqIGNvbnN0IHBjTmFtZSwgVUJhc2VUeXBlX3QgdXhQcmlvcml0eSwgY29uc3QgTWVtb3J5UmVnaW9uX3QgKiBjb25zdCB4UmVnaW9ucywgY29uc3QgdWludDE2X3QgdXNTdGFja0RlcHRoICkgUFJJVklMRUdFRF9GVU5DVElPTjsgLypsaW50ICFlOTcxIFVucXVhbGlmaWVkIGNoYXIgdHlwZXMgYXJlIGFsbG93ZWQgZm9yIHN0cmluZ3MgYW5kIHNpbmdsZSBjaGFyYWN0ZXJzIG9ubHkuICovDQo0MzM6ICAgICAgICAgICAgICAgICANCjQzNDogICAgICAgICAgICAgICAgIC8qKg0KNDM1OiAgICAgICAgICAgICAgICAgICogVXRpbGl0eSB0YXNrIHRoYXQgc2ltcGx5IHJldHVybnMgcGRUUlVFIGlmIHRoZSB0YXNrIHJlZmVyZW5jZWQgYnkgeFRhc2sgaXMNCjQzNjogICAgICAgICAgICAgICAgICAqIGN1cnJlbnRseSBpbiB0aGUgU3VzcGVuZGVkIHN0YXRlLCBvciBwZEZBTFNFIGlmIHRoZSB0YXNrIHJlZmVyZW5jZWQgYnkgeFRhc2sNCjQzNzogICAgICAgICAgICAgICAgICAqIGlzIGluIGFueSBvdGhlciBzdGF0ZS4NCjQzODogICAgICAgICAgICAgICAgICAqLw0KNDM5OiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQo0NDA6ICAgICAgICAgICAgICAgICAJc3RhdGljIEJhc2VUeXBlX3QgcHJ2VGFza0lzVGFza1N1c3BlbmRlZCggY29uc3QgVGFza0hhbmRsZV90IHhUYXNrICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjQ0MTogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KNDQyOiAgICAgICAgICAgICAgICAgDQo0NDM6ICAgICAgICAgICAgICAgICAvKg0KNDQ0OiAgICAgICAgICAgICAgICAgICogVXRpbGl0eSB0byByZWFkeSBhbGwgdGhlIGxpc3RzIHVzZWQgYnkgdGhlIHNjaGVkdWxlci4gIFRoaXMgaXMgY2FsbGVkDQo0NDU6ICAgICAgICAgICAgICAgICAgKiBhdXRvbWF0aWNhbGx5IHVwb24gdGhlIGNyZWF0aW9uIG9mIHRoZSBmaXJzdCB0YXNrLg0KNDQ2OiAgICAgICAgICAgICAgICAgICovDQo0NDc6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlVGFza0xpc3RzKCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjQ0ODogICAgICAgICAgICAgICAgIA0KNDQ5OiAgICAgICAgICAgICAgICAgLyoNCjQ1MDogICAgICAgICAgICAgICAgICAqIFRoZSBpZGxlIHRhc2ssIHdoaWNoIGFzIGFsbCB0YXNrcyBpcyBpbXBsZW1lbnRlZCBhcyBhIG5ldmVyIGVuZGluZyBsb29wLg0KNDUxOiAgICAgICAgICAgICAgICAgICogVGhlIGlkbGUgdGFzayBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSByZWFkeSBsaXN0cyB1cG9uDQo0NTI6ICAgICAgICAgICAgICAgICAgKiBjcmVhdGlvbiBvZiB0aGUgZmlyc3QgdXNlciB0YXNrLg0KNDUzOiAgICAgICAgICAgICAgICAgICoNCjQ1NDogICAgICAgICAgICAgICAgICAqIFRoZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTygpIG1hY3JvIGlzIHVzZWQgdG8gYWxsb3cgcG9ydC9jb21waWxlciBzcGVjaWZpYw0KNDU1OiAgICAgICAgICAgICAgICAgICogbGFuZ3VhZ2UgZXh0ZW5zaW9ucy4gIFRoZSBlcXVpdmFsZW50IHByb3RvdHlwZSBmb3IgdGhpcyBmdW5jdGlvbiBpczoNCjQ1NjogICAgICAgICAgICAgICAgICAqDQo0NTc6ICAgICAgICAgICAgICAgICAgKiB2b2lkIHBydklkbGVUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKTsNCjQ1ODogICAgICAgICAgICAgICAgICAqDQo0NTk6ICAgICAgICAgICAgICAgICAgKi8NCjQ2MDogICAgICAgICAgICAgICAgIHN0YXRpYyBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggcHJ2SWRsZVRhc2ssIHB2UGFyYW1ldGVycyApOw0KNDYxOiAgICAgICAgICAgICAgICAgDQo0NjI6ICAgICAgICAgICAgICAgICAvKg0KNDYzOiAgICAgICAgICAgICAgICAgICogVXRpbGl0eSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBzY2hlZHVsZXIgdG8gaG9sZCBhIFRDQiwNCjQ2NDogICAgICAgICAgICAgICAgICAqIGluY2x1ZGluZyB0aGUgc3RhY2sgcG9pbnRlZCB0byBieSB0aGUgVENCLg0KNDY1OiAgICAgICAgICAgICAgICAgICoNCjQ2NjogICAgICAgICAgICAgICAgICAqIFRoaXMgZG9lcyBub3QgZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSB0YXNrIGl0c2VsZiAoaS5lLiBtZW1vcnkNCjQ2NzogICAgICAgICAgICAgICAgICAqIGFsbG9jYXRlZCBieSBjYWxscyB0byBwdlBvcnRNYWxsb2MgZnJvbSB3aXRoaW4gdGhlIHRhc2tzIGFwcGxpY2F0aW9uIGNvZGUpLg0KNDY4OiAgICAgICAgICAgICAgICAgICovDQo0Njk6ICAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KNDcwOiAgICAgICAgICAgICAgICAgDQo0NzE6ICAgICAgICAgICAgICAgICAJc3RhdGljIHZvaWQgcHJ2RGVsZXRlVENCKCBUQ0JfdCAqcHhUQ0IgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KNDcyOiAgICAgICAgICAgICAgICAgDQo0NzM6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjQ3NDogICAgICAgICAgICAgICAgIA0KNDc1OiAgICAgICAgICAgICAgICAgLyoNCjQ3NjogICAgICAgICAgICAgICAgICAqIFVzZWQgb25seSBieSB0aGUgaWRsZSB0YXNrLiAgVGhpcyBjaGVja3MgdG8gc2VlIGlmIGFueXRoaW5nIGhhcyBiZWVuIHBsYWNlZA0KNDc3OiAgICAgICAgICAgICAgICAgICogaW4gdGhlIGxpc3Qgb2YgdGFza3Mgd2FpdGluZyB0byBiZSBkZWxldGVkLiAgSWYgc28gdGhlIHRhc2sgaXMgY2xlYW5lZCB1cA0KNDc4OiAgICAgICAgICAgICAgICAgICogYW5kIGl0cyBUQ0IgZGVsZXRlZC4NCjQ3OTogICAgICAgICAgICAgICAgICAqLw0KNDgwOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2Q2hlY2tUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQo0ODE6ICAgICAgICAgICAgICAgICANCjQ4MjogICAgICAgICAgICAgICAgIC8qDQo0ODM6ICAgICAgICAgICAgICAgICAgKiBUaGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrIGlzIGVudGVyaW5nIHRoZSBCbG9ja2VkIHN0YXRlLiAgQWRkIHRoZSB0YXNrIHRvDQo0ODQ6ICAgICAgICAgICAgICAgICAgKiBlaXRoZXIgdGhlIGN1cnJlbnQgb3IgdGhlIG92ZXJmbG93IGRlbGF5ZWQgdGFzayBsaXN0Lg0KNDg1OiAgICAgICAgICAgICAgICAgICovDQo0ODY6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVUb1dha2UgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KNDg3OiAgICAgICAgICAgICAgICAgDQo0ODg6ICAgICAgICAgICAgICAgICAvKg0KNDg5OiAgICAgICAgICAgICAgICAgICogQWxsb2NhdGVzIG1lbW9yeSBmcm9tIHRoZSBoZWFwIGZvciBhIFRDQiBhbmQgYXNzb2NpYXRlZCBzdGFjay4gIENoZWNrcyB0aGUNCjQ5MDogICAgICAgICAgICAgICAgICAqIGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwuDQo0OTE6ICAgICAgICAgICAgICAgICAgKi8NCjQ5MjogICAgICAgICAgICAgICAgIHN0YXRpYyBUQ0JfdCAqcHJ2QWxsb2NhdGVUQ0JBbmRTdGFjayggY29uc3QgdWludDE2X3QgdXNTdGFja0RlcHRoLCBTdGFja1R5cGVfdCAqIGNvbnN0IHB1eFN0YWNrQnVmZmVyICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjQ5MzogICAgICAgICAgICAgICAgIA0KNDk0OiAgICAgICAgICAgICAgICAgLyoNCjQ5NTogICAgICAgICAgICAgICAgICAqIEZpbGxzIGFuIFRhc2tTdGF0dXNfdCBzdHJ1Y3R1cmUgd2l0aCBpbmZvcm1hdGlvbiBvbiBlYWNoIHRhc2sgdGhhdCBpcw0KNDk2OiAgICAgICAgICAgICAgICAgICogcmVmZXJlbmNlZCBmcm9tIHRoZSBweExpc3QgbGlzdCAod2hpY2ggbWF5IGJlIGEgcmVhZHkgbGlzdCwgYSBkZWxheWVkIGxpc3QsDQo0OTc6ICAgICAgICAgICAgICAgICAgKiBhIHN1c3BlbmRlZCBsaXN0LCBldGMuKS4NCjQ5ODogICAgICAgICAgICAgICAgICAqDQo0OTk6ICAgICAgICAgICAgICAgICAgKiBUSElTIEZVTkNUSU9OIElTIElOVEVOREVEIEZPUiBERUJVR0dJTkcgT05MWSwgQU5EIFNIT1VMRCBOT1QgQkUgQ0FMTEVEIEZST00NCjUwMDogICAgICAgICAgICAgICAgICAqIE5PUk1BTCBBUFBMSUNBVElPTiBDT0RFLg0KNTAxOiAgICAgICAgICAgICAgICAgICovDQo1MDI6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQo1MDM6ICAgICAgICAgICAgICAgICANCjUwNDogICAgICAgICAgICAgICAgIAlzdGF0aWMgVUJhc2VUeXBlX3QgcHJ2TGlzdFRhc2tXaXRoaW5TaW5nbGVMaXN0KCBUYXNrU3RhdHVzX3QgKnB4VGFza1N0YXR1c0FycmF5LCBMaXN0X3QgKnB4TGlzdCwgZVRhc2tTdGF0ZSBlU3RhdGUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KNTA1OiAgICAgICAgICAgICAgICAgDQo1MDY6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjUwNzogICAgICAgICAgICAgICAgIA0KNTA4OiAgICAgICAgICAgICAgICAgLyoNCjUwOTogICAgICAgICAgICAgICAgICAqIFdoZW4gYSB0YXNrIGlzIGNyZWF0ZWQsIHRoZSBzdGFjayBvZiB0aGUgdGFzayBpcyBmaWxsZWQgd2l0aCBhIGtub3duIHZhbHVlLg0KNTEwOiAgICAgICAgICAgICAgICAgICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSAnaGlnaCB3YXRlciBtYXJrJyBvZiB0aGUgdGFzayBzdGFjayBieQ0KNTExOiAgICAgICAgICAgICAgICAgICogZGV0ZXJtaW5pbmcgaG93IG11Y2ggb2YgdGhlIHN0YWNrIHJlbWFpbnMgYXQgdGhlIG9yaWdpbmFsIHByZXNldCB2YWx1ZS4NCjUxMjogICAgICAgICAgICAgICAgICAqLw0KNTEzOiAgICAgICAgICAgICAgICAgI2lmICggKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApIHx8ICggSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgPT0gMSApICkNCjUxNDogICAgICAgICAgICAgICAgIA0KNTE1OiAgICAgICAgICAgICAgICAgCXN0YXRpYyB1aW50MTZfdCBwcnZUYXNrQ2hlY2tGcmVlU3RhY2tTcGFjZSggY29uc3QgdWludDhfdCAqIHB1Y1N0YWNrQnl0ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQo1MTY6ICAgICAgICAgICAgICAgICANCjUxNzogICAgICAgICAgICAgICAgICNlbmRpZg0KNTE4OiAgICAgICAgICAgICAgICAgDQo1MTk6ICAgICAgICAgICAgICAgICAvKg0KNTIwOiAgICAgICAgICAgICAgICAgICogUmV0dXJuIHRoZSBhbW91bnQgb2YgdGltZSwgaW4gdGlja3MsIHRoYXQgd2lsbCBwYXNzIGJlZm9yZSB0aGUga2VybmVsIHdpbGwNCjUyMTogICAgICAgICAgICAgICAgICAqIG5leHQgbW92ZSBhIHRhc2sgZnJvbSB0aGUgQmxvY2tlZCBzdGF0ZSB0byB0aGUgUnVubmluZyBzdGF0ZS4NCjUyMjogICAgICAgICAgICAgICAgICAqDQo1MjM6ICAgICAgICAgICAgICAgICAgKiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNob3VsZCB1c2UgaW5lcXVhbGl0eSB0byAwLCBub3QgZXF1YWxpdHkgdG8gMS4NCjUyNDogICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgdG8gZW5zdXJlIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVAoKSBjYW4gYmUgY2FsbGVkIHdoZW4gdXNlcg0KNTI1OiAgICAgICAgICAgICAgICAgICogZGVmaW5lZCBsb3cgcG93ZXIgbW9kZSBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZSBjb25maWdVU0VfVElDS0xFU1NfSURMRSB0byBiZQ0KNTI2OiAgICAgICAgICAgICAgICAgICogc2V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAxLg0KNTI3OiAgICAgICAgICAgICAgICAgICovDQo1Mjg6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVElDS0xFU1NfSURMRSAhPSAwICkNCjUyOTogICAgICAgICAgICAgICAgIA0KNTMwOiAgICAgICAgICAgICAgICAgCXN0YXRpYyBUaWNrVHlwZV90IHBydkdldEV4cGVjdGVkSWRsZVRpbWUoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KNTMxOiAgICAgICAgICAgICAgICAgDQo1MzI6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjUzMzogICAgICAgICAgICAgICAgIA0KNTM0OiAgICAgICAgICAgICAgICAgLyoNCjUzNTogICAgICAgICAgICAgICAgICAqIFNldCB4TmV4dFRhc2tVbmJsb2NrVGltZSB0byB0aGUgdGltZSBhdCB3aGljaCB0aGUgbmV4dCBCbG9ja2VkIHN0YXRlIHRhc2sNCjUzNjogICAgICAgICAgICAgICAgICAqIHdpbGwgZXhpdCB0aGUgQmxvY2tlZCBzdGF0ZS4NCjUzNzogICAgICAgICAgICAgICAgICAqLw0KNTM4OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UmVzZXROZXh0VGFza1VuYmxvY2tUaW1lKCB2b2lkICk7DQo1Mzk6ICAgICAgICAgICAgICAgICANCjU0MDogICAgICAgICAgICAgICAgICNpZiAoICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9TVEFUU19GT1JNQVRUSU5HX0ZVTkNUSU9OUyA+IDAgKSApDQo1NDE6ICAgICAgICAgICAgICAgICANCjU0MjogICAgICAgICAgICAgICAgIAkvKg0KNTQzOiAgICAgICAgICAgICAgICAgCSAqIEhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIHBhZCB0YXNrIG5hbWVzIHdpdGggc3BhY2VzIHdoZW4gcHJpbnRpbmcgb3V0DQo1NDQ6ICAgICAgICAgICAgICAgICAJICogaHVtYW4gcmVhZGFibGUgdGFibGVzIG9mIHRhc2sgaW5mb3JtYXRpb24uDQo1NDU6ICAgICAgICAgICAgICAgICAJICovDQo1NDY6ICAgICAgICAgICAgICAgICAJc3RhdGljIGNoYXIgKnBydldyaXRlTmFtZVRvQnVmZmVyKCBjaGFyICpwY0J1ZmZlciwgY29uc3QgY2hhciAqcGNUYXNrTmFtZSApOw0KNTQ3OiAgICAgICAgICAgICAgICAgDQo1NDg6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjU0OTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTUwOiAgICAgICAgICAgICAgICAgDQo1NTE6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhUYXNrR2VuZXJpY0NyZWF0ZSggVGFza0Z1bmN0aW9uX3QgcHhUYXNrQ29kZSwgY29uc3QgY2hhciAqIGNvbnN0IHBjTmFtZSwgY29uc3QgdWludDE2X3QgdXNTdGFja0RlcHRoLCB2b2lkICogY29uc3QgcHZQYXJhbWV0ZXJzLCBVQmFzZVR5cGVfdCB1eFByaW9yaXR5LCBUYXNrSGFuZGxlX3QgKiBjb25zdCBweENyZWF0ZWRUYXNrLCBTdGFja1R5cGVfdCAqIGNvbnN0IHB1eFN0YWNrQnVmZmVyLCBjb25zdCBNZW1vcnlSZWdpb25fdCAqIGNvbnN0IHhSZWdpb25zICkgLypsaW50ICFlOTcxIFVucXVhbGlmaWVkIGNoYXIgdHlwZXMgYXJlIGFsbG93ZWQgZm9yIHN0cmluZ3MgYW5kIHNpbmdsZSBjaGFyYWN0ZXJzIG9ubHkuICovDQo1NTI6ICAgICAgICAgICAgICAgICB7DQpCRkQwMTUzNCAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OApCRkQwMTUzNiAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApCkJGRDAxNTM4ICAgICAgQ0JDQSAgIFNXIFM4LCA0MChTUCkKQkZEMDE1M0EgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDE1M0MgIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQpCRkQwMTU0MCAgMDAzNEY4QkUgICBTVyBBMSwgNTIoUzgpCkJGRDAxNTQ0ICAgICAgMEM0NiAgIE1PVkUgVjAsIEEyCkJGRDAxNTQ2ICAwMDNDRjhGRSAgIFNXIEEzLCA2MChTOCkKQkZEMDE1NEEgIDAwMzgzODVFICAgU0ggVjAsIDU2KFM4KQo1NTM6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQo1NTQ6ICAgICAgICAgICAgICAgICBUQ0JfdCAqIHB4TmV3VENCOw0KNTU1OiAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjazsNCjU1NjogICAgICAgICAgICAgICAgIA0KNTU3OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhUYXNrQ29kZSApOw0KQkZEMDE1NEUgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMTU1MiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTU2OApCRkQwMTU1NiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMTU1OCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAxNTVBICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAxNTVDICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMTU1RSAgMDIyRDMwQTAgICBBRERJVSBBMSwgWkVSTywgNTU3CkJGRDAxNTYyICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMTU2NCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMTU2NiAgICAgIDBDMDAgICBOT1AKNTU4OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggKCAoIHV4UHJpb3JpdHkgJiAoIFVCYXNlVHlwZV90ICkgKCB+cG9ydFBSSVZJTEVHRV9CSVQgKSApIDwgKCBVQmFzZVR5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTICkgKTsNCkJGRDAxNTY4ICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkKQkZEMDE1NkMgIDAwMDVCMDQyICAgU0xUSVUgVjAsIFYwLCA1CkJGRDAxNTcwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxNTg2CkJGRDAxNTc0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAxNTc2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDE1NzggIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDE1N0EgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDAxNTdDICAwMjJFMzBBMCAgIEFERElVIEExLCBaRVJPLCA1NTgKQkZEMDE1ODAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAxNTgyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAxNTg0ICAgICAgMEMwMCAgIE5PUAo1NTk6ICAgICAgICAgICAgICAgICANCjU2MDogICAgICAgICAgICAgICAgIAkvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IHJlcXVpcmVkIGJ5IHRoZSBUQ0IgYW5kIHN0YWNrIGZvciB0aGUgbmV3IHRhc2ssDQo1NjE6ICAgICAgICAgICAgICAgICAJY2hlY2tpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gKi8NCjU2MjogICAgICAgICAgICAgICAgIAlweE5ld1RDQiA9IHBydkFsbG9jYXRlVENCQW5kU3RhY2soIHVzU3RhY2tEZXB0aCwgcHV4U3RhY2tCdWZmZXIgKTsNCkJGRDAxNTg2ICAwMDM4MzQ1RSAgIExIVSBWMCwgNTYoUzgpCkJGRDAxNThBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAxNThDICAwMDQ4RkNCRSAgIExXIEExLCA3MihTOCkKQkZEMDE1OTAgIDMxOTQ3N0U4ICAgSkFMUyBwcnZBbGxvY2F0ZVRDQkFuZFN0YWNrCkJGRDAxNTkyICAwQzAwMzE5NCAgIEFERElVIFQ0LCBTNCwgMzA3MgpCRkQwMTU5NCAgICAgIDBDMDAgICBOT1AKQkZEMDE1OTYgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo1NjM6ICAgICAgICAgICAgICAgICANCjU2NDogICAgICAgICAgICAgICAgIAlpZiggcHhOZXdUQ0IgIT0gTlVMTCApDQpCRkQwMTU5QSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAxNTlFICAwMDlBNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxNkQ2CjU2NTogICAgICAgICAgICAgICAgIAl7DQo1NjY6ICAgICAgICAgICAgICAgICAJCSNpZiggcG9ydFVTSU5HX01QVV9XUkFQUEVSUyA9PSAxICkNCjU2NzogICAgICAgICAgICAgICAgIAkJCS8qIFNob3VsZCB0aGUgdGFzayBiZSBjcmVhdGVkIGluIHByaXZpbGVnZWQgbW9kZT8gKi8NCjU2ODogICAgICAgICAgICAgICAgIAkJCUJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQ7DQo1Njk6ICAgICAgICAgICAgICAgICAJCQlpZiggKCB1eFByaW9yaXR5ICYgcG9ydFBSSVZJTEVHRV9CSVQgKSAhPSAwVSApDQo1NzA6ICAgICAgICAgICAgICAgICAJCQl7DQo1NzE6ICAgICAgICAgICAgICAgICAJCQkJeFJ1blByaXZpbGVnZWQgPSBwZFRSVUU7DQo1NzI6ICAgICAgICAgICAgICAgICAJCQl9DQo1NzM6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo1NzQ6ICAgICAgICAgICAgICAgICAJCQl7DQo1NzU6ICAgICAgICAgICAgICAgICAJCQkJeFJ1blByaXZpbGVnZWQgPSBwZEZBTFNFOw0KNTc2OiAgICAgICAgICAgICAgICAgCQkJfQ0KNTc3OiAgICAgICAgICAgICAgICAgCQkJdXhQcmlvcml0eSAmPSB+cG9ydFBSSVZJTEVHRV9CSVQ7DQo1Nzg6ICAgICAgICAgICAgICAgICANCjU3OTogICAgICAgICAgICAgICAgIAkJCWlmKCBwdXhTdGFja0J1ZmZlciAhPSBOVUxMICkNCjU4MDogICAgICAgICAgICAgICAgIAkJCXsNCjU4MTogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgYXBwbGljYXRpb24gcHJvdmlkZWQgaXRzIG93biBzdGFjay4gIE5vdGUgdGhpcyBzbyBubw0KNTgyOiAgICAgICAgICAgICAgICAgCQkJCWF0dGVtcHQgaXMgbWFkZSB0byBkZWxldGUgdGhlIHN0YWNrIHNob3VsZCB0aGF0IHRhc2sgYmUNCjU4MzogICAgICAgICAgICAgICAgIAkJCQlkZWxldGVkLiAqLw0KNTg0OiAgICAgICAgICAgICAgICAgCQkJCXB4TmV3VENCLT54VXNpbmdTdGF0aWNhbGx5QWxsb2NhdGVkU3RhY2sgPSBwZFRSVUU7DQo1ODU6ICAgICAgICAgICAgICAgICAJCQl9DQo1ODY6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo1ODc6ICAgICAgICAgICAgICAgICAJCQl7DQo1ODg6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHN0YWNrIHdhcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuICBOb3RlIHRoaXMgc28gaXQgY2FuIGJlDQo1ODk6ICAgICAgICAgICAgICAgICAJCQkJZGVsZXRlZCBhZ2FpbiBpZiB0aGUgdGFzayBpcyBkZWxldGVkLiAqLw0KNTkwOiAgICAgICAgICAgICAgICAgCQkJCXB4TmV3VENCLT54VXNpbmdTdGF0aWNhbGx5QWxsb2NhdGVkU3RhY2sgPSBwZEZBTFNFOw0KNTkxOiAgICAgICAgICAgICAgICAgCQkJfQ0KNTkyOiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogcG9ydFVTSU5HX01QVV9XUkFQUEVSUyA9PSAxICovDQo1OTM6ICAgICAgICAgICAgICAgICANCjU5NDogICAgICAgICAgICAgICAgIAkJLyogQ2FsY3VsYXRlIHRoZSB0b3Agb2Ygc3RhY2sgYWRkcmVzcy4gIFRoaXMgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZQ0KNTk1OiAgICAgICAgICAgICAgICAgCQlzdGFjayBncm93cyBmcm9tIGhpZ2ggbWVtb3J5IHRvIGxvdyAoYXMgcGVyIHRoZSA4MHg4Nikgb3IgdmljZSB2ZXJzYS4NCjU5NjogICAgICAgICAgICAgICAgIAkJcG9ydFNUQUNLX0dST1dUSCBpcyB1c2VkIHRvIG1ha2UgdGhlIHJlc3VsdCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBhcw0KNTk3OiAgICAgICAgICAgICAgICAgCQlyZXF1aXJlZCBieSB0aGUgcG9ydC4gKi8NCjU5ODogICAgICAgICAgICAgICAgIAkJI2lmKCBwb3J0U1RBQ0tfR1JPV1RIIDwgMCApDQo1OTk6ICAgICAgICAgICAgICAgICAJCXsNCjYwMDogICAgICAgICAgICAgICAgIAkJCXB4VG9wT2ZTdGFjayA9IHB4TmV3VENCLT5weFN0YWNrICsgKCB1c1N0YWNrRGVwdGggLSAoIHVpbnQxNl90ICkgMSApOw0KQkZEMDE1QTIgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTVBNCAgNjlBQzAwMUMgICBFWFQgWkVSTywgR1AsIDYsIDE0CkJGRDAxNUE2ICAgICAgNjlBQyAgIExXIFYxLCA0OChWMCkKQkZEMDE1QTggIDAwMzgzNDVFICAgTEhVIFYwLCA1NihTOCkKQkZEMDE1QUMgICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQpCRkQwMTVBRSAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDAxNUIwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwMTVCMiAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpCjYwMTogICAgICAgICAgICAgICAgIAkJCXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKiApICggKCAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIHB4VG9wT2ZTdGFjayApICYgKCB+KCAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICkgKSApOyAvKmxpbnQgIWU5MjMgTUlTUkEgZXhjZXB0aW9uLiAgQXZvaWRpbmcgY2FzdHMgYmV0d2VlbiBwb2ludGVycyBhbmQgaW50ZWdlcnMgaXMgbm90IHByYWN0aWNhbC4gIFNpemUgZGlmZmVyZW5jZXMgYWNjb3VudGVkIGZvciB1c2luZyBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgdHlwZS4gKi8NCkJGRDAxNUI2ICAwMDIwRkM3RSAgIExXIFYxLCAzMihTOCkKQkZEMDE1QjggIDMwNDAwMDIwICAgU1JMIEFULCBaRVJPLCA2CkJGRDAxNUJBICBGRkY4MzA0MCAgIEFERElVIFYwLCBaRVJPLCAtOApCRkQwMTVCQyAgNDQ5M0ZGRjggICBMVyBSQSwgMTc1NTUoVDgpCkJGRDAxNUJFICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwMTVDMCAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpCjYwMjogICAgICAgICAgICAgICAgIA0KNjAzOiAgICAgICAgICAgICAgICAgCQkJLyogQ2hlY2sgdGhlIGFsaWdubWVudCBvZiB0aGUgY2FsY3VsYXRlZCB0b3Agb2Ygc3RhY2sgaXMgY29ycmVjdC4gKi8NCjYwNDogICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggKCAoICggcG9ydFBPSU5URVJfU0laRV9UWVBFICkgcHhUb3BPZlN0YWNrICYgKCBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgKSBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApID09IDBVTCApICk7DQpCRkQwMTVDNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAxNUM4ICAgICAgMkQyNSAgIEFOREkgVjAsIFYwLCAweDcKQkZEMDE1Q0EgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE1RTAKQkZEMDE1Q0UgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDE1RDAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMTVEMiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwMTVENCAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDE1RDYgIDAyNUMzMEEwICAgQURESVUgQTEsIFpFUk8sIDYwNApCRkQwMTVEQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDE1REMgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDE1REUgICAgICAwQzAwICAgTk9QCjYwNTogICAgICAgICAgICAgICAgIAkJfQ0KNjA2OiAgICAgICAgICAgICAgICAgCQkjZWxzZSAvKiBwb3J0U1RBQ0tfR1JPV1RIICovDQo2MDc6ICAgICAgICAgICAgICAgICAJCXsNCjYwODogICAgICAgICAgICAgICAgIAkJCXB4VG9wT2ZTdGFjayA9IHB4TmV3VENCLT5weFN0YWNrOw0KNjA5OiAgICAgICAgICAgICAgICAgDQo2MTA6ICAgICAgICAgICAgICAgICAJCQkvKiBDaGVjayB0aGUgYWxpZ25tZW50IG9mIHRoZSBzdGFjayBidWZmZXIgaXMgY29ycmVjdC4gKi8NCjYxMTogICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggKCAoICggcG9ydFBPSU5URVJfU0laRV9UWVBFICkgcHhOZXdUQ0ItPnB4U3RhY2sgJiAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICkgPT0gMFVMICkgKTsNCjYxMjogICAgICAgICAgICAgICAgIA0KNjEzOiAgICAgICAgICAgICAgICAgCQkJLyogSWYgd2Ugd2FudCB0byB1c2Ugc3RhY2sgY2hlY2tpbmcgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHVzZQ0KNjE0OiAgICAgICAgICAgICAgICAgCQkJYSBwb3NpdGl2ZSBzdGFjayBncm93dGggZGlyZWN0aW9uIHRoZW4gd2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZQ0KNjE1OiAgICAgICAgICAgICAgICAgCQkJb3RoZXIgZXh0cmVtZSBvZiB0aGUgc3RhY2sgc3BhY2UuICovDQo2MTY6ICAgICAgICAgICAgICAgICAJCQlweE5ld1RDQi0+cHhFbmRPZlN0YWNrID0gcHhOZXdUQ0ItPnB4U3RhY2sgKyAoIHVzU3RhY2tEZXB0aCAtIDEgKTsNCjYxNzogICAgICAgICAgICAgICAgIAkJfQ0KNjE4OiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogcG9ydFNUQUNLX0dST1dUSCAqLw0KNjE5OiAgICAgICAgICAgICAgICAgDQo2MjA6ICAgICAgICAgICAgICAgICAJCS8qIFNldHVwIHRoZSBuZXdseSBhbGxvY2F0ZWQgVENCIHdpdGggdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRhc2suICovDQo2MjE6ICAgICAgICAgICAgICAgICAJCXBydkluaXRpYWxpc2VUQ0JWYXJpYWJsZXMoIHB4TmV3VENCLCBwY05hbWUsIHV4UHJpb3JpdHksIHhSZWdpb25zLCB1c1N0YWNrRGVwdGggKTsNCkJGRDAxNUUwICAwMDM4MzQ1RSAgIExIVSBWMCwgNTYoUzgpCkJGRDAxNUU0ICAgICAgQzg0NCAgIFNXIFYwLCAxNihTUCkKQkZEMDE1RTYgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQpCRkQwMTVFQSAgMDAzNEZDQkUgICBMVyBBMSwgNTIoUzgpCkJGRDAxNUVFICAwMDQwRkNERSAgIExXIEEyLCA2NChTOCkKQkZEMDE1RjIgIDAwNENGQ0ZFICAgTFcgQTMsIDc2KFM4KQpCRkQwMTVGNiAgMUU3NDc3RTggICBKQUxTIHBydkluaXRpYWxpc2VUQ0JWYXJpYWJsZXMKQkZEMDE1RjggIDBDMDAxRTc0ICAgTEIgUzMsIDMwNzIoUzQpCkJGRDAxNUZBICAgICAgMEMwMCAgIE5PUAo2MjI6ICAgICAgICAgICAgICAgICANCjYyMzogICAgICAgICAgICAgICAgIAkJLyogSW5pdGlhbGl6ZSB0aGUgVENCIHN0YWNrIHRvIGxvb2sgYXMgaWYgdGhlIHRhc2sgd2FzIGFscmVhZHkgcnVubmluZywNCjYyNDogICAgICAgICAgICAgICAgIAkJYnV0IGhhZCBiZWVuIGludGVycnVwdGVkIGJ5IHRoZSBzY2hlZHVsZXIuICBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgc2V0DQo2MjU6ICAgICAgICAgICAgICAgICAJCXRvIHRoZSBzdGFydCBvZiB0aGUgdGFzayBmdW5jdGlvbi4gT25jZSB0aGUgc3RhY2sgaGFzIGJlZW4gaW5pdGlhbGlzZWQNCjYyNjogICAgICAgICAgICAgICAgIAkJdGhlCXRvcCBvZiBzdGFjayB2YXJpYWJsZSBpcyB1cGRhdGVkLiAqLw0KNjI3OiAgICAgICAgICAgICAgICAgCQkjaWYoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQo2Mjg6ICAgICAgICAgICAgICAgICAJCXsNCjYyOTogICAgICAgICAgICAgICAgIAkJCXB4TmV3VENCLT5weFRvcE9mU3RhY2sgPSBweFBvcnRJbml0aWFsaXNlU3RhY2soIHB4VG9wT2ZTdGFjaywgcHhUYXNrQ29kZSwgcHZQYXJhbWV0ZXJzLCB4UnVuUHJpdmlsZWdlZCApOw0KNjMwOiAgICAgICAgICAgICAgICAgCQl9DQo2MzE6ICAgICAgICAgICAgICAgICAJCSNlbHNlIC8qIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgKi8NCjYzMjogICAgICAgICAgICAgICAgIAkJew0KNjMzOiAgICAgICAgICAgICAgICAgCQkJcHhOZXdUQ0ItPnB4VG9wT2ZTdGFjayA9IHB4UG9ydEluaXRpYWxpc2VTdGFjayggcHhUb3BPZlN0YWNrLCBweFRhc2tDb2RlLCBwdlBhcmFtZXRlcnMgKTsNCkJGRDAxNUZDICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDE2MDAgIDAwMzBGQ0JFICAgTFcgQTEsIDQ4KFM4KQpCRkQwMTYwNCAgMDAzQ0ZDREUgICBMVyBBMiwgNjAoUzgpCkJGRDAxNjA4ICAyQjE4NzdFOCAgIEpBTFMgcHhQb3J0SW5pdGlhbGlzZVN0YWNrCkJGRDAxNjBBICAgICAgMkIxOCAgIExIVSBBMiwgMTYoUzEpCkJGRDAxNjBDICAgICAgMEMwMCAgIE5PUApCRkQwMTYwRSAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMApCRkQwMTYxMCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAxNjE0ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo2MzQ6ICAgICAgICAgICAgICAgICAJCX0NCjYzNTogICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgKi8NCjYzNjogICAgICAgICAgICAgICAgIA0KNjM3OiAgICAgICAgICAgICAgICAgCQlpZiggKCB2b2lkICogKSBweENyZWF0ZWRUYXNrICE9IE5VTEwgKQ0KQkZEMDE2MTYgIDAwNDRGQzVFICAgTFcgVjAsIDY4KFM4KQpCRkQwMTYxQSAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTYyOAo2Mzg6ICAgICAgICAgICAgICAgICAJCXsNCjYzOTogICAgICAgICAgICAgICAgIAkJCS8qIFBhc3MgdGhlIFRDQiBvdXQgLSBpbiBhbiBhbm9ueW1vdXMgd2F5LiAgVGhlIGNhbGxpbmcgZnVuY3Rpb24vDQo2NDA6ICAgICAgICAgICAgICAgICAJCQl0YXNrIGNhbiB1c2UgdGhpcyBhcyBhIGhhbmRsZSB0byBkZWxldGUgdGhlIHRhc2sgbGF0ZXIgaWYNCjY0MTogICAgICAgICAgICAgICAgIAkJCXJlcXVpcmVkLiovDQo2NDI6ICAgICAgICAgICAgICAgICAJCQkqcHhDcmVhdGVkVGFzayA9ICggVGFza0hhbmRsZV90ICkgcHhOZXdUQ0I7DQpCRkQwMTYxRSAgMDA0NEZDNUUgICBMVyBWMCwgNjgoUzgpCkJGRDAxNjIyICAwMDFDRkM3RSAgIExXIFYxLCAyOChTOCkKQkZEMDE2MjYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjY0MzogICAgICAgICAgICAgICAgIAkJfQ0KNjQ0OiAgICAgICAgICAgICAgICAgCQllbHNlDQo2NDU6ICAgICAgICAgICAgICAgICAJCXsNCjY0NjogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjY0NzogICAgICAgICAgICAgICAgIAkJfQ0KNjQ4OiAgICAgICAgICAgICAgICAgDQo2NDk6ICAgICAgICAgICAgICAgICAJCS8qIEVuc3VyZSBpbnRlcnJ1cHRzIGRvbid0IGFjY2VzcyB0aGUgdGFzayBsaXN0cyB3aGlsZSB0aGV5IGFyZSBiZWluZw0KNjUwOiAgICAgICAgICAgICAgICAgCQl1cGRhdGVkLiAqLw0KNjUxOiAgICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAxNjI4ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAxNjJBICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMTYyQyAgICAgIDBDMDAgICBOT1AKNjUyOiAgICAgICAgICAgICAgICAgCQl7DQo2NTM6ICAgICAgICAgICAgICAgICAJCQl1eEN1cnJlbnROdW1iZXJPZlRhc2tzKys7DQpCRkQwMTYyRSAgODAzOEZDNUMgICBMVyBWMCwgLTMyNzEyKEdQKQpCRkQwMTYzMiAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDEKQkZEMDE2MzQgIDgwMzhGODVDICAgU1cgVjAsIC0zMjcxMihHUCkKNjU0OiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQiA9PSBOVUxMICkNCkJGRDAxNjM4ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAxNjNDICAwMDBGNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxNjVFCjY1NTogICAgICAgICAgICAgICAgIAkJCXsNCjY1NjogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGVyZSBhcmUgbm8gb3RoZXIgdGFza3MsIG9yIGFsbCB0aGUgb3RoZXIgdGFza3MgYXJlIGluDQo2NTc6ICAgICAgICAgICAgICAgICAJCQkJdGhlIHN1c3BlbmRlZCBzdGF0ZSAtIG1ha2UgdGhpcyB0aGUgY3VycmVudCB0YXNrLiAqLw0KNjU4OiAgICAgICAgICAgICAgICAgCQkJCXB4Q3VycmVudFRDQiA9ICBweE5ld1RDQjsNCkJGRDAxNjQwICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDE2NDQgIDgwMzBGODVDICAgU1cgVjAsIC0zMjcyMChHUCkKNjU5OiAgICAgICAgICAgICAgICAgDQo2NjA6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHV4Q3VycmVudE51bWJlck9mVGFza3MgPT0gKCBVQmFzZVR5cGVfdCApIDEgKQ0KQkZEMDE2NDggIDgwMzhGQzdDICAgTFcgVjEsIC0zMjcxMihHUCkKQkZEMDE2NEMgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDE2NEUgIDAwMTdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMTY4MApCRkQwMTY1MCAgMEMwMDAwMTcgICBTTEwgWkVSTywgUzcsIDEKQkZEMDE2NTIgICAgICAwQzAwICAgTk9QCjY2MTogICAgICAgICAgICAgICAgIAkJCQl7DQo2NjI6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IHRhc2sgdG8gYmUgY3JlYXRlZCBzbyBkbyB0aGUgcHJlbGltaW5hcnkNCjY2MzogICAgICAgICAgICAgICAgIAkJCQkJaW5pdGlhbGlzYXRpb24gcmVxdWlyZWQuICBXZSB3aWxsIG5vdCByZWNvdmVyIGlmIHRoaXMgY2FsbA0KNjY0OiAgICAgICAgICAgICAgICAgCQkJCQlmYWlscywgYnV0IHdlIHdpbGwgcmVwb3J0IHRoZSBmYWlsdXJlLiAqLw0KNjY1OiAgICAgICAgICAgICAgICAgCQkJCQlwcnZJbml0aWFsaXNlVGFza0xpc3RzKCk7DQpCRkQwMTY1NCAgMzA5Njc3RTggICBKQUxTIHBydkluaXRpYWxpc2VUYXNrTGlzdHMKQkZEMDE2NTYgIDBDMDAzMDk2ICAgQURESVUgQTAsIFM2LCAzMDcyCkJGRDAxNjU4ICAgICAgMEMwMCAgIE5PUApCRkQwMTY1QSAgICAgIENDMTIgICBCIDB4QkZEMDE2ODAKQkZEMDE2NUMgICAgICAwQzAwICAgTk9QCjY2NjogICAgICAgICAgICAgICAgIAkJCQl9DQo2Njc6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNjY4OiAgICAgICAgICAgICAgICAgCQkJCXsNCjY2OTogICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjcwOiAgICAgICAgICAgICAgICAgCQkJCX0NCjY3MTogICAgICAgICAgICAgICAgIAkJCX0NCjY3MjogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjY3MzogICAgICAgICAgICAgICAgIAkJCXsNCjY3NDogICAgICAgICAgICAgICAgIAkJCQkvKiBJZiB0aGUgc2NoZWR1bGVyIGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIG1ha2UgdGhpcyB0YXNrIHRoZQ0KNjc1OiAgICAgICAgICAgICAgICAgCQkJCWN1cnJlbnQgdGFzayBpZiBpdCBpcyB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRvIGJlIGNyZWF0ZWQNCjY3NjogICAgICAgICAgICAgICAgIAkJCQlzbyBmYXIuICovDQo2Nzc6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHhTY2hlZHVsZXJSdW5uaW5nID09IHBkRkFMU0UgKQ0KQkZEMDE2NUUgIDgwNDRGQzVDICAgTFcgVjAsIC0zMjcwMChHUCkKQkZEMDE2NjIgIDAwMEQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE2ODAKNjc4OiAgICAgICAgICAgICAgICAgCQkJCXsNCjY3OTogICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSA8PSB1eFByaW9yaXR5ICkNCkJGRDAxNjY2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAxNjZBICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDE2NkMgIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQpCRkQwMTY3MCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDE2NzIgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDAxNjc0ICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxNjgwCjY4MDogICAgICAgICAgICAgICAgIAkJCQkJew0KNjgxOiAgICAgICAgICAgICAgICAgCQkJCQkJcHhDdXJyZW50VENCID0gcHhOZXdUQ0I7DQpCRkQwMTY3OCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAxNjdDICA4MDMwRjg1QyAgIFNXIFYwLCAtMzI3MjAoR1ApCjY4MjogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNjgzOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQo2ODQ6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjY4NTogICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjY4NjogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNjg3OiAgICAgICAgICAgICAgICAgCQkJCX0NCjY4ODogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo2ODk6ICAgICAgICAgICAgICAgICAJCQkJew0KNjkwOiAgICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo2OTE6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNjkyOiAgICAgICAgICAgICAgICAgCQkJfQ0KNjkzOiAgICAgICAgICAgICAgICAgDQo2OTQ6ICAgICAgICAgICAgICAgICAJCQl1eFRhc2tOdW1iZXIrKzsNCkJGRDAxNjgwICA4MDU0RkM1QyAgIExXIFYwLCAtMzI2ODQoR1ApCkJGRDAxNjg0ICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQpCRkQwMTY4NiAgODA1NEY4NUMgICBTVyBWMCwgLTMyNjg0KEdQKQo2OTU6ICAgICAgICAgICAgICAgICANCjY5NjogICAgICAgICAgICAgICAgIAkJCSNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjY5NzogICAgICAgICAgICAgICAgIAkJCXsNCjY5ODogICAgICAgICAgICAgICAgIAkJCQkvKiBBZGQgYSBjb3VudGVyIGludG8gdGhlIFRDQiBmb3IgdHJhY2luZyBvbmx5LiAqLw0KNjk5OiAgICAgICAgICAgICAgICAgCQkJCXB4TmV3VENCLT51eFRDQk51bWJlciA9IHV4VGFza051bWJlcjsNCjcwMDogICAgICAgICAgICAgICAgIAkJCX0NCjcwMTogICAgICAgICAgICAgICAgIAkJCSNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjcwMjogICAgICAgICAgICAgICAgIAkJCXRyYWNlVEFTS19DUkVBVEUoIHB4TmV3VENCICk7DQo3MDM6ICAgICAgICAgICAgICAgICANCjcwNDogICAgICAgICAgICAgICAgIAkJCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhOZXdUQ0IgKTsNCkJGRDAxNjhBICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDE2OEUgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMTY5MCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMTY5MiAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjEKQkZEMDE2OTQgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkKQkZEMDE2OTYgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDE2OUEgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDE2OUMgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKQkZEMDE2QTAgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTZBNCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAxNkE2ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDE2QTggICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMTZBQSAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDE2QUMgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDE2QUUgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMTZCMCAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMTZCNCAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDE2QjYgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMTZCQSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDE2QkMgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDE2QkUgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDE2QzAgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwMTZDMiAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDE2QzQgICAgICAwQzAwICAgTk9QCjcwNTogICAgICAgICAgICAgICAgIA0KNzA2OiAgICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkUEFTUzsNCkJGRDAxNkM2ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxNkM4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKNzA3OiAgICAgICAgICAgICAgICAgCQkJcG9ydFNFVFVQX1RDQiggcHhOZXdUQ0IgKTsNCjcwODogICAgICAgICAgICAgICAgIAkJfQ0KNzA5OiAgICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDE2Q0MgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMTZDRSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMkVEMgpCRkQwMTZEMCAgICAgIDBDMDAgICBOT1AKQkZEMDE2RDIgICAgICBDQzA0ICAgQiAweEJGRDAxNkRDCkJGRDAxNkQ0ICAgICAgMEMwMCAgIE5PUAo3MTA6ICAgICAgICAgICAgICAgICAJfQ0KNzExOiAgICAgICAgICAgICAgICAgCWVsc2UNCjcxMjogICAgICAgICAgICAgICAgIAl7DQo3MTM6ICAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBlcnJDT1VMRF9OT1RfQUxMT0NBVEVfUkVRVUlSRURfTUVNT1JZOw0KQkZEMDE2RDYgICAgICBFRDdGICAgTEkgVjAsIC0xCkJGRDAxNkQ4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKNzE0OiAgICAgICAgICAgICAgICAgCQl0cmFjZVRBU0tfQ1JFQVRFX0ZBSUxFRCgpOw0KNzE1OiAgICAgICAgICAgICAgICAgCX0NCjcxNjogICAgICAgICAgICAgICAgIA0KNzE3OiAgICAgICAgICAgICAgICAgCWlmKCB4UmV0dXJuID09IHBkUEFTUyApDQpCRkQwMTZEQyAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDAxNkUwICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxNkUyICAwMDFFQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDE3MjIKQkZEMDE2RTQgIDBDMDAwMDFFICAgU0xMIFpFUk8sIFM4LCAxCkJGRDAxNkU2ICAgICAgMEMwMCAgIE5PUAo3MTg6ICAgICAgICAgICAgICAgICAJew0KNzE5OiAgICAgICAgICAgICAgICAgCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQpCRkQwMTZFOCAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQpCRkQwMTZFQyAgMDAxOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTcyMgo3MjA6ICAgICAgICAgICAgICAgICAJCXsNCjcyMTogICAgICAgICAgICAgICAgIAkJCS8qIElmIHRoZSBjcmVhdGVkIHRhc2sgaXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgY3VycmVudCB0YXNrDQo3MjI6ICAgICAgICAgICAgICAgICAJCQl0aGVuIGl0IHNob3VsZCBydW4gbm93LiAqLw0KNzIzOiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSA8IHV4UHJpb3JpdHkgKQ0KQkZEMDE2RjAgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDE2RjQgICAgICA2OUFCICAgTFcgVjEsIDQ0KFYwKQpCRkQwMTZGNiAgMDA0MEZDNUUgICBMVyBWMCwgNjQoUzgpCkJGRDAxNkZBICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwMTZGQyAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTAKQkZEMDE2RkUgIDAwMTA0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE3MjIKNzI0OiAgICAgICAgICAgICAgICAgCQkJew0KNzI1OiAgICAgICAgICAgICAgICAgCQkJCXRhc2tZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMTcwMiAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDAxNzA0ICAgICAgNEU1NiAgIEFERElVIFMyLCBTMiwgLTUKQkZEMDE3MDYgICAgICAwQzAwICAgTk9QCkJGRDAxNzA4ICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkKQkZEMDE3MEMgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwMTcxMCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDE3MTQgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQpCRkQwMTcxOCAgMDAyNEZDOUUgICBMVyBBMCwgMzYoUzgpCkJGRDAxNzFDICA0RTY2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQpCRkQwMTcxRSAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMKQkZEMDE3MjAgICAgICAwQzAwICAgTk9QCjcyNjogICAgICAgICAgICAgICAgIAkJCX0NCjcyNzogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjcyODogICAgICAgICAgICAgICAgIAkJCXsNCjcyOTogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo3MzA6ICAgICAgICAgICAgICAgICAJCQl9DQo3MzE6ICAgICAgICAgICAgICAgICAJCX0NCjczMjogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNzMzOiAgICAgICAgICAgICAgICAgCQl7DQo3MzQ6ICAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo3MzU6ICAgICAgICAgICAgICAgICAJCX0NCjczNjogICAgICAgICAgICAgICAgIAl9DQo3Mzc6ICAgICAgICAgICAgICAgICANCjczODogICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDAxNzIyICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKNzM5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDE3MjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDE3MjggICAgICA0QkVCICAgTFcgUkEsIDQ0KFNQKQpCRkQwMTcyQSAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApCkJGRDAxNzJDICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgKQkZEMDE3MkUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMTczMCAgICAgIDBDMDAgICBOT1AKNzQwOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo3NDE6ICAgICAgICAgICAgICAgICANCjc0MjogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tEZWxldGUgPT0gMSApDQo3NDM6ICAgICAgICAgICAgICAgICANCjc0NDogICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrRGVsZXRlKCBUYXNrSGFuZGxlX3QgeFRhc2tUb0RlbGV0ZSApDQo3NDU6ICAgICAgICAgICAgICAgICAJew0KQkZEMDMzRjQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDMzRjYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwMzNGOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDAzM0ZBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAzM0ZDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKNzQ2OiAgICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjc0NzogICAgICAgICAgICAgICAgIA0KNzQ4OiAgICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzNDAwICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAzNDAyICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMzQwNCAgICAgIDBDMDAgICBOT1AKNzQ5OiAgICAgICAgICAgICAgICAgCQl7DQo3NTA6ICAgICAgICAgICAgICAgICAJCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gaXQgaXMgdGhlIGNhbGxpbmcgdGFzayB0aGF0IGlzDQo3NTE6ICAgICAgICAgICAgICAgICAJCQliZWluZyBkZWxldGVkLiAqLw0KNzUyOiAgICAgICAgICAgICAgICAgCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFza1RvRGVsZXRlICk7DQpCRkQwMzQwNiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAzNDBBICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzNDE2CkJGRDAzNDBFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAzNDEyICAgICAgQ0MwMyAgIEIgMHhCRkQwMzQxQQpCRkQwMzQxNCAgICAgIDBDMDAgICBOT1AKQkZEMDM0MTYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMzQxQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjc1MzogICAgICAgICAgICAgICAgIA0KNzU0OiAgICAgICAgICAgICAgICAgCQkJLyogUmVtb3ZlIHRhc2sgZnJvbSB0aGUgcmVhZHkgbGlzdCBhbmQgcGxhY2UgaW4gdGhlCXRlcm1pbmF0aW9uIGxpc3QuDQo3NTU6ICAgICAgICAgICAgICAgICAJCQlUaGlzIHdpbGwgc3RvcCB0aGUgdGFzayBmcm9tIGJlIHNjaGVkdWxlZC4gIFRoZSBpZGxlIHRhc2sgd2lsbCBjaGVjaw0KNzU2OiAgICAgICAgICAgICAgICAgCQkJdGhlIHRlcm1pbmF0aW9uIGxpc3QgYW5kIGZyZWUgdXAgYW55IG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlDQo3NTc6ICAgICAgICAgICAgICAgICAJCQlzY2hlZHVsZXIgZm9yIHRoZSBUQ0IgYW5kIHN0YWNrLiAqLw0KNzU4OiAgICAgICAgICAgICAgICAgCQkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAzNDFFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM0MjIgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDAzNDI0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAzNDI2ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDAzNDI4ICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDM0MkEgICAgICAwQzAwICAgTk9QCkJGRDAzNDJDICAwMDFBNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzNDY0Cjc1OTogICAgICAgICAgICAgICAgIAkJCXsNCjc2MDogICAgICAgICAgICAgICAgIAkJCQl0YXNrUkVTRVRfUkVBRFlfUFJJT1JJVFkoIHB4VENCLT51eFByaW9yaXR5ICk7DQpCRkQwMzQzMCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNDM0ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDM0MzYgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMzQzOCAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDAzNDNBICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQpCRkQwMzQzQyAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMzQzRSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAzNDQwICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwCkJGRDAzNDQ0ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwMzQ0NiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDM0NDggIDAwMEM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDM0NjQKQkZEMDM0NEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzQ1MCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAzNDUyICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAzNDU0ICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQpCRkQwMzQ1NiAgNDQxQTEwMTAgICBBRERJIFpFUk8sIFMwLCAxNzQzNApCRkQwMzQ1OCAgICAgIDQ0MUEgICBOT1QxNiBWMSwgVjAKQkZEMDM0NUEgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDM0NUUgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDAzNDYwICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApCjc2MTogICAgICAgICAgICAgICAgIAkJCX0NCjc2MjogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjc2MzogICAgICAgICAgICAgICAgIAkJCXsNCjc2NDogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo3NjU6ICAgICAgICAgICAgICAgICAJCQl9DQo3NjY6ICAgICAgICAgICAgICAgICANCjc2NzogICAgICAgICAgICAgICAgIAkJCS8qIElzIHRoZSB0YXNrIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gKi8NCjc2ODogICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0TElTVF9JVEVNX0NPTlRBSU5FUiggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKSAhPSBOVUxMICkNCkJGRDAzNDY0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM0NjggICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQpCRkQwMzQ2QSAgMDAwNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzQ3Qwo3Njk6ICAgICAgICAgICAgICAgICAJCQl7DQo3NzA6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDM0NkUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzQ3MCAgNkQyQzAwMTAgICBFWFQgWkVSTywgUzAsIDIwLCAxNApCRkQwMzQ3MiAgICAgIDZEMkMgICBBRERJVSBWMCwgVjAsIDI0CkJGRDAzNDc0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAzNDc2ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDAzNDc4ICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDM0N0EgICAgICAwQzAwICAgTk9QCjc3MTogICAgICAgICAgICAgICAgIAkJCX0NCjc3MjogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjc3MzogICAgICAgICAgICAgICAgIAkJCXsNCjc3NDogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo3NzU6ICAgICAgICAgICAgICAgICAJCQl9DQo3NzY6ICAgICAgICAgICAgICAgICANCjc3NzogICAgICAgICAgICAgICAgIAkJCXZMaXN0SW5zZXJ0RW5kKCAmeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwMzQ3QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNDgwICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMzQ4MiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMzQ4NCAgMzA4M0JGRDIgICBMREMxIEYzMCwgMTI0MTkoUzIpCkJGRDAzNDg2ICA4MTBDMzA4MyAgIEFERElVIEEwLCBWMSwgLTMyNTAwCkJGRDAzNDhBICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDAzNDhDICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQKQkZEMDM0OEUgIDBDMDAzRTRBICAgTEggUzIsIDMwNzIoVDIpCkJGRDAzNDkwICAgICAgMEMwMCAgIE5PUAo3Nzg6ICAgICAgICAgICAgICAgICANCjc3OTogICAgICAgICAgICAgICAgIAkJCS8qIEluY3JlbWVudCB0aGUgdWNUYXNrc0RlbGV0ZWQgdmFyaWFibGUgc28gdGhlIGlkbGUgdGFzayBrbm93cw0KNzgwOiAgICAgICAgICAgICAgICAgCQkJdGhlcmUgaXMgYSB0YXNrIHRoYXQgaGFzIGJlZW4gZGVsZXRlZCBhbmQgdGhhdCBpdCBzaG91bGQgdGhlcmVmb3JlDQo3ODE6ICAgICAgICAgICAgICAgICAJCQljaGVjayB0aGUgeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uIGxpc3QuICovDQo3ODI6ICAgICAgICAgICAgICAgICAJCQkrK3V4VGFza3NEZWxldGVkOw0KQkZEMDM0OTIgIDgwMzRGQzVDICAgTFcgVjAsIC0zMjcxNihHUCkKQkZEMDM0OTYgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxCkJGRDAzNDk4ICA4MDM0Rjg1QyAgIFNXIFYwLCAtMzI3MTYoR1ApCjc4MzogICAgICAgICAgICAgICAgIA0KNzg0OiAgICAgICAgICAgICAgICAgCQkJLyogSW5jcmVtZW50IHRoZSB1eFRhc2tOdW1iZXJWYXJpYWJsZSBhbHNvIHNvIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMNCjc4NTogICAgICAgICAgICAgICAgIAkJCWNhbiBkZXRlY3QgdGhhdCB0aGUgdGFzayBsaXN0cyBuZWVkIHJlLWdlbmVyYXRpbmcuICovDQo3ODY6ICAgICAgICAgICAgICAgICAJCQl1eFRhc2tOdW1iZXIrKzsNCkJGRDAzNDlDICA4MDU0RkM1QyAgIExXIFYwLCAtMzI2ODQoR1ApCkJGRDAzNEEwICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQpCRkQwMzRBMiAgODA1NEY4NUMgICBTVyBWMCwgLTMyNjg0KEdQKQo3ODc6ICAgICAgICAgICAgICAgICANCjc4ODogICAgICAgICAgICAgICAgIAkJCXRyYWNlVEFTS19ERUxFVEUoIHB4VENCICk7DQo3ODk6ICAgICAgICAgICAgICAgICAJCX0NCjc5MDogICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAzNEE2ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDM0QTggIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDRDQUMKQkZEMDM0QUEgICAgICAwQzAwICAgTk9QCjc5MTogICAgICAgICAgICAgICAgIA0KNzkyOiAgICAgICAgICAgICAgICAgCQkvKiBGb3JjZSBhIHJlc2NoZWR1bGUgaWYgaXQgaXMgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgdGhhdCBoYXMganVzdA0KNzkzOiAgICAgICAgICAgICAgICAgCQliZWVuIGRlbGV0ZWQuICovDQo3OTQ6ICAgICAgICAgICAgICAgICAJCWlmKCB4U2NoZWR1bGVyUnVubmluZyAhPSBwZEZBTFNFICkNCkJGRDAzNEFDICA4MDQ0RkM1QyAgIExXIFYwLCAtMzI3MDAoR1ApCkJGRDAzNEIwICAwMDJGNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNTEyCjc5NTogICAgICAgICAgICAgICAgIAkJew0KNzk2OiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4VENCID09IHB4Q3VycmVudFRDQiApDQpCRkQwMzRCNCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMzRCOCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAzNEJDICAwMDIwQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDM1MDAKQkZEMDM0QkUgIDBDMDAwMDIwICAgU0xMIEFULCBaRVJPLCAxCkJGRDAzNEMwICAgICAgMEMwMCAgIE5PUAo3OTc6ICAgICAgICAgICAgICAgICAJCQl7DQo3OTg6ICAgICAgICAgICAgICAgICAJCQkJY29uZmlnQVNTRVJUKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAwICk7DQpCRkQwMzRDMiAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQpCRkQwMzRDNiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzREQwpCRkQwMzRDQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMzRDQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAzNENFICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAzNEQwICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMzREMiAgMDMxRTMwQTAgICBBRERJVSBBMSwgWkVSTywgNzk4CkJGRDAzNEQ2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMzREOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMzREQSAgICAgIDBDMDAgICBOT1AKNzk5OiAgICAgICAgICAgICAgICAgDQo4MDA6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHByZS1kZWxldGUgaG9vayBpcyBwcmltYXJpbHkgZm9yIHRoZSBXaW5kb3dzIHNpbXVsYXRvciwNCjgwMTogICAgICAgICAgICAgICAgIAkJCQlpbiB3aGljaCBXaW5kb3dzIHNwZWNpZmljIGNsZWFuIHVwIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwNCjgwMjogICAgICAgICAgICAgICAgIAkJCQlhZnRlciB3aGljaCBpdCBpcyBub3QgcG9zc2libGUgdG8geWllbGQgYXdheSBmcm9tIHRoaXMgdGFzayAtDQo4MDM6ICAgICAgICAgICAgICAgICAJCQkJaGVuY2UgeFlpZWxkUGVuZGluZyBpcyB1c2VkIHRvIGxhdGNoIHRoYXQgYSBjb250ZXh0IHN3aXRjaCBpcw0KODA0OiAgICAgICAgICAgICAgICAgCQkJCXJlcXVpcmVkLiAqLw0KODA1OiAgICAgICAgICAgICAgICAgCQkJCXBvcnRQUkVfVEFTS19ERUxFVEVfSE9PSyggcHhUQ0IsICZ4WWllbGRQZW5kaW5nICk7DQo4MDY6ICAgICAgICAgICAgICAgICAJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDAzNERDICA0RTU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDM0REUgICAgICA0RTU2ICAgQURESVUgUzIsIFMyLCAtNQpCRkQwMzRFMCAgICAgIDBDMDAgICBOT1AKQkZEMDM0RTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQpCRkQwMzRFNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAzNEVBICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwMzRFRSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCkJGRDAzNEYyICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDM0RjYgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDAzNEY4ICAgICAgNEU2NiAgIEFERElVIFMzLCBTMywgMwpCRkQwMzRGQSAgICAgIDBDMDAgICBOT1AKQkZEMDM0RkMgICAgICBDQzBBICAgQiAweEJGRDAzNTEyCkJGRDAzNEZFICAgICAgMEMwMCAgIE5PUAo4MDc6ICAgICAgICAgICAgICAgICAJCQl9DQo4MDg6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo4MDk6ICAgICAgICAgICAgICAgICAJCQl7DQo4MTA6ICAgICAgICAgICAgICAgICAJCQkJLyogUmVzZXQgdGhlIG5leHQgZXhwZWN0ZWQgdW5ibG9jayB0aW1lIGluIGNhc2UgaXQgcmVmZXJyZWQgdG8NCjgxMTogICAgICAgICAgICAgICAgIAkJCQl0aGUgdGFzayB0aGF0IGhhcyBqdXN0IGJlZW4gZGVsZXRlZC4gKi8NCjgxMjogICAgICAgICAgICAgICAgIAkJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzNTAwICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAzNTAyICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMzUwNCAgICAgIDBDMDAgICBOT1AKODEzOiAgICAgICAgICAgICAgICAgCQkJCXsNCjgxNDogICAgICAgICAgICAgICAgIAkJCQkJcHJ2UmVzZXROZXh0VGFza1VuYmxvY2tUaW1lKCk7DQpCRkQwMzUwNiAgNDdDQTc3RTggICBKQUxTIHBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZQpCRkQwMzUwQSAgICAgIDBDMDAgICBOT1AKODE1OiAgICAgICAgICAgICAgICAgCQkJCX0NCjgxNjogICAgICAgICAgICAgICAgIAkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDM1MEMgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMzUwRSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNEQxMgpCRkQwMzUxMCAgICAgIDBDMDAgICBOT1AKODE3OiAgICAgICAgICAgICAgICAgCQkJfQ0KODE4OiAgICAgICAgICAgICAgICAgCQl9DQo4MTk6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDM1MTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDM1MTQgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwMzUxNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDAzNTE4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDM1MUEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMzUxQyAgICAgIDBDMDAgICBOT1AKODIwOiAgICAgICAgICAgICAgICAgDQo4MjE6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV92VGFza0RlbGV0ZSAqLw0KODIyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4MjM6ICAgICAgICAgICAgICAgICANCjgyNDogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tEZWxheVVudGlsID09IDEgKQ0KODI1OiAgICAgICAgICAgICAgICAgDQo4MjY6ICAgICAgICAgICAgICAgICAJdm9pZCB2VGFza0RlbGF5VW50aWwoIFRpY2tUeXBlX3QgKiBjb25zdCBweFByZXZpb3VzV2FrZVRpbWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVJbmNyZW1lbnQgKQ0KODI3OiAgICAgICAgICAgICAgICAgCXsNCkJGRDAwMDA4ICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4CkJGRDAwMDBBICAgICAgQ0JFQiAgIFNXIFJBLCA0NChTUCkKQkZEMDAwMEMgICAgICBDQkNBICAgU1cgUzgsIDQwKFNQKQpCRkQwMDAwRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMDAxMCAgMDAzMEY4OUUgICBTVyBBMCwgNDgoUzgpCkJGRDAwMDE0ICAwMDM0RjhCRSAgIFNXIEExLCA1MihTOCkKODI4OiAgICAgICAgICAgICAgICAgCVRpY2tUeXBlX3QgeFRpbWVUb1dha2U7DQo4Mjk6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4QWxyZWFkeVlpZWxkZWQsIHhTaG91bGREZWxheSA9IHBkRkFMU0U7DQpCRkQwMDAxOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKODMwOiAgICAgICAgICAgICAgICAgDQo4MzE6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggcHhQcmV2aW91c1dha2VUaW1lICk7DQpCRkQwMDAxQyAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAwMDIwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAwMDM2CkJGRDAwMDI0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAwMDI2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDAwMjggIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDAwMkEgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDAwMDJDICAwMzNGMzBBMCAgIEFERElVIEExLCBaRVJPLCA4MzEKQkZEMDAwMzAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAwMDMyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAwMDM0ICAgICAgMEMwMCAgIE5PUAo4MzI6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggKCB4VGltZUluY3JlbWVudCA+IDBVICkgKTsNCkJGRDAwMDM2ICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkKQkZEMDAwM0EgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDAwNTAKQkZEMDAwM0UgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDAwNDAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMDA0MiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwMDA0NCAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDAwNDYgIDAzNDAzMEEwICAgQURESVUgQTEsIFpFUk8sIDgzMgpCRkQwMDA0QSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDAwNEMgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDAwNEUgICAgICAwQzAwICAgTk9QCjgzMzogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAwICk7DQpCRkQwMDA1MCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQpCRkQwMDA1NCAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMDA2QQpCRkQwMDA1OCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMDA1QSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAwMDVDICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAwMDVFICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMDA2MCAgMDM0MTMwQTAgICBBRERJVSBBMSwgWkVSTywgODMzCkJGRDAwMDY0ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMDA2NiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMDA2OCAgICAgIDBDMDAgICBOT1AKODM0OiAgICAgICAgICAgICAgICAgDQo4MzU6ICAgICAgICAgICAgICAgICAJCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDAwNkEgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwKQkZEMDAwNkMgICAgICA0RUY0ICAgQURESVUgUzcsIFM3LCAtNgpCRkQwMDA2RSAgICAgIDBDMDAgICBOT1AKODM2OiAgICAgICAgICAgICAgICAgCQl7DQo4Mzc6ICAgICAgICAgICAgICAgICAJCQkvKiBNaW5vciBvcHRpbWlzYXRpb24uICBUaGUgdGljayBjb3VudCBjYW5ub3QgY2hhbmdlIGluIHRoaXMNCjgzODogICAgICAgICAgICAgICAgIAkJCWJsb2NrLiAqLw0KODM5OiAgICAgICAgICAgICAgICAgCQkJY29uc3QgVGlja1R5cGVfdCB4Q29uc3RUaWNrQ291bnQgPSB4VGlja0NvdW50Ow0KQkZEMDAwNzAgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkKQkZEMDAwNzQgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo4NDA6ICAgICAgICAgICAgICAgICANCjg0MTogICAgICAgICAgICAgICAgIAkJCS8qIEdlbmVyYXRlIHRoZSB0aWNrIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgd2FudHMgdG8gd2FrZS4gKi8NCjg0MjogICAgICAgICAgICAgICAgIAkJCXhUaW1lVG9XYWtlID0gKnB4UHJldmlvdXNXYWtlVGltZSArIHhUaW1lSW5jcmVtZW50Ow0KQkZEMDAwNzggIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMDA3QyAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkKQkZEMDAwN0UgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQpCRkQwMDA4MiAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDAwODQgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQo4NDM6ICAgICAgICAgICAgICAgICANCjg0NDogICAgICAgICAgICAgICAgIAkJCWlmKCB4Q29uc3RUaWNrQ291bnQgPCAqcHhQcmV2aW91c1dha2VUaW1lICkNCkJGRDAwMDg4ICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDAwOEMgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAwMDhFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDAwOTIgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxCkJGRDAwMDk0ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwMDA5NiAgMDAxNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMDBDNgo4NDU6ICAgICAgICAgICAgICAgICAJCQl7DQo4NDY6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRpY2sgY291bnQgaGFzIG92ZXJmbG93ZWQgc2luY2UgdGhpcyBmdW5jdGlvbiB3YXMNCjg0NzogICAgICAgICAgICAgICAgIAkJCQlsYXN0ZWQgY2FsbGVkLiAgSW4gdGhpcyBjYXNlIHRoZSBvbmx5IHRpbWUgd2Ugc2hvdWxkIGV2ZXINCjg0ODogICAgICAgICAgICAgICAgIAkJCQlhY3R1YWxseSBkZWxheSBpcyBpZiB0aGUgd2FrZSB0aW1lIGhhcyBhbHNvCW92ZXJmbG93ZWQsDQo4NDk6ICAgICAgICAgICAgICAgICAJCQkJYW5kIHRoZSB3YWtlIHRpbWUgaXMgZ3JlYXRlciB0aGFuIHRoZSB0aWNrIHRpbWUuICBXaGVuIHRoaXMNCjg1MDogICAgICAgICAgICAgICAgIAkJCQlpcyB0aGUgY2FzZSBpdCBpcyBhcyBpZiBuZWl0aGVyIHRpbWUgaGFkIG92ZXJmbG93ZWQuICovDQo4NTE6ICAgICAgICAgICAgICAgICAJCQkJaWYoICggeFRpbWVUb1dha2UgPCAqcHhQcmV2aW91c1dha2VUaW1lICkgJiYgKCB4VGltZVRvV2FrZSA+IHhDb25zdFRpY2tDb3VudCApICkNCkJGRDAwMDlBICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDAwOUUgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAwMEEwICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDAwQTQgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxCkJGRDAwMEE2ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwMDBBOCAgMDAyMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMDBFRQpCRkQwMDBBQyAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDAwMEIwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDAwQjQgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxCkJGRDAwMEI2ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwMDBCOCAgMDAxOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMDBFRQo4NTI6ICAgICAgICAgICAgICAgICAJCQkJew0KODUzOiAgICAgICAgICAgICAgICAgCQkJCQl4U2hvdWxkRGVsYXkgPSBwZFRSVUU7DQpCRkQwMDBCQyAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMDBCRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDAwMEMyICAgICAgQ0MxNSAgIEIgMHhCRkQwMDBFRQpCRkQwMDBDNCAgICAgIDBDMDAgICBOT1AKODU0OiAgICAgICAgICAgICAgICAgCQkJCX0NCjg1NTogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo4NTY6ICAgICAgICAgICAgICAgICAJCQkJew0KODU3OiAgICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo4NTg6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODU5OiAgICAgICAgICAgICAgICAgCQkJfQ0KODYwOiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KODYxOiAgICAgICAgICAgICAgICAgCQkJew0KODYyOiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoZSB0aWNrIHRpbWUgaGFzIG5vdCBvdmVyZmxvd2VkLiAgSW4gdGhpcyBjYXNlIHdlIHdpbGwNCjg2MzogICAgICAgICAgICAgICAgIAkJCQlkZWxheSBpZiBlaXRoZXIgdGhlIHdha2UgdGltZSBoYXMgb3ZlcmZsb3dlZCwgYW5kL29yIHRoZQ0KODY0OiAgICAgICAgICAgICAgICAgCQkJCXRpY2sgdGltZSBpcyBsZXNzIHRoYW4gdGhlIHdha2UgdGltZS4gKi8NCjg2NTogICAgICAgICAgICAgICAgIAkJCQlpZiggKCB4VGltZVRvV2FrZSA8ICpweFByZXZpb3VzV2FrZVRpbWUgKSB8fCAoIHhUaW1lVG9XYWtlID4geENvbnN0VGlja0NvdW50ICkgKQ0KQkZEMDAwQzYgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMDBDQSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkKQkZEMDAwQ0MgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwMDBEMCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDAwRDIgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDAwMEQ0ICAwMDA4NDBBMiAgIEJORVpDIFYwLCAweEJGRDAwMEU4CkJGRDAwMEQ4ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkKQkZEMDAwREMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMDBFMCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDAwRTIgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDAwMEU0ICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAwMEVFCjg2NjogICAgICAgICAgICAgICAgIAkJCQl7DQo4Njc6ICAgICAgICAgICAgICAgICAJCQkJCXhTaG91bGREZWxheSA9IHBkVFJVRTsNCkJGRDAwMEU4ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAwMEVBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKODY4OiAgICAgICAgICAgICAgICAgCQkJCX0NCjg2OTogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo4NzA6ICAgICAgICAgICAgICAgICAJCQkJew0KODcxOiAgICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo4NzI6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODczOiAgICAgICAgICAgICAgICAgCQkJfQ0KODc0OiAgICAgICAgICAgICAgICAgDQo4NzU6ICAgICAgICAgICAgICAgICAJCQkvKiBVcGRhdGUgdGhlIHdha2UgdGltZSByZWFkeSBmb3IgdGhlIG5leHQgY2FsbC4gKi8NCjg3NjogICAgICAgICAgICAgICAgIAkJCSpweFByZXZpb3VzV2FrZVRpbWUgPSB4VGltZVRvV2FrZTsNCkJGRDAwMEVFICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDAwRjIgIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQpCRkQwMDBGNiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKODc3OiAgICAgICAgICAgICAgICAgDQo4Nzg6ICAgICAgICAgICAgICAgICAJCQlpZiggeFNob3VsZERlbGF5ICE9IHBkRkFMU0UgKQ0KQkZEMDAwRjggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMDBGQyAgMDAxQTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMDEzNAo4Nzk6ICAgICAgICAgICAgICAgICAJCQl7DQo4ODA6ICAgICAgICAgICAgICAgICAJCQkJdHJhY2VUQVNLX0RFTEFZX1VOVElMKCk7DQo4ODE6ICAgICAgICAgICAgICAgICANCjg4MjogICAgICAgICAgICAgICAgIAkJCQkvKiBSZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgcmVhZHkgbGlzdCBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZQ0KODgzOiAgICAgICAgICAgICAgICAgCQkJCWJsb2NrZWQgbGlzdCBhcyB0aGUgc2FtZSBsaXN0IGl0ZW0gaXMgdXNlZCBmb3IgYm90aCBsaXN0cy4gKi8NCjg4NDogICAgICAgICAgICAgICAgIAkJCQlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAwMTAwICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAwMTA0ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMDEwNiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMDEwOCAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMDEwQSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAwMTBDICAgICAgMEMwMCAgIE5PUApCRkQwMDEwRSAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMDEyQQo4ODU6ICAgICAgICAgICAgICAgICAJCQkJew0KODg2OiAgICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgY3VycmVudCB0YXNrIG11c3QgYmUgaW4gYSByZWFkeSBsaXN0LCBzbyB0aGVyZSBpcw0KODg3OiAgICAgICAgICAgICAgICAgCQkJCQlubyBuZWVkIHRvIGNoZWNrLCBhbmQgdGhlIHBvcnQgcmVzZXQgbWFjcm8gY2FuIGJlIGNhbGxlZA0KODg4OiAgICAgICAgICAgICAgICAgCQkJCQlkaXJlY3RseS4gKi8NCjg4OTogICAgICAgICAgICAgICAgIAkJCQkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDAxMTIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDAxMTYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMDExOCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMDExQSAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjEKQkZEMDAxMUMgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQKQkZEMDAxMUUgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwCkJGRDAwMTIwICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApCkJGRDAwMTI0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwMDEyNiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQo4OTA6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODkxOiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjg5MjogICAgICAgICAgICAgICAgIAkJCQl7DQo4OTM6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjg5NDogICAgICAgICAgICAgICAgIAkJCQl9DQo4OTU6ICAgICAgICAgICAgICAgICANCjg5NjogICAgICAgICAgICAgICAgIAkJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQpCRkQwMDEyQSAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDAwMTJFICAzNzM0NzdFOCAgIEpBTFMgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0CkJGRDAwMTMwICAwQzAwMzczNCAgIExIVSBUOSwgMzA3MihTNCkKQkZEMDAxMzIgICAgICAwQzAwICAgTk9QCjg5NzogICAgICAgICAgICAgICAgIAkJCX0NCjg5ODogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjg5OTogICAgICAgICAgICAgICAgIAkJCXsNCjkwMDogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo5MDE6ICAgICAgICAgICAgICAgICAJCQl9DQo5MDI6ICAgICAgICAgICAgICAgICAJCX0NCjkwMzogICAgICAgICAgICAgICAgIAkJeEFscmVhZHlZaWVsZGVkID0geFRhc2tSZXN1bWVBbGwoKTsNCkJGRDAwMTM0ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDAxMzYgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwMDEzOCAgICAgIDBDMDAgICBOT1AKQkZEMDAxM0EgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo5MDQ6ICAgICAgICAgICAgICAgICANCjkwNTogICAgICAgICAgICAgICAgIAkJLyogRm9yY2UgYSByZXNjaGVkdWxlIGlmIHhUYXNrUmVzdW1lQWxsIGhhcyBub3QgYWxyZWFkeSBkb25lIHNvLCB3ZSBtYXkNCjkwNjogICAgICAgICAgICAgICAgIAkJaGF2ZSBwdXQgb3Vyc2VsdmVzIHRvIHNsZWVwLiAqLw0KOTA3OiAgICAgICAgICAgICAgICAgCQlpZiggeEFscmVhZHlZaWVsZGVkID09IHBkRkFMU0UgKQ0KQkZEMDAxM0UgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMDE0MiAgMDAxMDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMDE2Ngo5MDg6ICAgICAgICAgICAgICAgICAJCXsNCjkwOTogICAgICAgICAgICAgICAgIAkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQpCRkQwMDE0NiAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDAwMTQ4ICAgICAgNEU1NiAgIEFERElVIFMyLCBTMiwgLTUKQkZEMDAxNEEgICAgICAwQzAwICAgTk9QCkJGRDAwMTRDICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKQkZEMDAxNTAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMDE1NCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDAxNTggIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQpCRkQwMDE1QyAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDAwMTYwICA0RTY2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQpCRkQwMDE2MiAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMKQkZEMDAxNjQgICAgICAwQzAwICAgTk9QCjkxMDogICAgICAgICAgICAgICAgIAkJfQ0KOTExOiAgICAgICAgICAgICAgICAgCQllbHNlDQo5MTI6ICAgICAgICAgICAgICAgICAJCXsNCjkxMzogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjkxNDogICAgICAgICAgICAgICAgIAkJfQ0KOTE1OiAgICAgICAgICAgICAgICAgCX0NCkJGRDAwMTY2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAwMTY4ICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkKQkZEMDAxNkEgICAgICA0QkNBICAgTFcgUzgsIDQwKFNQKQpCRkQwMDE2QyAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4CkJGRDAwMTZFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDAxNzAgICAgICAwQzAwICAgTk9QCjkxNjogICAgICAgICAgICAgICAgIA0KOTE3OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tEZWxheVVudGlsICovDQo5MTg6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjkxOTogICAgICAgICAgICAgICAgIA0KOTIwOiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza0RlbGF5ID09IDEgKQ0KOTIxOiAgICAgICAgICAgICAgICAgDQo5MjI6ICAgICAgICAgICAgICAgICAJdm9pZCB2VGFza0RlbGF5KCBjb25zdCBUaWNrVHlwZV90IHhUaWNrc1RvRGVsYXkgKQ0KOTIzOiAgICAgICAgICAgICAgICAgCXsNCkJGRDA1QkEwICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwCkJGRDA1QkEyICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkKQkZEMDVCQTQgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQpCRkQwNUJBNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNUJBOCAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpCjkyNDogICAgICAgICAgICAgICAgIAlUaWNrVHlwZV90IHhUaW1lVG9XYWtlOw0KOTI1OiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeEFscmVhZHlZaWVsZGVkID0gcGRGQUxTRTsNCkJGRDA1QkFDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQo5MjY6ICAgICAgICAgICAgICAgICANCjkyNzogICAgICAgICAgICAgICAgIA0KOTI4OiAgICAgICAgICAgICAgICAgCQkvKiBBIGRlbGF5IHRpbWUgb2YgemVybyBqdXN0IGZvcmNlcyBhIHJlc2NoZWR1bGUuICovDQo5Mjk6ICAgICAgICAgICAgICAgICAJCWlmKCB4VGlja3NUb0RlbGF5ID4gKCBUaWNrVHlwZV90ICkgMFUgKQ0KQkZEMDVCQjAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwNUJCNCAgMDAzNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNUMyNAo5MzA6ICAgICAgICAgICAgICAgICAJCXsNCjkzMTogICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gMCApOw0KQkZEMDVCQjggIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkKQkZEMDVCQkMgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDVCRDIKQkZEMDVCQzAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDVCQzIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNUJDNCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwNUJDNiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDVCQzggIDAzQTMzMEEwICAgQURESVUgQTEsIFpFUk8sIDkzMQpCRkQwNUJDQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDVCQ0UgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDVCRDAgICAgICAwQzAwICAgTk9QCjkzMjogICAgICAgICAgICAgICAgIAkJCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDVCRDIgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwKQkZEMDVCRDQgICAgICA0RUY0ICAgQURESVUgUzcsIFM3LCAtNgpCRkQwNUJENiAgICAgIDBDMDAgICBOT1AKOTMzOiAgICAgICAgICAgICAgICAgCQkJew0KOTM0OiAgICAgICAgICAgICAgICAgCQkJCXRyYWNlVEFTS19ERUxBWSgpOw0KOTM1OiAgICAgICAgICAgICAgICAgDQo5MzY6ICAgICAgICAgICAgICAgICAJCQkJLyogQSB0YXNrIHRoYXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0IHdoaWxlIHRoZQ0KOTM3OiAgICAgICAgICAgICAgICAgCQkJCXNjaGVkdWxlciBpcyBzdXNwZW5kZWQgd2lsbCBub3QgZ2V0IHBsYWNlZCBpbiB0aGUgcmVhZHkNCjkzODogICAgICAgICAgICAgICAgIAkJCQlsaXN0IG9yIHJlbW92ZWQgZnJvbSB0aGUgYmxvY2tlZCBsaXN0IHVudGlsIHRoZSBzY2hlZHVsZXINCjkzOTogICAgICAgICAgICAgICAgIAkJCQlpcyByZXN1bWVkLg0KOTQwOiAgICAgICAgICAgICAgICAgDQo5NDE6ICAgICAgICAgICAgICAgICAJCQkJVGhpcyB0YXNrIGNhbm5vdCBiZSBpbiBhbiBldmVudCBsaXN0IGFzIGl0IGlzIHRoZSBjdXJyZW50bHkNCjk0MjogICAgICAgICAgICAgICAgIAkJCQlleGVjdXRpbmcgdGFzay4gKi8NCjk0MzogICAgICAgICAgICAgICAgIA0KOTQ0OiAgICAgICAgICAgICAgICAgCQkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSB0byB3YWtlIC0gdGhpcyBtYXkgb3ZlcmZsb3cgYnV0IHRoaXMgaXMNCjk0NTogICAgICAgICAgICAgICAgIAkJCQlub3QgYSBwcm9ibGVtLiAqLw0KOTQ2OiAgICAgICAgICAgICAgICAgCQkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvRGVsYXk7DQpCRkQwNUJEOCAgODAzQ0ZDN0MgICBMVyBWMSwgLTMyNzA4KEdQKQpCRkQwNUJEQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA1QkUwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNUJFMiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjk0NzogICAgICAgICAgICAgICAgIA0KOTQ4OiAgICAgICAgICAgICAgICAgCQkJCS8qIFdlIG11c3QgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSByZWFkeSBsaXN0IGJlZm9yZSBhZGRpbmcNCjk0OTogICAgICAgICAgICAgICAgIAkJCQlvdXJzZWx2ZXMgdG8gdGhlIGJsb2NrZWQgbGlzdCBhcyB0aGUgc2FtZSBsaXN0IGl0ZW0gaXMgdXNlZCBmb3INCjk1MDogICAgICAgICAgICAgICAgIAkJCQlib3RoIGxpc3RzLiAqLw0KOTUxOiAgICAgICAgICAgICAgICAgCQkJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDVCRTYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDVCRUEgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA1QkVDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA1QkVFICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDA1QkYwICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDVCRjIgICAgICAwQzAwICAgTk9QCkJGRDA1QkY0ICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1QzEwCjk1MjogICAgICAgICAgICAgICAgIAkJCQl7DQo5NTM6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBjdXJyZW50IHRhc2sgbXVzdCBiZSBpbiBhIHJlYWR5IGxpc3QsIHNvIHRoZXJlIGlzDQo5NTQ6ICAgICAgICAgICAgICAgICAJCQkJCW5vIG5lZWQgdG8gY2hlY2ssIGFuZCB0aGUgcG9ydCByZXNldCBtYWNybyBjYW4gYmUgY2FsbGVkDQo5NTU6ICAgICAgICAgICAgICAgICAJCQkJCWRpcmVjdGx5LiAqLw0KOTU2OiAgICAgICAgICAgICAgICAgCQkJCQlwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSwgdXhUb3BSZWFkeVByaW9yaXR5ICk7DQpCRkQwNUJGOCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNUJGQyAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDA1QkZFICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA1QzAwICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQpCRkQwNUMwMiAgNDQxQTEwMTAgICBBRERJIFpFUk8sIFMwLCAxNzQzNApCRkQwNUMwNCAgICAgIDQ0MUEgICBOT1QxNiBWMSwgVjAKQkZEMDVDMDYgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDVDMEEgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA1QzBDICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApCjk1NzogICAgICAgICAgICAgICAgIAkJCQl9DQo5NTg6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KOTU5OiAgICAgICAgICAgICAgICAgCQkJCXsNCjk2MDogICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTYxOiAgICAgICAgICAgICAgICAgCQkJCX0NCjk2MjogICAgICAgICAgICAgICAgIAkJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQpCRkQwNUMxMCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDA1QzE0ICAzNzM0NzdFOCAgIEpBTFMgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0CkJGRDA1QzE2ICAwQzAwMzczNCAgIExIVSBUOSwgMzA3MihTNCkKQkZEMDVDMTggICAgICAwQzAwICAgTk9QCjk2MzogICAgICAgICAgICAgICAgIAkJCX0NCjk2NDogICAgICAgICAgICAgICAgIAkJCXhBbHJlYWR5WWllbGRlZCA9IHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwNUMxQSAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsCkJGRDA1QzFDICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikKQkZEMDVDMUUgICAgICAwQzAwICAgTk9QCkJGRDA1QzIwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKOTY1OiAgICAgICAgICAgICAgICAgCQl9DQo5NjY6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjk2NzogICAgICAgICAgICAgICAgIAkJew0KOTY4OiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTY5OiAgICAgICAgICAgICAgICAgCQl9DQo5NzA6ICAgICAgICAgICAgICAgICANCjk3MTogICAgICAgICAgICAgICAgIAkJLyogRm9yY2UgYSByZXNjaGVkdWxlIGlmIHhUYXNrUmVzdW1lQWxsIGhhcyBub3QgYWxyZWFkeSBkb25lIHNvLCB3ZSBtYXkNCjk3MjogICAgICAgICAgICAgICAgIAkJaGF2ZSBwdXQgb3Vyc2VsdmVzIHRvIHNsZWVwLiAqLw0KOTczOiAgICAgICAgICAgICAgICAgCQlpZiggeEFscmVhZHlZaWVsZGVkID09IHBkRkFMU0UgKQ0KQkZEMDVDMjQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNUMyOCAgMDAxMDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUM0Qwo5NzQ6ICAgICAgICAgICAgICAgICAJCXsNCjk3NTogICAgICAgICAgICAgICAgIAkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQpCRkQwNUMyQyAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDA1QzJFICAgICAgNEU1NiAgIEFERElVIFMyLCBTMiwgLTUKQkZEMDVDMzAgICAgICAwQzAwICAgTk9QCkJGRDA1QzMyICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKQkZEMDVDMzYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNUMzQSAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDVDM0UgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQpCRkQwNUM0MiAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA1QzQ2ICA0RTY2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQpCRkQwNUM0OCAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMKQkZEMDVDNEEgICAgICAwQzAwICAgTk9QCjk3NjogICAgICAgICAgICAgICAgIAkJfQ0KOTc3OiAgICAgICAgICAgICAgICAgCQllbHNlDQo5Nzg6ICAgICAgICAgICAgICAgICAJCXsNCjk3OTogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjk4MDogICAgICAgICAgICAgICAgIAkJfQ0KOTgxOiAgICAgICAgICAgICAgICAgCX0NCkJGRDA1QzRDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA1QzRFICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDVDNTAgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwNUM1MiAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDA1QzU0ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDVDNTYgICAgICAwQzAwICAgTk9QCjk4MjogICAgICAgICAgICAgICAgIA0KOTgzOiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tEZWxheSAqLw0KOTg0OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo5ODU6ICAgICAgICAgICAgICAgICANCjk4NjogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfZVRhc2tHZXRTdGF0ZSA9PSAxICkNCjk4NzogICAgICAgICAgICAgICAgIA0KOTg4OiAgICAgICAgICAgICAgICAgCWVUYXNrU3RhdGUgZVRhc2tHZXRTdGF0ZSggVGFza0hhbmRsZV90IHhUYXNrICkNCjk4OTogICAgICAgICAgICAgICAgIAl7DQpCRkQwNDQ5NCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwNDQ5NiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDA0NDk4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDQ0OUEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDQ0OUMgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQo5OTA6ICAgICAgICAgICAgICAgICAJZVRhc2tTdGF0ZSBlUmV0dXJuOw0KOTkxOiAgICAgICAgICAgICAgICAgCUxpc3RfdCAqcHhTdGF0ZUxpc3Q7DQo5OTI6ICAgICAgICAgICAgICAgICAJY29uc3QgVENCX3QgKiBjb25zdCBweFRDQiA9ICggVENCX3QgKiApIHhUYXNrOw0KQkZEMDQ0QTAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwNDRBNCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjk5MzogICAgICAgICAgICAgICAgIA0KOTk0OiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4VENCICk7DQpCRkQwNDRBOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0NEFDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0NEMyCkJGRDA0NEIwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0NEIyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQ0QjQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDQ0QjYgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA0NEI4ICAwM0UyMzBBMCAgIEFERElVIEExLCBaRVJPLCA5OTQKQkZEMDQ0QkMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA0NEJFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA0NEMwICAgICAgMEMwMCAgIE5PUAo5OTU6ICAgICAgICAgICAgICAgICANCjk5NjogICAgICAgICAgICAgICAgIAkJaWYoIHB4VENCID09IHB4Q3VycmVudFRDQiApDQpCRkQwNDRDMiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNDRDNiAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDA0NENBICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDQ0RDgKQkZEMDQ0Q0MgIDBDMDAwMDA1ICAgU0xMIFpFUk8sIEExLCAxCkJGRDA0NENFICAgICAgMEMwMCAgIE5PUAo5OTc6ICAgICAgICAgICAgICAgICAJCXsNCjk5ODogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0YXNrIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBxdWVyeWluZyBpdHMgb3duIHN0YXRlLiAqLw0KOTk5OiAgICAgICAgICAgICAgICAgCQkJZVJldHVybiA9IGVSdW5uaW5nOw0KQkZEMDQ0RDAgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCkJGRDA0NEQ0ICAgICAgQ0M0OCAgIEIgMHhCRkQwNDU2NgpCRkQwNDRENiAgICAgIDBDMDAgICBOT1AKMTAwMDogICAgICAgICAgICAgICAgCQl9DQoxMDAxOiAgICAgICAgICAgICAgICAJCWVsc2UNCjEwMDI6ICAgICAgICAgICAgICAgIAkJew0KMTAwMzogICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwNDREOCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwNDREQSAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDQ0REMgICAgICAwQzAwICAgTk9QCjEwMDQ6ICAgICAgICAgICAgICAgIAkJCXsNCjEwMDU6ICAgICAgICAgICAgICAgIAkJCQlweFN0YXRlTGlzdCA9ICggTGlzdF90ICogKSBsaXN0TElTVF9JVEVNX0NPTlRBSU5FUiggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDQ0REUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDRFMiAgICAgIDY5MjUgICBMVyBWMCwgMjAoVjApCkJGRDA0NEU0ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMTAwNjogICAgICAgICAgICAgICAgCQkJfQ0KMTAwNzogICAgICAgICAgICAgICAgCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA0NEU4ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDQ0RUEgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDVDRUUKQkZEMDQ0RUMgICAgICAwQzAwICAgTk9QCjEwMDg6ICAgICAgICAgICAgICAgIA0KMTAwOTogICAgICAgICAgICAgICAgCQkJaWYoICggcHhTdGF0ZUxpc3QgPT0gcHhEZWxheWVkVGFza0xpc3QgKSB8fCAoIHB4U3RhdGVMaXN0ID09IHB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3QgKSApDQpCRkQwNDRFRSAgODA3NEZDNUMgICBMVyBWMCwgLTMyNjUyKEdQKQpCRkQwNDRGMiAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDA0NEY2ICAwMDA4OTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDQ1MEEKQkZEMDQ0RjggIDBDMDAwMDA4ICAgU0xMIFpFUk8sIFQwLCAxCkJGRDA0NEZBICAgICAgMEMwMCAgIE5PUApCRkQwNDRGQyAgODA3OEZDNUMgICBMVyBWMCwgLTMyNjQ4KEdQKQpCRkQwNDUwMCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDA0NTA0ICAwMDA2QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDQ1MTQKQkZEMDQ1MDYgIDBDMDAwMDA2ICAgU0xMIFpFUk8sIEEyLCAxCkJGRDA0NTA4ICAgICAgMEMwMCAgIE5PUAoxMDEwOiAgICAgICAgICAgICAgICAJCQl7DQoxMDExOiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRhc2sgYmVpbmcgcXVlcmllZCBpcyByZWZlcmVuY2VkIGZyb20gb25lIG9mIHRoZSBCbG9ja2VkDQoxMDEyOiAgICAgICAgICAgICAgICAJCQkJbGlzdHMuICovDQoxMDEzOiAgICAgICAgICAgICAgICAJCQkJZVJldHVybiA9IGVCbG9ja2VkOw0KQkZEMDQ1MEEgICAgICBFRDAyICAgTEkgVjAsIDIKQkZEMDQ1MEMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwNDUxMCAgICAgIENDMkEgICBCIDB4QkZEMDQ1NjYKQkZEMDQ1MTIgICAgICAwQzAwICAgTk9QCjEwMTQ6ICAgICAgICAgICAgICAgIAkJCX0NCjEwMTU6ICAgICAgICAgICAgICAgIA0KMTAxNjogICAgICAgICAgICAgICAgCQkJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoxMDE3OiAgICAgICAgICAgICAgICAJCQkJZWxzZSBpZiggcHhTdGF0ZUxpc3QgPT0gJnhTdXNwZW5kZWRUYXNrTGlzdCApDQpCRkQwNDUxNCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDA0NTE4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA0NTFBICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDQ1MUMgIDgwRTQzMDQyICAgQURESVUgVjAsIFYwLCAtMzI1NDAKQkZEMDQ1MjAgIDAwMTBCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNDU0NApCRkQwNDUyMiAgMEMwMDAwMTAgICBTTEwgWkVSTywgUzAsIDEKQkZEMDQ1MjQgICAgICAwQzAwICAgTk9QCjEwMTg6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMDE5OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGJlaW5nIHF1ZXJpZWQgaXMgcmVmZXJlbmNlZCBmcm9tIHRoZSBzdXNwZW5kZWQNCjEwMjA6ICAgICAgICAgICAgICAgIAkJCQkJbGlzdC4gIElzIGl0IGdlbnVpbmVseSBzdXNwZW5kZWQgb3IgaXMgaXQgYmxvY2sNCjEwMjE6ICAgICAgICAgICAgICAgIAkJCQkJaW5kZWZpbml0ZWx5PyAqLw0KMTAyMjogICAgICAgICAgICAgICAgCQkJCQlpZiggbGlzdExJU1RfSVRFTV9DT05UQUlORVIoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgPT0gTlVMTCApDQpCRkQwNDUyNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0NTJBICAgICAgNjkyQSAgIExXIFYwLCA0MChWMCkKQkZEMDQ1MkMgIDAwMDU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ1M0EKMTAyMzogICAgICAgICAgICAgICAgCQkJCQl7DQoxMDI0OiAgICAgICAgICAgICAgICAJCQkJCQllUmV0dXJuID0gZVN1c3BlbmRlZDsNCkJGRDA0NTMwICAgICAgRUQwMyAgIExJIFYwLCAzCkJGRDA0NTMyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDQ1MzYgICAgICBDQzE3ICAgQiAweEJGRDA0NTY2CkJGRDA0NTM4ICAgICAgMEMwMCAgIE5PUAoxMDI1OiAgICAgICAgICAgICAgICAJCQkJCX0NCjEwMjY6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTAyNzogICAgICAgICAgICAgICAgCQkJCQl7DQoxMDI4OiAgICAgICAgICAgICAgICAJCQkJCQllUmV0dXJuID0gZUJsb2NrZWQ7DQpCRkQwNDUzQSAgICAgIEVEMDIgICBMSSBWMCwgMgpCRkQwNDUzQyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA0NTQwICAgICAgQ0MxMiAgIEIgMHhCRkQwNDU2NgpCRkQwNDU0MiAgICAgIDBDMDAgICBOT1AKMTAyOTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMDMwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTAzMTogICAgICAgICAgICAgICAgCQkJI2VuZGlmDQoxMDMyOiAgICAgICAgICAgICAgICANCjEwMzM6ICAgICAgICAgICAgICAgIAkJCSNpZiAoIElOQ0xVREVfdlRhc2tEZWxldGUgPT0gMSApDQoxMDM0OiAgICAgICAgICAgICAgICAJCQkJZWxzZSBpZiggcHhTdGF0ZUxpc3QgPT0gJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApDQpCRkQwNDU0NCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDA0NTQ4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA0NTRBICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDQ1NEMgIDgxMEMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI1MDAKQkZEMDQ1NTAgIDAwMDZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNDU2MApCRkQwNDU1MiAgMEMwMDAwMDYgICBTTEwgWkVSTywgQTIsIDEKQkZEMDQ1NTQgICAgICAwQzAwICAgTk9QCjEwMzU6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMDM2OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGJlaW5nIHF1ZXJpZWQgaXMgcmVmZXJlbmNlZCBmcm9tIHRoZSBkZWxldGVkDQoxMDM3OiAgICAgICAgICAgICAgICAJCQkJCXRhc2tzIGxpc3QuICovDQoxMDM4OiAgICAgICAgICAgICAgICAJCQkJCWVSZXR1cm4gPSBlRGVsZXRlZDsNCkJGRDA0NTU2ICAgICAgRUQwNCAgIExJIFYwLCA0CkJGRDA0NTU4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDQ1NUMgICAgICBDQzA0ICAgQiAweEJGRDA0NTY2CkJGRDA0NTVFICAgICAgMEMwMCAgIE5PUAoxMDM5OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTA0MDogICAgICAgICAgICAgICAgCQkJI2VuZGlmDQoxMDQxOiAgICAgICAgICAgICAgICANCjEwNDI6ICAgICAgICAgICAgICAgIAkJCWVsc2UgLypsaW50ICFlNTI1IE5lZ2F0aXZlIGluZGVudGF0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdXNlIG9mIHByZS1wcm9jZXNzb3IgY2xlYXJlci4gKi8NCjEwNDM6ICAgICAgICAgICAgICAgIAkJCXsNCjEwNDQ6ICAgICAgICAgICAgICAgIAkJCQkvKiBJZiB0aGUgdGFzayBpcyBub3QgaW4gYW55IG90aGVyIHN0YXRlLCBpdCBtdXN0IGJlIGluIHRoZQ0KMTA0NTogICAgICAgICAgICAgICAgCQkJCVJlYWR5IChpbmNsdWRpbmcgcGVuZGluZyByZWFkeSkgc3RhdGUuICovDQoxMDQ2OiAgICAgICAgICAgICAgICAJCQkJZVJldHVybiA9IGVSZWFkeTsNCkJGRDA0NTYwICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0NTYyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTA0NzogICAgICAgICAgICAgICAgCQkJfQ0KMTA0ODogICAgICAgICAgICAgICAgCQl9DQoxMDQ5OiAgICAgICAgICAgICAgICANCjEwNTA6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIGVSZXR1cm47DQpCRkQwNDU2NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjEwNTE6ICAgICAgICAgICAgICAgIAl9IC8qbGludCAhZTgxOCB4VGFzayBjYW5ub3QgYmUgYSBwb2ludGVyIHRvIGNvbnN0IGJlY2F1c2UgaXQgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDQ1NkEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDQ1NkMgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwNDU2RSAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDA0NTcwICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDQ1NzIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNDU3NCAgICAgIDBDMDAgICBOT1AKMTA1MjogICAgICAgICAgICAgICAgDQoxMDUzOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV9lVGFza0dldFN0YXRlICovDQoxMDU0OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEwNTU6ICAgICAgICAgICAgICAgIA0KMTA1NjogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV91eFRhc2tQcmlvcml0eUdldCA9PSAxICkNCjEwNTc6ICAgICAgICAgICAgICAgIA0KMTA1ODogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4VGFza1ByaW9yaXR5R2V0KCBUYXNrSGFuZGxlX3QgeFRhc2sgKQ0KMTA1OTogICAgICAgICAgICAgICAgCXsNCkJGRDA4Qjc4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4QjdBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDhCN0MgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOEI3RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOEI4MCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjEwNjA6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoxMDYxOiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhSZXR1cm47DQoxMDYyOiAgICAgICAgICAgICAgICANCjEwNjM6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwOEI4NCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwOEI4NiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDhCODggICAgICAwQzAwICAgTk9QCjEwNjQ6ICAgICAgICAgICAgICAgIAkJew0KMTA2NTogICAgICAgICAgICAgICAgCQkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIHdlIGFyZSBjaGFuZ2luZyB0aGUNCjEwNjY6ICAgICAgICAgICAgICAgIAkJCXByaW9yaXR5IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLiAqLw0KMTA2NzogICAgICAgICAgICAgICAgCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFzayApOw0KQkZEMDhCOEEgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwOEI4RSAgMDAwNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEI5QQpCRkQwOEI5MiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwOEI5NiAgICAgIENDMDMgICBCIDB4QkZEMDhCOUUKQkZEMDhCOTggICAgICAwQzAwICAgTk9QCkJGRDA4QjlBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDhCOUUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxMDY4OiAgICAgICAgICAgICAgICAJCQl1eFJldHVybiA9IHB4VENCLT51eFByaW9yaXR5Ow0KQkZEMDhCQTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOEJBNiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDA4QkE4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTA2OTogICAgICAgICAgICAgICAgCQl9DQoxMDcwOiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwOEJBQyAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA4QkFFICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDBBM0IyCkJGRDA4QkIwICAgICAgMEMwMCAgIE5PUAoxMDcxOiAgICAgICAgICAgICAgICANCjEwNzI6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDhCQjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQoxMDczOiAgICAgICAgICAgICAgICAJfQ0KQkZEMDhCQjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDhCQjggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOEJCQSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4QkJDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDhCQkUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOEJDMCAgICAgIDBDMDAgICBOT1AKMTA3NDogICAgICAgICAgICAgICAgDQoxMDc1OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV91eFRhc2tQcmlvcml0eUdldCAqLw0KMTA3NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMDc3OiAgICAgICAgICAgICAgICANCjEwNzg6ICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdXhUYXNrUHJpb3JpdHlHZXQgPT0gMSApDQoxMDc5OiAgICAgICAgICAgICAgICANCjEwODA6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFRhc2tQcmlvcml0eUdldEZyb21JU1IoIFRhc2tIYW5kbGVfdCB4VGFzayApDQoxMDgxOiAgICAgICAgICAgICAgICAJew0KQkZEMDg3MDggICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDg3MEEgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwODcwQyAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDA4NzBFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4NzEwICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKMTA4MjogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjEwODM6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFJldHVybiwgdXhTYXZlZEludGVycnVwdFN0YXRlOw0KMTA4NDogICAgICAgICAgICAgICAgDQoxMDg1OiAgICAgICAgICAgICAgICAJCS8qIFJUT1MgcG9ydHMgdGhhdCBzdXBwb3J0IGludGVycnVwdCBuZXN0aW5nIGhhdmUgdGhlIGNvbmNlcHQgb2YgYQ0KMTA4NjogICAgICAgICAgICAgICAgCQltYXhpbXVtCXN5c3RlbSBjYWxsIChvciBtYXhpbXVtIEFQSSBjYWxsKSBpbnRlcnJ1cHQgcHJpb3JpdHkuDQoxMDg3OiAgICAgICAgICAgICAgICAJCUludGVycnVwdHMgdGhhdCBhcmUJYWJvdmUgdGhlIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkgYXJlIGtlZXANCjEwODg6ICAgICAgICAgICAgICAgIAkJcGVybWFuZW50bHkgZW5hYmxlZCwgZXZlbiB3aGVuIHRoZSBSVE9TIGtlcm5lbCBpcyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24sDQoxMDg5OiAgICAgICAgICAgICAgICAJCWJ1dCBjYW5ub3QgbWFrZSBhbnkgY2FsbHMgdG8gRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4gIElmIGNvbmZpZ0FTU0VSVCgpDQoxMDkwOiAgICAgICAgICAgICAgICAJCWlzIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCB0aGVuDQoxMDkxOiAgICAgICAgICAgICAgICAJCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSB3aWxsIHJlc3VsdCBpbiBhbiBhc3NlcnRpb24NCjEwOTI6ICAgICAgICAgICAgICAgIAkJZmFpbHVyZSBpZiBhIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgdGhhdCBoYXMNCjEwOTM6ICAgICAgICAgICAgICAgIAkJYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlIHRoZSBjb25maWd1cmVkIG1heGltdW0gc3lzdGVtIGNhbGwNCjEwOTQ6ICAgICAgICAgICAgICAgIAkJcHJpb3JpdHkuICBPbmx5IEZyZWVSVE9TIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiBGcm9tSVNSIGNhbiBiZSBjYWxsZWQNCjEwOTU6ICAgICAgICAgICAgICAgIAkJZnJvbSBpbnRlcnJ1cHRzCXRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgKGxvZ2ljYWxseSkNCjEwOTY6ICAgICAgICAgICAgICAgIAkJYmVsb3cgdGhlIG1heGltdW0gc3lzdGVtIGNhbGwgaW50ZXJydXB0IHByaW9yaXR5LiAgRnJlZVJUT1MgbWFpbnRhaW5zIGENCjEwOTc6ICAgICAgICAgICAgICAgIAkJc2VwYXJhdGUgaW50ZXJydXB0IHNhZmUgQVBJIHRvIGVuc3VyZSBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCjEwOTg6ICAgICAgICAgICAgICAgIAkJc2ltcGxlIGFzIHBvc3NpYmxlLiAgTW9yZSBpbmZvcm1hdGlvbiAoYWxiZWl0IENvcnRleC1NIHNwZWNpZmljKSBpcw0KMTA5OTogICAgICAgICAgICAgICAgCQlwcm92aWRlZCBvbiB0aGUgZm9sbG93aW5nIGxpbms6DQoxMTAwOiAgICAgICAgICAgICAgICAJCWh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgKi8NCjExMDE6ICAgICAgICAgICAgICAgIAkJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpOw0KMTEwMjogICAgICAgICAgICAgICAgDQoxMTAzOiAgICAgICAgICAgICAgICAJCXV4U2F2ZWRJbnRlcnJ1cHRTdGF0ZSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDA4NzE0ICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDg3MTggICAgICAwQzAwICAgTk9QCkJGRDA4NzFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTEwNDogICAgICAgICAgICAgICAgCQl7DQoxMTA1OiAgICAgICAgICAgICAgICAJCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gaXQgaXMgdGhlIHByaW9yaXR5IG9mIHRoZSBjYWxsaW5nDQoxMTA2OiAgICAgICAgICAgICAgICAJCQl0YXNrIHRoYXQgaXMgYmVpbmcgcXVlcmllZC4gKi8NCjExMDc6ICAgICAgICAgICAgICAgIAkJCXB4VENCID0gcHJ2R2V0VENCRnJvbUhhbmRsZSggeFRhc2sgKTsNCkJGRDA4NzFFICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDg3MjIgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg3MkUKQkZEMDg3MjYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDg3MkEgICAgICBDQzAzICAgQiAweEJGRDA4NzMyCkJGRDA4NzJDICAgICAgMEMwMCAgIE5PUApCRkQwODcyRSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA4NzMyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTEwODogICAgICAgICAgICAgICAgCQkJdXhSZXR1cm4gPSBweFRDQi0+dXhQcmlvcml0eTsNCkJGRDA4NzM2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDg3M0EgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwODczQyAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjExMDk6ICAgICAgICAgICAgICAgIAkJfQ0KMTExMDogICAgICAgICAgICAgICAgCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0ZSApOw0KQkZEMDg3NDAgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQpCRkQwODc0NCAgNEQ1RTc3RTggICBKQUxTIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUgpCRkQwODc0NiAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xCkJGRDA4NzQ4ICAgICAgMEMwMCAgIE5PUAoxMTExOiAgICAgICAgICAgICAgICANCjExMTI6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDg3NEEgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQoxMTEzOiAgICAgICAgICAgICAgICAJfQ0KQkZEMDg3NEUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDg3NTAgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwODc1MiAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDA4NzU0ICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDg3NTYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODc1OCAgICAgIDBDMDAgICBOT1AKMTExNDogICAgICAgICAgICAgICAgDQoxMTE1OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV91eFRhc2tQcmlvcml0eUdldCAqLw0KMTExNjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMTE3OiAgICAgICAgICAgICAgICANCjExMTg6ICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tQcmlvcml0eVNldCA9PSAxICkNCjExMTk6ICAgICAgICAgICAgICAgIA0KMTEyMDogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tQcmlvcml0eVNldCggVGFza0hhbmRsZV90IHhUYXNrLCBVQmFzZVR5cGVfdCB1eE5ld1ByaW9yaXR5ICkNCjExMjE6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMTkyNCAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OApCRkQwMTkyNiAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApCkJGRDAxOTI4ICAgICAgQ0JDQSAgIFNXIFM4LCA0MChTUCkKQkZEMDE5MkEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDE5MkMgIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQpCRkQwMTkzMCAgMDAzNEY4QkUgICBTVyBBMSwgNTIoUzgpCjExMjI6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoxMTIzOiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhDdXJyZW50QmFzZVByaW9yaXR5LCB1eFByaW9yaXR5VXNlZE9uRW50cnk7DQoxMTI0OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4WWllbGRSZXF1aXJlZCA9IHBkRkFMU0U7DQpCRkQwMTkzNCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMTEyNTogICAgICAgICAgICAgICAgDQoxMTI2OiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggKCB1eE5ld1ByaW9yaXR5IDwgY29uZmlnTUFYX1BSSU9SSVRJRVMgKSApOw0KQkZEMDE5MzggIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQpCRkQwMTkzQyAgMDAwNUIwNDIgICBTTFRJVSBWMCwgVjAsIDUKQkZEMDE5NDAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE5NTYKQkZEMDE5NDQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDE5NDYgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMTk0OCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwMTk0QSAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDE5NEMgIDA0NjYzMEEwICAgQURESVUgQTEsIFpFUk8sIDExMjYKQkZEMDE5NEUgICAgICAwNDY2ICAgQUREVSBTMCwgVjEsIEEyCkJGRDAxOTUwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMTk1MiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMTk1NCAgICAgIDBDMDAgICBOT1AKMTEyNzogICAgICAgICAgICAgICAgDQoxMTI4OiAgICAgICAgICAgICAgICAJCS8qIEVuc3VyZSB0aGUgbmV3IHByaW9yaXR5IGlzIHZhbGlkLiAqLw0KMTEyOTogICAgICAgICAgICAgICAgCQlpZiggdXhOZXdQcmlvcml0eSA+PSAoIFVCYXNlVHlwZV90ICkgY29uZmlnTUFYX1BSSU9SSVRJRVMgKQ0KQkZEMDE5NTYgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQpCRkQwMTk1QSAgMDAwNUIwNDIgICBTTFRJVSBWMCwgVjAsIDUKQkZEMDE5NUUgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE5NjgKMTEzMDogICAgICAgICAgICAgICAgCQl7DQoxMTMxOiAgICAgICAgICAgICAgICAJCQl1eE5ld1ByaW9yaXR5ID0gKCBVQmFzZVR5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBVQmFzZVR5cGVfdCApIDFVOw0KQkZEMDE5NjIgICAgICBFRDA0ICAgTEkgVjAsIDQKQkZEMDE5NjQgIDAwMzRGODVFICAgU1cgVjAsIDUyKFM4KQoxMTMyOiAgICAgICAgICAgICAgICAJCX0NCjExMzM6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTEzNDogICAgICAgICAgICAgICAgCQl7DQoxMTM1OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTM2OiAgICAgICAgICAgICAgICAJCX0NCjExMzc6ICAgICAgICAgICAgICAgIA0KMTEzODogICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAxOTY4ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAxOTZBICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMTk2QyAgICAgIDBDMDAgICBOT1AKMTEzOTogICAgICAgICAgICAgICAgCQl7DQoxMTQwOiAgICAgICAgICAgICAgICAJCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gaXQgaXMgdGhlIHByaW9yaXR5IG9mIHRoZSBjYWxsaW5nDQoxMTQxOiAgICAgICAgICAgICAgICAJCQl0YXNrIHRoYXQgaXMgYmVpbmcgY2hhbmdlZC4gKi8NCjExNDI6ICAgICAgICAgICAgICAgIAkJCXB4VENCID0gcHJ2R2V0VENCRnJvbUhhbmRsZSggeFRhc2sgKTsNCkJGRDAxOTZFICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDE5NzIgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE5N0UKQkZEMDE5NzYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDE5N0EgICAgICBDQzAzICAgQiAweEJGRDAxOTgyCkJGRDAxOTdDICAgICAgMEMwMCAgIE5PUApCRkQwMTk3RSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAxOTgyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTE0MzogICAgICAgICAgICAgICAgDQoxMTQ0OiAgICAgICAgICAgICAgICAJCQl0cmFjZVRBU0tfUFJJT1JJVFlfU0VUKCBweFRDQiwgdXhOZXdQcmlvcml0eSApOw0KMTE0NTogICAgICAgICAgICAgICAgDQoxMTQ2OiAgICAgICAgICAgICAgICAJCQkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjExNDc6ICAgICAgICAgICAgICAgIAkJCXsNCjExNDg6ICAgICAgICAgICAgICAgIAkJCQl1eEN1cnJlbnRCYXNlUHJpb3JpdHkgPSBweFRDQi0+dXhCYXNlUHJpb3JpdHk7DQpCRkQwMTk4NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxOThBICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkKQkZEMDE5OEUgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQoxMTQ5OiAgICAgICAgICAgICAgICAJCQl9DQoxMTUwOiAgICAgICAgICAgICAgICAJCQkjZWxzZQ0KMTE1MTogICAgICAgICAgICAgICAgCQkJew0KMTE1MjogICAgICAgICAgICAgICAgCQkJCXV4Q3VycmVudEJhc2VQcmlvcml0eSA9IHB4VENCLT51eFByaW9yaXR5Ow0KMTE1MzogICAgICAgICAgICAgICAgCQkJfQ0KMTE1NDogICAgICAgICAgICAgICAgCQkJI2VuZGlmDQoxMTU1OiAgICAgICAgICAgICAgICANCjExNTY6ICAgICAgICAgICAgICAgIAkJCWlmKCB1eEN1cnJlbnRCYXNlUHJpb3JpdHkgIT0gdXhOZXdQcmlvcml0eSApDQpCRkQwMTk5MiAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDAxOTk2ICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkKQkZEMDE5OUEgIDAwQUQ5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwMUFGOApCRkQwMTk5QyAgMEMwMDAwQUQgICBTTEwgQTEsIFQ1LCAxCkJGRDAxOTlFICAgICAgMEMwMCAgIE5PUAoxMTU3OiAgICAgICAgICAgICAgICAJCQl7DQoxMTU4OiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHByaW9yaXR5IGNoYW5nZSBtYXkgaGF2ZSByZWFkaWVkIGEgdGFzayBvZiBoaWdoZXINCjExNTk6ICAgICAgICAgICAgICAgIAkJCQlwcmlvcml0eSB0aGFuIHRoZSBjYWxsaW5nIHRhc2suICovDQoxMTYwOiAgICAgICAgICAgICAgICAJCQkJaWYoIHV4TmV3UHJpb3JpdHkgPiB1eEN1cnJlbnRCYXNlUHJpb3JpdHkgKQ0KQkZEMDE5QTAgIDAwMzRGQzdFICAgTFcgVjEsIDUyKFM4KQpCRkQwMTlBNCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAxOUE4ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQpCRkQwMTlBQSAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTAKQkZEMDE5QUMgIDAwMTU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE5REEKMTE2MTogICAgICAgICAgICAgICAgCQkJCXsNCjExNjI6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4VENCICE9IHB4Q3VycmVudFRDQiApDQpCRkQwMTlCMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMTlCNCAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDAxOUI4ICAwMDE5OTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDE5RUUKQkZEMDE5QkEgIDBDMDAwMDE5ICAgU0xMIFpFUk8sIFQ5LCAxCkJGRDAxOUJDICAgICAgMEMwMCAgIE5PUAoxMTYzOiAgICAgICAgICAgICAgICAJCQkJCXsNCjExNjQ6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSBwcmlvcml0eSBvZiBhIHRhc2sgb3RoZXIgdGhhbiB0aGUgY3VycmVudGx5DQoxMTY1OiAgICAgICAgICAgICAgICAJCQkJCQlydW5uaW5nIHRhc2sgaXMgYmVpbmcgcmFpc2VkLiAgSXMgdGhlIHByaW9yaXR5IGJlaW5nDQoxMTY2OiAgICAgICAgICAgICAgICAJCQkJCQlyYWlzZWQgYWJvdmUgdGhhdCBvZiB0aGUgcnVubmluZyB0YXNrPyAqLw0KMTE2NzogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHV4TmV3UHJpb3JpdHkgPj0gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDAxOUJFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAxOUMyICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDE5QzQgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQpCRkQwMTlDOCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDE5Q0EgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDAxOUNDICAwMDBGNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxOUVFCjExNjg6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjExNjk6ICAgICAgICAgICAgICAgIAkJCQkJCQl4WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCkJGRDAxOUQwICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxOUQyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDE5RDYgICAgICBDQzBCICAgQiAweEJGRDAxOUVFCkJGRDAxOUQ4ICAgICAgMEMwMCAgIE5PUAoxMTcwOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMTcxOiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoxMTcyOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMTczOiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTE3NDogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTE3NTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMTc2OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjExNzc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTE3ODogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHByaW9yaXR5IG9mIHRoZSBydW5uaW5nIHRhc2sgaXMgYmVpbmcgcmFpc2VkLA0KMTE3OTogICAgICAgICAgICAgICAgCQkJCQkJYnV0IHRoZSBydW5uaW5nIHRhc2sgbXVzdCBhbHJlYWR5IGJlIHRoZSBoaWdoZXN0DQoxMTgwOiAgICAgICAgICAgICAgICAJCQkJCQlwcmlvcml0eSB0YXNrIGFibGUgdG8gcnVuIHNvIG5vIHlpZWxkIGlzIHJlcXVpcmVkLiAqLw0KMTE4MTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMTgyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTE4MzogICAgICAgICAgICAgICAgCQkJCWVsc2UgaWYoIHB4VENCID09IHB4Q3VycmVudFRDQiApDQpCRkQwMTlEQSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMTlERSAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDAxOUUyICAwMDA0QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDE5RUUKQkZEMDE5RTQgIDBDMDAwMDA0ICAgU0xMIFpFUk8sIEEwLCAxCkJGRDAxOUU2ICAgICAgMEMwMCAgIE5PUAoxMTg0OiAgICAgICAgICAgICAgICAJCQkJew0KMTE4NTogICAgICAgICAgICAgICAgCQkJCQkvKiBTZXR0aW5nIHRoZSBwcmlvcml0eSBvZiB0aGUgcnVubmluZyB0YXNrIGRvd24gbWVhbnMNCjExODY6ICAgICAgICAgICAgICAgIAkJCQkJdGhlcmUgbWF5IG5vdyBiZSBhbm90aGVyIHRhc2sgb2YgaGlnaGVyIHByaW9yaXR5IHRoYXQNCjExODc6ICAgICAgICAgICAgICAgIAkJCQkJaXMgcmVhZHkgdG8gZXhlY3V0ZS4gKi8NCjExODg6ICAgICAgICAgICAgICAgIAkJCQkJeFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQpCRkQwMTlFOCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMTlFQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjExODk6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMTkwOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTE5MTogICAgICAgICAgICAgICAgCQkJCXsNCjExOTI6ICAgICAgICAgICAgICAgIAkJCQkJLyogU2V0dGluZyB0aGUgcHJpb3JpdHkgb2YgYW55IG90aGVyIHRhc2sgZG93biBkb2VzIG5vdA0KMTE5MzogICAgICAgICAgICAgICAgCQkJCQlyZXF1aXJlIGEgeWllbGQgYXMgdGhlIHJ1bm5pbmcgdGFzayBtdXN0IGJlIGFib3ZlIHRoZQ0KMTE5NDogICAgICAgICAgICAgICAgCQkJCQluZXcgcHJpb3JpdHkgb2YgdGhlIHRhc2sgYmVpbmcgbW9kaWZpZWQuICovDQoxMTk1OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTE5NjogICAgICAgICAgICAgICAgDQoxMTk3OiAgICAgICAgICAgICAgICAJCQkJLyogUmVtZW1iZXIgdGhlIHJlYWR5IGxpc3QgdGhlIHRhc2sgbWlnaHQgYmUgcmVmZXJlbmNlZCBmcm9tDQoxMTk4OiAgICAgICAgICAgICAgICAJCQkJYmVmb3JlIGl0cyB1eFByaW9yaXR5IG1lbWJlciBpcyBjaGFuZ2VkIHNvIHRoZQ0KMTE5OTogICAgICAgICAgICAgICAgCQkJCXRhc2tSRVNFVF9SRUFEWV9QUklPUklUWSgpIG1hY3JvIGNhbiBmdW5jdGlvbiBjb3JyZWN0bHkuICovDQoxMjAwOiAgICAgICAgICAgICAgICAJCQkJdXhQcmlvcml0eVVzZWRPbkVudHJ5ID0gcHhUQ0ItPnV4UHJpb3JpdHk7DQpCRkQwMTlFRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxOUYyICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDE5RjQgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQoxMjAxOiAgICAgICAgICAgICAgICANCjEyMDI6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjEyMDM6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMjA0OiAgICAgICAgICAgICAgICAJCQkJCS8qIE9ubHkgY2hhbmdlIHRoZSBwcmlvcml0eSBiZWluZyB1c2VkIGlmIHRoZSB0YXNrIGlzIG5vdA0KMTIwNTogICAgICAgICAgICAgICAgCQkJCQljdXJyZW50bHkgdXNpbmcgYW4gaW5oZXJpdGVkIHByaW9yaXR5LiAqLw0KMTIwNjogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhUQ0ItPnV4QmFzZVByaW9yaXR5ID09IHB4VENCLT51eFByaW9yaXR5ICkNCkJGRDAxOUY4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDE5RkMgIDAwNDBGQzYyICAgTFcgVjEsIDY0KFYwKQpCRkQwMUEwMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxQTA0ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDFBMDYgIDAwMDZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMUExNgpCRkQwMUEwOCAgMEMwMDAwMDYgICBTTEwgWkVSTywgQTIsIDEKQkZEMDFBMEEgICAgICAwQzAwICAgTk9QCjEyMDc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTIwODogICAgICAgICAgICAgICAgCQkJCQkJcHhUQ0ItPnV4UHJpb3JpdHkgPSB1eE5ld1ByaW9yaXR5Ow0KQkZEMDFBMEMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUExMCAgMDAzNEZDN0UgICBMVyBWMSwgNTIoUzgpCkJGRDAxQTE0ICAgICAgRTlBQiAgIFNXIFYxLCA0NChWMCkKMTIwOTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMjEwOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjEyMTE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTIxMjogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTIxMzogICAgICAgICAgICAgICAgCQkJCQl9DQoxMjE0OiAgICAgICAgICAgICAgICANCjEyMTU6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGJhc2UgcHJpb3JpdHkgZ2V0cyBzZXQgd2hhdGV2ZXIuICovDQoxMjE2OiAgICAgICAgICAgICAgICAJCQkJCXB4VENCLT51eEJhc2VQcmlvcml0eSA9IHV4TmV3UHJpb3JpdHk7DQpCRkQwMUExNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxQTFBICAwMDM0RkM3RSAgIExXIFYxLCA1MihTOCkKQkZEMDFBMUUgIDAwNDBGODYyICAgU1cgVjEsIDY0KFYwKQoxMjE3OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTIxODogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQoxMjE5OiAgICAgICAgICAgICAgICAJCQkJew0KMTIyMDogICAgICAgICAgICAgICAgCQkJCQlweFRDQi0+dXhQcmlvcml0eSA9IHV4TmV3UHJpb3JpdHk7DQoxMjIxOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTIyMjogICAgICAgICAgICAgICAgCQkJCSNlbmRpZg0KMTIyMzogICAgICAgICAgICAgICAgDQoxMjI0OiAgICAgICAgICAgICAgICAJCQkJLyogT25seSByZXNldCB0aGUgZXZlbnQgbGlzdCBpdGVtIHZhbHVlIGlmIHRoZSB2YWx1ZSBpcyBub3QNCjEyMjU6ICAgICAgICAgICAgICAgIAkJCQliZWluZyB1c2VkIGZvciBhbnl0aGluZyBlbHNlLiAqLw0KMTIyNjogICAgICAgICAgICAgICAgCQkJCWlmKCAoIGxpc3RHRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApICYgdGFza0VWRU5UX0xJU1RfSVRFTV9WQUxVRV9JTl9VU0UgKSA9PSAwVUwgKQ0KQkZEMDFBMjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUEyNiAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApCkJGRDAxQTI4ICAwMDA4NDAwMiAgIEJMVFogVjAsIDB4QkZEMDFBM0MKQkZEMDFBMkEgIDBDMDAwMDA4ICAgU0xMIFpFUk8sIFQwLCAxCkJGRDAxQTJDICAgICAgMEMwMCAgIE5PUAoxMjI3OiAgICAgICAgICAgICAgICAJCQkJew0KMTIyODogICAgICAgICAgICAgICAgCQkJCQlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICksICggKCBUaWNrVHlwZV90ICkgY29uZmlnTUFYX1BSSU9SSVRJRVMgLSAoIFRpY2tUeXBlX3QgKSB1eE5ld1ByaW9yaXR5ICkgKTsgLypsaW50ICFlOTYxIE1JU1JBIGV4Y2VwdGlvbiBhcyB0aGUgY2FzdHMgYXJlIG9ubHkgcmVkdW5kYW50IGZvciBzb21lIHBvcnRzLiAqLw0KQkZEMDFBMkUgICAgICBFRDg1ICAgTEkgVjEsIDUKQkZEMDFBMzAgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQpCRkQwMUEzNCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjAKQkZEMDFBMzYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUEzQSAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApCjEyMjk6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMjMwOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTIzMTogICAgICAgICAgICAgICAgCQkJCXsNCjEyMzI6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTIzMzogICAgICAgICAgICAgICAgCQkJCX0NCjEyMzQ6ICAgICAgICAgICAgICAgIA0KMTIzNTogICAgICAgICAgICAgICAgCQkJCS8qIElmIHRoZSB0YXNrIGlzIGluIHRoZSBibG9ja2VkIG9yIHN1c3BlbmRlZCBsaXN0IHdlIG5lZWQgZG8NCjEyMzY6ICAgICAgICAgICAgICAgIAkJCQlub3RoaW5nIG1vcmUgdGhhbiBjaGFuZ2UgaXQncyBwcmlvcml0eSB2YXJpYWJsZS4gSG93ZXZlciwgaWYNCjEyMzc6ICAgICAgICAgICAgICAgIAkJCQl0aGUgdGFzayBpcyBpbiBhIHJlYWR5IGxpc3QgaXQgbmVlZHMgdG8gYmUgcmVtb3ZlZCBhbmQgcGxhY2VkDQoxMjM4OiAgICAgICAgICAgICAgICAJCQkJaW4gdGhlIGxpc3QgYXBwcm9wcmlhdGUgdG8gaXRzIG5ldyBwcmlvcml0eS4gKi8NCjEyMzk6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB1eFByaW9yaXR5VXNlZE9uRW50cnkgXSApLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgIT0gcGRGQUxTRSApDQpCRkQwMUEzQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxQTNFICA2OUE1MDAxNCAgIExXWCBUNSwgMChTNCkKQkZEMDFBNDAgICAgICA2OUE1ICAgTFcgVjEsIDIwKFYwKQpCRkQwMUE0MiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAxQTQ2ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDFBNDggICAgICAyNjI0ICAgU0xMIEEwLCBWMCwgMgpCRkQwMUE0QSAgICAgIDA2NDQgICBBRERVIEEwLCBWMCwgQTAKQkZEMDFBNEMgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDFBNEUgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMUE1MCAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMUE1NCAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjAKQkZEMDFBNTYgIDAwMDRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMUE2MgpCRkQwMUE1OCAgMEMwMDAwMDQgICBTTEwgWkVSTywgQTAsIDEKQkZEMDFBNUEgICAgICAwQzAwICAgTk9QCkJGRDAxQTVDICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxQTVFICAgICAgQ0MwMiAgIEIgMHhCRkQwMUE2NApCRkQwMUE2MCAgICAgIDBDMDAgICBOT1AKQkZEMDFBNjIgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwMUE2NCAgMDAzMjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUFDQwoxMjQwOiAgICAgICAgICAgICAgICAJCQkJew0KMTI0MTogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgdGFzayBpcyBjdXJyZW50bHkgaW4gaXRzIHJlYWR5IGxpc3QgLSByZW1vdmUgYmVmb3JlIGFkZGluZw0KMTI0MjogICAgICAgICAgICAgICAgCQkJCQlpdCB0byBpdCdzIG5ldyByZWFkeSBsaXN0LiAgQXMgd2UgYXJlIGluIGEgY3JpdGljYWwgc2VjdGlvbiB3ZQ0KMTI0MzogICAgICAgICAgICAgICAgCQkJCQljYW4gZG8gdGhpcyBldmVuIGlmIHRoZSBzY2hlZHVsZXIgaXMgc3VzcGVuZGVkLiAqLw0KMTI0NDogICAgICAgICAgICAgICAgCQkJCQlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDFBNjggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUE2QyAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDFBNkUgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDFBNzAgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUKQkZEMDFBNzIgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQpCRkQwMUE3NCAgICAgIDBDMDAgICBOT1AKQkZEMDFBNzYgIDAwMEI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDFBOTAKMTI0NTogICAgICAgICAgICAgICAgCQkJCQl7DQoxMjQ2OiAgICAgICAgICAgICAgICAJCQkJCQkvKiBJdCBpcyBrbm93biB0aGF0IHRoZSB0YXNrIGlzIGluIGl0cyByZWFkeSBsaXN0IHNvDQoxMjQ3OiAgICAgICAgICAgICAgICAJCQkJCQl0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGFnYWluIGFuZCB0aGUgcG9ydCBsZXZlbA0KMTI0ODogICAgICAgICAgICAgICAgCQkJCQkJcmVzZXQgbWFjcm8gY2FuIGJlIGNhbGxlZCBkaXJlY3RseS4gKi8NCjEyNDk6ICAgICAgICAgICAgICAgIAkJCQkJCXBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eVVzZWRPbkVudHJ5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsNCkJGRDAxQTdBICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDFBN0UgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDFBODAgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxCkJGRDAxQTgyICA0NDFBMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NDM0CkJGRDAxQTg0ICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMApCRkQwMUE4NiAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMUE4QSAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDFBOEMgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKMTI1MDogICAgICAgICAgICAgICAgCQkJCQl9DQoxMjUxOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjEyNTI6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTI1MzogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTI1NDogICAgICAgICAgICAgICAgCQkJCQl9DQoxMjU1OiAgICAgICAgICAgICAgICAJCQkJCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhUQ0IgKTsNCkJGRDAxQTkwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFBOTQgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMUE5NiAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMUE5OCAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjEKQkZEMDFBOUEgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkKQkZEMDFBOUMgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDFBQTAgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDFBQTIgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKQkZEMDFBQTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUFBQSAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAxQUFDICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDFBQUUgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMUFCMCAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDFBQjIgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDFBQjQgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMUFCNiAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMUFCQSAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDFBQkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUFDMCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDFBQzIgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDFBQzQgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDFBQzYgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwMUFDOCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDFBQ0EgICAgICAwQzAwICAgTk9QCjEyNTY6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMjU3OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTI1ODogICAgICAgICAgICAgICAgCQkJCXsNCjEyNTk6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTI2MDogICAgICAgICAgICAgICAgCQkJCX0NCjEyNjE6ICAgICAgICAgICAgICAgIA0KMTI2MjogICAgICAgICAgICAgICAgCQkJCWlmKCB4WWllbGRSZXF1aXJlZCA9PSBwZFRSVUUgKQ0KQkZEMDFBQ0MgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwMUFEMCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMUFEMiAgMDAxMUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxQUY4CkJGRDAxQUQ0ICAwQzAwMDAxMSAgIFNMTCBaRVJPLCBTMSwgMQpCRkQwMUFENiAgICAgIDBDMDAgICBOT1AKMTI2MzogICAgICAgICAgICAgICAgCQkJCXsNCjEyNjQ6ICAgICAgICAgICAgICAgIAkJCQkJdGFza1lJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKTsNCkJGRDAxQUQ4ICA0RTU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDFBREEgICAgICA0RTU2ICAgQURESVUgUzIsIFMyLCAtNQpCRkQwMUFEQyAgICAgIDBDMDAgICBOT1AKQkZEMDFBREUgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQpCRkQwMUFFMiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAxQUU2ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwMUFFQSAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpCkJGRDAxQUVFICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDFBRjIgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDAxQUY0ICAgICAgNEU2NiAgIEFERElVIFMzLCBTMywgMwpCRkQwMUFGNiAgICAgIDBDMDAgICBOT1AKMTI2NTogICAgICAgICAgICAgICAgCQkJCX0NCjEyNjY6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxMjY3OiAgICAgICAgICAgICAgICAJCQkJew0KMTI2ODogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMjY5OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTI3MDogICAgICAgICAgICAgICAgDQoxMjcxOiAgICAgICAgICAgICAgICAJCQkJLyogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHZhcmlhYmxlcyB3aGVuIHRoZSBwb3J0DQoxMjcyOiAgICAgICAgICAgICAgICAJCQkJb3B0aW1pc2VkIHRhc2sgc2VsZWN0aW9uIGlzIG5vdCBiZWluZyB1c2VkLiAqLw0KMTI3MzogICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIHV4UHJpb3JpdHlVc2VkT25FbnRyeTsNCjEyNzQ6ICAgICAgICAgICAgICAgIAkJCX0NCjEyNzU6ICAgICAgICAgICAgICAgIAkJfQ0KMTI3NjogICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDFBRjggIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMUFGQSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMzJGRQpCRkQwMUFGQyAgICAgIDBDMDAgICBOT1AKMTI3NzogICAgICAgICAgICAgICAgCX0NCkJGRDAxQUZFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAxQjAwICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkKQkZEMDFCMDIgICAgICA0QkNBICAgTFcgUzgsIDQwKFNQKQpCRkQwMUIwNCAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4CkJGRDAxQjA2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDFCMDggICAgICAwQzAwICAgTk9QCjEyNzg6ICAgICAgICAgICAgICAgIA0KMTI3OTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tQcmlvcml0eVNldCAqLw0KMTI4MDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMjgxOiAgICAgICAgICAgICAgICANCjEyODI6ICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KMTI4MzogICAgICAgICAgICAgICAgDQoxMjg0OiAgICAgICAgICAgICAgICAJdm9pZCB2VGFza1N1c3BlbmQoIFRhc2tIYW5kbGVfdCB4VGFza1RvU3VzcGVuZCApDQoxMjg1OiAgICAgICAgICAgICAgICAJew0KQkZEMDMwNEMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDMwNEUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwMzA1MCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDAzMDUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAzMDU0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMTI4NjogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjEyODc6ICAgICAgICAgICAgICAgIA0KMTI4ODogICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzMDU4ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAzMDVBICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMzA1QyAgICAgIDBDMDAgICBOT1AKMTI4OTogICAgICAgICAgICAgICAgCQl7DQoxMjkwOiAgICAgICAgICAgICAgICAJCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gaXQgaXMgdGhlIHJ1bm5pbmcgdGFzayB0aGF0IGlzDQoxMjkxOiAgICAgICAgICAgICAgICAJCQliZWluZyBzdXNwZW5kZWQuICovDQoxMjkyOiAgICAgICAgICAgICAgICAJCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrVG9TdXNwZW5kICk7DQpCRkQwMzA1RSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAzMDYyICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzMDZFCkJGRDAzMDY2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAzMDZBICAgICAgQ0MwMyAgIEIgMHhCRkQwMzA3MgpCRkQwMzA2QyAgICAgIDBDMDAgICBOT1AKQkZEMDMwNkUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMzA3MiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjEyOTM6ICAgICAgICAgICAgICAgIA0KMTI5NDogICAgICAgICAgICAgICAgCQkJdHJhY2VUQVNLX1NVU1BFTkQoIHB4VENCICk7DQoxMjk1OiAgICAgICAgICAgICAgICANCjEyOTY6ICAgICAgICAgICAgICAgIAkJCS8qIFJlbW92ZSB0YXNrIGZyb20gdGhlIHJlYWR5L2RlbGF5ZWQgbGlzdCBhbmQgcGxhY2UgaW4gdGhlDQoxMjk3OiAgICAgICAgICAgICAgICAJCQlzdXNwZW5kZWQgbGlzdC4gKi8NCjEyOTg6ICAgICAgICAgICAgICAgIAkJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMzA3NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzMDdBICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMzA3QyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMzA3RSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMzA4MCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAzMDgyICAgICAgMEMwMCAgIE5PUApCRkQwMzA4NCAgMDAxQTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzBCQwoxMjk5OiAgICAgICAgICAgICAgICAJCQl7DQoxMzAwOiAgICAgICAgICAgICAgICAJCQkJdGFza1JFU0VUX1JFQURZX1BSSU9SSVRZKCBweFRDQi0+dXhQcmlvcml0eSApOw0KQkZEMDMwODggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzA4QyAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAzMDhFICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDMwOTAgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMzA5MiAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDMwOTQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDMwOTYgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMzA5OCAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMzA5QyAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDMwOUUgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAzMEEwICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzMEJDCkJGRDAzMEE0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDMwQTggICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMzBBQSAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMzBBQyAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjEKQkZEMDMwQUUgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQKQkZEMDMwQjAgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwCkJGRDAzMEIyICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApCkJGRDAzMEI2ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwMzBCOCAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQoxMzAxOiAgICAgICAgICAgICAgICAJCQl9DQoxMzAyOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxMzAzOiAgICAgICAgICAgICAgICAJCQl7DQoxMzA0OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTMwNTogICAgICAgICAgICAgICAgCQkJfQ0KMTMwNjogICAgICAgICAgICAgICAgDQoxMzA3OiAgICAgICAgICAgICAgICAJCQkvKiBJcyB0aGUgdGFzayB3YWl0aW5nIG9uIGFuIGV2ZW50IGFsc28/ICovDQoxMzA4OiAgICAgICAgICAgICAgICAJCQlpZiggbGlzdExJU1RfSVRFTV9DT05UQUlORVIoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgIT0gTlVMTCApDQpCRkQwMzBCQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzMEMwICAgICAgNjkyQSAgIExXIFYwLCA0MChWMCkKQkZEMDMwQzIgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDMwRDQKMTMwOTogICAgICAgICAgICAgICAgCQkJew0KMTMxMDogICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIHV4TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCkJGRDAzMEM2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDMwQzggIDZEMkMwMDEwICAgRVhUIFpFUk8sIFMwLCAyMCwgMTQKQkZEMDMwQ0EgICAgICA2RDJDICAgQURESVUgVjAsIFYwLCAyNApCRkQwMzBDQyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMzBDRSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMzBEMCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAzMEQyICAgICAgMEMwMCAgIE5PUAoxMzExOiAgICAgICAgICAgICAgICAJCQl9DQoxMzEyOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxMzEzOiAgICAgICAgICAgICAgICAJCQl7DQoxMzE0OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTMxNTogICAgICAgICAgICAgICAgCQkJfQ0KMTMxNjogICAgICAgICAgICAgICAgDQoxMzE3OiAgICAgICAgICAgICAgICAJCQl2TGlzdEluc2VydEVuZCggJnhTdXNwZW5kZWRUYXNrTGlzdCwgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDMwRDQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzBEOCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDMwREEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDMwREMgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQpCRkQwMzBERSAgODBFNDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU0MApCRkQwMzBFMiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMzBFNCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAzMEU2ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwMzBFOCAgICAgIDBDMDAgICBOT1AKMTMxODogICAgICAgICAgICAgICAgCQl9DQoxMzE5OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMzBFQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAzMEVDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA0OEYwCkJGRDAzMEVFICAgICAgMEMwMCAgIE5PUAoxMzIwOiAgICAgICAgICAgICAgICANCjEzMjE6ICAgICAgICAgICAgICAgIAkJaWYoIHB4VENCID09IHB4Q3VycmVudFRDQiApDQpCRkQwMzBGMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMzBGNCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAzMEY4ICAwMDM2QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDMxNjgKQkZEMDMwRkEgIDBDMDAwMDM2ICAgU0xMIEFULCBTNiwgMQpCRkQwMzBGQyAgICAgIDBDMDAgICBOT1AKMTMyMjogICAgICAgICAgICAgICAgCQl7DQoxMzIzOiAgICAgICAgICAgICAgICAJCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQpCRkQwMzBGRSAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQpCRkQwMzEwMiAgMDAxRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzE0NAoxMzI0OiAgICAgICAgICAgICAgICAJCQl7DQoxMzI1OiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIGN1cnJlbnQgdGFzayBoYXMganVzdCBiZWVuIHN1c3BlbmRlZC4gKi8NCjEzMjY6ICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIHV4U2NoZWR1bGVyU3VzcGVuZGVkID09IDAgKTsNCkJGRDAzMTA2ICA4MDVDRkM1QyAgIExXIFYwLCAtMzI2NzYoR1ApCkJGRDAzMTBBICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzMTIwCkJGRDAzMTBFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAzMTEwICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDMxMTIgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDMxMTQgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDAzMTE2ICAwNTJFMzBBMCAgIEFERElVIEExLCBaRVJPLCAxMzI2CkJGRDAzMTE4ICAgICAgMDUyRSAgIEFERFUgVjAsIEEzLCBWMApCRkQwMzExQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDMxMUMgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDMxMUUgICAgICAwQzAwICAgTk9QCjEzMjc6ICAgICAgICAgICAgICAgIAkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KQkZEMDMxMjAgIDRFNTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQpCRkQwMzEyMiAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01CkJGRDAzMTI0ICAgICAgMEMwMCAgIE5PUApCRkQwMzEyNiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCkJGRDAzMTJBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDMxMkUgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDAzMTMyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKQkZEMDMxMzYgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQpCRkQwMzEzQSAgNEU2Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UKQkZEMDMxM0MgICAgICA0RTY2ICAgQURESVUgUzMsIFMzLCAzCkJGRDAzMTNFICAgICAgMEMwMCAgIE5PUApCRkQwMzE0MCAgICAgIENDMjAgICBCIDB4QkZEMDMxODIKQkZEMDMxNDIgICAgICAwQzAwICAgTk9QCjEzMjg6ICAgICAgICAgICAgICAgIAkJCX0NCjEzMjk6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjEzMzA6ICAgICAgICAgICAgICAgIAkJCXsNCjEzMzE6ICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgc2NoZWR1bGVyIGlzIG5vdCBydW5uaW5nLCBidXQgdGhlIHRhc2sgdGhhdCB3YXMgcG9pbnRlZA0KMTMzMjogICAgICAgICAgICAgICAgCQkJCXRvIGJ5IHB4Q3VycmVudFRDQiBoYXMganVzdCBiZWVuIHN1c3BlbmRlZCBhbmQgcHhDdXJyZW50VENCDQoxMzMzOiAgICAgICAgICAgICAgICAJCQkJbXVzdCBiZSBhZGp1c3RlZCB0byBwb2ludCB0byBhIGRpZmZlcmVudCB0YXNrLiAqLw0KMTMzNDogICAgICAgICAgICAgICAgCQkJCWlmKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggJnhTdXNwZW5kZWRUYXNrTGlzdCApID09IHV4Q3VycmVudE51bWJlck9mVGFza3MgKQ0KQkZEMDMxNDQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDMxNDYgIEZDNjJCRkQyICAgTERDMSBGMzAsIC05MjYoUzIpCkJGRDAzMTQ4ICA4MEU0RkM2MiAgIExXIFYxLCAtMzI1NDAoVjApCkJGRDAzMTRDICA4MDM4RkM1QyAgIExXIFYwLCAtMzI3MTIoR1ApCkJGRDAzMTUwICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDMxNUUKQkZEMDMxNTIgIDBDMDAwMDA1ICAgU0xMIFpFUk8sIEExLCAxCkJGRDAzMTU0ICAgICAgMEMwMCAgIE5PUAoxMzM1OiAgICAgICAgICAgICAgICAJCQkJew0KMTMzNjogICAgICAgICAgICAgICAgCQkJCQkvKiBObyBvdGhlciB0YXNrcyBhcmUgcmVhZHksIHNvIHNldCBweEN1cnJlbnRUQ0IgYmFjayB0bw0KMTMzNzogICAgICAgICAgICAgICAgCQkJCQlOVUxMIHNvIHdoZW4gdGhlIG5leHQgdGFzayBpcyBjcmVhdGVkIHB4Q3VycmVudFRDQiB3aWxsDQoxMzM4OiAgICAgICAgICAgICAgICAJCQkJCWJlIHNldCB0byBwb2ludCB0byBpdCBubyBtYXR0ZXIgd2hhdCBpdHMgcmVsYXRpdmUgcHJpb3JpdHkNCjEzMzk6ICAgICAgICAgICAgICAgIAkJCQkJaXMuICovDQoxMzQwOiAgICAgICAgICAgICAgICAJCQkJCXB4Q3VycmVudFRDQiA9IE5VTEw7DQpCRkQwMzE1NiAgODAzMEY4MUMgICBTVyBaRVJPLCAtMzI3MjAoR1ApCkJGRDAzMTVBICAgICAgQ0MxMyAgIEIgMHhCRkQwMzE4MgpCRkQwMzE1QyAgICAgIDBDMDAgICBOT1AKMTM0MTogICAgICAgICAgICAgICAgCQkJCX0NCjEzNDI6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxMzQzOiAgICAgICAgICAgICAgICAJCQkJew0KMTM0NDogICAgICAgICAgICAgICAgCQkJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCkJGRDAzMTVFICAxNkRFNzdFOCAgIEpBTFMgdlRhc2tTd2l0Y2hDb250ZXh0CkJGRDAzMTYwICAwQzAwMTZERSAgIExCVSBTNiwgMzA3MihTOCkKQkZEMDMxNjIgICAgICAwQzAwICAgTk9QCkJGRDAzMTY0ICAgICAgQ0MwRSAgIEIgMHhCRkQwMzE4MgpCRkQwMzE2NiAgICAgIDBDMDAgICBOT1AKMTM0NTogICAgICAgICAgICAgICAgCQkJCX0NCjEzNDY6ICAgICAgICAgICAgICAgIAkJCX0NCjEzNDc6ICAgICAgICAgICAgICAgIAkJfQ0KMTM0ODogICAgICAgICAgICAgICAgCQllbHNlDQoxMzQ5OiAgICAgICAgICAgICAgICAJCXsNCjEzNTA6ICAgICAgICAgICAgICAgIAkJCWlmKCB4U2NoZWR1bGVyUnVubmluZyAhPSBwZEZBTFNFICkNCkJGRDAzMTY4ICA4MDQ0RkM1QyAgIExXIFYwLCAtMzI3MDAoR1ApCkJGRDAzMTZDICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzMTgyCjEzNTE6ICAgICAgICAgICAgICAgIAkJCXsNCjEzNTI6ICAgICAgICAgICAgICAgIAkJCQkvKiBBIHRhc2sgb3RoZXIgdGhhbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzayB3YXMgc3VzcGVuZGVkLA0KMTM1MzogICAgICAgICAgICAgICAgCQkJCXJlc2V0IHRoZSBuZXh0IGV4cGVjdGVkIHVuYmxvY2sgdGltZSBpbiBjYXNlIGl0IHJlZmVycmVkIHRvIHRoZQ0KMTM1NDogICAgICAgICAgICAgICAgCQkJCXRhc2sgdGhhdCBpcyBub3cgaW4gdGhlIFN1c3BlbmRlZCBzdGF0ZS4gKi8NCjEzNTU6ICAgICAgICAgICAgICAgIAkJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzMTcwICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAzMTcyICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMzE3NCAgICAgIDBDMDAgICBOT1AKMTM1NjogICAgICAgICAgICAgICAgCQkJCXsNCjEzNTc6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2UmVzZXROZXh0VGFza1VuYmxvY2tUaW1lKCk7DQpCRkQwMzE3NiAgNDdDQTc3RTggICBKQUxTIHBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZQpCRkQwMzE3QSAgICAgIDBDMDAgICBOT1AKMTM1ODogICAgICAgICAgICAgICAgCQkJCX0NCjEzNTk6ICAgICAgICAgICAgICAgIAkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDMxN0MgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMzE3RSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNDk4MgpCRkQwMzE4MCAgICAgIDBDMDAgICBOT1AKMTM2MDogICAgICAgICAgICAgICAgCQkJfQ0KMTM2MTogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTM2MjogICAgICAgICAgICAgICAgCQkJew0KMTM2MzogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzNjQ6ICAgICAgICAgICAgICAgIAkJCX0NCjEzNjU6ICAgICAgICAgICAgICAgIAkJfQ0KMTM2NjogICAgICAgICAgICAgICAgCX0NCkJGRDAzMTgyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAzMTg0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDMxODYgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwMzE4OCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDAzMThBICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDMxOEMgICAgICAwQzAwICAgTk9QCjEzNjc6ICAgICAgICAgICAgICAgIA0KMTM2ODogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQoxMzY5OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEzNzA6ICAgICAgICAgICAgICAgIA0KMTM3MTogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoxMzcyOiAgICAgICAgICAgICAgICANCjEzNzM6ICAgICAgICAgICAgICAgIAlzdGF0aWMgQmFzZVR5cGVfdCBwcnZUYXNrSXNUYXNrU3VzcGVuZGVkKCBjb25zdCBUYXNrSGFuZGxlX3QgeFRhc2sgKQ0KMTM3NDogICAgICAgICAgICAgICAgCXsNCkJGRDA2NkRDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA2NkRFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDY2RTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNjZFMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNjZFNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjEzNzU6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDY2RTggIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjEzNzY6ICAgICAgICAgICAgICAgIAljb25zdCBUQ0JfdCAqIGNvbnN0IHB4VENCID0gKCBUQ0JfdCAqICkgeFRhc2s7DQpCRkQwNjZFQyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA2NkYwICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTM3NzogICAgICAgICAgICAgICAgDQoxMzc4OiAgICAgICAgICAgICAgICAJCS8qIEFjY2Vzc2VzIHhQZW5kaW5nUmVhZHlMaXN0IHNvIG11c3QgYmUgY2FsbGVkIGZyb20gYSBjcml0aWNhbA0KMTM3OTogICAgICAgICAgICAgICAgCQlzZWN0aW9uLiAqLw0KMTM4MDogICAgICAgICAgICAgICAgDQoxMzgxOiAgICAgICAgICAgICAgICAJCS8qIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY2hlY2sgaWYgdGhlIGNhbGxpbmcgdGFzayBpcyBzdXNwZW5kZWQuICovDQoxMzgyOiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRhc2sgKTsNCkJGRDA2NkY0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDY2RjggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDY3MEUKQkZEMDY2RkMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDY2RkUgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNjcwMCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwNjcwMiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDY3MDQgIDA1NjYzMEEwICAgQURESVUgQTEsIFpFUk8sIDEzODIKQkZEMDY3MDYgICAgICAwNTY2ICAgQUREVSBWMCwgVjEsIEEyCkJGRDA2NzA4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNjcwQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNjcwQyAgICAgIDBDMDAgICBOT1AKMTM4MzogICAgICAgICAgICAgICAgDQoxMzg0OiAgICAgICAgICAgICAgICAJCS8qIElzIHRoZSB0YXNrIGJlaW5nIHJlc3VtZWQgYWN0dWFsbHkgaW4gdGhlIHN1c3BlbmRlZCBsaXN0PyAqLw0KMTM4NTogICAgICAgICAgICAgICAgCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSAhPSBwZEZBTFNFICkNCkJGRDA2NzBFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDY3MTAgIDY5QTUwMDE0ICAgTFdYIFQ1LCAwKFM0KQpCRkQwNjcxMiAgICAgIDY5QTUgICBMVyBWMSwgMjAoVjApCkJGRDA2NzE0ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2NzE2ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDY3MTggIDgwRTQzMDQyICAgQURESVUgVjAsIFYwLCAtMzI1NDAKQkZEMDY3MUMgIDAwMDRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNjcyOApCRkQwNjcxRSAgMEMwMDAwMDQgICBTTEwgWkVSTywgQTAsIDEKQkZEMDY3MjAgICAgICAwQzAwICAgTk9QCkJGRDA2NzIyICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA2NzI0ICAgICAgQ0MwMiAgIEIgMHhCRkQwNjcyQQpCRkQwNjcyNiAgICAgIDBDMDAgICBOT1AKQkZEMDY3MjggICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwNjcyQSAgMDAxODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjc1RQoxMzg2OiAgICAgICAgICAgICAgICAJCXsNCjEzODc6ICAgICAgICAgICAgICAgIAkJCS8qIEhhcyB0aGUgdGFzayBhbHJlYWR5IGJlZW4gcmVzdW1lZCBmcm9tIHdpdGhpbiBhbiBJU1I/ICovDQoxMzg4OiAgICAgICAgICAgICAgICAJCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICZ4UGVuZGluZ1JlYWR5TGlzdCwgJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKSA9PSBwZEZBTFNFICkNCkJGRDA2NzJFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDY3MzIgICAgICA2OUFBICAgTFcgVjEsIDQwKFYwKQpCRkQwNjczNCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwNjczNiAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDA2NzM4ICA4MEQwMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNTYwCkJGRDA2NzNDICAwMDBGOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDY3NUUKQkZEMDY3M0UgIDBDMDAwMDBGICAgU0xMIFpFUk8sIFQ3LCAxCkJGRDA2NzQwICAgICAgMEMwMCAgIE5PUAoxMzg5OiAgICAgICAgICAgICAgICAJCQl7DQoxMzkwOiAgICAgICAgICAgICAgICAJCQkJLyogSXMgaXQgaW4gdGhlIHN1c3BlbmRlZCBsaXN0IGJlY2F1c2UgaXQgaXMgaW4gdGhlCVN1c3BlbmRlZA0KMTM5MTogICAgICAgICAgICAgICAgCQkJCXN0YXRlLCBvciBiZWNhdXNlIGlzIGlzIGJsb2NrZWQgd2l0aCBubyB0aW1lb3V0PyAqLw0KMTM5MjogICAgICAgICAgICAgICAgCQkJCWlmKCBsaXN0SVNfQ09OVEFJTkVEX1dJVEhJTiggTlVMTCwgJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKSAhPSBwZEZBTFNFICkNCkJGRDA2NzQyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDY3NDYgICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQpCRkQwNjc0OCAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjc1MgpCRkQwNjc0QyAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwNjc0RSAgICAgIENDMDIgICBCIDB4QkZEMDY3NTQKQkZEMDY3NTAgICAgICAwQzAwICAgTk9QCkJGRDA2NzUyICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8KQkZEMDY3NTQgIDAwMDM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY3NUUKMTM5MzogICAgICAgICAgICAgICAgCQkJCXsNCjEzOTQ6ICAgICAgICAgICAgICAgIAkJCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA2NzU4ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA2NzVBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTM5NTogICAgICAgICAgICAgICAgCQkJCX0NCjEzOTY6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxMzk3OiAgICAgICAgICAgICAgICAJCQkJew0KMTM5ODogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMzk5OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTQwMDogICAgICAgICAgICAgICAgCQkJfQ0KMTQwMTogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTQwMjogICAgICAgICAgICAgICAgCQkJew0KMTQwMzogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0MDQ6ICAgICAgICAgICAgICAgIAkJCX0NCjE0MDU6ICAgICAgICAgICAgICAgIAkJfQ0KMTQwNjogICAgICAgICAgICAgICAgCQllbHNlDQoxNDA3OiAgICAgICAgICAgICAgICAJCXsNCjE0MDg6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0MDk6ICAgICAgICAgICAgICAgIAkJfQ0KMTQxMDogICAgICAgICAgICAgICAgDQoxNDExOiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KQkZEMDY3NUUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQoxNDEyOiAgICAgICAgICAgICAgICAJfSAvKmxpbnQgIWU4MTggeFRhc2sgY2Fubm90IGJlIGEgcG9pbnRlciB0byBjb25zdCBiZWNhdXNlIGl0IGlzIGEgdHlwZWRlZi4gKi8NCkJGRDA2NzYyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA2NzY0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDY3NjYgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwNjc2OCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA2NzZBICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDY3NkMgICAgICAwQzAwICAgTk9QCjE0MTM6ICAgICAgICAgICAgICAgIA0KMTQxNDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQoxNDE1OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE0MTY6ICAgICAgICAgICAgICAgIA0KMTQxNzogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoxNDE4OiAgICAgICAgICAgICAgICANCjE0MTk6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrUmVzdW1lKCBUYXNrSGFuZGxlX3QgeFRhc2tUb1Jlc3VtZSApDQoxNDIwOiAgICAgICAgICAgICAgICAJew0KQkZEMDQwRTQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDQwRTYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNDBFOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA0MEVBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA0MEVDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMTQyMTogICAgICAgICAgICAgICAgCVRDQl90ICogY29uc3QgcHhUQ0IgPSAoIFRDQl90ICogKSB4VGFza1RvUmVzdW1lOw0KQkZEMDQwRjAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNDBGNCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE0MjI6ICAgICAgICAgICAgICAgIA0KMTQyMzogICAgICAgICAgICAgICAgCQkvKiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHJlc3VtZSB0aGUgY2FsbGluZyB0YXNrLiAqLw0KMTQyNDogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHhUYXNrVG9SZXN1bWUgKTsNCkJGRDA0MEY4ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDQwRkMgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQxMTIKQkZEMDQxMDAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDQxMDIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNDEwNCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwNDEwNiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDQxMDggIDA1OTAzMEEwICAgQURESVUgQTEsIFpFUk8sIDE0MjQKQkZEMDQxMEEgICAgICAwNTkwICAgQUREVSBWMSwgUzAsIFMxCkJGRDA0MTBDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNDEwRSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNDExMCAgICAgIDBDMDAgICBOT1AKMTQyNTogICAgICAgICAgICAgICAgDQoxNDI2OiAgICAgICAgICAgICAgICAJCS8qIFRoZSBwYXJhbWV0ZXIgY2Fubm90IGJlIE5VTEwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZXN1bWUgdGhlDQoxNDI3OiAgICAgICAgICAgICAgICAJCWN1cnJlbnRseSBleGVjdXRpbmcgdGFzay4gKi8NCjE0Mjg6ICAgICAgICAgICAgICAgIAkJaWYoICggcHhUQ0IgIT0gTlVMTCApICYmICggcHhUQ0IgIT0gcHhDdXJyZW50VENCICkgKQ0KQkZEMDQxMTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNDExNiAgMDA1NjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNDFDNgpCRkQwNDExQSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNDExRSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA0MTIyICAwMDUwOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDQxQzYKQkZEMDQxMjQgIDBDMDAwMDUwICAgU0xMIFYwLCBTMCwgMQpCRkQwNDEyNiAgICAgIDBDMDAgICBOT1AKMTQyOTogICAgICAgICAgICAgICAgCQl7DQoxNDMwOiAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA0MTI4ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDA0MTJBICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwNDEyQyAgICAgIDBDMDAgICBOT1AKMTQzMTogICAgICAgICAgICAgICAgCQkJew0KMTQzMjogICAgICAgICAgICAgICAgCQkJCWlmKCBwcnZUYXNrSXNUYXNrU3VzcGVuZGVkKCBweFRDQiApID09IHBkVFJVRSApDQpCRkQwNDEyRSAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpCkJGRDA0MTMyICAzMzZFNzdFOCAgIEpBTFMgcHJ2VGFza0lzVGFza1N1c3BlbmRlZApCRkQwNDEzNCAgMEMwMDMzNkUgICBBRERJVSBLMSwgVDYsIDMwNzIKQkZEMDQxMzYgICAgICAwQzAwICAgTk9QCkJGRDA0MTM4ICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDA0MTNBICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0MTNDICAwMDQwQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDQxQzAKQkZEMDQxM0UgIDBDMDAwMDQwICAgU0xMIFYwLCBaRVJPLCAxCkJGRDA0MTQwICAgICAgMEMwMCAgIE5PUAoxNDMzOiAgICAgICAgICAgICAgICAJCQkJew0KMTQzNDogICAgICAgICAgICAgICAgCQkJCQl0cmFjZVRBU0tfUkVTVU1FKCBweFRDQiApOw0KMTQzNTogICAgICAgICAgICAgICAgDQoxNDM2OiAgICAgICAgICAgICAgICAJCQkJCS8qIEFzIHdlIGFyZSBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2UgY2FuIGFjY2VzcyB0aGUgcmVhZHkNCjE0Mzc6ICAgICAgICAgICAgICAgIAkJCQkJbGlzdHMgZXZlbiBpZiB0aGUgc2NoZWR1bGVyIGlzIHN1c3BlbmRlZC4gKi8NCjE0Mzg6ICAgICAgICAgICAgICAgIAkJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDQxNDIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNDE0NiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDQxNDggICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDQxNEEgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUKQkZEMDQxNEMgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQpCRkQwNDE0RSAgICAgIDBDMDAgICBOT1AKMTQzOTogICAgICAgICAgICAgICAgCQkJCQlwcnZBZGRUYXNrVG9SZWFkeUxpc3QoIHB4VENCICk7DQpCRkQwNDE1MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA0MTU0ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDQxNTYgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDQxNTggIDE4MTAwMDYyICAgU0xMViBWMSwgVjAsIFYxCkJGRDA0MTVBICBGQzVDMTgxMCAgIFNCIFpFUk8sIC05MzIoUzApCkJGRDA0MTVDICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApCkJGRDA0MTYwICAgICAgNDREMyAgIE9SMTYgVjAsIFYxCkJGRDA0MTYyICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApCkJGRDA0MTY2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDQxNkEgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwNDE2QyAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDA0MTZFICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDIKQkZEMDQxNzAgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxCkJGRDA0MTcyICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA0MTc0ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDQxNzYgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjAKQkZEMDQxN0EgICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwCkJGRDA0MTdDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDQxODAgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA0MTgyICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDA0MTg0ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA0MTg2ICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQKQkZEMDQxODggIDBDMDAzRTRBICAgTEggUzIsIDMwNzIoVDIpCkJGRDA0MThBICAgICAgMEMwMCAgIE5PUAoxNDQwOiAgICAgICAgICAgICAgICANCjE0NDE6ICAgICAgICAgICAgICAgIAkJCQkJLyogV2UgbWF5IGhhdmUganVzdCByZXN1bWVkIGEgaGlnaGVyIHByaW9yaXR5IHRhc2suICovDQoxNDQyOiAgICAgICAgICAgICAgICAJCQkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA+PSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKQ0KQkZEMDQxOEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNDE5MCAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApCkJGRDA0MTkyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA0MTk2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDQxOTggIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA0MTlBICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0NgpCRkQwNDE5QyAgMDAxMDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDFDMAoxNDQzOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE0NDQ6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoaXMgeWllbGQgbWF5IG5vdCBjYXVzZSB0aGUgdGFzayBqdXN0IHJlc3VtZWQgdG8gcnVuLA0KMTQ0NTogICAgICAgICAgICAgICAgCQkJCQkJYnV0IHdpbGwgbGVhdmUgdGhlIGxpc3RzIGluIHRoZSBjb3JyZWN0IHN0YXRlIGZvciB0aGUNCjE0NDY6ICAgICAgICAgICAgICAgIAkJCQkJCW5leHQgeWllbGQuICovDQoxNDQ3OiAgICAgICAgICAgICAgICAJCQkJCQl0YXNrWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KQkZEMDQxQTAgIDRFNTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQpCRkQwNDFBMiAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01CkJGRDA0MUE0ICAgICAgMEMwMCAgIE5PUApCRkQwNDFBNiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCkJGRDA0MUFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQxQUUgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDA0MUIyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKQkZEMDQxQjYgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQpCRkQwNDFCQSAgNEU2Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UKQkZEMDQxQkMgICAgICA0RTY2ICAgQURESVUgUzMsIFMzLCAzCkJGRDA0MUJFICAgICAgMEMwMCAgIE5PUAoxNDQ4OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0NDk6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTQ1MDogICAgICAgICAgICAgICAgCQkJCQl7DQoxNDUxOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDUyOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0NTM6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDU0OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTQ1NTogICAgICAgICAgICAgICAgCQkJCXsNCjE0NTY6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTQ1NzogICAgICAgICAgICAgICAgCQkJCX0NCjE0NTg6ICAgICAgICAgICAgICAgIAkJCX0NCjE0NTk6ICAgICAgICAgICAgICAgIAkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwNDFDMCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA0MUMyICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1OUM2CkJGRDA0MUM0ICAgICAgMEMwMCAgIE5PUAoxNDYwOiAgICAgICAgICAgICAgICAJCX0NCjE0NjE6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTQ2MjogICAgICAgICAgICAgICAgCQl7DQoxNDYzOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDY0OiAgICAgICAgICAgICAgICAJCX0NCjE0NjU6ICAgICAgICAgICAgICAgIAl9DQpCRkQwNDFDNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNDFDOCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA0MUNBICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDQxQ0MgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNDFDRSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA0MUQwICAgICAgMEMwMCAgIE5PUAoxNDY2OiAgICAgICAgICAgICAgICANCjE0Njc6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KMTQ2ODogICAgICAgICAgICAgICAgDQoxNDY5OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE0NzA6ICAgICAgICAgICAgICAgIA0KMTQ3MTogICAgICAgICAgICAgICAgI2lmICggKCBJTkNMVURFX3hUYXNrUmVzdW1lRnJvbUlTUiA9PSAxICkgJiYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkgKQ0KMTQ3MjogICAgICAgICAgICAgICAgDQoxNDczOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGFza1Jlc3VtZUZyb21JU1IoIFRhc2tIYW5kbGVfdCB4VGFza1RvUmVzdW1lICkNCjE0NzQ6ICAgICAgICAgICAgICAgIAl7DQpCRkQwNDFENCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwNDFENiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDA0MUQ4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDQxREEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDQxREMgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQoxNDc1OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4WWllbGRSZXF1aXJlZCA9IHBkRkFMU0U7DQpCRkQwNDFFMCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMTQ3NjogICAgICAgICAgICAgICAgCVRDQl90ICogY29uc3QgcHhUQ0IgPSAoIFRDQl90ICogKSB4VGFza1RvUmVzdW1lOw0KQkZEMDQxRTQgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwNDFFOCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjE0Nzc6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KMTQ3ODogICAgICAgICAgICAgICAgDQoxNDc5OiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRhc2tUb1Jlc3VtZSApOw0KQkZEMDQxRUMgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwNDFGMCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDIwNgpCRkQwNDFGNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNDFGNiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA0MUY4ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDA0MUZBICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwNDFGQyAgMDVDNzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTQ3OQpCRkQwNDFGRSAgICAgIDA1QzcgICBTVUJVIFYxLCBWMSwgQTAKQkZEMDQyMDAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA0MjAyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA0MjA0ICAgICAgMEMwMCAgIE5PUAoxNDgwOiAgICAgICAgICAgICAgICANCjE0ODE6ICAgICAgICAgICAgICAgIAkJLyogUlRPUyBwb3J0cyB0aGF0IHN1cHBvcnQgaW50ZXJydXB0IG5lc3RpbmcgaGF2ZSB0aGUgY29uY2VwdCBvZiBhDQoxNDgyOiAgICAgICAgICAgICAgICAJCW1heGltdW0Jc3lzdGVtIGNhbGwgKG9yIG1heGltdW0gQVBJIGNhbGwpIGludGVycnVwdCBwcmlvcml0eS4NCjE0ODM6ICAgICAgICAgICAgICAgIAkJSW50ZXJydXB0cyB0aGF0IGFyZQlhYm92ZSB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eSBhcmUga2VlcA0KMTQ4NDogICAgICAgICAgICAgICAgCQlwZXJtYW5lbnRseSBlbmFibGVkLCBldmVuIHdoZW4gdGhlIFJUT1Mga2VybmVsIGlzIGluIGEgY3JpdGljYWwgc2VjdGlvbiwNCjE0ODU6ICAgICAgICAgICAgICAgIAkJYnV0IGNhbm5vdCBtYWtlIGFueSBjYWxscyB0byBGcmVlUlRPUyBBUEkgZnVuY3Rpb25zLiAgSWYgY29uZmlnQVNTRVJUKCkNCjE0ODY6ICAgICAgICAgICAgICAgIAkJaXMgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIHRoZW4NCjE0ODc6ICAgICAgICAgICAgICAgIAkJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbg0KMTQ4ODogICAgICAgICAgICAgICAgCQlmYWlsdXJlIGlmIGEgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCB0aGF0IGhhcw0KMTQ4OTogICAgICAgICAgICAgICAgCQliZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYWJvdmUgdGhlIGNvbmZpZ3VyZWQgbWF4aW11bSBzeXN0ZW0gY2FsbA0KMTQ5MDogICAgICAgICAgICAgICAgCQlwcmlvcml0eS4gIE9ubHkgRnJlZVJUT1MgZnVuY3Rpb25zIHRoYXQgZW5kIGluIEZyb21JU1IgY2FuIGJlIGNhbGxlZA0KMTQ5MTogICAgICAgICAgICAgICAgCQlmcm9tIGludGVycnVwdHMJdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhdCBvciAobG9naWNhbGx5KQ0KMTQ5MjogICAgICAgICAgICAgICAgCQliZWxvdyB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICBGcmVlUlRPUyBtYWludGFpbnMgYQ0KMTQ5MzogICAgICAgICAgICAgICAgCQlzZXBhcmF0ZSBpbnRlcnJ1cHQgc2FmZSBBUEkgdG8gZW5zdXJlIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KMTQ5NDogICAgICAgICAgICAgICAgCQlzaW1wbGUgYXMgcG9zc2libGUuICBNb3JlIGluZm9ybWF0aW9uIChhbGJlaXQgQ29ydGV4LU0gc3BlY2lmaWMpIGlzDQoxNDk1OiAgICAgICAgICAgICAgICAJCXByb3ZpZGVkIG9uIHRoZSBmb2xsb3dpbmcgbGluazoNCjE0OTY6ICAgICAgICAgICAgICAgIAkJaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCAqLw0KMTQ5NzogICAgICAgICAgICAgICAgCQlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCk7DQoxNDk4OiAgICAgICAgICAgICAgICANCjE0OTk6ICAgICAgICAgICAgICAgIAkJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDA0MjA2ICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDQyMEEgICAgICAwQzAwICAgTk9QCkJGRDA0MjBDICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMTUwMDogICAgICAgICAgICAgICAgCQl7DQoxNTAxOiAgICAgICAgICAgICAgICAJCQlpZiggcHJ2VGFza0lzVGFza1N1c3BlbmRlZCggcHhUQ0IgKSA9PSBwZFRSVUUgKQ0KQkZEMDQyMTAgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQpCRkQwNDIxNCAgMzM2RTc3RTggICBKQUxTIHBydlRhc2tJc1Rhc2tTdXNwZW5kZWQKQkZEMDQyMTYgIDBDMDAzMzZFICAgQURESVUgSzEsIFQ2LCAzMDcyCkJGRDA0MjE4ICAgICAgMEMwMCAgIE5PUApCRkQwNDIxQSAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMApCRkQwNDIxQyAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwNDIxRSAgMDA0NEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA0MkFBCkJGRDA0MjIwICAwQzAwMDA0NCAgIFNMTCBWMCwgQTAsIDEKQkZEMDQyMjIgICAgICAwQzAwICAgTk9QCjE1MDI6ICAgICAgICAgICAgICAgIAkJCXsNCjE1MDM6ICAgICAgICAgICAgICAgIAkJCQl0cmFjZVRBU0tfUkVTVU1FX0ZST01fSVNSKCBweFRDQiApOw0KMTUwNDogICAgICAgICAgICAgICAgDQoxNTA1OiAgICAgICAgICAgICAgICAJCQkJLyogQ2hlY2sgdGhlIHJlYWR5IGxpc3RzIGNhbiBiZSBhY2Nlc3NlZC4gKi8NCjE1MDY6ICAgICAgICAgICAgICAgIAkJCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDQyMjQgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkKQkZEMDQyMjggIDAwMzQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQyOTQKMTUwNzogICAgICAgICAgICAgICAgCQkJCXsNCjE1MDg6ICAgICAgICAgICAgICAgIAkJCQkJLyogUmVhZHkgbGlzdHMgY2FuIGJlIGFjY2Vzc2VkIHNvIG1vdmUgdGhlIHRhc2sgZnJvbSB0aGUNCjE1MDk6ICAgICAgICAgICAgICAgIAkJCQkJc3VzcGVuZGVkIGxpc3QgdG8gdGhlIHJlYWR5IGxpc3QgZGlyZWN0bHkuICovDQoxNTEwOiAgICAgICAgICAgICAgICAJCQkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA+PSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKQ0KQkZEMDQyMkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDIzMCAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApCkJGRDA0MjMyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA0MjM2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDQyMzggIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA0MjNBICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0NgpCRkQwNDIzQyAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDI0NgoxNTExOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE1MTI6ICAgICAgICAgICAgICAgIAkJCQkJCXhZaWVsZFJlcXVpcmVkID0gcGRUUlVFOw0KQkZEMDQyNDAgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDQyNDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxNTEzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE1MTQ6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTUxNTogICAgICAgICAgICAgICAgCQkJCQl7DQoxNTE2OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNTE3OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE1MTg6ICAgICAgICAgICAgICAgIA0KMTUxOTogICAgICAgICAgICAgICAgCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNDI0NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0MjRBICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwNDI0QyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNDI0RSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwNDI1MCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDA0MjUyICAgICAgMEMwMCAgIE5PUAoxNTIwOiAgICAgICAgICAgICAgICAJCQkJCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhUQ0IgKTsNCkJGRDA0MjU0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQyNTggICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwNDI1QSAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNDI1QyAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjEKQkZEMDQyNUUgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkKQkZEMDQyNjAgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDQyNjQgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDQyNjYgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKQkZEMDQyNkEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDI2RSAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDA0MjcwICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDQyNzIgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwNDI3NCAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDQyNzYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDQyNzggIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwNDI3QSAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwNDI3RSAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDQyODAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDI4NCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDQyODYgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDQyODggICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDQyOEEgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwNDI4QyAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDQyOEUgICAgICAwQzAwICAgTk9QCkJGRDA0MjkwICAgICAgQ0MwQyAgIEIgMHhCRkQwNDJBQQpCRkQwNDI5MiAgICAgIDBDMDAgICBOT1AKMTUyMTogICAgICAgICAgICAgICAgCQkJCX0NCjE1MjI6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxNTIzOiAgICAgICAgICAgICAgICAJCQkJew0KMTUyNDogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgZGVsYXllZCBvciByZWFkeSBsaXN0cyBjYW5ub3QgYmUgYWNjZXNzZWQgc28gdGhlIHRhc2sNCjE1MjU6ICAgICAgICAgICAgICAgIAkJCQkJaXMgaGVsZCBpbiB0aGUgcGVuZGluZyByZWFkeSBsaXN0IHVudGlsIHRoZSBzY2hlZHVsZXIgaXMNCjE1MjY6ICAgICAgICAgICAgICAgIAkJCQkJdW5zdXNwZW5kZWQuICovDQoxNTI3OiAgICAgICAgICAgICAgICAJCQkJCXZMaXN0SW5zZXJ0RW5kKCAmKCB4UGVuZGluZ1JlYWR5TGlzdCApLCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDQyOTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDI5NiAgNkQyQzAwMTQgICBFWFQgWkVSTywgUzQsIDIwLCAxNApCRkQwNDI5OCAgICAgIDZEMkMgICBBRERJVSBWMCwgVjAsIDI0CkJGRDA0MjlBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDA0MjlDICAzMDgzQkZEMiAgIExEQzEgRjMwLCAxMjQxOShTMikKQkZEMDQyOUUgIDgwRDAzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NjAKQkZEMDQyQTIgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDQyQTQgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwNDJBNiAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDQyQTggICAgICAwQzAwICAgTk9QCjE1Mjg6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNTI5OiAgICAgICAgICAgICAgICAJCQl9DQoxNTMwOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxNTMxOiAgICAgICAgICAgICAgICAJCQl7DQoxNTMyOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTUzMzogICAgICAgICAgICAgICAgCQkJfQ0KMTUzNDogICAgICAgICAgICAgICAgCQl9DQoxNTM1OiAgICAgICAgICAgICAgICAJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDQyQUEgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQpCRkQwNDJBRSAgNEQ1RTc3RTggICBKQUxTIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUgpCRkQwNDJCMCAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xCkJGRDA0MkIyICAgICAgMEMwMCAgIE5PUAoxNTM2OiAgICAgICAgICAgICAgICANCjE1Mzc6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhZaWVsZFJlcXVpcmVkOw0KQkZEMDQyQjQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQoxNTM4OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDQyQjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDQyQkEgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwNDJCQyAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDA0MkJFICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDQyQzAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNDJDMiAgICAgIDBDMDAgICBOT1AKMTUzOTogICAgICAgICAgICAgICAgDQoxNTQwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogKCAoIElOQ0xVREVfeFRhc2tSZXN1bWVGcm9tSVNSID09IDEgKSAmJiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKSApICovDQoxNTQxOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE1NDI6ICAgICAgICAgICAgICAgIA0KMTU0MzogICAgICAgICAgICAgICAgdm9pZCB2VGFza1N0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCjE1NDQ6ICAgICAgICAgICAgICAgIHsNCkJGRDA0QUMwICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4CkJGRDA0QUMyICAgICAgQ0JFQiAgIFNXIFJBLCA0NChTUCkKQkZEMDRBQzQgICAgICBDQkNBICAgU1cgUzgsIDQwKFNQKQpCRkQwNEFDNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxNTQ1OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoxNTQ2OiAgICAgICAgICAgICAgICANCjE1NDc6ICAgICAgICAgICAgICAgIAkvKiBBZGQgdGhlIGlkbGUgdGFzayBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KMTU0ODogICAgICAgICAgICAgICAgCSNpZiAoIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSA9PSAxICkNCjE1NDk6ICAgICAgICAgICAgICAgIAl7DQoxNTUwOiAgICAgICAgICAgICAgICAJCS8qIENyZWF0ZSB0aGUgaWRsZSB0YXNrLCBzdG9yaW5nIGl0cyBoYW5kbGUgaW4geElkbGVUYXNrSGFuZGxlIHNvIGl0IGNhbg0KMTU1MTogICAgICAgICAgICAgICAgCQliZSByZXR1cm5lZCBieSB0aGUgeFRhc2tHZXRJZGxlVGFza0hhbmRsZSgpIGZ1bmN0aW9uLiAqLw0KMTU1MjogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0geFRhc2tDcmVhdGUoIHBydklkbGVUYXNrLCAiSURMRSIsIHRza0lETEVfU1RBQ0tfU0laRSwgKCB2b2lkICogKSBOVUxMLCAoIHRza0lETEVfUFJJT1JJVFkgfCBwb3J0UFJJVklMRUdFX0JJVCApLCAmeElkbGVUYXNrSGFuZGxlICk7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24sIGp1c3RpZmllZCBhcyBpdCBpcyBub3QgYSByZWR1bmRhbnQgZXhwbGljaXQgY2FzdCB0byBhbGwgc3VwcG9ydGVkIGNvbXBpbGVycy4gKi8NCjE1NTM6ICAgICAgICAgICAgICAgIAl9DQoxNTU0OiAgICAgICAgICAgICAgICAJI2Vsc2UNCjE1NTU6ICAgICAgICAgICAgICAgIAl7DQoxNTU2OiAgICAgICAgICAgICAgICAJCS8qIENyZWF0ZSB0aGUgaWRsZSB0YXNrIHdpdGhvdXQgc3RvcmluZyBpdHMgaGFuZGxlLiAqLw0KMTU1NzogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0geFRhc2tDcmVhdGUoIHBydklkbGVUYXNrLCAiSURMRSIsIHRza0lETEVfU1RBQ0tfU0laRSwgKCB2b2lkICogKSBOVUxMLCAoIHRza0lETEVfUFJJT1JJVFkgfCBwb3J0UFJJVklMRUdFX0JJVCApLCBOVUxMICk7ICAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uLCBqdXN0aWZpZWQgYXMgaXQgaXMgbm90IGEgcmVkdW5kYW50IGV4cGxpY2l0IGNhc3QgdG8gYWxsIHN1cHBvcnRlZCBjb21waWxlcnMuICovDQpCRkQwNEFDOCAgICAgIEM4MDQgICBTVyBaRVJPLCAxNihTUCkKQkZEMDRBQ0EgICAgICBDODA1ICAgU1cgWkVSTywgMjAoU1ApCkJGRDA0QUNDICAgICAgQzgwNiAgIFNXIFpFUk8sIDI0KFNQKQpCRkQwNEFDRSAgICAgIEM4MDcgICBTVyBaRVJPLCAyOChTUCkKQkZEMDRBRDAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDRBRDIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNEFENCAgOEJDNTMwODIgICBBRERJVSBBMCwgVjAsIC0yOTc1NQpCRkQwNEFENiAgICAgIDhCQzUgICBTQiBBMywgNShBMCkKQkZEMDRBRDggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDRBREEgIDMwQTJCRkQxICAgTERDMSBGMzAsIDEyNDUwKFMxKQpCRkQwNEFEQyAgOTgyODMwQTIgICBBRERJVSBBMSwgVjAsIC0yNjU4NApCRkQwNEFERSAgMzBDMDk4MjggICBTV0MxIEYxLCAxMjQ4MChUMCkKQkZEMDRBRTAgIDAwQkUzMEMwICAgQURESVUgQTIsIFpFUk8sIDE5MApCRkQwNEFFNCAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPCkJGRDA0QUU2ICAwQTlBNzdFOCAgIEpBTFMgeFRhc2tHZW5lcmljQ3JlYXRlCkJGRDA0QUU4ICAgICAgMEE5QSAgIExCVSBBMSwgMTAoUzEpCkJGRDA0QUVBICAgICAgMEMwMCAgIE5PUApCRkQwNEFFQyAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpCjE1NTg6ICAgICAgICAgICAgICAgIAl9DQoxNTU5OiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSAqLw0KMTU2MDogICAgICAgICAgICAgICAgDQoxNTYxOiAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkNCjE1NjI6ICAgICAgICAgICAgICAgIAl7DQoxNTYzOiAgICAgICAgICAgICAgICAJCWlmKCB4UmV0dXJuID09IHBkUEFTUyApDQpCRkQwNEFGMCAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDA0QUY0ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0QUY2ICAwMDA2QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDRCMDYKQkZEMDRBRjggIDBDMDAwMDA2ICAgU0xMIFpFUk8sIEEyLCAxCkJGRDA0QUZBICAgICAgMEMwMCAgIE5PUAoxNTY0OiAgICAgICAgICAgICAgICAJCXsNCjE1NjU6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB4VGltZXJDcmVhdGVUaW1lclRhc2soKTsNCkJGRDA0QUZDICAzRDM2NzdFOCAgIEpBTFMgeFRpbWVyQ3JlYXRlVGltZXJUYXNrCkJGRDA0QUZFICAwQzAwM0QzNiAgIExIIFQxLCAzMDcyKFM2KQpCRkQwNEIwMCAgICAgIDBDMDAgICBOT1AKQkZEMDRCMDIgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQoxNTY2OiAgICAgICAgICAgICAgICAJCX0NCjE1Njc6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTU2ODogICAgICAgICAgICAgICAgCQl7DQoxNTY5OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNTcwOiAgICAgICAgICAgICAgICAJCX0NCjE1NzE6ICAgICAgICAgICAgICAgIAl9DQoxNTcyOiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIGNvbmZpZ1VTRV9USU1FUlMgKi8NCjE1NzM6ICAgICAgICAgICAgICAgIA0KMTU3NDogICAgICAgICAgICAgICAgCWlmKCB4UmV0dXJuID09IHBkUEFTUyApDQpCRkQwNEIwNiAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDA0QjBBICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0QjBDICAwMDMxQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDRCNzIKQkZEMDRCMEUgIDBDMDAwMDMxICAgU0xMIEFULCBTMSwgMQpCRkQwNEIxMCAgICAgIDBDMDAgICBOT1AKMTU3NTogICAgICAgICAgICAgICAgCXsNCjE1NzY6ICAgICAgICAgICAgICAgIAkJLyogSW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZiBoZXJlLCB0byBlbnN1cmUgYSB0aWNrIGRvZXMgbm90IG9jY3VyDQoxNTc3OiAgICAgICAgICAgICAgICAJCWJlZm9yZSBvciBkdXJpbmcgdGhlIGNhbGwgdG8geFBvcnRTdGFydFNjaGVkdWxlcigpLiAgVGhlIHN0YWNrcyBvZg0KMTU3ODogICAgICAgICAgICAgICAgCQl0aGUgY3JlYXRlZCB0YXNrcyBjb250YWluIGEgc3RhdHVzIHdvcmQgd2l0aCBpbnRlcnJ1cHRzIHN3aXRjaGVkIG9uDQoxNTc5OiAgICAgICAgICAgICAgICAJCXNvIGludGVycnVwdHMgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCByZS1lbmFibGVkIHdoZW4gdGhlIGZpcnN0IHRhc2sNCjE1ODA6ICAgICAgICAgICAgICAgIAkJc3RhcnRzIHRvIHJ1bi4gKi8NCjE1ODE6ICAgICAgICAgICAgICAgIAkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KQkZEMDRCMTIgIDRFMzY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBTdGF0dXMKQkZEMDRCMTQgICAgICA0RTM2ICAgQURESVUgUzEsIFMxLCAtNQpCRkQwNEIxNiAgICAgIDBDMDAgICBOT1AKQkZEMDRCMTggIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQpCRkQwNEIxQyAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpCkJGRDA0QjIwICAwMDAxNDFBMiAgIExVSSBWMCwgMHgxCkJGRDA0QjI0ICBGQzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xMDI0CkJGRDA0QjI2ICA0NDkzRkMwMCAgIExXIFpFUk8sIDE3NTU1KFpFUk8pCkJGRDA0QjI4ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwNEIyQSAgNTA0MDAwNDIgICBTUkwgVjAsIFYwLCAxMApCRkQwNEIyQyAgQjA0MjUwNDAgICBPUkkgVjAsIFpFUk8sIC0yMDQxNApCRkQwNEIyRSAgMDAwM0IwNDIgICBTTFRJVSBWMCwgVjAsIDMKQkZEMDRCMzIgIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDRCNTgKQkZEMDRCMzYgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQpCRkQwNEIzQSAgRkZGRTQxQTIgICBMVUkgVjAsIDB4RkZGRQpCRkQwNEIzQyAgNTA0MkZGRkUgICBMVyBSQSwgMjA1NDYoUzgpCkJGRDA0QjNFICAwM0ZGNTA0MiAgIE9SSSBWMCwgVjAsIDEwMjMKQkZEMDRCNDIgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA0QjQ0ICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkKQkZEMDRCNDggIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwNEI0QyAgMEMwMDUwNDIgICBPUkkgVjAsIFYwLCAzMDcyCkJGRDA0QjRFICAgICAgMEMwMCAgIE5PUApCRkQwNEI1MCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNEI1MiAgNEU0Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwU3RhdHVzCkJGRDA0QjU0ICAgICAgNEU0NiAgIEFERElVIFMyLCBTMiwgMwpCRkQwNEI1NiAgICAgIDBDMDAgICBOT1AKMTU4MjogICAgICAgICAgICAgICAgDQoxNTgzOiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UID09IDEgKQ0KMTU4NDogICAgICAgICAgICAgICAgCQl7DQoxNTg1OiAgICAgICAgICAgICAgICAJCQkvKiBTd2l0Y2ggTmV3bGliJ3MgX2ltcHVyZV9wdHIgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIF9yZWVudA0KMTU4NjogICAgICAgICAgICAgICAgCQkJc3RydWN0dXJlIHNwZWNpZmljIHRvIHRoZSB0YXNrIHRoYXQgd2lsbCBydW4gZmlyc3QuICovDQoxNTg3OiAgICAgICAgICAgICAgICAJCQlfaW1wdXJlX3B0ciA9ICYoIHB4Q3VycmVudFRDQi0+eE5ld0xpYl9yZWVudCApOw0KMTU4ODogICAgICAgICAgICAgICAgCQl9DQoxNTg5OiAgICAgICAgICAgICAgICAJCSNlbmRpZiAvKiBjb25maWdVU0VfTkVXTElCX1JFRU5UUkFOVCAqLw0KMTU5MDogICAgICAgICAgICAgICAgDQoxNTkxOiAgICAgICAgICAgICAgICAJCXhOZXh0VGFza1VuYmxvY2tUaW1lID0gcG9ydE1BWF9ERUxBWTsNCkJGRDA0QjU4ICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwNEI1QSAgODA1OEY4NUMgICBTVyBWMCwgLTMyNjgwKEdQKQoxNTkyOiAgICAgICAgICAgICAgICAJCXhTY2hlZHVsZXJSdW5uaW5nID0gcGRUUlVFOw0KQkZEMDRCNUUgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDRCNjAgIDgwNDRGODVDICAgU1cgVjAsIC0zMjcwMChHUCkKMTU5MzogICAgICAgICAgICAgICAgCQl4VGlja0NvdW50ID0gKCBUaWNrVHlwZV90ICkgMFU7DQpCRkQwNEI2NCAgODAzQ0Y4MUMgICBTVyBaRVJPLCAtMzI3MDgoR1ApCjE1OTQ6ICAgICAgICAgICAgICAgIA0KMTU5NTogICAgICAgICAgICAgICAgCQkvKiBJZiBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyBpcyBkZWZpbmVkIHRoZW4gdGhlIGZvbGxvd2luZw0KMTU5NjogICAgICAgICAgICAgICAgCQltYWNybyBtdXN0IGJlIGRlZmluZWQgdG8gY29uZmlndXJlIHRoZSB0aW1lci9jb3VudGVyIHVzZWQgdG8gZ2VuZXJhdGUNCjE1OTc6ICAgICAgICAgICAgICAgIAkJdGhlIHJ1biB0aW1lIGNvdW50ZXIgdGltZSBiYXNlLiAqLw0KMTU5ODogICAgICAgICAgICAgICAgCQlwb3J0Q09ORklHVVJFX1RJTUVSX0ZPUl9SVU5fVElNRV9TVEFUUygpOw0KMTU5OTogICAgICAgICAgICAgICAgDQoxNjAwOiAgICAgICAgICAgICAgICAJCS8qIFNldHRpbmcgdXAgdGhlIHRpbWVyIHRpY2sgaXMgaGFyZHdhcmUgc3BlY2lmaWMgYW5kIHRodXMgaW4gdGhlDQoxNjAxOiAgICAgICAgICAgICAgICAJCXBvcnRhYmxlIGludGVyZmFjZS4gKi8NCjE2MDI6ICAgICAgICAgICAgICAgIAkJaWYoIHhQb3J0U3RhcnRTY2hlZHVsZXIoKSAhPSBwZEZBTFNFICkNCkJGRDA0QjY4ICAzNDRDNzdFOCAgIEpBTFMgeFBvcnRTdGFydFNjaGVkdWxlcgpCRkQwNEI2QSAgMEMwMDM0NEMgICBMSFUgVjAsIDMwNzIoVDQpCkJGRDA0QjZDICAgICAgMEMwMCAgIE5PUApCRkQwNEI2RSAgICAgIENDMEUgICBCIDB4QkZEMDRCOEMKQkZEMDRCNzAgICAgICAwQzAwICAgTk9QCjE2MDM6ICAgICAgICAgICAgICAgIAkJew0KMTYwNDogICAgICAgICAgICAgICAgCQkJLyogU2hvdWxkIG5vdCByZWFjaCBoZXJlIGFzIGlmIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZyB0aGUNCjE2MDU6ICAgICAgICAgICAgICAgIAkJCWZ1bmN0aW9uIHdpbGwgbm90IHJldHVybi4gKi8NCjE2MDY6ICAgICAgICAgICAgICAgIAkJfQ0KMTYwNzogICAgICAgICAgICAgICAgCQllbHNlDQoxNjA4OiAgICAgICAgICAgICAgICAJCXsNCjE2MDk6ICAgICAgICAgICAgICAgIAkJCS8qIFNob3VsZCBvbmx5IHJlYWNoIGhlcmUgaWYgYSB0YXNrIGNhbGxzIHhUYXNrRW5kU2NoZWR1bGVyKCkuICovDQoxNjEwOiAgICAgICAgICAgICAgICAJCX0NCjE2MTE6ICAgICAgICAgICAgICAgIAl9DQoxNjEyOiAgICAgICAgICAgICAgICAJZWxzZQ0KMTYxMzogICAgICAgICAgICAgICAgCXsNCjE2MTQ6ICAgICAgICAgICAgICAgIAkJLyogVGhpcyBsaW5lIHdpbGwgb25seSBiZSByZWFjaGVkIGlmIHRoZSBrZXJuZWwgY291bGQgbm90IGJlIHN0YXJ0ZWQsDQoxNjE1OiAgICAgICAgICAgICAgICAJCWJlY2F1c2UgdGhlcmUgd2FzIG5vdCBlbm91Z2ggRnJlZVJUT1MgaGVhcCB0byBjcmVhdGUgdGhlIGlkbGUgdGFzaw0KMTYxNjogICAgICAgICAgICAgICAgCQlvciB0aGUgdGltZXIgdGFzay4gKi8NCjE2MTc6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB4UmV0dXJuICk7DQpCRkQwNEI3MiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA0Qjc2ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0QjhDCkJGRDA0QjdBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0QjdDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDRCN0UgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDRCODAgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA0QjgyICAwNjUxMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjE3CkJGRDA0Qjg0ICAgICAgMDY1MSAgIFNVQlUgQTAsIFMwLCBBMQpCRkQwNEI4NiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDRCODggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDRCOEEgICAgICAwQzAwICAgTk9QCjE2MTg6ICAgICAgICAgICAgICAgIAl9DQoxNjE5OiAgICAgICAgICAgICAgICB9DQpCRkQwNEI4QyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNEI4RSAgICAgIDRCRUIgICBMVyBSQSwgNDQoU1ApCkJGRDA0QjkwICAgICAgNEJDQSAgIExXIFM4LCA0MChTUCkKQkZEMDRCOTIgICAgICA0QzE5ICAgQURESVUgU1AsIFNQLCA0OApCRkQwNEI5NCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA0Qjk2ICAgICAgMEMwMCAgIE5PUAoxNjIwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2MjE6ICAgICAgICAgICAgICAgIA0KMTYyMjogICAgICAgICAgICAgICAgdm9pZCB2VGFza0VuZFNjaGVkdWxlciggdm9pZCApDQoxNjIzOiAgICAgICAgICAgICAgICB7DQpCRkQwN0YwMCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwN0YwMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA3RjA0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDdGMDYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMTYyNDogICAgICAgICAgICAgICAgCS8qIFN0b3AgdGhlIHNjaGVkdWxlciBpbnRlcnJ1cHRzIGFuZCBjYWxsIHRoZSBwb3J0YWJsZSBzY2hlZHVsZXIgZW5kDQoxNjI1OiAgICAgICAgICAgICAgICAJcm91dGluZSBzbyB0aGUgb3JpZ2luYWwgSVNScyBjYW4gYmUgcmVzdG9yZWQgaWYgbmVjZXNzYXJ5LiAgVGhlIHBvcnQNCjE2MjY6ICAgICAgICAgICAgICAgIAlsYXllciBtdXN0IGVuc3VyZSBpbnRlcnJ1cHRzIGVuYWJsZQliaXQgaXMgbGVmdCBpbiB0aGUgY29ycmVjdCBzdGF0ZS4gKi8NCjE2Mjc6ICAgICAgICAgICAgICAgIAlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQpCRkQwN0YwOCAgNEUzNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cwpCRkQwN0YwQSAgICAgIDRFMzYgICBBRERJVSBTMSwgUzEsIC01CkJGRDA3RjBDICAgICAgMEMwMCAgIE5PUApCRkQwN0YwRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA3RjEyICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDdGMTYgIDAwMDE0MUEyICAgTFVJIFYwLCAweDEKQkZEMDdGMUEgIEZDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTEwMjQKQkZEMDdGMUMgIDQ0OTNGQzAwICAgTFcgWkVSTywgMTc1NTUoWkVSTykKQkZEMDdGMUUgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA3RjIwICA1MDQwMDA0MiAgIFNSTCBWMCwgVjAsIDEwCkJGRDA3RjIyICBCMDQyNTA0MCAgIE9SSSBWMCwgWkVSTywgLTIwNDE0CkJGRDA3RjI0ICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMwpCRkQwN0YyOCAgMDAxMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0Y0RQpCRkQwN0YyQyAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA3RjMwICBGRkZFNDFBMiAgIExVSSBWMCwgMHhGRkZFCkJGRDA3RjMyICA1MDQyRkZGRSAgIExXIFJBLCAyMDU0NihTOCkKQkZEMDdGMzQgIDAzRkY1MDQyICAgT1JJIFYwLCBWMCwgMTAyMwpCRkQwN0YzOCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDdGM0EgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwN0YzRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA3RjQyICAwQzAwNTA0MiAgIE9SSSBWMCwgVjAsIDMwNzIKQkZEMDdGNDQgICAgICAwQzAwICAgTk9QCkJGRDA3RjQ2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA3RjQ4ICA0RTQ2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMKQkZEMDdGNEEgICAgICA0RTQ2ICAgQURESVUgUzIsIFMyLCAzCkJGRDA3RjRDICAgICAgMEMwMCAgIE5PUAoxNjI4OiAgICAgICAgICAgICAgICAJeFNjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KQkZEMDdGNEUgIDgwNDRGODFDICAgU1cgWkVSTywgLTMyNzAwKEdQKQoxNjI5OiAgICAgICAgICAgICAgICAJdlBvcnRFbmRTY2hlZHVsZXIoKTsNCkJGRDA3RjUyICA0QkQ0NzdFOCAgIEpBTFMgdlBvcnRFbmRTY2hlZHVsZXIKQkZEMDdGNTQgICAgICA0QkQ0ICAgTFcgUzgsIDgwKFNQKQpCRkQwN0Y1NiAgICAgIDBDMDAgICBOT1AKMTYzMDogICAgICAgICAgICAgICAgfQ0KQkZEMDdGNTggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDdGNUEgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwN0Y1QyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA3RjVFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDdGNjAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwN0Y2MiAgICAgIDBDMDAgICBOT1AKMTYzMTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2MzI6ICAgICAgICAgICAgICAgIA0KMTYzMzogICAgICAgICAgICAgICAgdm9pZCB2VGFza1N1c3BlbmRBbGwoIHZvaWQgKQ0KMTYzNDogICAgICAgICAgICAgICAgew0KQkZEMDlERTggICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOURFQSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlERUMgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMTYzNTogICAgICAgICAgICAgICAgCS8qIEEgY3JpdGljYWwgc2VjdGlvbiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlIHZhcmlhYmxlIGlzIG9mIHR5cGUNCjE2MzY6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90LiAgUGxlYXNlIHJlYWQgUmljaGFyZCBCYXJyeSdzIHJlcGx5IGluIHRoZSBmb2xsb3dpbmcgbGluayB0byBhDQoxNjM3OiAgICAgICAgICAgICAgICAJcG9zdCBpbiB0aGUgRnJlZVJUT1Mgc3VwcG9ydCBmb3J1bSBiZWZvcmUgcmVwb3J0aW5nIHRoaXMgYXMgYSBidWchIC0NCjE2Mzg6ICAgICAgICAgICAgICAgIAlodHRwOi8vZ29vLmdsL3d1NGFjciAqLw0KMTYzOTogICAgICAgICAgICAgICAgCSsrdXhTY2hlZHVsZXJTdXNwZW5kZWQ7DQpCRkQwOURFRSAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQpCRkQwOURGMiAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDEKQkZEMDlERjQgIDgwNUNGODVDICAgU1cgVjAsIC0zMjY3NihHUCkKMTY0MDogICAgICAgICAgICAgICAgfQ0KQkZEMDlERjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlERkEgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5REZDICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOURGRSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5RTAwICAgICAgMEMwMCAgIE5PUAoxNjQxOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTY0MjogICAgICAgICAgICAgICAgDQoxNjQzOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVElDS0xFU1NfSURMRSAhPSAwICkNCjE2NDQ6ICAgICAgICAgICAgICAgIA0KMTY0NTogICAgICAgICAgICAgICAgCXN0YXRpYyBUaWNrVHlwZV90IHBydkdldEV4cGVjdGVkSWRsZVRpbWUoIHZvaWQgKQ0KMTY0NjogICAgICAgICAgICAgICAgCXsNCjE2NDc6ICAgICAgICAgICAgICAgIAlUaWNrVHlwZV90IHhSZXR1cm47DQoxNjQ4OiAgICAgICAgICAgICAgICANCjE2NDk6ICAgICAgICAgICAgICAgIAkJaWYoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSA+IHRza0lETEVfUFJJT1JJVFkgKQ0KMTY1MDogICAgICAgICAgICAgICAgCQl7DQoxNjUxOiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gMDsNCjE2NTI6ICAgICAgICAgICAgICAgIAkJfQ0KMTY1MzogICAgICAgICAgICAgICAgCQllbHNlIGlmKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggJiggcHhSZWFkeVRhc2tzTGlzdHNbIHRza0lETEVfUFJJT1JJVFkgXSApICkgPiAxICkNCjE2NTQ6ICAgICAgICAgICAgICAgIAkJew0KMTY1NTogICAgICAgICAgICAgICAgCQkJLyogVGhlcmUgYXJlIG90aGVyIGlkbGUgcHJpb3JpdHkgdGFza3MgaW4gdGhlIHJlYWR5IHN0YXRlLiAgSWYNCjE2NTY6ICAgICAgICAgICAgICAgIAkJCXRpbWUgc2xpY2luZyBpcyB1c2VkIHRoZW4gdGhlIHZlcnkgbmV4dCB0aWNrIGludGVycnVwdCBtdXN0IGJlDQoxNjU3OiAgICAgICAgICAgICAgICAJCQlwcm9jZXNzZWQuICovDQoxNjU4OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gMDsNCjE2NTk6ICAgICAgICAgICAgICAgIAkJfQ0KMTY2MDogICAgICAgICAgICAgICAgCQllbHNlDQoxNjYxOiAgICAgICAgICAgICAgICAJCXsNCjE2NjI6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB4TmV4dFRhc2tVbmJsb2NrVGltZSAtIHhUaWNrQ291bnQ7DQoxNjYzOiAgICAgICAgICAgICAgICAJCX0NCjE2NjQ6ICAgICAgICAgICAgICAgIA0KMTY2NTogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjE2NjY6ICAgICAgICAgICAgICAgIAl9DQoxNjY3OiAgICAgICAgICAgICAgICANCjE2Njg6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVElDS0xFU1NfSURMRSAqLw0KMTY2OTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2NzA6ICAgICAgICAgICAgICAgIA0KMTY3MTogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGFza1Jlc3VtZUFsbCggdm9pZCApDQoxNjcyOiAgICAgICAgICAgICAgICB7DQpCRkQwMkIxQyAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwMkIxRSAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDAyQjIwICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDJCMjIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMTY3MzogICAgICAgICAgICAgICAgVENCX3QgKnB4VENCOw0KMTY3NDogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4QWxyZWFkeVlpZWxkZWQgPSBwZEZBTFNFOw0KQkZEMDJCMjQgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjE2NzU6ICAgICAgICAgICAgICAgIA0KMTY3NjogICAgICAgICAgICAgICAgCS8qIElmIHV4U2NoZWR1bGVyU3VzcGVuZGVkIGlzIHplcm8gdGhlbiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1hdGNoIGENCjE2Nzc6ICAgICAgICAgICAgICAgIAlwcmV2aW91cyBjYWxsIHRvIHZUYXNrU3VzcGVuZEFsbCgpLiAqLw0KMTY3ODogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggdXhTY2hlZHVsZXJTdXNwZW5kZWQgKTsNCkJGRDAyQjI4ICA4MDVDRkM1QyAgIExXIFYwLCAtMzI2NzYoR1ApCkJGRDAyQjJDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyQjQyCkJGRDAyQjMwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAyQjMyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDJCMzQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDJCMzYgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDAyQjM4ICAwNjhFMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjc4CkJGRDAyQjNBICAgICAgMDY4RSAgIEFERFUgQTEsIEEzLCBTMApCRkQwMkIzQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDJCM0UgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDJCNDAgICAgICAwQzAwICAgTk9QCjE2Nzk6ICAgICAgICAgICAgICAgIA0KMTY4MDogICAgICAgICAgICAgICAgCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gSVNSIGNhdXNlZCBhIHRhc2sgdG8gYmUgcmVtb3ZlZCBmcm9tIGFuIGV2ZW50DQoxNjgxOiAgICAgICAgICAgICAgICAJbGlzdCB3aGlsZSB0aGUgc2NoZWR1bGVyIHdhcyBzdXNwZW5kZWQuICBJZiB0aGlzIHdhcyB0aGUgY2FzZSB0aGVuIHRoZQ0KMTY4MjogICAgICAgICAgICAgICAgCXJlbW92ZWQgdGFzayB3aWxsIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgeFBlbmRpbmdSZWFkeUxpc3QuICBPbmNlIHRoZQ0KMTY4MzogICAgICAgICAgICAgICAgCXNjaGVkdWxlciBoYXMgYmVlbiByZXN1bWVkIGl0IGlzIHNhZmUgdG8gbW92ZSBhbGwgdGhlIHBlbmRpbmcgcmVhZHkNCjE2ODQ6ICAgICAgICAgICAgICAgIAl0YXNrcyBmcm9tIHRoaXMgbGlzdCBpbnRvIHRoZWlyIGFwcHJvcHJpYXRlIHJlYWR5IGxpc3QuICovDQoxNjg1OiAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMkI0MiAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwMkI0NCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDJCNDYgICAgICAwQzAwICAgTk9QCjE2ODY6ICAgICAgICAgICAgICAgIAl7DQoxNjg3OiAgICAgICAgICAgICAgICAJCS0tdXhTY2hlZHVsZXJTdXNwZW5kZWQ7DQpCRkQwMkI0OCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQpCRkQwMkI0QyAgICAgIDZEMkUgICBBRERJVSBWMCwgVjAsIC0xCkJGRDAyQjRFICA4MDVDRjg1QyAgIFNXIFYwLCAtMzI2NzYoR1ApCjE2ODg6ICAgICAgICAgICAgICAgIA0KMTY4OTogICAgICAgICAgICAgICAgCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDJCNTIgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkKQkZEMDJCNTYgIDAwN0Q0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJDNTQKMTY5MDogICAgICAgICAgICAgICAgCQl7DQoxNjkxOiAgICAgICAgICAgICAgICAJCQlpZiggdXhDdXJyZW50TnVtYmVyT2ZUYXNrcyA+ICggVUJhc2VUeXBlX3QgKSAwVSApDQpCRkQwMkI1QSAgODAzOEZDNUMgICBMVyBWMCwgLTMyNzEyKEdQKQpCRkQwMkI1RSAgMDA3OTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkM1NAoxNjkyOiAgICAgICAgICAgICAgICAJCQl7DQoxNjkzOiAgICAgICAgICAgICAgICAJCQkJLyogTW92ZSBhbnkgcmVhZGllZCB0YXNrcyBmcm9tIHRoZSBwZW5kaW5nIGxpc3QgaW50byB0aGUNCjE2OTQ6ICAgICAgICAgICAgICAgIAkJCQlhcHByb3ByaWF0ZSByZWFkeSBsaXN0LiAqLw0KMTY5NTogICAgICAgICAgICAgICAgCQkJCXdoaWxlKCBsaXN0TElTVF9JU19FTVBUWSggJnhQZW5kaW5nUmVhZHlMaXN0ICkgPT0gcGRGQUxTRSApDQpCRkQwMkI2MiAgICAgIENDNDIgICBCIDB4QkZEMDJCRTgKQkZEMDJCNjQgICAgICAwQzAwICAgTk9QCkJGRDAyQkU4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDAyQkVBICBGQzQyQkZEMiAgIExEQzEgRjMwLCAtOTU4KFMyKQpCRkQwMkJFQyAgODBEMEZDNDIgICBMVyBWMCwgLTMyNTYwKFYwKQpCRkQwMkJGMCAgRkZCOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkI2NgpCRkQwMkJGMiAgRkM1Q0ZGQjkgICBMVyBTUCwgLTkzMihUOSkKMTY5NjogICAgICAgICAgICAgICAgCQkJCXsNCjE2OTc6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0IgPSAoIFRDQl90ICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoICggJnhQZW5kaW5nUmVhZHlMaXN0ICkgKTsNCkJGRDAyQjY2ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDAyQjY4ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDJCNkEgIDgwRDAzMDQyICAgQURESVUgVjAsIFYwLCAtMzI1NjAKQkZEMDJCNkUgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwMkI3MCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDAyQjcyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTY5ODogICAgICAgICAgICAgICAgCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwMkI3NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyQjc4ICA2RDJDMDAxNCAgIEVYVCBaRVJPLCBTNCwgMjAsIDE0CkJGRDAyQjdBICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQKQkZEMDJCN0MgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDJCN0UgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUKQkZEMDJCODAgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQpCRkQwMkI4MiAgICAgIDBDMDAgICBOT1AKMTY5OTogICAgICAgICAgICAgICAgCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDAyQjg0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDJCODggICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDAyQjhBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAyQjhDICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDAyQjhFICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDJCOTAgICAgICAwQzAwICAgTk9QCjE3MDA6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDJCOTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkI5NiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAyQjk4ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAyQjlBICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQpCRkQwMkI5QyAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQpCRkQwMkI5RSAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMkJBMiAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQpCRkQwMkJBNCAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQpCRkQwMkJBOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyQkFDICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDJCQUUgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMkJCMCAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDAyQkIyICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQpCRkQwMkJCNCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMkJCNiAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAyQkI4ICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwCkJGRDAyQkJDICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwMkJCRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyQkMyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMkJDNCAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMkJDNiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMkJDOCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAyQkNBICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwMkJDQyAgICAgIDBDMDAgICBOT1AKMTcwMTogICAgICAgICAgICAgICAgDQoxNzAyOiAgICAgICAgICAgICAgICAJCQkJCS8qIElmIHRoZSBtb3ZlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50DQoxNzAzOiAgICAgICAgICAgICAgICAJCQkJCXRhc2sgdGhlbiBhIHlpZWxkIG11c3QgYmUgcGVyZm9ybWVkLiAqLw0KMTcwNDogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhUQ0ItPnV4UHJpb3JpdHkgPj0gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDAyQkNFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDJCRDIgICAgICA2OUFCICAgTFcgVjEsIDQ0KFYwKQpCRkQwMkJENCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMkJEOCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAyQkRBICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwMkJEQyAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDJCREUgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJCRTgKMTcwNTogICAgICAgICAgICAgICAgCQkJCQl7DQoxNzA2OiAgICAgICAgICAgICAgICAJCQkJCQl4WWllbGRQZW5kaW5nID0gcGRUUlVFOw0KQkZEMDJCRTIgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDJCRTQgIDgwNENGODVDICAgU1cgVjAsIC0zMjY5MihHUCkKMTcwNzogICAgICAgICAgICAgICAgCQkJCQl9DQoxNzA4OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE3MDk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTcxMDogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTcxMTogICAgICAgICAgICAgICAgCQkJCQl9DQoxNzEyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTcxMzogICAgICAgICAgICAgICAgDQoxNzE0OiAgICAgICAgICAgICAgICAJCQkJLyogSWYgYW55IHRpY2tzIG9jY3VycmVkIHdoaWxlIHRoZSBzY2hlZHVsZXIgd2FzIHN1c3BlbmRlZCB0aGVuDQoxNzE1OiAgICAgICAgICAgICAgICAJCQkJdGhleSBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vdy4gIFRoaXMgZW5zdXJlcyB0aGUgdGljayBjb3VudCBkb2VzDQoxNzE2OiAgICAgICAgICAgICAgICAJCQkJbm90CXNsaXAsIGFuZCB0aGF0IGFueSBkZWxheWVkIHRhc2tzIGFyZSByZXN1bWVkIGF0IHRoZSBjb3JyZWN0DQoxNzE3OiAgICAgICAgICAgICAgICAJCQkJdGltZS4gKi8NCjE3MTg6ICAgICAgICAgICAgICAgIAkJCQlpZiggdXhQZW5kZWRUaWNrcyA+ICggVUJhc2VUeXBlX3QgKSAwVSApDQpCRkQwMkJGNCAgODA0OEZDNUMgICBMVyBWMCwgLTMyNjk2KEdQKQpCRkQwMkJGOCAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkMyMgoxNzE5OiAgICAgICAgICAgICAgICAJCQkJew0KMTcyMDogICAgICAgICAgICAgICAgCQkJCQl3aGlsZSggdXhQZW5kZWRUaWNrcyA+ICggVUJhc2VUeXBlX3QgKSAwVSApDQpCRkQwMkJGQyAgICAgIENDMEUgICBCIDB4QkZEMDJDMUEKQkZEMDJCRkUgICAgICAwQzAwICAgTk9QCkJGRDAyQzFBICA4MDQ4RkM1QyAgIExXIFYwLCAtMzI2OTYoR1ApCkJGRDAyQzFFICBGRkVGNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyQzAwCkJGRDAyQzIwICBGQzdDRkZFRiAgIExXIFJBLCAtOTAwKFQ3KQoxNzIxOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE3MjI6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCkJGRDAyQzAwICAxMDQwNzdFOCAgIEpBTFMgeFRhc2tJbmNyZW1lbnRUaWNrCkJGRDAyQzAyICAwQzAwMTA0MCAgIEFEREkgVjAsIFpFUk8sIDMwNzIKQkZEMDJDMDQgICAgICAwQzAwICAgTk9QCkJGRDAyQzA2ICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyQzEwCjE3MjM6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE3MjQ6ICAgICAgICAgICAgICAgIAkJCQkJCQl4WWllbGRQZW5kaW5nID0gcGRUUlVFOw0KQkZEMDJDMEEgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDJDMEMgIDgwNENGODVDICAgU1cgVjAsIC0zMjY5MihHUCkKMTcyNTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTcyNjogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTcyNzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTcyODogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE3Mjk6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE3MzA6ICAgICAgICAgICAgICAgIAkJCQkJCS0tdXhQZW5kZWRUaWNrczsNCkJGRDAyQzEwICA4MDQ4RkM1QyAgIExXIFYwLCAtMzI2OTYoR1ApCkJGRDAyQzE0ICAgICAgNkQyRSAgIEFERElVIFYwLCBWMCwgLTEKQkZEMDJDMTYgIDgwNDhGODVDICAgU1cgVjAsIC0zMjY5NihHUCkKMTczMTogICAgICAgICAgICAgICAgCQkJCQl9DQoxNzMyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTczMzogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjE3MzQ6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNzM1OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE3MzY6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNzM3OiAgICAgICAgICAgICAgICANCjE3Mzg6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFlpZWxkUGVuZGluZyA9PSBwZFRSVUUgKQ0KQkZEMDJDMjIgIDgwNENGQzdDICAgTFcgVjEsIC0zMjY5MihHUCkKQkZEMDJDMjYgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDJDMjggIDAwMTRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMkM1NApCRkQwMkMyQSAgMEMwMDAwMTQgICBTTEwgWkVSTywgUzQsIDEKQkZEMDJDMkMgICAgICAwQzAwICAgTk9QCjE3Mzk6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNzQwOiAgICAgICAgICAgICAgICAJCQkJCSNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gIT0gMCApDQoxNzQxOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE3NDI6ICAgICAgICAgICAgICAgIAkJCQkJCXhBbHJlYWR5WWllbGRlZCA9IHBkVFJVRTsNCkJGRDAyQzJFICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyQzMwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTc0MzogICAgICAgICAgICAgICAgCQkJCQl9DQoxNzQ0OiAgICAgICAgICAgICAgICAJCQkJCSNlbmRpZg0KMTc0NTogICAgICAgICAgICAgICAgCQkJCQl0YXNrWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KQkZEMDJDMzQgIDRFNTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQpCRkQwMkMzNiAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01CkJGRDAyQzM4ICAgICAgMEMwMCAgIE5PUApCRkQwMkMzQSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCkJGRDAyQzNFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDJDNDIgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDAyQzQ2ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKQkZEMDJDNEEgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQpCRkQwMkM0RSAgNEU2Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UKQkZEMDJDNTAgICAgICA0RTY2ICAgQURESVUgUzMsIFMzLCAzCkJGRDAyQzUyICAgICAgMEMwMCAgIE5PUAoxNzQ2OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTc0NzogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjE3NDg6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNzQ5OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE3NTA6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNzUxOiAgICAgICAgICAgICAgICAJCQl9DQoxNzUyOiAgICAgICAgICAgICAgICAJCX0NCjE3NTM6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTc1NDogICAgICAgICAgICAgICAgCQl7DQoxNzU1OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNzU2OiAgICAgICAgICAgICAgICAJCX0NCjE3NTc6ICAgICAgICAgICAgICAgIAl9DQoxNzU4OiAgICAgICAgICAgICAgICAJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAyQzU0ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDJDNTYgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDQ0NUEKQkZEMDJDNTggICAgICAwQzAwICAgTk9QCjE3NTk6ICAgICAgICAgICAgICAgIA0KMTc2MDogICAgICAgICAgICAgICAgCXJldHVybiB4QWxyZWFkeVlpZWxkZWQ7DQpCRkQwMkM1QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjE3NjE6ICAgICAgICAgICAgICAgIH0NCkJGRDAyQzVFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAyQzYwICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDJDNjIgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwMkM2NCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDAyQzY2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDJDNjggICAgICAwQzAwICAgTk9QCjE3NjI6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTc2MzogICAgICAgICAgICAgICAgDQoxNzY0OiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUYXNrR2V0VGlja0NvdW50KCB2b2lkICkNCjE3NjU6ICAgICAgICAgICAgICAgIHsNCkJGRDA5OTk0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA5OTk2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDk5OTggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOTk5QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxNzY2OiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaWNrczsNCjE3Njc6ICAgICAgICAgICAgICAgIA0KMTc2ODogICAgICAgICAgICAgICAgCS8qIENyaXRpY2FsIHNlY3Rpb24gcmVxdWlyZWQgaWYgcnVubmluZyBvbiBhIDE2IGJpdCBwcm9jZXNzb3IuICovDQoxNzY5OiAgICAgICAgICAgICAgICAJcG9ydFRJQ0tfVFlQRV9FTlRFUl9DUklUSUNBTCgpOw0KQkZEMDk5OUMgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDk5OUUgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA5OUEwICAgICAgMEMwMCAgIE5PUAoxNzcwOiAgICAgICAgICAgICAgICAJew0KMTc3MTogICAgICAgICAgICAgICAgCQl4VGlja3MgPSB4VGlja0NvdW50Ow0KQkZEMDk5QTIgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkKQkZEMDk5QTYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxNzcyOiAgICAgICAgICAgICAgICAJfQ0KMTc3MzogICAgICAgICAgICAgICAgCXBvcnRUSUNLX1RZUEVfRVhJVF9DUklUSUNBTCgpOw0KQkZEMDk5QUEgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwOTlBQyAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwQjFCMApCRkQwOTlBRSAgICAgIDBDMDAgICBOT1AKMTc3NDogICAgICAgICAgICAgICAgDQoxNzc1OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhUaWNrczsNCkJGRDA5OUIwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMTc3NjogICAgICAgICAgICAgICAgfQ0KQkZEMDk5QjQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk5QjYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTlCOCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5OUJBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDk5QkMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTlCRSAgICAgIDBDMDAgICBOT1AKMTc3NzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzc4OiAgICAgICAgICAgICAgICANCjE3Nzk6ICAgICAgICAgICAgICAgIFRpY2tUeXBlX3QgeFRhc2tHZXRUaWNrQ291bnRGcm9tSVNSKCB2b2lkICkNCjE3ODA6ICAgICAgICAgICAgICAgIHsNCkJGRDA5ODQ0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA5ODQ2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDk4NDggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOTg0QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxNzgxOiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhSZXR1cm47DQoxNzgyOiAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KMTc4MzogICAgICAgICAgICAgICAgDQoxNzg0OiAgICAgICAgICAgICAgICAJLyogUlRPUyBwb3J0cyB0aGF0IHN1cHBvcnQgaW50ZXJydXB0IG5lc3RpbmcgaGF2ZSB0aGUgY29uY2VwdCBvZiBhIG1heGltdW0NCjE3ODU6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5LiAgSW50ZXJydXB0cyB0aGF0IGFyZQ0KMTc4NjogICAgICAgICAgICAgICAgCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZXB0IHBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4NCjE3ODc6ICAgICAgICAgICAgICAgIAl3aGVuIHRoZSBSVE9TIGtlcm5lbCBpcyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIGJ1dCBjYW5ub3QgbWFrZSBhbnkgY2FsbHMgdG8NCjE3ODg6ICAgICAgICAgICAgICAgIAlGcmVlUlRPUyBBUEkgZnVuY3Rpb25zLiAgSWYgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oDQoxNzg5OiAgICAgICAgICAgICAgICAJdGhlbiBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQoxNzkwOiAgICAgICAgICAgICAgICAJZmFpbHVyZSBpZiBhIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgdGhhdCBoYXMgYmVlbg0KMTc5MTogICAgICAgICAgICAgICAgCWFzc2lnbmVkIGEgcHJpb3JpdHkgYWJvdmUgdGhlIGNvbmZpZ3VyZWQgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eS4NCjE3OTI6ICAgICAgICAgICAgICAgIAlPbmx5IEZyZWVSVE9TIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiBGcm9tSVNSIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzDQoxNzkzOiAgICAgICAgICAgICAgICAJdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhdCBvciAobG9naWNhbGx5KSBiZWxvdyB0aGUgbWF4aW11bQ0KMTc5NDogICAgICAgICAgICAgICAgCXN5c3RlbSBjYWxsCWludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlIGludGVycnVwdA0KMTc5NTogICAgICAgICAgICAgICAgCXNhZmUgQVBJIHRvIGVuc3VyZSBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLg0KMTc5NjogICAgICAgICAgICAgICAgCU1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMgcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZw0KMTc5NzogICAgICAgICAgICAgICAgCWxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgKi8NCjE3OTg6ICAgICAgICAgICAgICAgIAlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCk7DQoxNzk5OiAgICAgICAgICAgICAgICANCjE4MDA6ICAgICAgICAgICAgICAgIAl1eFNhdmVkSW50ZXJydXB0U3RhdHVzID0gcG9ydFRJQ0tfVFlQRV9TRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDA5ODRDICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDk4NTAgICAgICAwQzAwICAgTk9QCkJGRDA5ODUyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTgwMTogICAgICAgICAgICAgICAgCXsNCjE4MDI6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHhUaWNrQ291bnQ7DQpCRkQwOTg1NiAgODAzQ0ZDNUMgICBMVyBWMCwgLTMyNzA4KEdQKQpCRkQwOTg1QSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjE4MDM6ICAgICAgICAgICAgICAgIAl9DQoxODA0OiAgICAgICAgICAgICAgICAJcG9ydFRJQ0tfVFlQRV9DTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDk4NUUgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQpCRkQwOTg2MiAgNEQ1RTc3RTggICBKQUxTIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUgpCRkQwOTg2NCAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xCkJGRDA5ODY2ICAgICAgMEMwMCAgIE5PUAoxODA1OiAgICAgICAgICAgICAgICANCjE4MDY6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA5ODY4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKMTgwNzogICAgICAgICAgICAgICAgfQ0KQkZEMDk4NkMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk4NkUgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTg3MCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5ODcyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDk4NzQgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTg3NiAgICAgIDBDMDAgICBOT1AKMTgwODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxODA5OiAgICAgICAgICAgICAgICANCjE4MTA6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4VGFza0dldE51bWJlck9mVGFza3MoIHZvaWQgKQ0KMTgxMTogICAgICAgICAgICAgICAgew0KQkZEMDlFOTggICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUU5QSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlFOUMgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMTgxMjogICAgICAgICAgICAgICAgCS8qIEEgY3JpdGljYWwgc2VjdGlvbiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGUgdmFyaWFibGVzIGFyZSBvZiB0eXBlDQoxODEzOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdC4gKi8NCjE4MTQ6ICAgICAgICAgICAgICAgIAlyZXR1cm4gdXhDdXJyZW50TnVtYmVyT2ZUYXNrczsNCkJGRDA5RTlFICA4MDM4RkM1QyAgIExXIFYwLCAtMzI3MTIoR1ApCjE4MTU6ICAgICAgICAgICAgICAgIH0NCkJGRDA5RUEyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RUE0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUVBNiAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlFQTggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUVBQSAgICAgIDBDMDAgICBOT1AKMTgxNjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxODE3OiAgICAgICAgICAgICAgICANCjE4MTg6ICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfcGNUYXNrR2V0VGFza05hbWUgPT0gMSApDQoxODE5OiAgICAgICAgICAgICAgICANCjE4MjA6ICAgICAgICAgICAgICAgIAljaGFyICpwY1Rhc2tHZXRUYXNrTmFtZSggVGFza0hhbmRsZV90IHhUYXNrVG9RdWVyeSApIC8qbGludCAhZTk3MSBVbnF1YWxpZmllZCBjaGFyIHR5cGVzIGFyZSBhbGxvd2VkIGZvciBzdHJpbmdzIGFuZCBzaW5nbGUgY2hhcmFjdGVycyBvbmx5LiAqLw0KMTgyMTogICAgICAgICAgICAgICAgCXsNCjE4MjI6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoxODIzOiAgICAgICAgICAgICAgICANCjE4MjQ6ICAgICAgICAgICAgICAgIAkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIHRoZSBuYW1lIG9mIHRoZSBjYWxsaW5nIHRhc2sgaXMgYmVpbmcgcXVlcmllZC4gKi8NCjE4MjU6ICAgICAgICAgICAgICAgIAkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFza1RvUXVlcnkgKTsNCjE4MjY6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweFRDQiApOw0KMTgyNzogICAgICAgICAgICAgICAgCQlyZXR1cm4gJiggcHhUQ0ItPnBjVGFza05hbWVbIDAgXSApOw0KMTgyODogICAgICAgICAgICAgICAgCX0NCjE4Mjk6ICAgICAgICAgICAgICAgIA0KMTgzMDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfcGNUYXNrR2V0VGFza05hbWUgKi8NCjE4MzE6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTgzMjogICAgICAgICAgICAgICAgDQoxODMzOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoxODM0OiAgICAgICAgICAgICAgICANCjE4MzU6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFRhc2tHZXRTeXN0ZW1TdGF0ZSggVGFza1N0YXR1c190ICogY29uc3QgcHhUYXNrU3RhdHVzQXJyYXksIGNvbnN0IFVCYXNlVHlwZV90IHV4QXJyYXlTaXplLCB1aW50MzJfdCAqIGNvbnN0IHB1bFRvdGFsUnVuVGltZSApDQoxODM2OiAgICAgICAgICAgICAgICAJew0KMTgzNzogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4VGFzayA9IDAsIHV4UXVldWUgPSBjb25maWdNQVhfUFJJT1JJVElFUzsNCjE4Mzg6ICAgICAgICAgICAgICAgIA0KMTgzOTogICAgICAgICAgICAgICAgCQl2VGFza1N1c3BlbmRBbGwoKTsNCjE4NDA6ICAgICAgICAgICAgICAgIAkJew0KMTg0MTogICAgICAgICAgICAgICAgCQkJLyogSXMgdGhlcmUgYSBzcGFjZSBpbiB0aGUgYXJyYXkgZm9yIGVhY2ggdGFzayBpbiB0aGUgc3lzdGVtPyAqLw0KMTg0MjogICAgICAgICAgICAgICAgCQkJaWYoIHV4QXJyYXlTaXplID49IHV4Q3VycmVudE51bWJlck9mVGFza3MgKQ0KMTg0MzogICAgICAgICAgICAgICAgCQkJew0KMTg0NDogICAgICAgICAgICAgICAgCQkJCS8qIEZpbGwgaW4gYW4gVGFza1N0YXR1c190IHN0cnVjdHVyZSB3aXRoIGluZm9ybWF0aW9uIG9uIGVhY2gNCjE4NDU6ICAgICAgICAgICAgICAgIAkJCQl0YXNrIGluIHRoZSBSZWFkeSBzdGF0ZS4gKi8NCjE4NDY6ICAgICAgICAgICAgICAgIAkJCQlkbw0KMTg0NzogICAgICAgICAgICAgICAgCQkJCXsNCjE4NDg6ICAgICAgICAgICAgICAgIAkJCQkJdXhRdWV1ZS0tOw0KMTg0OTogICAgICAgICAgICAgICAgCQkJCQl1eFRhc2sgKz0gcHJ2TGlzdFRhc2tXaXRoaW5TaW5nbGVMaXN0KCAmKCBweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0gKSwgJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4UXVldWUgXSApLCBlUmVhZHkgKTsNCjE4NTA6ICAgICAgICAgICAgICAgIA0KMTg1MTogICAgICAgICAgICAgICAgCQkJCX0gd2hpbGUoIHV4UXVldWUgPiAoIFVCYXNlVHlwZV90ICkgdHNrSURMRV9QUklPUklUWSApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQoxODUyOiAgICAgICAgICAgICAgICANCjE4NTM6ICAgICAgICAgICAgICAgIAkJCQkvKiBGaWxsIGluIGFuIFRhc2tTdGF0dXNfdCBzdHJ1Y3R1cmUgd2l0aCBpbmZvcm1hdGlvbiBvbiBlYWNoDQoxODU0OiAgICAgICAgICAgICAgICAJCQkJdGFzayBpbiB0aGUgQmxvY2tlZCBzdGF0ZS4gKi8NCjE4NTU6ICAgICAgICAgICAgICAgIAkJCQl1eFRhc2sgKz0gcHJ2TGlzdFRhc2tXaXRoaW5TaW5nbGVMaXN0KCAmKCBweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0gKSwgKCBMaXN0X3QgKiApIHB4RGVsYXllZFRhc2tMaXN0LCBlQmxvY2tlZCApOw0KMTg1NjogICAgICAgICAgICAgICAgCQkJCXV4VGFzayArPSBwcnZMaXN0VGFza1dpdGhpblNpbmdsZUxpc3QoICYoIHB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXSApLCAoIExpc3RfdCAqICkgcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdCwgZUJsb2NrZWQgKTsNCjE4NTc6ICAgICAgICAgICAgICAgIA0KMTg1ODogICAgICAgICAgICAgICAgCQkJCSNpZiggSU5DTFVERV92VGFza0RlbGV0ZSA9PSAxICkNCjE4NTk6ICAgICAgICAgICAgICAgIAkJCQl7DQoxODYwOiAgICAgICAgICAgICAgICAJCQkJCS8qIEZpbGwgaW4gYW4gVGFza1N0YXR1c190IHN0cnVjdHVyZSB3aXRoIGluZm9ybWF0aW9uIG9uDQoxODYxOiAgICAgICAgICAgICAgICAJCQkJCWVhY2ggdGFzayB0aGF0IGhhcyBiZWVuIGRlbGV0ZWQgYnV0IG5vdCB5ZXQgY2xlYW5lZCB1cC4gKi8NCjE4NjI6ICAgICAgICAgICAgICAgIAkJCQkJdXhUYXNrICs9IHBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggJiggcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdICksICZ4VGFza3NXYWl0aW5nVGVybWluYXRpb24sIGVEZWxldGVkICk7DQoxODYzOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTg2NDogICAgICAgICAgICAgICAgCQkJCSNlbmRpZg0KMTg2NTogICAgICAgICAgICAgICAgDQoxODY2OiAgICAgICAgICAgICAgICAJCQkJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoxODY3OiAgICAgICAgICAgICAgICAJCQkJew0KMTg2ODogICAgICAgICAgICAgICAgCQkJCQkvKiBGaWxsIGluIGFuIFRhc2tTdGF0dXNfdCBzdHJ1Y3R1cmUgd2l0aCBpbmZvcm1hdGlvbiBvbg0KMTg2OTogICAgICAgICAgICAgICAgCQkJCQllYWNoIHRhc2sgaW4gdGhlIFN1c3BlbmRlZCBzdGF0ZS4gKi8NCjE4NzA6ICAgICAgICAgICAgICAgIAkJCQkJdXhUYXNrICs9IHBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggJiggcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdICksICZ4U3VzcGVuZGVkVGFza0xpc3QsIGVTdXNwZW5kZWQgKTsNCjE4NzE6ICAgICAgICAgICAgICAgIAkJCQl9DQoxODcyOiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoxODczOiAgICAgICAgICAgICAgICANCjE4NzQ6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyA9PSAxKQ0KMTg3NTogICAgICAgICAgICAgICAgCQkJCXsNCjE4NzY6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB1bFRvdGFsUnVuVGltZSAhPSBOVUxMICkNCjE4Nzc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTg3ODogICAgICAgICAgICAgICAgCQkJCQkJI2lmZGVmIHBvcnRBTFRfR0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUNCjE4Nzk6ICAgICAgICAgICAgICAgIAkJCQkJCQlwb3J0QUxUX0dFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCAoICpwdWxUb3RhbFJ1blRpbWUgKSApOw0KMTg4MDogICAgICAgICAgICAgICAgCQkJCQkJI2Vsc2UNCjE4ODE6ICAgICAgICAgICAgICAgIAkJCQkJCQkqcHVsVG90YWxSdW5UaW1lID0gcG9ydEdFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCk7DQoxODgyOiAgICAgICAgICAgICAgICAJCQkJCQkjZW5kaWYNCjE4ODM6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTg4NDogICAgICAgICAgICAgICAgCQkJCX0NCjE4ODU6ICAgICAgICAgICAgICAgIAkJCQkjZWxzZQ0KMTg4NjogICAgICAgICAgICAgICAgCQkJCXsNCjE4ODc6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB1bFRvdGFsUnVuVGltZSAhPSBOVUxMICkNCjE4ODg6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTg4OTogICAgICAgICAgICAgICAgCQkJCQkJKnB1bFRvdGFsUnVuVGltZSA9IDA7DQoxODkwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE4OTE6ICAgICAgICAgICAgICAgIAkJCQl9DQoxODkyOiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoxODkzOiAgICAgICAgICAgICAgICAJCQl9DQoxODk0OiAgICAgICAgICAgICAgICAJCQllbHNlDQoxODk1OiAgICAgICAgICAgICAgICAJCQl7DQoxODk2OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTg5NzogICAgICAgICAgICAgICAgCQkJfQ0KMTg5ODogICAgICAgICAgICAgICAgCQl9DQoxODk5OiAgICAgICAgICAgICAgICAJCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQoxOTAwOiAgICAgICAgICAgICAgICANCjE5MDE6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4VGFzazsNCjE5MDI6ICAgICAgICAgICAgICAgIAl9DQoxOTAzOiAgICAgICAgICAgICAgICANCjE5MDQ6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjE5MDU6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxOTA2OiAgICAgICAgICAgICAgICANCjE5MDc6ICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSA9PSAxICkNCjE5MDg6ICAgICAgICAgICAgICAgIA0KMTkwOTogICAgICAgICAgICAgICAgCVRhc2tIYW5kbGVfdCB4VGFza0dldElkbGVUYXNrSGFuZGxlKCB2b2lkICkNCjE5MTA6ICAgICAgICAgICAgICAgIAl7DQoxOTExOiAgICAgICAgICAgICAgICAJCS8qIElmIHhUYXNrR2V0SWRsZVRhc2tIYW5kbGUoKSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4NCjE5MTI6ICAgICAgICAgICAgICAgIAkJc3RhcnRlZCwgdGhlbiB4SWRsZVRhc2tIYW5kbGUgd2lsbCBiZSBOVUxMLiAqLw0KMTkxMzogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoICggeElkbGVUYXNrSGFuZGxlICE9IE5VTEwgKSApOw0KMTkxNDogICAgICAgICAgICAgICAgCQlyZXR1cm4geElkbGVUYXNrSGFuZGxlOw0KMTkxNTogICAgICAgICAgICAgICAgCX0NCjE5MTY6ICAgICAgICAgICAgICAgIA0KMTkxNzogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSAqLw0KMTkxODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE5MTk6ICAgICAgICAgICAgICAgIA0KMTkyMDogICAgICAgICAgICAgICAgLyogVGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzaG91bGQgdXNlIGluZXF1YWxpdHkgdG8gMCwgbm90IGVxdWFsaXR5IHRvIDEuDQoxOTIxOiAgICAgICAgICAgICAgICBUaGlzIGlzIHRvIGVuc3VyZSB2VGFza1N0ZXBUaWNrKCkgaXMgYXZhaWxhYmxlIHdoZW4gdXNlciBkZWZpbmVkIGxvdyBwb3dlciBtb2RlDQoxOTIyOiAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZSBjb25maWdVU0VfVElDS0xFU1NfSURMRSB0byBiZSBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuDQoxOTIzOiAgICAgICAgICAgICAgICAxLiAqLw0KMTkyNDogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgIT0gMCApDQoxOTI1OiAgICAgICAgICAgICAgICANCjE5MjY6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrU3RlcFRpY2soIGNvbnN0IFRpY2tUeXBlX3QgeFRpY2tzVG9KdW1wICkNCjE5Mjc6ICAgICAgICAgICAgICAgIAl7DQoxOTI4OiAgICAgICAgICAgICAgICAJCS8qIENvcnJlY3QgdGhlIHRpY2sgY291bnQgdmFsdWUgYWZ0ZXIgYSBwZXJpb2QgZHVyaW5nIHdoaWNoIHRoZSB0aWNrDQoxOTI5OiAgICAgICAgICAgICAgICAJCXdhcyBzdXBwcmVzc2VkLiAgTm90ZSB0aGlzIGRvZXMgKm5vdCogY2FsbCB0aGUgdGljayBob29rIGZ1bmN0aW9uIGZvcg0KMTkzMDogICAgICAgICAgICAgICAgCQllYWNoIHN0ZXBwZWQgdGljay4gKi8NCjE5MzE6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAoIHhUaWNrQ291bnQgKyB4VGlja3NUb0p1bXAgKSA8PSB4TmV4dFRhc2tVbmJsb2NrVGltZSApOw0KMTkzMjogICAgICAgICAgICAgICAgCQl4VGlja0NvdW50ICs9IHhUaWNrc1RvSnVtcDsNCjE5MzM6ICAgICAgICAgICAgICAgIAkJdHJhY2VJTkNSRUFTRV9USUNLX0NPVU5UKCB4VGlja3NUb0p1bXAgKTsNCjE5MzQ6ICAgICAgICAgICAgICAgIAl9DQoxOTM1OiAgICAgICAgICAgICAgICANCjE5MzY6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVElDS0xFU1NfSURMRSAqLw0KMTkzNzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE5Mzg6ICAgICAgICAgICAgICAgIA0KMTkzOTogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGFza0luY3JlbWVudFRpY2soIHZvaWQgKQ0KMTk0MDogICAgICAgICAgICAgICAgew0KQkZEMDIwODAgICAgICA0RkU5ICAgQURESVUgU1AsIFNQLCAtNDgKQkZEMDIwODIgICAgICBDQkVCICAgU1cgUkEsIDQ0KFNQKQpCRkQwMjA4NCAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApCkJGRDAyMDg2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjE5NDE6ICAgICAgICAgICAgICAgIFRDQl90ICogcHhUQ0I7DQoxOTQyOiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhJdGVtVmFsdWU7DQoxOTQzOiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhTd2l0Y2hSZXF1aXJlZCA9IHBkRkFMU0U7DQpCRkQwMjA4OCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMTk0NDogICAgICAgICAgICAgICAgDQoxOTQ1OiAgICAgICAgICAgICAgICAJLyogQ2FsbGVkIGJ5IHRoZSBwb3J0YWJsZSBsYXllciBlYWNoIHRpbWUgYSB0aWNrIGludGVycnVwdCBvY2N1cnMuDQoxOTQ2OiAgICAgICAgICAgICAgICAJSW5jcmVtZW50cyB0aGUgdGljayB0aGVuIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5ldyB0aWNrIHZhbHVlIHdpbGwgY2F1c2UgYW55DQoxOTQ3OiAgICAgICAgICAgICAgICAJdGFza3MgdG8gYmUgdW5ibG9ja2VkLiAqLw0KMTk0ODogICAgICAgICAgICAgICAgCXRyYWNlVEFTS19JTkNSRU1FTlRfVElDSyggeFRpY2tDb3VudCApOw0KMTk0OTogICAgICAgICAgICAgICAgCWlmKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAoIFVCYXNlVHlwZV90ICkgcGRGQUxTRSApDQpCRkQwMjA4QyAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQpCRkQwMjA5MCAgMDBCODQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjIwNAoxOTUwOiAgICAgICAgICAgICAgICAJew0KMTk1MTogICAgICAgICAgICAgICAgCQkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljaywgc3dpdGNoaW5nIHRoZSBkZWxheWVkIGFuZCBvdmVyZmxvd2VkDQoxOTUyOiAgICAgICAgICAgICAgICAJCWRlbGF5ZWQgbGlzdHMgaWYgaXQgd3JhcHMgdG8gMC4gKi8NCjE5NTM6ICAgICAgICAgICAgICAgIAkJKyt4VGlja0NvdW50Ow0KQkZEMDIwOTQgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkKQkZEMDIwOTggICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxCkJGRDAyMDlBICA4MDNDRjg1QyAgIFNXIFYwLCAtMzI3MDgoR1ApCjE5NTQ6ICAgICAgICAgICAgICAgIA0KMTk1NTogICAgICAgICAgICAgICAgCQl7DQoxOTU2OiAgICAgICAgICAgICAgICAJCQkvKiBNaW5vciBvcHRpbWlzYXRpb24uICBUaGUgdGljayBjb3VudCBjYW5ub3QgY2hhbmdlIGluIHRoaXMNCjE5NTc6ICAgICAgICAgICAgICAgIAkJCWJsb2NrLiAqLw0KMTk1ODogICAgICAgICAgICAgICAgCQkJY29uc3QgVGlja1R5cGVfdCB4Q29uc3RUaWNrQ291bnQgPSB4VGlja0NvdW50Ow0KQkZEMDIwOUUgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkKQkZEMDIwQTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoxOTU5OiAgICAgICAgICAgICAgICANCjE5NjA6ICAgICAgICAgICAgICAgIAkJCWlmKCB4Q29uc3RUaWNrQ291bnQgPT0gKCBUaWNrVHlwZV90ICkgMFUgKQ0KQkZEMDIwQTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjBBQSAgMDAyMjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjBGMgoxOTYxOiAgICAgICAgICAgICAgICAJCQl7DQoxOTYyOiAgICAgICAgICAgICAgICAJCQkJdGFza1NXSVRDSF9ERUxBWUVEX0xJU1RTKCk7DQpCRkQwMjBBRSAgODA3NEZDNUMgICBMVyBWMCwgLTMyNjUyKEdQKQpCRkQwMjBCMiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDIwQjQgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDIwQ0EKQkZEMDIwQjggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDIwQkEgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMjBCQyAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwMjBCRSAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDIwQzAgIDA3QUEzMEEwICAgQURESVUgQTEsIFpFUk8sIDE5NjIKQkZEMDIwQzIgICAgICAwN0FBICAgQUREVSBBMywgQTEsIFYwCkJGRDAyMEM0ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMjBDNiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMjBDOCAgICAgIDBDMDAgICBOT1AKQkZEMDIwQ0EgIDgwNzRGQzVDICAgTFcgVjAsIC0zMjY1MihHUCkKQkZEMDIwQ0UgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQpCRkQwMjBEMiAgODA3OEZDNUMgICBMVyBWMCwgLTMyNjQ4KEdQKQpCRkQwMjBENiAgODA3NEY4NUMgICBTVyBWMCwgLTMyNjUyKEdQKQpCRkQwMjBEQSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAyMERFICA4MDc4Rjg1QyAgIFNXIFYwLCAtMzI2NDgoR1ApCkJGRDAyMEUyICA4MDUwRkM1QyAgIExXIFYwLCAtMzI2ODgoR1ApCkJGRDAyMEU2ICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQpCRkQwMjBFOCAgODA1MEY4NUMgICBTVyBWMCwgLTMyNjg4KEdQKQpCRkQwMjBFQyAgNDdDQTc3RTggICBKQUxTIHBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZQpCRkQwMjBGMCAgICAgIDBDMDAgICBOT1AKMTk2MzogICAgICAgICAgICAgICAgCQkJfQ0KMTk2NDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTk2NTogICAgICAgICAgICAgICAgCQkJew0KMTk2NjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE5Njc6ICAgICAgICAgICAgICAgIAkJCX0NCjE5Njg6ICAgICAgICAgICAgICAgIA0KMTk2OTogICAgICAgICAgICAgICAgCQkJLyogU2VlIGlmIHRoaXMgdGljayBoYXMgbWFkZSBhIHRpbWVvdXQgZXhwaXJlLiAgVGFza3MgYXJlIHN0b3JlZCBpbg0KMTk3MDogICAgICAgICAgICAgICAgCQkJdGhlCXF1ZXVlIGluIHRoZSBvcmRlciBvZiB0aGVpciB3YWtlIHRpbWUgLSBtZWFuaW5nIG9uY2Ugb25lIHRhc2sNCjE5NzE6ICAgICAgICAgICAgICAgIAkJCWhhcyBiZWVuIGZvdW5kIHdob3NlIGJsb2NrIHRpbWUgaGFzIG5vdCBleHBpcmVkIHRoZXJlIGlzIG5vIG5lZWQgdG8NCjE5NzI6ICAgICAgICAgICAgICAgIAkJCWxvb2sgYW55IGZ1cnRoZXIgZG93biB0aGUgbGlzdC4gKi8NCjE5NzM6ICAgICAgICAgICAgICAgIAkJCWlmKCB4Q29uc3RUaWNrQ291bnQgPj0geE5leHRUYXNrVW5ibG9ja1RpbWUgKQ0KQkZEMDIwRjIgIDgwNThGQzVDICAgTFcgVjAsIC0zMjY4MChHUCkKQkZEMDIwRjYgIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQpCRkQwMjBGQSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDIwRkMgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDAyMEZFICAwMDZDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMURBCkJGRDAyMTAyICAgICAgQ0MwMiAgIEIgMHhCRkQwMjEwOApCRkQwMjEwNCAgICAgIDBDMDAgICBOT1AKMTk3NDogICAgICAgICAgICAgICAgCQkJew0KMTk3NTogICAgICAgICAgICAgICAgCQkJCWZvciggOzsgKQ0KMTk3NjogICAgICAgICAgICAgICAgCQkJCXsNCjE5Nzc6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCBweERlbGF5ZWRUYXNrTGlzdCApICE9IHBkRkFMU0UgKQ0KQkZEMDIxMDggIDgwNzRGQzVDICAgTFcgVjAsIC0zMjY1MihHUCkKQkZEMDIxMEMgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAyMTBFICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMTE4CkJGRDAyMTEyICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyMTE0ICAgICAgQ0MwMiAgIEIgMHhCRkQwMjExQQpCRkQwMjExNiAgICAgIDBDMDAgICBOT1AKQkZEMDIxMTggICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwMjExQSAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjEyOAoxOTc4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE5Nzk6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSBkZWxheWVkIGxpc3QgaXMgZW1wdHkuICBTZXQgeE5leHRUYXNrVW5ibG9ja1RpbWUNCjE5ODA6ICAgICAgICAgICAgICAgIAkJCQkJCXRvIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIHNvIGl0IGlzIGV4dHJlbWVseQ0KMTk4MTogICAgICAgICAgICAgICAgCQkJCQkJdW5saWtlbHkgdGhhdCB0aGUNCjE5ODI6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGlja0NvdW50ID49IHhOZXh0VGFza1VuYmxvY2tUaW1lICkgdGVzdCB3aWxsIHBhc3MNCjE5ODM6ICAgICAgICAgICAgICAgIAkJCQkJCW5leHQgdGltZSB0aHJvdWdoLiAqLw0KMTk4NDogICAgICAgICAgICAgICAgCQkJCQkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSBwb3J0TUFYX0RFTEFZOw0KQkZEMDIxMUUgICAgICBFRDdGICAgTEkgVjAsIC0xCkJGRDAyMTIwICA4MDU4Rjg1QyAgIFNXIFYwLCAtMzI2ODAoR1ApCjE5ODU6ICAgICAgICAgICAgICAgIAkJCQkJCWJyZWFrOw0KQkZEMDIxMjQgICAgICBDQzVBICAgQiAweEJGRDAyMURBCkJGRDAyMTI2ICAgICAgMEMwMCAgIE5PUAoxOTg2OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE5ODc6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTk4ODogICAgICAgICAgICAgICAgCQkJCQl7DQoxOTg5OiAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgZGVsYXllZCBsaXN0IGlzIG5vdCBlbXB0eSwgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUNCjE5OTA6ICAgICAgICAgICAgICAgIAkJCQkJCWl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhlIGRlbGF5ZWQgbGlzdC4gIFRoaXMgaXMgdGhlIHRpbWUNCjE5OTE6ICAgICAgICAgICAgICAgIAkJCQkJCWF0IHdoaWNoIHRoZSB0YXNrIGF0IHRoZSBoZWFkIG9mIHRoZSBkZWxheWVkIGxpc3QgbXVzdA0KMTk5MjogICAgICAgICAgICAgICAgCQkJCQkJYmUgcmVtb3ZlZCBmcm9tIHRoZSBCbG9ja2VkIHN0YXRlLiAqLw0KMTk5MzogICAgICAgICAgICAgICAgCQkJCQkJcHhUQ0IgPSAoIFRDQl90ICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoIHB4RGVsYXllZFRhc2tMaXN0ICk7DQpCRkQwMjEyOCAgODA3NEZDNUMgICBMVyBWMCwgLTMyNjUyKEdQKQpCRkQwMjEyQyAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDAyMTJFICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkKQkZEMDIxMzAgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQoxOTk0OiAgICAgICAgICAgICAgICAJCQkJCQl4SXRlbVZhbHVlID0gbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDAyMTM0ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDIxMzggICAgICA2OTIxICAgTFcgVjAsIDQoVjApCkJGRDAyMTNBICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKMTk5NTogICAgICAgICAgICAgICAgDQoxOTk2OiAgICAgICAgICAgICAgICAJCQkJCQlpZiggeENvbnN0VGlja0NvdW50IDwgeEl0ZW1WYWx1ZSApDQpCRkQwMjEzRSAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDAyMTQyICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDIxNDYgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDAyMTQ4ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwMjE0QSAgMDAwNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjE1QQoxOTk3OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxOTk4OiAgICAgICAgICAgICAgICAJCQkJCQkJLyogSXQgaXMgbm90IHRpbWUgdG8gdW5ibG9jayB0aGlzIGl0ZW0geWV0LCBidXQgdGhlDQoxOTk5OiAgICAgICAgICAgICAgICAJCQkJCQkJaXRlbSB2YWx1ZSBpcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBhdCB0aGUgaGVhZA0KMjAwMDogICAgICAgICAgICAgICAgCQkJCQkJCW9mIHRoZSBibG9ja2VkIGxpc3QgbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIEJsb2NrZWQNCjIwMDE6ICAgICAgICAgICAgICAgIAkJCQkJCQlzdGF0ZSAtCXNvIHJlY29yZCB0aGUgaXRlbSB2YWx1ZSBpbg0KMjAwMjogICAgICAgICAgICAgICAgCQkJCQkJCXhOZXh0VGFza1VuYmxvY2tUaW1lLiAqLw0KMjAwMzogICAgICAgICAgICAgICAgCQkJCQkJCXhOZXh0VGFza1VuYmxvY2tUaW1lID0geEl0ZW1WYWx1ZTsNCkJGRDAyMTRFICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDIxNTIgIDgwNThGODVDICAgU1cgVjAsIC0zMjY4MChHUCkKMjAwNDogICAgICAgICAgICAgICAgCQkJCQkJCWJyZWFrOw0KQkZEMDIxNTYgICAgICBDQzQxICAgQiAweEJGRDAyMURBCkJGRDAyMTU4ICAgICAgMEMwMCAgIE5PUAoyMDA1OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoyMDA2OiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoyMDA3OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoyMDA4OiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjAwOTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMjAxMDogICAgICAgICAgICAgICAgDQoyMDExOiAgICAgICAgICAgICAgICAJCQkJCQkvKiBJdCBpcyB0aW1lIHRvIHJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBCbG9ja2VkIHN0YXRlLiAqLw0KMjAxMjogICAgICAgICAgICAgICAgCQkJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwMjE1QSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAyMTVFICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMjE2MCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMjE2MiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMjE2NCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAyMTY2ICAgICAgMEMwMCAgIE5PUAoyMDEzOiAgICAgICAgICAgICAgICANCjIwMTQ6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIElzIHRoZSB0YXNrIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gIElmIHNvIHJlbW92ZQ0KMjAxNTogICAgICAgICAgICAgICAgCQkJCQkJaXQgZnJvbSB0aGUgZXZlbnQgbGlzdC4gKi8NCjIwMTY6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBsaXN0TElTVF9JVEVNX0NPTlRBSU5FUiggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKSAhPSBOVUxMICkNCkJGRDAyMTY4ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDIxNkMgICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQpCRkQwMjE2RSAgMDAwNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjE4MAoyMDE3OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoyMDE4OiAgICAgICAgICAgICAgICAJCQkJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDIxNzIgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMjE3NCAgNkQyQzAwMUMgICBFWFQgWkVSTywgR1AsIDIwLCAxNApCRkQwMjE3NiAgICAgIDZEMkMgICBBRERJVSBWMCwgVjAsIDI0CkJGRDAyMTc4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAyMTdBICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDAyMTdDICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDIxN0UgICAgICAwQzAwICAgTk9QCjIwMTk6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjIwMjA6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjIwMjE6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjIwMjI6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMDIzOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoyMDI0OiAgICAgICAgICAgICAgICANCjIwMjU6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFBsYWNlIHRoZSB1bmJsb2NrZWQgdGFzayBpbnRvIHRoZSBhcHByb3ByaWF0ZSByZWFkeQ0KMjAyNjogICAgICAgICAgICAgICAgCQkJCQkJbGlzdC4gKi8NCjIwMjc6ICAgICAgICAgICAgICAgIAkJCQkJCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhUQ0IgKTsNCkJGRDAyMTgwICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDIxODQgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMjE4NiAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMjE4OCAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjEKQkZEMDIxOEEgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkKQkZEMDIxOEMgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDIxOTAgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDIxOTIgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKQkZEMDIxOTYgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMjE5QSAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAyMTlDICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDIxOUUgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMjFBMCAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDIxQTIgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDIxQTQgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMjFBNiAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMjFBQSAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDIxQUMgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMjFCMCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDIxQjIgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDIxQjQgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDIxQjYgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwMjFCOCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDIxQkEgICAgICAwQzAwICAgTk9QCjIwMjg6ICAgICAgICAgICAgICAgIA0KMjAyOTogICAgICAgICAgICAgICAgCQkJCQkJLyogQSB0YXNrIGJlaW5nIHVuYmxvY2tlZCBjYW5ub3QgY2F1c2UgYW4gaW1tZWRpYXRlDQoyMDMwOiAgICAgICAgICAgICAgICAJCQkJCQljb250ZXh0IHN3aXRjaCBpZiBwcmVlbXB0aW9uIGlzIHR1cm5lZCBvZmYuICovDQoyMDMxOiAgICAgICAgICAgICAgICAJCQkJCQkjaWYgKCAgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQoyMDMyOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoyMDMzOiAgICAgICAgICAgICAgICAJCQkJCQkJLyogUHJlZW1wdGlvbiBpcyBvbiwgYnV0IGEgY29udGV4dCBzd2l0Y2ggc2hvdWxkDQoyMDM0OiAgICAgICAgICAgICAgICAJCQkJCQkJb25seSBiZSBwZXJmb3JtZWQgaWYgdGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhDQoyMDM1OiAgICAgICAgICAgICAgICAJCQkJCQkJcHJpb3JpdHkgdGhhdCBpcyBlcXVhbCB0byBvciBoaWdoZXIgdGhhbiB0aGUNCjIwMzY6ICAgICAgICAgICAgICAgIAkJCQkJCQljdXJyZW50bHkgZXhlY3V0aW5nIHRhc2suICovDQoyMDM3OiAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHB4VENCLT51eFByaW9yaXR5ID49IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwMjFCQyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAyMUMwICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDIxQzIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDIxQzYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMjFDOCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDIxQ0EgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDAyMUNDICBGRjlCNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMTA2CkJGRDAyMUNFICBFRDAxRkY5QiAgIExXIEdQLCAtNDg2MyhLMSkKMjAzODogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjIwMzk6ICAgICAgICAgICAgICAgIAkJCQkJCQkJeFN3aXRjaFJlcXVpcmVkID0gcGRUUlVFOw0KQkZEMDIxRDAgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDIxRDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyMDQwOiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMjA0MTogICAgICAgICAgICAgICAgCQkJCQkJCWVsc2UNCjIwNDI6ICAgICAgICAgICAgICAgIAkJCQkJCQl7DQoyMDQzOiAgICAgICAgICAgICAgICAJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIwNDQ6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoyMDQ1OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoyMDQ2OiAgICAgICAgICAgICAgICAJCQkJCQkjZW5kaWYgLyogY29uZmlnVVNFX1BSRUVNUFRJT04gKi8NCjIwNDc6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjA0ODogICAgICAgICAgICAgICAgCQkJCX0NCkJGRDAyMTA2ICAgICAgMEMwMCAgIE5PUApCRkQwMjFENiAgICAgIENGOTggICBCIDB4QkZEMDIxMDgKQkZEMDIxRDggICAgICAwQzAwICAgTk9QCjIwNDk6ICAgICAgICAgICAgICAgIAkJCX0NCjIwNTA6ICAgICAgICAgICAgICAgIAkJfQ0KMjA1MTogICAgICAgICAgICAgICAgDQoyMDUyOiAgICAgICAgICAgICAgICAJCS8qIFRhc2tzIG9mIGVxdWFsIHByaW9yaXR5IHRvIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIHdpbGwgc2hhcmUNCjIwNTM6ICAgICAgICAgICAgICAgIAkJcHJvY2Vzc2luZyB0aW1lICh0aW1lIHNsaWNlKSBpZiBwcmVlbXB0aW9uIGlzIG9uLCBhbmQgdGhlIGFwcGxpY2F0aW9uDQoyMDU0OiAgICAgICAgICAgICAgICAJCXdyaXRlciBoYXMgbm90IGV4cGxpY2l0bHkgdHVybmVkIHRpbWUgc2xpY2luZyBvZmYuICovDQoyMDU1OiAgICAgICAgICAgICAgICAJCSNpZiAoICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApICYmICggY29uZmlnVVNFX1RJTUVfU0xJQ0lORyA9PSAxICkgKQ0KMjA1NjogICAgICAgICAgICAgICAgCQl7DQoyMDU3OiAgICAgICAgICAgICAgICAJCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoICYoIHB4UmVhZHlUYXNrc0xpc3RzWyBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgXSApICkgPiAoIFVCYXNlVHlwZV90ICkgMSApDQpCRkQwMjFEQSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMjFERSAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAyMUUwICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDIxRTIgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMjFFNCAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDIxRTYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDIxRTggIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMjFFQSAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMjFFRSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDIxRjAgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAyMUYyICAwMDAyQjA0MiAgIFNMVElVIFYwLCBWMCwgMgpCRkQwMjFGNiAgMDAwQTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjIwRQoyMDU4OiAgICAgICAgICAgICAgICAJCQl7DQoyMDU5OiAgICAgICAgICAgICAgICAJCQkJeFN3aXRjaFJlcXVpcmVkID0gcGRUUlVFOw0KQkZEMDIxRkEgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDIxRkMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwMjIwMCAgICAgIENDMDYgICBCIDB4QkZEMDIyMEUKQkZEMDIyMDIgICAgICAwQzAwICAgTk9QCjIwNjA6ICAgICAgICAgICAgICAgIAkJCX0NCjIwNjE6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjIwNjI6ICAgICAgICAgICAgICAgIAkJCXsNCjIwNjM6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMDY0OiAgICAgICAgICAgICAgICAJCQl9DQoyMDY1OiAgICAgICAgICAgICAgICAJCX0NCjIwNjY6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qICggKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkgJiYgKCBjb25maWdVU0VfVElNRV9TTElDSU5HID09IDEgKSApICovDQoyMDY3OiAgICAgICAgICAgICAgICANCjIwNjg6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnVVNFX1RJQ0tfSE9PSyA9PSAxICkNCjIwNjk6ICAgICAgICAgICAgICAgIAkJew0KMjA3MDogICAgICAgICAgICAgICAgCQkJLyogR3VhcmQgYWdhaW5zdCB0aGUgdGljayBob29rIGJlaW5nIGNhbGxlZCB3aGVuIHRoZSBwZW5kZWQgdGljaw0KMjA3MTogICAgICAgICAgICAgICAgCQkJY291bnQgaXMgYmVpbmcgdW53b3VuZCAod2hlbiB0aGUgc2NoZWR1bGVyIGlzIGJlaW5nIHVubG9ja2VkKS4gKi8NCjIwNzI6ICAgICAgICAgICAgICAgIAkJCWlmKCB1eFBlbmRlZFRpY2tzID09ICggVUJhc2VUeXBlX3QgKSAwVSApDQoyMDczOiAgICAgICAgICAgICAgICAJCQl7DQoyMDc0OiAgICAgICAgICAgICAgICAJCQkJdkFwcGxpY2F0aW9uVGlja0hvb2soKTsNCjIwNzU6ICAgICAgICAgICAgICAgIAkJCX0NCjIwNzY6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjIwNzc6ICAgICAgICAgICAgICAgIAkJCXsNCjIwNzg6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMDc5OiAgICAgICAgICAgICAgICAJCQl9DQoyMDgwOiAgICAgICAgICAgICAgICAJCX0NCjIwODE6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLX0hPT0sgKi8NCjIwODI6ICAgICAgICAgICAgICAgIAl9DQoyMDgzOiAgICAgICAgICAgICAgICAJZWxzZQ0KMjA4NDogICAgICAgICAgICAgICAgCXsNCjIwODU6ICAgICAgICAgICAgICAgIAkJKyt1eFBlbmRlZFRpY2tzOw0KQkZEMDIyMDQgIDgwNDhGQzVDICAgTFcgVjAsIC0zMjY5NihHUCkKQkZEMDIyMDggICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxCkJGRDAyMjBBICA4MDQ4Rjg1QyAgIFNXIFYwLCAtMzI2OTYoR1ApCjIwODY6ICAgICAgICAgICAgICAgIA0KMjA4NzogICAgICAgICAgICAgICAgCQkvKiBUaGUgdGljayBob29rIGdldHMgY2FsbGVkIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLCBldmVuIGlmIHRoZQ0KMjA4ODogICAgICAgICAgICAgICAgCQlzY2hlZHVsZXIgaXMgbG9ja2VkLiAqLw0KMjA4OTogICAgICAgICAgICAgICAgCQkjaWYgKCBjb25maWdVU0VfVElDS19IT09LID09IDEgKQ0KMjA5MDogICAgICAgICAgICAgICAgCQl7DQoyMDkxOiAgICAgICAgICAgICAgICAJCQl2QXBwbGljYXRpb25UaWNrSG9vaygpOw0KMjA5MjogICAgICAgICAgICAgICAgCQl9DQoyMDkzOiAgICAgICAgICAgICAgICAJCSNlbmRpZg0KMjA5NDogICAgICAgICAgICAgICAgCX0NCjIwOTU6ICAgICAgICAgICAgICAgIA0KMjA5NjogICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KMjA5NzogICAgICAgICAgICAgICAgCXsNCjIwOTg6ICAgICAgICAgICAgICAgIAkJaWYoIHhZaWVsZFBlbmRpbmcgIT0gcGRGQUxTRSApDQpCRkQwMjIwRSAgODA0Q0ZDNUMgICBMVyBWMCwgLTMyNjkyKEdQKQpCRkQwMjIxMiAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjIxQwoyMDk5OiAgICAgICAgICAgICAgICAJCXsNCjIxMDA6ICAgICAgICAgICAgICAgIAkJCXhTd2l0Y2hSZXF1aXJlZCA9IHBkVFJVRTsNCkJGRDAyMjE2ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyMjE4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjEwMTogICAgICAgICAgICAgICAgCQl9DQoyMTAyOiAgICAgICAgICAgICAgICAJCWVsc2UNCjIxMDM6ICAgICAgICAgICAgICAgIAkJew0KMjEwNDogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjEwNTogICAgICAgICAgICAgICAgCQl9DQoyMTA2OiAgICAgICAgICAgICAgICAJfQ0KMjEwNzogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBjb25maWdVU0VfUFJFRU1QVElPTiAqLw0KMjEwODogICAgICAgICAgICAgICAgDQoyMTA5OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhTd2l0Y2hSZXF1aXJlZDsNCkJGRDAyMjFDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMjExMDogICAgICAgICAgICAgICAgfQ0KQkZEMDIyMjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDIyMjIgICAgICA0QkVCICAgTFcgUkEsIDQ0KFNQKQpCRkQwMjIyNCAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApCkJGRDAyMjI2ICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgKQkZEMDIyMjggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMjIyQSAgICAgIDBDMDAgICBOT1AKMjExMTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMTEyOiAgICAgICAgICAgICAgICANCjIxMTM6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxICkNCjIxMTQ6ICAgICAgICAgICAgICAgIA0KMjExNTogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tTZXRBcHBsaWNhdGlvblRhc2tUYWcoIFRhc2tIYW5kbGVfdCB4VGFzaywgVGFza0hvb2tGdW5jdGlvbl90IHB4SG9va0Z1bmN0aW9uICkNCjIxMTY6ICAgICAgICAgICAgICAgIAl7DQoyMTE3OiAgICAgICAgICAgICAgICAJVENCX3QgKnhUQ0I7DQoyMTE4OiAgICAgICAgICAgICAgICANCjIxMTk6ICAgICAgICAgICAgICAgIAkJLyogSWYgeFRhc2sgaXMgTlVMTCB0aGVuIGl0IGlzIHRoZSB0YXNrIGhvb2sgb2YgdGhlIGNhbGxpbmcgdGFzayB0aGF0IGlzDQoyMTIwOiAgICAgICAgICAgICAgICAJCWdldHRpbmcgc2V0LiAqLw0KMjEyMTogICAgICAgICAgICAgICAgCQlpZiggeFRhc2sgPT0gTlVMTCApDQoyMTIyOiAgICAgICAgICAgICAgICAJCXsNCjIxMjM6ICAgICAgICAgICAgICAgIAkJCXhUQ0IgPSAoIFRDQl90ICogKSBweEN1cnJlbnRUQ0I7DQoyMTI0OiAgICAgICAgICAgICAgICAJCX0NCjIxMjU6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjEyNjogICAgICAgICAgICAgICAgCQl7DQoyMTI3OiAgICAgICAgICAgICAgICAJCQl4VENCID0gKCBUQ0JfdCAqICkgeFRhc2s7DQoyMTI4OiAgICAgICAgICAgICAgICAJCX0NCjIxMjk6ICAgICAgICAgICAgICAgIA0KMjEzMDogICAgICAgICAgICAgICAgCQkvKiBTYXZlIHRoZSBob29rIGZ1bmN0aW9uIGluIHRoZSBUQ0IuICBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgcmVxdWlyZWQgYXMNCjIxMzE6ICAgICAgICAgICAgICAgIAkJdGhlIHZhbHVlIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIGFuIGludGVycnVwdC4gKi8NCjIxMzI6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQoyMTMzOiAgICAgICAgICAgICAgICAJCQl4VENCLT5weFRhc2tUYWcgPSBweEhvb2tGdW5jdGlvbjsNCjIxMzQ6ICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjIxMzU6ICAgICAgICAgICAgICAgIAl9DQoyMTM2OiAgICAgICAgICAgICAgICANCjIxMzc6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgKi8NCjIxMzg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjEzOTogICAgICAgICAgICAgICAgDQoyMTQwOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgPT0gMSApDQoyMTQxOiAgICAgICAgICAgICAgICANCjIxNDI6ICAgICAgICAgICAgICAgIAlUYXNrSG9va0Z1bmN0aW9uX3QgeFRhc2tHZXRBcHBsaWNhdGlvblRhc2tUYWcoIFRhc2tIYW5kbGVfdCB4VGFzayApDQoyMTQzOiAgICAgICAgICAgICAgICAJew0KMjE0NDogICAgICAgICAgICAgICAgCVRDQl90ICp4VENCOw0KMjE0NTogICAgICAgICAgICAgICAgCVRhc2tIb29rRnVuY3Rpb25fdCB4UmV0dXJuOw0KMjE0NjogICAgICAgICAgICAgICAgDQoyMTQ3OiAgICAgICAgICAgICAgICAJCS8qIElmIHhUYXNrIGlzIE5VTEwgdGhlbiB3ZSBhcmUgc2V0dGluZyBvdXIgb3duIHRhc2sgaG9vay4gKi8NCjIxNDg6ICAgICAgICAgICAgICAgIAkJaWYoIHhUYXNrID09IE5VTEwgKQ0KMjE0OTogICAgICAgICAgICAgICAgCQl7DQoyMTUwOiAgICAgICAgICAgICAgICAJCQl4VENCID0gKCBUQ0JfdCAqICkgcHhDdXJyZW50VENCOw0KMjE1MTogICAgICAgICAgICAgICAgCQl9DQoyMTUyOiAgICAgICAgICAgICAgICAJCWVsc2UNCjIxNTM6ICAgICAgICAgICAgICAgIAkJew0KMjE1NDogICAgICAgICAgICAgICAgCQkJeFRDQiA9ICggVENCX3QgKiApIHhUYXNrOw0KMjE1NTogICAgICAgICAgICAgICAgCQl9DQoyMTU2OiAgICAgICAgICAgICAgICANCjIxNTc6ICAgICAgICAgICAgICAgIAkJLyogU2F2ZSB0aGUgaG9vayBmdW5jdGlvbiBpbiB0aGUgVENCLiAgQSBjcml0aWNhbCBzZWN0aW9uIGlzIHJlcXVpcmVkIGFzDQoyMTU4OiAgICAgICAgICAgICAgICAJCXRoZSB2YWx1ZSBjYW4gYmUgYWNjZXNzZWQgZnJvbSBhbiBpbnRlcnJ1cHQuICovDQoyMTU5OiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KMjE2MDogICAgICAgICAgICAgICAgCQl7DQoyMTYxOiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0geFRDQi0+cHhUYXNrVGFnOw0KMjE2MjogICAgICAgICAgICAgICAgCQl9DQoyMTYzOiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQoyMTY0OiAgICAgICAgICAgICAgICANCjIxNjU6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQoyMTY2OiAgICAgICAgICAgICAgICAJfQ0KMjE2NzogICAgICAgICAgICAgICAgDQoyMTY4OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHICovDQoyMTY5OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIxNzA6ICAgICAgICAgICAgICAgIA0KMjE3MTogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHID09IDEgKQ0KMjE3MjogICAgICAgICAgICAgICAgDQoyMTczOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGFza0NhbGxBcHBsaWNhdGlvblRhc2tIb29rKCBUYXNrSGFuZGxlX3QgeFRhc2ssIHZvaWQgKnB2UGFyYW1ldGVyICkNCjIxNzQ6ICAgICAgICAgICAgICAgIAl7DQoyMTc1OiAgICAgICAgICAgICAgICAJVENCX3QgKnhUQ0I7DQoyMTc2OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjE3NzogICAgICAgICAgICAgICAgDQoyMTc4OiAgICAgICAgICAgICAgICAJCS8qIElmIHhUYXNrIGlzIE5VTEwgdGhlbiB3ZSBhcmUgY2FsbGluZyBvdXIgb3duIHRhc2sgaG9vay4gKi8NCjIxNzk6ICAgICAgICAgICAgICAgIAkJaWYoIHhUYXNrID09IE5VTEwgKQ0KMjE4MDogICAgICAgICAgICAgICAgCQl7DQoyMTgxOiAgICAgICAgICAgICAgICAJCQl4VENCID0gKCBUQ0JfdCAqICkgcHhDdXJyZW50VENCOw0KMjE4MjogICAgICAgICAgICAgICAgCQl9DQoyMTgzOiAgICAgICAgICAgICAgICAJCWVsc2UNCjIxODQ6ICAgICAgICAgICAgICAgIAkJew0KMjE4NTogICAgICAgICAgICAgICAgCQkJeFRDQiA9ICggVENCX3QgKiApIHhUYXNrOw0KMjE4NjogICAgICAgICAgICAgICAgCQl9DQoyMTg3OiAgICAgICAgICAgICAgICANCjIxODg6ICAgICAgICAgICAgICAgIAkJaWYoIHhUQ0ItPnB4VGFza1RhZyAhPSBOVUxMICkNCjIxODk6ICAgICAgICAgICAgICAgIAkJew0KMjE5MDogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHhUQ0ItPnB4VGFza1RhZyggcHZQYXJhbWV0ZXIgKTsNCjIxOTE6ICAgICAgICAgICAgICAgIAkJfQ0KMjE5MjogICAgICAgICAgICAgICAgCQllbHNlDQoyMTkzOiAgICAgICAgICAgICAgICAJCXsNCjIxOTQ6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBSUw7DQoyMTk1OiAgICAgICAgICAgICAgICAJCX0NCjIxOTY6ICAgICAgICAgICAgICAgIA0KMjE5NzogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjIxOTg6ICAgICAgICAgICAgICAgIAl9DQoyMTk5OiAgICAgICAgICAgICAgICANCjIyMDA6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgKi8NCjIyMDE6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjIwMjogICAgICAgICAgICAgICAgDQoyMjAzOiAgICAgICAgICAgICAgICB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApDQoyMjA0OiAgICAgICAgICAgICAgICB7DQpCRkQwMkRCQyAgICAgIDRGRTUgICBBRERJVSBTUCwgU1AsIC01NgpCRkQwMkRCRSAgICAgIENCRUQgICBTVyBSQSwgNTIoU1ApCkJGRDAyREMwICAgICAgQ0JDQyAgIFNXIFM4LCA0OChTUCkKQkZEMDJEQzIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMjIwNTogICAgICAgICAgICAgICAgCWlmKCB1eFNjaGVkdWxlclN1c3BlbmRlZCAhPSAoIFVCYXNlVHlwZV90ICkgcGRGQUxTRSApDQpCRkQwMkRDNCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQpCRkQwMkRDOCAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkRENgoyMjA2OiAgICAgICAgICAgICAgICAJew0KMjIwNzogICAgICAgICAgICAgICAgCQkvKiBUaGUgc2NoZWR1bGVyIGlzIGN1cnJlbnRseSBzdXNwZW5kZWQgLSBkbyBub3QgYWxsb3cgYSBjb250ZXh0DQoyMjA4OiAgICAgICAgICAgICAgICAJCXN3aXRjaC4gKi8NCjIyMDk6ICAgICAgICAgICAgICAgIAkJeFlpZWxkUGVuZGluZyA9IHBkVFJVRTsNCkJGRDAyRENDICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyRENFICA4MDRDRjg1QyAgIFNXIFYwLCAtMzI2OTIoR1ApCkJGRDAyREQyICAgICAgQ0M5MSAgIEIgMHhCRkQwMkVGNgpCRkQwMkRENCAgICAgIDBDMDAgICBOT1AKMjIxMDogICAgICAgICAgICAgICAgCX0NCjIyMTE6ICAgICAgICAgICAgICAgIAllbHNlDQoyMjEyOiAgICAgICAgICAgICAgICAJew0KMjIxMzogICAgICAgICAgICAgICAgCQl4WWllbGRQZW5kaW5nID0gcGRGQUxTRTsNCkJGRDAyREQ2ICA4MDRDRjgxQyAgIFNXIFpFUk8sIC0zMjY5MihHUCkKMjIxNDogICAgICAgICAgICAgICAgCQl0cmFjZVRBU0tfU1dJVENIRURfT1VUKCk7DQoyMjE1OiAgICAgICAgICAgICAgICANCjIyMTY6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQoyMjE3OiAgICAgICAgICAgICAgICAJCXsNCjIyMTg6ICAgICAgICAgICAgICAgIAkJCQkjaWZkZWYgcG9ydEFMVF9HRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRQ0KMjIxOTogICAgICAgICAgICAgICAgCQkJCQlwb3J0QUxUX0dFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCB1bFRvdGFsUnVuVGltZSApOw0KMjIyMDogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQoyMjIxOiAgICAgICAgICAgICAgICAJCQkJCXVsVG90YWxSdW5UaW1lID0gcG9ydEdFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCk7DQoyMjIyOiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoyMjIzOiAgICAgICAgICAgICAgICANCjIyMjQ6ICAgICAgICAgICAgICAgIAkJCQkvKiBBZGQgdGhlIGFtb3VudCBvZiB0aW1lIHRoZSB0YXNrIGhhcyBiZWVuIHJ1bm5pbmcgdG8gdGhlDQoyMjI1OiAgICAgICAgICAgICAgICAJCQkJYWNjdW11bGF0ZWQJdGltZSBzbyBmYXIuICBUaGUgdGltZSB0aGUgdGFzayBzdGFydGVkIHJ1bm5pbmcgd2FzDQoyMjI2OiAgICAgICAgICAgICAgICAJCQkJc3RvcmVkIGluIHVsVGFza1N3aXRjaGVkSW5UaW1lLiAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIG92ZXJmbG93DQoyMjI3OiAgICAgICAgICAgICAgICAJCQkJcHJvdGVjdGlvbiBoZXJlCXNvIGNvdW50IHZhbHVlcyBhcmUgb25seSB2YWxpZCB1bnRpbCB0aGUgdGltZXINCjIyMjg6ICAgICAgICAgICAgICAgIAkJCQlvdmVyZmxvd3MuICBUaGUgZ3VhcmQgYWdhaW5zdCBuZWdhdGl2ZSB2YWx1ZXMgaXMgdG8gcHJvdGVjdA0KMjIyOTogICAgICAgICAgICAgICAgCQkJCWFnYWluc3Qgc3VzcGVjdCBydW4gdGltZSBzdGF0IGNvdW50ZXIgaW1wbGVtZW50YXRpb25zIC0gd2hpY2gNCjIyMzA6ICAgICAgICAgICAgICAgIAkJCQlhcmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBub3QgdGhlIGtlcm5lbC4gKi8NCjIyMzE6ICAgICAgICAgICAgICAgIAkJCQlpZiggdWxUb3RhbFJ1blRpbWUgPiB1bFRhc2tTd2l0Y2hlZEluVGltZSApDQoyMjMyOiAgICAgICAgICAgICAgICAJCQkJew0KMjIzMzogICAgICAgICAgICAgICAgCQkJCQlweEN1cnJlbnRUQ0ItPnVsUnVuVGltZUNvdW50ZXIgKz0gKCB1bFRvdGFsUnVuVGltZSAtIHVsVGFza1N3aXRjaGVkSW5UaW1lICk7DQoyMjM0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMjIzNTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjIyMzY6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMjM3OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyMzg6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMjM5OiAgICAgICAgICAgICAgICAJCQkJdWxUYXNrU3dpdGNoZWRJblRpbWUgPSB1bFRvdGFsUnVuVGltZTsNCjIyNDA6ICAgICAgICAgICAgICAgIAkJfQ0KMjI0MTogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgKi8NCjIyNDI6ICAgICAgICAgICAgICAgIA0KMjI0MzogICAgICAgICAgICAgICAgCQkvKiBDaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3csIGlmIGNvbmZpZ3VyZWQuICovDQoyMjQ0OiAgICAgICAgICAgICAgICAJCXRhc2tGSVJTVF9DSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1coKTsNCkJGRDAyRERBICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAyRERFICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwMkRFMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMkRFNCAgICAgIDY5MkMgICBMVyBWMCwgNDgoVjApCkJGRDAyREU2ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQpCRkQwMkRFOCAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDJERUEgIDAwMEI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJFMDQKQkZEMDJERUUgIDgwMzBGQzdDICAgTFcgVjEsIC0zMjcyMChHUCkKQkZEMDJERjIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDJERjYgIDAwMzQzMDQyICAgQURESVUgVjAsIFYwLCA1MgpCRkQwMkRGQSAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMkRGQyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMkRGRSAgNDIyMjc3RTggICBKQUxTIHZBcHBsaWNhdGlvblN0YWNrT3ZlcmZsb3dIb29rCkJGRDAyRTAwICAwQzAwNDIyMiAgIEJMVFpBTFMgVjAsIDB4QkZEMDQ2MDQKQkZEMDJFMDIgICAgICAwQzAwICAgTk9QCjIyNDU6ICAgICAgICAgICAgICAgIAkJdGFza1NFQ09ORF9DSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1coKTsNCkJGRDAyRTA0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAyRTA2ICBGQ0MyQkZEMSAgIExEQzEgRjMwLCAtODMwKFMxKQpCRkQwMkUwOCAgOTgzMEZDQzIgICBMVyBBMiwgLTI2NTc2KFYwKQpCRkQwMkUwQSAgMzA2Mjk4MzAgICBTV0MxIEYxLCAxMjM4NihTMCkKQkZEMDJFMEMgIDk4MzAzMDYyICAgQURESVUgVjEsIFYwLCAtMjY1NzYKQkZEMDJFMEUgIDZBQjE5ODMwICAgU1dDMSBGMSwgMjczMTMoUzApCkJGRDAyRTEwICAgICAgNkFCMSAgIExXIEExLCA0KFYxKQpCRkQwMkUxMiAgOTgzMDMwNjIgICBBRERJVSBWMSwgVjAsIC0yNjU3NgpCRkQwMkUxNCAgNkEzMjk4MzAgICBTV0MxIEYxLCAyNzE4NihTMCkKQkZEMDJFMTYgICAgICA2QTMyICAgTFcgQTAsIDgoVjEpCkJGRDAyRTE4ICA5ODMwMzA2MiAgIEFERElVIFYxLCBWMCwgLTI2NTc2CkJGRDAyRTFBICA2OUIzOTgzMCAgIFNXQzEgRjEsIDI3MDU5KFMwKQpCRkQwMkUxQyAgICAgIDY5QjMgICBMVyBWMSwgMTIoVjEpCkJGRDAyRTFFICA5ODMwMzA0MiAgIEFERElVIFYwLCBWMCwgLTI2NTc2CkJGRDAyRTIwICA2OTI0OTgzMCAgIFNXQzEgRjEsIDI2OTE2KFMwKQpCRkQwMkUyMiAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApCkJGRDAyRTI0ICAwMDE4RjhERSAgIFNXIEEyLCAyNChTOCkKQkZEMDJFMjggIDAwMUNGOEJFICAgU1cgQTEsIDI4KFM4KQpCRkQwMkUyQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDAyRTMwICAwMDI0Rjg3RSAgIFNXIFYxLCAzNihTOCkKQkZEMDJFMzQgIDAwMjhGODVFICAgU1cgVjAsIDQwKFM4KQpCRkQwMkUzOCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMkUzQyAgICAgIDY5QUMgICBMVyBWMSwgNDgoVjApCkJGRDAyRTNFICAwMDE4MzA1RSAgIEFERElVIFYwLCBTOCwgMjQKQkZEMDJFNDIgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDJFNDQgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDJFNDYgICAgICBFRjE0ICAgTEkgQTIsIDIwCkJGRDAyRTQ4ICAzREE2NzdFOCAgIEpBTFMgMHhCRkQwN0I0QwpCRkQwMkU0QSAgMEMwMDNEQTYgICBMSCBUNSwgMzA3MihBMikKQkZEMDJFNEMgICAgICAwQzAwICAgTk9QCkJGRDAyRTRFICAwMDBCNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyRTY4CkJGRDAyRTUyICA4MDMwRkM3QyAgIExXIFYxLCAtMzI3MjAoR1ApCkJGRDAyRTU2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAyRTVBICAwMDM0MzA0MiAgIEFERElVIFYwLCBWMCwgNTIKQkZEMDJFNUUgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDJFNjAgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDJFNjIgIDQyMjI3N0U4ICAgSkFMUyB2QXBwbGljYXRpb25TdGFja092ZXJmbG93SG9vawpCRkQwMkU2NCAgMEMwMDQyMjIgICBCTFRaQUxTIFYwLCAweEJGRDA0NjY4CkJGRDAyRTY2ICAgICAgMEMwMCAgIE5PUAoyMjQ2OiAgICAgICAgICAgICAgICANCjIyNDc6ICAgICAgICAgICAgICAgIAkJLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gcnVuIHVzaW5nIGVpdGhlciB0aGUgZ2VuZXJpYyBDIG9yIHBvcnQNCjIyNDg6ICAgICAgICAgICAgICAgIAkJb3B0aW1pc2VkIGFzbSBjb2RlLiAqLw0KMjI0OTogICAgICAgICAgICAgICAgCQl0YXNrU0VMRUNUX0hJR0hFU1RfUFJJT1JJVFlfVEFTSygpOw0KQkZEMDJFNjggIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDJFNkMgIDVCM0MwMDQyICAgQ0xaIFYwLCBWMApCRkQwMkU3MCAgICAgIEVEOUYgICBMSSBWMSwgMzEKQkZEMDJFNzIgICAgICAwNTI3ICAgU1VCVSBWMCwgVjEsIFYwCkJGRDAyRTc0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDJFNzggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMkU3QyAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDAyRTdFICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDIKQkZEMDJFODAgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxCkJGRDAyRTgyICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDAyRTg0ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDJFODYgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjAKQkZEMDJFOEEgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAyRThDICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMkU4RSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkVBNApCRkQwMkU5MiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMkU5NCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAyRTk2ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAyRTk4ICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMkU5QSAgMDhDOTMwQTAgICBBRERJVSBBMSwgWkVSTywgMjI0OQpCRkQwMkU5QyAgICAgIDA4QzkgICBMQlUgUzEsIDkoQTApCkJGRDAyRTlFICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMkVBMCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMkVBMiAgICAgIDBDMDAgICBOT1AKQkZEMDJFQTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMkVBOCAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDAyRUFBICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDIKQkZEMDJFQUMgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxCkJGRDAyRUFFICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDAyRUIwICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDJFQjIgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjAKQkZEMDJFQjYgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAyRUI4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKQkZEMDJFQkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkVDMCAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDJFQzIgICAgICA2OUExICAgTFcgVjEsIDQoVjApCkJGRDAyRUM0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDJFQzggICAgICBFOUExICAgU1cgVjEsIDQoVjApCkJGRDAyRUNBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDJFQ0UgICAgICA2OUExICAgTFcgVjEsIDQoVjApCkJGRDAyRUQwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDJFRDQgICAgICA2RDI0ICAgQURESVUgVjAsIFYwLCA4CkJGRDAyRUQ2ICAwMDA4QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDJFRUEKQkZEMDJFRDggIDBDMDAwMDA4ICAgU0xMIFpFUk8sIFQwLCAxCkJGRDAyRURBICAgICAgMEMwMCAgIE5PUApCRkQwMkVEQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRUUwICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQpCRkQwMkVFMiAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkKQkZEMDJFRTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkVFOCAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkKQkZEMDJFRUEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkVFRSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDJFRjAgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwMkVGMiAgODAzMEY4NUMgICBTVyBWMCwgLTMyNzIwKEdQKQoyMjUwOiAgICAgICAgICAgICAgICAJCXRyYWNlVEFTS19TV0lUQ0hFRF9JTigpOw0KMjI1MTogICAgICAgICAgICAgICAgDQoyMjUyOiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UID09IDEgKQ0KMjI1MzogICAgICAgICAgICAgICAgCQl7DQoyMjU0OiAgICAgICAgICAgICAgICAJCQkvKiBTd2l0Y2ggTmV3bGliJ3MgX2ltcHVyZV9wdHIgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIF9yZWVudA0KMjI1NTogICAgICAgICAgICAgICAgCQkJc3RydWN0dXJlIHNwZWNpZmljIHRvIHRoaXMgdGFzay4gKi8NCjIyNTY6ICAgICAgICAgICAgICAgIAkJCV9pbXB1cmVfcHRyID0gJiggcHhDdXJyZW50VENCLT54TmV3TGliX3JlZW50ICk7DQoyMjU3OiAgICAgICAgICAgICAgICAJCX0NCjIyNTg6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UICovDQoyMjU5OiAgICAgICAgICAgICAgICAJfQ0KMjI2MDogICAgICAgICAgICAgICAgfQ0KQkZEMDJFRjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDJFRjggICAgICA0QkVEICAgTFcgUkEsIDUyKFNQKQpCRkQwMkVGQSAgICAgIDRCQ0MgICBMVyBTOCwgNDgoU1ApCkJGRDAyRUZDICAgICAgNEMxRCAgIEFERElVIFNQLCBTUCwgNTYKQkZEMDJFRkUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMkYwMCAgICAgIDBDMDAgICBOT1AKMjI2MTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMjYyOiAgICAgICAgICAgICAgICANCjIyNjM6ICAgICAgICAgICAgICAgIHZvaWQgdlRhc2tQbGFjZU9uRXZlbnRMaXN0KCBMaXN0X3QgKiBjb25zdCBweEV2ZW50TGlzdCwgY29uc3QgVGlja1R5cGVfdCB4VGlja3NUb1dhaXQgKQ0KMjI2NDogICAgICAgICAgICAgICAgew0KQkZEMDVFNzQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDVFNzYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNUU3OCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA1RTdBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA1RTdDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDVFODAgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQoyMjY1OiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaW1lVG9XYWtlOw0KMjI2NjogICAgICAgICAgICAgICAgDQoyMjY3OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweEV2ZW50TGlzdCApOw0KQkZEMDVFODQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNUU4OCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUU5RQpCRkQwNUU4QyAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNUU4RSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA1RTkwICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDA1RTkyICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwNUU5NCAgMDhEQjMwQTAgICBBRERJVSBBMSwgWkVSTywgMjI2NwpCRkQwNUU5NiAgICAgIDA4REIgICBMQlUgUzEsIDExKEExKQpCRkQwNUU5OCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDVFOUEgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDVFOUMgICAgICAwQzAwICAgTk9QCjIyNjg6ICAgICAgICAgICAgICAgIA0KMjI2OTogICAgICAgICAgICAgICAgCS8qIFRISVMgRlVOQ1RJT04gTVVTVCBCRSBDQUxMRUQgV0lUSCBFSVRIRVIgSU5URVJSVVBUUyBESVNBQkxFRCBPUiBUSEUNCjIyNzA6ICAgICAgICAgICAgICAgIAlTQ0hFRFVMRVIgU1VTUEVOREVEIEFORCBUSEUgUVVFVUUgQkVJTkcgQUNDRVNTRUQgTE9DS0VELiAqLw0KMjI3MTogICAgICAgICAgICAgICAgDQoyMjcyOiAgICAgICAgICAgICAgICAJLyogUGxhY2UgdGhlIGV2ZW50IGxpc3QgaXRlbSBvZiB0aGUgVENCIGluIHRoZSBhcHByb3ByaWF0ZSBldmVudCBsaXN0Lg0KMjI3MzogICAgICAgICAgICAgICAgCVRoaXMgaXMgcGxhY2VkIGluIHRoZSBsaXN0IGluIHByaW9yaXR5IG9yZGVyIHNvIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sNCjIyNzQ6ICAgICAgICAgICAgICAgIAlpcyB0aGUgZmlyc3QgdG8gYmUgd29rZW4gYnkgdGhlIGV2ZW50LiAgVGhlIHF1ZXVlIHRoYXQgY29udGFpbnMgdGhlIGV2ZW50DQoyMjc1OiAgICAgICAgICAgICAgICAJbGlzdCBpcyBsb2NrZWQsIHByZXZlbnRpbmcgc2ltdWx0YW5lb3VzIGFjY2VzcyBmcm9tIGludGVycnVwdHMuICovDQoyMjc2OiAgICAgICAgICAgICAgICAJdkxpc3RJbnNlcnQoIHB4RXZlbnRMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCkJGRDA1RTlFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA1RUEyICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQKQkZEMDVFQTQgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwNUVBOCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNUVBQSAgMzA0MDc3RTggICBKQUxTIHZMaXN0SW5zZXJ0CkJGRDA1RUFDICAwQzAwMzA0MCAgIEFERElVIFYwLCBaRVJPLCAzMDcyCkJGRDA1RUFFICAgICAgMEMwMCAgIE5PUAoyMjc3OiAgICAgICAgICAgICAgICANCjIyNzg6ICAgICAgICAgICAgICAgIAkvKiBUaGUgdGFzayBtdXN0IGJlIHJlbW92ZWQgZnJvbSBmcm9tIHRoZSByZWFkeSBsaXN0IGJlZm9yZSBpdCBpcyBhZGRlZCB0bw0KMjI3OTogICAgICAgICAgICAgICAgCXRoZSBibG9ja2VkIGxpc3QgYXMgdGhlIHNhbWUgbGlzdCBpdGVtIGlzIHVzZWQgZm9yIGJvdGggbGlzdHMuICBFeGNsdXNpdmUNCjIyODA6ICAgICAgICAgICAgICAgIAlhY2Nlc3MgdG8gdGhlIHJlYWR5IGxpc3RzIGd1YXJhbnRlZWQgYmVjYXVzZSB0aGUgc2NoZWR1bGVyIGlzIGxvY2tlZC4gKi8NCjIyODE6ICAgICAgICAgICAgICAgIAlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA1RUIwICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA1RUI0ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwNUVCNiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNUVCOCAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwNUVCQSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDA1RUJDICAgICAgMEMwMCAgIE5PUApCRkQwNUVCRSAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUVEQQoyMjgyOiAgICAgICAgICAgICAgICAJew0KMjI4MzogICAgICAgICAgICAgICAgCQkvKiBUaGUgY3VycmVudCB0YXNrIG11c3QgYmUgaW4gYSByZWFkeSBsaXN0LCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvDQoyMjg0OiAgICAgICAgICAgICAgICAJCWNoZWNrLCBhbmQgdGhlIHBvcnQgcmVzZXQgbWFjcm8gY2FuIGJlIGNhbGxlZCBkaXJlY3RseS4gKi8NCjIyODU6ICAgICAgICAgICAgICAgIAkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDVFQzIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDVFQzYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwNUVDOCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNUVDQSAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjEKQkZEMDVFQ0MgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQKQkZEMDVFQ0UgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwCkJGRDA1RUQwICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApCkJGRDA1RUQ0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwNUVENiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQoyMjg2OiAgICAgICAgICAgICAgICAJfQ0KMjI4NzogICAgICAgICAgICAgICAgCWVsc2UNCjIyODg6ICAgICAgICAgICAgICAgIAl7DQoyMjg5OiAgICAgICAgICAgICAgICAJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyOTA6ICAgICAgICAgICAgICAgIAl9DQoyMjkxOiAgICAgICAgICAgICAgICANCjIyOTI6ICAgICAgICAgICAgICAgIAkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjIyOTM6ICAgICAgICAgICAgICAgIAl7DQoyMjk0OiAgICAgICAgICAgICAgICAJCWlmKCB4VGlja3NUb1dhaXQgPT0gcG9ydE1BWF9ERUxBWSApDQpCRkQwNUVEQSAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpCkJGRDA1RURFICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwNUVFMCAgMDAwRUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA1RjAwCkJGRDA1RUUyICAwQzAwMDAwRSAgIFNMTCBaRVJPLCBUNiwgMQpCRkQwNUVFNCAgICAgIDBDMDAgICBOT1AKMjI5NTogICAgICAgICAgICAgICAgCQl7DQoyMjk2OiAgICAgICAgICAgICAgICAJCQkvKiBBZGQgdGhlIHRhc2sgdG8gdGhlIHN1c3BlbmRlZCB0YXNrIGxpc3QgaW5zdGVhZCBvZiBhIGRlbGF5ZWQgdGFzaw0KMjI5NzogICAgICAgICAgICAgICAgCQkJbGlzdCB0byBlbnN1cmUgdGhlIHRhc2sgaXMgbm90IHdva2VuIGJ5IGEgdGltaW5nIGV2ZW50LiAgSXQgd2lsbA0KMjI5ODogICAgICAgICAgICAgICAgCQkJYmxvY2sgaW5kZWZpbml0ZWx5LiAqLw0KMjI5OTogICAgICAgICAgICAgICAgCQkJdkxpc3RJbnNlcnRFbmQoICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNUVFNiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNUVFQSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDVFRUMgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDVFRUUgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQpCRkQwNUVGMCAgODBFNDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU0MApCRkQwNUVGNCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNUVGNiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDA1RUY4ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwNUVGQSAgICAgIDBDMDAgICBOT1AKQkZEMDVFRkMgICAgICBDQzBEICAgQiAweEJGRDA1RjE4CkJGRDA1RUZFICAgICAgMEMwMCAgIE5PUAoyMzAwOiAgICAgICAgICAgICAgICAJCX0NCjIzMDE6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjMwMjogICAgICAgICAgICAgICAgCQl7DQoyMzAzOiAgICAgICAgICAgICAgICAJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlIHdva2VuIGlmIHRoZSBldmVudA0KMjMwNDogICAgICAgICAgICAgICAgCQkJZG9lcyBub3Qgb2NjdXIuICBUaGlzIG1heSBvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlciwgdGhlDQoyMzA1OiAgICAgICAgICAgICAgICAJCQlzY2hlZHVsZXIgd2lsbCBoYW5kbGUgaXQuICovDQoyMzA2OiAgICAgICAgICAgICAgICAJCQl4VGltZVRvV2FrZSA9IHhUaWNrQ291bnQgKyB4VGlja3NUb1dhaXQ7DQpCRkQwNUYwMCAgODAzQ0ZDN0MgICBMVyBWMSwgLTMyNzA4KEdQKQpCRkQwNUYwNCAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDA1RjA4ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNUYwQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjIzMDc6ICAgICAgICAgICAgICAgIAkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCkJGRDA1RjBFICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkKQkZEMDVGMTIgIDM3MzQ3N0U4ICAgSkFMUyBwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QKQkZEMDVGMTQgIDBDMDAzNzM0ICAgTEhVIFQ5LCAzMDcyKFM0KQpCRkQwNUYxNiAgICAgIDBDMDAgICBOT1AKMjMwODogICAgICAgICAgICAgICAgCQl9DQoyMzA5OiAgICAgICAgICAgICAgICAJfQ0KMjMxMDogICAgICAgICAgICAgICAgCSNlbHNlIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQoyMzExOiAgICAgICAgICAgICAgICAJew0KMjMxMjogICAgICAgICAgICAgICAgCQkJLyogQ2FsY3VsYXRlIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB0YXNrIHNob3VsZCBiZSB3b2tlbiBpZiB0aGUgZXZlbnQgZG9lcw0KMjMxMzogICAgICAgICAgICAgICAgCQkJbm90IG9jY3VyLiAgVGhpcyBtYXkgb3ZlcmZsb3cgYnV0IHRoaXMgZG9lc24ndCBtYXR0ZXIsIHRoZSBzY2hlZHVsZXINCjIzMTQ6ICAgICAgICAgICAgICAgIAkJCXdpbGwgaGFuZGxlIGl0LiAqLw0KMjMxNTogICAgICAgICAgICAgICAgCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KMjMxNjogICAgICAgICAgICAgICAgCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KMjMxNzogICAgICAgICAgICAgICAgCX0NCjIzMTg6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjIzMTk6ICAgICAgICAgICAgICAgIH0NCkJGRDA1RjE4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA1RjFBICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDVGMUMgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwNUYxRSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA1RjIwICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDVGMjIgICAgICAwQzAwICAgTk9QCjIzMjA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjMyMTogICAgICAgICAgICAgICAgDQoyMzIyOiAgICAgICAgICAgICAgICB2b2lkIHZUYXNrUGxhY2VPblVub3JkZXJlZEV2ZW50TGlzdCggTGlzdF90ICogcHhFdmVudExpc3QsIGNvbnN0IFRpY2tUeXBlX3QgeEl0ZW1WYWx1ZSwgY29uc3QgVGlja1R5cGVfdCB4VGlja3NUb1dhaXQgKQ0KMjMyMzogICAgICAgICAgICAgICAgew0KQkZEMDQ5MDQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDQ5MDYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNDkwOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA0OTBBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA0OTBDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDQ5MTAgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQpCRkQwNDkxNCAgMDAyOEY4REUgICBTVyBBMiwgNDAoUzgpCjIzMjQ6ICAgICAgICAgICAgICAgIFRpY2tUeXBlX3QgeFRpbWVUb1dha2U7DQoyMzI1OiAgICAgICAgICAgICAgICANCjIzMjY6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4RXZlbnRMaXN0ICk7DQpCRkQwNDkxOCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA0OTFDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0OTMyCkJGRDA0OTIwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0OTIyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQ5MjQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDQ5MjYgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA0OTI4ICAwOTE2MzBBMCAgIEFERElVIEExLCBaRVJPLCAyMzI2CkJGRDA0OTJBICAgICAgMDkxNiAgIExCVSBWMCwgNihTMSkKQkZEMDQ5MkMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA0OTJFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA0OTMwICAgICAgMEMwMCAgIE5PUAoyMzI3OiAgICAgICAgICAgICAgICANCjIzMjg6ICAgICAgICAgICAgICAgIAkvKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggVEhFIFNDSEVEVUxFUiBTVVNQRU5ERUQuICBJdCBpcyB1c2VkIGJ5DQoyMzI5OiAgICAgICAgICAgICAgICAJdGhlIGV2ZW50IGdyb3VwcyBpbXBsZW1lbnRhdGlvbi4gKi8NCjIzMzA6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHV4U2NoZWR1bGVyU3VzcGVuZGVkICE9IDAgKTsNCkJGRDA0OTMyICA4MDVDRkM1QyAgIExXIFYwLCAtMzI2NzYoR1ApCkJGRDA0OTM2ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0OTRDCkJGRDA0OTNBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0OTNDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQ5M0UgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDQ5NDAgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA0OTQyICAwOTFBMzBBMCAgIEFERElVIEExLCBaRVJPLCAyMzMwCkJGRDA0OTQ0ICAgICAgMDkxQSAgIExCVSBWMCwgMTAoUzEpCkJGRDA0OTQ2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNDk0OCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNDk0QSAgICAgIDBDMDAgICBOT1AKMjMzMTogICAgICAgICAgICAgICAgDQoyMzMyOiAgICAgICAgICAgICAgICAJLyogU3RvcmUgdGhlIGl0ZW0gdmFsdWUgaW4gdGhlIGV2ZW50IGxpc3QgaXRlbS4gIEl0IGlzIHNhZmUgdG8gYWNjZXNzIHRoZQ0KMjMzMzogICAgICAgICAgICAgICAgCWV2ZW50IGxpc3QgaXRlbSBoZXJlIGFzIGludGVycnVwdHMgd29uJ3QgYWNjZXNzIHRoZSBldmVudCBsaXN0IGl0ZW0gb2YgYQ0KMjMzNDogICAgICAgICAgICAgICAgCXRhc2sgdGhhdCBpcyBub3QgaW4gdGhlIEJsb2NrZWQgc3RhdGUuICovDQoyMzM1OiAgICAgICAgICAgICAgICAJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4Q3VycmVudFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSwgeEl0ZW1WYWx1ZSB8IHRhc2tFVkVOVF9MSVNUX0lURU1fVkFMVUVfSU5fVVNFICk7DQpCRkQwNDk0QyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNDk1MCAgMDAyNEZDOUUgICBMVyBBMCwgMzYoUzgpCkJGRDA0OTU0ICA4MDAwNDFBMyAgIExVSSBWMSwgMHg4MDAwCkJGRDA0OTU4ICAgICAgNDREQyAgIE9SMTYgVjEsIEEwCkJGRDA0OTVBICAgICAgRTlBNiAgIFNXIFYxLCAyNChWMCkKMjMzNjogICAgICAgICAgICAgICAgDQoyMzM3OiAgICAgICAgICAgICAgICAJLyogUGxhY2UgdGhlIGV2ZW50IGxpc3QgaXRlbSBvZiB0aGUgVENCIGF0IHRoZSBlbmQgb2YgdGhlIGFwcHJvcHJpYXRlIGV2ZW50DQoyMzM4OiAgICAgICAgICAgICAgICAJbGlzdC4gIEl0IGlzIHNhZmUgdG8gYWNjZXNzIHRoZSBldmVudCBsaXN0IGhlcmUgYmVjYXVzZSBpdCBpcyBwYXJ0IG9mIGFuDQoyMzM5OiAgICAgICAgICAgICAgICAJZXZlbnQgZ3JvdXAgaW1wbGVtZW50YXRpb24gLSBhbmQgaW50ZXJydXB0cyBkb24ndCBhY2Nlc3MgZXZlbnQgZ3JvdXBzDQoyMzQwOiAgICAgICAgICAgICAgICAJZGlyZWN0bHkgKGluc3RlYWQgdGhleSBhY2Nlc3MgdGhlbSBpbmRpcmVjdGx5IGJ5IHBlbmRpbmcgZnVuY3Rpb24gY2FsbHMgdG8NCjIzNDE6ICAgICAgICAgICAgICAgIAl0aGUgdGFzayBsZXZlbCkuICovDQoyMzQyOiAgICAgICAgICAgICAgICAJdkxpc3RJbnNlcnRFbmQoIHB4RXZlbnRMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCkJGRDA0OTVDICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA0OTYwICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQKQkZEMDQ5NjIgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwNDk2NiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNDk2OCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDA0OTZBICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwNDk2QyAgICAgIDBDMDAgICBOT1AKMjM0MzogICAgICAgICAgICAgICAgDQoyMzQ0OiAgICAgICAgICAgICAgICAJLyogVGhlIHRhc2sgbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIHJlYWR5IGxpc3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZQ0KMjM0NTogICAgICAgICAgICAgICAgCWJsb2NrZWQgbGlzdC4gIEV4Y2x1c2l2ZSBhY2Nlc3MgY2FuIGJlIGFzc3VyZWQgdG8gdGhlIHJlYWR5IGxpc3QgYXMgdGhlDQoyMzQ2OiAgICAgICAgICAgICAgICAJc2NoZWR1bGVyIGlzIGxvY2tlZC4gKi8NCjIzNDc6ICAgICAgICAgICAgICAgIAlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA0OTZFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA0OTcyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwNDk3NCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNDk3NiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwNDk3OCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDA0OTdBICAgICAgMEMwMCAgIE5PUApCRkQwNDk3QyAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDk5OAoyMzQ4OiAgICAgICAgICAgICAgICAJew0KMjM0OTogICAgICAgICAgICAgICAgCQkvKiBUaGUgY3VycmVudCB0YXNrIG11c3QgYmUgaW4gYSByZWFkeSBsaXN0LCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvDQoyMzUwOiAgICAgICAgICAgICAgICAJCWNoZWNrLCBhbmQgdGhlIHBvcnQgcmVzZXQgbWFjcm8gY2FuIGJlIGNhbGxlZCBkaXJlY3RseS4gKi8NCjIzNTE6ICAgICAgICAgICAgICAgIAkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDQ5ODAgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDQ5ODQgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwNDk4NiAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNDk4OCAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjEKQkZEMDQ5OEEgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQKQkZEMDQ5OEMgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwCkJGRDA0OThFICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApCkJGRDA0OTkyICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwNDk5NCAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQoyMzUyOiAgICAgICAgICAgICAgICAJfQ0KMjM1MzogICAgICAgICAgICAgICAgCWVsc2UNCjIzNTQ6ICAgICAgICAgICAgICAgIAl7DQoyMzU1OiAgICAgICAgICAgICAgICAJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIzNTY6ICAgICAgICAgICAgICAgIAl9DQoyMzU3OiAgICAgICAgICAgICAgICANCjIzNTg6ICAgICAgICAgICAgICAgIAkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjIzNTk6ICAgICAgICAgICAgICAgIAl7DQoyMzYwOiAgICAgICAgICAgICAgICAJCWlmKCB4VGlja3NUb1dhaXQgPT0gcG9ydE1BWF9ERUxBWSApDQpCRkQwNDk5OCAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpCkJGRDA0OTlDICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwNDk5RSAgMDAwRUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA0OUJFCkJGRDA0OUEwICAwQzAwMDAwRSAgIFNMTCBaRVJPLCBUNiwgMQpCRkQwNDlBMiAgICAgIDBDMDAgICBOT1AKMjM2MTogICAgICAgICAgICAgICAgCQl7DQoyMzYyOiAgICAgICAgICAgICAgICAJCQkvKiBBZGQgdGhlIHRhc2sgdG8gdGhlIHN1c3BlbmRlZCB0YXNrIGxpc3QgaW5zdGVhZCBvZiBhIGRlbGF5ZWQgdGFzaw0KMjM2MzogICAgICAgICAgICAgICAgCQkJbGlzdCB0byBlbnN1cmUgaXQgaXMgbm90IHdva2VuIGJ5IGEgdGltaW5nIGV2ZW50LiAgSXQgd2lsbCBibG9jaw0KMjM2NDogICAgICAgICAgICAgICAgCQkJaW5kZWZpbml0ZWx5LiAqLw0KMjM2NTogICAgICAgICAgICAgICAgCQkJdkxpc3RJbnNlcnRFbmQoICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNDlBNCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNDlBOCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDQ5QUEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDQ5QUMgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQpCRkQwNDlBRSAgODBFNDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU0MApCRkQwNDlCMiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNDlCNCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDA0OUI2ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwNDlCOCAgICAgIDBDMDAgICBOT1AKQkZEMDQ5QkEgICAgICBDQzBEICAgQiAweEJGRDA0OUQ2CkJGRDA0OUJDICAgICAgMEMwMCAgIE5PUAoyMzY2OiAgICAgICAgICAgICAgICAJCX0NCjIzNjc6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjM2ODogICAgICAgICAgICAgICAgCQl7DQoyMzY5OiAgICAgICAgICAgICAgICAJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlIHdva2VuIGlmIHRoZSBldmVudA0KMjM3MDogICAgICAgICAgICAgICAgCQkJZG9lcyBub3Qgb2NjdXIuICBUaGlzIG1heSBvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlciwgdGhlDQoyMzcxOiAgICAgICAgICAgICAgICAJCQlrZXJuZWwgd2lsbCBtYW5hZ2UgaXQgY29ycmVjdGx5LiAqLw0KMjM3MjogICAgICAgICAgICAgICAgCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KQkZEMDQ5QkUgIDgwM0NGQzdDICAgTFcgVjEsIC0zMjcwOChHUCkKQkZEMDQ5QzIgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwNDlDNiAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDQ5QzggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyMzczOiAgICAgICAgICAgICAgICAJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQpCRkQwNDlDQyAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpCkJGRDA0OUQwICAzNzM0NzdFOCAgIEpBTFMgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0CkJGRDA0OUQyICAwQzAwMzczNCAgIExIVSBUOSwgMzA3MihTNCkKQkZEMDQ5RDQgICAgICAwQzAwICAgTk9QCjIzNzQ6ICAgICAgICAgICAgICAgIAkJfQ0KMjM3NTogICAgICAgICAgICAgICAgCX0NCjIzNzY6ICAgICAgICAgICAgICAgIAkjZWxzZSAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KMjM3NzogICAgICAgICAgICAgICAgCXsNCjIzNzg6ICAgICAgICAgICAgICAgIAkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlIGV2ZW50IGRvZXMNCjIzNzk6ICAgICAgICAgICAgICAgIAkJCW5vdCBvY2N1ci4gIFRoaXMgbWF5IG92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLCB0aGUga2VybmVsDQoyMzgwOiAgICAgICAgICAgICAgICAJCQl3aWxsIG1hbmFnZSBpdCBjb3JyZWN0bHkuICovDQoyMzgxOiAgICAgICAgICAgICAgICAJCQl4VGltZVRvV2FrZSA9IHhUaWNrQ291bnQgKyB4VGlja3NUb1dhaXQ7DQoyMzgyOiAgICAgICAgICAgICAgICAJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQoyMzgzOiAgICAgICAgICAgICAgICAJfQ0KMjM4NDogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KMjM4NTogICAgICAgICAgICAgICAgfQ0KQkZEMDQ5RDYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDQ5RDggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNDlEQSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA0OURDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDQ5REUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNDlFMCAgICAgIDBDMDAgICBOT1AKMjM4NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMzg3OiAgICAgICAgICAgICAgICANCjIzODg6ICAgICAgICAgICAgICAgICNpZiBjb25maWdVU0VfVElNRVJTID09IDENCjIzODk6ICAgICAgICAgICAgICAgIA0KMjM5MDogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tQbGFjZU9uRXZlbnRMaXN0UmVzdHJpY3RlZCggTGlzdF90ICogY29uc3QgcHhFdmVudExpc3QsIGNvbnN0IFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0LCBjb25zdCBCYXNlVHlwZV90IHhXYWl0SW5kZWZpbml0ZWx5ICkNCjIzOTE6ICAgICAgICAgICAgICAgIAl7DQpCRkQwNUM1OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNUM1QSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA1QzVDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDVDNUUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDVDNjAgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwNUM2NCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpCkJGRDA1QzY4ICAwMDI4RjhERSAgIFNXIEEyLCA0MChTOCkKMjM5MjogICAgICAgICAgICAgICAgCVRpY2tUeXBlX3QgeFRpbWVUb1dha2U7DQoyMzkzOiAgICAgICAgICAgICAgICANCjIzOTQ6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweEV2ZW50TGlzdCApOw0KQkZEMDVDNkMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNUM3MCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUM4NgpCRkQwNUM3NCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNUM3NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA1Qzc4ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDA1QzdBICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwNUM3QyAgMDk1QTMwQTAgICBBRERJVSBBMSwgWkVSTywgMjM5NApCRkQwNUM3RSAgICAgIDA5NUEgICBMQlUgVjAsIDEwKEExKQpCRkQwNUM4MCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDVDODIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDVDODQgICAgICAwQzAwICAgTk9QCjIzOTU6ICAgICAgICAgICAgICAgIA0KMjM5NjogICAgICAgICAgICAgICAgCQkvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGJ5IGFwcGxpY2F0aW9uIGNvZGUgaGVuY2UgdGhlDQoyMzk3OiAgICAgICAgICAgICAgICAJCSdSZXN0cmljdGVkJyBpbiBpdHMgbmFtZS4gIEl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLiAgSXQgaXMNCjIzOTg6ICAgICAgICAgICAgICAgIAkJZGVzaWduZWQgZm9yIHVzZSBieSBrZXJuZWwgY29kZSwgYW5kIGhhcyBzcGVjaWFsIGNhbGxpbmcgcmVxdWlyZW1lbnRzIC0NCjIzOTk6ICAgICAgICAgICAgICAgIAkJaXQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBzY2hlZHVsZXIgc3VzcGVuZGVkLiAqLw0KMjQwMDogICAgICAgICAgICAgICAgDQoyNDAxOiAgICAgICAgICAgICAgICANCjI0MDI6ICAgICAgICAgICAgICAgIAkJLyogUGxhY2UgdGhlIGV2ZW50IGxpc3QgaXRlbSBvZiB0aGUgVENCIGluIHRoZSBhcHByb3ByaWF0ZSBldmVudCBsaXN0Lg0KMjQwMzogICAgICAgICAgICAgICAgCQlJbiB0aGlzIGNhc2UgaXQgaXMgYXNzdW1lIHRoYXQgdGhpcyBpcyB0aGUgb25seSB0YXNrIHRoYXQgaXMgZ29pbmcgdG8NCjI0MDQ6ICAgICAgICAgICAgICAgIAkJYmUgd2FpdGluZyBvbiB0aGlzIGV2ZW50IGxpc3QsIHNvIHRoZSBmYXN0ZXIgdkxpc3RJbnNlcnRFbmQoKSBmdW5jdGlvbg0KMjQwNTogICAgICAgICAgICAgICAgCQljYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiB2TGlzdEluc2VydC4gKi8NCjI0MDY6ICAgICAgICAgICAgICAgIAkJdkxpc3RJbnNlcnRFbmQoIHB4RXZlbnRMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCkJGRDA1Qzg2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA1QzhBICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQKQkZEMDVDOEMgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwNUM5MCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNUM5MiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDA1Qzk0ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwNUM5NiAgICAgIDBDMDAgICBOT1AKMjQwNzogICAgICAgICAgICAgICAgDQoyNDA4OiAgICAgICAgICAgICAgICAJCS8qIFdlIG11c3QgcmVtb3ZlIHRoaXMgdGFzayBmcm9tIHRoZSByZWFkeSBsaXN0IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlDQoyNDA5OiAgICAgICAgICAgICAgICAJCWJsb2NrZWQgbGlzdCBhcyB0aGUgc2FtZSBsaXN0IGl0ZW0gaXMgdXNlZCBmb3IgYm90aCBsaXN0cy4gIFRoaXMNCjI0MTA6ICAgICAgICAgICAgICAgIAkJZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHNjaGVkdWxlciBsb2NrZWQgc28gaW50ZXJydXB0cyB3aWxsIG5vdA0KMjQxMTogICAgICAgICAgICAgICAgCQlhY2Nlc3MgdGhlIGxpc3RzIGF0IHRoZSBzYW1lIHRpbWUuICovDQoyNDEyOiAgICAgICAgICAgICAgICAJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDVDOTggIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDVDOUMgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA1QzlFICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA1Q0EwICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDA1Q0EyICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDVDQTQgICAgICAwQzAwICAgTk9QCkJGRDA1Q0E2ICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1Q0MyCjI0MTM6ICAgICAgICAgICAgICAgIAkJew0KMjQxNDogICAgICAgICAgICAgICAgCQkJLyogVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIGluIGEgcmVhZHkgbGlzdCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bw0KMjQxNTogICAgICAgICAgICAgICAgCQkJY2hlY2ssIGFuZCB0aGUgcG9ydCByZXNldCBtYWNybyBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5LiAqLw0KMjQxNjogICAgICAgICAgICAgICAgCQkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDVDQUEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDVDQUUgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwNUNCMCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNUNCMiAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjEKQkZEMDVDQjQgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQKQkZEMDVDQjYgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwCkJGRDA1Q0I4ICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApCkJGRDA1Q0JDICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwNUNCRSAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQoyNDE3OiAgICAgICAgICAgICAgICAJCX0NCjI0MTg6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjQxOTogICAgICAgICAgICAgICAgCQl7DQoyNDIwOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyNDIxOiAgICAgICAgICAgICAgICAJCX0NCjI0MjI6ICAgICAgICAgICAgICAgIA0KMjQyMzogICAgICAgICAgICAgICAgCQkvKiBJZiB2VGFza1N1c3BlbmQoKSBpcyBhdmFpbGFibGUgdGhlbiB0aGUgc3VzcGVuZGVkIHRhc2sgbGlzdCBpcyBhbHNvDQoyNDI0OiAgICAgICAgICAgICAgICAJCWF2YWlsYWJsZSBhbmQgYSB0YXNrIHRoYXQgaXMgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGNhbiBlbnRlciB0aGUNCjI0MjU6ICAgICAgICAgICAgICAgIAkJc3VzcGVuZGVkIHN0YXRlIChpdCBpcyBub3QgcmVhbGx5IHN1c3BlbmRlZCBhcyBpdCB3aWxsIHJlLWVudGVyIHRoZQ0KMjQyNjogICAgICAgICAgICAgICAgCQlSZWFkeSBzdGF0ZSB3aGVuIHRoZSBldmVudCBpdCBpcyB3YWl0aW5nIGluZGVmaW5pdGVseSBmb3Igb2NjdXJzKS4NCjI0Mjc6ICAgICAgICAgICAgICAgIAkJQmxvY2tpbmcgaW5kZWZpbml0ZWx5IGlzIHVzZWZ1bCB3aGVuIHVzaW5nIHRpY2tsZXNzIGlkbGUgbW9kZSBhcyB3aGVuDQoyNDI4OiAgICAgICAgICAgICAgICAJCWFsbCB0YXNrcyBhcmUgYmxvY2tlZCBpbmRlZmluaXRlbHkgYWxsIHRpbWVycyBjYW4gYmUgdHVybmVkIG9mZi4gKi8NCjI0Mjk6ICAgICAgICAgICAgICAgIAkJI2lmKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjI0MzA6ICAgICAgICAgICAgICAgIAkJew0KMjQzMTogICAgICAgICAgICAgICAgCQkJaWYoIHhXYWl0SW5kZWZpbml0ZWx5ID09IHBkVFJVRSApDQpCRkQwNUNDMiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpCkJGRDA1Q0M2ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA1Q0M4ICAwMDBFQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDVDRTgKQkZEMDVDQ0EgIDBDMDAwMDBFICAgU0xMIFpFUk8sIFQ2LCAxCkJGRDA1Q0NDICAgICAgMEMwMCAgIE5PUAoyNDMyOiAgICAgICAgICAgICAgICAJCQl7DQoyNDMzOiAgICAgICAgICAgICAgICAJCQkJLyogQWRkIHRoZSB0YXNrIHRvIHRoZSBzdXNwZW5kZWQgdGFzayBsaXN0IGluc3RlYWQgb2YgYSBkZWxheWVkDQoyNDM0OiAgICAgICAgICAgICAgICAJCQkJdGFzayBsaXN0IHRvIGVuc3VyZSB0aGUgdGFzayBpcyBub3Qgd29rZW4gYnkgYSB0aW1pbmcgZXZlbnQuICBJdA0KMjQzNTogICAgICAgICAgICAgICAgCQkJCXdpbGwgYmxvY2sgaW5kZWZpbml0ZWx5LiAqLw0KMjQzNjogICAgICAgICAgICAgICAgCQkJCXZMaXN0SW5zZXJ0RW5kKCAmeFN1c3BlbmRlZFRhc2tMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDVDQ0UgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDVDRDIgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA1Q0Q0ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDA1Q0Q2ICAzMDgzQkZEMiAgIExEQzEgRjMwLCAxMjQxOShTMikKQkZEMDVDRDggIDgwRTQzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NDAKQkZEMDVDREMgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDVDREUgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwNUNFMCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDVDRTIgICAgICAwQzAwICAgTk9QCkJGRDA1Q0U0ICAgICAgQ0MwRCAgIEIgMHhCRkQwNUQwMApCRkQwNUNFNiAgICAgIDBDMDAgICBOT1AKMjQzNzogICAgICAgICAgICAgICAgCQkJfQ0KMjQzODogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjQzOTogICAgICAgICAgICAgICAgCQkJew0KMjQ0MDogICAgICAgICAgICAgICAgCQkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlDQoyNDQxOiAgICAgICAgICAgICAgICAJCQkJZXZlbnQgZG9lcyBub3Qgb2NjdXIuICBUaGlzIG1heSBvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0DQoyNDQyOiAgICAgICAgICAgICAgICAJCQkJbWF0dGVyLiAqLw0KMjQ0MzogICAgICAgICAgICAgICAgCQkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvV2FpdDsNCkJGRDA1Q0U4ICA4MDNDRkM3QyAgIExXIFYxLCAtMzI3MDgoR1ApCkJGRDA1Q0VDICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDVDRjAgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDA1Q0YyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjQ0NDogICAgICAgICAgICAgICAgCQkJCXRyYWNlVEFTS19ERUxBWV9VTlRJTCgpOw0KMjQ0NTogICAgICAgICAgICAgICAgCQkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCkJGRDA1Q0Y2ICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkKQkZEMDVDRkEgIDM3MzQ3N0U4ICAgSkFMUyBwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QKQkZEMDVDRkMgIDBDMDAzNzM0ICAgTEhVIFQ5LCAzMDcyKFM0KQpCRkQwNUNGRSAgICAgIDBDMDAgICBOT1AKMjQ0NjogICAgICAgICAgICAgICAgCQkJfQ0KMjQ0NzogICAgICAgICAgICAgICAgCQl9DQoyNDQ4OiAgICAgICAgICAgICAgICAJCSNlbHNlDQoyNDQ5OiAgICAgICAgICAgICAgICAJCXsNCjI0NTA6ICAgICAgICAgICAgICAgIAkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlIGV2ZW50DQoyNDUxOiAgICAgICAgICAgICAgICAJCQlkb2VzIG5vdCBvY2N1ci4gIFRoaXMgbWF5IG92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLiAqLw0KMjQ1MjogICAgICAgICAgICAgICAgCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KMjQ1MzogICAgICAgICAgICAgICAgCQkJdHJhY2VUQVNLX0RFTEFZX1VOVElMKCk7DQoyNDU0OiAgICAgICAgICAgICAgICAJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQoyNDU1OiAgICAgICAgICAgICAgICANCjI0NTY6ICAgICAgICAgICAgICAgIAkJCS8qIFJlbW92ZSBjb21waWxlciB3YXJuaW5ncyB3aGVuIElOQ0xVREVfdlRhc2tTdXNwZW5kKCkgaXMgbm90DQoyNDU3OiAgICAgICAgICAgICAgICAJCQlkZWZpbmVkLiAqLw0KMjQ1ODogICAgICAgICAgICAgICAgCQkJKCB2b2lkICkgeFdhaXRJbmRlZmluaXRlbHk7DQoyNDU5OiAgICAgICAgICAgICAgICAJCX0NCjI0NjA6ICAgICAgICAgICAgICAgIAkJI2VuZGlmDQoyNDYxOiAgICAgICAgICAgICAgICAJfQ0KQkZEMDVEMDAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDVEMDIgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNUQwNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA1RDA2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDVEMDggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNUQwQSAgICAgIDBDMDAgICBOT1AKMjQ2MjogICAgICAgICAgICAgICAgDQoyNDYzOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RJTUVSUyAqLw0KMjQ2NDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDY1OiAgICAgICAgICAgICAgICANCjI0NjY6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCBjb25zdCBMaXN0X3QgKiBjb25zdCBweEV2ZW50TGlzdCApDQoyNDY3OiAgICAgICAgICAgICAgICB7DQpCRkQwNDU3OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNDU3QSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA0NTdDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDQ1N0UgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDQ1ODAgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQoyNDY4OiAgICAgICAgICAgICAgICBUQ0JfdCAqcHhVbmJsb2NrZWRUQ0I7DQoyNDY5OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoyNDcwOiAgICAgICAgICAgICAgICANCjI0NzE6ICAgICAgICAgICAgICAgIAkvKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIEZST00gQSBDUklUSUNBTCBTRUNUSU9OLiAgSXQgY2FuIGFsc28gYmUNCjI0NzI6ICAgICAgICAgICAgICAgIAljYWxsZWQgZnJvbSBhIGNyaXRpY2FsIHNlY3Rpb24gd2l0aGluIGFuIElTUi4gKi8NCjI0NzM6ICAgICAgICAgICAgICAgIA0KMjQ3NDogICAgICAgICAgICAgICAgCS8qIFRoZSBldmVudCBsaXN0IGlzIHNvcnRlZCBpbiBwcmlvcml0eSBvcmRlciwgc28gdGhlIGZpcnN0IGluIHRoZSBsaXN0IGNhbg0KMjQ3NTogICAgICAgICAgICAgICAgCWJlIHJlbW92ZWQgYXMgaXQgaXMga25vd24gdG8gYmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuICBSZW1vdmUgdGhlIFRDQiBmcm9tDQoyNDc2OiAgICAgICAgICAgICAgICAJdGhlIGRlbGF5ZWQgbGlzdCwgYW5kIGFkZCBpdCB0byB0aGUgcmVhZHkgbGlzdC4NCjI0Nzc6ICAgICAgICAgICAgICAgIA0KMjQ3ODogICAgICAgICAgICAgICAgCUlmIGFuIGV2ZW50IGlzIGZvciBhIHF1ZXVlIHRoYXQgaXMgbG9ja2VkIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyDQoyNDc5OiAgICAgICAgICAgICAgICAJZ2V0IGNhbGxlZCAtIHRoZSBsb2NrIGNvdW50IG9uIHRoZSBxdWV1ZSB3aWxsIGdldCBtb2RpZmllZCBpbnN0ZWFkLiAgVGhpcw0KMjQ4MDogICAgICAgICAgICAgICAgCW1lYW5zIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGV2ZW50IGxpc3QgaXMgZ3VhcmFudGVlZCBoZXJlLg0KMjQ4MTogICAgICAgICAgICAgICAgDQoyNDgyOiAgICAgICAgICAgICAgICAJVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBjaGVjayBoYXMgYWxyZWFkeSBiZWVuIG1hZGUgdG8gZW5zdXJlIHRoYXQNCjI0ODM6ICAgICAgICAgICAgICAgIAlweEV2ZW50TGlzdCBpcyBub3QgZW1wdHkuICovDQoyNDg0OiAgICAgICAgICAgICAgICAJcHhVbmJsb2NrZWRUQ0IgPSAoIFRDQl90ICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoIHB4RXZlbnRMaXN0ICk7DQpCRkQwNDU4NCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA0NTg4ICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkKQkZEMDQ1OEEgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwNDU4QyAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjI0ODU6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4VW5ibG9ja2VkVENCICk7DQpCRkQwNDU5MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0NTk0ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0NUFBCkJGRDA0NTk4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0NTlBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQ1OUMgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDQ1OUUgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA0NUEwICAwOUI1MzBBMCAgIEFERElVIEExLCBaRVJPLCAyNDg1CkJGRDA0NUEyICAgICAgMDlCNSAgIExCVSBWMSwgNShWMSkKQkZEMDQ1QTQgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA0NUE2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA0NUE4ICAgICAgMEMwMCAgIE5PUAoyNDg2OiAgICAgICAgICAgICAgICAJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFVuYmxvY2tlZFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDQ1QUEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDVBQyAgNkQyQzAwMTQgICBFWFQgWkVSTywgUzQsIDIwLCAxNApCRkQwNDVBRSAgICAgIDZEMkMgICBBRERJVSBWMCwgVjAsIDI0CkJGRDA0NUIwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA0NUIyICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDA0NUI0ICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDQ1QjYgICAgICAwQzAwICAgTk9QCjI0ODc6ICAgICAgICAgICAgICAgIA0KMjQ4ODogICAgICAgICAgICAgICAgCWlmKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAoIFVCYXNlVHlwZV90ICkgcGRGQUxTRSApDQpCRkQwNDVCOCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQpCRkQwNDVCQyAgMDAyNzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDYwRQoyNDg5OiAgICAgICAgICAgICAgICAJew0KMjQ5MDogICAgICAgICAgICAgICAgCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VW5ibG9ja2VkVENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDA0NUMwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQ1QzQgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA0NUM2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA0NUM4ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDA0NUNBICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDQ1Q0MgICAgICAwQzAwICAgTk9QCjI0OTE6ICAgICAgICAgICAgICAgIAkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFVuYmxvY2tlZFRDQiApOw0KQkZEMDQ1Q0UgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDVEMiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDA0NUQ0ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA0NUQ2ICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQpCRkQwNDVEOCAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQpCRkQwNDVEQSAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwNDVERSAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQpCRkQwNDVFMCAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQpCRkQwNDVFNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0NUU4ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDQ1RUEgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwNDVFQyAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDA0NUVFICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQpCRkQwNDVGMCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwNDVGMiAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDA0NUY0ICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwCkJGRDA0NUY4ICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwNDVGQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0NUZFICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwNDYwMCAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwNDYwMiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwNDYwNCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDA0NjA2ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwNDYwOCAgICAgIDBDMDAgICBOT1AKQkZEMDQ2MEEgICAgICBDQzBDICAgQiAweEJGRDA0NjI0CkJGRDA0NjBDICAgICAgMEMwMCAgIE5PUAoyNDkyOiAgICAgICAgICAgICAgICAJfQ0KMjQ5MzogICAgICAgICAgICAgICAgCWVsc2UNCjI0OTQ6ICAgICAgICAgICAgICAgIAl7DQoyNDk1OiAgICAgICAgICAgICAgICAJCS8qIFRoZSBkZWxheWVkIGFuZCByZWFkeSBsaXN0cyBjYW5ub3QgYmUgYWNjZXNzZWQsIHNvIGhvbGQgdGhpcyB0YXNrDQoyNDk2OiAgICAgICAgICAgICAgICAJCXBlbmRpbmcgdW50aWwgdGhlIHNjaGVkdWxlciBpcyByZXN1bWVkLiAqLw0KMjQ5NzogICAgICAgICAgICAgICAgCQl2TGlzdEluc2VydEVuZCggJiggeFBlbmRpbmdSZWFkeUxpc3QgKSwgJiggcHhVbmJsb2NrZWRUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCkJGRDA0NjBFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQ2MTAgIDZEMkMwMDE0ICAgRVhUIFpFUk8sIFM0LCAyMCwgMTQKQkZEMDQ2MTIgICAgICA2RDJDICAgQURESVUgVjAsIFYwLCAyNApCRkQwNDYxNCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwNDYxNiAgMzA4M0JGRDIgICBMREMxIEYzMCwgMTI0MTkoUzIpCkJGRDA0NjE4ICA4MEQwMzA4MyAgIEFERElVIEEwLCBWMSwgLTMyNTYwCkJGRDA0NjFDICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA0NjFFICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQKQkZEMDQ2MjAgIDBDMDAzRTRBICAgTEggUzIsIDMwNzIoVDIpCkJGRDA0NjIyICAgICAgMEMwMCAgIE5PUAoyNDk4OiAgICAgICAgICAgICAgICAJfQ0KMjQ5OTogICAgICAgICAgICAgICAgDQoyNTAwOiAgICAgICAgICAgICAgICAJaWYoIHB4VW5ibG9ja2VkVENCLT51eFByaW9yaXR5ID4gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDA0NjI0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQ2MjggICAgICA2OUFCICAgTFcgVjEsIDQ0KFYwKQpCRkQwNDYyQSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNDYyRSAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDA0NjMwICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQpCRkQwNDYzMiAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTAKQkZEMDQ2MzQgIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDQ2NDgKMjUwMTogICAgICAgICAgICAgICAgCXsNCjI1MDI6ICAgICAgICAgICAgICAgIAkJLyogUmV0dXJuIHRydWUgaWYgdGhlIHRhc2sgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0IGhhcyBhIGhpZ2hlcg0KMjUwMzogICAgICAgICAgICAgICAgCQlwcmlvcml0eSB0aGFuIHRoZSBjYWxsaW5nIHRhc2suICBUaGlzIGFsbG93cyB0aGUgY2FsbGluZyB0YXNrIHRvIGtub3cgaWYNCjI1MDQ6ICAgICAgICAgICAgICAgIAkJaXQgc2hvdWxkIGZvcmNlIGEgY29udGV4dCBzd2l0Y2ggbm93LiAqLw0KMjUwNTogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDQ2MzggICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDQ2M0EgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyNTA2OiAgICAgICAgICAgICAgICANCjI1MDc6ICAgICAgICAgICAgICAgIAkJLyogTWFyayB0aGF0IGEgeWllbGQgaXMgcGVuZGluZyBpbiBjYXNlIHRoZSB1c2VyIGlzIG5vdCB1c2luZyB0aGUNCjI1MDg6ICAgICAgICAgICAgICAgIAkJInhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiIgcGFyYW1ldGVyIHRvIGFuIElTUiBzYWZlIEZyZWVSVE9TIGZ1bmN0aW9uLiAqLw0KMjUwOTogICAgICAgICAgICAgICAgCQl4WWllbGRQZW5kaW5nID0gcGRUUlVFOw0KQkZEMDQ2M0UgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDQ2NDAgIDgwNENGODVDICAgU1cgVjAsIC0zMjY5MihHUCkKQkZEMDQ2NDQgICAgICBDQzAzICAgQiAweEJGRDA0NjRDCkJGRDA0NjQ2ICAgICAgMEMwMCAgIE5PUAoyNTEwOiAgICAgICAgICAgICAgICAJfQ0KMjUxMTogICAgICAgICAgICAgICAgCWVsc2UNCjI1MTI6ICAgICAgICAgICAgICAgIAl7DQoyNTEzOiAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDQ2NDggIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjI1MTQ6ICAgICAgICAgICAgICAgIAl9DQoyNTE1OiAgICAgICAgICAgICAgICANCjI1MTY6ICAgICAgICAgICAgICAgIAkjaWYoIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICE9IDAgKQ0KMjUxNzogICAgICAgICAgICAgICAgCXsNCjI1MTg6ICAgICAgICAgICAgICAgIAkJLyogSWYgYSB0YXNrIGlzIGJsb2NrZWQgb24gYSBrZXJuZWwgb2JqZWN0IHRoZW4geE5leHRUYXNrVW5ibG9ja1RpbWUNCjI1MTk6ICAgICAgICAgICAgICAgIAkJbWlnaHQgYmUgc2V0IHRvIHRoZSBibG9ja2VkIHRhc2sncyB0aW1lIG91dCB0aW1lLiAgSWYgdGhlIHRhc2sgaXMNCjI1MjA6ICAgICAgICAgICAgICAgIAkJdW5ibG9ja2VkIGZvciBhIHJlYXNvbiBvdGhlciB0aGFuIGEgdGltZW91dCB4TmV4dFRhc2tVbmJsb2NrVGltZSBpcw0KMjUyMTogICAgICAgICAgICAgICAgCQlub3JtYWxseSBsZWZ0IHVuY2hhbmdlZCwgYmVjYXVzZSBpdCBpcyBhdXRvbWF0aWNhbGx5IHJlc2V0IHRvIGEgbmV3DQoyNTIyOiAgICAgICAgICAgICAgICAJCXZhbHVlIHdoZW4gdGhlIHRpY2sgY291bnQgZXF1YWxzIHhOZXh0VGFza1VuYmxvY2tUaW1lLiAgSG93ZXZlciBpZg0KMjUyMzogICAgICAgICAgICAgICAgCQl0aWNrbGVzcyBpZGxpbmcgaXMgdXNlZCBpdCBtaWdodCBiZSBtb3JlIGltcG9ydGFudCB0byBlbnRlciBzbGVlcCBtb2RlDQoyNTI0OiAgICAgICAgICAgICAgICAJCWF0IHRoZSBlYXJsaWVzdCBwb3NzaWJsZSB0aW1lIC0gc28gcmVzZXQgeE5leHRUYXNrVW5ibG9ja1RpbWUgaGVyZSB0bw0KMjUyNTogICAgICAgICAgICAgICAgCQllbnN1cmUgaXQgaXMgdXBkYXRlZCBhdCB0aGUgZWFybGllc3QgcG9zc2libGUgdGltZS4gKi8NCjI1MjY6ICAgICAgICAgICAgICAgIAkJcHJ2UmVzZXROZXh0VGFza1VuYmxvY2tUaW1lKCk7DQoyNTI3OiAgICAgICAgICAgICAgICAJfQ0KMjUyODogICAgICAgICAgICAgICAgCSNlbmRpZg0KMjUyOTogICAgICAgICAgICAgICAgDQoyNTMwOiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwNDY0QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjI1MzE6ICAgICAgICAgICAgICAgIH0NCkJGRDA0NjUwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA0NjUyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDQ2NTQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwNDY1NiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA0NjU4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDQ2NUEgICAgICAwQzAwICAgTk9QCjI1MzI6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjUzMzogICAgICAgICAgICAgICAgDQoyNTM0OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhUYXNrUmVtb3ZlRnJvbVVub3JkZXJlZEV2ZW50TGlzdCggTGlzdEl0ZW1fdCAqIHB4RXZlbnRMaXN0SXRlbSwgY29uc3QgVGlja1R5cGVfdCB4SXRlbVZhbHVlICkNCjI1MzU6ICAgICAgICAgICAgICAgIHsNCkJGRDA0MkM0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA0MkM2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDQyQzggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNDJDQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNDJDQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA0MkQwICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKMjUzNjogICAgICAgICAgICAgICAgVENCX3QgKnB4VW5ibG9ja2VkVENCOw0KMjUzNzogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjUzODogICAgICAgICAgICAgICAgDQoyNTM5OiAgICAgICAgICAgICAgICAJLyogVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIFRIRSBTQ0hFRFVMRVIgU1VTUEVOREVELiAgSXQgaXMgdXNlZCBieQ0KMjU0MDogICAgICAgICAgICAgICAgCXRoZSBldmVudCBmbGFncyBpbXBsZW1lbnRhdGlvbi4gKi8NCjI1NDE6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHV4U2NoZWR1bGVyU3VzcGVuZGVkICE9IHBkRkFMU0UgKTsNCkJGRDA0MkQ0ICA4MDVDRkM1QyAgIExXIFYwLCAtMzI2NzYoR1ApCkJGRDA0MkQ4ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0MkVFCkJGRDA0MkRDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0MkRFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQyRTAgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDQyRTIgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA0MkU0ICAwOUVEMzBBMCAgIEFERElVIEExLCBaRVJPLCAyNTQxCkJGRDA0MkU2ICAgICAgMDlFRCAgIExCVSBWMSwgMTMoQTIpCkJGRDA0MkU4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNDJFQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNDJFQyAgICAgIDBDMDAgICBOT1AKMjU0MjogICAgICAgICAgICAgICAgDQoyNTQzOiAgICAgICAgICAgICAgICAJLyogU3RvcmUgdGhlIG5ldyBpdGVtIHZhbHVlIGluIHRoZSBldmVudCBsaXN0LiAqLw0KMjU0NDogICAgICAgICAgICAgICAgCWxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFKCBweEV2ZW50TGlzdEl0ZW0sIHhJdGVtVmFsdWUgfCB0YXNrRVZFTlRfTElTVF9JVEVNX1ZBTFVFX0lOX1VTRSApOw0KQkZEMDQyRUUgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQpCRkQwNDJGMiAgODAwMDQxQTIgICBMVUkgVjAsIDB4ODAwMApCRkQwNDJGNiAgICAgIDQ0REEgICBPUjE2IFYxLCBWMApCRkQwNDJGOCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA0MkZDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyNTQ1OiAgICAgICAgICAgICAgICANCjI1NDY6ICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgdGhlIGV2ZW50IGxpc3QgZm9ybSB0aGUgZXZlbnQgZmxhZy4gIEludGVycnVwdHMgZG8gbm90IGFjY2Vzcw0KMjU0NzogICAgICAgICAgICAgICAgCWV2ZW50IGZsYWdzLiAqLw0KMjU0ODogICAgICAgICAgICAgICAgCXB4VW5ibG9ja2VkVENCID0gKCBUQ0JfdCAqICkgbGlzdEdFVF9MSVNUX0lURU1fT1dORVIoIHB4RXZlbnRMaXN0SXRlbSApOw0KQkZEMDQyRkUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNDMwMiAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA0MzA0ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMjU0OTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhVbmJsb2NrZWRUQ0IgKTsNCkJGRDA0MzA4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQzMEMgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQzMjIKQkZEMDQzMTAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDQzMTIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNDMxNCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwNDMxNiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDQzMTggIDA5RjUzMEEwICAgQURESVUgQTEsIFpFUk8sIDI1NDkKQkZEMDQzMUEgICAgICAwOUY1ICAgTEJVIFYxLCA1KEEzKQpCRkQwNDMxQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDQzMUUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDQzMjAgICAgICAwQzAwICAgTk9QCjI1NTA6ICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB1eExpc3RSZW1vdmUoIHB4RXZlbnRMaXN0SXRlbSApOw0KQkZEMDQzMjIgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwNDMyNiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwNDMyOCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDA0MzJBICAgICAgMEMwMCAgIE5PUAoyNTUxOiAgICAgICAgICAgICAgICANCjI1NTI6ICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgZGVsYXllZCBsaXN0IGFuZCBhZGQgaXQgdG8gdGhlIHJlYWR5IGxpc3QuICBUaGUNCjI1NTM6ICAgICAgICAgICAgICAgIAlzY2hlZHVsZXIgaXMgc3VzcGVuZGVkIHNvIGludGVycnVwdHMgd2lsbCBub3QgYmUgYWNjZXNzaW5nIHRoZSByZWFkeQ0KMjU1NDogICAgICAgICAgICAgICAgCWxpc3RzLiAqLw0KMjU1NTogICAgICAgICAgICAgICAgCSggdm9pZCApIHV4TGlzdFJlbW92ZSggJiggcHhVbmJsb2NrZWRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDQzMkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDMzMCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDQzMzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDQzMzQgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUKQkZEMDQzMzYgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQpCRkQwNDMzOCAgICAgIDBDMDAgICBOT1AKMjU1NjogICAgICAgICAgICAgICAgCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhVbmJsb2NrZWRUQ0IgKTsNCkJGRDA0MzNBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQzM0UgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwNDM0MCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNDM0MiAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjEKQkZEMDQzNDQgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkKQkZEMDQzNDYgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDQzNEEgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDQzNEMgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKQkZEMDQzNTAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDM1NCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDA0MzU2ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDQzNTggICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwNDM1QSAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDQzNUMgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDQzNUUgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwNDM2MCAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwNDM2NCAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDQzNjYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDM2QSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDQzNkMgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDQzNkUgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDQzNzAgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwNDM3MiAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDQzNzQgICAgICAwQzAwICAgTk9QCjI1NTc6ICAgICAgICAgICAgICAgIA0KMjU1ODogICAgICAgICAgICAgICAgCWlmKCBweFVuYmxvY2tlZFRDQi0+dXhQcmlvcml0eSA+IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwNDM3NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0MzdBICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDQzN0MgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDQzODAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwNDM4MiAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDQzODQgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDA0Mzg2ICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0MzlBCjI1NTk6ICAgICAgICAgICAgICAgIAl7DQoyNTYwOiAgICAgICAgICAgICAgICAJCS8qIFJldHVybiB0cnVlIGlmIHRoZSB0YXNrIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgbGlzdCBoYXMNCjI1NjE6ICAgICAgICAgICAgICAgIAkJYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgY2FsbGluZyB0YXNrLiAgVGhpcyBhbGxvd3MNCjI1NjI6ICAgICAgICAgICAgICAgIAkJdGhlIGNhbGxpbmcgdGFzayB0byBrbm93IGlmIGl0IHNob3VsZCBmb3JjZSBhIGNvbnRleHQNCjI1NjM6ICAgICAgICAgICAgICAgIAkJc3dpdGNoIG5vdy4gKi8NCjI1NjQ6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA0MzhBICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0MzhDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjU2NTogICAgICAgICAgICAgICAgDQoyNTY2OiAgICAgICAgICAgICAgICAJCS8qIE1hcmsgdGhhdCBhIHlpZWxkIGlzIHBlbmRpbmcgaW4gY2FzZSB0aGUgdXNlciBpcyBub3QgdXNpbmcgdGhlDQoyNTY3OiAgICAgICAgICAgICAgICAJCSJ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4iIHBhcmFtZXRlciB0byBhbiBJU1Igc2FmZSBGcmVlUlRPUyBmdW5jdGlvbi4gKi8NCjI1Njg6ICAgICAgICAgICAgICAgIAkJeFlpZWxkUGVuZGluZyA9IHBkVFJVRTsNCkJGRDA0MzkwICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0MzkyICA4MDRDRjg1QyAgIFNXIFYwLCAtMzI2OTIoR1ApCkJGRDA0Mzk2ICAgICAgQ0MwMyAgIEIgMHhCRkQwNDM5RQpCRkQwNDM5OCAgICAgIDBDMDAgICBOT1AKMjU2OTogICAgICAgICAgICAgICAgCX0NCjI1NzA6ICAgICAgICAgICAgICAgIAllbHNlDQoyNTcxOiAgICAgICAgICAgICAgICAJew0KMjU3MjogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDA0MzlBICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQoyNTczOiAgICAgICAgICAgICAgICAJfQ0KMjU3NDogICAgICAgICAgICAgICAgDQoyNTc1OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwNDM5RSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjI1NzY6ICAgICAgICAgICAgICAgIH0NCkJGRDA0M0EyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA0M0E0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDQzQTYgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwNDNBOCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA0M0FBICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDQzQUMgICAgICAwQzAwICAgTk9QCjI1Nzc6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjU3ODogICAgICAgICAgICAgICAgDQoyNTc5OiAgICAgICAgICAgICAgICB2b2lkIHZUYXNrU2V0VGltZU91dFN0YXRlKCBUaW1lT3V0X3QgKiBjb25zdCBweFRpbWVPdXQgKQ0KMjU4MDogICAgICAgICAgICAgICAgew0KQkZEMDhGNEMgICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQKQkZEMDhGNEUgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQpCRkQwOEY1MCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApCkJGRDA4RjUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4RjU0ICAwMDE4Rjg5RSAgIFNXIEEwLCAyNChTOCkKMjU4MTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhUaW1lT3V0ICk7DQpCRkQwOEY1OCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA4RjVDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA4RjcyCkJGRDA4RjYwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA4RjYyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDhGNjQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDhGNjYgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA4RjY4ICAwQTE1MzBBMCAgIEFERElVIEExLCBaRVJPLCAyNTgxCkJGRDA4RjZBICAgICAgMEExNSAgIExCVSBBMCwgNShTMSkKQkZEMDhGNkMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA4RjZFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA4RjcwICAgICAgMEMwMCAgIE5PUAoyNTgyOiAgICAgICAgICAgICAgICAJcHhUaW1lT3V0LT54T3ZlcmZsb3dDb3VudCA9IHhOdW1PZk92ZXJmbG93czsNCkJGRDA4RjcyICA4MDUwRkM3QyAgIExXIFYxLCAtMzI2ODgoR1ApCkJGRDA4Rjc2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDhGN0EgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjI1ODM6ICAgICAgICAgICAgICAgIAlweFRpbWVPdXQtPnhUaW1lT25FbnRlcmluZyA9IHhUaWNrQ291bnQ7DQpCRkQwOEY3QyAgODAzQ0ZDN0MgICBMVyBWMSwgLTMyNzA4KEdQKQpCRkQwOEY4MCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA4Rjg0ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQoyNTg0OiAgICAgICAgICAgICAgICB9DQpCRkQwOEY4NiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOEY4OCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA4RjhBICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDhGOEMgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwOEY4RSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4RjkwICAgICAgMEMwMCAgIE5PUAoyNTg1OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI1ODY6ICAgICAgICAgICAgICAgIA0KMjU4NzogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGFza0NoZWNrRm9yVGltZU91dCggVGltZU91dF90ICogY29uc3QgcHhUaW1lT3V0LCBUaWNrVHlwZV90ICogY29uc3QgcHhUaWNrc1RvV2FpdCApDQoyNTg4OiAgICAgICAgICAgICAgICB7DQpCRkQwM0ZFQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwM0ZFRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDAzRkYwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDNGRjIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDNGRjQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwM0ZGOCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpCjI1ODk6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjI1OTA6ICAgICAgICAgICAgICAgIA0KMjU5MTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhUaW1lT3V0ICk7DQpCRkQwM0ZGQyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA0MDAwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0MDE2CkJGRDA0MDA0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0MDA2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQwMDggIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDQwMEEgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA0MDBDICAwQTFGMzBBMCAgIEFERElVIEExLCBaRVJPLCAyNTkxCkJGRDA0MDBFICAgICAgMEExRiAgIExCVSBBMCwgLTEoUzEpCkJGRDA0MDEwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNDAxMiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNDAxNCAgICAgIDBDMDAgICBOT1AKMjU5MjogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhUaWNrc1RvV2FpdCApOw0KQkZEMDQwMTYgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwNDAxQSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDAzMApCRkQwNDAxRSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNDAyMCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA0MDIyICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDA0MDI0ICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwNDAyNiAgMEEyMDMwQTAgICBBRERJVSBBMSwgWkVSTywgMjU5MgpCRkQwNDAyOCAgICAgIDBBMjAgICBMQlUgQTAsIDAoVjApCkJGRDA0MDJBICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNDAyQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNDAyRSAgICAgIDBDMDAgICBOT1AKMjU5MzogICAgICAgICAgICAgICAgDQoyNTk0OiAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwNDAzMCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwNDAzMiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDQwMzQgICAgICAwQzAwICAgTk9QCjI1OTU6ICAgICAgICAgICAgICAgIAl7DQoyNTk2OiAgICAgICAgICAgICAgICAJCS8qIE1pbm9yIG9wdGltaXNhdGlvbi4gIFRoZSB0aWNrIGNvdW50IGNhbm5vdCBjaGFuZ2UgaW4gdGhpcyBibG9jay4gKi8NCjI1OTc6ICAgICAgICAgICAgICAgIAkJY29uc3QgVGlja1R5cGVfdCB4Q29uc3RUaWNrQ291bnQgPSB4VGlja0NvdW50Ow0KQkZEMDQwMzYgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkKQkZEMDQwM0EgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoyNTk4OiAgICAgICAgICAgICAgICANCjI1OTk6ICAgICAgICAgICAgICAgIAkJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoyNjAwOiAgICAgICAgICAgICAgICAJCQkvKiBJZiBJTkNMVURFX3ZUYXNrU3VzcGVuZCBpcyBzZXQgdG8gMSBhbmQgdGhlIGJsb2NrIHRpbWUgc3BlY2lmaWVkIGlzDQoyNjAxOiAgICAgICAgICAgICAgICAJCQl0aGUgbWF4aW11bSBibG9jayB0aW1lIHRoZW4gdGhlIHRhc2sgc2hvdWxkIGJsb2NrIGluZGVmaW5pdGVseSwgYW5kDQoyNjAyOiAgICAgICAgICAgICAgICAJCQl0aGVyZWZvcmUgbmV2ZXIgdGltZSBvdXQuICovDQoyNjAzOiAgICAgICAgICAgICAgICAJCQlpZiggKnB4VGlja3NUb1dhaXQgPT0gcG9ydE1BWF9ERUxBWSApDQpCRkQwNDAzRSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDA0MDQyICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwNDA0NCAgICAgIEVEN0YgICBMSSBWMCwgLTEKQkZEMDQwNDYgIDAwMDVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNDA1NApCRkQwNDA0OCAgMEMwMDAwMDUgICBTTEwgWkVSTywgQTEsIDEKQkZEMDQwNEEgICAgICAwQzAwICAgTk9QCjI2MDQ6ICAgICAgICAgICAgICAgIAkJCXsNCjI2MDU6ICAgICAgICAgICAgICAgIAkJCQl4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDA0MDRDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQpCRkQwNDA0RSAgQ0MzRDAwMTAgICBSRVBMLlBIIFQ5LCAweDEwCkJGRDA0MDUwICAgICAgQ0MzRCAgIEIgMHhCRkQwNDBDQwpCRkQwNDA1MiAgICAgIDBDMDAgICBOT1AKMjYwNjogICAgICAgICAgICAgICAgCQkJfQ0KMjYwNzogICAgICAgICAgICAgICAgCQkJZWxzZSAvKiBXZSBhcmUgbm90IGJsb2NraW5nIGluZGVmaW5pdGVseSwgcGVyZm9ybSB0aGUgY2hlY2tzIGJlbG93LiAqLw0KMjYwODogICAgICAgICAgICAgICAgCQkjZW5kaWYNCjI2MDk6ICAgICAgICAgICAgICAgIA0KMjYxMDogICAgICAgICAgICAgICAgCQlpZiggKCB4TnVtT2ZPdmVyZmxvd3MgIT0gcHhUaW1lT3V0LT54T3ZlcmZsb3dDb3VudCApICYmICggeENvbnN0VGlja0NvdW50ID49IHB4VGltZU91dC0+eFRpbWVPbkVudGVyaW5nICkgKSAvKmxpbnQgIWU1MjUgSW5kZW50YXRpb24gcHJlZmVycmVkIGFzIGlzIHRvIG1ha2UgY29kZSB3aXRoaW4gcHJlLXByb2Nlc3NvciBkaXJlY3RpdmVzIGNsZWFyZXIuICovDQpCRkQwNDA1NCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA0MDU4ICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwNDA1QSAgODA1MEZDNUMgICBMVyBWMCwgLTMyNjg4KEdQKQpCRkQwNDA1RSAgMDAwRjk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA0MDgwCkJGRDA0MDYwICAwQzAwMDAwRiAgIFNMTCBaRVJPLCBUNywgMQpCRkQwNDA2MiAgICAgIDBDMDAgICBOT1AKQkZEMDQwNjQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNDA2OCAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkKQkZEMDQwNkEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDA2RSAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDQwNzAgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDA0MDcyICAwMDA1NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0MDgwCjI2MTE6ICAgICAgICAgICAgICAgIAkJew0KMjYxMjogICAgICAgICAgICAgICAgCQkJLyogVGhlIHRpY2sgY291bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSB0aW1lIGF0IHdoaWNoIHZUYXNrU2V0VGltZW91dCgpDQoyNjEzOiAgICAgICAgICAgICAgICAJCQl3YXMgY2FsbGVkLCBidXQgaGFzIGFsc28gb3ZlcmZsb3dlZCBzaW5jZSB2VGFza1NldFRpbWVPdXQoKSB3YXMgY2FsbGVkLg0KMjYxNDogICAgICAgICAgICAgICAgCQkJSXQgbXVzdCBoYXZlIHdyYXBwZWQgYWxsIHRoZSB3YXkgYXJvdW5kIGFuZCBnb25lIHBhc3QgdXMgYWdhaW4uIFRoaXMNCjI2MTU6ICAgICAgICAgICAgICAgIAkJCXBhc3NlZCBzaW5jZSB2VGFza1NldFRpbWVvdXQoKSB3YXMgY2FsbGVkLiAqLw0KMjYxNjogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA0MDc2ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0MDc4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDQwN0MgICAgICBDQzI3ICAgQiAweEJGRDA0MENDCkJGRDA0MDdFICAgICAgMEMwMCAgIE5PUAoyNjE3OiAgICAgICAgICAgICAgICAJCX0NCjI2MTg6ICAgICAgICAgICAgICAgIAkJZWxzZSBpZiggKCB4Q29uc3RUaWNrQ291bnQgLSBweFRpbWVPdXQtPnhUaW1lT25FbnRlcmluZyApIDwgKnB4VGlja3NUb1dhaXQgKQ0KQkZEMDQwODAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNDA4NCAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDQwODYgIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQpCRkQwNDA4QSAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjAKQkZEMDQwOEMgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwNDA5MCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDQwOTIgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA0MDk0ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwNDA5NiAgMDAxNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNDBDNgoyNjE5OiAgICAgICAgICAgICAgICAJCXsNCjI2MjA6ICAgICAgICAgICAgICAgIAkJCS8qIE5vdCBhIGdlbnVpbmUgdGltZW91dC4gQWRqdXN0IHBhcmFtZXRlcnMgZm9yIHRpbWUgcmVtYWluaW5nLiAqLw0KMjYyMTogICAgICAgICAgICAgICAgCQkJKnB4VGlja3NUb1dhaXQgLT0gKCB4Q29uc3RUaWNrQ291bnQgLSAgcHhUaW1lT3V0LT54VGltZU9uRW50ZXJpbmcgKTsNCkJGRDA0MDlBICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDQwOUUgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDA0MEEwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDQwQTQgICAgICA2QTIxICAgTFcgQTAsIDQoVjApCkJGRDA0MEE2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQwQUEgICAgICAwNTI5ICAgU1VCVSBWMCwgQTAsIFYwCkJGRDA0MEFDICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwNDBBRSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDA0MEIyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyNjIyOiAgICAgICAgICAgICAgICAJCQl2VGFza1NldFRpbWVPdXRTdGF0ZSggcHhUaW1lT3V0ICk7DQpCRkQwNDBCNCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA0MEI4ICA0N0E2NzdFOCAgIEpBTFMgdlRhc2tTZXRUaW1lT3V0U3RhdGUKQkZEMDQwQkMgICAgICAwQzAwICAgTk9QCjI2MjM6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDQwQkUgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCkJGRDA0MEMyICAgICAgQ0MwNCAgIEIgMHhCRkQwNDBDQwpCRkQwNDBDNCAgICAgIDBDMDAgICBOT1AKMjYyNDogICAgICAgICAgICAgICAgCQl9DQoyNjI1OiAgICAgICAgICAgICAgICAJCWVsc2UNCjI2MjY6ICAgICAgICAgICAgICAgIAkJew0KMjYyNzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA0MEM2ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0MEM4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjYyODogICAgICAgICAgICAgICAgCQl9DQoyNjI5OiAgICAgICAgICAgICAgICAJfQ0KMjYzMDogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwNDBDQyAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA0MENFICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1OEQyCkJGRDA0MEQwICAgICAgMEMwMCAgIE5PUAoyNjMxOiAgICAgICAgICAgICAgICANCjI2MzI6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA0MEQyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMjYzMzogICAgICAgICAgICAgICAgfQ0KQkZEMDQwRDYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDQwRDggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNDBEQSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA0MERDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDQwREUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNDBFMCAgICAgIDBDMDAgICBOT1AKMjYzNDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNjM1OiAgICAgICAgICAgICAgICANCjI2MzY6ICAgICAgICAgICAgICAgIHZvaWQgdlRhc2tNaXNzZWRZaWVsZCggdm9pZCApDQoyNjM3OiAgICAgICAgICAgICAgICB7DQpCRkQwOUU1NCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5RTU2ICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUU1OCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoyNjM4OiAgICAgICAgICAgICAgICAJeFlpZWxkUGVuZGluZyA9IHBkVFJVRTsNCkJGRDA5RTVBICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA5RTVDICA4MDRDRjg1QyAgIFNXIFYwLCAtMzI2OTIoR1ApCjI2Mzk6ICAgICAgICAgICAgICAgIH0NCkJGRDA5RTYwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RTYyICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUU2NCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlFNjYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUU2OCAgICAgIDBDMDAgICBOT1AKMjY0MDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNjQxOiAgICAgICAgICAgICAgICANCjI2NDI6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjI2NDM6ICAgICAgICAgICAgICAgIA0KMjY0NDogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4VGFza0dldFRhc2tOdW1iZXIoIFRhc2tIYW5kbGVfdCB4VGFzayApDQoyNjQ1OiAgICAgICAgICAgICAgICAJew0KMjY0NjogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4UmV0dXJuOw0KMjY0NzogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjI2NDg6ICAgICAgICAgICAgICAgIA0KMjY0OTogICAgICAgICAgICAgICAgCQlpZiggeFRhc2sgIT0gTlVMTCApDQoyNjUwOiAgICAgICAgICAgICAgICAJCXsNCjI2NTE6ICAgICAgICAgICAgICAgIAkJCXB4VENCID0gKCBUQ0JfdCAqICkgeFRhc2s7DQoyNjUyOiAgICAgICAgICAgICAgICAJCQl1eFJldHVybiA9IHB4VENCLT51eFRhc2tOdW1iZXI7DQoyNjUzOiAgICAgICAgICAgICAgICAJCX0NCjI2NTQ6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjY1NTogICAgICAgICAgICAgICAgCQl7DQoyNjU2OiAgICAgICAgICAgICAgICAJCQl1eFJldHVybiA9IDBVOw0KMjY1NzogICAgICAgICAgICAgICAgCQl9DQoyNjU4OiAgICAgICAgICAgICAgICANCjI2NTk6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4UmV0dXJuOw0KMjY2MDogICAgICAgICAgICAgICAgCX0NCjI2NjE6ICAgICAgICAgICAgICAgIA0KMjY2MjogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSAqLw0KMjY2MzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNjY0OiAgICAgICAgICAgICAgICANCjI2NjU6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjI2NjY6ICAgICAgICAgICAgICAgIA0KMjY2NzogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tTZXRUYXNrTnVtYmVyKCBUYXNrSGFuZGxlX3QgeFRhc2ssIGNvbnN0IFVCYXNlVHlwZV90IHV4SGFuZGxlICkNCjI2Njg6ICAgICAgICAgICAgICAgIAl7DQoyNjY5OiAgICAgICAgICAgICAgICAJVENCX3QgKnB4VENCOw0KMjY3MDogICAgICAgICAgICAgICAgDQoyNjcxOiAgICAgICAgICAgICAgICAJCWlmKCB4VGFzayAhPSBOVUxMICkNCjI2NzI6ICAgICAgICAgICAgICAgIAkJew0KMjY3MzogICAgICAgICAgICAgICAgCQkJcHhUQ0IgPSAoIFRDQl90ICogKSB4VGFzazsNCjI2NzQ6ICAgICAgICAgICAgICAgIAkJCXB4VENCLT51eFRhc2tOdW1iZXIgPSB1eEhhbmRsZTsNCjI2NzU6ICAgICAgICAgICAgICAgIAkJfQ0KMjY3NjogICAgICAgICAgICAgICAgCX0NCjI2Nzc6ICAgICAgICAgICAgICAgIA0KMjY3ODogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSAqLw0KMjY3OTogICAgICAgICAgICAgICAgDQoyNjgwOiAgICAgICAgICAgICAgICAvKg0KMjY4MTogICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjI2ODI6ICAgICAgICAgICAgICAgICAqIFRoZSBJZGxlIHRhc2suDQoyNjgzOiAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoyNjg0OiAgICAgICAgICAgICAgICAgKg0KMjY4NTogICAgICAgICAgICAgICAgICogVGhlIHBvcnRUQVNLX0ZVTkNUSU9OKCkgbWFjcm8gaXMgdXNlZCB0byBhbGxvdyBwb3J0L2NvbXBpbGVyIHNwZWNpZmljDQoyNjg2OiAgICAgICAgICAgICAgICAgKiBsYW5ndWFnZSBleHRlbnNpb25zLiAgVGhlIGVxdWl2YWxlbnQgcHJvdG90eXBlIGZvciB0aGlzIGZ1bmN0aW9uIGlzOg0KMjY4NzogICAgICAgICAgICAgICAgICoNCjI2ODg6ICAgICAgICAgICAgICAgICAqIHZvaWQgcHJ2SWRsZVRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApOw0KMjY4OTogICAgICAgICAgICAgICAgICoNCjI2OTA6ICAgICAgICAgICAgICAgICAqLw0KMjY5MTogICAgICAgICAgICAgICAgc3RhdGljIHBvcnRUQVNLX0ZVTkNUSU9OKCBwcnZJZGxlVGFzaywgcHZQYXJhbWV0ZXJzICkNCjI2OTI6ICAgICAgICAgICAgICAgIHsNCkJGRDA4QkM0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4QkM2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDhCQzggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOEJDQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOEJDQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA4QkQwICAgICAgQ0MwMiAgIEIgMHhCRkQwOEJENgpCRkQwOEJEMiAgICAgIDBDMDAgICBOT1AKMjY5MzogICAgICAgICAgICAgICAgCS8qIFN0b3Agd2FybmluZ3MuICovDQoyNjk0OiAgICAgICAgICAgICAgICAJKCB2b2lkICkgcHZQYXJhbWV0ZXJzOw0KMjY5NTogICAgICAgICAgICAgICAgDQoyNjk2OiAgICAgICAgICAgICAgICAJZm9yKCA7OyApDQoyNjk3OiAgICAgICAgICAgICAgICAJew0KMjY5ODogICAgICAgICAgICAgICAgCQkvKiBTZWUgaWYgYW55IHRhc2tzIGhhdmUgYmVlbiBkZWxldGVkLiAqLw0KMjY5OTogICAgICAgICAgICAgICAgCQlwcnZDaGVja1Rhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uKCk7DQpCRkQwOEJENiAgMzVBRTc3RTggICBKQUxTIHBydkNoZWNrVGFza3NXYWl0aW5nVGVybWluYXRpb24KQkZEMDhCRDggIDBDMDAzNUFFICAgTEhVIFQ1LCAzMDcyKFQ2KQpCRkQwOEJEQSAgICAgIDBDMDAgICBOT1AKMjcwMDogICAgICAgICAgICAgICAgDQoyNzAxOiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKQ0KMjcwMjogICAgICAgICAgICAgICAgCQl7DQoyNzAzOiAgICAgICAgICAgICAgICAJCQkvKiBJZiB3ZSBhcmUgbm90IHVzaW5nIHByZWVtcHRpb24gd2Uga2VlcCBmb3JjaW5nIGEgdGFzayBzd2l0Y2ggdG8NCjI3MDQ6ICAgICAgICAgICAgICAgIAkJCXNlZSBpZiBhbnkgb3RoZXIgdGFzayBoYXMgYmVjb21lIGF2YWlsYWJsZS4gIElmIHdlIGFyZSB1c2luZw0KMjcwNTogICAgICAgICAgICAgICAgCQkJcHJlZW1wdGlvbiB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoaXMgYXMgYW55IHRhc2sgYmVjb21pbmcgYXZhaWxhYmxlDQoyNzA2OiAgICAgICAgICAgICAgICAJCQl3aWxsIGF1dG9tYXRpY2FsbHkgZ2V0IHRoZSBwcm9jZXNzb3IgYW55d2F5LiAqLw0KMjcwNzogICAgICAgICAgICAgICAgCQkJdGFza1lJRUxEKCk7DQoyNzA4OiAgICAgICAgICAgICAgICAJCX0NCjI3MDk6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9QUkVFTVBUSU9OICovDQoyNzEwOiAgICAgICAgICAgICAgICANCjI3MTE6ICAgICAgICAgICAgICAgIAkJI2lmICggKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkgJiYgKCBjb25maWdJRExFX1NIT1VMRF9ZSUVMRCA9PSAxICkgKQ0KMjcxMjogICAgICAgICAgICAgICAgCQl7DQoyNzEzOiAgICAgICAgICAgICAgICAJCQkvKiBXaGVuIHVzaW5nIHByZWVtcHRpb24gdGFza3Mgb2YgZXF1YWwgcHJpb3JpdHkgd2lsbCBiZQ0KMjcxNDogICAgICAgICAgICAgICAgCQkJdGltZXNsaWNlZC4gIElmIGEgdGFzayB0aGF0IGlzIHNoYXJpbmcgdGhlIGlkbGUgcHJpb3JpdHkgaXMgcmVhZHkNCjI3MTU6ICAgICAgICAgICAgICAgIAkJCXRvIHJ1biB0aGVuIHRoZSBpZGxlIHRhc2sgc2hvdWxkIHlpZWxkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZQ0KMjcxNjogICAgICAgICAgICAgICAgCQkJdGltZXNsaWNlLg0KMjcxNzogICAgICAgICAgICAgICAgDQoyNzE4OiAgICAgICAgICAgICAgICAJCQlBIGNyaXRpY2FsIHJlZ2lvbiBpcyBub3QgcmVxdWlyZWQgaGVyZSBhcyB3ZSBhcmUganVzdCByZWFkaW5nIGZyb20NCjI3MTk6ICAgICAgICAgICAgICAgIAkJCXRoZSBsaXN0LCBhbmQgYW4gb2NjYXNpb25hbCBpbmNvcnJlY3QgdmFsdWUgd2lsbCBub3QgbWF0dGVyLiAgSWYNCjI3MjA6ICAgICAgICAgICAgICAgIAkJCXRoZSByZWFkeSBsaXN0IGF0IHRoZSBpZGxlIHByaW9yaXR5IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgdGFzaw0KMjcyMTogICAgICAgICAgICAgICAgCQkJdGhlbiBhIHRhc2sgb3RoZXIgdGhhbiB0aGUgaWRsZSB0YXNrIGlzIHJlYWR5IHRvIGV4ZWN1dGUuICovDQoyNzIyOiAgICAgICAgICAgICAgICAJCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB0c2tJRExFX1BSSU9SSVRZIF0gKSApID4gKCBVQmFzZVR5cGVfdCApIDEgKQ0KQkZEMDhCREMgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDhCREUgIEZDNDJCRkQyICAgTERDMSBGMzAsIC05NTgoUzIpCkJGRDA4QkUwICA4MDZDRkM0MiAgIExXIFYwLCAtMzI2NjAoVjApCkJGRDA4QkU0ICAwMDAyQjA0MiAgIFNMVElVIFYwLCBWMCwgMgpCRkQwOEJFOCAgRkZGNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEJENApCRkQwOEJFQSAgNzdFOEZGRjQgICBMVyBSQSwgMzA2OTYoUzQpCjI3MjM6ICAgICAgICAgICAgICAgIAkJCXsNCjI3MjQ6ICAgICAgICAgICAgICAgIAkJCQl0YXNrWUlFTEQoKTsNCkJGRDA4QkVDICA0RTU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDhCRUUgICAgICA0RTU2ICAgQURESVUgUzIsIFMyLCAtNQpCRkQwOEJGMCAgICAgIDBDMDAgICBOT1AKQkZEMDhCRjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwOEJGNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4QkZBICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwOEJGRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA4QzAyICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkKQkZEMDhDMDYgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDA4QzA4ICAgICAgNEU2NiAgIEFERElVIFMzLCBTMywgMwpCRkQwOEMwQSAgICAgIDBDMDAgICBOT1AKMjcyNTogICAgICAgICAgICAgICAgCQkJfQ0KMjcyNjogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjcyNzogICAgICAgICAgICAgICAgCQkJew0KMjcyODogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI3Mjk6ICAgICAgICAgICAgICAgIAkJCX0NCjI3MzA6ICAgICAgICAgICAgICAgIAkJfQ0KMjczMTogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogKCAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKSAmJiAoIGNvbmZpZ0lETEVfU0hPVUxEX1lJRUxEID09IDEgKSApICovDQoyNzMyOiAgICAgICAgICAgICAgICANCjI3MzM6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnVVNFX0lETEVfSE9PSyA9PSAxICkNCjI3MzQ6ICAgICAgICAgICAgICAgIAkJew0KMjczNTogICAgICAgICAgICAgICAgCQkJZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uSWRsZUhvb2soIHZvaWQgKTsNCjI3MzY6ICAgICAgICAgICAgICAgIA0KMjczNzogICAgICAgICAgICAgICAgCQkJLyogQ2FsbCB0aGUgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGZyb20gd2l0aGluIHRoZSBpZGxlIHRhc2suICBUaGlzDQoyNzM4OiAgICAgICAgICAgICAgICAJCQlhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIGRlc2lnbmVyIHRvIGFkZCBiYWNrZ3JvdW5kIGZ1bmN0aW9uYWxpdHkNCjI3Mzk6ICAgICAgICAgICAgICAgIAkJCXdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIGEgc2VwYXJhdGUgdGFzay4NCjI3NDA6ICAgICAgICAgICAgICAgIAkJCU5PVEU6IHZBcHBsaWNhdGlvbklkbGVIb29rKCkgTVVTVCBOT1QsIFVOREVSIEFOWSBDSVJDVU1TVEFOQ0VTLA0KMjc0MTogICAgICAgICAgICAgICAgCQkJQ0FMTCBBIEZVTkNUSU9OIFRIQVQgTUlHSFQgQkxPQ0suICovDQoyNzQyOiAgICAgICAgICAgICAgICAJCQl2QXBwbGljYXRpb25JZGxlSG9vaygpOw0KMjc0MzogICAgICAgICAgICAgICAgCQl9DQoyNzQ0OiAgICAgICAgICAgICAgICAJCSNlbmRpZiAvKiBjb25maWdVU0VfSURMRV9IT09LICovDQoyNzQ1OiAgICAgICAgICAgICAgICANCjI3NDY6ICAgICAgICAgICAgICAgIAkJLyogVGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzaG91bGQgdXNlIGluZXF1YWxpdHkgdG8gMCwgbm90IGVxdWFsaXR5DQoyNzQ3OiAgICAgICAgICAgICAgICAJCXRvIDEuICBUaGlzIGlzIHRvIGVuc3VyZSBwb3J0U1VQUFJFU1NfVElDS1NfQU5EX1NMRUVQKCkgaXMgY2FsbGVkIHdoZW4NCjI3NDg6ICAgICAgICAgICAgICAgIAkJdXNlciBkZWZpbmVkIGxvdyBwb3dlciBtb2RlCWltcGxlbWVudGF0aW9ucyByZXF1aXJlDQoyNzQ5OiAgICAgICAgICAgICAgICAJCWNvbmZpZ1VTRV9USUNLTEVTU19JRExFIHRvIGJlIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gMS4gKi8NCjI3NTA6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgIT0gMCApDQoyNzUxOiAgICAgICAgICAgICAgICAJCXsNCjI3NTI6ICAgICAgICAgICAgICAgIAkJVGlja1R5cGVfdCB4RXhwZWN0ZWRJZGxlVGltZTsNCjI3NTM6ICAgICAgICAgICAgICAgIA0KMjc1NDogICAgICAgICAgICAgICAgCQkJLyogSXQgaXMgbm90IGRlc2lyYWJsZSB0byBzdXNwZW5kIHRoZW4gcmVzdW1lIHRoZSBzY2hlZHVsZXIgb24NCjI3NTU6ICAgICAgICAgICAgICAgIAkJCWVhY2ggaXRlcmF0aW9uIG9mIHRoZSBpZGxlIHRhc2suICBUaGVyZWZvcmUsIGEgcHJlbGltaW5hcnkNCjI3NTY6ICAgICAgICAgICAgICAgIAkJCXRlc3Qgb2YgdGhlIGV4cGVjdGVkIGlkbGUgdGltZSBpcyBwZXJmb3JtZWQgd2l0aG91dCB0aGUNCjI3NTc6ICAgICAgICAgICAgICAgIAkJCXNjaGVkdWxlciBzdXNwZW5kZWQuICBUaGUgcmVzdWx0IGhlcmUgaXMgbm90IG5lY2Vzc2FyaWx5DQoyNzU4OiAgICAgICAgICAgICAgICAJCQl2YWxpZC4gKi8NCjI3NTk6ICAgICAgICAgICAgICAgIAkJCXhFeHBlY3RlZElkbGVUaW1lID0gcHJ2R2V0RXhwZWN0ZWRJZGxlVGltZSgpOw0KMjc2MDogICAgICAgICAgICAgICAgDQoyNzYxOiAgICAgICAgICAgICAgICAJCQlpZiggeEV4cGVjdGVkSWRsZVRpbWUgPj0gY29uZmlnRVhQRUNURURfSURMRV9USU1FX0JFRk9SRV9TTEVFUCApDQoyNzYyOiAgICAgICAgICAgICAgICAJCQl7DQoyNzYzOiAgICAgICAgICAgICAgICAJCQkJdlRhc2tTdXNwZW5kQWxsKCk7DQoyNzY0OiAgICAgICAgICAgICAgICAJCQkJew0KMjc2NTogICAgICAgICAgICAgICAgCQkJCQkvKiBOb3cgdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQsIHRoZSBleHBlY3RlZCBpZGxlDQoyNzY2OiAgICAgICAgICAgICAgICAJCQkJCXRpbWUgY2FuIGJlIHNhbXBsZWQgYWdhaW4sIGFuZCB0aGlzIHRpbWUgaXRzIHZhbHVlIGNhbg0KMjc2NzogICAgICAgICAgICAgICAgCQkJCQliZSB1c2VkLiAqLw0KMjc2ODogICAgICAgICAgICAgICAgCQkJCQljb25maWdBU1NFUlQoIHhOZXh0VGFza1VuYmxvY2tUaW1lID49IHhUaWNrQ291bnQgKTsNCjI3Njk6ICAgICAgICAgICAgICAgIAkJCQkJeEV4cGVjdGVkSWRsZVRpbWUgPSBwcnZHZXRFeHBlY3RlZElkbGVUaW1lKCk7DQoyNzcwOiAgICAgICAgICAgICAgICANCjI3NzE6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhFeHBlY3RlZElkbGVUaW1lID49IGNvbmZpZ0VYUEVDVEVEX0lETEVfVElNRV9CRUZPUkVfU0xFRVAgKQ0KMjc3MjogICAgICAgICAgICAgICAgCQkJCQl7DQoyNzczOiAgICAgICAgICAgICAgICAJCQkJCQl0cmFjZUxPV19QT1dFUl9JRExFX0JFR0lOKCk7DQoyNzc0OiAgICAgICAgICAgICAgICAJCQkJCQlwb3J0U1VQUFJFU1NfVElDS1NfQU5EX1NMRUVQKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KMjc3NTogICAgICAgICAgICAgICAgCQkJCQkJdHJhY2VMT1dfUE9XRVJfSURMRV9FTkQoKTsNCjI3NzY6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjc3NzogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoyNzc4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjI3Nzk6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI3ODA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjc4MTogICAgICAgICAgICAgICAgCQkJCX0NCjI3ODI6ICAgICAgICAgICAgICAgIAkJCQkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KMjc4MzogICAgICAgICAgICAgICAgCQkJfQ0KMjc4NDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjc4NTogICAgICAgICAgICAgICAgCQkJew0KMjc4NjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI3ODc6ICAgICAgICAgICAgICAgIAkJCX0NCjI3ODg6ICAgICAgICAgICAgICAgIAkJfQ0KMjc4OTogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgKi8NCjI3OTA6ICAgICAgICAgICAgICAgIAl9DQpCRkQwOEJENCAgICAgIDBDMDAgICBOT1AKQkZEMDhDMEMgICAgICBDRkU0ICAgQiAweEJGRDA4QkQ2CkJGRDA4QzBFICAgICAgMEMwMCAgIE5PUAoyNzkxOiAgICAgICAgICAgICAgICB9DQoyNzkyOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI3OTM6ICAgICAgICAgICAgICAgIA0KMjc5NDogICAgICAgICAgICAgICAgI2lmKCBjb25maWdVU0VfVElDS0xFU1NfSURMRSAhPSAwICkNCjI3OTU6ICAgICAgICAgICAgICAgIA0KMjc5NjogICAgICAgICAgICAgICAgCWVTbGVlcE1vZGVTdGF0dXMgZVRhc2tDb25maXJtU2xlZXBNb2RlU3RhdHVzKCB2b2lkICkNCjI3OTc6ICAgICAgICAgICAgICAgIAl7DQoyNzk4OiAgICAgICAgICAgICAgICAJLyogVGhlIGlkbGUgdGFzayBleGlzdHMgaW4gYWRkaXRpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHRhc2tzLiAqLw0KMjc5OTogICAgICAgICAgICAgICAgCWNvbnN0IFVCYXNlVHlwZV90IHV4Tm9uQXBwbGljYXRpb25UYXNrcyA9IDE7DQoyODAwOiAgICAgICAgICAgICAgICAJZVNsZWVwTW9kZVN0YXR1cyBlUmV0dXJuID0gZVN0YW5kYXJkU2xlZXA7DQoyODAxOiAgICAgICAgICAgICAgICANCjI4MDI6ICAgICAgICAgICAgICAgIAkJaWYoIGxpc3RDVVJSRU5UX0xJU1RfTEVOR1RIKCAmeFBlbmRpbmdSZWFkeUxpc3QgKSAhPSAwICkNCjI4MDM6ICAgICAgICAgICAgICAgIAkJew0KMjgwNDogICAgICAgICAgICAgICAgCQkJLyogQSB0YXNrIHdhcyBtYWRlIHJlYWR5IHdoaWxlIHRoZSBzY2hlZHVsZXIgd2FzIHN1c3BlbmRlZC4gKi8NCjI4MDU6ICAgICAgICAgICAgICAgIAkJCWVSZXR1cm4gPSBlQWJvcnRTbGVlcDsNCjI4MDY6ICAgICAgICAgICAgICAgIAkJfQ0KMjgwNzogICAgICAgICAgICAgICAgCQllbHNlIGlmKCB4WWllbGRQZW5kaW5nICE9IHBkRkFMU0UgKQ0KMjgwODogICAgICAgICAgICAgICAgCQl7DQoyODA5OiAgICAgICAgICAgICAgICAJCQkvKiBBIHlpZWxkIHdhcyBwZW5kZWQgd2hpbGUgdGhlIHNjaGVkdWxlciB3YXMgc3VzcGVuZGVkLiAqLw0KMjgxMDogICAgICAgICAgICAgICAgCQkJZVJldHVybiA9IGVBYm9ydFNsZWVwOw0KMjgxMTogICAgICAgICAgICAgICAgCQl9DQoyODEyOiAgICAgICAgICAgICAgICAJCWVsc2UNCjI4MTM6ICAgICAgICAgICAgICAgIAkJew0KMjgxNDogICAgICAgICAgICAgICAgCQkJLyogSWYgYWxsIHRoZSB0YXNrcyBhcmUgaW4gdGhlIHN1c3BlbmRlZCBsaXN0ICh3aGljaCBtaWdodCBtZWFuIHRoZXkNCjI4MTU6ICAgICAgICAgICAgICAgIAkJCWhhdmUgYW4gaW5maW5pdGUgYmxvY2sgdGltZSByYXRoZXIgdGhhbiBhY3R1YWxseSBiZWluZyBzdXNwZW5kZWQpDQoyODE2OiAgICAgICAgICAgICAgICAJCQl0aGVuIGl0IGlzIHNhZmUgdG8gdHVybiBhbGwgY2xvY2tzIG9mZiBhbmQganVzdCB3YWl0IGZvciBleHRlcm5hbA0KMjgxNzogICAgICAgICAgICAgICAgCQkJaW50ZXJydXB0cy4gKi8NCjI4MTg6ICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggJnhTdXNwZW5kZWRUYXNrTGlzdCApID09ICggdXhDdXJyZW50TnVtYmVyT2ZUYXNrcyAtIHV4Tm9uQXBwbGljYXRpb25UYXNrcyApICkNCjI4MTk6ICAgICAgICAgICAgICAgIAkJCXsNCjI4MjA6ICAgICAgICAgICAgICAgIAkJCQllUmV0dXJuID0gZU5vVGFza3NXYWl0aW5nVGltZW91dDsNCjI4MjE6ICAgICAgICAgICAgICAgIAkJCX0NCjI4MjI6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjI4MjM6ICAgICAgICAgICAgICAgIAkJCXsNCjI4MjQ6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyODI1OiAgICAgICAgICAgICAgICAJCQl9DQoyODI2OiAgICAgICAgICAgICAgICAJCX0NCjI4Mjc6ICAgICAgICAgICAgICAgIA0KMjgyODogICAgICAgICAgICAgICAgCQlyZXR1cm4gZVJldHVybjsNCjI4Mjk6ICAgICAgICAgICAgICAgIAl9DQoyODMwOiAgICAgICAgICAgICAgICANCjI4MzE6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVElDS0xFU1NfSURMRSAqLw0KMjgzMjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyODMzOiAgICAgICAgICAgICAgICANCjI4MzQ6ICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkluaXRpYWxpc2VUQ0JWYXJpYWJsZXMoIFRDQl90ICogY29uc3QgcHhUQ0IsIGNvbnN0IGNoYXIgKiBjb25zdCBwY05hbWUsIFVCYXNlVHlwZV90IHV4UHJpb3JpdHksIGNvbnN0IE1lbW9yeVJlZ2lvbl90ICogY29uc3QgeFJlZ2lvbnMsIGNvbnN0IHVpbnQxNl90IHVzU3RhY2tEZXB0aCApIC8qbGludCAhZTk3MSBVbnF1YWxpZmllZCBjaGFyIHR5cGVzIGFyZSBhbGxvd2VkIGZvciBzdHJpbmdzIGFuZCBzaW5nbGUgY2hhcmFjdGVycyBvbmx5LiAqLw0KMjgzNTogICAgICAgICAgICAgICAgew0KQkZEMDNDRTggICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDNDRUEgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwM0NFQyAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDAzQ0VFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAzQ0YwICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKQkZEMDNDRjQgIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQpCRkQwM0NGOCAgMDAzMEY4REUgICBTVyBBMiwgNDgoUzgpCkJGRDAzQ0ZDICAwMDM0RjhGRSAgIFNXIEEzLCA1MihTOCkKQkZEMDNEMDAgIDAwMzhGQzVFICAgTFcgVjAsIDU2KFM4KQpCRkQwM0QwNCAgMDAxODM4NUUgICBTSCBWMCwgMjQoUzgpCjI4MzY6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHg7DQoyODM3OiAgICAgICAgICAgICAgICANCjI4Mzg6ICAgICAgICAgICAgICAgIAkvKiBTdG9yZSB0aGUgdGFzayBuYW1lIGluIHRoZSBUQ0IuICovDQoyODM5OiAgICAgICAgICAgICAgICAJZm9yKCB4ID0gKCBVQmFzZVR5cGVfdCApIDA7IHggPCAoIFVCYXNlVHlwZV90ICkgY29uZmlnTUFYX1RBU0tfTkFNRV9MRU47IHgrKyApDQpCRkQwM0QwOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKQkZEMDNEMEEgIENDMUQwMDEwICAgU0hJTE8gbnVsbCwgMTYKQkZEMDNEMEMgICAgICBDQzFEICAgQiAweEJGRDAzRDQ4CkJGRDAzRDBFICAgICAgMEMwMCAgIE5PUApCRkQwM0QzRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzRDQyICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQpCRkQwM0Q0NCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDAzRDQ4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDNENEMgIDAwMDhCMDQyICAgU0xUSVUgVjAsIFYwLCA4CkJGRDAzRDUwICBGRkRFNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzRDEwCkJGRDAzRDUyICBDQzAyRkZERSAgIExXIFM4LCAtMTMzMTAoUzgpCkJGRDAzRDU0ICAgICAgQ0MwMiAgIEIgMHhCRkQwM0Q1QQpCRkQwM0Q1NiAgICAgIDBDMDAgICBOT1AKMjg0MDogICAgICAgICAgICAgICAgCXsNCjI4NDE6ICAgICAgICAgICAgICAgIAkJcHhUQ0ItPnBjVGFza05hbWVbIHggXSA9IHBjTmFtZVsgeCBdOw0KQkZEMDNEMTAgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQpCRkQwM0QxNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzRDE4ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwM0QxQSAgMDAwMDFDNjIgICBMQiBWMSwgMChWMCkKQkZEMDNEMUUgIDAwMjhGQzlFICAgTFcgQTAsIDQwKFM4KQpCRkQwM0QyMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzRDI2ICAgICAgMDUyOCAgIEFERFUgVjAsIEEwLCBWMApCRkQwM0QyOCAgMDAzNDE4NjIgICBTQiBWMSwgNTIoVjApCjI4NDI6ICAgICAgICAgICAgICAgIA0KMjg0MzogICAgICAgICAgICAgICAgCQkvKiBEb24ndCBjb3B5IGFsbCBjb25maWdNQVhfVEFTS19OQU1FX0xFTiBpZiB0aGUgc3RyaW5nIGlzIHNob3J0ZXIgdGhhbg0KMjg0NDogICAgICAgICAgICAgICAgCQljb25maWdNQVhfVEFTS19OQU1FX0xFTiBjaGFyYWN0ZXJzIGp1c3QgaW4gY2FzZSB0aGUgbWVtb3J5IGFmdGVyIHRoZQ0KMjg0NTogICAgICAgICAgICAgICAgCQlzdHJpbmcgaXMgbm90IGFjY2Vzc2libGUgKGV4dHJlbWVseSB1bmxpa2VseSkuICovDQoyODQ2OiAgICAgICAgICAgICAgICAJCWlmKCBwY05hbWVbIHggXSA9PSAweDAwICkNCkJGRDAzRDJDICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkKQkZEMDNEMzAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwM0QzNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDNEMzYgIDAwMDAxQzQyICAgTEIgVjAsIDAoVjApCkJGRDAzRDNBICAwMDBENDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzRDU4CjI4NDc6ICAgICAgICAgICAgICAgIAkJew0KMjg0ODogICAgICAgICAgICAgICAgCQkJYnJlYWs7DQpCRkQwM0Q1OCAgICAgIDBDMDAgICBOT1AKMjg0OTogICAgICAgICAgICAgICAgCQl9DQoyODUwOiAgICAgICAgICAgICAgICAJCWVsc2UNCjI4NTE6ICAgICAgICAgICAgICAgIAkJew0KMjg1MjogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjg1MzogICAgICAgICAgICAgICAgCQl9DQoyODU0OiAgICAgICAgICAgICAgICAJfQ0KMjg1NTogICAgICAgICAgICAgICAgDQoyODU2OiAgICAgICAgICAgICAgICAJLyogRW5zdXJlIHRoZSBuYW1lIHN0cmluZyBpcyB0ZXJtaW5hdGVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIHN0cmluZyBsZW5ndGgNCjI4NTc6ICAgICAgICAgICAgICAgIAl3YXMgZ3JlYXRlciBvciBlcXVhbCB0byBjb25maWdNQVhfVEFTS19OQU1FX0xFTi4gKi8NCjI4NTg6ICAgICAgICAgICAgICAgIAlweFRDQi0+cGNUYXNrTmFtZVsgY29uZmlnTUFYX1RBU0tfTkFNRV9MRU4gLSAxIF0gPSAnXDAnOw0KQkZEMDNENUEgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwM0Q1RSAgMDAzQjE4MDIgICBTQiBaRVJPLCA1OShWMCkKMjg1OTogICAgICAgICAgICAgICAgDQoyODYwOiAgICAgICAgICAgICAgICAJLyogVGhpcyBpcyB1c2VkIGFzIGFuIGFycmF5IGluZGV4IHNvIG11c3QgZW5zdXJlIGl0J3Mgbm90IHRvbyBsYXJnZS4gIEZpcnN0DQoyODYxOiAgICAgICAgICAgICAgICAJcmVtb3ZlIHRoZSBwcml2aWxlZ2UgYml0IGlmIG9uZSBpcyBwcmVzZW50LiAqLw0KMjg2MjogICAgICAgICAgICAgICAgCWlmKCB1eFByaW9yaXR5ID49ICggVUJhc2VUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUyApDQpCRkQwM0Q2MiAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAzRDY2ICAwMDA1QjA0MiAgIFNMVElVIFYwLCBWMCwgNQpCRkQwM0Q2QSAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwM0Q3NAoyODYzOiAgICAgICAgICAgICAgICAJew0KMjg2NDogICAgICAgICAgICAgICAgCQl1eFByaW9yaXR5ID0gKCBVQmFzZVR5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBVQmFzZVR5cGVfdCApIDFVOw0KQkZEMDNENkUgICAgICBFRDA0ICAgTEkgVjAsIDQKQkZEMDNENzAgIDAwMzBGODVFICAgU1cgVjAsIDQ4KFM4KQoyODY1OiAgICAgICAgICAgICAgICAJfQ0KMjg2NjogICAgICAgICAgICAgICAgCWVsc2UNCjI4Njc6ICAgICAgICAgICAgICAgIAl7DQoyODY4OiAgICAgICAgICAgICAgICAJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI4Njk6ICAgICAgICAgICAgICAgIAl9DQoyODcwOiAgICAgICAgICAgICAgICANCjI4NzE6ICAgICAgICAgICAgICAgIAlweFRDQi0+dXhQcmlvcml0eSA9IHV4UHJpb3JpdHk7DQpCRkQwM0Q3NCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAzRDc4ICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkKQkZEMDNEN0MgICAgICBFOUFCICAgU1cgVjEsIDQ0KFYwKQoyODcyOiAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoyODczOiAgICAgICAgICAgICAgICAJew0KMjg3NDogICAgICAgICAgICAgICAgCQlweFRDQi0+dXhCYXNlUHJpb3JpdHkgPSB1eFByaW9yaXR5Ow0KQkZEMDNEN0UgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwM0Q4MiAgMDAzMEZDN0UgICBMVyBWMSwgNDgoUzgpCkJGRDAzRDg2ICAwMDQwRjg2MiAgIFNXIFYxLCA2NChWMCkKMjg3NTogICAgICAgICAgICAgICAgCQlweFRDQi0+dXhNdXRleGVzSGVsZCA9IDA7DQpCRkQwM0Q4QSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAzRDhFICAwMDQ0RjgwMiAgIFNXIFpFUk8sIDY4KFYwKQoyODc2OiAgICAgICAgICAgICAgICAJfQ0KMjg3NzogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBjb25maWdVU0VfTVVURVhFUyAqLw0KMjg3ODogICAgICAgICAgICAgICAgDQoyODc5OiAgICAgICAgICAgICAgICAJdkxpc3RJbml0aWFsaXNlSXRlbSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDNEOTIgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwM0Q5NiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDNEOTggICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDNEOUEgIDRFRTY3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2VJdGVtCkJGRDAzRDlDICAgICAgNEVFNiAgIEFERElVIFM3LCBTNywgMwpCRkQwM0Q5RSAgICAgIDBDMDAgICBOT1AKMjg4MDogICAgICAgICAgICAgICAgCXZMaXN0SW5pdGlhbGlzZUl0ZW0oICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwM0RBMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAzREEyICA2RDJDMDAyOCAgIEVYVCBBVCwgVDAsIDIwLCAxNApCRkQwM0RBNCAgICAgIDZEMkMgICBBRERJVSBWMCwgVjAsIDI0CkJGRDAzREE2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAzREE4ICA0RUU2NzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlSXRlbQpCRkQwM0RBQSAgICAgIDRFRTYgICBBRERJVSBTNywgUzcsIDMKQkZEMDNEQUMgICAgICAwQzAwICAgTk9QCjI4ODE6ICAgICAgICAgICAgICAgIA0KMjg4MjogICAgICAgICAgICAgICAgCS8qIFNldCB0aGUgcHhUQ0IgYXMgYSBsaW5rIGJhY2sgZnJvbSB0aGUgTGlzdEl0ZW1fdC4gIFRoaXMgaXMgc28gd2UgY2FuIGdldA0KMjg4MzogICAgICAgICAgICAgICAgCWJhY2sgdG8JdGhlIGNvbnRhaW5pbmcgVENCIGZyb20gYSBnZW5lcmljIGl0ZW0gaW4gYSBsaXN0LiAqLw0KMjg4NDogICAgICAgICAgICAgICAgCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApLCBweFRDQiApOw0KQkZEMDNEQUUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwM0RCMiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpCkJGRDAzREI2ICAgICAgRTlBNCAgIFNXIFYxLCAxNihWMCkKMjg4NTogICAgICAgICAgICAgICAgDQoyODg2OiAgICAgICAgICAgICAgICAJLyogRXZlbnQgbGlzdHMgYXJlIGFsd2F5cyBpbiBwcmlvcml0eSBvcmRlci4gKi8NCjI4ODc6ICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICksICggVGlja1R5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBUaWNrVHlwZV90ICkgdXhQcmlvcml0eSApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQpCRkQwM0RCOCAgICAgIEVEODUgICBMSSBWMSwgNQpCRkQwM0RCQSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAzREJFICAgICAgMDVBNyAgIFNVQlUgVjEsIFYxLCBWMApCRkQwM0RDMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAzREM0ICAgICAgRTlBNiAgIFNXIFYxLCAyNChWMCkKMjg4ODogICAgICAgICAgICAgICAgCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSwgcHhUQ0IgKTsNCkJGRDAzREM2ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDNEQ0EgIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQpCRkQwM0RDRSAgICAgIEU5QTkgICBTVyBWMSwgMzYoVjApCjI4ODk6ICAgICAgICAgICAgICAgIA0KMjg5MDogICAgICAgICAgICAgICAgCSNpZiAoIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiA9PSAxICkNCjI4OTE6ICAgICAgICAgICAgICAgIAl7DQoyODkyOiAgICAgICAgICAgICAgICAJCXB4VENCLT51eENyaXRpY2FsTmVzdGluZyA9ICggVUJhc2VUeXBlX3QgKSAwVTsNCkJGRDAzREQwICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDNERDQgICAgICBFODJGICAgU1cgUzAsIDYwKFYwKQoyODkzOiAgICAgICAgICAgICAgICAJfQ0KMjg5NDogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKi8NCjI4OTU6ICAgICAgICAgICAgICAgIA0KMjg5NjogICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxICkNCjI4OTc6ICAgICAgICAgICAgICAgIAl7DQoyODk4OiAgICAgICAgICAgICAgICAJCXB4VENCLT5weFRhc2tUYWcgPSBOVUxMOw0KMjg5OTogICAgICAgICAgICAgICAgCX0NCjI5MDA6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHICovDQoyOTAxOiAgICAgICAgICAgICAgICANCjI5MDI6ICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdHRU5FUkFURV9SVU5fVElNRV9TVEFUUyA9PSAxICkNCjI5MDM6ICAgICAgICAgICAgICAgIAl7DQoyOTA0OiAgICAgICAgICAgICAgICAJCXB4VENCLT51bFJ1blRpbWVDb3VudGVyID0gMFVMOw0KMjkwNTogICAgICAgICAgICAgICAgCX0NCjI5MDY6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgKi8NCjI5MDc6ICAgICAgICAgICAgICAgIA0KMjkwODogICAgICAgICAgICAgICAgCSNpZiAoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQoyOTA5OiAgICAgICAgICAgICAgICAJew0KMjkxMDogICAgICAgICAgICAgICAgCQl2UG9ydFN0b3JlVGFza01QVVNldHRpbmdzKCAmKCBweFRDQi0+eE1QVVNldHRpbmdzICksIHhSZWdpb25zLCBweFRDQi0+cHhTdGFjaywgdXNTdGFja0RlcHRoICk7DQoyOTExOiAgICAgICAgICAgICAgICAJfQ0KMjkxMjogICAgICAgICAgICAgICAgCSNlbHNlIC8qIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgKi8NCjI5MTM6ICAgICAgICAgICAgICAgIAl7DQoyOTE0OiAgICAgICAgICAgICAgICAJCSggdm9pZCApIHhSZWdpb25zOw0KMjkxNTogICAgICAgICAgICAgICAgCQkoIHZvaWQgKSB1c1N0YWNrRGVwdGg7DQoyOTE2OiAgICAgICAgICAgICAgICAJfQ0KMjkxNzogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTICovDQoyOTE4OiAgICAgICAgICAgICAgICANCjI5MTk6ICAgICAgICAgICAgICAgIAkjaWYoIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyAhPSAwICkNCjI5MjA6ICAgICAgICAgICAgICAgIAl7DQoyOTIxOiAgICAgICAgICAgICAgICAJCWZvciggeCA9IDA7IHggPCAoIFVCYXNlVHlwZV90ICkgY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTOyB4KysgKQ0KMjkyMjogICAgICAgICAgICAgICAgCQl7DQoyOTIzOiAgICAgICAgICAgICAgICAJCQlweFRDQi0+cHZUaHJlYWRMb2NhbFN0b3JhZ2VQb2ludGVyc1sgeCBdID0gTlVMTDsNCjI5MjQ6ICAgICAgICAgICAgICAgIAkJfQ0KMjkyNTogICAgICAgICAgICAgICAgCX0NCjI5MjY6ICAgICAgICAgICAgICAgIAkjZW5kaWYNCjI5Mjc6ICAgICAgICAgICAgICAgIA0KMjkyODogICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgPT0gMSApDQoyOTI5OiAgICAgICAgICAgICAgICAJew0KMjkzMDogICAgICAgICAgICAgICAgCQlweFRDQi0+dWxOb3RpZmllZFZhbHVlID0gMDsNCkJGRDAzREQ2ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDNEREEgIDAwNDhGODAyICAgU1cgWkVSTywgNzIoVjApCjI5MzE6ICAgICAgICAgICAgICAgIAkJcHhUQ0ItPmVOb3RpZnlTdGF0ZSA9IGVOb3RXYWl0aW5nTm90aWZpY2F0aW9uOw0KQkZEMDNEREUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwM0RFMiAgMDA0Q0Y4MDIgICBTVyBaRVJPLCA3NihWMCkKMjkzMjogICAgICAgICAgICAgICAgCX0NCjI5MzM6ICAgICAgICAgICAgICAgIAkjZW5kaWYNCjI5MzQ6ICAgICAgICAgICAgICAgIA0KMjkzNTogICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UID09IDEgKQ0KMjkzNjogICAgICAgICAgICAgICAgCXsNCjI5Mzc6ICAgICAgICAgICAgICAgIAkJLyogSW5pdGlhbGlzZSB0aGlzIHRhc2sncyBOZXdsaWIgcmVlbnQgc3RydWN0dXJlLiAqLw0KMjkzODogICAgICAgICAgICAgICAgCQlfUkVFTlRfSU5JVF9QVFIoICggJiggcHhUQ0ItPnhOZXdMaWJfcmVlbnQgKSApICk7DQoyOTM5OiAgICAgICAgICAgICAgICAJfQ0KMjk0MDogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBjb25maWdVU0VfTkVXTElCX1JFRU5UUkFOVCAqLw0KMjk0MTogICAgICAgICAgICAgICAgfQ0KQkZEMDNERTYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDNERTggICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwM0RFQSAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDAzREVDICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDNERUUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwM0RGMCAgICAgIDBDMDAgICBOT1AKMjk0MjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyOTQzOiAgICAgICAgICAgICAgICANCjI5NDQ6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyAhPSAwICkNCjI5NDU6ICAgICAgICAgICAgICAgIA0KMjk0NjogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tTZXRUaHJlYWRMb2NhbFN0b3JhZ2VQb2ludGVyKCBUYXNrSGFuZGxlX3QgeFRhc2tUb1NldCwgQmFzZVR5cGVfdCB4SW5kZXgsIHZvaWQgKnB2VmFsdWUgKQ0KMjk0NzogICAgICAgICAgICAgICAgCXsNCjI5NDg6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoyOTQ5OiAgICAgICAgICAgICAgICANCjI5NTA6ICAgICAgICAgICAgICAgIAkJaWYoIHhJbmRleCA8IGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyApDQoyOTUxOiAgICAgICAgICAgICAgICAJCXsNCjI5NTI6ICAgICAgICAgICAgICAgIAkJCXB4VENCID0gcHJ2R2V0VENCRnJvbUhhbmRsZSggeFRhc2tUb1NldCApOw0KMjk1MzogICAgICAgICAgICAgICAgCQkJcHhUQ0ItPnB2VGhyZWFkTG9jYWxTdG9yYWdlUG9pbnRlcnNbIHhJbmRleCBdID0gcHZWYWx1ZTsNCjI5NTQ6ICAgICAgICAgICAgICAgIAkJfQ0KMjk1NTogICAgICAgICAgICAgICAgCX0NCjI5NTY6ICAgICAgICAgICAgICAgIA0KMjk1NzogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyAqLw0KMjk1ODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyOTU5OiAgICAgICAgICAgICAgICANCjI5NjA6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyAhPSAwICkNCjI5NjE6ICAgICAgICAgICAgICAgIA0KMjk2MjogICAgICAgICAgICAgICAgCXZvaWQgKnB2VGFza0dldFRocmVhZExvY2FsU3RvcmFnZVBvaW50ZXIoIFRhc2tIYW5kbGVfdCB4VGFza1RvUXVlcnksIEJhc2VUeXBlX3QgeEluZGV4ICkNCjI5NjM6ICAgICAgICAgICAgICAgIAl7DQoyOTY0OiAgICAgICAgICAgICAgICAJdm9pZCAqcHZSZXR1cm4gPSBOVUxMOw0KMjk2NTogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjI5NjY6ICAgICAgICAgICAgICAgIA0KMjk2NzogICAgICAgICAgICAgICAgCQlpZiggeEluZGV4IDwgY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTICkNCjI5Njg6ICAgICAgICAgICAgICAgIAkJew0KMjk2OTogICAgICAgICAgICAgICAgCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFza1RvUXVlcnkgKTsNCjI5NzA6ICAgICAgICAgICAgICAgIAkJCXB2UmV0dXJuID0gcHhUQ0ItPnB2VGhyZWFkTG9jYWxTdG9yYWdlUG9pbnRlcnNbIHhJbmRleCBdOw0KMjk3MTogICAgICAgICAgICAgICAgCQl9DQoyOTcyOiAgICAgICAgICAgICAgICAJCWVsc2UNCjI5NzM6ICAgICAgICAgICAgICAgIAkJew0KMjk3NDogICAgICAgICAgICAgICAgCQkJcHZSZXR1cm4gPSBOVUxMOw0KMjk3NTogICAgICAgICAgICAgICAgCQl9DQoyOTc2OiAgICAgICAgICAgICAgICANCjI5Nzc6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHB2UmV0dXJuOw0KMjk3ODogICAgICAgICAgICAgICAgCX0NCjI5Nzk6ICAgICAgICAgICAgICAgIA0KMjk4MDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyAqLw0KMjk4MTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyOTgyOiAgICAgICAgICAgICAgICANCjI5ODM6ICAgICAgICAgICAgICAgICNpZiAoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQoyOTg0OiAgICAgICAgICAgICAgICANCjI5ODU6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrQWxsb2NhdGVNUFVSZWdpb25zKCBUYXNrSGFuZGxlX3QgeFRhc2tUb01vZGlmeSwgY29uc3QgTWVtb3J5UmVnaW9uX3QgKiBjb25zdCB4UmVnaW9ucyApDQoyOTg2OiAgICAgICAgICAgICAgICAJew0KMjk4NzogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjI5ODg6ICAgICAgICAgICAgICAgIA0KMjk4OTogICAgICAgICAgICAgICAgCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gd2UgYXJlIG1vZGlmeWluZyB0aGUgTVBVIHNldHRpbmdzIG9mDQoyOTkwOiAgICAgICAgICAgICAgICAJCXRoZSBjYWxsaW5nIHRhc2suICovDQoyOTkxOiAgICAgICAgICAgICAgICAJCXB4VENCID0gcHJ2R2V0VENCRnJvbUhhbmRsZSggeFRhc2tUb01vZGlmeSApOw0KMjk5MjogICAgICAgICAgICAgICAgDQoyOTkzOiAgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0U3RvcmVUYXNrTVBVU2V0dGluZ3MoICYoIHB4VENCLT54TVBVU2V0dGluZ3MgKSwgeFJlZ2lvbnMsIE5VTEwsIDAgKTsNCjI5OTQ6ICAgICAgICAgICAgICAgIAl9DQoyOTk1OiAgICAgICAgICAgICAgICANCjI5OTY6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTICovDQoyOTk3OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI5OTg6ICAgICAgICAgICAgICAgIA0KMjk5OTogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2SW5pdGlhbGlzZVRhc2tMaXN0cyggdm9pZCApDQozMDAwOiAgICAgICAgICAgICAgICB7DQpCRkQwNjEyQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNjEyRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA2MTMwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDYxMzIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzAwMTogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhQcmlvcml0eTsNCjMwMDI6ICAgICAgICAgICAgICAgIA0KMzAwMzogICAgICAgICAgICAgICAgCWZvciggdXhQcmlvcml0eSA9ICggVUJhc2VUeXBlX3QgKSAwVTsgdXhQcmlvcml0eSA8ICggVUJhc2VUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUzsgdXhQcmlvcml0eSsrICkNCkJGRDA2MTM0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQpCRkQwNjEzOCAgICAgIENDMTQgICBCIDB4QkZEMDYxNjIKQkZEMDYxM0EgICAgICAwQzAwICAgTk9QCkJGRDA2MTU4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYxNUMgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxCkJGRDA2MTVFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDYxNjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjE2NiAgMDAwNUIwNDIgICBTTFRJVSBWMCwgVjAsIDUKQkZEMDYxNkEgIEZGRTc0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDYxM0MKQkZEMDYxNkMgIDQxQTJGRkU3ICAgTFcgUkEsIDE2ODAyKEEzKQozMDA0OiAgICAgICAgICAgICAgICAJew0KMzAwNTogICAgICAgICAgICAgICAgCQl2TGlzdEluaXRpYWxpc2UoICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB1eFByaW9yaXR5IF0gKSApOw0KQkZEMDYxM0MgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjE0MCAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDA2MTQyICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDIKQkZEMDYxNDQgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxCkJGRDA2MTQ2ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2MTQ4ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDYxNEEgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjAKQkZEMDYxNEUgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDA2MTUwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA2MTUyICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlCkJGRDA2MTU0ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkKQkZEMDYxNTYgICAgICAwQzAwICAgTk9QCjMwMDY6ICAgICAgICAgICAgICAgIAl9DQozMDA3OiAgICAgICAgICAgICAgICANCjMwMDg6ICAgICAgICAgICAgICAgIAl2TGlzdEluaXRpYWxpc2UoICZ4RGVsYXllZFRhc2tMaXN0MSApOw0KQkZEMDYxNkUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDYxNzAgIDMwODJCRkQyICAgTERDMSBGMzAsIDEyNDE4KFMyKQpCRkQwNjE3MiAgODBGODMwODIgICBBRERJVSBBMCwgVjAsIC0zMjUyMApCRkQwNjE3NiAgNDU3MDc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZQpCRkQwNjE3OCAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApCkJGRDA2MTdBICAgICAgMEMwMCAgIE5PUAozMDA5OiAgICAgICAgICAgICAgICAJdkxpc3RJbml0aWFsaXNlKCAmeERlbGF5ZWRUYXNrTGlzdDIgKTsNCkJGRDA2MTdDICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2MTdFICAzMDgyQkZEMiAgIExEQzEgRjMwLCAxMjQxOChTMikKQkZEMDYxODAgIDgxMjAzMDgyICAgQURESVUgQTAsIFYwLCAtMzI0ODAKQkZEMDYxODQgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UKQkZEMDYxODYgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQpCRkQwNjE4OCAgICAgIDBDMDAgICBOT1AKMzAxMDogICAgICAgICAgICAgICAgCXZMaXN0SW5pdGlhbGlzZSggJnhQZW5kaW5nUmVhZHlMaXN0ICk7DQpCRkQwNjE4QSAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwNjE4QyAgMzA4MkJGRDIgICBMREMxIEYzMCwgMTI0MTgoUzIpCkJGRDA2MThFICA4MEQwMzA4MiAgIEFERElVIEEwLCBWMCwgLTMyNTYwCkJGRDA2MTkyICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlCkJGRDA2MTk0ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkKQkZEMDYxOTYgICAgICAwQzAwICAgTk9QCjMwMTE6ICAgICAgICAgICAgICAgIA0KMzAxMjogICAgICAgICAgICAgICAgCSNpZiAoIElOQ0xVREVfdlRhc2tEZWxldGUgPT0gMSApDQozMDEzOiAgICAgICAgICAgICAgICAJew0KMzAxNDogICAgICAgICAgICAgICAgCQl2TGlzdEluaXRpYWxpc2UoICZ4VGFza3NXYWl0aW5nVGVybWluYXRpb24gKTsNCkJGRDA2MTk4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2MTlBICAzMDgyQkZEMiAgIExEQzEgRjMwLCAxMjQxOChTMikKQkZEMDYxOUMgIDgxMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMzI1MDAKQkZEMDYxQTAgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UKQkZEMDYxQTIgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQpCRkQwNjFBNCAgICAgIDBDMDAgICBOT1AKMzAxNTogICAgICAgICAgICAgICAgCX0NCjMwMTY6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogSU5DTFVERV92VGFza0RlbGV0ZSAqLw0KMzAxNzogICAgICAgICAgICAgICAgDQozMDE4OiAgICAgICAgICAgICAgICAJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQozMDE5OiAgICAgICAgICAgICAgICAJew0KMzAyMDogICAgICAgICAgICAgICAgCQl2TGlzdEluaXRpYWxpc2UoICZ4U3VzcGVuZGVkVGFza0xpc3QgKTsNCkJGRDA2MUE2ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2MUE4ICAzMDgyQkZEMiAgIExEQzEgRjMwLCAxMjQxOChTMikKQkZEMDYxQUEgIDgwRTQzMDgyICAgQURESVUgQTAsIFYwLCAtMzI1NDAKQkZEMDYxQUUgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UKQkZEMDYxQjAgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQpCRkQwNjFCMiAgICAgIDBDMDAgICBOT1AKMzAyMTogICAgICAgICAgICAgICAgCX0NCjMwMjI6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjMwMjM6ICAgICAgICAgICAgICAgIA0KMzAyNDogICAgICAgICAgICAgICAgCS8qIFN0YXJ0IHdpdGggcHhEZWxheWVkVGFza0xpc3QgdXNpbmcgbGlzdDEgYW5kIHRoZSBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0DQozMDI1OiAgICAgICAgICAgICAgICAJdXNpbmcgbGlzdDIuICovDQozMDI2OiAgICAgICAgICAgICAgICAJcHhEZWxheWVkVGFza0xpc3QgPSAmeERlbGF5ZWRUYXNrTGlzdDE7DQpCRkQwNjFCNCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwNjFCNiAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDA2MUI4ICA4MEY4MzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNTIwCkJGRDA2MUJDICA4MDc0Rjg1QyAgIFNXIFYwLCAtMzI2NTIoR1ApCjMwMjc6ICAgICAgICAgICAgICAgIAlweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0ID0gJnhEZWxheWVkVGFza0xpc3QyOw0KQkZEMDYxQzAgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDYxQzIgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwNjFDNCAgODEyMDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ4MApCRkQwNjFDOCAgODA3OEY4NUMgICBTVyBWMCwgLTMyNjQ4KEdQKQozMDI4OiAgICAgICAgICAgICAgICB9DQpCRkQwNjFDQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNjFDRSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA2MUQwICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDYxRDIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNjFENCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2MUQ2ICAgICAgMEMwMCAgIE5PUAozMDI5OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMwMzA6ICAgICAgICAgICAgICAgIA0KMzAzMTogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2Q2hlY2tUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiggdm9pZCApDQozMDMyOiAgICAgICAgICAgICAgICB7DQpCRkQwNkI1QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNkI1RSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA2QjYwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDZCNjIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzAzMzogICAgICAgICAgICAgICAgCSNpZiAoIElOQ0xVREVfdlRhc2tEZWxldGUgPT0gMSApDQozMDM0OiAgICAgICAgICAgICAgICAJew0KMzAzNTogICAgICAgICAgICAgICAgCQlCYXNlVHlwZV90IHhMaXN0SXNFbXB0eTsNCjMwMzY6ICAgICAgICAgICAgICAgIA0KMzAzNzogICAgICAgICAgICAgICAgCQkvKiB1Y1Rhc2tzRGVsZXRlZCBpcyB1c2VkIHRvIHByZXZlbnQgdlRhc2tTdXNwZW5kQWxsKCkgYmVpbmcgY2FsbGVkDQozMDM4OiAgICAgICAgICAgICAgICAJCXRvbyBvZnRlbiBpbiB0aGUgaWRsZSB0YXNrLiAqLw0KMzAzOTogICAgICAgICAgICAgICAgCQl3aGlsZSggdXhUYXNrc0RlbGV0ZWQgPiAoIFVCYXNlVHlwZV90ICkgMFUgKQ0KQkZEMDZCNjQgICAgICBDQzM3ICAgQiAweEJGRDA2QkQ0CkJGRDA2QjY2ICAgICAgMEMwMCAgIE5PUApCRkQwNkJENCAgODAzNEZDNUMgICBMVyBWMCwgLTMyNzE2KEdQKQpCRkQwNkJEOCAgRkZDNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNkI2OApCRkQwNkJEQSAgMEZCRUZGQzYgICBMVyBTOCwgNDAzMChBMikKMzA0MDogICAgICAgICAgICAgICAgCQl7DQozMDQxOiAgICAgICAgICAgICAgICAJCQl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDA2QjY4ICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsCkJGRDA2QjZBICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYKQkZEMDZCNkMgICAgICAwQzAwICAgTk9QCjMwNDI6ICAgICAgICAgICAgICAgIAkJCXsNCjMwNDM6ICAgICAgICAgICAgICAgIAkJCQl4TGlzdElzRW1wdHkgPSBsaXN0TElTVF9JU19FTVBUWSggJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApOw0KQkZEMDZCNkUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDZCNzAgIEZDNDJCRkQyICAgTERDMSBGMzAsIC05NTgoUzIpCkJGRDA2QjcyICA4MTBDRkM0MiAgIExXIFYwLCAtMzI1MDAoVjApCkJGRDA2Qjc2ICAwMDAxQjA0MiAgIFNMVElVIFYwLCBWMCwgMQpCRkQwNkI3QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjMwNDQ6ICAgICAgICAgICAgICAgIAkJCX0NCjMwNDU6ICAgICAgICAgICAgICAgIAkJCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwNkI3RSAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsCkJGRDA2QjgwICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikKQkZEMDZCODIgICAgICAwQzAwICAgTk9QCjMwNDY6ICAgICAgICAgICAgICAgIA0KMzA0NzogICAgICAgICAgICAgICAgCQkJaWYoIHhMaXN0SXNFbXB0eSA9PSBwZEZBTFNFICkNCkJGRDA2Qjg0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDZCODggIDAwMjQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZCRDQKMzA0ODogICAgICAgICAgICAgICAgCQkJew0KMzA0OTogICAgICAgICAgICAgICAgCQkJCVRDQl90ICpweFRDQjsNCjMwNTA6ICAgICAgICAgICAgICAgIA0KMzA1MTogICAgICAgICAgICAgICAgCQkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDZCOEMgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDZCOEUgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA2QjkwICAgICAgMEMwMCAgIE5PUAozMDUyOiAgICAgICAgICAgICAgICAJCQkJew0KMzA1MzogICAgICAgICAgICAgICAgCQkJCQlweFRDQiA9ICggVENCX3QgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggKCAmeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uICkgKTsNCkJGRDA2QjkyICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA2Qjk0ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDZCOTYgIDgxMEMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI1MDAKQkZEMDZCOUEgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwNkI5QyAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA2QjlFICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMzA1NDogICAgICAgICAgICAgICAgCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDA2QkEyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDZCQTYgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA2QkE4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA2QkFBICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDA2QkFDICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDZCQUUgICAgICAwQzAwICAgTk9QCjMwNTU6ICAgICAgICAgICAgICAgIAkJCQkJLS11eEN1cnJlbnROdW1iZXJPZlRhc2tzOw0KQkZEMDZCQjAgIDgwMzhGQzVDICAgTFcgVjAsIC0zMjcxMihHUCkKQkZEMDZCQjQgICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQpCRkQwNkJCNiAgODAzOEY4NUMgICBTVyBWMCwgLTMyNzEyKEdQKQozMDU2OiAgICAgICAgICAgICAgICAJCQkJCS0tdXhUYXNrc0RlbGV0ZWQ7DQpCRkQwNkJCQSAgODAzNEZDNUMgICBMVyBWMCwgLTMyNzE2KEdQKQpCRkQwNkJCRSAgICAgIDZEMkUgICBBRERJVSBWMCwgVjAsIC0xCkJGRDA2QkMwICA4MDM0Rjg1QyAgIFNXIFYwLCAtMzI3MTYoR1ApCjMwNTc6ICAgICAgICAgICAgICAgIAkJCQl9DQozMDU4OiAgICAgICAgICAgICAgICAJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA2QkM0ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDZCQzYgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDgzQ0EKQkZEMDZCQzggICAgICAwQzAwICAgTk9QCjMwNTk6ICAgICAgICAgICAgICAgIA0KMzA2MDogICAgICAgICAgICAgICAgCQkJCXBydkRlbGV0ZVRDQiggcHhUQ0IgKTsNCkJGRDA2QkNBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDZCQ0UgIDRDNkU3N0U4ICAgSkFMUyBwcnZEZWxldGVUQ0IKQkZEMDZCRDAgICAgICA0QzZFICAgQURESVUgVjEsIFYxLCA3CkJGRDA2QkQyICAgICAgMEMwMCAgIE5PUAozMDYxOiAgICAgICAgICAgICAgICAJCQl9DQozMDYyOiAgICAgICAgICAgICAgICAJCQllbHNlDQozMDYzOiAgICAgICAgICAgICAgICAJCQl7DQozMDY0OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzA2NTogICAgICAgICAgICAgICAgCQkJfQ0KMzA2NjogICAgICAgICAgICAgICAgCQl9DQozMDY3OiAgICAgICAgICAgICAgICAJfQ0KMzA2ODogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiB2VGFza0RlbGV0ZSAqLw0KMzA2OTogICAgICAgICAgICAgICAgfQ0KQkZEMDZCREMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDZCREUgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNkJFMCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA2QkUyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDZCRTQgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNkJFNiAgICAgIDBDMDAgICBOT1AKMzA3MDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMDcxOiAgICAgICAgICAgICAgICANCjMwNzI6ICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggY29uc3QgVGlja1R5cGVfdCB4VGltZVRvV2FrZSApDQozMDczOiAgICAgICAgICAgICAgICB7DQpCRkQwNkU2OCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwNkU2QSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA2RTZDICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDZFNkUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDZFNzAgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQozMDc0OiAgICAgICAgICAgICAgICAJLyogVGhlIGxpc3QgaXRlbSB3aWxsIGJlIGluc2VydGVkIGluIHdha2UgdGltZSBvcmRlci4gKi8NCjMwNzU6ICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICksIHhUaW1lVG9XYWtlICk7DQpCRkQwNkU3NCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNkU3OCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDA2RTdDICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQozMDc2OiAgICAgICAgICAgICAgICANCjMwNzc6ICAgICAgICAgICAgICAgIAlpZiggeFRpbWVUb1dha2UgPCB4VGlja0NvdW50ICkNCkJGRDA2RTdFICA4MDNDRkM1QyAgIExXIFYwLCAtMzI3MDgoR1ApCkJGRDA2RTgyICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkKQkZEMDZFODYgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA2RTg4ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwNkU4QSAgMDAwQzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNkVBNgozMDc4OiAgICAgICAgICAgICAgICAJew0KMzA3OTogICAgICAgICAgICAgICAgCQkvKiBXYWtlIHRpbWUgaGFzIG92ZXJmbG93ZWQuICBQbGFjZSB0aGlzIGl0ZW0gaW4gdGhlIG92ZXJmbG93IGxpc3QuICovDQozMDgwOiAgICAgICAgICAgICAgICAJCXZMaXN0SW5zZXJ0KCBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDZFOEUgIDgwNzhGQzdDICAgTFcgVjEsIC0zMjY0OChHUCkKQkZEMDZFOTIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDZFOTYgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA2RTk4ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDA2RTlBICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA2RTlDICAzMDQwNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnQKQkZEMDZFOUUgIDBDMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDMwNzIKQkZEMDZFQTAgICAgICAwQzAwICAgTk9QCkJGRDA2RUEyICAgICAgQ0MxNyAgIEIgMHhCRkQwNkVEMgpCRkQwNkVBNCAgICAgIDBDMDAgICBOT1AKMzA4MTogICAgICAgICAgICAgICAgCX0NCjMwODI6ICAgICAgICAgICAgICAgIAllbHNlDQozMDgzOiAgICAgICAgICAgICAgICAJew0KMzA4NDogICAgICAgICAgICAgICAgCQkvKiBUaGUgd2FrZSB0aW1lIGhhcyBub3Qgb3ZlcmZsb3dlZCwgc28gdGhlIGN1cnJlbnQgYmxvY2sgbGlzdCBpcyB1c2VkLiAqLw0KMzA4NTogICAgICAgICAgICAgICAgCQl2TGlzdEluc2VydCggcHhEZWxheWVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNkVBNiAgODA3NEZDN0MgICBMVyBWMSwgLTMyNjUyKEdQKQpCRkQwNkVBQSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNkVBRSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDZFQjAgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDZFQjIgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDZFQjQgIDMwNDA3N0U4ICAgSkFMUyB2TGlzdEluc2VydApCRkQwNkVCNiAgMEMwMDMwNDAgICBBRERJVSBWMCwgWkVSTywgMzA3MgpCRkQwNkVCOCAgICAgIDBDMDAgICBOT1AKMzA4NjogICAgICAgICAgICAgICAgDQozMDg3OiAgICAgICAgICAgICAgICAJCS8qIElmIHRoZSB0YXNrIGVudGVyaW5nIHRoZSBibG9ja2VkIHN0YXRlIHdhcyBwbGFjZWQgYXQgdGhlIGhlYWQgb2YgdGhlDQozMDg4OiAgICAgICAgICAgICAgICAJCWxpc3Qgb2YgYmxvY2tlZCB0YXNrcyB0aGVuIHhOZXh0VGFza1VuYmxvY2tUaW1lIG5lZWRzIHRvIGJlIHVwZGF0ZWQNCjMwODk6ICAgICAgICAgICAgICAgIAkJdG9vLiAqLw0KMzA5MDogICAgICAgICAgICAgICAgCQlpZiggeFRpbWVUb1dha2UgPCB4TmV4dFRhc2tVbmJsb2NrVGltZSApDQpCRkQwNkVCQSAgODA1OEZDNUMgICBMVyBWMCwgLTMyNjgwKEdQKQpCRkQwNkVCRSAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDA2RUMyICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwNkVDNCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTAKQkZEMDZFQzYgIDAwMDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDZFRDIKMzA5MTogICAgICAgICAgICAgICAgCQl7DQozMDkyOiAgICAgICAgICAgICAgICAJCQl4TmV4dFRhc2tVbmJsb2NrVGltZSA9IHhUaW1lVG9XYWtlOw0KQkZEMDZFQ0EgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNkVDRSAgODA1OEY4NUMgICBTVyBWMCwgLTMyNjgwKEdQKQozMDkzOiAgICAgICAgICAgICAgICAJCX0NCjMwOTQ6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzA5NTogICAgICAgICAgICAgICAgCQl7DQozMDk2OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozMDk3OiAgICAgICAgICAgICAgICAJCX0NCjMwOTg6ICAgICAgICAgICAgICAgIAl9DQozMDk5OiAgICAgICAgICAgICAgICB9DQpCRkQwNkVEMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNkVENCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA2RUQ2ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDZFRDggICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwNkVEQSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2RURDICAgICAgMEMwMCAgIE5PUAozMTAwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxMDE6ICAgICAgICAgICAgICAgIA0KMzEwMjogICAgICAgICAgICAgICAgc3RhdGljIFRDQl90ICpwcnZBbGxvY2F0ZVRDQkFuZFN0YWNrKCBjb25zdCB1aW50MTZfdCB1c1N0YWNrRGVwdGgsIFN0YWNrVHlwZV90ICogY29uc3QgcHV4U3RhY2tCdWZmZXIgKQ0KMzEwMzogICAgICAgICAgICAgICAgew0KQkZEMDYzMjggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDYzMkEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNjMyQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA2MzJFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA2MzMwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA2MzMyICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKQkZEMDYzMzYgIDAwMjAzODVFICAgU0ggVjAsIDMyKFM4KQozMTA0OiAgICAgICAgICAgICAgICBUQ0JfdCAqcHhOZXdUQ0I7DQozMTA1OiAgICAgICAgICAgICAgICANCjMxMDY6ICAgICAgICAgICAgICAgIAkvKiBJZiB0aGUgc3RhY2sgZ3Jvd3MgZG93biB0aGVuIGFsbG9jYXRlIHRoZSBzdGFjayB0aGVuIHRoZSBUQ0Igc28gdGhlIHN0YWNrDQozMTA3OiAgICAgICAgICAgICAgICAJZG9lcyBub3QgZ3JvdyBpbnRvIHRoZSBUQ0IuICBMaWtld2lzZSBpZiB0aGUgc3RhY2sgZ3Jvd3MgdXAgdGhlbiBhbGxvY2F0ZQ0KMzEwODogICAgICAgICAgICAgICAgCXRoZSBUQ0IgdGhlbiB0aGUgc3RhY2suICovDQozMTA5OiAgICAgICAgICAgICAgICAJI2lmKCBwb3J0U1RBQ0tfR1JPV1RIID4gMCApDQozMTEwOiAgICAgICAgICAgICAgICAJew0KMzExMTogICAgICAgICAgICAgICAgCQkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIFRDQi4gIFdoZXJlIHRoZSBtZW1vcnkgY29tZXMgZnJvbSBkZXBlbmRzIG9uDQozMTEyOiAgICAgICAgICAgICAgICAJCXRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcG9ydCBtYWxsb2MgZnVuY3Rpb24uICovDQozMTEzOiAgICAgICAgICAgICAgICAJCXB4TmV3VENCID0gKCBUQ0JfdCAqICkgcHZQb3J0TWFsbG9jKCBzaXplb2YoIFRDQl90ICkgKTsNCjMxMTQ6ICAgICAgICAgICAgICAgIA0KMzExNTogICAgICAgICAgICAgICAgCQlpZiggcHhOZXdUQ0IgIT0gTlVMTCApDQozMTE2OiAgICAgICAgICAgICAgICAJCXsNCjMxMTc6ICAgICAgICAgICAgICAgIAkJCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3RhY2sgdXNlZCBieSB0aGUgdGFzayBiZWluZyBjcmVhdGVkLg0KMzExODogICAgICAgICAgICAgICAgCQkJVGhlIGJhc2Ugb2YgdGhlIHN0YWNrIG1lbW9yeSBzdG9yZWQgaW4gdGhlIFRDQiBzbyB0aGUgdGFzayBjYW4NCjMxMTk6ICAgICAgICAgICAgICAgIAkJCWJlIGRlbGV0ZWQgbGF0ZXIgaWYgcmVxdWlyZWQuICovDQozMTIwOiAgICAgICAgICAgICAgICAJCQlweE5ld1RDQi0+cHhTdGFjayA9ICggU3RhY2tUeXBlX3QgKiApIHB2UG9ydE1hbGxvY0FsaWduZWQoICggKCAoIHNpemVfdCApIHVzU3RhY2tEZXB0aCApICogc2l6ZW9mKCBTdGFja1R5cGVfdCApICksIHB1eFN0YWNrQnVmZmVyICk7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cy4gKi8NCjMxMjE6ICAgICAgICAgICAgICAgIA0KMzEyMjogICAgICAgICAgICAgICAgCQkJaWYoIHB4TmV3VENCLT5weFN0YWNrID09IE5VTEwgKQ0KMzEyMzogICAgICAgICAgICAgICAgCQkJew0KMzEyNDogICAgICAgICAgICAgICAgCQkJCS8qIENvdWxkIG5vdCBhbGxvY2F0ZSB0aGUgc3RhY2suICBEZWxldGUgdGhlIGFsbG9jYXRlZCBUQ0IuICovDQozMTI1OiAgICAgICAgICAgICAgICAJCQkJdlBvcnRGcmVlKCBweE5ld1RDQiApOw0KMzEyNjogICAgICAgICAgICAgICAgCQkJCXB4TmV3VENCID0gTlVMTDsNCjMxMjc6ICAgICAgICAgICAgICAgIAkJCX0NCjMxMjg6ICAgICAgICAgICAgICAgIAkJfQ0KMzEyOTogICAgICAgICAgICAgICAgCX0NCjMxMzA6ICAgICAgICAgICAgICAgIAkjZWxzZSAvKiBwb3J0U1RBQ0tfR1JPV1RIICovDQozMTMxOiAgICAgICAgICAgICAgICAJew0KMzEzMjogICAgICAgICAgICAgICAgCVN0YWNrVHlwZV90ICpweFN0YWNrOw0KMzEzMzogICAgICAgICAgICAgICAgDQozMTM0OiAgICAgICAgICAgICAgICAJCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3RhY2sgdXNlZCBieSB0aGUgdGFzayBiZWluZyBjcmVhdGVkLiAqLw0KMzEzNTogICAgICAgICAgICAgICAgCQlweFN0YWNrID0gKCBTdGFja1R5cGVfdCAqICkgcHZQb3J0TWFsbG9jQWxpZ25lZCggKCAoICggc2l6ZV90ICkgdXNTdGFja0RlcHRoICkgKiBzaXplb2YoIFN0YWNrVHlwZV90ICkgKSwgcHV4U3RhY2tCdWZmZXIgKTsgLypsaW50ICFlOTYxIE1JU1JBIGV4Y2VwdGlvbiBhcyB0aGUgY2FzdHMgYXJlIG9ubHkgcmVkdW5kYW50IGZvciBzb21lIHBvcnRzLiAqLw0KQkZEMDYzM0EgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwNjMzRSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjM1NApCRkQwNjM0MiAgMDAyMDM0NUUgICBMSFUgVjAsIDMyKFM4KQpCRkQwNjM0NiAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDA2MzQ4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA2MzRBICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jCkJGRDA2MzRDICAwQzAwMTExNiAgIEFEREkgVDAsIFM2LCAzMDcyCkJGRDA2MzRFICAgICAgMEMwMCAgIE5PUApCRkQwNjM1MCAgICAgIENDMDMgICBCIDB4QkZEMDYzNTgKQkZEMDYzNTIgICAgICAwQzAwICAgTk9QCkJGRDA2MzU0ICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDYzNTggIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQozMTM2OiAgICAgICAgICAgICAgICANCjMxMzc6ICAgICAgICAgICAgICAgIAkJaWYoIHB4U3RhY2sgIT0gTlVMTCApDQpCRkQwNjM1QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA2MzYwICAwMDE4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2Mzk0CkJGRDA2MzYyICBFRTUwMDAxOCAgIEFORCBTUCwgVDgsIFpFUk8KMzEzODogICAgICAgICAgICAgICAgCQl7DQozMTM5OiAgICAgICAgICAgICAgICAJCQkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIFRDQi4gIFdoZXJlIHRoZSBtZW1vcnkgY29tZXMgZnJvbSBkZXBlbmRzDQozMTQwOiAgICAgICAgICAgICAgICAJCQlvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvcnQgbWFsbG9jIGZ1bmN0aW9uLiAqLw0KMzE0MTogICAgICAgICAgICAgICAgCQkJcHhOZXdUQ0IgPSAoIFRDQl90ICogKSBwdlBvcnRNYWxsb2MoIHNpemVvZiggVENCX3QgKSApOw0KQkZEMDYzNjQgICAgICBFRTUwICAgTEkgQTAsIDgwCkJGRDA2MzY2ICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jCkJGRDA2MzY4ICAwQzAwMTExNiAgIEFEREkgVDAsIFM2LCAzMDcyCkJGRDA2MzZBICAgICAgMEMwMCAgIE5PUApCRkQwNjM2QyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjMxNDI6ICAgICAgICAgICAgICAgIA0KMzE0MzogICAgICAgICAgICAgICAgCQkJaWYoIHB4TmV3VENCICE9IE5VTEwgKQ0KQkZEMDYzNzAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjM3NCAgMDAwNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjM4NgozMTQ0OiAgICAgICAgICAgICAgICAJCQl7DQozMTQ1OiAgICAgICAgICAgICAgICAJCQkJLyogU3RvcmUgdGhlIHN0YWNrIGxvY2F0aW9uIGluIHRoZSBUQ0IuICovDQozMTQ2OiAgICAgICAgICAgICAgICAJCQkJcHhOZXdUQ0ItPnB4U3RhY2sgPSBweFN0YWNrOw0KQkZEMDYzNzggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjM3QyAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDA2MzdFICBFOUFDMDAxNCAgIEVYVCBaRVJPLCBTNCwgNiwgMzAKQkZEMDYzODAgICAgICBFOUFDICAgU1cgVjEsIDQ4KFYwKQpCRkQwNjM4MiAgICAgIENDMEEgICBCIDB4QkZEMDYzOTgKQkZEMDYzODQgICAgICAwQzAwICAgTk9QCjMxNDc6ICAgICAgICAgICAgICAgIAkJCX0NCjMxNDg6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjMxNDk6ICAgICAgICAgICAgICAgIAkJCXsNCjMxNTA6ICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgc3RhY2sgY2Fubm90IGJlIHVzZWQgYXMgdGhlIFRDQiB3YXMgbm90IGNyZWF0ZWQuICBGcmVlIGl0DQozMTUxOiAgICAgICAgICAgICAgICAJCQkJYWdhaW4uICovDQozMTUyOiAgICAgICAgICAgICAgICAJCQkJdlBvcnRGcmVlKCBweFN0YWNrICk7DQpCRkQwNjM4NiAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDA2MzhBICAyRkVBNzdFOCAgIEpBTFMgdlBvcnRGcmVlCkJGRDA2MzhDICAgICAgMkZFQSAgIEFOREkgQTMsIEEyLCAweDIwCkJGRDA2MzhFICAgICAgMEMwMCAgIE5PUApCRkQwNjM5MCAgICAgIENDMDMgICBCIDB4QkZEMDYzOTgKQkZEMDYzOTIgICAgICAwQzAwICAgTk9QCjMxNTM6ICAgICAgICAgICAgICAgIAkJCX0NCjMxNTQ6ICAgICAgICAgICAgICAgIAkJfQ0KMzE1NTogICAgICAgICAgICAgICAgCQllbHNlDQozMTU2OiAgICAgICAgICAgICAgICAJCXsNCjMxNTc6ICAgICAgICAgICAgICAgIAkJCXB4TmV3VENCID0gTlVMTDsNCkJGRDA2Mzk0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQozMTU4OiAgICAgICAgICAgICAgICAJCX0NCjMxNTk6ICAgICAgICAgICAgICAgIAl9DQozMTYwOiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIHBvcnRTVEFDS19HUk9XVEggKi8NCjMxNjE6ICAgICAgICAgICAgICAgIA0KMzE2MjogICAgICAgICAgICAgICAgCWlmKCBweE5ld1RDQiAhPSBOVUxMICkNCkJGRDA2Mzk4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYzOUMgIDAwMEQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDYzQkEKMzE2MzogICAgICAgICAgICAgICAgCXsNCjMxNjQ6ICAgICAgICAgICAgICAgIAkJLyogQXZvaWQgZGVwZW5kZW5jeSBvbiBtZW1zZXQoKSBpZiBpdCBpcyBub3QgcmVxdWlyZWQuICovDQozMTY1OiAgICAgICAgICAgICAgICAJCSNpZiggKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAxICkgfHwgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApIHx8ICggSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgPT0gMSApICkNCjMxNjY6ICAgICAgICAgICAgICAgIAkJew0KMzE2NzogICAgICAgICAgICAgICAgCQkJLyogSnVzdCB0byBoZWxwIGRlYnVnZ2luZy4gKi8NCjMxNjg6ICAgICAgICAgICAgICAgIAkJCSggdm9pZCApIG1lbXNldCggcHhOZXdUQ0ItPnB4U3RhY2ssICggaW50ICkgdHNrU1RBQ0tfRklMTF9CWVRFLCAoIHNpemVfdCApIHVzU3RhY2tEZXB0aCAqIHNpemVvZiggU3RhY2tUeXBlX3QgKSApOw0KQkZEMDYzQTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjNBMiAgNjlBQzAwMTAgICBFWFQgWkVSTywgUzAsIDYsIDE0CkJGRDA2M0E0ICAgICAgNjlBQyAgIExXIFYxLCA0OChWMCkKQkZEMDYzQTYgIDAwMjAzNDVFICAgTEhVIFYwLCAzMihTOCkKQkZEMDYzQUEgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwNjNBQyAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwNjNBRSAgMDBBNTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTY1CkJGRDA2M0IyICAgICAgMENDMiAgIE1PVkUgQTIsIFYwCkJGRDA2M0I0ICAzNkY2NzdFOCAgIEpBTFMgMHhCRkQwNkRFQwpCRkQwNjNCNiAgMEMwMDM2RjYgICBMSFUgUzcsIDMwNzIoUzYpCkJGRDA2M0I4ICAgICAgMEMwMCAgIE5PUAozMTY5OiAgICAgICAgICAgICAgICAJCX0NCjMxNzA6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qICggKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAxICkgfHwgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgfHwgKCBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayA9PSAxICkgKSApICovDQozMTcxOiAgICAgICAgICAgICAgICAJfQ0KMzE3MjogICAgICAgICAgICAgICAgDQozMTczOiAgICAgICAgICAgICAgICAJcmV0dXJuIHB4TmV3VENCOw0KQkZEMDYzQkEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQozMTc0OiAgICAgICAgICAgICAgICB9DQpCRkQwNjNCRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNjNDMCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA2M0MyICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDYzQzQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNjNDNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2M0M4ICAgICAgMEMwMCAgIE5PUAozMTc1OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxNzY6ICAgICAgICAgICAgICAgIA0KMzE3NzogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMzE3ODogICAgICAgICAgICAgICAgDQozMTc5OiAgICAgICAgICAgICAgICAJc3RhdGljIFVCYXNlVHlwZV90IHBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggVGFza1N0YXR1c190ICpweFRhc2tTdGF0dXNBcnJheSwgTGlzdF90ICpweExpc3QsIGVUYXNrU3RhdGUgZVN0YXRlICkNCjMxODA6ICAgICAgICAgICAgICAgIAl7DQozMTgxOiAgICAgICAgICAgICAgICAJdm9sYXRpbGUgVENCX3QgKnB4TmV4dFRDQiwgKnB4Rmlyc3RUQ0I7DQozMTgyOiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhUYXNrID0gMDsNCjMxODM6ICAgICAgICAgICAgICAgIA0KMzE4NDogICAgICAgICAgICAgICAgCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoIHB4TGlzdCApID4gKCBVQmFzZVR5cGVfdCApIDAgKQ0KMzE4NTogICAgICAgICAgICAgICAgCQl7DQozMTg2OiAgICAgICAgICAgICAgICAJCQlsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkoIHB4Rmlyc3RUQ0IsIHB4TGlzdCApOw0KMzE4NzogICAgICAgICAgICAgICAgDQozMTg4OiAgICAgICAgICAgICAgICAJCQkvKiBQb3B1bGF0ZSBhbiBUYXNrU3RhdHVzX3Qgc3RydWN0dXJlIHdpdGhpbiB0aGUNCjMxODk6ICAgICAgICAgICAgICAgIAkJCXB4VGFza1N0YXR1c0FycmF5IGFycmF5IGZvciBlYWNoIHRhc2sgdGhhdCBpcyByZWZlcmVuY2VkIGZyb20NCjMxOTA6ICAgICAgICAgICAgICAgIAkJCXB4TGlzdC4gIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBUYXNrU3RhdHVzX3QgaW4gdGFzay5oIGZvciB0aGUNCjMxOTE6ICAgICAgICAgICAgICAgIAkJCW1lYW5pbmcgb2YgZWFjaCBUYXNrU3RhdHVzX3Qgc3RydWN0dXJlIG1lbWJlci4gKi8NCjMxOTI6ICAgICAgICAgICAgICAgIAkJCWRvDQozMTkzOiAgICAgICAgICAgICAgICAJCQl7DQozMTk0OiAgICAgICAgICAgICAgICAJCQkJbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZKCBweE5leHRUQ0IsIHB4TGlzdCApOw0KMzE5NTogICAgICAgICAgICAgICAgDQozMTk2OiAgICAgICAgICAgICAgICAJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnhIYW5kbGUgPSAoIFRhc2tIYW5kbGVfdCApIHB4TmV4dFRDQjsNCjMxOTc6ICAgICAgICAgICAgICAgIAkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0ucGNUYXNrTmFtZSA9ICggY29uc3QgY2hhciAqICkgJiggcHhOZXh0VENCLT5wY1Rhc2tOYW1lIFsgMCBdICk7DQozMTk4OiAgICAgICAgICAgICAgICAJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnhUYXNrTnVtYmVyID0gcHhOZXh0VENCLT51eFRDQk51bWJlcjsNCjMxOTk6ICAgICAgICAgICAgICAgIAkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0uZUN1cnJlbnRTdGF0ZSA9IGVTdGF0ZTsNCjMyMDA6ICAgICAgICAgICAgICAgIAkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0udXhDdXJyZW50UHJpb3JpdHkgPSBweE5leHRUQ0ItPnV4UHJpb3JpdHk7DQozMjAxOiAgICAgICAgICAgICAgICANCjMyMDI6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjMyMDM6ICAgICAgICAgICAgICAgIAkJCQl7DQozMjA0OiAgICAgICAgICAgICAgICAJCQkJCS8qIElmIHRoZSB0YXNrIGlzIGluIHRoZSBzdXNwZW5kZWQgbGlzdCB0aGVuIHRoZXJlIGlzIGEgY2hhbmNlDQozMjA1OiAgICAgICAgICAgICAgICAJCQkJCWl0IGlzIGFjdHVhbGx5IGp1c3QgYmxvY2tlZCBpbmRlZmluaXRlbHkgLSBzbyByZWFsbHkgaXQgc2hvdWxkDQozMjA2OiAgICAgICAgICAgICAgICAJCQkJCWJlIHJlcG9ydGVkIGFzIGJlaW5nIGluIHRoZSBCbG9ja2VkIHN0YXRlLiAqLw0KMzIwNzogICAgICAgICAgICAgICAgCQkJCQlpZiggZVN0YXRlID09IGVTdXNwZW5kZWQgKQ0KMzIwODogICAgICAgICAgICAgICAgCQkJCQl7DQozMjA5OiAgICAgICAgICAgICAgICAJCQkJCQlpZiggbGlzdExJU1RfSVRFTV9DT05UQUlORVIoICYoIHB4TmV4dFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApICE9IE5VTEwgKQ0KMzIxMDogICAgICAgICAgICAgICAgCQkJCQkJew0KMzIxMTogICAgICAgICAgICAgICAgCQkJCQkJCXB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXS5lQ3VycmVudFN0YXRlID0gZUJsb2NrZWQ7DQozMjEyOiAgICAgICAgICAgICAgICAJCQkJCQl9DQozMjEzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjMyMTQ6ICAgICAgICAgICAgICAgIAkJCQl9DQozMjE1OiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQozMjE2OiAgICAgICAgICAgICAgICANCjMyMTc6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjMyMTg6ICAgICAgICAgICAgICAgIAkJCQl7DQozMjE5OiAgICAgICAgICAgICAgICAJCQkJCXB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXS51eEJhc2VQcmlvcml0eSA9IHB4TmV4dFRDQi0+dXhCYXNlUHJpb3JpdHk7DQozMjIwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzIyMTogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQozMjIyOiAgICAgICAgICAgICAgICAJCQkJew0KMzIyMzogICAgICAgICAgICAgICAgCQkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0udXhCYXNlUHJpb3JpdHkgPSAwOw0KMzIyNDogICAgICAgICAgICAgICAgCQkJCX0NCjMyMjU6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYNCjMyMjY6ICAgICAgICAgICAgICAgIA0KMzIyNzogICAgICAgICAgICAgICAgCQkJCSNpZiAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKQ0KMzIyODogICAgICAgICAgICAgICAgCQkJCXsNCjMyMjk6ICAgICAgICAgICAgICAgIAkJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnVsUnVuVGltZUNvdW50ZXIgPSBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXI7DQozMjMwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzIzMTogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQozMjMyOiAgICAgICAgICAgICAgICAJCQkJew0KMzIzMzogICAgICAgICAgICAgICAgCQkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0udWxSdW5UaW1lQ291bnRlciA9IDA7DQozMjM0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMzIzNTogICAgICAgICAgICAgICAgCQkJCSNlbmRpZg0KMzIzNjogICAgICAgICAgICAgICAgDQozMjM3OiAgICAgICAgICAgICAgICAJCQkJI2lmICggcG9ydFNUQUNLX0dST1dUSCA+IDAgKQ0KMzIzODogICAgICAgICAgICAgICAgCQkJCXsNCjMyMzk6ICAgICAgICAgICAgICAgIAkJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnVzU3RhY2tIaWdoV2F0ZXJNYXJrID0gcHJ2VGFza0NoZWNrRnJlZVN0YWNrU3BhY2UoICggdWludDhfdCAqICkgcHhOZXh0VENCLT5weEVuZE9mU3RhY2sgKTsNCjMyNDA6ICAgICAgICAgICAgICAgIAkJCQl9DQozMjQxOiAgICAgICAgICAgICAgICAJCQkJI2Vsc2UNCjMyNDI6ICAgICAgICAgICAgICAgIAkJCQl7DQozMjQzOiAgICAgICAgICAgICAgICAJCQkJCXB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXS51c1N0YWNrSGlnaFdhdGVyTWFyayA9IHBydlRhc2tDaGVja0ZyZWVTdGFja1NwYWNlKCAoIHVpbnQ4X3QgKiApIHB4TmV4dFRDQi0+cHhTdGFjayApOw0KMzI0NDogICAgICAgICAgICAgICAgCQkJCX0NCjMyNDU6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYNCjMyNDY6ICAgICAgICAgICAgICAgIA0KMzI0NzogICAgICAgICAgICAgICAgCQkJCXV4VGFzaysrOw0KMzI0ODogICAgICAgICAgICAgICAgDQozMjQ5OiAgICAgICAgICAgICAgICAJCQl9IHdoaWxlKCBweE5leHRUQ0IgIT0gcHhGaXJzdFRDQiApOw0KMzI1MDogICAgICAgICAgICAgICAgCQl9DQozMjUxOiAgICAgICAgICAgICAgICAJCWVsc2UNCjMyNTI6ICAgICAgICAgICAgICAgIAkJew0KMzI1MzogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzI1NDogICAgICAgICAgICAgICAgCQl9DQozMjU1OiAgICAgICAgICAgICAgICANCjMyNTY6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4VGFzazsNCjMyNTc6ICAgICAgICAgICAgICAgIAl9DQozMjU4OiAgICAgICAgICAgICAgICANCjMyNTk6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjMyNjA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzI2MTogICAgICAgICAgICAgICAgDQozMjYyOiAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgfHwgKCBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayA9PSAxICkgKQ0KMzI2MzogICAgICAgICAgICAgICAgDQozMjY0OiAgICAgICAgICAgICAgICAJc3RhdGljIHVpbnQxNl90IHBydlRhc2tDaGVja0ZyZWVTdGFja1NwYWNlKCBjb25zdCB1aW50OF90ICogcHVjU3RhY2tCeXRlICkNCjMyNjU6ICAgICAgICAgICAgICAgIAl7DQpCRkQwODlBNCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNgpCRkQwODlBNiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA4OUE4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4OUFBICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkKMzI2NjogICAgICAgICAgICAgICAgCXVpbnQzMl90IHVsQ291bnQgPSAwVTsNCkJGRDA4OUFFICAwMDAwRjgxRSAgIFNXIFpFUk8sIDAoUzgpCjMyNjc6ICAgICAgICAgICAgICAgIA0KMzI2ODogICAgICAgICAgICAgICAgCQl3aGlsZSggKnB1Y1N0YWNrQnl0ZSA9PSAoIHVpbnQ4X3QgKSB0c2tTVEFDS19GSUxMX0JZVEUgKQ0KQkZEMDg5QjIgICAgICBDQzBCICAgQiAweEJGRDA4OUNBCkJGRDA4OUI0ICAgICAgMEMwMCAgIE5PUApCRkQwODlDQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4OUNFICAgICAgMDlBMCAgIExCVSBWMSwgMChWMCkKQkZEMDg5RDAgIDAwQTUzMDQwICAgQURESVUgVjAsIFpFUk8sIDE2NQpCRkQwODlENCAgRkZFRjk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA4OUI2CkJGRDA4OUQ2ICAwQzAwRkZFRiAgIExXIFJBLCAzMDcyKFQ3KQpCRkQwODlEOCAgICAgIDBDMDAgICBOT1AKMzI2OTogICAgICAgICAgICAgICAgCQl7DQozMjcwOiAgICAgICAgICAgICAgICAJCQlwdWNTdGFja0J5dGUgLT0gcG9ydFNUQUNLX0dST1dUSDsNCkJGRDA4OUI2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDg5QkEgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxCkJGRDA4OUJDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzI3MTogICAgICAgICAgICAgICAgCQkJdWxDb3VudCsrOw0KQkZEMDg5QzAgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA4OUM0ICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQpCRkQwODlDNiAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkKMzI3MjogICAgICAgICAgICAgICAgCQl9DQozMjczOiAgICAgICAgICAgICAgICANCjMyNzQ6ICAgICAgICAgICAgICAgIAkJdWxDb3VudCAvPSAoIHVpbnQzMl90ICkgc2l6ZW9mKCBTdGFja1R5cGVfdCApOyAvKmxpbnQgIWU5NjEgQ2FzdGluZyBpcyBub3QgcmVkdW5kYW50IG9uIHNtYWxsZXIgYXJjaGl0ZWN0dXJlcy4gKi8NCkJGRDA4OURBICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwODlERSAgICAgIDI1MjUgICBTUkwgVjAsIFYwLCAyCkJGRDA4OUUwICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQozMjc1OiAgICAgICAgICAgICAgICANCjMyNzY6ICAgICAgICAgICAgICAgIAkJcmV0dXJuICggdWludDE2X3QgKSB1bENvdW50Ow0KQkZEMDg5RTQgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA4OUU4ICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKMzI3NzogICAgICAgICAgICAgICAgCX0NCkJGRDA4OUVBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4OUVDICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDg5RUUgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwODlGMCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4OUYyICAgICAgMEMwMCAgIE5PUAozMjc4OiAgICAgICAgICAgICAgICANCjMyNzk6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiAoICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKSB8fCAoIElOQ0xVREVfdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrID09IDEgKSApICovDQozMjgwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMyODE6ICAgICAgICAgICAgICAgIA0KMzI4MjogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgPT0gMSApDQozMjgzOiAgICAgICAgICAgICAgICANCjMyODQ6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsoIFRhc2tIYW5kbGVfdCB4VGFzayApDQozMjg1OiAgICAgICAgICAgICAgICAJew0KQkZEMDhDMTAgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDhDMTIgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwOEMxNCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDA4QzE2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4QzE4ICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKMzI4NjogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjMyODc6ICAgICAgICAgICAgICAgIAl1aW50OF90ICpwdWNFbmRPZlN0YWNrOw0KMzI4ODogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4UmV0dXJuOw0KMzI4OTogICAgICAgICAgICAgICAgDQozMjkwOiAgICAgICAgICAgICAgICAJCXB4VENCID0gcHJ2R2V0VENCRnJvbUhhbmRsZSggeFRhc2sgKTsNCkJGRDA4QzFDICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDhDMjAgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDhDMkMKQkZEMDhDMjQgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDhDMjggICAgICBDQzAzICAgQiAweEJGRDA4QzMwCkJGRDA4QzJBICAgICAgMEMwMCAgIE5PUApCRkQwOEMyQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA4QzMwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzI5MTogICAgICAgICAgICAgICAgDQozMjkyOiAgICAgICAgICAgICAgICAJCSNpZiBwb3J0U1RBQ0tfR1JPV1RIIDwgMA0KMzI5MzogICAgICAgICAgICAgICAgCQl7DQozMjk0OiAgICAgICAgICAgICAgICAJCQlwdWNFbmRPZlN0YWNrID0gKCB1aW50OF90ICogKSBweFRDQi0+cHhTdGFjazsNCkJGRDA4QzM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDhDMzYgIDY5MkMwMDEwICAgRVhUIFpFUk8sIFMwLCA0LCAxNApCRkQwOEMzOCAgICAgIDY5MkMgICBMVyBWMCwgNDgoVjApCkJGRDA4QzNBICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMzI5NTogICAgICAgICAgICAgICAgCQl9DQozMjk2OiAgICAgICAgICAgICAgICAJCSNlbHNlDQozMjk3OiAgICAgICAgICAgICAgICAJCXsNCjMyOTg6ICAgICAgICAgICAgICAgIAkJCXB1Y0VuZE9mU3RhY2sgPSAoIHVpbnQ4X3QgKiApIHB4VENCLT5weEVuZE9mU3RhY2s7DQozMjk5OiAgICAgICAgICAgICAgICAJCX0NCjMzMDA6ICAgICAgICAgICAgICAgIAkJI2VuZGlmDQozMzAxOiAgICAgICAgICAgICAgICANCjMzMDI6ICAgICAgICAgICAgICAgIAkJdXhSZXR1cm4gPSAoIFVCYXNlVHlwZV90ICkgcHJ2VGFza0NoZWNrRnJlZVN0YWNrU3BhY2UoIHB1Y0VuZE9mU3RhY2sgKTsNCkJGRDA4QzNFICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDhDNDIgIDQ0RDI3N0U4ICAgSkFMUyBwcnZUYXNrQ2hlY2tGcmVlU3RhY2tTcGFjZQpCRkQwOEM0NCAgICAgIDQ0RDIgICBPUjE2IFYwLCBWMApCRkQwOEM0NiAgICAgIDBDMDAgICBOT1AKQkZEMDhDNDggIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQozMzAzOiAgICAgICAgICAgICAgICANCjMzMDQ6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDhDNEMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQozMzA1OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDhDNTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDhDNTIgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwOEM1NCAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDA4QzU2ICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDhDNTggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOEM1QSAgICAgIDBDMDAgICBOT1AKMzMwNjogICAgICAgICAgICAgICAgDQozMzA3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgKi8NCjMzMDg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzMwOTogICAgICAgICAgICAgICAgDQozMzEwOiAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KMzMxMTogICAgICAgICAgICAgICAgDQozMzEyOiAgICAgICAgICAgICAgICAJc3RhdGljIHZvaWQgcHJ2RGVsZXRlVENCKCBUQ0JfdCAqcHhUQ0IgKQ0KMzMxMzogICAgICAgICAgICAgICAgCXsNCkJGRDA5OERDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5OERFICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDk4RTAgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOThFMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOThFNCAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpCjMzMTQ6ICAgICAgICAgICAgICAgIAkJLyogVGhpcyBjYWxsIGlzIHJlcXVpcmVkIHNwZWNpZmljYWxseSBmb3IgdGhlIFRyaUNvcmUgcG9ydC4gIEl0IG11c3QgYmUNCjMzMTU6ICAgICAgICAgICAgICAgIAkJYWJvdmUgdGhlIHZQb3J0RnJlZSgpIGNhbGxzLiAgVGhlIGNhbGwgaXMgYWxzbyB1c2VkIGJ5IHBvcnRzL2RlbW9zIHRoYXQNCjMzMTY6ICAgICAgICAgICAgICAgIAkJd2FudCB0byBhbGxvY2F0ZSBhbmQgY2xlYW4gUkFNIHN0YXRpY2FsbHkuICovDQozMzE3OiAgICAgICAgICAgICAgICAJCXBvcnRDTEVBTl9VUF9UQ0IoIHB4VENCICk7DQozMzE4OiAgICAgICAgICAgICAgICANCjMzMTk6ICAgICAgICAgICAgICAgIAkJLyogRnJlZSB1cCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgc2NoZWR1bGVyIGZvciB0aGUgdGFzay4gIEl0IGlzIHVwDQozMzIwOiAgICAgICAgICAgICAgICAJCXRvIHRoZSB0YXNrIHRvIGZyZWUgYW55IG1lbW9yeSBhbGxvY2F0ZWQgYXQgdGhlIGFwcGxpY2F0aW9uIGxldmVsLiAqLw0KMzMyMTogICAgICAgICAgICAgICAgCQkjaWYgKCBjb25maWdVU0VfTkVXTElCX1JFRU5UUkFOVCA9PSAxICkNCjMzMjI6ICAgICAgICAgICAgICAgIAkJew0KMzMyMzogICAgICAgICAgICAgICAgCQkJX3JlY2xhaW1fcmVlbnQoICYoIHB4VENCLT54TmV3TGliX3JlZW50ICkgKTsNCjMzMjQ6ICAgICAgICAgICAgICAgIAkJfQ0KMzMyNTogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX05FV0xJQl9SRUVOVFJBTlQgKi8NCjMzMjY6ICAgICAgICAgICAgICAgIA0KMzMyNzogICAgICAgICAgICAgICAgCQkjaWYoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQozMzI4OiAgICAgICAgICAgICAgICAJCXsNCjMzMjk6ICAgICAgICAgICAgICAgIAkJCS8qIE9ubHkgZnJlZSB0aGUgc3RhY2sgaWYgaXQgd2FzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBpbiB0aGUgZmlyc3QNCjMzMzA6ICAgICAgICAgICAgICAgIAkJCXBsYWNlLiAqLw0KMzMzMTogICAgICAgICAgICAgICAgCQkJaWYoIHB4VENCLT54VXNpbmdTdGF0aWNhbGx5QWxsb2NhdGVkU3RhY2sgPT0gcGRGQUxTRSApDQozMzMyOiAgICAgICAgICAgICAgICAJCQl7DQozMzMzOiAgICAgICAgICAgICAgICAJCQkJdlBvcnRGcmVlQWxpZ25lZCggcHhUQ0ItPnB4U3RhY2sgKTsNCjMzMzQ6ICAgICAgICAgICAgICAgIAkJCX0NCjMzMzU6ICAgICAgICAgICAgICAgIAkJfQ0KMzMzNjogICAgICAgICAgICAgICAgCQkjZWxzZQ0KMzMzNzogICAgICAgICAgICAgICAgCQl7DQozMzM4OiAgICAgICAgICAgICAgICAJCQl2UG9ydEZyZWVBbGlnbmVkKCBweFRDQi0+cHhTdGFjayApOw0KQkZEMDk4RTggIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwOThFQSAgNjkyQzAwMTggICBFWFQgWkVSTywgVDgsIDQsIDE0CkJGRDA5OEVDICAgICAgNjkyQyAgIExXIFYwLCA0OChWMCkKQkZEMDk4RUUgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDk4RjAgIDJGRUE3N0U4ICAgSkFMUyB2UG9ydEZyZWUKQkZEMDk4RjIgICAgICAyRkVBICAgQU5ESSBBMywgQTIsIDB4MjAKQkZEMDk4RjQgICAgICAwQzAwICAgTk9QCjMzMzk6ICAgICAgICAgICAgICAgIAkJfQ0KMzM0MDogICAgICAgICAgICAgICAgCQkjZW5kaWYNCjMzNDE6ICAgICAgICAgICAgICAgIA0KMzM0MjogICAgICAgICAgICAgICAgCQl2UG9ydEZyZWUoIHB4VENCICk7DQpCRkQwOThGNiAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA5OEZBICAyRkVBNzdFOCAgIEpBTFMgdlBvcnRGcmVlCkJGRDA5OEZDICAgICAgMkZFQSAgIEFOREkgQTMsIEEyLCAweDIwCkJGRDA5OEZFICAgICAgMEMwMCAgIE5PUAozMzQzOiAgICAgICAgICAgICAgICAJfQ0KQkZEMDk5MDAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk5MDIgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwOTkwNCAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA5OTA2ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDk5MDggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTkwQSAgICAgIDBDMDAgICBOT1AKMzM0NDogICAgICAgICAgICAgICAgDQozMzQ1OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV92VGFza0RlbGV0ZSAqLw0KMzM0NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMzQ3OiAgICAgICAgICAgICAgICANCjMzNDg6ICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZSggdm9pZCApDQozMzQ5OiAgICAgICAgICAgICAgICB7DQpCRkQwOEY5NCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNgpCRkQwOEY5NiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA4Rjk4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjMzNTA6ICAgICAgICAgICAgICAgIFRDQl90ICpweFRDQjsNCjMzNTE6ICAgICAgICAgICAgICAgIA0KMzM1MjogICAgICAgICAgICAgICAgCWlmKCBsaXN0TElTVF9JU19FTVBUWSggcHhEZWxheWVkVGFza0xpc3QgKSAhPSBwZEZBTFNFICkNCkJGRDA4RjlBICA4MDc0RkM1QyAgIExXIFYwLCAtMzI2NTIoR1ApCkJGRDA4RjlFICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwOEZBMCAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEZBQQpCRkQwOEZBNCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwOEZBNiAgICAgIENDMDIgICBCIDB4QkZEMDhGQUMKQkZEMDhGQTggICAgICAwQzAwICAgTk9QCkJGRDA4RkFBICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8KQkZEMDhGQUMgIDAwMDU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDhGQkEKMzM1MzogICAgICAgICAgICAgICAgCXsNCjMzNTQ6ICAgICAgICAgICAgICAgIAkJLyogVGhlIG5ldyBjdXJyZW50IGRlbGF5ZWQgbGlzdCBpcyBlbXB0eS4gIFNldCB4TmV4dFRhc2tVbmJsb2NrVGltZSB0bw0KMzM1NTogICAgICAgICAgICAgICAgCQl0aGUgbWF4aW11bSBwb3NzaWJsZSB2YWx1ZSBzbyBpdCBpcwlleHRyZW1lbHkgdW5saWtlbHkgdGhhdCB0aGUNCjMzNTY6ICAgICAgICAgICAgICAgIAkJaWYoIHhUaWNrQ291bnQgPj0geE5leHRUYXNrVW5ibG9ja1RpbWUgKSB0ZXN0IHdpbGwgcGFzcyB1bnRpbA0KMzM1NzogICAgICAgICAgICAgICAgCQl0aGVyZSBpcyBhbiBpdGVtIGluIHRoZSBkZWxheWVkIGxpc3QuICovDQozMzU4OiAgICAgICAgICAgICAgICAJCXhOZXh0VGFza1VuYmxvY2tUaW1lID0gcG9ydE1BWF9ERUxBWTsNCkJGRDA4RkIwICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwOEZCMiAgODA1OEY4NUMgICBTVyBWMCwgLTMyNjgwKEdQKQpCRkQwOEZCNiAgICAgIENDMEMgICBCIDB4QkZEMDhGRDAKQkZEMDhGQjggICAgICAwQzAwICAgTk9QCjMzNTk6ICAgICAgICAgICAgICAgIAl9DQozMzYwOiAgICAgICAgICAgICAgICAJZWxzZQ0KMzM2MTogICAgICAgICAgICAgICAgCXsNCjMzNjI6ICAgICAgICAgICAgICAgIAkJLyogVGhlIG5ldyBjdXJyZW50IGRlbGF5ZWQgbGlzdCBpcyBub3QgZW1wdHksIGdldCB0aGUgdmFsdWUgb2YNCjMzNjM6ICAgICAgICAgICAgICAgIAkJdGhlIGl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhlIGRlbGF5ZWQgbGlzdC4gIFRoaXMgaXMgdGhlIHRpbWUgYXQNCjMzNjQ6ICAgICAgICAgICAgICAgIAkJd2hpY2ggdGhlIHRhc2sgYXQgdGhlIGhlYWQgb2YgdGhlIGRlbGF5ZWQgbGlzdCBzaG91bGQgYmUgcmVtb3ZlZA0KMzM2NTogICAgICAgICAgICAgICAgCQlmcm9tIHRoZSBCbG9ja2VkIHN0YXRlLiAqLw0KMzM2NjogICAgICAgICAgICAgICAgCQkoIHB4VENCICkgPSAoIFRDQl90ICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoIHB4RGVsYXllZFRhc2tMaXN0ICk7DQpCRkQwOEZCQSAgODA3NEZDNUMgICBMVyBWMCwgLTMyNjUyKEdQKQpCRkQwOEZCRSAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA4RkMwICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkKQkZEMDhGQzIgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCjMzNjc6ICAgICAgICAgICAgICAgIAkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRSggJiggKCBweFRDQiApLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDA4RkM2ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwOEZDQSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDhGQ0MgIDgwNThGODVDICAgU1cgVjAsIC0zMjY4MChHUCkKMzM2ODogICAgICAgICAgICAgICAgCX0NCjMzNjk6ICAgICAgICAgICAgICAgIH0NCkJGRDA4RkQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4RkQyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDhGRDQgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwOEZENiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4RkQ4ICAgICAgMEMwMCAgIE5PUAozMzcwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMzNzE6ICAgICAgICAgICAgICAgIA0KMzM3MjogICAgICAgICAgICAgICAgI2lmICggKCBJTkNMVURFX3hUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUgPT0gMSApIHx8ICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApICkNCjMzNzM6ICAgICAgICAgICAgICAgIA0KMzM3NDogICAgICAgICAgICAgICAgCVRhc2tIYW5kbGVfdCB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCB2b2lkICkNCjMzNzU6ICAgICAgICAgICAgICAgIAl7DQpCRkQwOUUwNCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNgpCRkQwOUUwNiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA5RTA4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjMzNzY6ICAgICAgICAgICAgICAgIAlUYXNrSGFuZGxlX3QgeFJldHVybjsNCjMzNzc6ICAgICAgICAgICAgICAgIA0KMzM3ODogICAgICAgICAgICAgICAgCQkvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgbm90IHJlcXVpcmVkIGFzIHRoaXMgaXMgbm90IGNhbGxlZCBmcm9tDQozMzc5OiAgICAgICAgICAgICAgICAJCWFuIGludGVycnVwdCBhbmQgdGhlIGN1cnJlbnQgVENCIHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGZvciBhbnkNCjMzODA6ICAgICAgICAgICAgICAgIAkJaW5kaXZpZHVhbCBleGVjdXRpb24gdGhyZWFkLiAqLw0KMzM4MTogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcHhDdXJyZW50VENCOw0KQkZEMDlFMEEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDlFMEUgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCjMzODI6ICAgICAgICAgICAgICAgIA0KMzM4MzogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA5RTEyICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQozMzg0OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDlFMTYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlFMTggICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwOUUxQSAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDA5RTFDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlFMUUgICAgICAwQzAwICAgTk9QCjMzODU6ICAgICAgICAgICAgICAgIA0KMzM4NjogICAgICAgICAgICAgICAgI2VuZGlmIC8qICggKCBJTkNMVURFX3hUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUgPT0gMSApIHx8ICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApICkgKi8NCjMzODc6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzM4ODogICAgICAgICAgICAgICAgDQozMzg5OiAgICAgICAgICAgICAgICAjaWYgKCAoIElOQ0xVREVfeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSA9PSAxICkgfHwgKCBjb25maWdVU0VfVElNRVJTID09IDEgKSApDQozMzkwOiAgICAgICAgICAgICAgICANCjMzOTE6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoIHZvaWQgKQ0KMzM5MjogICAgICAgICAgICAgICAgCXsNCkJGRDA5NTFDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5NTFFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDk1MjAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzM5MzogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjMzOTQ6ICAgICAgICAgICAgICAgIA0KMzM5NTogICAgICAgICAgICAgICAgCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgPT0gcGRGQUxTRSApDQpCRkQwOTUyMiAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQpCRkQwOTUyNiAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOTUzNAozMzk2OiAgICAgICAgICAgICAgICAJCXsNCjMzOTc6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB0YXNrU0NIRURVTEVSX05PVF9TVEFSVEVEOw0KQkZEMDk1MkEgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDk1MkMgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCkJGRDA5NTJFICBDQzBDMDAwMCAgIElOUyBaRVJPLCBaRVJPLCAxNiwgMTAKQkZEMDk1MzAgICAgICBDQzBDICAgQiAweEJGRDA5NTRBCkJGRDA5NTMyICAgICAgMEMwMCAgIE5PUAozMzk4OiAgICAgICAgICAgICAgICAJCX0NCjMzOTk6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzQwMDogICAgICAgICAgICAgICAgCQl7DQozNDAxOiAgICAgICAgICAgICAgICAJCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDk1MzQgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkKQkZEMDk1MzggIDAwMDU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDk1NDYKMzQwMjogICAgICAgICAgICAgICAgCQkJew0KMzQwMzogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSB0YXNrU0NIRURVTEVSX1JVTk5JTkc7DQpCRkQwOTUzQyAgICAgIEVEMDIgICBMSSBWMCwgMgpCRkQwOTUzRSAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkKQkZEMDk1NDIgICAgICBDQzAzICAgQiAweEJGRDA5NTRBCkJGRDA5NTQ0ICAgICAgMEMwMCAgIE5PUAozNDA0OiAgICAgICAgICAgICAgICAJCQl9DQozNDA1OiAgICAgICAgICAgICAgICAJCQllbHNlDQozNDA2OiAgICAgICAgICAgICAgICAJCQl7DQozNDA3OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHRhc2tTQ0hFRFVMRVJfU1VTUEVOREVEOw0KQkZEMDk1NDYgIDAwMDBGODFFICAgU1cgWkVSTywgMChTOCkKMzQwODogICAgICAgICAgICAgICAgCQkJfQ0KMzQwOTogICAgICAgICAgICAgICAgCQl9DQozNDEwOiAgICAgICAgICAgICAgICANCjM0MTE6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwOTU0QSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKMzQxMjogICAgICAgICAgICAgICAgCX0NCkJGRDA5NTRFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5NTUwICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDk1NTIgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwOTU1NCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5NTU2ICAgICAgMEMwMCAgIE5PUAozNDEzOiAgICAgICAgICAgICAgICANCjM0MTQ6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiAoICggSU5DTFVERV94VGFza0dldFNjaGVkdWxlclN0YXRlID09IDEgKSB8fCAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApICkgKi8NCjM0MTU6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzQxNjogICAgICAgICAgICAgICAgDQozNDE3OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjM0MTg6ICAgICAgICAgICAgICAgIA0KMzQxOTogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tQcmlvcml0eUluaGVyaXQoIFRhc2tIYW5kbGVfdCBjb25zdCBweE11dGV4SG9sZGVyICkNCjM0MjA6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMzUyMCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwMzUyMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDAzNTI0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDM1MjYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDM1MjggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQozNDIxOiAgICAgICAgICAgICAgICAJVENCX3QgKiBjb25zdCBweFRDQiA9ICggVENCX3QgKiApIHB4TXV0ZXhIb2xkZXI7DQpCRkQwMzUyQyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAzNTMwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzQyMjogICAgICAgICAgICAgICAgDQozNDIzOiAgICAgICAgICAgICAgICAJCS8qIElmIHRoZSBtdXRleCB3YXMgZ2l2ZW4gYmFjayBieSBhbiBpbnRlcnJ1cHQgd2hpbGUgdGhlIHF1ZXVlIHdhcw0KMzQyNDogICAgICAgICAgICAgICAgCQlsb2NrZWQgdGhlbiB0aGUgbXV0ZXggaG9sZGVyIG1pZ2h0IG5vdyBiZSBOVUxMLiAqLw0KMzQyNTogICAgICAgICAgICAgICAgCQlpZiggcHhNdXRleEhvbGRlciAhPSBOVUxMICkNCkJGRDAzNTM0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDM1MzggIDAwN0U0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDM2MzgKMzQyNjogICAgICAgICAgICAgICAgCQl7DQozNDI3OiAgICAgICAgICAgICAgICAJCQkvKiBJZiB0aGUgaG9sZGVyIG9mIHRoZSBtdXRleCBoYXMgYSBwcmlvcml0eSBiZWxvdyB0aGUgcHJpb3JpdHkgb2YNCjM0Mjg6ICAgICAgICAgICAgICAgIAkJCXRoZSB0YXNrIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBtdXRleCB0aGVuIGl0IHdpbGwgdGVtcG9yYXJpbHkNCjM0Mjk6ICAgICAgICAgICAgICAgIAkJCWluaGVyaXQgdGhlIHByaW9yaXR5IG9mIHRoZSB0YXNrIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBtdXRleC4gKi8NCjM0MzA6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA8IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwMzUzQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNTQwICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDM1NDIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDM1NDYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMzU0OCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDM1NEEgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDAzNTRDICAwMDc0NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNjM4CjM0MzE6ICAgICAgICAgICAgICAgIAkJCXsNCjM0MzI6ICAgICAgICAgICAgICAgIAkJCQkvKiBBZGp1c3QgdGhlIG11dGV4IGhvbGRlciBzdGF0ZSB0byBhY2NvdW50IGZvciBpdHMgbmV3DQozNDMzOiAgICAgICAgICAgICAgICAJCQkJcHJpb3JpdHkuICBPbmx5IHJlc2V0IHRoZSBldmVudCBsaXN0IGl0ZW0gdmFsdWUgaWYgdGhlIHZhbHVlIGlzDQozNDM0OiAgICAgICAgICAgICAgICAJCQkJbm90CWJlaW5nIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuICovDQozNDM1OiAgICAgICAgICAgICAgICAJCQkJaWYoICggbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgJiB0YXNrRVZFTlRfTElTVF9JVEVNX1ZBTFVFX0lOX1VTRSApID09IDBVTCApDQpCRkQwMzU1MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNTU0ICAgICAgNjkyNiAgIExXIFYwLCAyNChWMCkKQkZEMDM1NTYgIDAwMDk0MDAyICAgQkxUWiBWMCwgMHhCRkQwMzU2QwpCRkQwMzU1OCAgMEMwMDAwMDkgICBTTEwgWkVSTywgVDEsIDEKQkZEMDM1NUEgICAgICAwQzAwICAgTk9QCjM0MzY6ICAgICAgICAgICAgICAgIAkJCQl7DQozNDM3OiAgICAgICAgICAgICAgICAJCQkJCWxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSwgKCBUaWNrVHlwZV90ICkgY29uZmlnTUFYX1BSSU9SSVRJRVMgLSAoIFRpY2tUeXBlX3QgKSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKTsgLypsaW50ICFlOTYxIE1JU1JBIGV4Y2VwdGlvbiBhcyB0aGUgY2FzdHMgYXJlIG9ubHkgcmVkdW5kYW50IGZvciBzb21lIHBvcnRzLiAqLw0KQkZEMDM1NUMgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDM1NjAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMzU2MiAgICAgIEVEODUgICBMSSBWMSwgNQpCRkQwMzU2NCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjAKQkZEMDM1NjYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzU2QSAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApCjM0Mzg6ICAgICAgICAgICAgICAgIAkJCQl9DQozNDM5OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMzQ0MDogICAgICAgICAgICAgICAgCQkJCXsNCjM0NDE6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzQ0MjogICAgICAgICAgICAgICAgCQkJCX0NCjM0NDM6ICAgICAgICAgICAgICAgIA0KMzQ0NDogICAgICAgICAgICAgICAgCQkJCS8qIElmIHRoZSB0YXNrIGJlaW5nIG1vZGlmaWVkIGlzIGluIHRoZSByZWFkeSBzdGF0ZSBpdCB3aWxsIG5lZWQNCjM0NDU6ICAgICAgICAgICAgICAgIAkJCQl0byBiZSBtb3ZlZCBpbnRvIGEgbmV3IGxpc3QuICovDQozNDQ2OiAgICAgICAgICAgICAgICAJCQkJaWYoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgcHhUQ0ItPnV4UHJpb3JpdHkgXSApLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgIT0gcGRGQUxTRSApDQpCRkQwMzU2QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNTZFICA2OUE1MDAxMCAgIExXWCBUNSwgMChTMCkKQkZEMDM1NzAgICAgICA2OUE1ICAgTFcgVjEsIDIwKFYwKQpCRkQwMzU3MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNTc2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDM1NzggICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMzU3QSAgICAgIDI2MjQgICBTTEwgQTAsIFYwLCAyCkJGRDAzNTdDICAgICAgMDY0NCAgIEFERFUgQTAsIFYwLCBBMApCRkQwMzU3RSAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMzU4MCAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAzNTgyICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwCkJGRDAzNTg2ICAgICAgMDUyOCAgIEFERFUgVjAsIEEwLCBWMApCRkQwMzU4OCAgMDAwNEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAzNTk0CkJGRDAzNThBICAwQzAwMDAwNCAgIFNMTCBaRVJPLCBBMCwgMQpCRkQwMzU4QyAgICAgIDBDMDAgICBOT1AKQkZEMDM1OEUgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDM1OTAgICAgICBDQzAyICAgQiAweEJGRDAzNTk2CkJGRDAzNTkyICAgICAgMEMwMCAgIE5PUApCRkQwMzU5NCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCkJGRDAzNTk2ICAwMDQ5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNjJDCjM0NDc6ICAgICAgICAgICAgICAgIAkJCQl7DQozNDQ4OiAgICAgICAgICAgICAgICAJCQkJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMzU5QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNTlFICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMzVBMCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMzVBMiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMzVBNCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAzNUE2ICAgICAgMEMwMCAgIE5PUApCRkQwMzVBOCAgMDAxQTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzVFMAozNDQ5OiAgICAgICAgICAgICAgICAJCQkJCXsNCjM0NTA6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tSRVNFVF9SRUFEWV9QUklPUklUWSggcHhUQ0ItPnV4UHJpb3JpdHkgKTsNCkJGRDAzNUFDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM1QjAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMzVCMiAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDAzNUI0ICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDIKQkZEMDM1QjYgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxCkJGRDAzNUI4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDAzNUJBICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDM1QkMgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjAKQkZEMDM1QzAgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAzNUMyICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMzVDNCAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzVFMApCRkQwMzVDOCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNUNDICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDM1Q0UgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDM1RDAgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxCkJGRDAzNUQyICA0NDFBMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NDM0CkJGRDAzNUQ0ICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMApCRkQwMzVENiAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMzVEQSAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDM1REMgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKMzQ1MTogICAgICAgICAgICAgICAgCQkJCQl9DQozNDUyOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjM0NTM6ICAgICAgICAgICAgICAgIAkJCQkJew0KMzQ1NDogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzQ1NTogICAgICAgICAgICAgICAgCQkJCQl9DQozNDU2OiAgICAgICAgICAgICAgICANCjM0NTc6ICAgICAgICAgICAgICAgIAkJCQkJLyogSW5oZXJpdCB0aGUgcHJpb3JpdHkgYmVmb3JlIGJlaW5nIG1vdmVkIGludG8gdGhlIG5ldyBsaXN0LiAqLw0KMzQ1ODogICAgICAgICAgICAgICAgCQkJCQlweFRDQi0+dXhQcmlvcml0eSA9IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eTsNCkJGRDAzNUUwICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAzNUU0ICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDM1RTYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzVFQSAgICAgIEU5QUIgICBTVyBWMSwgNDQoVjApCjM0NTk6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDM1RUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzVGMCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAzNUYyICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAzNUY0ICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQpCRkQwMzVGNiAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQpCRkQwMzVGOCAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMzVGQyAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQpCRkQwMzVGRSAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQpCRkQwMzYwMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNjA2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDM2MDggICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMzYwQSAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDAzNjBDICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQpCRkQwMzYwRSAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMzYxMCAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAzNjEyICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwCkJGRDAzNjE2ICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwMzYxOCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNjFDICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMzYxRSAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMzYyMCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMzYyMiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAzNjI0ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwMzYyNiAgICAgIDBDMDAgICBOT1AKQkZEMDM2MjggICAgICBDQzA3ICAgQiAweEJGRDAzNjM4CkJGRDAzNjJBICAgICAgMEMwMCAgIE5PUAozNDYwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzQ2MTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjM0NjI6ICAgICAgICAgICAgICAgIAkJCQl7DQozNDYzOiAgICAgICAgICAgICAgICAJCQkJCS8qIEp1c3QgaW5oZXJpdCB0aGUgcHJpb3JpdHkuICovDQozNDY0OiAgICAgICAgICAgICAgICAJCQkJCXB4VENCLT51eFByaW9yaXR5ID0gcHhDdXJyZW50VENCLT51eFByaW9yaXR5Ow0KQkZEMDM2MkMgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDM2MzAgICAgICA2OUFCICAgTFcgVjEsIDQ0KFYwKQpCRkQwMzYzMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzNjM2ICAgICAgRTlBQiAgIFNXIFYxLCA0NChWMCkKMzQ2NTogICAgICAgICAgICAgICAgCQkJCX0NCjM0NjY6ICAgICAgICAgICAgICAgIA0KMzQ2NzogICAgICAgICAgICAgICAgCQkJCXRyYWNlVEFTS19QUklPUklUWV9JTkhFUklUKCBweFRDQiwgcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICk7DQozNDY4OiAgICAgICAgICAgICAgICAJCQl9DQozNDY5OiAgICAgICAgICAgICAgICAJCQllbHNlDQozNDcwOiAgICAgICAgICAgICAgICAJCQl7DQozNDcxOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzQ3MjogICAgICAgICAgICAgICAgCQkJfQ0KMzQ3MzogICAgICAgICAgICAgICAgCQl9DQozNDc0OiAgICAgICAgICAgICAgICAJCWVsc2UNCjM0NzU6ICAgICAgICAgICAgICAgIAkJew0KMzQ3NjogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzQ3NzogICAgICAgICAgICAgICAgCQl9DQozNDc4OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDM2MzggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDM2M0EgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwMzYzQyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDAzNjNFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDM2NDAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMzY0MiAgICAgIDBDMDAgICBOT1AKMzQ3OTogICAgICAgICAgICAgICAgDQozNDgwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX01VVEVYRVMgKi8NCjM0ODE6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzQ4MjogICAgICAgICAgICAgICAgDQozNDgzOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjM0ODQ6ICAgICAgICAgICAgICAgIA0KMzQ4NTogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFRhc2tQcmlvcml0eURpc2luaGVyaXQoIFRhc2tIYW5kbGVfdCBjb25zdCBweE11dGV4SG9sZGVyICkNCjM0ODY6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMkYwNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwMkYwNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDAyRjA4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDJGMEEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDJGMEMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQozNDg3OiAgICAgICAgICAgICAgICAJVENCX3QgKiBjb25zdCBweFRDQiA9ICggVENCX3QgKiApIHB4TXV0ZXhIb2xkZXI7DQpCRkQwMkYxMCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyRjE0ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMzQ4ODogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwMkYxOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMzQ4OTogICAgICAgICAgICAgICAgDQozNDkwOiAgICAgICAgICAgICAgICAJCWlmKCBweE11dGV4SG9sZGVyICE9IE5VTEwgKQ0KQkZEMDJGMUMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkYyMCAgMDA4QjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzAzQQozNDkxOiAgICAgICAgICAgICAgICAJCXsNCjM0OTI6ICAgICAgICAgICAgICAgIAkJCS8qIEEgdGFzayBjYW4gb25seSBoYXZlIGFuIGluaGVyaXRlZCBwcmlvcml0eSBpZiBpdCBob2xkcyB0aGUgbXV0ZXguDQozNDkzOiAgICAgICAgICAgICAgICAJCQlJZiB0aGUgbXV0ZXggaXMgaGVsZCBieSBhIHRhc2sgdGhlbiBpdCBjYW5ub3QgYmUgZ2l2ZW4gZnJvbSBhbg0KMzQ5NDogICAgICAgICAgICAgICAgCQkJaW50ZXJydXB0LCBhbmQgaWYgYSBtdXRleCBpcyBnaXZlbiBieSB0aGUgaG9sZGluZyB0YXNrIHRoZW4gaXQgbXVzdA0KMzQ5NTogICAgICAgICAgICAgICAgCQkJYmUgdGhlIHJ1bm5pbmcgc3RhdGUgdGFzay4gKi8NCjM0OTY6ICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggcHhUQ0IgPT0gcHhDdXJyZW50VENCICk7DQpCRkQwMkYyNCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMkYyOCAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDAyRjJDICAwMDBBOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDJGNDQKQkZEMDJGMkUgIDBDMDAwMDBBICAgU0xMIFpFUk8sIFQyLCAxCkJGRDAyRjMwICAgICAgMEMwMCAgIE5PUApCRkQwMkYzMiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMkYzNCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAyRjM2ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAyRjM4ICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMkYzQSAgMERBODMwQTAgICBBRERJVSBBMSwgWkVSTywgMzQ5NgpCRkQwMkYzQyAgICAgIDBEQTggICBNT1ZFIFQ1LCBUMApCRkQwMkYzRSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDJGNDAgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDJGNDIgICAgICAwQzAwICAgTk9QCjM0OTc6ICAgICAgICAgICAgICAgIA0KMzQ5ODogICAgICAgICAgICAgICAgCQkJY29uZmlnQVNTRVJUKCBweFRDQi0+dXhNdXRleGVzSGVsZCApOw0KQkZEMDJGNDQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkY0OCAgMDA0NEZDNDIgICBMVyBWMCwgNjgoVjApCkJGRDAyRjRDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyRjYyCkJGRDAyRjUwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAyRjUyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDJGNTQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDJGNTYgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDAyRjU4ICAwREFBMzBBMCAgIEFERElVIEExLCBaRVJPLCAzNDk4CkJGRDAyRjVBICAgICAgMERBQSAgIE1PVkUgVDUsIFQyCkJGRDAyRjVDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMkY1RSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMkY2MCAgICAgIDBDMDAgICBOT1AKMzQ5OTogICAgICAgICAgICAgICAgCQkJKCBweFRDQi0+dXhNdXRleGVzSGVsZCApLS07DQpCRkQwMkY2MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRjY2ICAwMDQ0RkM0MiAgIExXIFYwLCA2OChWMCkKQkZEMDJGNkEgICAgICA2REFFICAgQURESVUgVjEsIFYwLCAtMQpCRkQwMkY2QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRjcwICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkKMzUwMDogICAgICAgICAgICAgICAgDQozNTAxOiAgICAgICAgICAgICAgICAJCQkvKiBIYXMgdGhlIGhvbGRlciBvZiB0aGUgbXV0ZXggaW5oZXJpdGVkIHRoZSBwcmlvcml0eSBvZiBhbm90aGVyDQozNTAyOiAgICAgICAgICAgICAgICAJCQl0YXNrPyAqLw0KMzUwMzogICAgICAgICAgICAgICAgCQkJaWYoIHB4VENCLT51eFByaW9yaXR5ICE9IHB4VENCLT51eEJhc2VQcmlvcml0eSApDQpCRkQwMkY3NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRjc4ICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDJGN0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkY3RSAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDAyRjgyICAwMDVBOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDMwM0EKQkZEMDJGODQgIDBDMDAwMDVBICAgU0xMIFYwLCBLMCwgMQpCRkQwMkY4NiAgICAgIDBDMDAgICBOT1AKMzUwNDogICAgICAgICAgICAgICAgCQkJew0KMzUwNTogICAgICAgICAgICAgICAgCQkJCS8qIE9ubHkgZGlzaW5oZXJpdCBpZiBubyBvdGhlciBtdXRleGVzIGFyZSBoZWxkLiAqLw0KMzUwNjogICAgICAgICAgICAgICAgCQkJCWlmKCBweFRDQi0+dXhNdXRleGVzSGVsZCA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMkY4OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRjhDICAwMDQ0RkM0MiAgIExXIFYwLCA2OChWMCkKQkZEMDJGOTAgIDAwNTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDMwM0EKMzUwNzogICAgICAgICAgICAgICAgCQkJCXsNCjM1MDg6ICAgICAgICAgICAgICAgIAkJCQkJLyogQSB0YXNrIGNhbiBvbmx5IGhhdmUgYW4gaW5oZXJpdGVkIHByaW9yaXR5IGlmIGl0IGhvbGRzDQozNTA5OiAgICAgICAgICAgICAgICAJCQkJCXRoZSBtdXRleC4gIElmIHRoZSBtdXRleCBpcyBoZWxkIGJ5IGEgdGFzayB0aGVuIGl0IGNhbm5vdCBiZQ0KMzUxMDogICAgICAgICAgICAgICAgCQkJCQlnaXZlbiBmcm9tIGFuIGludGVycnVwdCwgYW5kIGlmIGEgbXV0ZXggaXMgZ2l2ZW4gYnkgdGhlDQozNTExOiAgICAgICAgICAgICAgICAJCQkJCWhvbGRpbmcJdGFzayB0aGVuIGl0IG11c3QgYmUgdGhlIHJ1bm5pbmcgc3RhdGUgdGFzay4gIFJlbW92ZQ0KMzUxMjogICAgICAgICAgICAgICAgCQkJCQl0aGUJaG9sZGluZyB0YXNrIGZyb20gdGhlIHJlYWR5CWxpc3QuICovDQozNTEzOiAgICAgICAgICAgICAgICAJCQkJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMkY5NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRjk4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMkY5QSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMkY5QyAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMkY5RSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAyRkEwICAgICAgMEMwMCAgIE5PUApCRkQwMkZBMiAgMDAxQTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkZEQQozNTE0OiAgICAgICAgICAgICAgICAJCQkJCXsNCjM1MTU6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tSRVNFVF9SRUFEWV9QUklPUklUWSggcHhUQ0ItPnV4UHJpb3JpdHkgKTsNCkJGRDAyRkE2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDJGQUEgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMkZBQyAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDAyRkFFICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDIKQkZEMDJGQjAgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxCkJGRDAyRkIyICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDAyRkI0ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDJGQjYgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjAKQkZEMDJGQkEgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAyRkJDICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMkZCRSAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkZEQQpCRkQwMkZDMiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRkM2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDJGQzggICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDJGQ0EgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxCkJGRDAyRkNDICA0NDFBMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NDM0CkJGRDAyRkNFICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMApCRkQwMkZEMCAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMkZENCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDJGRDYgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKMzUxNjogICAgICAgICAgICAgICAgCQkJCQl9DQozNTE3OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjM1MTg6ICAgICAgICAgICAgICAgIAkJCQkJew0KMzUxOTogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzUyMDogICAgICAgICAgICAgICAgCQkJCQl9DQozNTIxOiAgICAgICAgICAgICAgICANCjM1MjI6ICAgICAgICAgICAgICAgIAkJCQkJLyogRGlzaW5oZXJpdCB0aGUgcHJpb3JpdHkgYmVmb3JlIGFkZGluZyB0aGUgdGFzayBpbnRvIHRoZQ0KMzUyMzogICAgICAgICAgICAgICAgCQkJCQluZXcJcmVhZHkgbGlzdC4gKi8NCjM1MjQ6ICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VUQVNLX1BSSU9SSVRZX0RJU0lOSEVSSVQoIHB4VENCLCBweFRDQi0+dXhCYXNlUHJpb3JpdHkgKTsNCjM1MjU6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0ItPnV4UHJpb3JpdHkgPSBweFRDQi0+dXhCYXNlUHJpb3JpdHk7DQpCRkQwMkZEQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyRkRFICAwMDQwRkM2MiAgIExXIFYxLCA2NChWMCkKQkZEMDJGRTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkZFNiAgICAgIEU5QUIgICBTVyBWMSwgNDQoVjApCjM1MjY6ICAgICAgICAgICAgICAgIA0KMzUyNzogICAgICAgICAgICAgICAgCQkJCQkvKiBSZXNldCB0aGUgZXZlbnQgbGlzdCBpdGVtIHZhbHVlLiAgSXQgY2Fubm90IGJlIGluIHVzZSBmb3INCjM1Mjg6ICAgICAgICAgICAgICAgIAkJCQkJYW55IG90aGVyIHB1cnBvc2UgaWYgdGhpcyB0YXNrIGlzIHJ1bm5pbmcsIGFuZCBpdCBtdXN0IGJlDQozNTI5OiAgICAgICAgICAgICAgICAJCQkJCXJ1bm5pbmcgdG8gZ2l2ZSBiYWNrIHRoZSBtdXRleC4gKi8NCjM1MzA6ICAgICAgICAgICAgICAgIAkJCQkJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApLCAoIFRpY2tUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUyAtICggVGlja1R5cGVfdCApIHB4VENCLT51eFByaW9yaXR5ICk7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cy4gKi8NCkJGRDAyRkU4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDJGRUMgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMkZFRSAgICAgIEVEODUgICBMSSBWMSwgNQpCRkQwMkZGMCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjAKQkZEMDJGRjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkZGNiAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApCjM1MzE6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDJGRjggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMkZGQyAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAyRkZFICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAzMDAwICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQpCRkQwMzAwMiAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQpCRkQwMzAwNCAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMzAwOCAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQpCRkQwMzAwQSAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQpCRkQwMzAwRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAzMDEyICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDMwMTQgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMzAxNiAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDAzMDE4ICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQpCRkQwMzAxQSAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMzAxQyAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAzMDFFICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwCkJGRDAzMDIyICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwMzAyNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAzMDI4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMzAyQSAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMzAyQyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMzAyRSAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAzMDMwICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwMzAzMiAgICAgIDBDMDAgICBOT1AKMzUzMjogICAgICAgICAgICAgICAgDQozNTMzOiAgICAgICAgICAgICAgICAJCQkJCS8qIFJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgYSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZC4NCjM1MzQ6ICAgICAgICAgICAgICAgIAkJCQkJVGhpcyBpcyBvbmx5IGFjdHVhbGx5IHJlcXVpcmVkIGluIHRoZSBjb3JuZXIgY2FzZSB3aGVyZWJ5DQozNTM1OiAgICAgICAgICAgICAgICAJCQkJCW11bHRpcGxlIG11dGV4ZXMgd2VyZSBoZWxkIGFuZCB0aGUgbXV0ZXhlcyB3ZXJlIGdpdmVuIGJhY2sNCjM1MzY6ICAgICAgICAgICAgICAgIAkJCQkJaW4gYW4gb3JkZXIgZGlmZmVyZW50IHRvIHRoYXQgaW4gd2hpY2ggdGhleSB3ZXJlIHRha2VuLg0KMzUzNzogICAgICAgICAgICAgICAgCQkJCQlJZiBhIGNvbnRleHQgc3dpdGNoIGRpZCBub3Qgb2NjdXIgd2hlbiB0aGUgZmlyc3QgbXV0ZXggd2FzDQozNTM4OiAgICAgICAgICAgICAgICAJCQkJCXJldHVybmVkLCBldmVuIGlmIGEgdGFzayB3YXMgd2FpdGluZyBvbiBpdCwgdGhlbiBhIGNvbnRleHQNCjM1Mzk6ICAgICAgICAgICAgICAgIAkJCQkJc3dpdGNoIHNob3VsZCBvY2N1ciB3aGVuIHRoZSBsYXN0IG11dGV4IGlzIHJldHVybmVkIHdoZXRoZXINCjM1NDA6ICAgICAgICAgICAgICAgIAkJCQkJYSB0YXNrIGlzIHdhaXRpbmcgb24gaXQgb3Igbm90LiAqLw0KMzU0MTogICAgICAgICAgICAgICAgCQkJCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDMwMzQgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDMwMzYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozNTQyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzU0MzogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjM1NDQ6ICAgICAgICAgICAgICAgIAkJCQl7DQozNTQ1OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM1NDY6ICAgICAgICAgICAgICAgIAkJCQl9DQozNTQ3OiAgICAgICAgICAgICAgICAJCQl9DQozNTQ4OiAgICAgICAgICAgICAgICAJCQllbHNlDQozNTQ5OiAgICAgICAgICAgICAgICAJCQl7DQozNTUwOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzU1MTogICAgICAgICAgICAgICAgCQkJfQ0KMzU1MjogICAgICAgICAgICAgICAgCQl9DQozNTUzOiAgICAgICAgICAgICAgICAJCWVsc2UNCjM1NTQ6ICAgICAgICAgICAgICAgIAkJew0KMzU1NTogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzU1NjogICAgICAgICAgICAgICAgCQl9DQozNTU3OiAgICAgICAgICAgICAgICANCjM1NTg6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwMzAzQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjM1NTk6ICAgICAgICAgICAgICAgIAl9DQpCRkQwMzAzRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwMzA0MCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDAzMDQyICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDMwNDQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwMzA0NiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDAzMDQ4ICAgICAgMEMwMCAgIE5PUAozNTYwOiAgICAgICAgICAgICAgICANCjM1NjE6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfTVVURVhFUyAqLw0KMzU2MjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNTYzOiAgICAgICAgICAgICAgICANCjM1NjQ6ICAgICAgICAgICAgICAgICNpZiAoIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiA9PSAxICkNCjM1NjU6ICAgICAgICAgICAgICAgIA0KMzU2NjogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICkNCjM1Njc6ICAgICAgICAgICAgICAgIAl7DQpCRkQwNjc3MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNjc3MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA2Nzc0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDY3NzYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzU2ODogICAgICAgICAgICAgICAgCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQpCRkQwNjc3OCAgNEUzNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cwpCRkQwNjc3QSAgICAgIDRFMzYgICBBRERJVSBTMSwgUzEsIC01CkJGRDA2NzdDICAgICAgMEMwMCAgIE5PUApCRkQwNjc3RSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA2NzgyICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDY3ODYgIDAwMDE0MUEyICAgTFVJIFYwLCAweDEKQkZEMDY3OEEgIEZDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTEwMjQKQkZEMDY3OEMgIDQ0OTNGQzAwICAgTFcgWkVSTywgMTc1NTUoWkVSTykKQkZEMDY3OEUgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA2NzkwICA1MDQwMDA0MiAgIFNSTCBWMCwgVjAsIDEwCkJGRDA2NzkyICBCMDQyNTA0MCAgIE9SSSBWMCwgWkVSTywgLTIwNDE0CkJGRDA2Nzk0ICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMwpCRkQwNjc5OCAgMDAxMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjdCRQpCRkQwNjc5QyAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA2N0EwICBGRkZFNDFBMiAgIExVSSBWMCwgMHhGRkZFCkJGRDA2N0EyICA1MDQyRkZGRSAgIExXIFJBLCAyMDU0NihTOCkKQkZEMDY3QTQgIDAzRkY1MDQyICAgT1JJIFYwLCBWMCwgMTAyMwpCRkQwNjdBOCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDY3QUEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwNjdBRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA2N0IyICAwQzAwNTA0MiAgIE9SSSBWMCwgVjAsIDMwNzIKQkZEMDY3QjQgICAgICAwQzAwICAgTk9QCkJGRDA2N0I2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA2N0I4ICA0RTQ2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMKQkZEMDY3QkEgICAgICA0RTQ2ICAgQURESVUgUzIsIFMyLCAzCkJGRDA2N0JDICAgICAgMEMwMCAgIE5PUAozNTY5OiAgICAgICAgICAgICAgICANCjM1NzA6ICAgICAgICAgICAgICAgIAkJaWYoIHhTY2hlZHVsZXJSdW5uaW5nICE9IHBkRkFMU0UgKQ0KQkZEMDY3QkUgIDgwNDRGQzVDICAgTFcgVjAsIC0zMjcwMChHUCkKQkZEMDY3QzIgIDAwMTk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY3RjgKMzU3MTogICAgICAgICAgICAgICAgCQl7DQozNTcyOiAgICAgICAgICAgICAgICAJCQkoIHB4Q3VycmVudFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgKSsrOw0KQkZEMDY3QzYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDY3Q0EgICAgICA2OUFGICAgTFcgVjEsIDYwKFYwKQpCRkQwNjdDQyAgICAgIDZEQjAgICBBRERJVSBWMSwgVjEsIDEKQkZEMDY3Q0UgICAgICBFOUFGICAgU1cgVjEsIDYwKFYwKQozNTczOiAgICAgICAgICAgICAgICANCjM1NzQ6ICAgICAgICAgICAgICAgIAkJCS8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbA0KMzU3NTogICAgICAgICAgICAgICAgCQkJZnVuY3Rpb24gc28JYXNzZXJ0KCkgaWYgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0DQozNTc2OiAgICAgICAgICAgICAgICAJCQljb250ZXh0LiAgT25seSBBUEkgZnVuY3Rpb25zIHRoYXQgZW5kIGluICJGcm9tSVNSIiBjYW4gYmUgdXNlZCBpbiBhbg0KMzU3NzogICAgICAgICAgICAgICAgCQkJaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0bw0KMzU3ODogICAgICAgICAgICAgICAgCQkJcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZSBjYWxscyBpZiB0aGUgYXNzZXJ0IGZ1bmN0aW9uIGFsc28gdXNlcyBhDQozNTc5OiAgICAgICAgICAgICAgICAJCQljcml0aWNhbCBzZWN0aW9uLiAqLw0KMzU4MDogICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgPT0gMSApDQpCRkQwNjdEMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwNjdENCAgICAgIDY5QUYgICBMVyBWMSwgNjAoVjApCkJGRDA2N0Q2ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA2N0Q4ICAwMDBFQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDY3RjgKQkZEMDY3REEgIDBDMDAwMDBFICAgU0xMIFpFUk8sIFQ2LCAxCkJGRDA2N0RDICAgICAgMEMwMCAgIE5PUAozNTgxOiAgICAgICAgICAgICAgICAJCQl7DQozNTgyOiAgICAgICAgICAgICAgICAJCQkJcG9ydEFTU0VSVF9JRl9JTl9JU1IoKTsNCkJGRDA2N0RFICA4MDE0RkM1QyAgIExXIFYwLCAtMzI3NDgoR1ApCkJGRDA2N0UyICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2N0Y4CkJGRDA2N0U2ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA2N0U4ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDY3RUEgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDY3RUMgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDA2N0VFICAwREZFMzBBMCAgIEFERElVIEExLCBaRVJPLCAzNTgyCkJGRDA2N0YwICAgICAgMERGRSAgIE1PVkUgVDcsIFM4CkJGRDA2N0YyICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNjdGNCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNjdGNiAgICAgIDBDMDAgICBOT1AKMzU4MzogICAgICAgICAgICAgICAgCQkJfQ0KMzU4NDogICAgICAgICAgICAgICAgDQozNTg1OiAgICAgICAgICAgICAgICAJCX0NCjM1ODY6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzU4NzogICAgICAgICAgICAgICAgCQl7DQozNTg4OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNTg5OiAgICAgICAgICAgICAgICAJCX0NCjM1OTA6ICAgICAgICAgICAgICAgIAl9DQpCRkQwNjdGOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNjdGQSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA2N0ZDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDY3RkUgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNjgwMCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2ODAyICAgICAgMEMwMCAgIE5PUAozNTkxOiAgICAgICAgICAgICAgICANCjM1OTI6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKi8NCjM1OTM6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzU5NDogICAgICAgICAgICAgICAgDQozNTk1OiAgICAgICAgICAgICAgICAjaWYgKCBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgPT0gMSApDQozNTk2OiAgICAgICAgICAgICAgICANCjM1OTc6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICkNCjM1OTg6ICAgICAgICAgICAgICAgIAl7DQpCRkQwODE1NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODE1NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4MTU4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDgxNUEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzU5OTogICAgICAgICAgICAgICAgCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQpCRkQwODE1QyAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQpCRkQwODE2MCAgMDAyMjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODFBOAozNjAwOiAgICAgICAgICAgICAgICAJCXsNCjM2MDE6ICAgICAgICAgICAgICAgIAkJCWlmKCBweEN1cnJlbnRUQ0ItPnV4Q3JpdGljYWxOZXN0aW5nID4gMFUgKQ0KQkZEMDgxNjQgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDgxNjggICAgICA2OTJGICAgTFcgVjAsIDYwKFYwKQpCRkQwODE2QSAgMDAxRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODFBOAozNjAyOiAgICAgICAgICAgICAgICAJCQl7DQozNjAzOiAgICAgICAgICAgICAgICAJCQkJKCBweEN1cnJlbnRUQ0ItPnV4Q3JpdGljYWxOZXN0aW5nICktLTsNCkJGRDA4MTZFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA4MTcyICAgICAgNjlBRiAgIExXIFYxLCA2MChWMCkKQkZEMDgxNzQgICAgICA2REJFICAgQURESVUgVjEsIFYxLCAtMQpCRkQwODE3NiAgICAgIEU5QUYgICBTVyBWMSwgNjAoVjApCjM2MDQ6ICAgICAgICAgICAgICAgIA0KMzYwNTogICAgICAgICAgICAgICAgCQkJCWlmKCBweEN1cnJlbnRUQ0ItPnV4Q3JpdGljYWxOZXN0aW5nID09IDBVICkNCkJGRDA4MTc4ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA4MTdDICAgICAgNjkyRiAgIExXIFYwLCA2MChWMCkKQkZEMDgxN0UgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDgxQTgKMzYwNjogICAgICAgICAgICAgICAgCQkJCXsNCjM2MDc6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQpCRkQwODE4MiAgNEUzNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cwpCRkQwODE4NCAgICAgIDRFMzYgICBBRERJVSBTMSwgUzEsIC01CkJGRDA4MTg2ICAgICAgMEMwMCAgIE5PUApCRkQwODE4OCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA4MThDICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDgxOTAgIEZGRkU0MUEyICAgTFVJIFYwLCAweEZGRkUKQkZEMDgxOTIgIDUwNDJGRkZFICAgTFcgUkEsIDIwNTQ2KFM4KQpCRkQwODE5NCAgMDNGRjUwNDIgICBPUkkgVjAsIFYwLCAxMDIzCkJGRDA4MTk4ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwODE5QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA4MTlFICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkKQkZEMDgxQTIgIDRFNDY3N0U4ICAgSkFMUyB2UG9ydFNldENQMFN0YXR1cwpCRkQwODFBNCAgICAgIDRFNDYgICBBRERJVSBTMiwgUzIsIDMKQkZEMDgxQTYgICAgICAwQzAwICAgTk9QCjM2MDg6ICAgICAgICAgICAgICAgIAkJCQl9DQozNjA5OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMzYxMDogICAgICAgICAgICAgICAgCQkJCXsNCjM2MTE6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzYxMjogICAgICAgICAgICAgICAgCQkJCX0NCjM2MTM6ICAgICAgICAgICAgICAgIAkJCX0NCjM2MTQ6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjM2MTU6ICAgICAgICAgICAgICAgIAkJCXsNCjM2MTY6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNjE3OiAgICAgICAgICAgICAgICAJCQl9DQozNjE4OiAgICAgICAgICAgICAgICAJCX0NCjM2MTk6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzYyMDogICAgICAgICAgICAgICAgCQl7DQozNjIxOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNjIyOiAgICAgICAgICAgICAgICAJCX0NCjM2MjM6ICAgICAgICAgICAgICAgIAl9DQpCRkQwODFBOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODFBQSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4MUFDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDgxQUUgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwODFCMCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4MUIyICAgICAgMEMwMCAgIE5PUAozNjI0OiAgICAgICAgICAgICAgICANCjM2MjU6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKi8NCjM2MjY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzYyNzogICAgICAgICAgICAgICAgDQozNjI4OiAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgJiYgKCBjb25maWdVU0VfU1RBVFNfRk9STUFUVElOR19GVU5DVElPTlMgPiAwICkgKQ0KMzYyOTogICAgICAgICAgICAgICAgDQozNjMwOiAgICAgICAgICAgICAgICAJc3RhdGljIGNoYXIgKnBydldyaXRlTmFtZVRvQnVmZmVyKCBjaGFyICpwY0J1ZmZlciwgY29uc3QgY2hhciAqcGNUYXNrTmFtZSApDQozNjMxOiAgICAgICAgICAgICAgICAJew0KMzYzMjogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeDsNCjM2MzM6ICAgICAgICAgICAgICAgIA0KMzYzNDogICAgICAgICAgICAgICAgCQkvKiBTdGFydCBieSBjb3B5aW5nIHRoZSBlbnRpcmUgc3RyaW5nLiAqLw0KMzYzNTogICAgICAgICAgICAgICAgCQlzdHJjcHkoIHBjQnVmZmVyLCBwY1Rhc2tOYW1lICk7DQozNjM2OiAgICAgICAgICAgICAgICANCjM2Mzc6ICAgICAgICAgICAgICAgIAkJLyogUGFkIHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHNwYWNlcyB0byBlbnN1cmUgY29sdW1ucyBsaW5lIHVwIHdoZW4NCjM2Mzg6ICAgICAgICAgICAgICAgIAkJcHJpbnRlZCBvdXQuICovDQozNjM5OiAgICAgICAgICAgICAgICAJCWZvciggeCA9IHN0cmxlbiggcGNCdWZmZXIgKTsgeCA8ICggY29uZmlnTUFYX1RBU0tfTkFNRV9MRU4gLSAxICk7IHgrKyApDQozNjQwOiAgICAgICAgICAgICAgICAJCXsNCjM2NDE6ICAgICAgICAgICAgICAgIAkJCXBjQnVmZmVyWyB4IF0gPSAnICc7DQozNjQyOiAgICAgICAgICAgICAgICAJCX0NCjM2NDM6ICAgICAgICAgICAgICAgIA0KMzY0NDogICAgICAgICAgICAgICAgCQkvKiBUZXJtaW5hdGUuICovDQozNjQ1OiAgICAgICAgICAgICAgICAJCXBjQnVmZmVyWyB4IF0gPSAweDAwOw0KMzY0NjogICAgICAgICAgICAgICAgDQozNjQ3OiAgICAgICAgICAgICAgICAJCS8qIFJldHVybiB0aGUgbmV3IGVuZCBvZiBzdHJpbmcuICovDQozNjQ4OiAgICAgICAgICAgICAgICAJCXJldHVybiAmKCBwY0J1ZmZlclsgeCBdICk7DQozNjQ5OiAgICAgICAgICAgICAgICAJfQ0KMzY1MDogICAgICAgICAgICAgICAgDQozNjUxOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApICYmICggY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID4gMCApICovDQozNjUyOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM2NTM6ICAgICAgICAgICAgICAgIA0KMzY1NDogICAgICAgICAgICAgICAgI2lmICggKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApICYmICggY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID4gMCApICkNCjM2NTU6ICAgICAgICAgICAgICAgIA0KMzY1NjogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tMaXN0KCBjaGFyICogcGNXcml0ZUJ1ZmZlciApDQozNjU3OiAgICAgICAgICAgICAgICAJew0KMzY1ODogICAgICAgICAgICAgICAgCVRhc2tTdGF0dXNfdCAqcHhUYXNrU3RhdHVzQXJyYXk7DQozNjU5OiAgICAgICAgICAgICAgICAJdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhBcnJheVNpemUsIHg7DQozNjYwOiAgICAgICAgICAgICAgICAJY2hhciBjU3RhdHVzOw0KMzY2MTogICAgICAgICAgICAgICAgDQozNjYyOiAgICAgICAgICAgICAgICAJCS8qDQozNjYzOiAgICAgICAgICAgICAgICAJCSAqIFBMRUFTRSBOT1RFOg0KMzY2NDogICAgICAgICAgICAgICAgCQkgKg0KMzY2NTogICAgICAgICAgICAgICAgCQkgKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZSBvbmx5LCBhbmQgaXMgdXNlZCBieSBtYW55DQozNjY2OiAgICAgICAgICAgICAgICAJCSAqIG9mIHRoZSBkZW1vIGFwcGxpY2F0aW9ucy4gIERvIG5vdCBjb25zaWRlciBpdCB0byBiZSBwYXJ0IG9mIHRoZQ0KMzY2NzogICAgICAgICAgICAgICAgCQkgKiBzY2hlZHVsZXIuDQozNjY4OiAgICAgICAgICAgICAgICAJCSAqDQozNjY5OiAgICAgICAgICAgICAgICAJCSAqIHZUYXNrTGlzdCgpIGNhbGxzIHV4VGFza0dldFN5c3RlbVN0YXRlKCksIHRoZW4gZm9ybWF0cyBwYXJ0IG9mIHRoZQ0KMzY3MDogICAgICAgICAgICAgICAgCQkgKiB1eFRhc2tHZXRTeXN0ZW1TdGF0ZSgpIG91dHB1dCBpbnRvIGEgaHVtYW4gcmVhZGFibGUgdGFibGUgdGhhdA0KMzY3MTogICAgICAgICAgICAgICAgCQkgKiBkaXNwbGF5cyB0YXNrIG5hbWVzLCBzdGF0ZXMgYW5kIHN0YWNrIHVzYWdlLg0KMzY3MjogICAgICAgICAgICAgICAgCQkgKg0KMzY3MzogICAgICAgICAgICAgICAgCQkgKiB2VGFza0xpc3QoKSBoYXMgYSBkZXBlbmRlbmN5IG9uIHRoZSBzcHJpbnRmKCkgQyBsaWJyYXJ5IGZ1bmN0aW9uIHRoYXQNCjM2NzQ6ICAgICAgICAgICAgICAgIAkJICogbWlnaHQgYmxvYXQgdGhlIGNvZGUgc2l6ZSwgdXNlIGEgbG90IG9mIHN0YWNrLCBhbmQgcHJvdmlkZSBkaWZmZXJlbnQNCjM2NzU6ICAgICAgICAgICAgICAgIAkJICogcmVzdWx0cyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAgQW4gYWx0ZXJuYXRpdmUsIHRpbnksIHRoaXJkIHBhcnR5LA0KMzY3NjogICAgICAgICAgICAgICAgCQkgKiBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGF0aW9uIG9mIHNwcmludGYoKSBpcyBwcm92aWRlZCBpbg0KMzY3NzogICAgICAgICAgICAgICAgCQkgKiBtYW55IG9mIHRoZSBGcmVlUlRPUy9EZW1vIHN1Yi1kaXJlY3RvcmllcyBpbiBhIGZpbGUgY2FsbGVkDQozNjc4OiAgICAgICAgICAgICAgICAJCSAqIHByaW50Zi1zdGRhcmcuYyAobm90ZSBwcmludGYtc3RkYXJnLmMgZG9lcyBub3QgcHJvdmlkZSBhIGZ1bGwNCjM2Nzk6ICAgICAgICAgICAgICAgIAkJICogc25wcmludGYoKSBpbXBsZW1lbnRhdGlvbiEpLg0KMzY4MDogICAgICAgICAgICAgICAgCQkgKg0KMzY4MTogICAgICAgICAgICAgICAgCQkgKiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHByb2R1Y3Rpb24gc3lzdGVtcyBjYWxsIHV4VGFza0dldFN5c3RlbVN0YXRlKCkNCjM2ODI6ICAgICAgICAgICAgICAgIAkJICogZGlyZWN0bHkgdG8gZ2V0IGFjY2VzcyB0byByYXcgc3RhdHMgZGF0YSwgcmF0aGVyIHRoYW4gaW5kaXJlY3RseQ0KMzY4MzogICAgICAgICAgICAgICAgCQkgKiB0aHJvdWdoIGEgY2FsbCB0byB2VGFza0xpc3QoKS4NCjM2ODQ6ICAgICAgICAgICAgICAgIAkJICovDQozNjg1OiAgICAgICAgICAgICAgICANCjM2ODY6ICAgICAgICAgICAgICAgIA0KMzY4NzogICAgICAgICAgICAgICAgCQkvKiBNYWtlIHN1cmUgdGhlIHdyaXRlIGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGEgc3RyaW5nLiAqLw0KMzY4ODogICAgICAgICAgICAgICAgCQkqcGNXcml0ZUJ1ZmZlciA9IDB4MDA7DQozNjg5OiAgICAgICAgICAgICAgICANCjM2OTA6ICAgICAgICAgICAgICAgIAkJLyogVGFrZSBhIHNuYXBzaG90IG9mIHRoZSBudW1iZXIgb2YgdGFza3MgaW4gY2FzZSBpdCBjaGFuZ2VzIHdoaWxlIHRoaXMNCjM2OTE6ICAgICAgICAgICAgICAgIAkJZnVuY3Rpb24gaXMgZXhlY3V0aW5nLiAqLw0KMzY5MjogICAgICAgICAgICAgICAgCQl1eEFycmF5U2l6ZSA9IHV4Q3VycmVudE51bWJlck9mVGFza3M7DQozNjkzOiAgICAgICAgICAgICAgICANCjM2OTQ6ICAgICAgICAgICAgICAgIAkJLyogQWxsb2NhdGUgYW4gYXJyYXkgaW5kZXggZm9yIGVhY2ggdGFzay4gKi8NCjM2OTU6ICAgICAgICAgICAgICAgIAkJcHhUYXNrU3RhdHVzQXJyYXkgPSBwdlBvcnRNYWxsb2MoIHV4Q3VycmVudE51bWJlck9mVGFza3MgKiBzaXplb2YoIFRhc2tTdGF0dXNfdCApICk7DQozNjk2OiAgICAgICAgICAgICAgICANCjM2OTc6ICAgICAgICAgICAgICAgIAkJaWYoIHB4VGFza1N0YXR1c0FycmF5ICE9IE5VTEwgKQ0KMzY5ODogICAgICAgICAgICAgICAgCQl7DQozNjk5OiAgICAgICAgICAgICAgICAJCQkvKiBHZW5lcmF0ZSB0aGUgKGJpbmFyeSkgZGF0YS4gKi8NCjM3MDA6ICAgICAgICAgICAgICAgIAkJCXV4QXJyYXlTaXplID0gdXhUYXNrR2V0U3lzdGVtU3RhdGUoIHB4VGFza1N0YXR1c0FycmF5LCB1eEFycmF5U2l6ZSwgTlVMTCApOw0KMzcwMTogICAgICAgICAgICAgICAgDQozNzAyOiAgICAgICAgICAgICAgICAJCQkvKiBDcmVhdGUgYSBodW1hbiByZWFkYWJsZSB0YWJsZSBmcm9tIHRoZSBiaW5hcnkgZGF0YS4gKi8NCjM3MDM6ICAgICAgICAgICAgICAgIAkJCWZvciggeCA9IDA7IHggPCB1eEFycmF5U2l6ZTsgeCsrICkNCjM3MDQ6ICAgICAgICAgICAgICAgIAkJCXsNCjM3MDU6ICAgICAgICAgICAgICAgIAkJCQlzd2l0Y2goIHB4VGFza1N0YXR1c0FycmF5WyB4IF0uZUN1cnJlbnRTdGF0ZSApDQozNzA2OiAgICAgICAgICAgICAgICAJCQkJew0KMzcwNzogICAgICAgICAgICAgICAgCQkJCQljYXNlIGVSZWFkeToJCWNTdGF0dXMgPSB0c2tSRUFEWV9DSEFSOw0KMzcwODogICAgICAgICAgICAgICAgCQkJCQkJCQkJCWJyZWFrOw0KMzcwOTogICAgICAgICAgICAgICAgDQozNzEwOiAgICAgICAgICAgICAgICAJCQkJCWNhc2UgZUJsb2NrZWQ6CQljU3RhdHVzID0gdHNrQkxPQ0tFRF9DSEFSOw0KMzcxMTogICAgICAgICAgICAgICAgCQkJCQkJCQkJCWJyZWFrOw0KMzcxMjogICAgICAgICAgICAgICAgDQozNzEzOiAgICAgICAgICAgICAgICAJCQkJCWNhc2UgZVN1c3BlbmRlZDoJY1N0YXR1cyA9IHRza1NVU1BFTkRFRF9DSEFSOw0KMzcxNDogICAgICAgICAgICAgICAgCQkJCQkJCQkJCWJyZWFrOw0KMzcxNTogICAgICAgICAgICAgICAgDQozNzE2OiAgICAgICAgICAgICAgICAJCQkJCWNhc2UgZURlbGV0ZWQ6CQljU3RhdHVzID0gdHNrREVMRVRFRF9DSEFSOw0KMzcxNzogICAgICAgICAgICAgICAgCQkJCQkJCQkJCWJyZWFrOw0KMzcxODogICAgICAgICAgICAgICAgDQozNzE5OiAgICAgICAgICAgICAgICAJCQkJCWRlZmF1bHQ6CQkJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGl0IGlzIGluY2x1ZGVkDQozNzIwOiAgICAgICAgICAgICAgICAJCQkJCQkJCQkJdG8gcHJldmVudCBzdGF0aWMgY2hlY2tpbmcgZXJyb3JzLiAqLw0KMzcyMTogICAgICAgICAgICAgICAgCQkJCQkJCQkJCWNTdGF0dXMgPSAweDAwOw0KMzcyMjogICAgICAgICAgICAgICAgCQkJCQkJCQkJCWJyZWFrOw0KMzcyMzogICAgICAgICAgICAgICAgCQkJCX0NCjM3MjQ6ICAgICAgICAgICAgICAgIA0KMzcyNTogICAgICAgICAgICAgICAgCQkJCS8qIFdyaXRlIHRoZSB0YXNrIG5hbWUgdG8gdGhlIHN0cmluZywgcGFkZGluZyB3aXRoIHNwYWNlcyBzbyBpdA0KMzcyNjogICAgICAgICAgICAgICAgCQkJCWNhbiBiZSBwcmludGVkIGluIHRhYnVsYXIgZm9ybSBtb3JlIGVhc2lseS4gKi8NCjM3Mjc6ICAgICAgICAgICAgICAgIAkJCQlwY1dyaXRlQnVmZmVyID0gcHJ2V3JpdGVOYW1lVG9CdWZmZXIoIHBjV3JpdGVCdWZmZXIsIHB4VGFza1N0YXR1c0FycmF5WyB4IF0ucGNUYXNrTmFtZSApOw0KMzcyODogICAgICAgICAgICAgICAgDQozNzI5OiAgICAgICAgICAgICAgICAJCQkJLyogV3JpdGUgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZy4gKi8NCjM3MzA6ICAgICAgICAgICAgICAgIAkJCQlzcHJpbnRmKCBwY1dyaXRlQnVmZmVyLCAiXHQlY1x0JXVcdCV1XHQldVxyXG4iLCBjU3RhdHVzLCAoIHVuc2lnbmVkIGludCApIHB4VGFza1N0YXR1c0FycmF5WyB4IF0udXhDdXJyZW50UHJpb3JpdHksICggdW5zaWduZWQgaW50ICkgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS51c1N0YWNrSGlnaFdhdGVyTWFyaywgKCB1bnNpZ25lZCBpbnQgKSBweFRhc2tTdGF0dXNBcnJheVsgeCBdLnhUYXNrTnVtYmVyICk7DQozNzMxOiAgICAgICAgICAgICAgICAJCQkJcGNXcml0ZUJ1ZmZlciArPSBzdHJsZW4oIHBjV3JpdGVCdWZmZXIgKTsNCjM3MzI6ICAgICAgICAgICAgICAgIAkJCX0NCjM3MzM6ICAgICAgICAgICAgICAgIA0KMzczNDogICAgICAgICAgICAgICAgCQkJLyogRnJlZSB0aGUgYXJyYXkgYWdhaW4uICovDQozNzM1OiAgICAgICAgICAgICAgICAJCQl2UG9ydEZyZWUoIHB4VGFza1N0YXR1c0FycmF5ICk7DQozNzM2OiAgICAgICAgICAgICAgICAJCX0NCjM3Mzc6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzczODogICAgICAgICAgICAgICAgCQl7DQozNzM5OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNzQwOiAgICAgICAgICAgICAgICAJCX0NCjM3NDE6ICAgICAgICAgICAgICAgIAl9DQozNzQyOiAgICAgICAgICAgICAgICANCjM3NDM6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiAoICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9TVEFUU19GT1JNQVRUSU5HX0ZVTkNUSU9OUyA+IDAgKSApICovDQozNzQ0OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzc0NTogICAgICAgICAgICAgICAgDQozNzQ2OiAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9TVEFUU19GT1JNQVRUSU5HX0ZVTkNUSU9OUyA+IDAgKSApDQozNzQ3OiAgICAgICAgICAgICAgICANCjM3NDg6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrR2V0UnVuVGltZVN0YXRzKCBjaGFyICpwY1dyaXRlQnVmZmVyICkNCjM3NDk6ICAgICAgICAgICAgICAgIAl7DQozNzUwOiAgICAgICAgICAgICAgICAJVGFza1N0YXR1c190ICpweFRhc2tTdGF0dXNBcnJheTsNCjM3NTE6ICAgICAgICAgICAgICAgIAl2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eEFycmF5U2l6ZSwgeDsNCjM3NTI6ICAgICAgICAgICAgICAgIAl1aW50MzJfdCB1bFRvdGFsVGltZSwgdWxTdGF0c0FzUGVyY2VudGFnZTsNCjM3NTM6ICAgICAgICAgICAgICAgIA0KMzc1NDogICAgICAgICAgICAgICAgCQkjaWYoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSAhPSAxICkNCjM3NTU6ICAgICAgICAgICAgICAgIAkJew0KMzc1NjogICAgICAgICAgICAgICAgCQkJI2Vycm9yIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSBtdXN0IGFsc28gYmUgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaCB0byB1c2UgdlRhc2tHZXRSdW5UaW1lU3RhdHMoKS4NCjM3NTc6ICAgICAgICAgICAgICAgIAkJfQ0KMzc1ODogICAgICAgICAgICAgICAgCQkjZW5kaWYNCjM3NTk6ICAgICAgICAgICAgICAgIA0KMzc2MDogICAgICAgICAgICAgICAgCQkvKg0KMzc2MTogICAgICAgICAgICAgICAgCQkgKiBQTEVBU0UgTk9URToNCjM3NjI6ICAgICAgICAgICAgICAgIAkJICoNCjM3NjM6ICAgICAgICAgICAgICAgIAkJICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY29udmVuaWVuY2Ugb25seSwgYW5kIGlzIHVzZWQgYnkgbWFueQ0KMzc2NDogICAgICAgICAgICAgICAgCQkgKiBvZiB0aGUgZGVtbyBhcHBsaWNhdGlvbnMuICBEbyBub3QgY29uc2lkZXIgaXQgdG8gYmUgcGFydCBvZiB0aGUNCjM3NjU6ICAgICAgICAgICAgICAgIAkJICogc2NoZWR1bGVyLg0KMzc2NjogICAgICAgICAgICAgICAgCQkgKg0KMzc2NzogICAgICAgICAgICAgICAgCQkgKiB2VGFza0dldFJ1blRpbWVTdGF0cygpIGNhbGxzIHV4VGFza0dldFN5c3RlbVN0YXRlKCksIHRoZW4gZm9ybWF0cyBwYXJ0DQozNzY4OiAgICAgICAgICAgICAgICAJCSAqIG9mIHRoZSB1eFRhc2tHZXRTeXN0ZW1TdGF0ZSgpIG91dHB1dCBpbnRvIGEgaHVtYW4gcmVhZGFibGUgdGFibGUgdGhhdA0KMzc2OTogICAgICAgICAgICAgICAgCQkgKiBkaXNwbGF5cyB0aGUgYW1vdW50IG9mIHRpbWUgZWFjaCB0YXNrIGhhcyBzcGVudCBpbiB0aGUgUnVubmluZyBzdGF0ZQ0KMzc3MDogICAgICAgICAgICAgICAgCQkgKiBpbiBib3RoIGFic29sdXRlIGFuZCBwZXJjZW50YWdlIHRlcm1zLg0KMzc3MTogICAgICAgICAgICAgICAgCQkgKg0KMzc3MjogICAgICAgICAgICAgICAgCQkgKiB2VGFza0dldFJ1blRpbWVTdGF0cygpIGhhcyBhIGRlcGVuZGVuY3kgb24gdGhlIHNwcmludGYoKSBDIGxpYnJhcnkNCjM3NzM6ICAgICAgICAgICAgICAgIAkJICogZnVuY3Rpb24gdGhhdCBtaWdodCBibG9hdCB0aGUgY29kZSBzaXplLCB1c2UgYSBsb3Qgb2Ygc3RhY2ssIGFuZA0KMzc3NDogICAgICAgICAgICAgICAgCQkgKiBwcm92aWRlIGRpZmZlcmVudCByZXN1bHRzIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBBbiBhbHRlcm5hdGl2ZSwNCjM3NzU6ICAgICAgICAgICAgICAgIAkJICogdGlueSwgdGhpcmQgcGFydHksIGFuZCBsaW1pdGVkIGZ1bmN0aW9uYWxpdHkgaW1wbGVtZW50YXRpb24gb2YNCjM3NzY6ICAgICAgICAgICAgICAgIAkJICogc3ByaW50ZigpIGlzIHByb3ZpZGVkIGluIG1hbnkgb2YgdGhlIEZyZWVSVE9TL0RlbW8gc3ViLWRpcmVjdG9yaWVzIGluDQozNzc3OiAgICAgICAgICAgICAgICAJCSAqIGEgZmlsZSBjYWxsZWQgcHJpbnRmLXN0ZGFyZy5jIChub3RlIHByaW50Zi1zdGRhcmcuYyBkb2VzIG5vdCBwcm92aWRlDQozNzc4OiAgICAgICAgICAgICAgICAJCSAqIGEgZnVsbCBzbnByaW50ZigpIGltcGxlbWVudGF0aW9uISkuDQozNzc5OiAgICAgICAgICAgICAgICAJCSAqDQozNzgwOiAgICAgICAgICAgICAgICAJCSAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgcHJvZHVjdGlvbiBzeXN0ZW1zIGNhbGwgdXhUYXNrR2V0U3lzdGVtU3RhdGUoKQ0KMzc4MTogICAgICAgICAgICAgICAgCQkgKiBkaXJlY3RseSB0byBnZXQgYWNjZXNzIHRvIHJhdyBzdGF0cyBkYXRhLCByYXRoZXIgdGhhbiBpbmRpcmVjdGx5DQozNzgyOiAgICAgICAgICAgICAgICAJCSAqIHRocm91Z2ggYSBjYWxsIHRvIHZUYXNrR2V0UnVuVGltZVN0YXRzKCkuDQozNzgzOiAgICAgICAgICAgICAgICAJCSAqLw0KMzc4NDogICAgICAgICAgICAgICAgDQozNzg1OiAgICAgICAgICAgICAgICAJCS8qIE1ha2Ugc3VyZSB0aGUgd3JpdGUgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gYSBzdHJpbmcuICovDQozNzg2OiAgICAgICAgICAgICAgICAJCSpwY1dyaXRlQnVmZmVyID0gMHgwMDsNCjM3ODc6ICAgICAgICAgICAgICAgIA0KMzc4ODogICAgICAgICAgICAgICAgCQkvKiBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIG51bWJlciBvZiB0YXNrcyBpbiBjYXNlIGl0IGNoYW5nZXMgd2hpbGUgdGhpcw0KMzc4OTogICAgICAgICAgICAgICAgCQlmdW5jdGlvbiBpcyBleGVjdXRpbmcuICovDQozNzkwOiAgICAgICAgICAgICAgICAJCXV4QXJyYXlTaXplID0gdXhDdXJyZW50TnVtYmVyT2ZUYXNrczsNCjM3OTE6ICAgICAgICAgICAgICAgIA0KMzc5MjogICAgICAgICAgICAgICAgCQkvKiBBbGxvY2F0ZSBhbiBhcnJheSBpbmRleCBmb3IgZWFjaCB0YXNrLiAqLw0KMzc5MzogICAgICAgICAgICAgICAgCQlweFRhc2tTdGF0dXNBcnJheSA9IHB2UG9ydE1hbGxvYyggdXhDdXJyZW50TnVtYmVyT2ZUYXNrcyAqIHNpemVvZiggVGFza1N0YXR1c190ICkgKTsNCjM3OTQ6ICAgICAgICAgICAgICAgIA0KMzc5NTogICAgICAgICAgICAgICAgCQlpZiggcHhUYXNrU3RhdHVzQXJyYXkgIT0gTlVMTCApDQozNzk2OiAgICAgICAgICAgICAgICAJCXsNCjM3OTc6ICAgICAgICAgICAgICAgIAkJCS8qIEdlbmVyYXRlIHRoZSAoYmluYXJ5KSBkYXRhLiAqLw0KMzc5ODogICAgICAgICAgICAgICAgCQkJdXhBcnJheVNpemUgPSB1eFRhc2tHZXRTeXN0ZW1TdGF0ZSggcHhUYXNrU3RhdHVzQXJyYXksIHV4QXJyYXlTaXplLCAmdWxUb3RhbFRpbWUgKTsNCjM3OTk6ICAgICAgICAgICAgICAgIA0KMzgwMDogICAgICAgICAgICAgICAgCQkJLyogRm9yIHBlcmNlbnRhZ2UgY2FsY3VsYXRpb25zLiAqLw0KMzgwMTogICAgICAgICAgICAgICAgCQkJdWxUb3RhbFRpbWUgLz0gMTAwVUw7DQozODAyOiAgICAgICAgICAgICAgICANCjM4MDM6ICAgICAgICAgICAgICAgIAkJCS8qIEF2b2lkIGRpdmlkZSBieSB6ZXJvIGVycm9ycy4gKi8NCjM4MDQ6ICAgICAgICAgICAgICAgIAkJCWlmKCB1bFRvdGFsVGltZSA+IDAgKQ0KMzgwNTogICAgICAgICAgICAgICAgCQkJew0KMzgwNjogICAgICAgICAgICAgICAgCQkJCS8qIENyZWF0ZSBhIGh1bWFuIHJlYWRhYmxlIHRhYmxlIGZyb20gdGhlIGJpbmFyeSBkYXRhLiAqLw0KMzgwNzogICAgICAgICAgICAgICAgCQkJCWZvciggeCA9IDA7IHggPCB1eEFycmF5U2l6ZTsgeCsrICkNCjM4MDg6ICAgICAgICAgICAgICAgIAkJCQl7DQozODA5OiAgICAgICAgICAgICAgICAJCQkJCS8qIFdoYXQgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgcnVuIHRpbWUgaGFzIHRoZSB0YXNrIHVzZWQ/DQozODEwOiAgICAgICAgICAgICAgICAJCQkJCVRoaXMgd2lsbCBhbHdheXMgYmUgcm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuDQozODExOiAgICAgICAgICAgICAgICAJCQkJCXVsVG90YWxSdW5UaW1lRGl2MTAwIGhhcyBhbHJlYWR5IGJlZW4gZGl2aWRlZCBieSAxMDAuICovDQozODEyOiAgICAgICAgICAgICAgICAJCQkJCXVsU3RhdHNBc1BlcmNlbnRhZ2UgPSBweFRhc2tTdGF0dXNBcnJheVsgeCBdLnVsUnVuVGltZUNvdW50ZXIgLyB1bFRvdGFsVGltZTsNCjM4MTM6ICAgICAgICAgICAgICAgIA0KMzgxNDogICAgICAgICAgICAgICAgCQkJCQkvKiBXcml0ZSB0aGUgdGFzayBuYW1lIHRvIHRoZSBzdHJpbmcsIHBhZGRpbmcgd2l0aA0KMzgxNTogICAgICAgICAgICAgICAgCQkJCQlzcGFjZXMgc28gaXQgY2FuIGJlIHByaW50ZWQgaW4gdGFidWxhciBmb3JtIG1vcmUNCjM4MTY6ICAgICAgICAgICAgICAgIAkJCQkJZWFzaWx5LiAqLw0KMzgxNzogICAgICAgICAgICAgICAgCQkJCQlwY1dyaXRlQnVmZmVyID0gcHJ2V3JpdGVOYW1lVG9CdWZmZXIoIHBjV3JpdGVCdWZmZXIsIHB4VGFza1N0YXR1c0FycmF5WyB4IF0ucGNUYXNrTmFtZSApOw0KMzgxODogICAgICAgICAgICAgICAgDQozODE5OiAgICAgICAgICAgICAgICAJCQkJCWlmKCB1bFN0YXRzQXNQZXJjZW50YWdlID4gMFVMICkNCjM4MjA6ICAgICAgICAgICAgICAgIAkJCQkJew0KMzgyMTogICAgICAgICAgICAgICAgCQkJCQkJI2lmZGVmIHBvcnRMVV9QUklOVEZfU1BFQ0lGSUVSX1JFUVVJUkVEDQozODIyOiAgICAgICAgICAgICAgICAJCQkJCQl7DQozODIzOiAgICAgICAgICAgICAgICAJCQkJCQkJc3ByaW50ZiggcGNXcml0ZUJ1ZmZlciwgIlx0JWx1XHRcdCVsdSUlXHJcbiIsIHB4VGFza1N0YXR1c0FycmF5WyB4IF0udWxSdW5UaW1lQ291bnRlciwgdWxTdGF0c0FzUGVyY2VudGFnZSApOw0KMzgyNDogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMzgyNTogICAgICAgICAgICAgICAgCQkJCQkJI2Vsc2UNCjM4MjY6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjM4Mjc6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBzaXplb2YoIGludCApID09IHNpemVvZiggbG9uZyApIHNvIGEgc21hbGxlcg0KMzgyODogICAgICAgICAgICAgICAgCQkJCQkJCXByaW50ZigpIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovDQozODI5OiAgICAgICAgICAgICAgICAJCQkJCQkJc3ByaW50ZiggcGNXcml0ZUJ1ZmZlciwgIlx0JXVcdFx0JXUlJVxyXG4iLCAoIHVuc2lnbmVkIGludCApIHB4VGFza1N0YXR1c0FycmF5WyB4IF0udWxSdW5UaW1lQ291bnRlciwgKCB1bnNpZ25lZCBpbnQgKSB1bFN0YXRzQXNQZXJjZW50YWdlICk7DQozODMwOiAgICAgICAgICAgICAgICAJCQkJCQl9DQozODMxOiAgICAgICAgICAgICAgICAJCQkJCQkjZW5kaWYNCjM4MzI6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzgzMzogICAgICAgICAgICAgICAgCQkJCQllbHNlDQozODM0OiAgICAgICAgICAgICAgICAJCQkJCXsNCjM4MzU6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIElmIHRoZSBwZXJjZW50YWdlIGlzIHplcm8gaGVyZSB0aGVuIHRoZSB0YXNrIGhhcw0KMzgzNjogICAgICAgICAgICAgICAgCQkJCQkJY29uc3VtZWQgbGVzcyB0aGFuIDElIG9mIHRoZSB0b3RhbCBydW4gdGltZS4gKi8NCjM4Mzc6ICAgICAgICAgICAgICAgIAkJCQkJCSNpZmRlZiBwb3J0TFVfUFJJTlRGX1NQRUNJRklFUl9SRVFVSVJFRA0KMzgzODogICAgICAgICAgICAgICAgCQkJCQkJew0KMzgzOTogICAgICAgICAgICAgICAgCQkJCQkJCXNwcmludGYoIHBjV3JpdGVCdWZmZXIsICJcdCVsdVx0XHQ8MSUlXHJcbiIsIHB4VGFza1N0YXR1c0FycmF5WyB4IF0udWxSdW5UaW1lQ291bnRlciApOw0KMzg0MDogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMzg0MTogICAgICAgICAgICAgICAgCQkJCQkJI2Vsc2UNCjM4NDI6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjM4NDM6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBzaXplb2YoIGludCApID09IHNpemVvZiggbG9uZyApIHNvIGEgc21hbGxlcg0KMzg0NDogICAgICAgICAgICAgICAgCQkJCQkJCXByaW50ZigpIGxpYnJhcnkgY2FuIGJlIHVzZWQuICovDQozODQ1OiAgICAgICAgICAgICAgICAJCQkJCQkJc3ByaW50ZiggcGNXcml0ZUJ1ZmZlciwgIlx0JXVcdFx0PDElJVxyXG4iLCAoIHVuc2lnbmVkIGludCApIHB4VGFza1N0YXR1c0FycmF5WyB4IF0udWxSdW5UaW1lQ291bnRlciApOw0KMzg0NjogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMzg0NzogICAgICAgICAgICAgICAgCQkJCQkJI2VuZGlmDQozODQ4OiAgICAgICAgICAgICAgICAJCQkJCX0NCjM4NDk6ICAgICAgICAgICAgICAgIA0KMzg1MDogICAgICAgICAgICAgICAgCQkJCQlwY1dyaXRlQnVmZmVyICs9IHN0cmxlbiggcGNXcml0ZUJ1ZmZlciApOw0KMzg1MTogICAgICAgICAgICAgICAgCQkJCX0NCjM4NTI6ICAgICAgICAgICAgICAgIAkJCX0NCjM4NTM6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjM4NTQ6ICAgICAgICAgICAgICAgIAkJCXsNCjM4NTU6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozODU2OiAgICAgICAgICAgICAgICAJCQl9DQozODU3OiAgICAgICAgICAgICAgICANCjM4NTg6ICAgICAgICAgICAgICAgIAkJCS8qIEZyZWUgdGhlIGFycmF5IGFnYWluLiAqLw0KMzg1OTogICAgICAgICAgICAgICAgCQkJdlBvcnRGcmVlKCBweFRhc2tTdGF0dXNBcnJheSApOw0KMzg2MDogICAgICAgICAgICAgICAgCQl9DQozODYxOiAgICAgICAgICAgICAgICAJCWVsc2UNCjM4NjI6ICAgICAgICAgICAgICAgIAkJew0KMzg2MzogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzg2NDogICAgICAgICAgICAgICAgCQl9DQozODY1OiAgICAgICAgICAgICAgICAJfQ0KMzg2NjogICAgICAgICAgICAgICAgDQozODY3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogKCAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9TVEFUU19GT1JNQVRUSU5HX0ZVTkNUSU9OUyA+IDAgKSApICovDQozODY4OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM4Njk6ICAgICAgICAgICAgICAgIA0KMzg3MDogICAgICAgICAgICAgICAgVGlja1R5cGVfdCB1eFRhc2tSZXNldEV2ZW50SXRlbVZhbHVlKCB2b2lkICkNCjM4NzE6ICAgICAgICAgICAgICAgIHsNCkJGRDA5OTBDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5OTBFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDk5MTAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzg3MjogICAgICAgICAgICAgICAgVGlja1R5cGVfdCB1eFJldHVybjsNCjM4NzM6ICAgICAgICAgICAgICAgIA0KMzg3NDogICAgICAgICAgICAgICAgCXV4UmV0dXJuID0gbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4Q3VycmVudFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDk5MTIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDk5MTYgICAgICA2OTI2ICAgTFcgVjAsIDI0KFYwKQpCRkQwOTkxOCAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkKMzg3NTogICAgICAgICAgICAgICAgDQozODc2OiAgICAgICAgICAgICAgICAJLyogUmVzZXQgdGhlIGV2ZW50IGxpc3QgaXRlbSB0byBpdHMgbm9ybWFsIHZhbHVlIC0gc28gaXQgY2FuIGJlIHVzZWQgd2l0aA0KMzg3NzogICAgICAgICAgICAgICAgCXF1ZXVlcyBhbmQgc2VtYXBob3Jlcy4gKi8NCjM4Nzg6ICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhDdXJyZW50VENCLT54RXZlbnRMaXN0SXRlbSApLCAoICggVGlja1R5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBUaWNrVHlwZV90ICkgcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkgKTsgLypsaW50ICFlOTYxIE1JU1JBIGV4Y2VwdGlvbiBhcyB0aGUgY2FzdHMgYXJlIG9ubHkgcmVkdW5kYW50IGZvciBzb21lIHBvcnRzLiAqLw0KQkZEMDk5MUMgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDk5MjAgIDgwMzBGQzdDICAgTFcgVjEsIC0zMjcyMChHUCkKQkZEMDk5MjQgICAgICA2OUJCICAgTFcgVjEsIDQ0KFYxKQpCRkQwOTkyNiAgICAgIEVFMDUgICBMSSBBMCwgNQpCRkQwOTkyOCAgICAgIDA1QjkgICBTVUJVIFYxLCBBMCwgVjEKQkZEMDk5MkEgICAgICBFOUE2ICAgU1cgVjEsIDI0KFYwKQozODc5OiAgICAgICAgICAgICAgICANCjM4ODA6ICAgICAgICAgICAgICAgIAlyZXR1cm4gdXhSZXR1cm47DQpCRkQwOTkyQyAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKMzg4MTogICAgICAgICAgICAgICAgfQ0KQkZEMDk5MzAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk5MzIgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwOTkzNCAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDA5OTM2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDk5MzggICAgICAwQzAwICAgTk9QCjM4ODI6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzg4MzogICAgICAgICAgICAgICAgDQozODg0OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjM4ODU6ICAgICAgICAgICAgICAgIA0KMzg4NjogICAgICAgICAgICAgICAgCXZvaWQgKnB2VGFza0luY3JlbWVudE11dGV4SGVsZENvdW50KCB2b2lkICkNCjM4ODc6ICAgICAgICAgICAgICAgIAl7DQpCRkQwOTlDMCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5OUMyICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOTlDNCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAozODg4OiAgICAgICAgICAgICAgICAJCS8qIElmIHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpIGlzIGNhbGxlZCBiZWZvcmUgYW55IHRhc2tzIGhhdmUgYmVlbiBjcmVhdGVkDQozODg5OiAgICAgICAgICAgICAgICAJCXRoZW4gcHhDdXJyZW50VENCIHdpbGwgYmUgTlVMTC4gKi8NCjM4OTA6ICAgICAgICAgICAgICAgIAkJaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCkJGRDA5OUM2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA5OUNBICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5OURDCjM4OTE6ICAgICAgICAgICAgICAgIAkJew0KMzg5MjogICAgICAgICAgICAgICAgCQkJKCBweEN1cnJlbnRUQ0ItPnV4TXV0ZXhlc0hlbGQgKSsrOw0KQkZEMDk5Q0UgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDk5RDIgIDAwNDRGQzYyICAgTFcgVjEsIDY4KFYwKQpCRkQwOTlENiAgICAgIDZEQjAgICBBRERJVSBWMSwgVjEsIDEKQkZEMDk5RDggIDAwNDRGODYyICAgU1cgVjEsIDY4KFYwKQozODkzOiAgICAgICAgICAgICAgICAJCX0NCjM4OTQ6ICAgICAgICAgICAgICAgIA0KMzg5NTogICAgICAgICAgICAgICAgCQlyZXR1cm4gcHhDdXJyZW50VENCOw0KQkZEMDk5REMgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKMzg5NjogICAgICAgICAgICAgICAgCX0NCkJGRDA5OUUwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5OUUyICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOTlFNCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDk5RTYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTlFOCAgICAgIDBDMDAgICBOT1AKMzg5NzogICAgICAgICAgICAgICAgDQozODk4OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX01VVEVYRVMgKi8NCjM4OTk6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzkwMDogICAgICAgICAgICAgICAgDQozOTAxOiAgICAgICAgICAgICAgICAjaWYoIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgPT0gMSApDQozOTAyOiAgICAgICAgICAgICAgICANCjM5MDM6ICAgICAgICAgICAgICAgIAl1aW50MzJfdCB1bFRhc2tOb3RpZnlUYWtlKCBCYXNlVHlwZV90IHhDbGVhckNvdW50T25FeGl0LCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCApDQozOTA0OiAgICAgICAgICAgICAgICAJew0KQkZEMDM5QUMgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDM5QUUgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwMzlCMCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDAzOUIyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAzOUI0ICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKQkZEMDM5QjggIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQozOTA1OiAgICAgICAgICAgICAgICAJVGlja1R5cGVfdCB4VGltZVRvV2FrZTsNCjM5MDY6ICAgICAgICAgICAgICAgIAl1aW50MzJfdCB1bFJldHVybjsNCjM5MDc6ICAgICAgICAgICAgICAgIA0KMzkwODogICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzOUJDICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAzOUJFICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMzlDMCAgICAgIDBDMDAgICBOT1AKMzkwOTogICAgICAgICAgICAgICAgCQl7DQozOTEwOiAgICAgICAgICAgICAgICAJCQkvKiBPbmx5IGJsb2NrIGlmIHRoZSBub3RpZmljYXRpb24gY291bnQgaXMgbm90IGFscmVhZHkgbm9uLXplcm8uICovDQozOTExOiAgICAgICAgICAgICAgICAJCQlpZiggcHhDdXJyZW50VENCLT51bE5vdGlmaWVkVmFsdWUgPT0gMFVMICkNCkJGRDAzOUMyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAzOUM2ICAwMDQ4RkM0MiAgIExXIFYwLCA3MihWMCkKQkZEMDM5Q0EgIDAwNEQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNBNjgKMzkxMjogICAgICAgICAgICAgICAgCQkJew0KMzkxMzogICAgICAgICAgICAgICAgCQkJCS8qIE1hcmsgdGhpcyB0YXNrIGFzIHdhaXRpbmcgZm9yIGEgbm90aWZpY2F0aW9uLiAqLw0KMzkxNDogICAgICAgICAgICAgICAgCQkJCXB4Q3VycmVudFRDQi0+ZU5vdGlmeVN0YXRlID0gZVdhaXRpbmdOb3RpZmljYXRpb247DQpCRkQwMzlDRSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMzlEMiAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMzlENCAgMDA0Q0Y4NjIgICBTVyBWMSwgNzYoVjApCjM5MTU6ICAgICAgICAgICAgICAgIA0KMzkxNjogICAgICAgICAgICAgICAgCQkJCWlmKCB4VGlja3NUb1dhaXQgPiAoIFRpY2tUeXBlX3QgKSAwICkNCkJGRDAzOUQ4ICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkKQkZEMDM5REMgIDAwNDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNBNjgKMzkxNzogICAgICAgICAgICAgICAgCQkJCXsNCjM5MTg6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHRhc2sgaXMgZ29pbmcgdG8gYmxvY2suICBGaXJzdCBpdCBtdXN0IGJlIHJlbW92ZWQNCjM5MTk6ICAgICAgICAgICAgICAgIAkJCQkJZnJvbSB0aGUgcmVhZHkgbGlzdC4gKi8NCjM5MjA6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMzlFMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMzlFNCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDM5RTYgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDM5RTggIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUKQkZEMDM5RUEgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQpCRkQwMzlFQyAgICAgIDBDMDAgICBOT1AKQkZEMDM5RUUgIDAwMEM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNBMEEKMzkyMTogICAgICAgICAgICAgICAgCQkJCQl7DQozOTIyOiAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgY3VycmVudCB0YXNrIG11c3QgYmUgaW4gYSByZWFkeSBsaXN0LCBzbyB0aGVyZSBpcw0KMzkyMzogICAgICAgICAgICAgICAgCQkJCQkJbm8gbmVlZCB0byBjaGVjaywgYW5kIHRoZSBwb3J0IHJlc2V0IG1hY3JvIGNhbiBiZSBjYWxsZWQNCjM5MjQ6ICAgICAgICAgICAgICAgIAkJCQkJCWRpcmVjdGx5LiAqLw0KMzkyNTogICAgICAgICAgICAgICAgCQkJCQkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDM5RjIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDM5RjYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMzlGOCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMzlGQSAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjEKQkZEMDM5RkMgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQKQkZEMDM5RkUgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwCkJGRDAzQTAwICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApCkJGRDAzQTA0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwM0EwNiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQozOTI2OiAgICAgICAgICAgICAgICAJCQkJCX0NCjM5Mjc6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMzkyODogICAgICAgICAgICAgICAgCQkJCQl7DQozOTI5OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozOTMwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjM5MzE6ICAgICAgICAgICAgICAgIA0KMzkzMjogICAgICAgICAgICAgICAgCQkJCQkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjM5MzM6ICAgICAgICAgICAgICAgIAkJCQkJew0KMzkzNDogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHhUaWNrc1RvV2FpdCA9PSBwb3J0TUFYX0RFTEFZICkNCkJGRDAzQTBBICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkKQkZEMDNBMEUgICAgICBFRDdGICAgTEkgVjAsIC0xCkJGRDAzQTEwICAwMDBFQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDNBMzAKQkZEMDNBMTIgIDBDMDAwMDBFICAgU0xMIFpFUk8sIFQ2LCAxCkJGRDAzQTE0ICAgICAgMEMwMCAgIE5PUAozOTM1OiAgICAgICAgICAgICAgICAJCQkJCQl7DQozOTM2OiAgICAgICAgICAgICAgICAJCQkJCQkJLyogQWRkIHRoZSB0YXNrIHRvIHRoZSBzdXNwZW5kZWQgdGFzayBsaXN0IGluc3RlYWQNCjM5Mzc6ICAgICAgICAgICAgICAgIAkJCQkJCQlvZiBhIGRlbGF5ZWQgdGFzayBsaXN0IHRvIGVuc3VyZSB0aGUgdGFzayBpcyBub3QNCjM5Mzg6ICAgICAgICAgICAgICAgIAkJCQkJCQl3b2tlbiBieSBhIHRpbWluZyBldmVudC4gIEl0IHdpbGwgYmxvY2sNCjM5Mzk6ICAgICAgICAgICAgICAgIAkJCQkJCQlpbmRlZmluaXRlbHkuICovDQozOTQwOiAgICAgICAgICAgICAgICAJCQkJCQkJdkxpc3RJbnNlcnRFbmQoICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwM0ExNiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwM0ExQSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDNBMUMgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDNBMUUgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQpCRkQwM0EyMCAgODBFNDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU0MApCRkQwM0EyNCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwM0EyNiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAzQTI4ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwM0EyQSAgICAgIDBDMDAgICBOT1AKQkZEMDNBMkMgICAgICBDQzBEICAgQiAweEJGRDAzQTQ4CkJGRDAzQTJFICAgICAgMEMwMCAgIE5PUAozOTQxOiAgICAgICAgICAgICAgICAJCQkJCQl9DQozOTQyOiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQozOTQzOiAgICAgICAgICAgICAgICAJCQkJCQl7DQozOTQ0OiAgICAgICAgICAgICAgICAJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB0YXNrIHNob3VsZCBiZQ0KMzk0NTogICAgICAgICAgICAgICAgCQkJCQkJCXdva2VuIGlmIG5vIG5vdGlmaWNhdGlvbiBldmVudHMgb2NjdXIuICBUaGlzIG1heQ0KMzk0NjogICAgICAgICAgICAgICAgCQkJCQkJCW92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLCB0aGUgc2NoZWR1bGVyIHdpbGwNCjM5NDc6ICAgICAgICAgICAgICAgIAkJCQkJCQloYW5kbGUgaXQuICovDQozOTQ4OiAgICAgICAgICAgICAgICAJCQkJCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KQkZEMDNBMzAgIDgwM0NGQzdDICAgTFcgVjEsIC0zMjcwOChHUCkKQkZEMDNBMzQgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwM0EzOCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDNBM0EgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozOTQ5OiAgICAgICAgICAgICAgICAJCQkJCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KQkZEMDNBM0UgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQpCRkQwM0E0MiAgMzczNDc3RTggICBKQUxTIHBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdApCRkQwM0E0NCAgMEMwMDM3MzQgICBMSFUgVDksIDMwNzIoUzQpCkJGRDAzQTQ2ICAgICAgMEMwMCAgIE5PUAozOTUwOiAgICAgICAgICAgICAgICAJCQkJCQl9DQozOTUxOiAgICAgICAgICAgICAgICAJCQkJCX0NCjM5NTI6ICAgICAgICAgICAgICAgIAkJCQkJI2Vsc2UgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjM5NTM6ICAgICAgICAgICAgICAgIAkJCQkJew0KMzk1NDogICAgICAgICAgICAgICAgCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUNCjM5NTU6ICAgICAgICAgICAgICAgIAkJCQkJCQl3b2tlbiBpZiB0aGUgZXZlbnQgZG9lcyBub3Qgb2NjdXIuICBUaGlzIG1heQ0KMzk1NjogICAgICAgICAgICAgICAgCQkJCQkJCW92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLCB0aGUgc2NoZWR1bGVyIHdpbGwNCjM5NTc6ICAgICAgICAgICAgICAgIAkJCQkJCQloYW5kbGUgaXQuICovDQozOTU4OiAgICAgICAgICAgICAgICAJCQkJCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KMzk1OTogICAgICAgICAgICAgICAgCQkJCQkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCjM5NjA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzk2MTogICAgICAgICAgICAgICAgCQkJCQkjZW5kaWYgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjM5NjI6ICAgICAgICAgICAgICAgIA0KMzk2MzogICAgICAgICAgICAgICAgCQkJCQkvKiBBbGwgcG9ydHMgYXJlIHdyaXR0ZW4gdG8gYWxsb3cgYSB5aWVsZCBpbiBhIGNyaXRpY2FsDQozOTY0OiAgICAgICAgICAgICAgICAJCQkJCXNlY3Rpb24gKHNvbWUgd2lsbCB5aWVsZCBpbW1lZGlhdGVseSwgb3RoZXJzIHdhaXQgdW50aWwgdGhlDQozOTY1OiAgICAgICAgICAgICAgICAJCQkJCWNyaXRpY2FsIHNlY3Rpb24gZXhpdHMpIC0gYnV0IGl0IGlzIG5vdCBzb21ldGhpbmcgdGhhdA0KMzk2NjogICAgICAgICAgICAgICAgCQkJCQlhcHBsaWNhdGlvbiBjb2RlIHNob3VsZCBldmVyIGRvLiAqLw0KMzk2NzogICAgICAgICAgICAgICAgCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KQkZEMDNBNDggIDRFNTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQpCRkQwM0E0QSAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01CkJGRDAzQTRDICAgICAgMEMwMCAgIE5PUApCRkQwM0E0RSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCkJGRDAzQTUyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDNBNTYgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDAzQTVBICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKQkZEMDNBNUUgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQpCRkQwM0E2MiAgNEU2Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UKQkZEMDNBNjQgICAgICA0RTY2ICAgQURESVUgUzMsIFMzLCAzCkJGRDAzQTY2ICAgICAgMEMwMCAgIE5PUAozOTY4OiAgICAgICAgICAgICAgICAJCQkJfQ0KMzk2OTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjM5NzA6ICAgICAgICAgICAgICAgIAkJCQl7DQozOTcxOiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM5NzI6ICAgICAgICAgICAgICAgIAkJCQl9DQozOTczOiAgICAgICAgICAgICAgICAJCQl9DQozOTc0OiAgICAgICAgICAgICAgICAJCQllbHNlDQozOTc1OiAgICAgICAgICAgICAgICAJCQl7DQozOTc2OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzk3NzogICAgICAgICAgICAgICAgCQkJfQ0KMzk3ODogICAgICAgICAgICAgICAgCQl9DQozOTc5OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwM0E2OCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAzQTZBICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1MjZFCkJGRDAzQTZDICAgICAgMEMwMCAgIE5PUAozOTgwOiAgICAgICAgICAgICAgICANCjM5ODE6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwM0E2RSAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwM0E3MCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDNBNzIgICAgICAwQzAwICAgTk9QCjM5ODI6ICAgICAgICAgICAgICAgIAkJew0KMzk4MzogICAgICAgICAgICAgICAgCQkJdWxSZXR1cm4gPSBweEN1cnJlbnRUQ0ItPnVsTm90aWZpZWRWYWx1ZTsNCkJGRDAzQTc0ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAzQTc4ICAwMDQ4RkM0MiAgIExXIFYwLCA3MihWMCkKQkZEMDNBN0MgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQozOTg0OiAgICAgICAgICAgICAgICANCjM5ODU6ICAgICAgICAgICAgICAgIAkJCWlmKCB1bFJldHVybiAhPSAwVUwgKQ0KQkZEMDNBODAgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0E4NCAgMDAxMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0FBQQozOTg2OiAgICAgICAgICAgICAgICAJCQl7DQozOTg3OiAgICAgICAgICAgICAgICAJCQkJaWYoIHhDbGVhckNvdW50T25FeGl0ICE9IHBkRkFMU0UgKQ0KQkZEMDNBODggIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwM0E4QyAgMDAwNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0E5QwozOTg4OiAgICAgICAgICAgICAgICAJCQkJew0KMzk4OTogICAgICAgICAgICAgICAgCQkJCQlweEN1cnJlbnRUQ0ItPnVsTm90aWZpZWRWYWx1ZSA9IDBVTDsNCkJGRDAzQTkwICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAzQTk0ICAwMDQ4RjgwMiAgIFNXIFpFUk8sIDcyKFYwKQpCRkQwM0E5OCAgICAgIENDMDggICBCIDB4QkZEMDNBQUEKQkZEMDNBOUEgICAgICAwQzAwICAgTk9QCjM5OTA6ICAgICAgICAgICAgICAgIAkJCQl9DQozOTkxOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMzk5MjogICAgICAgICAgICAgICAgCQkJCXsNCjM5OTM6ICAgICAgICAgICAgICAgIAkJCQkJKCBweEN1cnJlbnRUQ0ItPnVsTm90aWZpZWRWYWx1ZSApLS07DQpCRkQwM0E5QyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwM0FBMCAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApCkJGRDAzQUE0ICAgICAgNkRCRSAgIEFERElVIFYxLCBWMSwgLTEKQkZEMDNBQTYgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQozOTk0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMzk5NTogICAgICAgICAgICAgICAgCQkJfQ0KMzk5NjogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMzk5NzogICAgICAgICAgICAgICAgCQkJew0KMzk5ODogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM5OTk6ICAgICAgICAgICAgICAgIAkJCX0NCjQwMDA6ICAgICAgICAgICAgICAgIA0KNDAwMTogICAgICAgICAgICAgICAgCQkJcHhDdXJyZW50VENCLT5lTm90aWZ5U3RhdGUgPSBlTm90V2FpdGluZ05vdGlmaWNhdGlvbjsNCkJGRDAzQUFBICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAzQUFFICAwMDRDRjgwMiAgIFNXIFpFUk8sIDc2KFYwKQo0MDAyOiAgICAgICAgICAgICAgICAJCX0NCjQwMDM6ICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAzQUIyICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDNBQjQgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDUyQjgKQkZEMDNBQjYgICAgICAwQzAwICAgTk9QCjQwMDQ6ICAgICAgICAgICAgICAgIA0KNDAwNTogICAgICAgICAgICAgICAgCQlyZXR1cm4gdWxSZXR1cm47DQpCRkQwM0FCOCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCjQwMDY6ICAgICAgICAgICAgICAgIAl9DQpCRkQwM0FCQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwM0FCRSAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApCkJGRDAzQUMwICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkKQkZEMDNBQzIgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MApCRkQwM0FDNCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDAzQUM2ICAgICAgMEMwMCAgIE5PUAo0MDA3OiAgICAgICAgICAgICAgICANCjQwMDg6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVEFTS19OT1RJRklDQVRJT05TICovDQo0MDA5OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQwMTA6ICAgICAgICAgICAgICAgIA0KNDAxMTogICAgICAgICAgICAgICAgI2lmKCBjb25maWdVU0VfVEFTS19OT1RJRklDQVRJT05TID09IDEgKQ0KNDAxMjogICAgICAgICAgICAgICAgDQo0MDEzOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGFza05vdGlmeVdhaXQoIHVpbnQzMl90IHVsQml0c1RvQ2xlYXJPbkVudHJ5LCB1aW50MzJfdCB1bEJpdHNUb0NsZWFyT25FeGl0LCB1aW50MzJfdCAqcHVsTm90aWZpY2F0aW9uVmFsdWUsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjQwMTQ6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMkM2QyAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwMkM2RSAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDAyQzcwICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDJDNzIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDJDNzQgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQpCRkQwMkM3OCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpCkJGRDAyQzdDICAwMDMwRjhERSAgIFNXIEEyLCA0OChTOCkKQkZEMDJDODAgIDAwMzRGOEZFICAgU1cgQTMsIDUyKFM4KQo0MDE1OiAgICAgICAgICAgICAgICAJVGlja1R5cGVfdCB4VGltZVRvV2FrZTsNCjQwMTY6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQo0MDE3OiAgICAgICAgICAgICAgICANCjQwMTg6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMkM4NCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwMkM4NiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDJDODggICAgICAwQzAwICAgTk9QCjQwMTk6ICAgICAgICAgICAgICAgIAkJew0KNDAyMDogICAgICAgICAgICAgICAgCQkJLyogT25seSBibG9jayBpZiBhIG5vdGlmaWNhdGlvbiBpcyBub3QgYWxyZWFkeSBwZW5kaW5nLiAqLw0KNDAyMTogICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQi0+ZU5vdGlmeVN0YXRlICE9IGVOb3RpZmllZCApDQpCRkQwMkM4QSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQpCRkQwMkM4RSAgMDA0Q0ZDNjIgICBMVyBWMSwgNzYoVjApCkJGRDAyQzkyICAgICAgRUQwMiAgIExJIFYwLCAyCkJGRDAyQzk0ICAwMDU4OTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDJENDgKQkZEMDJDOTYgIDBDMDAwMDU4ICAgU0xMIFYwLCBUOCwgMQpCRkQwMkM5OCAgICAgIDBDMDAgICBOT1AKNDAyMjogICAgICAgICAgICAgICAgCQkJew0KNDAyMzogICAgICAgICAgICAgICAgCQkJCS8qIENsZWFyIGJpdHMgaW4gdGhlIHRhc2sncyBub3RpZmljYXRpb24gdmFsdWUgYXMgYml0cyBtYXkgZ2V0DQo0MDI0OiAgICAgICAgICAgICAgICAJCQkJc2V0CWJ5IHRoZSBub3RpZnlpbmcgdGFzayBvciBpbnRlcnJ1cHQuICBUaGlzIGNhbiBiZSB1c2VkIHRvDQo0MDI1OiAgICAgICAgICAgICAgICAJCQkJY2xlYXIgdGhlIHZhbHVlIHRvIHplcm8uICovDQo0MDI2OiAgICAgICAgICAgICAgICAJCQkJcHhDdXJyZW50VENCLT51bE5vdGlmaWVkVmFsdWUgJj0gfnVsQml0c1RvQ2xlYXJPbkVudHJ5Ow0KQkZEMDJDOUEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDJDOUUgIDAwNDhGQzgyICAgTFcgQTAsIDcyKFYwKQpCRkQwMkNBMiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpCkJGRDAyQ0E2ICAgICAgNDQxQiAgIE5PVDE2IFYxLCBWMQpCRkQwMkNBOCAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTAKQkZEMDJDQUEgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQo0MDI3OiAgICAgICAgICAgICAgICANCjQwMjg6ICAgICAgICAgICAgICAgIAkJCQkvKiBNYXJrIHRoaXMgdGFzayBhcyB3YWl0aW5nIGZvciBhIG5vdGlmaWNhdGlvbi4gKi8NCjQwMjk6ICAgICAgICAgICAgICAgIAkJCQlweEN1cnJlbnRUQ0ItPmVOb3RpZnlTdGF0ZSA9IGVXYWl0aW5nTm90aWZpY2F0aW9uOw0KQkZEMDJDQUUgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDJDQjIgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDJDQjQgIDAwNENGODYyICAgU1cgVjEsIDc2KFYwKQo0MDMwOiAgICAgICAgICAgICAgICANCjQwMzE6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFRpY2tzVG9XYWl0ID4gKCBUaWNrVHlwZV90ICkgMCApDQpCRkQwMkNCOCAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpCkJGRDAyQ0JDICAwMDQ0NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyRDQ4CjQwMzI6ICAgICAgICAgICAgICAgIAkJCQl7DQo0MDMzOiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGlzIGdvaW5nIHRvIGJsb2NrLiAgRmlyc3QgaXQgbXVzdCBiZSByZW1vdmVkDQo0MDM0OiAgICAgICAgICAgICAgICAJCQkJCWZyb20gdGhlCXJlYWR5IGxpc3QuICovDQo0MDM1OiAgICAgICAgICAgICAgICAJCQkJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDJDQzAgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDJDQzQgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDAyQ0M2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAyQ0M4ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlCkJGRDAyQ0NBICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDEKQkZEMDJDQ0MgICAgICAwQzAwICAgTk9QCkJGRDAyQ0NFICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyQ0VBCjQwMzY6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDAzNzogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIGluIGEgcmVhZHkgbGlzdCwgc28gdGhlcmUgaXMNCjQwMzg6ICAgICAgICAgICAgICAgIAkJCQkJCW5vIG5lZWQgdG8gY2hlY2ssIGFuZCB0aGUgcG9ydCByZXNldCBtYWNybyBjYW4gYmUgY2FsbGVkDQo0MDM5OiAgICAgICAgICAgICAgICAJCQkJCQlkaXJlY3RseS4gKi8NCjQwNDA6ICAgICAgICAgICAgICAgIAkJCQkJCXBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggcHhDdXJyZW50VENCLT51eFByaW9yaXR5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsNCkJGRDAyQ0QyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAyQ0Q2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDJDRDggICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDJDREEgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxCkJGRDAyQ0RDICA0NDFBMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NDM0CkJGRDAyQ0RFICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMApCRkQwMkNFMCAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMkNFNCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDJDRTYgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKNDA0MTogICAgICAgICAgICAgICAgCQkJCQl9DQo0MDQyOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjQwNDM6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDA0NDogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNDA0NTogICAgICAgICAgICAgICAgCQkJCQl9DQo0MDQ2OiAgICAgICAgICAgICAgICANCjQwNDc6ICAgICAgICAgICAgICAgIAkJCQkJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQo0MDQ4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjQwNDk6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gcG9ydE1BWF9ERUxBWSApDQpCRkQwMkNFQSAgMDAzNEZDN0UgICBMVyBWMSwgNTIoUzgpCkJGRDAyQ0VFICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwMkNGMCAgMDAwRUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyRDEwCkJGRDAyQ0YyICAwQzAwMDAwRSAgIFNMTCBaRVJPLCBUNiwgMQpCRkQwMkNGNCAgICAgIDBDMDAgICBOT1AKNDA1MDogICAgICAgICAgICAgICAgCQkJCQkJew0KNDA1MTogICAgICAgICAgICAgICAgCQkJCQkJCS8qIEFkZCB0aGUgdGFzayB0byB0aGUgc3VzcGVuZGVkIHRhc2sgbGlzdCBpbnN0ZWFkDQo0MDUyOiAgICAgICAgICAgICAgICAJCQkJCQkJb2YgYSBkZWxheWVkIHRhc2sgbGlzdCB0byBlbnN1cmUgdGhlIHRhc2sgaXMgbm90DQo0MDUzOiAgICAgICAgICAgICAgICAJCQkJCQkJd29rZW4gYnkgYSB0aW1pbmcgZXZlbnQuICBJdCB3aWxsIGJsb2NrDQo0MDU0OiAgICAgICAgICAgICAgICAJCQkJCQkJaW5kZWZpbml0ZWx5LiAqLw0KNDA1NTogICAgICAgICAgICAgICAgCQkJCQkJCXZMaXN0SW5zZXJ0RW5kKCAmeFN1c3BlbmRlZFRhc2tMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDJDRjYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDJDRkEgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDAyQ0ZDICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAyQ0ZFICAzMDgzQkZEMiAgIExEQzEgRjMwLCAxMjQxOShTMikKQkZEMDJEMDAgIDgwRTQzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NDAKQkZEMDJEMDQgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDJEMDYgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwMkQwOCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDJEMEEgICAgICAwQzAwICAgTk9QCkJGRDAyRDBDICAgICAgQ0MwRCAgIEIgMHhCRkQwMkQyOApCRkQwMkQwRSAgICAgIDBDMDAgICBOT1AKNDA1NjogICAgICAgICAgICAgICAgCQkJCQkJfQ0KNDA1NzogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KNDA1ODogICAgICAgICAgICAgICAgCQkJCQkJew0KNDA1OTogICAgICAgICAgICAgICAgCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUNCjQwNjA6ICAgICAgICAgICAgICAgIAkJCQkJCQl3b2tlbiBpZiBubyBub3RpZmljYXRpb24gZXZlbnRzIG9jY3VyLiAgVGhpcyBtYXkNCjQwNjE6ICAgICAgICAgICAgICAgIAkJCQkJCQlvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlciwgdGhlIHNjaGVkdWxlciB3aWxsDQo0MDYyOiAgICAgICAgICAgICAgICAJCQkJCQkJaGFuZGxlIGl0LiAqLw0KNDA2MzogICAgICAgICAgICAgICAgCQkJCQkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvV2FpdDsNCkJGRDAyRDEwICA4MDNDRkM3QyAgIExXIFYxLCAtMzI3MDgoR1ApCkJGRDAyRDE0ICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkKQkZEMDJEMTggICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAyRDFBICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKNDA2NDogICAgICAgICAgICAgICAgCQkJCQkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCkJGRDAyRDFFICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDJEMjIgIDM3MzQ3N0U4ICAgSkFMUyBwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QKQkZEMDJEMjQgIDBDMDAzNzM0ICAgTEhVIFQ5LCAzMDcyKFM0KQpCRkQwMkQyNiAgICAgIDBDMDAgICBOT1AKNDA2NTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KNDA2NjogICAgICAgICAgICAgICAgCQkJCQl9DQo0MDY3OiAgICAgICAgICAgICAgICAJCQkJCSNlbHNlIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQo0MDY4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjQwNjk6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlDQo0MDcwOiAgICAgICAgICAgICAgICAJCQkJCQkJd29rZW4gaWYgdGhlIGV2ZW50IGRvZXMgbm90IG9jY3VyLiAgVGhpcyBtYXkNCjQwNzE6ICAgICAgICAgICAgICAgIAkJCQkJCQlvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlciwgdGhlIHNjaGVkdWxlciB3aWxsDQo0MDcyOiAgICAgICAgICAgICAgICAJCQkJCQkJaGFuZGxlIGl0LiAqLw0KNDA3MzogICAgICAgICAgICAgICAgCQkJCQkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvV2FpdDsNCjQwNzQ6ICAgICAgICAgICAgICAgIAkJCQkJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQo0MDc1OiAgICAgICAgICAgICAgICAJCQkJCX0NCjQwNzY6ICAgICAgICAgICAgICAgIAkJCQkJI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQo0MDc3OiAgICAgICAgICAgICAgICANCjQwNzg6ICAgICAgICAgICAgICAgIAkJCQkJLyogQWxsIHBvcnRzIGFyZSB3cml0dGVuIHRvIGFsbG93IGEgeWllbGQgaW4gYSBjcml0aWNhbA0KNDA3OTogICAgICAgICAgICAgICAgCQkJCQlzZWN0aW9uIChzb21lIHdpbGwgeWllbGQgaW1tZWRpYXRlbHksIG90aGVycyB3YWl0IHVudGlsIHRoZQ0KNDA4MDogICAgICAgICAgICAgICAgCQkJCQljcml0aWNhbCBzZWN0aW9uIGV4aXRzKSAtIGJ1dCBpdCBpcyBub3Qgc29tZXRoaW5nIHRoYXQNCjQwODE6ICAgICAgICAgICAgICAgIAkJCQkJYXBwbGljYXRpb24gY29kZSBzaG91bGQgZXZlciBkby4gKi8NCjQwODI6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDAyRDI4ICA0RTU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDJEMkEgICAgICA0RTU2ICAgQURESVUgUzIsIFMyLCAtNQpCRkQwMkQyQyAgICAgIDBDMDAgICBOT1AKQkZEMDJEMkUgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQpCRkQwMkQzMiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAyRDM2ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwMkQzQSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCkJGRDAyRDNFICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkKQkZEMDJENDIgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDAyRDQ0ICAgICAgNEU2NiAgIEFERElVIFMzLCBTMywgMwpCRkQwMkQ0NiAgICAgIDBDMDAgICBOT1AKNDA4MzogICAgICAgICAgICAgICAgCQkJCX0NCjQwODQ6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQo0MDg1OiAgICAgICAgICAgICAgICAJCQkJew0KNDA4NjogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0MDg3OiAgICAgICAgICAgICAgICAJCQkJfQ0KNDA4ODogICAgICAgICAgICAgICAgCQkJfQ0KNDA4OTogICAgICAgICAgICAgICAgCQkJZWxzZQ0KNDA5MDogICAgICAgICAgICAgICAgCQkJew0KNDA5MTogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjQwOTI6ICAgICAgICAgICAgICAgIAkJCX0NCjQwOTM6ICAgICAgICAgICAgICAgIAkJfQ0KNDA5NDogICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDJENDggIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMkQ0QSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNDU0RQpCRkQwMkQ0QyAgICAgIDBDMDAgICBOT1AKNDA5NTogICAgICAgICAgICAgICAgDQo0MDk2OiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDJENEUgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDJENTAgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDAyRDUyICAgICAgMEMwMCAgIE5PUAo0MDk3OiAgICAgICAgICAgICAgICAJCXsNCjQwOTg6ICAgICAgICAgICAgICAgIAkJCWlmKCBwdWxOb3RpZmljYXRpb25WYWx1ZSAhPSBOVUxMICkNCkJGRDAyRDU0ICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDJENTggIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDJENkEKNDA5OTogICAgICAgICAgICAgICAgCQkJew0KNDEwMDogICAgICAgICAgICAgICAgCQkJCS8qIE91dHB1dCB0aGUgY3VycmVudCBub3RpZmljYXRpb24gdmFsdWUsIHdoaWNoIG1heSBvciBtYXkgbm90DQo0MTAxOiAgICAgICAgICAgICAgICAJCQkJaGF2ZSBjaGFuZ2VkLiAqLw0KNDEwMjogICAgICAgICAgICAgICAgCQkJCSpwdWxOb3RpZmljYXRpb25WYWx1ZSA9IHB4Q3VycmVudFRDQi0+dWxOb3RpZmllZFZhbHVlOw0KQkZEMDJENUMgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDJENjAgIDAwNDhGQzYyICAgTFcgVjEsIDcyKFYwKQpCRkQwMkQ2NCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAyRDY4ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0MTAzOiAgICAgICAgICAgICAgICAJCQl9DQo0MTA0OiAgICAgICAgICAgICAgICANCjQxMDU6ICAgICAgICAgICAgICAgIAkJCS8qIElmIGVOb3RpZnlWYWx1ZSBpcyBzZXQgdGhlbiBlaXRoZXIgdGhlIHRhc2sgbmV2ZXIgZW50ZXJlZCB0aGUNCjQxMDY6ICAgICAgICAgICAgICAgIAkJCWJsb2NrZWQgc3RhdGUgKGJlY2F1c2UgYSBub3RpZmljYXRpb24gd2FzIGFscmVhZHkgcGVuZGluZykgb3IgdGhlDQo0MTA3OiAgICAgICAgICAgICAgICAJCQl0YXNrIHVuYmxvY2tlZCBiZWNhdXNlIG9mIGEgbm90aWZpY2F0aW9uLiAgT3RoZXJ3aXNlIHRoZSB0YXNrDQo0MTA4OiAgICAgICAgICAgICAgICAJCQl1bmJsb2NrZWQgYmVjYXVzZSBvZiBhIHRpbWVvdXQuICovDQo0MTA5OiAgICAgICAgICAgICAgICAJCQlpZiggcHhDdXJyZW50VENCLT5lTm90aWZ5U3RhdGUgPT0gZVdhaXRpbmdOb3RpZmljYXRpb24gKQ0KQkZEMDJENkEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDJENkUgIDAwNENGQzYyICAgTFcgVjEsIDc2KFYwKQpCRkQwMkQ3MiAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMkQ3NCAgMDAwNUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyRDgyCkJGRDAyRDc2ICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQpCRkQwMkQ3OCAgICAgIDBDMDAgICBOT1AKNDExMDogICAgICAgICAgICAgICAgCQkJew0KNDExMTogICAgICAgICAgICAgICAgCQkJCS8qIEEgbm90aWZpY2F0aW9uIHdhcyBub3QgcmVjZWl2ZWQuICovDQo0MTEyOiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwMkQ3QSAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKQkZEMDJEN0UgICAgICBDQzBFICAgQiAweEJGRDAyRDlDCkJGRDAyRDgwICAgICAgMEMwMCAgIE5PUAo0MTEzOiAgICAgICAgICAgICAgICAJCQl9DQo0MTE0OiAgICAgICAgICAgICAgICAJCQllbHNlDQo0MTE1OiAgICAgICAgICAgICAgICAJCQl7DQo0MTE2OiAgICAgICAgICAgICAgICAJCQkJLyogQSBub3RpZmljYXRpb24gd2FzIGFscmVhZHkgcGVuZGluZyBvciBhIG5vdGlmaWNhdGlvbiB3YXMNCjQxMTc6ICAgICAgICAgICAgICAgIAkJCQlyZWNlaXZlZCB3aGlsZSB0aGUgdGFzayB3YXMgd2FpdGluZy4gKi8NCjQxMTg6ICAgICAgICAgICAgICAgIAkJCQlweEN1cnJlbnRUQ0ItPnVsTm90aWZpZWRWYWx1ZSAmPSB+dWxCaXRzVG9DbGVhck9uRXhpdDsNCkJGRDAyRDgyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAyRDg2ICAwMDQ4RkM4MiAgIExXIEEwLCA3MihWMCkKQkZEMDJEOEEgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQpCRkQwMkQ4RSAgICAgIDQ0MUIgICBOT1QxNiBWMSwgVjEKQkZEMDJEOTAgICAgICA0NDlDICAgQU5EMTYgVjEsIEEwCkJGRDAyRDkyICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKNDExOTogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSBwZFRSVUU7DQpCRkQwMkQ5NiAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMkQ5OCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjQxMjA6ICAgICAgICAgICAgICAgIAkJCX0NCjQxMjE6ICAgICAgICAgICAgICAgIA0KNDEyMjogICAgICAgICAgICAgICAgCQkJcHhDdXJyZW50VENCLT5lTm90aWZ5U3RhdGUgPSBlTm90V2FpdGluZ05vdGlmaWNhdGlvbjsNCkJGRDAyRDlDICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAyREEwICAwMDRDRjgwMiAgIFNXIFpFUk8sIDc2KFYwKQo0MTIzOiAgICAgICAgICAgICAgICAJCX0NCjQxMjQ6ICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAyREE0ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDJEQTYgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDQ1QUEKQkZEMDJEQTggICAgICAwQzAwICAgTk9QCjQxMjU6ICAgICAgICAgICAgICAgIA0KNDEyNjogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDAyREFBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKNDEyNzogICAgICAgICAgICAgICAgCX0NCkJGRDAyREFFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAyREIwICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDJEQjIgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwMkRCNCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDAyREI2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDJEQjggICAgICAwQzAwICAgTk9QCjQxMjg6ICAgICAgICAgICAgICAgIA0KNDEyOTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgKi8NCjQxMzA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDEzMTogICAgICAgICAgICAgICAgDQo0MTMyOiAgICAgICAgICAgICAgICAjaWYoIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgPT0gMSApDQo0MTMzOiAgICAgICAgICAgICAgICANCjQxMzQ6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhUYXNrR2VuZXJpY05vdGlmeSggVGFza0hhbmRsZV90IHhUYXNrVG9Ob3RpZnksIHVpbnQzMl90IHVsVmFsdWUsIGVOb3RpZnlBY3Rpb24gZUFjdGlvbiwgdWludDMyX3QgKnB1bFByZXZpb3VzTm90aWZpY2F0aW9uVmFsdWUgKQ0KNDEzNTogICAgICAgICAgICAgICAgCXsNCkJGRDAxQ0U4ICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwCkJGRDAxQ0VBICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkKQkZEMDFDRUMgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQpCRkQwMUNFRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMUNGMCAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpCkJGRDAxQ0Y0ICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkKQkZEMDFDRjggIDAwMzBGOERFICAgU1cgQTIsIDQ4KFM4KQpCRkQwMUNGQyAgMDAzNEY4RkUgICBTVyBBMywgNTIoUzgpCjQxMzY6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqIHB4VENCOw0KNDEzNzogICAgICAgICAgICAgICAgCWVOb3RpZnlWYWx1ZSBlT3JpZ2luYWxOb3RpZnlTdGF0ZTsNCjQxMzg6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwMUQwMCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMUQwMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjQxMzk6ICAgICAgICAgICAgICAgIA0KNDE0MDogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHhUYXNrVG9Ob3RpZnkgKTsNCkJGRDAxRDA2ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDFEMEEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDFEMjAKQkZEMDFEMEUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDFEMTAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMUQxMiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOApCRkQwMUQxNCAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkKQkZEMDFEMTYgIDEwMkMzMEEwICAgQURESVUgQTEsIFpFUk8sIDQxNDAKQkZEMDFEMTggIDc3RTgxMDJDICAgQURESSBBVCwgVDQsIDMwNjk2CkJGRDAxRDFBICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMUQxQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMUQxRSAgICAgIDBDMDAgICBOT1AKNDE0MTogICAgICAgICAgICAgICAgCQlweFRDQiA9ICggVENCX3QgKiApIHhUYXNrVG9Ob3RpZnk7DQpCRkQwMUQyMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAxRDI0ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKNDE0MjogICAgICAgICAgICAgICAgDQo0MTQzOiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDFEMjggIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDFEMkEgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDAxRDJDICAgICAgMEMwMCAgIE5PUAo0MTQ0OiAgICAgICAgICAgICAgICAJCXsNCjQxNDU6ICAgICAgICAgICAgICAgIAkJCWlmKCBwdWxQcmV2aW91c05vdGlmaWNhdGlvblZhbHVlICE9IE5VTEwgKQ0KQkZEMDFEMkUgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQpCRkQwMUQzMiAgMDAwNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUQ0NAo0MTQ2OiAgICAgICAgICAgICAgICAJCQl7DQo0MTQ3OiAgICAgICAgICAgICAgICAJCQkJKnB1bFByZXZpb3VzTm90aWZpY2F0aW9uVmFsdWUgPSBweFRDQi0+dWxOb3RpZmllZFZhbHVlOw0KQkZEMDFEMzYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUQzQSAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApCkJGRDAxRDNFICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkKQkZEMDFENDIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjQxNDg6ICAgICAgICAgICAgICAgIAkJCX0NCjQxNDk6ICAgICAgICAgICAgICAgIA0KNDE1MDogICAgICAgICAgICAgICAgCQkJZU9yaWdpbmFsTm90aWZ5U3RhdGUgPSBweFRDQi0+ZU5vdGlmeVN0YXRlOw0KQkZEMDFENDQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUQ0OCAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApCkJGRDAxRDRDICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKNDE1MTogICAgICAgICAgICAgICAgDQo0MTUyOiAgICAgICAgICAgICAgICAJCQlweFRDQi0+ZU5vdGlmeVN0YXRlID0gZU5vdGlmaWVkOw0KQkZEMDFENTAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUQ1NCAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwMUQ1NiAgMDA0Q0Y4NjIgICBTVyBWMSwgNzYoVjApCjQxNTM6ICAgICAgICAgICAgICAgIA0KNDE1NDogICAgICAgICAgICAgICAgCQkJc3dpdGNoKCBlQWN0aW9uICkNCkJGRDAxRDVBICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDFENUUgIDAwMDVCMDQyICAgU0xUSVUgVjAsIFYwLCA1CkJGRDAxRDYyICAwMDQ4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxREY2CkJGRDAxRDY2ICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDFENkEgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMUQ2QyAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMApCRkQwMUQ2RSAgMzA0MkJGRDAgICBMREMxIEYzMCwgMTIzNTQoUzApCkJGRDAxRDcwICAxRDdDMzA0MiAgIEFERElVIFYwLCBWMCwgNzU0OApCRkQwMUQ3MiAgMDUyNjFEN0MgICBMQiBUMywgMTMxOChHUCkKQkZEMDFENzQgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAxRDc2ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMUQ3OCAgICAgIDQ1QTIgICBKUkMgVjAKQkZEMDFEN0EgICAgICAwQzAwICAgTk9QCkJGRDAxRDdDICBCRkQwMURGNSAgIExCIFQ3LCAtMTY0MzIoUzUpCkJGRDAxRDdFICAxRDkxQkZEMCAgIExEQzEgRjMwLCA3NTY5KFMwKQpCRkQwMUQ4MCAgQkZEMDFEOTEgICBMQiBUNCwgLTE2NDMyKFMxKQpCRkQwMUQ4MiAgMURBQkJGRDAgICBMREMxIEYzMCwgNzU5NShTMCkKQkZEMDFEODQgIEJGRDAxREFCICAgTEIgVDUsIC0xNjQzMihUMykKQkZEMDFEODYgIDFEQzFCRkQwICAgTERDMSBGMzAsIDc2MTcoUzApCkJGRDAxRDg4ICBCRkQwMURDMSAgIExCIFQ2LCAtMTY0MzIoQVQpCkJGRDAxRDhBICAxREQxQkZEMCAgIExEQzEgRjMwLCA3NjMzKFMwKQpCRkQwMUQ4QyAgQkZEMDFERDEgICBMQiBUNiwgLTE2NDMyKFMxKQpCRkQwMUQ4RSAgRkM1RUJGRDAgICBMREMxIEYzMCwgLTkzMChTMCkKNDE1NTogICAgICAgICAgICAgICAgCQkJew0KNDE1NjogICAgICAgICAgICAgICAgCQkJCWNhc2UgZVNldEJpdHMJOg0KNDE1NzogICAgICAgICAgICAgICAgCQkJCQlweFRDQi0+dWxOb3RpZmllZFZhbHVlIHw9IHVsVmFsdWU7DQpCRkQwMUQ5MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRDk0ICAwMDQ4RkM2MiAgIExXIFYxLCA3MihWMCkKQkZEMDFEOTggIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwMUQ5QyAgICAgIDQ0REEgICBPUjE2IFYxLCBWMApCRkQwMUQ5RSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxREEyICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKNDE1ODogICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxREE2ICAgICAgQ0MyNyAgIEIgMHhCRkQwMURGNgpCRkQwMURBOCAgICAgIDBDMDAgICBOT1AKNDE1OTogICAgICAgICAgICAgICAgDQo0MTYwOiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlSW5jcmVtZW50CToNCjQxNjE6ICAgICAgICAgICAgICAgIAkJCQkJKCBweFRDQi0+dWxOb3RpZmllZFZhbHVlICkrKzsNCkJGRDAxREFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFEQUUgIDAwNDhGQzQyICAgTFcgVjAsIDcyKFYwKQpCRkQwMURCMiAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDEKQkZEMDFEQjQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMURCOCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApCjQxNjI6ICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMURCQyAgICAgIENDMUMgICBCIDB4QkZEMDFERjYKQkZEMDFEQkUgICAgICAwQzAwICAgTk9QCjQxNjM6ICAgICAgICAgICAgICAgIA0KNDE2NDogICAgICAgICAgICAgICAgCQkJCWNhc2UgZVNldFZhbHVlV2l0aE92ZXJ3cml0ZQk6DQo0MTY1OiAgICAgICAgICAgICAgICAJCQkJCXB4VENCLT51bE5vdGlmaWVkVmFsdWUgPSB1bFZhbHVlOw0KQkZEMDFEQzAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMURDNCAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpCkJGRDAxREM4ICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKNDE2NjogICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxRENDICAgICAgQ0MxNCAgIEIgMHhCRkQwMURGNgpCRkQwMURDRSAgICAgIDBDMDAgICBOT1AKNDE2NzogICAgICAgICAgICAgICAgDQo0MTY4OiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlU2V0VmFsdWVXaXRob3V0T3ZlcndyaXRlIDoNCjQxNjk6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIGVPcmlnaW5hbE5vdGlmeVN0YXRlICE9IGVOb3RpZmllZCApDQpCRkQwMUREMCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpCkJGRDAxREQ0ICAgICAgRUQwMiAgIExJIFYwLCAyCkJGRDAxREQ2ICAwMDA5OTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDFERUMKQkZEMDFERDggIDBDMDAwMDA5ICAgU0xMIFpFUk8sIFQxLCAxCkJGRDAxRERBICAgICAgMEMwMCAgIE5PUAo0MTcwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjQxNzE6ICAgICAgICAgICAgICAgIAkJCQkJCXB4VENCLT51bE5vdGlmaWVkVmFsdWUgPSB1bFZhbHVlOw0KQkZEMDFEREMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMURFMCAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpCkJGRDAxREU0ICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKNDE3MjogICAgICAgICAgICAgICAgCQkJCQl9DQo0MTczOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjQxNzQ6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDE3NTogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHZhbHVlIGNvdWxkIG5vdCBiZSB3cml0dGVuIHRvIHRoZSB0YXNrLiAqLw0KNDE3NjogICAgICAgICAgICAgICAgCQkJCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDAxREVDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQo0MTc3OiAgICAgICAgICAgICAgICAJCQkJCX0NCjQxNzg6ICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMURFOCAgICAgIENDMDYgICBCIDB4QkZEMDFERjYKQkZEMDFERUEgICAgICAwQzAwICAgTk9QCkJGRDAxREYwICAgICAgQ0MwMiAgIEIgMHhCRkQwMURGNgpCRkQwMURGMiAgICAgIDBDMDAgICBOT1AKNDE3OTogICAgICAgICAgICAgICAgDQo0MTgwOiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlTm9BY3Rpb246DQo0MTgxOiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGlzIGJlaW5nIG5vdGlmaWVkIHdpdGhvdXQgaXRzIG5vdGlmeSB2YWx1ZSBiZWluZw0KNDE4MjogICAgICAgICAgICAgICAgCQkJCQl1cGRhdGVkLiAqLw0KNDE4MzogICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxREY0ICAgICAgMEMwMCAgIE5PUAo0MTg0OiAgICAgICAgICAgICAgICAJCQl9DQo0MTg1OiAgICAgICAgICAgICAgICANCjQxODY6ICAgICAgICAgICAgICAgIA0KNDE4NzogICAgICAgICAgICAgICAgCQkJLyogSWYgdGhlIHRhc2sgaXMgaW4gdGhlIGJsb2NrZWQgc3RhdGUgc3BlY2lmaWNhbGx5IHRvIHdhaXQgZm9yIGENCjQxODg6ICAgICAgICAgICAgICAgIAkJCW5vdGlmaWNhdGlvbiB0aGVuIHVuYmxvY2sgaXQgbm93LiAqLw0KNDE4OTogICAgICAgICAgICAgICAgCQkJaWYoIGVPcmlnaW5hbE5vdGlmeVN0YXRlID09IGVXYWl0aW5nTm90aWZpY2F0aW9uICkNCkJGRDAxREY2ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkKQkZEMDFERkEgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDFERkMgIDAwNEVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMUU5QwpCRkQwMURGRSAgMEMwMDAwNEUgICBTTEwgVjAsIFQ2LCAxCkJGRDAxRTAwICAgICAgMEMwMCAgIE5PUAo0MTkwOiAgICAgICAgICAgICAgICAJCQl7DQo0MTkxOiAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwMUUwMiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRTA2ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMUUwOCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMUUwQSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMUUwQyAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAxRTBFICAgICAgMEMwMCAgIE5PUAo0MTkyOiAgICAgICAgICAgICAgICAJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDFFMTAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUUxNCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAxRTE2ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAxRTE4ICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQpCRkQwMUUxQSAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQpCRkQwMUUxQyAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQpCRkQwMUUyMCAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQpCRkQwMUUyMiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQpCRkQwMUUyNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRTJBICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDFFMkMgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMUUyRSAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDAxRTMwICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQpCRkQwMUUzMiAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMUUzNCAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAxRTM2ICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwCkJGRDAxRTNBICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwMUUzQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRTQwICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMUU0MiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMUU0NCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMUU0NiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAxRTQ4ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwMUU0QSAgICAgIDBDMDAgICBOT1AKNDE5MzogICAgICAgICAgICAgICAgDQo0MTk0OiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRhc2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW4gZXZlbnQgbGlzdC4gKi8NCjQxOTU6ICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIGxpc3RMSVNUX0lURU1fQ09OVEFJTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApID09IE5VTEwgKTsNCkJGRDAxRTRDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFFNTAgICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQpCRkQwMUU1MiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUU2OApCRkQwMUU1NiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMUU1OCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAxRTVBICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAxRTVDICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMUU1RSAgMTA2MzMwQTAgICBBRERJVSBBMSwgWkVSTywgNDE5NQpCRkQwMUU2MCAgNzdFODEwNjMgICBBRERJIFYxLCBWMSwgMzA2OTYKQkZEMDFFNjIgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAxRTY0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAxRTY2ICAgICAgMEMwMCAgIE5PUAo0MTk2OiAgICAgICAgICAgICAgICANCjQxOTc6ICAgICAgICAgICAgICAgIAkJCQkjaWYoIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICE9IDAgKQ0KNDE5ODogICAgICAgICAgICAgICAgCQkJCXsNCjQxOTk6ICAgICAgICAgICAgICAgIAkJCQkJLyogSWYgYSB0YXNrIGlzIGJsb2NrZWQgd2FpdGluZyBmb3IgYSBub3RpZmljYXRpb24gdGhlbg0KNDIwMDogICAgICAgICAgICAgICAgCQkJCQl4TmV4dFRhc2tVbmJsb2NrVGltZSBtaWdodCBiZSBzZXQgdG8gdGhlIGJsb2NrZWQgdGFzaydzIHRpbWUNCjQyMDE6ICAgICAgICAgICAgICAgIAkJCQkJb3V0IHRpbWUuICBJZiB0aGUgdGFzayBpcyB1bmJsb2NrZWQgZm9yIGEgcmVhc29uIG90aGVyIHRoYW4NCjQyMDI6ICAgICAgICAgICAgICAgIAkJCQkJYSB0aW1lb3V0IHhOZXh0VGFza1VuYmxvY2tUaW1lIGlzIG5vcm1hbGx5IGxlZnQgdW5jaGFuZ2VkLA0KNDIwMzogICAgICAgICAgICAgICAgCQkJCQliZWNhdXNlIGl0IHdpbGwgYXV0b21hdGljYWxseSBnZXQgcmVzZXQgdG8gYSBuZXcgdmFsdWUgd2hlbg0KNDIwNDogICAgICAgICAgICAgICAgCQkJCQl0aGUgdGljayBjb3VudCBlcXVhbHMgeE5leHRUYXNrVW5ibG9ja1RpbWUuICBIb3dldmVyIGlmDQo0MjA1OiAgICAgICAgICAgICAgICAJCQkJCXRpY2tsZXNzIGlkbGluZyBpcyB1c2VkIGl0IG1pZ2h0IGJlIG1vcmUgaW1wb3J0YW50IHRvIGVudGVyDQo0MjA2OiAgICAgICAgICAgICAgICAJCQkJCXNsZWVwIG1vZGUgYXQgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHRpbWUgLSBzbyByZXNldA0KNDIwNzogICAgICAgICAgICAgICAgCQkJCQl4TmV4dFRhc2tVbmJsb2NrVGltZSBoZXJlIHRvIGVuc3VyZSBpdCBpcyB1cGRhdGVkIGF0IHRoZQ0KNDIwODogICAgICAgICAgICAgICAgCQkJCQllYXJsaWVzdCBwb3NzaWJsZSB0aW1lLiAqLw0KNDIwOTogICAgICAgICAgICAgICAgCQkJCQlwcnZSZXNldE5leHRUYXNrVW5ibG9ja1RpbWUoKTsNCjQyMTA6ICAgICAgICAgICAgICAgIAkJCQl9DQo0MjExOiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQo0MjEyOiAgICAgICAgICAgICAgICANCjQyMTM6ICAgICAgICAgICAgICAgIAkJCQlpZiggcHhUQ0ItPnV4UHJpb3JpdHkgPiBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKQ0KQkZEMDFFNjggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUU2QyAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApCkJGRDAxRTZFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDAxRTcyICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkKQkZEMDFFNzQgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxCkJGRDAxRTc2ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwMUU3OCAgMDAxMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUU5Qwo0MjE0OiAgICAgICAgICAgICAgICAJCQkJew0KNDIxNTogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgbm90aWZpZWQgdGFzayBoYXMgYSBwcmlvcml0eSBhYm92ZSB0aGUgY3VycmVudGx5DQo0MjE2OiAgICAgICAgICAgICAgICAJCQkJCWV4ZWN1dGluZyB0YXNrIHNvIGEgeWllbGQgaXMgcmVxdWlyZWQuICovDQo0MjE3OiAgICAgICAgICAgICAgICAJCQkJCXRhc2tZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMUU3QyAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDAxRTdFICAgICAgNEU1NiAgIEFERElVIFMyLCBTMiwgLTUKQkZEMDFFODAgICAgICAwQzAwICAgTk9QCkJGRDAxRTgyICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkKQkZEMDFFODYgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMUU4QSAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDFFOEUgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQpCRkQwMUU5MiAgMDAxQ0ZDOUUgICBMVyBBMCwgMjgoUzgpCkJGRDAxRTk2ICA0RTY2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQpCRkQwMUU5OCAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMKQkZEMDFFOUEgICAgICAwQzAwICAgTk9QCjQyMTg6ICAgICAgICAgICAgICAgIAkJCQl9DQo0MjE5OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNDIyMDogICAgICAgICAgICAgICAgCQkJCXsNCjQyMjE6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNDIyMjogICAgICAgICAgICAgICAgCQkJCX0NCjQyMjM6ICAgICAgICAgICAgICAgIAkJCX0NCjQyMjQ6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjQyMjU6ICAgICAgICAgICAgICAgIAkJCXsNCjQyMjY6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0MjI3OiAgICAgICAgICAgICAgICAJCQl9DQo0MjI4OiAgICAgICAgICAgICAgICAJCX0NCjQyMjk6ICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAxRTlDICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDFFOUUgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDM2QTIKQkZEMDFFQTAgICAgICAwQzAwICAgTk9QCjQyMzA6ICAgICAgICAgICAgICAgIA0KNDIzMTogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDAxRUEyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKNDIzMjogICAgICAgICAgICAgICAgCX0NCkJGRDAxRUE2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAxRUE4ICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDFFQUEgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwMUVBQyAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDAxRUFFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDFFQjAgICAgICAwQzAwICAgTk9QCjQyMzM6ICAgICAgICAgICAgICAgIA0KNDIzNDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgKi8NCjQyMzU6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDIzNjogICAgICAgICAgICAgICAgDQo0MjM3OiAgICAgICAgICAgICAgICAjaWYoIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgPT0gMSApDQo0MjM4OiAgICAgICAgICAgICAgICANCjQyMzk6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhUYXNrTm90aWZ5RnJvbUlTUiggVGFza0hhbmRsZV90IHhUYXNrVG9Ob3RpZnksIHVpbnQzMl90IHVsVmFsdWUsIGVOb3RpZnlBY3Rpb24gZUFjdGlvbiwgQmFzZVR5cGVfdCAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApDQo0MjQwOiAgICAgICAgICAgICAgICAJew0KQkZEMDFFQjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDFFQjYgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwMUVCOCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDAxRUJBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAxRUJDICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKQkZEMDFFQzAgIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQpCRkQwMUVDNCAgMDAzMEY4REUgICBTVyBBMiwgNDgoUzgpCkJGRDAxRUM4ICAwMDM0RjhGRSAgIFNXIEEzLCA1MihTOCkKNDI0MTogICAgICAgICAgICAgICAgCVRDQl90ICogcHhUQ0I7DQo0MjQyOiAgICAgICAgICAgICAgICAJZU5vdGlmeVZhbHVlIGVPcmlnaW5hbE5vdGlmeVN0YXRlOw0KNDI0MzogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybiA9IHBkUEFTUzsNCkJGRDAxRUNDICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxRUNFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNDI0NDogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQo0MjQ1OiAgICAgICAgICAgICAgICANCjQyNDY6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB4VGFza1RvTm90aWZ5ICk7DQpCRkQwMUVEMiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAxRUQ2ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxRUVDCkJGRDAxRURBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAxRURDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDFFREUgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDFFRTAgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDAxRUUyICAxMDk2MzBBMCAgIEFERElVIEExLCBaRVJPLCA0MjQ2CkJGRDAxRUU0ICA3N0U4MTA5NiAgIEFEREkgQTAsIFM2LCAzMDY5NgpCRkQwMUVFNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDFFRTggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDFFRUEgICAgICAwQzAwICAgTk9QCjQyNDc6ICAgICAgICAgICAgICAgIA0KNDI0ODogICAgICAgICAgICAgICAgCQkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGENCjQyNDk6ICAgICAgICAgICAgICAgIAkJbWF4aW11bQlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5Lg0KNDI1MDogICAgICAgICAgICAgICAgCQlJbnRlcnJ1cHRzIHRoYXQgYXJlCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZWVwDQo0MjUxOiAgICAgICAgICAgICAgICAJCXBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4gd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLA0KNDI1MjogICAgICAgICAgICAgICAgCQlidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKQ0KNDI1MzogICAgICAgICAgICAgICAgCQlpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdGhlbg0KNDI1NDogICAgICAgICAgICAgICAgCQlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQo0MjU1OiAgICAgICAgICAgICAgICAJCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzDQo0MjU2OiAgICAgICAgICAgICAgICAJCWJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsDQo0MjU3OiAgICAgICAgICAgICAgICAJCXByaW9yaXR5LiAgT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkDQo0MjU4OiAgICAgICAgICAgICAgICAJCWZyb20gaW50ZXJydXB0cwl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpDQo0MjU5OiAgICAgICAgICAgICAgICAJCWJlbG93IHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIGludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhDQo0MjYwOiAgICAgICAgICAgICAgICAJCXNlcGFyYXRlIGludGVycnVwdCBzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQo0MjYxOiAgICAgICAgICAgICAgICAJCXNpbXBsZSBhcyBwb3NzaWJsZS4gIE1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMNCjQyNjI6ICAgICAgICAgICAgICAgIAkJcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZyBsaW5rOg0KNDI2MzogICAgICAgICAgICAgICAgCQlodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQo0MjY0OiAgICAgICAgICAgICAgICAJCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjQyNjU6ICAgICAgICAgICAgICAgIA0KNDI2NjogICAgICAgICAgICAgICAgCQlweFRDQiA9ICggVENCX3QgKiApIHhUYXNrVG9Ob3RpZnk7DQpCRkQwMUVFQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAxRUYwICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKNDI2NzogICAgICAgICAgICAgICAgDQo0MjY4OiAgICAgICAgICAgICAgICAJCXV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQpCRkQwMUVGNCAgNDc1RTc3RTggICBKQUxTIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSCkJGRDAxRUY4ICAgICAgMEMwMCAgIE5PUApCRkQwMUVGQSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjQyNjk6ICAgICAgICAgICAgICAgIAkJew0KNDI3MDogICAgICAgICAgICAgICAgCQkJZU9yaWdpbmFsTm90aWZ5U3RhdGUgPSBweFRDQi0+ZU5vdGlmeVN0YXRlOw0KQkZEMDFFRkUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUYwMiAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApCkJGRDAxRjA2ICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkKNDI3MTogICAgICAgICAgICAgICAgDQo0MjcyOiAgICAgICAgICAgICAgICAJCQlweFRDQi0+ZU5vdGlmeVN0YXRlID0gZU5vdGlmaWVkOw0KQkZEMDFGMEEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUYwRSAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwMUYxMCAgMDA0Q0Y4NjIgICBTVyBWMSwgNzYoVjApCjQyNzM6ICAgICAgICAgICAgICAgIA0KNDI3NDogICAgICAgICAgICAgICAgCQkJc3dpdGNoKCBlQWN0aW9uICkNCkJGRDAxRjE0ICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDFGMTggIDAwMDVCMDQyICAgU0xUSVUgVjAsIFYwLCA1CkJGRDAxRjFDICAwMDQ3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxRkFFCkJGRDAxRjIwICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDFGMjQgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMUYyNiAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMApCRkQwMUYyOCAgMzA0MkJGRDAgICBMREMxIEYzMCwgMTIzNTQoUzApCkJGRDAxRjJBICAxRjM0MzA0MiAgIEFERElVIFYwLCBWMCwgNzk4OApCRkQwMUYyQyAgMDUyNjFGMzQgICBMQiBUOSwgMTMxOChTNCkKQkZEMDFGMkUgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAxRjMwICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMUYzMiAgICAgIDQ1QTIgICBKUkMgVjAKQkZEMDFGMzQgIEJGRDAxRkFEICAgTEIgU1AsIC0xNjQzMihUNSkKQkZEMDFGMzYgIDFGNDlCRkQwICAgTERDMSBGMzAsIDgwMDkoUzApCkJGRDAxRjM4ICBCRkQwMUY0OSAgIExCIEswLCAtMTY0MzIoVDEpCkJGRDAxRjNBICAxRjYzQkZEMCAgIExEQzEgRjMwLCA4MDM1KFMwKQpCRkQwMUYzQyAgQkZEMDFGNjMgICBMQiBLMSwgLTE2NDMyKFYxKQpCRkQwMUYzRSAgMUY3OUJGRDAgICBMREMxIEYzMCwgODA1NyhTMCkKQkZEMDFGNDAgIEJGRDAxRjc5ICAgTEIgSzEsIC0xNjQzMihUOSkKQkZEMDFGNDIgIDFGODlCRkQwICAgTERDMSBGMzAsIDgwNzMoUzApCkJGRDAxRjQ0ICBCRkQwMUY4OSAgIExCIEdQLCAtMTY0MzIoVDEpCkJGRDAxRjQ2ICBGQzVFQkZEMCAgIExEQzEgRjMwLCAtOTMwKFMwKQo0Mjc1OiAgICAgICAgICAgICAgICAJCQl7DQo0Mjc2OiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlU2V0Qml0cwk6DQo0Mjc3OiAgICAgICAgICAgICAgICAJCQkJCXB4VENCLT51bE5vdGlmaWVkVmFsdWUgfD0gdWxWYWx1ZTsNCkJGRDAxRjQ4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFGNEMgIDAwNDhGQzYyICAgTFcgVjEsIDcyKFYwKQpCRkQwMUY1MCAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAxRjU0ICAgICAgNDREQSAgIE9SMTYgVjEsIFYwCkJGRDAxRjU2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFGNUEgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQo0Mjc4OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFGNUUgICAgICBDQzI3ICAgQiAweEJGRDAxRkFFCkJGRDAxRjYwICAgICAgMEMwMCAgIE5PUAo0Mjc5OiAgICAgICAgICAgICAgICANCjQyODA6ICAgICAgICAgICAgICAgIAkJCQljYXNlIGVJbmNyZW1lbnQJOg0KNDI4MTogICAgICAgICAgICAgICAgCQkJCQkoIHB4VENCLT51bE5vdGlmaWVkVmFsdWUgKSsrOw0KQkZEMDFGNjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMUY2NiAgMDA0OEZDNDIgICBMVyBWMCwgNzIoVjApCkJGRDAxRjZBICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQpCRkQwMUY2QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRjcwICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKNDI4MjogICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxRjc0ICAgICAgQ0MxQyAgIEIgMHhCRkQwMUZBRQpCRkQwMUY3NiAgICAgIDBDMDAgICBOT1AKNDI4MzogICAgICAgICAgICAgICAgDQo0Mjg0OiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlU2V0VmFsdWVXaXRoT3ZlcndyaXRlCToNCjQyODU6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0ItPnVsTm90aWZpZWRWYWx1ZSA9IHVsVmFsdWU7DQpCRkQwMUY3OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRjdDICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkKQkZEMDFGODAgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQo0Mjg2OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFGODQgICAgICBDQzE0ICAgQiAweEJGRDAxRkFFCkJGRDAxRjg2ICAgICAgMEMwMCAgIE5PUAo0Mjg3OiAgICAgICAgICAgICAgICANCjQyODg6ICAgICAgICAgICAgICAgIAkJCQljYXNlIGVTZXRWYWx1ZVdpdGhvdXRPdmVyd3JpdGUgOg0KNDI4OTogICAgICAgICAgICAgICAgCQkJCQlpZiggZU9yaWdpbmFsTm90aWZ5U3RhdGUgIT0gZU5vdGlmaWVkICkNCkJGRDAxRjg4ICAwMDFDRkM3RSAgIExXIFYxLCAyOChTOCkKQkZEMDFGOEMgICAgICBFRDAyICAgTEkgVjAsIDIKQkZEMDFGOEUgIDAwMDk5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwMUZBNApCRkQwMUY5MCAgMEMwMDAwMDkgICBTTEwgWkVSTywgVDEsIDEKQkZEMDFGOTIgICAgICAwQzAwICAgTk9QCjQyOTA6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDI5MTogICAgICAgICAgICAgICAgCQkJCQkJcHhUQ0ItPnVsTm90aWZpZWRWYWx1ZSA9IHVsVmFsdWU7DQpCRkQwMUY5NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRjk4ICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkKQkZEMDFGOUMgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQo0MjkyOiAgICAgICAgICAgICAgICAJCQkJCX0NCjQyOTM6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KNDI5NDogICAgICAgICAgICAgICAgCQkJCQl7DQo0Mjk1OiAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgdmFsdWUgY291bGQgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIHRhc2suICovDQo0Mjk2OiAgICAgICAgICAgICAgICAJCQkJCQl4UmV0dXJuID0gcGRGQUlMOw0KQkZEMDFGQTQgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjQyOTc6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KNDI5ODogICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxRkEwICAgICAgQ0MwNiAgIEIgMHhCRkQwMUZBRQpCRkQwMUZBMiAgICAgIDBDMDAgICBOT1AKQkZEMDFGQTggICAgICBDQzAyICAgQiAweEJGRDAxRkFFCkJGRDAxRkFBICAgICAgMEMwMCAgIE5PUAo0Mjk5OiAgICAgICAgICAgICAgICANCjQzMDA6ICAgICAgICAgICAgICAgIAkJCQljYXNlIGVOb0FjdGlvbiA6DQo0MzAxOiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGlzIGJlaW5nIG5vdGlmaWVkIHdpdGhvdXQgaXRzIG5vdGlmeSB2YWx1ZSBiZWluZw0KNDMwMjogICAgICAgICAgICAgICAgCQkJCQl1cGRhdGVkLiAqLw0KNDMwMzogICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxRkFDICAgICAgMEMwMCAgIE5PUAo0MzA0OiAgICAgICAgICAgICAgICAJCQl9DQo0MzA1OiAgICAgICAgICAgICAgICANCjQzMDY6ICAgICAgICAgICAgICAgIA0KNDMwNzogICAgICAgICAgICAgICAgCQkJLyogSWYgdGhlIHRhc2sgaXMgaW4gdGhlIGJsb2NrZWQgc3RhdGUgc3BlY2lmaWNhbGx5IHRvIHdhaXQgZm9yIGENCjQzMDg6ICAgICAgICAgICAgICAgIAkJCW5vdGlmaWNhdGlvbiB0aGVuIHVuYmxvY2sgaXQgbm93LiAqLw0KNDMwOTogICAgICAgICAgICAgICAgCQkJaWYoIGVPcmlnaW5hbE5vdGlmeVN0YXRlID09IGVXYWl0aW5nTm90aWZpY2F0aW9uICkNCkJGRDAxRkFFICAwMDFDRkM3RSAgIExXIFYxLCAyOChTOCkKQkZEMDFGQjIgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDFGQjQgIDAwNTdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjA2NgpCRkQwMUZCNiAgMEMwMDAwNTcgICBTTEwgVjAsIFM3LCAxCkJGRDAxRkI4ICAgICAgMEMwMCAgIE5PUAo0MzEwOiAgICAgICAgICAgICAgICAJCQl7DQo0MzExOiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRhc2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW4gZXZlbnQgbGlzdC4gKi8NCjQzMTI6ICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIGxpc3RMSVNUX0lURU1fQ09OVEFJTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApID09IE5VTEwgKTsNCkJGRDAxRkJBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFGQkUgICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQpCRkQwMUZDMCAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUZENgpCRkQwMUZDNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMUZDNiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAxRkM4ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAxRkNBICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMUZDQyAgMTBEODMwQTAgICBBRERJVSBBMSwgWkVSTywgNDMxMgpCRkQwMUZDRSAgNzdFODEwRDggICBBRERJIEEyLCBUOCwgMzA2OTYKQkZEMDFGRDAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAxRkQyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAxRkQ0ICAgICAgMEMwMCAgIE5PUAo0MzEzOiAgICAgICAgICAgICAgICANCjQzMTQ6ICAgICAgICAgICAgICAgIAkJCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDFGRDYgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkKQkZEMDFGREEgIDAwMjc0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDIwMkMKNDMxNTogICAgICAgICAgICAgICAgCQkJCXsNCjQzMTY6ICAgICAgICAgICAgICAgIAkJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwMUZERSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxRkUyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMUZFNCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMUZFNiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMUZFOCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAxRkVBICAgICAgMEMwMCAgIE5PUAo0MzE3OiAgICAgICAgICAgICAgICAJCQkJCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhUQ0IgKTsNCkJGRDAxRkVDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFGRjAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMUZGMiAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMUZGNCAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjEKQkZEMDFGRjYgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkKQkZEMDFGRjggIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDFGRkMgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDFGRkUgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKQkZEMDIwMDIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjAwNiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAyMDA4ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDIwMEEgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMjAwQyAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDIwMEUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDIwMTAgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMjAxMiAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMjAxNiAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDIwMTggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjAxQyAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDIwMUUgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDIwMjAgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDIwMjIgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwMjAyNCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDIwMjYgICAgICAwQzAwICAgTk9QCkJGRDAyMDI4ICAgICAgQ0MwQyAgIEIgMHhCRkQwMjA0MgpCRkQwMjAyQSAgICAgIDBDMDAgICBOT1AKNDMxODogICAgICAgICAgICAgICAgCQkJCX0NCjQzMTk6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQo0MzIwOiAgICAgICAgICAgICAgICAJCQkJew0KNDMyMTogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgZGVsYXllZCBhbmQgcmVhZHkgbGlzdHMgY2Fubm90IGJlIGFjY2Vzc2VkLCBzbyBob2xkDQo0MzIyOiAgICAgICAgICAgICAgICAJCQkJCXRoaXMgdGFzayBwZW5kaW5nIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgcmVzdW1lZC4gKi8NCjQzMjM6ICAgICAgICAgICAgICAgIAkJCQkJdkxpc3RJbnNlcnRFbmQoICYoIHhQZW5kaW5nUmVhZHlMaXN0ICksICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwMjAyQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyMDJFICA2RDJDMDAxNCAgIEVYVCBaRVJPLCBTNCwgMjAsIDE0CkJGRDAyMDMwICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQKQkZEMDIwMzIgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDIwMzQgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQpCRkQwMjAzNiAgODBEMDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU2MApCRkQwMjAzQSAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMjAzQyAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAyMDNFICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwMjA0MCAgICAgIDBDMDAgICBOT1AKNDMyNDogICAgICAgICAgICAgICAgCQkJCX0NCjQzMjU6ICAgICAgICAgICAgICAgIA0KNDMyNjogICAgICAgICAgICAgICAgCQkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA+IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwMjA0MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyMDQ2ICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDIwNDggIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDIwNEMgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMjA0RSAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDIwNTAgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDAyMDUyICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyMDY2CjQzMjc6ICAgICAgICAgICAgICAgIAkJCQl7DQo0MzI4OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBub3RpZmllZCB0YXNrIGhhcyBhIHByaW9yaXR5IGFib3ZlIHRoZSBjdXJyZW50bHkNCjQzMjk6ICAgICAgICAgICAgICAgIAkJCQkJZXhlY3V0aW5nIHRhc2sgc28gYSB5aWVsZCBpcyByZXF1aXJlZC4gKi8NCjQzMzA6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwMjA1NiAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpCkJGRDAyMDVBICAwMDA0NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyMDY2CjQzMzE6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDMzMjogICAgICAgICAgICAgICAgCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQpCRkQwMjA1RSAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpCkJGRDAyMDYyICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAyMDY0ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0MzMzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjQzMzQ6ICAgICAgICAgICAgICAgIAkJCQl9DQo0MzM1OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNDMzNjogICAgICAgICAgICAgICAgCQkJCXsNCjQzMzc6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNDMzODogICAgICAgICAgICAgICAgCQkJCX0NCjQzMzk6ICAgICAgICAgICAgICAgIAkJCX0NCjQzNDA6ICAgICAgICAgICAgICAgIAkJfQ0KNDM0MTogICAgICAgICAgICAgICAgCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKTsNCkJGRDAyMDY2ICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkKQkZEMDIwNkEgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDIwNkMgICAgICA0RDVFICAgQURESVUgVDIsIFQyLCAtMQpCRkQwMjA2RSAgICAgIDBDMDAgICBOT1AKNDM0MjogICAgICAgICAgICAgICAgDQo0MzQzOiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KQkZEMDIwNzAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQo0MzQ0OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDIwNzQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDIwNzYgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwMjA3OCAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDAyMDdBICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDIwN0MgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMjA3RSAgICAgIDBDMDAgICBOT1AKNDM0NTogICAgICAgICAgICAgICAgDQo0MzQ2OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RBU0tfTk9USUZJQ0FUSU9OUyAqLw0KNDM0NzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0MzQ4OiAgICAgICAgICAgICAgICANCjQzNDk6ICAgICAgICAgICAgICAgICNpZiggY29uZmlnVVNFX1RBU0tfTk9USUZJQ0FUSU9OUyA9PSAxICkNCjQzNTA6ICAgICAgICAgICAgICAgIA0KNDM1MTogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tOb3RpZnlHaXZlRnJvbUlTUiggVGFza0hhbmRsZV90IHhUYXNrVG9Ob3RpZnksIEJhc2VUeXBlX3QgKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKQ0KNDM1MjogICAgICAgICAgICAgICAgCXsNCkJGRDAzMTkwICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwCkJGRDAzMTkyICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkKQkZEMDMxOTQgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQpCRkQwMzE5NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMzE5OCAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpCkJGRDAzMTlDICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkKNDM1MzogICAgICAgICAgICAgICAgCVRDQl90ICogcHhUQ0I7DQo0MzU0OiAgICAgICAgICAgICAgICAJZU5vdGlmeVZhbHVlIGVPcmlnaW5hbE5vdGlmeVN0YXRlOw0KNDM1NTogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQo0MzU2OiAgICAgICAgICAgICAgICANCjQzNTc6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB4VGFza1RvTm90aWZ5ICk7DQpCRkQwMzFBMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAzMUE0ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzMUJBCkJGRDAzMUE4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAzMUFBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDMxQUMgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgKQkZEMDMxQUUgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApCkJGRDAzMUIwICAxMTA1MzBBMCAgIEFERElVIEExLCBaRVJPLCA0MzU3CkJGRDAzMUIyICA3N0U4MTEwNSAgIEFEREkgVDAsIEExLCAzMDY5NgpCRkQwMzFCNCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDMxQjYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDMxQjggICAgICAwQzAwICAgTk9QCjQzNTg6ICAgICAgICAgICAgICAgIA0KNDM1OTogICAgICAgICAgICAgICAgCQkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGENCjQzNjA6ICAgICAgICAgICAgICAgIAkJbWF4aW11bQlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5Lg0KNDM2MTogICAgICAgICAgICAgICAgCQlJbnRlcnJ1cHRzIHRoYXQgYXJlCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZWVwDQo0MzYyOiAgICAgICAgICAgICAgICAJCXBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4gd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLA0KNDM2MzogICAgICAgICAgICAgICAgCQlidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKQ0KNDM2NDogICAgICAgICAgICAgICAgCQlpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdGhlbg0KNDM2NTogICAgICAgICAgICAgICAgCQlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQo0MzY2OiAgICAgICAgICAgICAgICAJCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzDQo0MzY3OiAgICAgICAgICAgICAgICAJCWJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsDQo0MzY4OiAgICAgICAgICAgICAgICAJCXByaW9yaXR5LiAgT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkDQo0MzY5OiAgICAgICAgICAgICAgICAJCWZyb20gaW50ZXJydXB0cwl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpDQo0MzcwOiAgICAgICAgICAgICAgICAJCWJlbG93IHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIGludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhDQo0MzcxOiAgICAgICAgICAgICAgICAJCXNlcGFyYXRlIGludGVycnVwdCBzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQo0MzcyOiAgICAgICAgICAgICAgICAJCXNpbXBsZSBhcyBwb3NzaWJsZS4gIE1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMNCjQzNzM6ICAgICAgICAgICAgICAgIAkJcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZyBsaW5rOg0KNDM3NDogICAgICAgICAgICAgICAgCQlodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQo0Mzc1OiAgICAgICAgICAgICAgICAJCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjQzNzY6ICAgICAgICAgICAgICAgIA0KNDM3NzogICAgICAgICAgICAgICAgCQlweFRDQiA9ICggVENCX3QgKiApIHhUYXNrVG9Ob3RpZnk7DQpCRkQwMzFCQSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAzMUJFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNDM3ODogICAgICAgICAgICAgICAgDQo0Mzc5OiAgICAgICAgICAgICAgICAJCXV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQpCRkQwMzFDMiAgNDc1RTc3RTggICBKQUxTIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSCkJGRDAzMUM2ICAgICAgMEMwMCAgIE5PUApCRkQwMzFDOCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjQzODA6ICAgICAgICAgICAgICAgIAkJew0KNDM4MTogICAgICAgICAgICAgICAgCQkJZU9yaWdpbmFsTm90aWZ5U3RhdGUgPSBweFRDQi0+ZU5vdGlmeVN0YXRlOw0KQkZEMDMxQ0MgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzFEMCAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApCkJGRDAzMUQ0ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKNDM4MjogICAgICAgICAgICAgICAgCQkJcHhUQ0ItPmVOb3RpZnlTdGF0ZSA9IGVOb3RpZmllZDsNCkJGRDAzMUQ4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDMxREMgICAgICBFRDgyICAgTEkgVjEsIDIKQkZEMDMxREUgIDAwNENGODYyICAgU1cgVjEsIDc2KFYwKQo0MzgzOiAgICAgICAgICAgICAgICANCjQzODQ6ICAgICAgICAgICAgICAgIAkJCS8qICdHaXZpbmcnIGlzIGVxdWl2YWxlbnQgdG8gaW5jcmVtZW50aW5nIGEgY291bnQgaW4gYSBjb3VudGluZw0KNDM4NTogICAgICAgICAgICAgICAgCQkJc2VtYXBob3JlLiAqLw0KNDM4NjogICAgICAgICAgICAgICAgCQkJKCBweFRDQi0+dWxOb3RpZmllZFZhbHVlICkrKzsNCkJGRDAzMUUyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDMxRTYgIDAwNDhGQzQyICAgTFcgVjAsIDcyKFYwKQpCRkQwMzFFQSAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDEKQkZEMDMxRUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzFGMCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApCjQzODc6ICAgICAgICAgICAgICAgIA0KNDM4ODogICAgICAgICAgICAgICAgCQkJLyogSWYgdGhlIHRhc2sgaXMgaW4gdGhlIGJsb2NrZWQgc3RhdGUgc3BlY2lmaWNhbGx5IHRvIHdhaXQgZm9yIGENCjQzODk6ICAgICAgICAgICAgICAgIAkJCW5vdGlmaWNhdGlvbiB0aGVuIHVuYmxvY2sgaXQgbm93LiAqLw0KNDM5MDogICAgICAgICAgICAgICAgCQkJaWYoIGVPcmlnaW5hbE5vdGlmeVN0YXRlID09IGVXYWl0aW5nTm90aWZpY2F0aW9uICkNCkJGRDAzMUY0ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkKQkZEMDMxRjggICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDMxRkEgIDAwNTdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMzJBQwpCRkQwMzFGQyAgMEMwMDAwNTcgICBTTEwgVjAsIFM3LCAxCkJGRDAzMUZFICAgICAgMEMwMCAgIE5PUAo0MzkxOiAgICAgICAgICAgICAgICAJCQl7DQo0MzkyOiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRhc2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW4gZXZlbnQgbGlzdC4gKi8NCjQzOTM6ICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIGxpc3RMSVNUX0lURU1fQ09OVEFJTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApID09IE5VTEwgKTsNCkJGRDAzMjAwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDMyMDQgICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQpCRkQwMzIwNiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzIxQwpCRkQwMzIwQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMzIwQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAzMjBFICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4CkJGRDAzMjEwICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQpCRkQwMzIxMiAgMTEyOTMwQTAgICBBRERJVSBBMSwgWkVSTywgNDM5MwpCRkQwMzIxNCAgNzdFODExMjkgICBBRERJIFQxLCBUMSwgMzA2OTYKQkZEMDMyMTYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAzMjE4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAzMjFBICAgICAgMEMwMCAgIE5PUAo0Mzk0OiAgICAgICAgICAgICAgICANCjQzOTU6ICAgICAgICAgICAgICAgIAkJCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDMyMUMgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkKQkZEMDMyMjAgIDAwMjc0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDMyNzIKNDM5NjogICAgICAgICAgICAgICAgCQkJCXsNCjQzOTc6ICAgICAgICAgICAgICAgIAkJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwMzIyNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzMjI4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNApCRkQwMzIyQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMzIyQyAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQpCRkQwMzIyRSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxCkJGRDAzMjMwICAgICAgMEMwMCAgIE5PUAo0Mzk4OiAgICAgICAgICAgICAgICAJCQkJCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhUQ0IgKTsNCkJGRDAzMjMyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDMyMzYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMzIzOCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMzIzQSAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjEKQkZEMDMyM0MgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkKQkZEMDMyM0UgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkKQkZEMDMyNDIgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDMyNDQgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkKQkZEMDMyNDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzI0QyAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApCkJGRDAzMjRFICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDMyNTAgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMgpCRkQwMzI1MiAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDMyNTQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDMyNTYgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMzI1OCAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MApCRkQwMzI1QyAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDMyNUUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzI2MiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDMyNjQgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDMyNjYgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDMyNjggIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZApCRkQwMzI2QSAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikKQkZEMDMyNkMgICAgICAwQzAwICAgTk9QCkJGRDAzMjZFICAgICAgQ0MwQyAgIEIgMHhCRkQwMzI4OApCRkQwMzI3MCAgICAgIDBDMDAgICBOT1AKNDM5OTogICAgICAgICAgICAgICAgCQkJCX0NCjQ0MDA6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQo0NDAxOiAgICAgICAgICAgICAgICAJCQkJew0KNDQwMjogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgZGVsYXllZCBhbmQgcmVhZHkgbGlzdHMgY2Fubm90IGJlIGFjY2Vzc2VkLCBzbyBob2xkDQo0NDAzOiAgICAgICAgICAgICAgICAJCQkJCXRoaXMgdGFzayBwZW5kaW5nIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgcmVzdW1lZC4gKi8NCjQ0MDQ6ICAgICAgICAgICAgICAgIAkJCQkJdkxpc3RJbnNlcnRFbmQoICYoIHhQZW5kaW5nUmVhZHlMaXN0ICksICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwMzI3MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzMjc0ICA2RDJDMDAxMCAgIEVYVCBaRVJPLCBTMCwgMjAsIDE0CkJGRDAzMjc2ICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQKQkZEMDMyNzggIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDMyN0EgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQpCRkQwMzI3QyAgODBEMDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU2MApCRkQwMzI4MCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMzI4MiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kCkJGRDAzMjg0ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQpCRkQwMzI4NiAgICAgIDBDMDAgICBOT1AKNDQwNTogICAgICAgICAgICAgICAgCQkJCX0NCjQ0MDY6ICAgICAgICAgICAgICAgIA0KNDQwNzogICAgICAgICAgICAgICAgCQkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA+IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwMzI4OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzMjhDICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkKQkZEMDMyOEUgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkKQkZEMDMyOTIgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQpCRkQwMzI5NCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDMyOTYgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDAzMjk4ICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzMkFDCjQ0MDg6ICAgICAgICAgICAgICAgIAkJCQl7DQo0NDA5OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBub3RpZmllZCB0YXNrIGhhcyBhIHByaW9yaXR5IGFib3ZlIHRoZSBjdXJyZW50bHkNCjQ0MTA6ICAgICAgICAgICAgICAgIAkJCQkJZXhlY3V0aW5nIHRhc2sgc28gYSB5aWVsZCBpcyByZXF1aXJlZC4gKi8NCjQ0MTE6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwMzI5QyAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAzMkEwICAwMDA0NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzMkFDCjQ0MTI6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDQxMzogICAgICAgICAgICAgICAgCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQpCRkQwMzJBNCAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAzMkE4ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAzMkFBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0NDE0OiAgICAgICAgICAgICAgICAJCQkJCX0NCjQ0MTU6ICAgICAgICAgICAgICAgIAkJCQl9DQo0NDE2OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNDQxNzogICAgICAgICAgICAgICAgCQkJCXsNCjQ0MTg6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNDQxOTogICAgICAgICAgICAgICAgCQkJCX0NCjQ0MjA6ICAgICAgICAgICAgICAgIAkJCX0NCjQ0MjE6ICAgICAgICAgICAgICAgIAkJfQ0KNDQyMjogICAgICAgICAgICAgICAgCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKTsNCkJGRDAzMkFDICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDMyQjAgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDMyQjIgICAgICA0RDVFICAgQURESVUgVDIsIFQyLCAtMQpCRkQwMzJCNCAgICAgIDBDMDAgICBOT1AKNDQyMzogICAgICAgICAgICAgICAgCX0NCkJGRDAzMkI2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAzMkI4ICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDMyQkEgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwMzJCQyAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDAzMkJFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDMyQzAgICAgICAwQzAwICAgTk9QCjQ0MjQ6ICAgICAgICAgICAgICAgIA0KNDQyNTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgKi8NCjQ0MjY6ICAgICAgICAgICAgICAgIA0KNDQyNzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0NDI4OiAgICAgICAgICAgICAgICANCjQ0Mjk6ICAgICAgICAgICAgICAgIA0KNDQzMDogICAgICAgICAgICAgICAgI2lmZGVmIEZSRUVSVE9TX01PRFVMRV9URVNUDQo0NDMxOiAgICAgICAgICAgICAgICAJI2luY2x1ZGUgInRhc2tzX3Rlc3RfYWNjZXNzX2Z1bmN0aW9ucy5oIg0KNDQzMjogICAgICAgICAgICAgICAgI2VuZGlmDQo0NDMzOiAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3Mvc291cmNlL3F1ZXVlLmMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKg0KMjogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIFY4LjIuMSAtIENvcHlyaWdodCAoQykgMjAxNSBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCjM6ICAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQo0OiAgICAgICAgICAgICAgICAgICANCjU6ICAgICAgICAgICAgICAgICAgICAgICBWSVNJVCBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBUTyBFTlNVUkUgWU9VIEFSRSBVU0lORyBUSEUgTEFURVNUIFZFUlNJT04uDQo2OiAgICAgICAgICAgICAgICAgICANCjc6ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KODogICAgICAgICAgICAgICAgICAgDQo5OiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KMTA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KMTE6ICAgICAgICAgICAgICAgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA+PiFBTkQgTU9ESUZJRUQgQlkhPDwgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCjEyOiAgICAgICAgICAgICAgICAgIA0KMTM6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTQ6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIE5PVEU6IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8gICAgICE8PA0KMTU6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyAgICE8PA0KMTY6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIG9ibGlnZWQgdG8gcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgICAgICE8PA0KMTc6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TIGtlcm5lbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE8PA0KMTg6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTk6ICAgICAgICAgICAgICAgICAgDQoyMDogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZDQoyMTogICAgICAgICAgICAgICAgICAgICAgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUw0KMjI6ICAgICAgICAgICAgICAgICAgICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEZ1bGwgbGljZW5zZSB0ZXh0IGlzIGF2YWlsYWJsZSBvbiB0aGUgZm9sbG93aW5nDQoyMzogICAgICAgICAgICAgICAgICAgICAgbGluazogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwNCjI0OiAgICAgICAgICAgICAgICAgIA0KMjU6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoyNzogICAgICAgICAgICAgICAgICAgICAgICogICAgRnJlZVJUT1MgcHJvdmlkZXMgY29tcGxldGVseSBmcmVlIHlldCBwcm9mZXNzaW9uYWxseSBkZXZlbG9wZWQsICAgICoNCjI4OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICByb2J1c3QsIHN0cmljdGx5IHF1YWxpdHkgY29udHJvbGxlZCwgc3VwcG9ydGVkLCBhbmQgY3Jvc3MgICAgICAgICAgKg0KMjk6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHBsYXRmb3JtIHNvZnR3YXJlIHRoYXQgaXMgbW9yZSB0aGFuIGp1c3QgdGhlIG1hcmtldCBsZWFkZXIsIGl0ICAgICAqDQozMDogICAgICAgICAgICAgICAgICAgICAgICogICAgaXMgdGhlIGluZHVzdHJ5J3MgZGUgZmFjdG8gc3RhbmRhcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMxOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzI6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEhlbHAgeW91cnNlbGYgZ2V0IHN0YXJ0ZWQgcXVpY2tseSB3aGlsZSBzaW11bHRhbmVvdXNseSBoZWxwaW5nICAgICAqDQozMzogICAgICAgICAgICAgICAgICAgICAgICogICAgdG8gc3VwcG9ydCB0aGUgRnJlZVJUT1MgcHJvamVjdCBieSBwdXJjaGFzaW5nIGEgRnJlZVJUT1MgICAgICAgICAgICoNCjM0OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0dXRvcmlhbCBib29rLCByZWZlcmVuY2UgbWFudWFsLCBvciBib3RoOiAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzU6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM3OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAtIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nDQo0MDogICAgICAgICAgICAgICAgICAgICAgdGhlIEZBUSBwYWdlICJNeSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/Ii4gIEhhdmUgeW91DQo0MTogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBjb25maWdBU1NFUlQoKT8NCjQyOiAgICAgICAgICAgICAgICAgIA0KNDM6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3N1cHBvcnQgLSBJbiByZXR1cm4gZm9yIHJlY2VpdmluZyB0aGlzIHRvcCBxdWFsaXR5DQo0NDogICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgc29mdHdhcmUgZm9yIGZyZWUgd2UgcmVxdWVzdCB5b3UgYXNzaXN0IG91ciBnbG9iYWwgY29tbXVuaXR5IGJ5DQo0NTogICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhdGluZyBpbiB0aGUgc3VwcG9ydCBmb3J1bS4NCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3RyYWluaW5nIC0gSW52ZXN0aW5nIGluIHRyYWluaW5nIGFsbG93cyB5b3VyIHRlYW0gdG8NCjQ4OiAgICAgICAgICAgICAgICAgICAgICBiZSBhcyBwcm9kdWN0aXZlIGFzIHBvc3NpYmxlIGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAgTm93IHlvdSBjYW4gcmVjZWl2ZQ0KNDk6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIHRyYWluaW5nIGRpcmVjdGx5IGZyb20gUmljaGFyZCBCYXJyeSwgQ0VPIG9mIFJlYWwgVGltZSBFbmdpbmVlcnMNCjUwOiAgICAgICAgICAgICAgICAgICAgICBMdGQsIGFuZCB0aGUgd29ybGQncyBsZWFkaW5nIGF1dGhvcml0eSBvbiB0aGUgd29ybGQncyBsZWFkaW5nIFJUT1MuDQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KNTM6ICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wsIGEgRE9TDQo1NDogICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSBGQVQgZmlsZSBzeXN0ZW0sIGFuZCBvdXIgdGlueSB0aHJlYWQgYXdhcmUgVURQL0lQIHN0YWNrLg0KNTU6ICAgICAgICAgICAgICAgICAgDQo1NjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvbGFicyAtIFdoZXJlIG5ldyBGcmVlUlRPUyBwcm9kdWN0cyBnbyB0byBpbmN1YmF0ZS4NCjU3OiAgICAgICAgICAgICAgICAgICAgICBDb21lIGFuZCB0cnkgRnJlZVJUT1MrVENQLCBvdXIgbmV3IG9wZW4gc291cmNlIFRDUC9JUCBzdGFjayBmb3IgRnJlZVJUT1MuDQo1ODogICAgICAgICAgICAgICAgICANCjU5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkLiBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2gNCjYwOiAgICAgICAgICAgICAgICAgICAgICBJbnRlZ3JpdHkgU3lzdGVtcyBsdGQuIHRvIHNlbGwgdW5kZXIgdGhlIE9wZW5SVE9TIGJyYW5kLiAgTG93IGNvc3QgT3BlblJUT1MNCjYxOiAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcyBvZmZlciB0aWNrZXRlZCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24gYW5kIGNvbW1lcmNpYWwgbWlkZGxld2FyZS4NCjYyOiAgICAgICAgICAgICAgICAgIA0KNjM6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvIHByb3ZpZGUgYSBzYWZldHkNCjY0OiAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gZm9yIHVzZSBpbiBzYWZldHkgYW5kDQo2NTogICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIHByb3ZhYmxlIGRlcGVuZGFiaWxpdHkuDQo2NjogICAgICAgICAgICAgICAgICANCjY3OiAgICAgICAgICAgICAgICAgICAgICAxIHRhYiA9PSA0IHNwYWNlcyENCjY4OiAgICAgICAgICAgICAgICAgICovDQo2OTogICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4NCjcxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4NCjcyOiAgICAgICAgICAgICAgICAgIA0KNzM6ICAgICAgICAgICAgICAgICAgLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZw0KNzQ6ICAgICAgICAgICAgICAgICAgYWxsIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgTVBVIHdyYXBwZXJzLiAgVGhhdCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4NCjc1OiAgICAgICAgICAgICAgICAgIHRhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQo3NjogICAgICAgICAgICAgICAgICAjZGVmaW5lIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQo3NzogICAgICAgICAgICAgICAgICANCjc4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KNzk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInRhc2suaCINCjgwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJxdWV1ZS5oIg0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfQ09fUk9VVElORVMgPT0gMSApDQo4MzogICAgICAgICAgICAgICAgICAJI2luY2x1ZGUgImNyb3V0aW5lLmgiDQo4NDogICAgICAgICAgICAgICAgICAjZW5kaWYNCjg1OiAgICAgICAgICAgICAgICAgIA0KODY6ICAgICAgICAgICAgICAgICAgLyogTGludCBlOTYxIGFuZCBlNzUwIGFyZSBzdXBwcmVzc2VkIGFzIGEgTUlTUkEgZXhjZXB0aW9uIGp1c3RpZmllZCBiZWNhdXNlIHRoZQ0KODc6ICAgICAgICAgICAgICAgICAgTVBVIHBvcnRzIHJlcXVpcmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgdG8gYmUgZGVmaW5lZCBmb3IgdGhlDQo4ODogICAgICAgICAgICAgICAgICBoZWFkZXIgZmlsZXMgYWJvdmUsIGJ1dCBub3QgaW4gdGhpcyBmaWxlLCBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdA0KODk6ICAgICAgICAgICAgICAgICAgcHJpdmlsZWdlZCBWcyB1bnByaXZpbGVnZWQgbGlua2FnZSBhbmQgcGxhY2VtZW50LiAqLw0KOTA6ICAgICAgICAgICAgICAgICAgI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIC8qbGludCAhZTk2MSAhZTc1MC4gKi8NCjkxOiAgICAgICAgICAgICAgICAgIA0KOTI6ICAgICAgICAgICAgICAgICAgDQo5MzogICAgICAgICAgICAgICAgICAvKiBDb25zdGFudHMgdXNlZCB3aXRoIHRoZSB4UnhMb2NrIGFuZCB4VHhMb2NrIHN0cnVjdHVyZSBtZW1iZXJzLiAqLw0KOTQ6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBxdWV1ZVVOTE9DS0VECQkJCQkoICggQmFzZVR5cGVfdCApIC0xICkNCjk1OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcXVldWVMT0NLRURfVU5NT0RJRklFRAkJCSggKCBCYXNlVHlwZV90ICkgMCApDQo5NjogICAgICAgICAgICAgICAgICANCjk3OiAgICAgICAgICAgICAgICAgIC8qIFdoZW4gdGhlIFF1ZXVlX3Qgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgYmFzZSBxdWV1ZSBpdHMgcGNIZWFkIGFuZA0KOTg6ICAgICAgICAgICAgICAgICAgcGNUYWlsIG1lbWJlcnMgYXJlIHVzZWQgYXMgcG9pbnRlcnMgaW50byB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLiAgV2hlbiB0aGUNCjk5OiAgICAgICAgICAgICAgICAgIFF1ZXVlX3Qgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgbXV0ZXggcGNIZWFkIGFuZCBwY1RhaWwgcG9pbnRlcnMgYXJlDQoxMDA6ICAgICAgICAgICAgICAgICBub3QgbmVjZXNzYXJ5LCBhbmQgdGhlIHBjSGVhZCBwb2ludGVyIGlzIHNldCB0byBOVUxMIHRvIGluZGljYXRlIHRoYXQgdGhlDQoxMDE6ICAgICAgICAgICAgICAgICBwY1RhaWwgcG9pbnRlciBhY3R1YWxseSBwb2ludHMgdG8gdGhlIG11dGV4IGhvbGRlciAoaWYgYW55KS4gIE1hcCBhbHRlcm5hdGl2ZQ0KMTAyOiAgICAgICAgICAgICAgICAgbmFtZXMgdG8gdGhlIHBjSGVhZCBhbmQgcGNUYWlsIHN0cnVjdHVyZSBtZW1iZXJzIHRvIGVuc3VyZSB0aGUgcmVhZGFiaWxpdHkgb2YNCjEwMzogICAgICAgICAgICAgICAgIHRoZSBjb2RlIGlzIG1haW50YWluZWQgZGVzcGl0ZSB0aGlzIGR1YWwgdXNlIG9mIHR3byBzdHJ1Y3R1cmUgbWVtYmVycy4gIEFuDQoxMDQ6ICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSB0byB1c2UgYSB1bmlvbiwgYnV0IHVzZSBvZiBhIHVuaW9uIGlzDQoxMDU6ICAgICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSBjb2Rpbmcgc3RhbmRhcmQgKGFsdGhvdWdoIGFuIGV4Y2VwdGlvbiB0byB0aGUgc3RhbmRhcmQgaGFzIGJlZW4NCjEwNjogICAgICAgICAgICAgICAgIHBlcm1pdHRlZCB3aGVyZSB0aGUgZHVhbCB1c2UgYWxzbyBzaWduaWZpY2FudGx5IGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlDQoxMDc6ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgbWVtYmVyKS4gKi8NCjEwODogICAgICAgICAgICAgICAgICNkZWZpbmUgcHhNdXRleEhvbGRlcgkJCQkJcGNUYWlsDQoxMDk6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHV4UXVldWVUeXBlCQkJCQkJcGNIZWFkDQoxMTA6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHF1ZXVlUVVFVUVfSVNfTVVURVgJCQkJTlVMTA0KMTExOiAgICAgICAgICAgICAgICAgDQoxMTI6ICAgICAgICAgICAgICAgICAvKiBTZW1hcGhvcmVzIGRvIG5vdCBhY3R1YWxseSBzdG9yZSBvciBjb3B5IGRhdGEsIHNvIGhhdmUgYW4gaXRlbSBzaXplIG9mDQoxMTM6ICAgICAgICAgICAgICAgICB6ZXJvLiAqLw0KMTE0OiAgICAgICAgICAgICAgICAgI2RlZmluZSBxdWV1ZVNFTUFQSE9SRV9RVUVVRV9JVEVNX0xFTkdUSCAoICggVUJhc2VUeXBlX3QgKSAwICkNCjExNTogICAgICAgICAgICAgICAgICNkZWZpbmUgcXVldWVNVVRFWF9HSVZFX0JMT0NLX1RJTUUJCSAoICggVGlja1R5cGVfdCApIDBVICkNCjExNjogICAgICAgICAgICAgICAgIA0KMTE3OiAgICAgICAgICAgICAgICAgI2lmKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICkNCjExODogICAgICAgICAgICAgICAgIAkvKiBJZiB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQgdGhlbiBhIHlpZWxkIHNob3VsZCBub3QgYmUNCjExOTogICAgICAgICAgICAgICAgIAlwZXJmb3JtZWQganVzdCBiZWNhdXNlIGEgaGlnaGVyIHByaW9yaXR5IHRhc2sgaGFzIGJlZW4gd29rZW4uICovDQoxMjA6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBxdWV1ZVlJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKQ0KMTIxOiAgICAgICAgICAgICAgICAgI2Vsc2UNCjEyMjogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpIHBvcnRZSUVMRF9XSVRISU5fQVBJKCkNCjEyMzogICAgICAgICAgICAgICAgICNlbmRpZg0KMTI0OiAgICAgICAgICAgICAgICAgDQoxMjU6ICAgICAgICAgICAgICAgICAvKg0KMTI2OiAgICAgICAgICAgICAgICAgICogRGVmaW5pdGlvbiBvZiB0aGUgcXVldWUgdXNlZCBieSB0aGUgc2NoZWR1bGVyLg0KMTI3OiAgICAgICAgICAgICAgICAgICogSXRlbXMgYXJlIHF1ZXVlZCBieSBjb3B5LCBub3QgcmVmZXJlbmNlLiAgU2VlIHRoZSBmb2xsb3dpbmcgbGluayBmb3IgdGhlDQoxMjg6ICAgICAgICAgICAgICAgICAgKiByYXRpb25hbGU6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL0VtYmVkZGVkLVJUT1MtUXVldWVzLmh0bWwNCjEyOTogICAgICAgICAgICAgICAgICAqLw0KMTMwOiAgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVEZWZpbml0aW9uDQoxMzE6ICAgICAgICAgICAgICAgICB7DQoxMzI6ICAgICAgICAgICAgICAgICAJaW50OF90ICpwY0hlYWQ7CQkJCQkvKjwgUG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlIHN0b3JhZ2UgYXJlYS4gKi8NCjEzMzogICAgICAgICAgICAgICAgIAlpbnQ4X3QgKnBjVGFpbDsJCQkJCS8qPCBQb2ludHMgdG8gdGhlIGJ5dGUgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLiAgT25jZSBtb3JlIGJ5dGUgaXMgYWxsb2NhdGVkIHRoYW4gbmVjZXNzYXJ5IHRvIHN0b3JlIHRoZSBxdWV1ZSBpdGVtcywgdGhpcyBpcyB1c2VkIGFzIGEgbWFya2VyLiAqLw0KMTM0OiAgICAgICAgICAgICAgICAgCWludDhfdCAqcGNXcml0ZVRvOwkJCQkvKjwgUG9pbnRzIHRvIHRoZSBmcmVlIG5leHQgcGxhY2UgaW4gdGhlIHN0b3JhZ2UgYXJlYS4gKi8NCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgCXVuaW9uCQkJCQkJCS8qIFVzZSBvZiBhIHVuaW9uIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgY29kaW5nIHN0YW5kYXJkIHRvIGVuc3VyZSB0d28gbXV0dWFsbHkgZXhjbHVzaXZlIHN0cnVjdHVyZSBtZW1iZXJzIGRvbid0IGFwcGVhciBzaW11bHRhbmVvdXNseSAod2FzdGluZyBSQU0pLiAqLw0KMTM3OiAgICAgICAgICAgICAgICAgCXsNCjEzODogICAgICAgICAgICAgICAgIAkJaW50OF90ICpwY1JlYWRGcm9tOwkJCS8qPCBQb2ludHMgdG8gdGhlIGxhc3QgcGxhY2UgdGhhdCBhIHF1ZXVlZCBpdGVtIHdhcyByZWFkIGZyb20gd2hlbiB0aGUgc3RydWN0dXJlIGlzIHVzZWQgYXMgYSBxdWV1ZS4gKi8NCjEzOTogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QgdXhSZWN1cnNpdmVDYWxsQ291bnQ7Lyo8IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgYSByZWN1cnNpdmUgbXV0ZXggaGFzIGJlZW4gcmVjdXJzaXZlbHkgJ3Rha2VuJyB3aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyBhIG11dGV4LiAqLw0KMTQwOiAgICAgICAgICAgICAgICAgCX0gdTsNCjE0MTogICAgICAgICAgICAgICAgIA0KMTQyOiAgICAgICAgICAgICAgICAgCUxpc3RfdCB4VGFza3NXYWl0aW5nVG9TZW5kOwkJLyo8IExpc3Qgb2YgdGFza3MgdGhhdCBhcmUgYmxvY2tlZCB3YWl0aW5nIHRvIHBvc3Qgb250byB0aGlzIHF1ZXVlLiAgU3RvcmVkIGluIHByaW9yaXR5IG9yZGVyLiAqLw0KMTQzOiAgICAgICAgICAgICAgICAgCUxpc3RfdCB4VGFza3NXYWl0aW5nVG9SZWNlaXZlOwkvKjwgTGlzdCBvZiB0YXNrcyB0aGF0IGFyZSBibG9ja2VkIHdhaXRpbmcgdG8gcmVhZCBmcm9tIHRoaXMgcXVldWUuICBTdG9yZWQgaW4gcHJpb3JpdHkgb3JkZXIuICovDQoxNDQ6ICAgICAgICAgICAgICAgICANCjE0NTogICAgICAgICAgICAgICAgIAl2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eE1lc3NhZ2VzV2FpdGluZzsvKjwgVGhlIG51bWJlciBvZiBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLiAqLw0KMTQ2OiAgICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4TGVuZ3RoOwkJCS8qPCBUaGUgbGVuZ3RoIG9mIHRoZSBxdWV1ZSBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgaXRlbXMgaXQgd2lsbCBob2xkLCBub3QgdGhlIG51bWJlciBvZiBieXRlcy4gKi8NCjE0NzogICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eEl0ZW1TaXplOwkJCS8qPCBUaGUgc2l6ZSBvZiBlYWNoIGl0ZW1zIHRoYXQgdGhlIHF1ZXVlIHdpbGwgaG9sZC4gKi8NCjE0ODogICAgICAgICAgICAgICAgIA0KMTQ5OiAgICAgICAgICAgICAgICAgCXZvbGF0aWxlIEJhc2VUeXBlX3QgeFJ4TG9jazsJLyo8IFN0b3JlcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlIChyZW1vdmVkIGZyb20gdGhlIHF1ZXVlKSB3aGlsZSB0aGUgcXVldWUgd2FzIGxvY2tlZC4gIFNldCB0byBxdWV1ZVVOTE9DS0VEIHdoZW4gdGhlIHF1ZXVlIGlzIG5vdCBsb2NrZWQuICovDQoxNTA6ICAgICAgICAgICAgICAgICAJdm9sYXRpbGUgQmFzZVR5cGVfdCB4VHhMb2NrOwkvKjwgU3RvcmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgdHJhbnNtaXR0ZWQgdG8gdGhlIHF1ZXVlIChhZGRlZCB0byB0aGUgcXVldWUpIHdoaWxlIHRoZSBxdWV1ZSB3YXMgbG9ja2VkLiAgU2V0IHRvIHF1ZXVlVU5MT0NLRUQgd2hlbiB0aGUgcXVldWUgaXMgbm90IGxvY2tlZC4gKi8NCjE1MTogICAgICAgICAgICAgICAgIA0KMTUyOiAgICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjE1MzogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QgdXhRdWV1ZU51bWJlcjsNCjE1NDogICAgICAgICAgICAgICAgIAkJdWludDhfdCB1Y1F1ZXVlVHlwZTsNCjE1NTogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE1NjogICAgICAgICAgICAgICAgIA0KMTU3OiAgICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMTU4OiAgICAgICAgICAgICAgICAgCQlzdHJ1Y3QgUXVldWVEZWZpbml0aW9uICpweFF1ZXVlU2V0Q29udGFpbmVyOw0KMTU5OiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMTYwOiAgICAgICAgICAgICAgICAgDQoxNjE6ICAgICAgICAgICAgICAgICB9IHhRVUVVRTsNCjE2MjogICAgICAgICAgICAgICAgIA0KMTYzOiAgICAgICAgICAgICAgICAgLyogVGhlIG9sZCB4UVVFVUUgbmFtZSBpcyBtYWludGFpbmVkIGFib3ZlIHRoZW4gdHlwZWRlZmVkIHRvIHRoZSBuZXcgUXVldWVfdA0KMTY0OiAgICAgICAgICAgICAgICAgbmFtZSBiZWxvdyB0byBlbmFibGUgdGhlIHVzZSBvZiBvbGRlciBrZXJuZWwgYXdhcmUgZGVidWdnZXJzLiAqLw0KMTY1OiAgICAgICAgICAgICAgICAgdHlwZWRlZiB4UVVFVUUgUXVldWVfdDsNCjE2NjogICAgICAgICAgICAgICAgIA0KMTY3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNjg6ICAgICAgICAgICAgICAgICANCjE2OTogICAgICAgICAgICAgICAgIC8qDQoxNzA6ICAgICAgICAgICAgICAgICAgKiBUaGUgcXVldWUgcmVnaXN0cnkgaXMganVzdCBhIG1lYW5zIGZvciBrZXJuZWwgYXdhcmUgZGVidWdnZXJzIHRvIGxvY2F0ZQ0KMTcxOiAgICAgICAgICAgICAgICAgICogcXVldWUgc3RydWN0dXJlcy4gIEl0IGhhcyBubyBvdGhlciBwdXJwb3NlIHNvIGlzIGFuIG9wdGlvbmFsIGNvbXBvbmVudC4NCjE3MjogICAgICAgICAgICAgICAgICAqLw0KMTczOiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSA+IDAgKQ0KMTc0OiAgICAgICAgICAgICAgICAgDQoxNzU6ICAgICAgICAgICAgICAgICAJLyogVGhlIHR5cGUgc3RvcmVkIHdpdGhpbiB0aGUgcXVldWUgcmVnaXN0cnkgYXJyYXkuICBUaGlzIGFsbG93cyBhIG5hbWUNCjE3NjogICAgICAgICAgICAgICAgIAl0byBiZSBhc3NpZ25lZCB0byBlYWNoIHF1ZXVlIG1ha2luZyBrZXJuZWwgYXdhcmUgZGVidWdnaW5nIGEgbGl0dGxlDQoxNzc6ICAgICAgICAgICAgICAgICAJbW9yZSB1c2VyIGZyaWVuZGx5LiAqLw0KMTc4OiAgICAgICAgICAgICAgICAgCXR5cGVkZWYgc3RydWN0IFFVRVVFX1JFR0lTVFJZX0lURU0NCjE3OTogICAgICAgICAgICAgICAgIAl7DQoxODA6ICAgICAgICAgICAgICAgICAJCWNvbnN0IGNoYXIgKnBjUXVldWVOYW1lOyAvKmxpbnQgIWU5NzEgVW5xdWFsaWZpZWQgY2hhciB0eXBlcyBhcmUgYWxsb3dlZCBmb3Igc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMgb25seS4gKi8NCjE4MTogICAgICAgICAgICAgICAgIAkJUXVldWVIYW5kbGVfdCB4SGFuZGxlOw0KMTgyOiAgICAgICAgICAgICAgICAgCX0geFF1ZXVlUmVnaXN0cnlJdGVtOw0KMTgzOiAgICAgICAgICAgICAgICAgDQoxODQ6ICAgICAgICAgICAgICAgICAJLyogVGhlIG9sZCB4UXVldWVSZWdpc3RyeUl0ZW0gbmFtZSBpcyBtYWludGFpbmVkIGFib3ZlIHRoZW4gdHlwZWRlZmVkIHRvIHRoZQ0KMTg1OiAgICAgICAgICAgICAgICAgCW5ldyB4UXVldWVSZWdpc3RyeUl0ZW0gbmFtZSBiZWxvdyB0byBlbmFibGUgdGhlIHVzZSBvZiBvbGRlciBrZXJuZWwgYXdhcmUNCjE4NjogICAgICAgICAgICAgICAgIAlkZWJ1Z2dlcnMuICovDQoxODc6ICAgICAgICAgICAgICAgICAJdHlwZWRlZiB4UXVldWVSZWdpc3RyeUl0ZW0gUXVldWVSZWdpc3RyeUl0ZW1fdDsNCjE4ODogICAgICAgICAgICAgICAgIA0KMTg5OiAgICAgICAgICAgICAgICAgCS8qIFRoZSBxdWV1ZSByZWdpc3RyeSBpcyBzaW1wbHkgYW4gYXJyYXkgb2YgUXVldWVSZWdpc3RyeUl0ZW1fdCBzdHJ1Y3R1cmVzLg0KMTkwOiAgICAgICAgICAgICAgICAgCVRoZSBwY1F1ZXVlTmFtZSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUgYmVpbmcgTlVMTCBpcyBpbmRpY2F0aXZlIG9mIHRoZQ0KMTkxOiAgICAgICAgICAgICAgICAgCWFycmF5IHBvc2l0aW9uIGJlaW5nIHZhY2FudC4gKi8NCjE5MjogICAgICAgICAgICAgICAgIAlQUklWSUxFR0VEX0RBVEEgUXVldWVSZWdpc3RyeUl0ZW1fdCB4UXVldWVSZWdpc3RyeVsgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSBdOw0KMTkzOiAgICAgICAgICAgICAgICAgDQoxOTQ6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSAqLw0KMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICAvKg0KMTk3OiAgICAgICAgICAgICAgICAgICogVW5sb2NrcyBhIHF1ZXVlIGxvY2tlZCBieSBhIGNhbGwgdG8gcHJ2TG9ja1F1ZXVlLiAgTG9ja2luZyBhIHF1ZXVlIGRvZXMgbm90DQoxOTg6ICAgICAgICAgICAgICAgICAgKiBwcmV2ZW50IGFuIElTUiBmcm9tIGFkZGluZyBvciByZW1vdmluZyBpdGVtcyB0byB0aGUgcXVldWUsIGJ1dCBkb2VzIHByZXZlbnQNCjE5OTogICAgICAgICAgICAgICAgICAqIGFuIElTUiBmcm9tIHJlbW92aW5nIHRhc2tzIGZyb20gdGhlIHF1ZXVlIGV2ZW50IGxpc3RzLiAgSWYgYW4gSVNSIGZpbmRzIGENCjIwMDogICAgICAgICAgICAgICAgICAqIHF1ZXVlIGlzIGxvY2tlZCBpdCB3aWxsIGluc3RlYWQgaW5jcmVtZW50IHRoZSBhcHByb3ByaWF0ZSBxdWV1ZSBsb2NrIGNvdW50DQoyMDE6ICAgICAgICAgICAgICAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IGEgdGFzayBtYXkgcmVxdWlyZSB1bmJsb2NraW5nLiAgV2hlbiB0aGUgcXVldWUgaW4gdW5sb2NrZWQNCjIwMjogICAgICAgICAgICAgICAgICAqIHRoZXNlIGxvY2sgY291bnRzIGFyZSBpbnNwZWN0ZWQsIGFuZCB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIHRha2VuLg0KMjAzOiAgICAgICAgICAgICAgICAgICovDQoyMDQ6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZVbmxvY2tRdWV1ZSggUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICAvKg0KMjA3OiAgICAgICAgICAgICAgICAgICogVXNlcyBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFueSBkYXRhIGluIGEgcXVldWUuDQoyMDg6ICAgICAgICAgICAgICAgICAgKg0KMjA5OiAgICAgICAgICAgICAgICAgICogQHJldHVybiBwZFRSVUUgaWYgdGhlIHF1ZXVlIGNvbnRhaW5zIG5vIGl0ZW1zLCBvdGhlcndpc2UgcGRGQUxTRS4NCjIxMDogICAgICAgICAgICAgICAgICAqLw0KMjExOiAgICAgICAgICAgICAgICAgc3RhdGljIEJhc2VUeXBlX3QgcHJ2SXNRdWV1ZUVtcHR5KCBjb25zdCBRdWV1ZV90ICpweFF1ZXVlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjIxMjogICAgICAgICAgICAgICAgIA0KMjEzOiAgICAgICAgICAgICAgICAgLyoNCjIxNDogICAgICAgICAgICAgICAgICAqIFVzZXMgYSBjcml0aWNhbCBzZWN0aW9uIHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbnkgc3BhY2UgaW4gYSBxdWV1ZS4NCjIxNTogICAgICAgICAgICAgICAgICAqDQoyMTY6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGVyZSBpcyBubyBzcGFjZSwgb3RoZXJ3aXNlIHBkRkFMU0U7DQoyMTc6ICAgICAgICAgICAgICAgICAgKi8NCjIxODogICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydklzUXVldWVGdWxsKCBjb25zdCBRdWV1ZV90ICpweFF1ZXVlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjIxOTogICAgICAgICAgICAgICAgIA0KMjIwOiAgICAgICAgICAgICAgICAgLyoNCjIyMTogICAgICAgICAgICAgICAgICAqIENvcGllcyBhbiBpdGVtIGludG8gdGhlIHF1ZXVlLCBlaXRoZXIgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSBvciB0aGUNCjIyMjogICAgICAgICAgICAgICAgICAqIGJhY2sgb2YgdGhlIHF1ZXVlLg0KMjIzOiAgICAgICAgICAgICAgICAgICovDQoyMjQ6ICAgICAgICAgICAgICAgICBzdGF0aWMgQmFzZVR5cGVfdCBwcnZDb3B5RGF0YVRvUXVldWUoIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlLCBjb25zdCB2b2lkICpwdkl0ZW1Ub1F1ZXVlLCBjb25zdCBCYXNlVHlwZV90IHhQb3NpdGlvbiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMjU6ICAgICAgICAgICAgICAgICANCjIyNjogICAgICAgICAgICAgICAgIC8qDQoyMjc6ICAgICAgICAgICAgICAgICAgKiBDb3BpZXMgYW4gaXRlbSBvdXQgb2YgYSBxdWV1ZS4NCjIyODogICAgICAgICAgICAgICAgICAqLw0KMjI5OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2Q29weURhdGFGcm9tUXVldWUoIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjMwOiAgICAgICAgICAgICAgICAgDQoyMzE6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjIzMjogICAgICAgICAgICAgICAgIAkvKg0KMjMzOiAgICAgICAgICAgICAgICAgCSAqIENoZWNrcyB0byBzZWUgaWYgYSBxdWV1ZSBpcyBhIG1lbWJlciBvZiBhIHF1ZXVlIHNldCwgYW5kIGlmIHNvLCBub3RpZmllcw0KMjM0OiAgICAgICAgICAgICAgICAgCSAqIHRoZSBxdWV1ZSBzZXQgdGhhdCB0aGUgcXVldWUgY29udGFpbnMgZGF0YS4NCjIzNTogICAgICAgICAgICAgICAgIAkgKi8NCjIzNjogICAgICAgICAgICAgICAgIAlzdGF0aWMgQmFzZVR5cGVfdCBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lciggY29uc3QgUXVldWVfdCAqIGNvbnN0IHB4UXVldWUsIGNvbnN0IEJhc2VUeXBlX3QgeENvcHlQb3NpdGlvbiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMzc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjIzODogICAgICAgICAgICAgICAgIA0KMjM5OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDA6ICAgICAgICAgICAgICAgICANCjI0MTogICAgICAgICAgICAgICAgIC8qDQoyNDI6ICAgICAgICAgICAgICAgICAgKiBNYWNybyB0byBtYXJrIGEgcXVldWUgYXMgbG9ja2VkLiAgTG9ja2luZyBhIHF1ZXVlIHByZXZlbnRzIGFuIElTUiBmcm9tDQoyNDM6ICAgICAgICAgICAgICAgICAgKiBhY2Nlc3NpbmcgdGhlIHF1ZXVlIGV2ZW50IGxpc3RzLg0KMjQ0OiAgICAgICAgICAgICAgICAgICovDQoyNDU6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBydkxvY2tRdWV1ZSggcHhRdWV1ZSApCQkJCQkJCQlcDQoyNDY6ICAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7CQkJCQkJCQkJXA0KMjQ3OiAgICAgICAgICAgICAgICAgCXsJCQkJCQkJCQkJCQkJCVwNCjI0ODogICAgICAgICAgICAgICAgIAkJaWYoICggcHhRdWV1ZSApLT54UnhMb2NrID09IHF1ZXVlVU5MT0NLRUQgKQkJCVwNCjI0OTogICAgICAgICAgICAgICAgIAkJewkJCQkJCQkJCQkJCQlcDQoyNTA6ICAgICAgICAgICAgICAgICAJCQkoIHB4UXVldWUgKS0+eFJ4TG9jayA9IHF1ZXVlTE9DS0VEX1VOTU9ESUZJRUQ7CVwNCjI1MTogICAgICAgICAgICAgICAgIAkJfQkJCQkJCQkJCQkJCQlcDQoyNTI6ICAgICAgICAgICAgICAgICAJCWlmKCAoIHB4UXVldWUgKS0+eFR4TG9jayA9PSBxdWV1ZVVOTE9DS0VEICkJCQlcDQoyNTM6ICAgICAgICAgICAgICAgICAJCXsJCQkJCQkJCQkJCQkJXA0KMjU0OiAgICAgICAgICAgICAgICAgCQkJKCBweFF1ZXVlICktPnhUeExvY2sgPSBxdWV1ZUxPQ0tFRF9VTk1PRElGSUVEOwlcDQoyNTU6ICAgICAgICAgICAgICAgICAJCX0JCQkJCQkJCQkJCQkJXA0KMjU2OiAgICAgICAgICAgICAgICAgCX0JCQkJCQkJCQkJCQkJCVwNCjI1NzogICAgICAgICAgICAgICAgIAl0YXNrRVhJVF9DUklUSUNBTCgpDQoyNTg6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI1OTogICAgICAgICAgICAgICAgIA0KMjYwOiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UXVldWVHZW5lcmljUmVzZXQoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBCYXNlVHlwZV90IHhOZXdRdWV1ZSApDQoyNjE6ICAgICAgICAgICAgICAgICB7DQpCRkQwMzg4QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwMzg4RSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDAzODkwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDM4OTIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDM4OTQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwMzg5OCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpCjI2MjogICAgICAgICAgICAgICAgIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlID0gKCBRdWV1ZV90ICogKSB4UXVldWU7DQpCRkQwMzg5QyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAzOEEwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjYzOiAgICAgICAgICAgICAgICAgDQoyNjQ6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQpCRkQwMzhBNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzOEE4ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzOEJFCkJGRDAzOEFDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAzOEFFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDM4QjAgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDM4QjIgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwMzhCNCAgMDEwODMwQTAgICBBRERJVSBBMSwgWkVSTywgMjY0CkJGRDAzOEI4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMzhCQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMzhCQyAgICAgIDBDMDAgICBOT1AKMjY1OiAgICAgICAgICAgICAgICAgDQoyNjY6ICAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMzhCRSAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwMzhDMCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDM4QzIgICAgICAwQzAwICAgTk9QCjI2NzogICAgICAgICAgICAgICAgIAl7DQoyNjg6ICAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnBjVGFpbCA9IHB4UXVldWUtPnBjSGVhZCArICggcHhRdWV1ZS0+dXhMZW5ndGggKiBweFF1ZXVlLT51eEl0ZW1TaXplICk7DQpCRkQwMzhDNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzOEM4ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMzhDQSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAzOENFICAgICAgNkEzRiAgIExXIEEwLCA2MChWMSkKQkZEMDM4RDAgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwMzhENCAgMDA0MEZDNjMgICBMVyBWMSwgNjQoVjEpCkJGRDAzOEQ4ICAxQTEwMDA2NCAgIE1VTCBWMSwgQTAsIFYxCkJGRDAzOERBICAwNUI0MUExMCAgIFNCIFMwLCAxNDYwKFMwKQpCRkQwMzhEQyAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjEKQkZEMDM4REUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzhFMiAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkKMjY5OiAgICAgICAgICAgICAgICAgCQlweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA9ICggVUJhc2VUeXBlX3QgKSAwVTsNCkJGRDAzOEU0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM4RTggICAgICBFODJFICAgU1cgUzAsIDU2KFYwKQoyNzA6ICAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnBjV3JpdGVUbyA9IHB4UXVldWUtPnBjSGVhZDsNCkJGRDAzOEVBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM4RUUgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAzOEYwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM4RjQgICAgICBFOUEyICAgU1cgVjEsIDgoVjApCjI3MTogICAgICAgICAgICAgICAgIAkJcHhRdWV1ZS0+dS5wY1JlYWRGcm9tID0gcHhRdWV1ZS0+cGNIZWFkICsgKCAoIHB4UXVldWUtPnV4TGVuZ3RoIC0gKCBVQmFzZVR5cGVfdCApIDFVICkgKiBweFF1ZXVlLT51eEl0ZW1TaXplICk7DQpCRkQwMzhGNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzOEZBICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMzhGQyAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAzOTAwICAgICAgNjlCRiAgIExXIFYxLCA2MChWMSkKQkZEMDM5MDIgICAgICA2RTNFICAgQURESVUgQTAsIFYxLCAtMQpCRkQwMzkwNCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAzOTA4ICAwMDQwRkM2MyAgIExXIFYxLCA2NChWMSkKQkZEMDM5MEMgIDFBMTAwMDY0ICAgTVVMIFYxLCBBMCwgVjEKQkZEMDM5MEUgIDA1QjQxQTEwICAgU0IgUzAsIDE0NjAoUzApCkJGRDAzOTEwICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQpCRkQwMzkxMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzOTE2ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkKMjcyOiAgICAgICAgICAgICAgICAgCQlweFF1ZXVlLT54UnhMb2NrID0gcXVldWVVTkxPQ0tFRDsNCkJGRDAzOTE4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM5MUMgICAgICBFREZGICAgTEkgVjEsIC0xCkJGRDAzOTFFICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkKMjczOiAgICAgICAgICAgICAgICAgCQlweFF1ZXVlLT54VHhMb2NrID0gcXVldWVVTkxPQ0tFRDsNCkJGRDAzOTIyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM5MjYgICAgICBFREZGICAgTEkgVjEsIC0xCkJGRDAzOTI4ICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKMjc0OiAgICAgICAgICAgICAgICAgDQoyNzU6ICAgICAgICAgICAgICAgICAJCWlmKCB4TmV3UXVldWUgPT0gcGRGQUxTRSApDQpCRkQwMzkyQyAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDAzOTMwICAwMDIzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzOTdBCjI3NjogICAgICAgICAgICAgICAgIAkJew0KMjc3OiAgICAgICAgICAgICAgICAgCQkJLyogSWYgdGhlcmUgYXJlIHRhc2tzIGJsb2NrZWQgd2FpdGluZyB0byByZWFkIGZyb20gdGhlIHF1ZXVlLCB0aGVuDQoyNzg6ICAgICAgICAgICAgICAgICAJCQl0aGUgdGFza3Mgd2lsbCByZW1haW4gYmxvY2tlZCBhcyBhZnRlciB0aGlzIGZ1bmN0aW9uIGV4aXRzIHRoZSBxdWV1ZQ0KMjc5OiAgICAgICAgICAgICAgICAgCQkJd2lsbCBzdGlsbCBiZSBlbXB0eS4gIElmIHRoZXJlIGFyZSB0YXNrcyBibG9ja2VkIHdhaXRpbmcgdG8gd3JpdGUgdG8NCjI4MDogICAgICAgICAgICAgICAgIAkJCXRoZSBxdWV1ZSwgdGhlbiBvbmUgc2hvdWxkIGJlIHVuYmxvY2tlZCBhcyBhZnRlciB0aGlzIGZ1bmN0aW9uIGV4aXRzDQoyODE6ICAgICAgICAgICAgICAgICAJCQlpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHdyaXRlIHRvIGl0LiAqLw0KMjgyOiAgICAgICAgICAgICAgICAgCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCkJGRDAzOTM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM5MzggICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQpCRkQwMzkzQSAgMDAyRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzk5OAoyODM6ICAgICAgICAgICAgICAgICAJCQl7DQoyODQ6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgPT0gcGRUUlVFICkNCkJGRDAzOTNFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDM5NDIgICAgICA2RDI4ICAgQURESVUgVjAsIFYwLCAxNgpCRkQwMzk0NCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMzk0NiAgMjJCQzc3RTggICBKQUxTIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdApCRkQwMzk0OCAgMEMwMDIyQkMgICBMV0MyIFM1LCAzMDcyKEdQKQpCRkQwMzk0QSAgICAgIDBDMDAgICBOT1AKQkZEMDM5NEMgICAgICAwQzYyICAgTU9WRSBWMSwgVjAKQkZEMDM5NEUgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDM5NTAgIDAwMjJCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMzk5OApCRkQwMzk1MiAgMEMwMDAwMjIgICBTTEwgQVQsIFYwLCAxCkJGRDAzOTU0ICAgICAgMEMwMCAgIE5PUAoyODU6ICAgICAgICAgICAgICAgICAJCQkJew0KMjg2OiAgICAgICAgICAgICAgICAgCQkJCQlxdWV1ZVlJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKTsNCkJGRDAzOTU2ICA0RTE2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDM5NTggICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQpCRkQwMzk1QSAgICAgIDBDMDAgICBOT1AKQkZEMDM5NUMgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQpCRkQwMzk2MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAzOTY0ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwMzk2OCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCkJGRDAzOTZDICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDM5NzAgIDRFMjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDAzOTcyICAgICAgNEUyNiAgIEFERElVIFMxLCBTMSwgMwpCRkQwMzk3NCAgICAgIDBDMDAgICBOT1AKQkZEMDM5NzYgICAgICBDQzEwICAgQiAweEJGRDAzOTk4CkJGRDAzOTc4ICAgICAgMEMwMCAgIE5PUAoyODc6ICAgICAgICAgICAgICAgICAJCQkJfQ0KMjg4OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjI4OTogICAgICAgICAgICAgICAgIAkJCQl7DQoyOTA6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI5MTogICAgICAgICAgICAgICAgIAkJCQl9DQoyOTI6ICAgICAgICAgICAgICAgICAJCQl9DQoyOTM6ICAgICAgICAgICAgICAgICAJCQllbHNlDQoyOTQ6ICAgICAgICAgICAgICAgICAJCQl7DQoyOTU6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjk2OiAgICAgICAgICAgICAgICAgCQkJfQ0KMjk3OiAgICAgICAgICAgICAgICAgCQl9DQoyOTg6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjI5OTogICAgICAgICAgICAgICAgIAkJew0KMzAwOiAgICAgICAgICAgICAgICAgCQkJLyogRW5zdXJlIHRoZSBldmVudCBxdWV1ZXMgc3RhcnQgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuICovDQozMDE6ICAgICAgICAgICAgICAgICAJCQl2TGlzdEluaXRpYWxpc2UoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApOw0KQkZEMDM5N0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMzk3RSAgICAgIDZEMjggICBBRERJVSBWMCwgVjAsIDE2CkJGRDAzOTgwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAzOTgyICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlCkJGRDAzOTg0ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkKQkZEMDM5ODYgICAgICAwQzAwICAgTk9QCjMwMjogICAgICAgICAgICAgICAgIAkJCXZMaXN0SW5pdGlhbGlzZSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICk7DQpCRkQwMzk4OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzOThDICAwMDI0MzA0MiAgIEFERElVIFYwLCBWMCwgMzYKQkZEMDM5OTAgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDM5OTIgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UKQkZEMDM5OTQgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQpCRkQwMzk5NiAgICAgIDBDMDAgICBOT1AKMzAzOiAgICAgICAgICAgICAgICAgCQl9DQozMDQ6ICAgICAgICAgICAgICAgICAJfQ0KMzA1OiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMzk5OCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAzOTlBICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1MTlFCkJGRDAzOTlDICAgICAgMEMwMCAgIE5PUAozMDY6ICAgICAgICAgICAgICAgICANCjMwNzogICAgICAgICAgICAgICAgIAkvKiBBIHZhbHVlIGlzIHJldHVybmVkIGZvciBjYWxsaW5nIHNlbWFudGljIGNvbnNpc3RlbmN5IHdpdGggcHJldmlvdXMNCjMwODogICAgICAgICAgICAgICAgIAl2ZXJzaW9ucy4gKi8NCjMwOTogICAgICAgICAgICAgICAgIAlyZXR1cm4gcGRQQVNTOw0KQkZEMDM5OUUgICAgICBFRDAxICAgTEkgVjAsIDEKMzEwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDM5QTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDM5QTIgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwMzlBNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDAzOUE2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDM5QTggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMzlBQSAgICAgIDBDMDAgICBOT1AKMzExOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMTI6ICAgICAgICAgICAgICAgICANCjMxMzogICAgICAgICAgICAgICAgIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlR2VuZXJpY0NyZWF0ZSggY29uc3QgVUJhc2VUeXBlX3QgdXhRdWV1ZUxlbmd0aCwgY29uc3QgVUJhc2VUeXBlX3QgdXhJdGVtU2l6ZSwgY29uc3QgdWludDhfdCB1Y1F1ZXVlVHlwZSApDQozMTQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwM0RGNCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwM0RGNiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDAzREY4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDNERkEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDNERkMgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQpCRkQwM0UwMCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpCkJGRDAzRTA0ICAgICAgMEM0NiAgIE1PVkUgVjAsIEEyCkJGRDAzRTA2ICAwMDMwMTg1RSAgIFNCIFYwLCA0OChTOCkKMzE1OiAgICAgICAgICAgICAgICAgUXVldWVfdCAqcHhOZXdRdWV1ZTsNCjMxNjogICAgICAgICAgICAgICAgIHNpemVfdCB4UXVldWVTaXplSW5CeXRlczsNCjMxNzogICAgICAgICAgICAgICAgIFF1ZXVlSGFuZGxlX3QgeFJldHVybiA9IE5VTEw7DQpCRkQwM0UwQSAgMDAxNEY4MUUgICBTVyBaRVJPLCAyMChTOCkKMzE4OiAgICAgICAgICAgICAgICAgaW50OF90ICpwY0FsbG9jYXRlZEJ1ZmZlcjsNCjMxOTogICAgICAgICAgICAgICAgIA0KMzIwOiAgICAgICAgICAgICAgICAgCS8qIFJlbW92ZSBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1bnVzZWQgcGFyYW1ldGVycyBzaG91bGQNCjMyMTogICAgICAgICAgICAgICAgIAljb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgbm90IGJlIHNldCB0byAxLiAqLw0KMzIyOiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHVjUXVldWVUeXBlOw0KMzIzOiAgICAgICAgICAgICAgICAgDQozMjQ6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB1eFF1ZXVlTGVuZ3RoID4gKCBVQmFzZVR5cGVfdCApIDAgKTsNCkJGRDAzRTBFICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDNFMTIgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNFMjgKQkZEMDNFMTYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDNFMTggIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwM0UxQSAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwM0UxQyAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDAzRTFFICAwMTQ0MzBBMCAgIEFERElVIEExLCBaRVJPLCAzMjQKQkZEMDNFMjIgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAzRTI0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAzRTI2ICAgICAgMEMwMCAgIE5PUAozMjU6ICAgICAgICAgICAgICAgICANCjMyNjogICAgICAgICAgICAgICAgIAlpZiggdXhJdGVtU2l6ZSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwM0UyOCAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAzRTJDICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzRTM4CjMyNzogICAgICAgICAgICAgICAgIAl7DQozMjg6ICAgICAgICAgICAgICAgICAJCS8qIFRoZXJlIGlzIG5vdCBnb2luZyB0byBiZSBhIHF1ZXVlIHN0b3JhZ2UgYXJlYS4gKi8NCjMyOTogICAgICAgICAgICAgICAgIAkJeFF1ZXVlU2l6ZUluQnl0ZXMgPSAoIHNpemVfdCApIDA7DQpCRkQwM0UzMCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKQkZEMDNFMzQgICAgICBDQzBBICAgQiAweEJGRDAzRTRBCkJGRDAzRTM2ICAgICAgMEMwMCAgIE5PUAozMzA6ICAgICAgICAgICAgICAgICAJfQ0KMzMxOiAgICAgICAgICAgICAgICAgCWVsc2UNCjMzMjogICAgICAgICAgICAgICAgIAl7DQozMzM6ICAgICAgICAgICAgICAgICAJCS8qIFRoZSBxdWV1ZSBpcyBvbmUgYnl0ZSBsb25nZXIgdGhhbiBhc2tlZCBmb3IgdG8gbWFrZSB3cmFwIGNoZWNraW5nDQozMzQ6ICAgICAgICAgICAgICAgICAJCWVhc2llci9mYXN0ZXIuICovDQozMzU6ICAgICAgICAgICAgICAgICAJCXhRdWV1ZVNpemVJbkJ5dGVzID0gKCBzaXplX3QgKSAoIHV4UXVldWVMZW5ndGggKiB1eEl0ZW1TaXplICkgKyAoIHNpemVfdCApIDE7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cy4gKi8NCkJGRDAzRTM4ICAwMDI4RkM3RSAgIExXIFYxLCA0MChTOCkKQkZEMDNFM0MgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwM0U0MCAgMTIxMDAwNDMgICBNVUwgVjAsIFYxLCBWMApCRkQwM0U0MiAgNkQyMDEyMTAgICBBRERJIFMwLCBTMCwgMjc5MzYKQkZEMDNFNDQgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxCkJGRDAzRTQ2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzM2OiAgICAgICAgICAgICAgICAgCX0NCjMzNzogICAgICAgICAgICAgICAgIA0KMzM4OiAgICAgICAgICAgICAgICAgCS8qIEFsbG9jYXRlIHRoZSBuZXcgcXVldWUgc3RydWN0dXJlIGFuZCBzdG9yYWdlIGFyZWEuICovDQozMzk6ICAgICAgICAgICAgICAgICAJcGNBbGxvY2F0ZWRCdWZmZXIgPSAoIGludDhfdCAqICkgcHZQb3J0TWFsbG9jKCBzaXplb2YoIFF1ZXVlX3QgKSArIHhRdWV1ZVNpemVJbkJ5dGVzICk7DQpCRkQwM0U0QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAzRTRFICAwMDUwMzA0MiAgIEFERElVIFYwLCBWMCwgODAKQkZEMDNFNTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDNFNTQgIDExMTY3N0U4ICAgSkFMUyBwdlBvcnRNYWxsb2MKQkZEMDNFNTYgIDBDMDAxMTE2ICAgQURESSBUMCwgUzYsIDMwNzIKQkZEMDNFNTggICAgICAwQzAwICAgTk9QCkJGRDAzRTVBICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMzQwOiAgICAgICAgICAgICAgICAgDQozNDE6ICAgICAgICAgICAgICAgICAJaWYoIHBjQWxsb2NhdGVkQnVmZmVyICE9IE5VTEwgKQ0KQkZEMDNFNUUgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0U2MiAgMDAyRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0VDNAozNDI6ICAgICAgICAgICAgICAgICAJew0KMzQzOiAgICAgICAgICAgICAgICAgCQlweE5ld1F1ZXVlID0gKCBRdWV1ZV90ICogKSBwY0FsbG9jYXRlZEJ1ZmZlcjsgLypsaW50ICFlODI2IE1JU1JBIFRoZSBidWZmZXIgY2Fubm90IGJlIHRvbyBzbWFsbCBiZWNhdXNlIGl0IHdhcyBkaW1lbnNpb25lZCBieSBzaXplb2YoIFF1ZXVlX3QgKSArIHhRdWV1ZVNpemVJbkJ5dGVzLiAqLw0KQkZEMDNFNjYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0U2QSAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpCjM0NDogICAgICAgICAgICAgICAgIA0KMzQ1OiAgICAgICAgICAgICAgICAgCQlpZiggdXhJdGVtU2l6ZSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwM0U2RSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAzRTcyICAwMDA3NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzRTg0CjM0NjogICAgICAgICAgICAgICAgIAkJew0KMzQ3OiAgICAgICAgICAgICAgICAgCQkJLyogTm8gUkFNIHdhcyBhbGxvY2F0ZWQgZm9yIHRoZSBxdWV1ZSBzdG9yYWdlIGFyZWEsIGJ1dCBQQyBoZWFkDQozNDg6ICAgICAgICAgICAgICAgICAJCQljYW5ub3QgYmUgc2V0IHRvIE5VTEwgYmVjYXVzZSBOVUxMIGlzIHVzZWQgYXMgYSBrZXkgdG8gc2F5IHRoZSBxdWV1ZQ0KMzQ5OiAgICAgICAgICAgICAgICAgCQkJaXMgdXNlZCBhcyBhIG11dGV4LiAgVGhlcmVmb3JlIGp1c3Qgc2V0IHBjSGVhZCB0byBwb2ludCB0byB0aGUgcXVldWUNCjM1MDogICAgICAgICAgICAgICAgIAkJCWFzIGEgYmVuaWduIHZhbHVlIHRoYXQgaXMga25vd24gdG8gYmUgd2l0aGluIHRoZSBtZW1vcnkgbWFwLiAqLw0KMzUxOiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+cGNIZWFkID0gKCBpbnQ4X3QgKiApIHB4TmV3UXVldWU7DQpCRkQwM0U3NiAgMDAxQ0ZDN0UgICBMVyBWMSwgMjgoUzgpCkJGRDAzRTdBICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDNFN0UgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCkJGRDAzRTgwICAgICAgQ0MwOCAgIEIgMHhCRkQwM0U5MgpCRkQwM0U4MiAgICAgIDBDMDAgICBOT1AKMzUyOiAgICAgICAgICAgICAgICAgCQl9DQozNTM6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjM1NDogICAgICAgICAgICAgICAgIAkJew0KMzU1OiAgICAgICAgICAgICAgICAgCQkJLyogSnVtcCBwYXN0IHRoZSBxdWV1ZSBzdHJ1Y3R1cmUgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgdGhlIHF1ZXVlDQozNTY6ICAgICAgICAgICAgICAgICAJCQlzdG9yYWdlIGFyZWEgLSBhZGRpbmcgdGhlIHBhZGRpbmcgYnl0ZXMgdG8gZ2V0IGEgYmV0dGVyIGFsaWdubWVudC4gKi8NCjM1NzogICAgICAgICAgICAgICAgIAkJCXB4TmV3UXVldWUtPnBjSGVhZCA9IHBjQWxsb2NhdGVkQnVmZmVyICsgc2l6ZW9mKCBRdWV1ZV90ICk7DQpCRkQwM0U4NCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAzRTg4ICAwMDUwMzA2MiAgIEFERElVIFYxLCBWMCwgODAKQkZEMDNFOEMgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwM0U5MCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMzU4OiAgICAgICAgICAgICAgICAgCQl9DQozNTk6ICAgICAgICAgICAgICAgICANCjM2MDogICAgICAgICAgICAgICAgIAkJLyogSW5pdGlhbGlzZSB0aGUgcXVldWUgbWVtYmVycyBhcyBkZXNjcmliZWQgYWJvdmUgd2hlcmUgdGhlIHF1ZXVlIHR5cGUNCjM2MTogICAgICAgICAgICAgICAgIAkJaXMgZGVmaW5lZC4gKi8NCjM2MjogICAgICAgICAgICAgICAgIAkJcHhOZXdRdWV1ZS0+dXhMZW5ndGggPSB1eFF1ZXVlTGVuZ3RoOw0KQkZEMDNFOTIgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwM0U5NiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpCkJGRDAzRTlBICAgICAgRTlBRiAgIFNXIFYxLCA2MChWMCkKMzYzOiAgICAgICAgICAgICAgICAgCQlweE5ld1F1ZXVlLT51eEl0ZW1TaXplID0gdXhJdGVtU2l6ZTsNCkJGRDAzRTlDICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDNFQTAgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQpCRkQwM0VBNCAgMDA0MEY4NjIgICBTVyBWMSwgNjQoVjApCjM2NDogICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgeFF1ZXVlR2VuZXJpY1Jlc2V0KCBweE5ld1F1ZXVlLCBwZFRSVUUgKTsNCkJGRDAzRUE4ICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkKQkZEMDNFQUMgICAgICBFRTgxICAgTEkgQTEsIDEKQkZEMDNFQUUgIDFDNDY3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljUmVzZXQKQkZEMDNFQjAgIDBDMDAxQzQ2ICAgTEIgVjAsIDMwNzIoQTIpCkJGRDAzRUIyICAgICAgMEMwMCAgIE5PUAozNjU6ICAgICAgICAgICAgICAgICANCjM2NjogICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMzY3OiAgICAgICAgICAgICAgICAgCQl7DQozNjg6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT51Y1F1ZXVlVHlwZSA9IHVjUXVldWVUeXBlOw0KMzY5OiAgICAgICAgICAgICAgICAgCQl9DQozNzA6ICAgICAgICAgICAgICAgICAJCSNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjM3MTogICAgICAgICAgICAgICAgIA0KMzcyOiAgICAgICAgICAgICAgICAgCQkjaWYoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMzczOiAgICAgICAgICAgICAgICAgCQl7DQozNzQ6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT5weFF1ZXVlU2V0Q29udGFpbmVyID0gTlVMTDsNCkJGRDAzRUI0ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDNFQjggIDAwNENGODAyICAgU1cgWkVSTywgNzYoVjApCjM3NTogICAgICAgICAgICAgICAgIAkJfQ0KMzc2OiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjM3NzogICAgICAgICAgICAgICAgIA0KMzc4OiAgICAgICAgICAgICAgICAgCQl0cmFjZVFVRVVFX0NSRUFURSggcHhOZXdRdWV1ZSApOw0KMzc5OiAgICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcHhOZXdRdWV1ZTsNCkJGRDAzRUJDICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDNFQzAgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQozODA6ICAgICAgICAgICAgICAgICAJfQ0KMzgxOiAgICAgICAgICAgICAgICAgCWVsc2UNCjM4MjogICAgICAgICAgICAgICAgIAl7DQozODM6ICAgICAgICAgICAgICAgICAJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM4NDogICAgICAgICAgICAgICAgIAl9DQozODU6ICAgICAgICAgICAgICAgICANCjM4NjogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHhSZXR1cm4gKTsNCkJGRDAzRUM0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDNFQzggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNFREUKQkZEMDNFQ0MgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDNFQ0UgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwM0VEMCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwM0VEMiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDAzRUQ0ICAwMTgyMzBBMCAgIEFERElVIEExLCBaRVJPLCAzODYKQkZEMDNFRDggIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAzRURBICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAzRURDICAgICAgMEMwMCAgIE5PUAozODc6ICAgICAgICAgICAgICAgICANCjM4ODogICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDAzRURFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKMzg5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDNFRTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDNFRTQgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwM0VFNiAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDAzRUU4ICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDNFRUEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwM0VFQyAgICAgIDBDMDAgICBOT1AKMzkwOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozOTE6ICAgICAgICAgICAgICAgICANCjM5MjogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KMzkzOiAgICAgICAgICAgICAgICAgDQozOTQ6ICAgICAgICAgICAgICAgICAJUXVldWVIYW5kbGVfdCB4UXVldWVDcmVhdGVNdXRleCggY29uc3QgdWludDhfdCB1Y1F1ZXVlVHlwZSApDQozOTU6ICAgICAgICAgICAgICAgICAJew0KQkZEMDU5NTggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDU5NUEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNTk1QyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA1OTVFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA1OTYwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA1OTYyICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkKQkZEMDU5NjQgIEVFNTAwMDIwICAgQU5EIFNQLCBaRVJPLCBBVAozOTY6ICAgICAgICAgICAgICAgICAJUXVldWVfdCAqcHhOZXdRdWV1ZTsNCjM5NzogICAgICAgICAgICAgICAgIA0KMzk4OiAgICAgICAgICAgICAgICAgCQkvKiBQcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBwYXJhbWV0ZXJzIGlmDQozOTk6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSBkb2VzIG5vdCBlcXVhbCAxLiAqLw0KNDAwOiAgICAgICAgICAgICAgICAgCQkoIHZvaWQgKSB1Y1F1ZXVlVHlwZTsNCjQwMTogICAgICAgICAgICAgICAgIA0KNDAyOiAgICAgICAgICAgICAgICAgCQkvKiBBbGxvY2F0ZSB0aGUgbmV3IHF1ZXVlIHN0cnVjdHVyZS4gKi8NCjQwMzogICAgICAgICAgICAgICAgIAkJcHhOZXdRdWV1ZSA9ICggUXVldWVfdCAqICkgcHZQb3J0TWFsbG9jKCBzaXplb2YoIFF1ZXVlX3QgKSApOw0KQkZEMDU5NjYgICAgICBFRTUwICAgTEkgQTAsIDgwCkJGRDA1OTY4ICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jCkJGRDA1OTZBICAwQzAwMTExNiAgIEFEREkgVDAsIFM2LCAzMDcyCkJGRDA1OTZDICAgICAgMEMwMCAgIE5PUApCRkQwNTk2RSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjQwNDogICAgICAgICAgICAgICAgIAkJaWYoIHB4TmV3UXVldWUgIT0gTlVMTCApDQpCRkQwNTk3MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OTc2ICAwMDNDNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1OUYyCjQwNTogICAgICAgICAgICAgICAgIAkJew0KNDA2OiAgICAgICAgICAgICAgICAgCQkJLyogSW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIHByaW9yaXR5IGluaGVyaXRhbmNlLiAqLw0KNDA3OiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+cHhNdXRleEhvbGRlciA9IE5VTEw7DQpCRkQwNTk3QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OTdFICAgICAgRTgyMSAgIFNXIFMwLCA0KFYwKQo0MDg6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT51eFF1ZXVlVHlwZSA9IHF1ZXVlUVVFVUVfSVNfTVVURVg7DQpCRkQwNTk4MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OTg0ICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQo0MDk6ICAgICAgICAgICAgICAgICANCjQxMDogICAgICAgICAgICAgICAgIAkJCS8qIFF1ZXVlcyB1c2VkIGFzIGEgbXV0ZXggbm8gZGF0YSBpcyBhY3R1YWxseSBjb3BpZWQgaW50byBvciBvdXQNCjQxMTogICAgICAgICAgICAgICAgIAkJCW9mIHRoZSBxdWV1ZS4gKi8NCjQxMjogICAgICAgICAgICAgICAgIAkJCXB4TmV3UXVldWUtPnBjV3JpdGVUbyA9IE5VTEw7DQpCRkQwNTk4NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OThBICAgICAgRTgyMiAgIFNXIFMwLCA4KFYwKQo0MTM6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT51LnBjUmVhZEZyb20gPSBOVUxMOw0KQkZEMDU5OEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTk5MCAgICAgIEU4MjMgICBTVyBTMCwgMTIoVjApCjQxNDogICAgICAgICAgICAgICAgIA0KNDE1OiAgICAgICAgICAgICAgICAgCQkJLyogRWFjaCBtdXRleCBoYXMgYSBsZW5ndGggb2YgMSAobGlrZSBhIGJpbmFyeSBzZW1hcGhvcmUpIGFuZA0KNDE2OiAgICAgICAgICAgICAgICAgCQkJYW4gaXRlbSBzaXplIG9mIDAgYXMgbm90aGluZyBpcyBhY3R1YWxseSBjb3BpZWQgaW50byBvciBvdXQNCjQxNzogICAgICAgICAgICAgICAgIAkJCW9mIHRoZSBtdXRleC4gKi8NCjQxODogICAgICAgICAgICAgICAgIAkJCXB4TmV3UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID0gKCBVQmFzZVR5cGVfdCApIDBVOw0KQkZEMDU5OTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTk5NiAgICAgIEU4MkUgICBTVyBTMCwgNTYoVjApCjQxOTogICAgICAgICAgICAgICAgIAkJCXB4TmV3UXVldWUtPnV4TGVuZ3RoID0gKCBVQmFzZVR5cGVfdCApIDFVOw0KQkZEMDU5OTggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTk5QyAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNTk5RSAgICAgIEU5QUYgICBTVyBWMSwgNjAoVjApCjQyMDogICAgICAgICAgICAgICAgIAkJCXB4TmV3UXVldWUtPnV4SXRlbVNpemUgPSAoIFVCYXNlVHlwZV90ICkgMFU7DQpCRkQwNTlBMCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OUE0ICAwMDQwRjgwMiAgIFNXIFpFUk8sIDY0KFYwKQo0MjE6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT54UnhMb2NrID0gcXVldWVVTkxPQ0tFRDsNCkJGRDA1OUE4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDU5QUMgICAgICBFREZGICAgTEkgVjEsIC0xCkJGRDA1OUFFICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkKNDIyOiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+eFR4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQpCRkQwNTlCMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OUI2ICAgICAgRURGRiAgIExJIFYxLCAtMQpCRkQwNTlCOCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApCjQyMzogICAgICAgICAgICAgICAgIA0KNDI0OiAgICAgICAgICAgICAgICAgCQkJI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KNDI1OiAgICAgICAgICAgICAgICAgCQkJew0KNDI2OiAgICAgICAgICAgICAgICAgCQkJCXB4TmV3UXVldWUtPnVjUXVldWVUeXBlID0gdWNRdWV1ZVR5cGU7DQo0Mjc6ICAgICAgICAgICAgICAgICAJCQl9DQo0Mjg6ICAgICAgICAgICAgICAgICAJCQkjZW5kaWYNCjQyOTogICAgICAgICAgICAgICAgIA0KNDMwOiAgICAgICAgICAgICAgICAgCQkJI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQo0MzE6ICAgICAgICAgICAgICAgICAJCQl7DQo0MzI6ICAgICAgICAgICAgICAgICAJCQkJcHhOZXdRdWV1ZS0+cHhRdWV1ZVNldENvbnRhaW5lciA9IE5VTEw7DQpCRkQwNTlCQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OUMwICAwMDRDRjgwMiAgIFNXIFpFUk8sIDc2KFYwKQo0MzM6ICAgICAgICAgICAgICAgICAJCQl9DQo0MzQ6ICAgICAgICAgICAgICAgICAJCQkjZW5kaWYNCjQzNTogICAgICAgICAgICAgICAgIA0KNDM2OiAgICAgICAgICAgICAgICAgCQkJLyogRW5zdXJlIHRoZSBldmVudCBxdWV1ZXMgc3RhcnQgd2l0aCB0aGUgY29ycmVjdCBzdGF0ZS4gKi8NCjQzNzogICAgICAgICAgICAgICAgIAkJCXZMaXN0SW5pdGlhbGlzZSggJiggcHhOZXdRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICk7DQpCRkQwNTlDNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OUM4ICAgICAgNkQyOCAgIEFERElVIFYwLCBWMCwgMTYKQkZEMDU5Q0EgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDU5Q0MgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UKQkZEMDU5Q0UgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQpCRkQwNTlEMCAgICAgIDBDMDAgICBOT1AKNDM4OiAgICAgICAgICAgICAgICAgCQkJdkxpc3RJbml0aWFsaXNlKCAmKCBweE5ld1F1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKTsNCkJGRDA1OUQyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDU5RDYgIDAwMjQzMDQyICAgQURESVUgVjAsIFYwLCAzNgpCRkQwNTlEQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNTlEQyAgNDU3MDc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZQpCRkQwNTlERSAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApCkJGRDA1OUUwICAgICAgMEMwMCAgIE5PUAo0Mzk6ICAgICAgICAgICAgICAgICANCjQ0MDogICAgICAgICAgICAgICAgIAkJCXRyYWNlQ1JFQVRFX01VVEVYKCBweE5ld1F1ZXVlICk7DQo0NDE6ICAgICAgICAgICAgICAgICANCjQ0MjogICAgICAgICAgICAgICAgIAkJCS8qIFN0YXJ0IHdpdGggdGhlIHNlbWFwaG9yZSBpbiB0aGUgZXhwZWN0ZWQgc3RhdGUuICovDQo0NDM6ICAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSB4UXVldWVHZW5lcmljU2VuZCggcHhOZXdRdWV1ZSwgTlVMTCwgKCBUaWNrVHlwZV90ICkgMFUsIHF1ZXVlU0VORF9UT19CQUNLICk7DQpCRkQwNTlFMiAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpCkJGRDA1OUU2ICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8KQkZEMDU5RTggICAgICAwQ0MwICAgTU9WRSBBMiwgWkVSTwpCRkQwNTlFQSAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPCkJGRDA1OUVDICAwNkEyNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1NlbmQKQkZEMDU5RUUgICAgICAwNkEyICAgQUREVSBBMSwgUzEsIFYwCkJGRDA1OUYwICAgICAgMEMwMCAgIE5PUAo0NDQ6ICAgICAgICAgICAgICAgICAJCX0NCjQ0NTogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNDQ2OiAgICAgICAgICAgICAgICAgCQl7DQo0NDc6ICAgICAgICAgICAgICAgICAJCQl0cmFjZUNSRUFURV9NVVRFWF9GQUlMRUQoKTsNCjQ0ODogICAgICAgICAgICAgICAgIAkJfQ0KNDQ5OiAgICAgICAgICAgICAgICAgDQo0NTA6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggcHhOZXdRdWV1ZSApOw0KQkZEMDU5RjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTlGNiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUEwQwpCRkQwNTlGQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNTlGQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA1OUZFICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDA1QTAwICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDVBMDIgIDAxQzIzMEEwICAgQURESVUgQTEsIFpFUk8sIDQ1MApCRkQwNUEwNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDVBMDggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDVBMEEgICAgICAwQzAwICAgTk9QCjQ1MTogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHB4TmV3UXVldWU7DQpCRkQwNUEwQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjQ1MjogICAgICAgICAgICAgICAgIAl9DQpCRkQwNUExMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNUExMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA1QTE0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDVBMTYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNUExOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA1QTFBICAgICAgMEMwMCAgIE5PUAo0NTM6ICAgICAgICAgICAgICAgICANCjQ1NDogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfTVVURVhFUyAqLw0KNDU1OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0NTY6ICAgICAgICAgICAgICAgICANCjQ1NzogICAgICAgICAgICAgICAgICNpZiAoICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApICYmICggSU5DTFVERV94U2VtYXBob3JlR2V0TXV0ZXhIb2xkZXIgPT0gMSApICkNCjQ1ODogICAgICAgICAgICAgICAgIA0KNDU5OiAgICAgICAgICAgICAgICAgCXZvaWQqIHhRdWV1ZUdldE11dGV4SG9sZGVyKCBRdWV1ZUhhbmRsZV90IHhTZW1hcGhvcmUgKQ0KNDYwOiAgICAgICAgICAgICAgICAgCXsNCjQ2MTogICAgICAgICAgICAgICAgIAl2b2lkICpweFJldHVybjsNCjQ2MjogICAgICAgICAgICAgICAgIA0KNDYzOiAgICAgICAgICAgICAgICAgCQkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB4U2VtYXBob3JlR2V0TXV0ZXhIb2xkZXIoKSwgYW5kIHNob3VsZCBub3QNCjQ2NDogICAgICAgICAgICAgICAgIAkJYmUgY2FsbGVkIGRpcmVjdGx5LiAgTm90ZTogIFRoaXMgaXMgYSBnb29kIHdheSBvZiBkZXRlcm1pbmluZyBpZiB0aGUNCjQ2NTogICAgICAgICAgICAgICAgIAkJY2FsbGluZyB0YXNrIGlzIHRoZSBtdXRleCBob2xkZXIsIGJ1dCBub3QgYSBnb29kIHdheSBvZiBkZXRlcm1pbmluZyB0aGUNCjQ2NjogICAgICAgICAgICAgICAgIAkJaWRlbnRpdHkgb2YgdGhlIG11dGV4IGhvbGRlciwgYXMgdGhlIGhvbGRlciBtYXkgY2hhbmdlIGJldHdlZW4gdGhlDQo0Njc6ICAgICAgICAgICAgICAgICAJCWZvbGxvd2luZyBjcml0aWNhbCBzZWN0aW9uIGV4aXRpbmcgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5pbmcuICovDQo0Njg6ICAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KNDY5OiAgICAgICAgICAgICAgICAgCQl7DQo0NzA6ICAgICAgICAgICAgICAgICAJCQlpZiggKCAoIFF1ZXVlX3QgKiApIHhTZW1hcGhvcmUgKS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApDQo0NzE6ICAgICAgICAgICAgICAgICAJCQl7DQo0NzI6ICAgICAgICAgICAgICAgICAJCQkJcHhSZXR1cm4gPSAoIHZvaWQgKiApICggKCBRdWV1ZV90ICogKSB4U2VtYXBob3JlICktPnB4TXV0ZXhIb2xkZXI7DQo0NzM6ICAgICAgICAgICAgICAgICAJCQl9DQo0NzQ6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo0NzU6ICAgICAgICAgICAgICAgICAJCQl7DQo0NzY6ICAgICAgICAgICAgICAgICAJCQkJcHhSZXR1cm4gPSBOVUxMOw0KNDc3OiAgICAgICAgICAgICAgICAgCQkJfQ0KNDc4OiAgICAgICAgICAgICAgICAgCQl9DQo0Nzk6ICAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQo0ODA6ICAgICAgICAgICAgICAgICANCjQ4MTogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHB4UmV0dXJuOw0KNDgyOiAgICAgICAgICAgICAgICAgCX0gLypsaW50ICFlODE4IHhTZW1hcGhvcmUgY2Fubm90IGJlIGEgcG9pbnRlciB0byBjb25zdCBiZWNhdXNlIGl0IGlzIGEgdHlwZWRlZi4gKi8NCjQ4MzogICAgICAgICAgICAgICAgIA0KNDg0OiAgICAgICAgICAgICAgICAgI2VuZGlmDQo0ODU6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQ4NjogICAgICAgICAgICAgICAgIA0KNDg3OiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1JFQ1VSU0lWRV9NVVRFWEVTID09IDEgKQ0KNDg4OiAgICAgICAgICAgICAgICAgDQo0ODk6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UXVldWVHaXZlTXV0ZXhSZWN1cnNpdmUoIFF1ZXVlSGFuZGxlX3QgeE11dGV4ICkNCjQ5MDogICAgICAgICAgICAgICAgIAl7DQpCRkQwNkFEMCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwNkFEMiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDA2QUQ0ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDZBRDYgICAgICBDQTA3ICAgU1cgUzAsIDI4KFNQKQpCRkQwNkFEOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNkFEQSAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpCjQ5MTogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQo0OTI6ICAgICAgICAgICAgICAgICAJUXVldWVfdCAqIGNvbnN0IHB4TXV0ZXggPSAoIFF1ZXVlX3QgKiApIHhNdXRleDsNCkJGRDA2QURFICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDZBRTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo0OTM6ICAgICAgICAgICAgICAgICANCjQ5NDogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweE11dGV4ICk7DQpCRkQwNkFFNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA2QUVBICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2QjAwCkJGRDA2QUVFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA2QUYwICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDZBRjIgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDZBRjQgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwNkFGNiAgMDFFRTMwQTAgICBBRERJVSBBMSwgWkVSTywgNDk0CkJGRDA2QUZBICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNkFGQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNkFGRSAgICAgIDBDMDAgICBOT1AKNDk1OiAgICAgICAgICAgICAgICAgDQo0OTY6ICAgICAgICAgICAgICAgICAJCS8qIElmIHRoaXMgaXMgdGhlIHRhc2sgdGhhdCBob2xkcyB0aGUgbXV0ZXggdGhlbiBweE11dGV4SG9sZGVyIHdpbGwgbm90DQo0OTc6ICAgICAgICAgICAgICAgICAJCWNoYW5nZSBvdXRzaWRlIG9mIHRoaXMgdGFzay4gIElmIHRoaXMgdGFzayBkb2VzIG5vdCBob2xkIHRoZSBtdXRleCB0aGVuDQo0OTg6ICAgICAgICAgICAgICAgICAJCXB4TXV0ZXhIb2xkZXIgY2FuIG5ldmVyIGNvaW5jaWRlbnRhbGx5IGVxdWFsIHRoZSB0YXNrcyBoYW5kbGUsIGFuZCBhcw0KNDk5OiAgICAgICAgICAgICAgICAgCQl0aGlzIGlzIHRoZSBvbmx5IGNvbmRpdGlvbiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYNCjUwMDogICAgICAgICAgICAgICAgIAkJcHhNdXRleEhvbGRlciBpcyBhY2Nlc3NlZCBzaW11bHRhbmVvdXNseSBieSBhbm90aGVyIHRhc2suICBUaGVyZWZvcmUgbm8NCjUwMTogICAgICAgICAgICAgICAgIAkJbXV0dWFsIGV4Y2x1c2lvbiBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBweE11dGV4SG9sZGVyIHZhcmlhYmxlLiAqLw0KNTAyOiAgICAgICAgICAgICAgICAgCQlpZiggcHhNdXRleC0+cHhNdXRleEhvbGRlciA9PSAoIHZvaWQgKiApIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApIC8qbGludCAhZTk2MSBOb3QgYSByZWR1bmRhbnQgY2FzdCBhcyBUYXNrSGFuZGxlX3QgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDZCMDAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNkIwNCAgICAgIDY4MjEgICBMVyBTMCwgNChWMCkKQkZEMDZCMDYgIDRGMDI3N0U4ICAgSkFMUyB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlCkJGRDA2QjA4ICAgICAgNEYwMiAgIEFERElVIFQ4LCBUOCwgMQpCRkQwNkIwQSAgICAgIDBDMDAgICBOT1AKQkZEMDZCMEMgIDAwMUFCNDUwICAgQk5FIFMwLCBWMCwgMHhCRkQwNkI0NApCRkQwNkIwRSAgMEMwMDAwMUEgICBTTEwgWkVSTywgSzAsIDEKQkZEMDZCMTAgICAgICAwQzAwICAgTk9QCjUwMzogICAgICAgICAgICAgICAgIAkJew0KNTA0OiAgICAgICAgICAgICAgICAgCQkJdHJhY2VHSVZFX01VVEVYX1JFQ1VSU0lWRSggcHhNdXRleCApOw0KNTA1OiAgICAgICAgICAgICAgICAgDQo1MDY6ICAgICAgICAgICAgICAgICAJCQkvKiB1eFJlY3Vyc2l2ZUNhbGxDb3VudCBjYW5ub3QgYmUgemVybyBpZiBweE11dGV4SG9sZGVyIGlzIGVxdWFsIHRvDQo1MDc6ICAgICAgICAgICAgICAgICAJCQl0aGUgdGFzayBoYW5kbGUsIHRoZXJlZm9yZSBubyB1bmRlcmZsb3cgY2hlY2sgaXMgcmVxdWlyZWQuICBBbHNvLA0KNTA4OiAgICAgICAgICAgICAgICAgCQkJdXhSZWN1cnNpdmVDYWxsQ291bnQgaXMgb25seSBtb2RpZmllZCBieSB0aGUgbXV0ZXggaG9sZGVyLCBhbmQgYXMNCjUwOTogICAgICAgICAgICAgICAgIAkJCXRoZXJlIGNhbiBvbmx5IGJlIG9uZSwgbm8gbXV0dWFsIGV4Y2x1c2lvbiBpcyByZXF1aXJlZCB0byBtb2RpZnkgdGhlDQo1MTA6ICAgICAgICAgICAgICAgICAJCQl1eFJlY3Vyc2l2ZUNhbGxDb3VudCBtZW1iZXIuICovDQo1MTE6ICAgICAgICAgICAgICAgICAJCQkoIHB4TXV0ZXgtPnUudXhSZWN1cnNpdmVDYWxsQ291bnQgKS0tOw0KQkZEMDZCMTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNkIxNiAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA2QjE4ICAgICAgNkRBRSAgIEFERElVIFYxLCBWMCwgLTEKQkZEMDZCMUEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNkIxRSAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApCjUxMjogICAgICAgICAgICAgICAgIA0KNTEzOiAgICAgICAgICAgICAgICAgCQkJLyogSGF2ZSB3ZSB1bndvdW5kIHRoZSBjYWxsIGNvdW50PyAqLw0KNTE0OiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4TXV0ZXgtPnUudXhSZWN1cnNpdmVDYWxsQ291bnQgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDZCMjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNkIyNCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA2QjI2ICAwMDA4NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2QjNBCjUxNTogICAgICAgICAgICAgICAgIAkJCXsNCjUxNjogICAgICAgICAgICAgICAgIAkJCQkvKiBSZXR1cm4gdGhlIG11dGV4LiAgVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgdW5ibG9jayBhbnkgb3RoZXINCjUxNzogICAgICAgICAgICAgICAgIAkJCQl0YXNrIHRoYXQgbWlnaHQgYmUgd2FpdGluZyB0byBhY2Nlc3MgdGhlIG11dGV4LiAqLw0KNTE4OiAgICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIHhRdWV1ZUdlbmVyaWNTZW5kKCBweE11dGV4LCBOVUxMLCBxdWV1ZU1VVEVYX0dJVkVfQkxPQ0tfVElNRSwgcXVldWVTRU5EX1RPX0JBQ0sgKTsNCkJGRDA2QjJBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDZCMkUgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTwpCRkQwNkIzMCAgICAgIDBDQzAgICBNT1ZFIEEyLCBaRVJPCkJGRDA2QjMyICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDZCMzQgIDA2QTI3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljU2VuZApCRkQwNkIzNiAgICAgIDA2QTIgICBBRERVIEExLCBTMSwgVjAKQkZEMDZCMzggICAgICAwQzAwICAgTk9QCjUxOTogICAgICAgICAgICAgICAgIAkJCX0NCjUyMDogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjUyMTogICAgICAgICAgICAgICAgIAkJCXsNCjUyMjogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo1MjM6ICAgICAgICAgICAgICAgICAJCQl9DQo1MjQ6ICAgICAgICAgICAgICAgICANCjUyNTogICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwNkIzQSAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwNkIzQyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA2QjQwICAgICAgQ0MwMyAgIEIgMHhCRkQwNkI0OApCRkQwNkI0MiAgICAgIDBDMDAgICBOT1AKNTI2OiAgICAgICAgICAgICAgICAgCQl9DQo1Mjc6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjUyODogICAgICAgICAgICAgICAgIAkJew0KNTI5OiAgICAgICAgICAgICAgICAgCQkJLyogVGhlIG11dGV4IGNhbm5vdCBiZSBnaXZlbiBiZWNhdXNlIHRoZSBjYWxsaW5nIHRhc2sgaXMgbm90IHRoZQ0KNTMwOiAgICAgICAgICAgICAgICAgCQkJaG9sZGVyLiAqLw0KNTMxOiAgICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDA2QjQ0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQo1MzI6ICAgICAgICAgICAgICAgICANCjUzMzogICAgICAgICAgICAgICAgIAkJCXRyYWNlR0lWRV9NVVRFWF9SRUNVUlNJVkVfRkFJTEVEKCBweE11dGV4ICk7DQo1MzQ6ICAgICAgICAgICAgICAgICAJCX0NCjUzNTogICAgICAgICAgICAgICAgIA0KNTM2OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA2QjQ4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKNTM3OiAgICAgICAgICAgICAgICAgCX0NCkJGRDA2QjRDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA2QjRFICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDZCNTAgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwNkI1MiAgICAgIDRBMDcgICBMVyBTMCwgMjgoU1ApCkJGRDA2QjU0ICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDZCNTYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNkI1OCAgICAgIDBDMDAgICBOT1AKNTM4OiAgICAgICAgICAgICAgICAgDQo1Mzk6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1JFQ1VSU0lWRV9NVVRFWEVTICovDQo1NDA6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjU0MTogICAgICAgICAgICAgICAgIA0KNTQyOiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1JFQ1VSU0lWRV9NVVRFWEVTID09IDEgKQ0KNTQzOiAgICAgICAgICAgICAgICAgDQo1NDQ6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UXVldWVUYWtlTXV0ZXhSZWN1cnNpdmUoIFF1ZXVlSGFuZGxlX3QgeE11dGV4LCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCApDQo1NDU6ICAgICAgICAgICAgICAgICAJew0KQkZEMDYzQ0MgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDYzQ0UgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwNjNEMCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDA2M0QyICAgICAgQ0EwNyAgIFNXIFMwLCAyOChTUCkKQkZEMDYzRDQgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDYzRDYgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQpCRkQwNjNEQSAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpCjU0NjogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQo1NDc6ICAgICAgICAgICAgICAgICAJUXVldWVfdCAqIGNvbnN0IHB4TXV0ZXggPSAoIFF1ZXVlX3QgKiApIHhNdXRleDsNCkJGRDA2M0RFICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDYzRTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo1NDg6ICAgICAgICAgICAgICAgICANCjU0OTogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweE11dGV4ICk7DQpCRkQwNjNFNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA2M0VBICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2NDAwCkJGRDA2M0VFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA2M0YwICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDYzRjIgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDYzRjQgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwNjNGNiAgMDIyNTMwQTAgICBBRERJVSBBMSwgWkVSTywgNTQ5CkJGRDA2M0ZBICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNjNGQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNjNGRSAgICAgIDBDMDAgICBOT1AKNTUwOiAgICAgICAgICAgICAgICAgDQo1NTE6ICAgICAgICAgICAgICAgICAJCS8qIENvbW1lbnRzIHJlZ2FyZGluZyBtdXR1YWwgZXhjbHVzaW9uIGFzIHBlciB0aG9zZSB3aXRoaW4NCjU1MjogICAgICAgICAgICAgICAgIAkJeFF1ZXVlR2l2ZU11dGV4UmVjdXJzaXZlKCkuICovDQo1NTM6ICAgICAgICAgICAgICAgICANCjU1NDogICAgICAgICAgICAgICAgIAkJdHJhY2VUQUtFX01VVEVYX1JFQ1VSU0lWRSggcHhNdXRleCApOw0KNTU1OiAgICAgICAgICAgICAgICAgDQo1NTY6ICAgICAgICAgICAgICAgICAJCWlmKCBweE11dGV4LT5weE11dGV4SG9sZGVyID09ICggdm9pZCAqICkgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICkgLypsaW50ICFlOTYxIENhc3QgaXMgbm90IHJlZHVuZGFudCBhcyBUYXNrSGFuZGxlX3QgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDY0MDAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNjQwNCAgICAgIDY4MjEgICBMVyBTMCwgNChWMCkKQkZEMDY0MDYgIDRGMDI3N0U4ICAgSkFMUyB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlCkJGRDA2NDA4ICAgICAgNEYwMiAgIEFERElVIFQ4LCBUOCwgMQpCRkQwNjQwQSAgICAgIDBDMDAgICBOT1AKQkZEMDY0MEMgIDAwMERCNDUwICAgQk5FIFMwLCBWMCwgMHhCRkQwNjQyQQpCRkQwNjQwRSAgMEMwMDAwMEQgICBTTEwgWkVSTywgVDUsIDEKQkZEMDY0MTAgICAgICAwQzAwICAgTk9QCjU1NzogICAgICAgICAgICAgICAgIAkJew0KNTU4OiAgICAgICAgICAgICAgICAgCQkJKCBweE11dGV4LT51LnV4UmVjdXJzaXZlQ2FsbENvdW50ICkrKzsNCkJGRDA2NDEyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDY0MTYgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwNjQxOCAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDEKQkZEMDY0MUEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNjQxRSAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApCjU1OTogICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwNjQyMCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwNjQyMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA2NDI2ICAgICAgQ0MxOSAgIEIgMHhCRkQwNjQ1QQpCRkQwNjQyOCAgICAgIDBDMDAgICBOT1AKNTYwOiAgICAgICAgICAgICAgICAgCQl9DQo1NjE6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjU2MjogICAgICAgICAgICAgICAgIAkJew0KNTYzOiAgICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCBweE11dGV4LCBOVUxMLCB4VGlja3NUb1dhaXQsIHBkRkFMU0UgKTsNCkJGRDA2NDJBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDY0MkUgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTwpCRkQwNjQzMCAgMDAyQ0ZDREUgICBMVyBBMiwgNDQoUzgpCkJGRDA2NDM0ICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDY0MzYgIDA4MUU3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljUmVjZWl2ZQpCRkQwNjQzOCAgICAgIDA4MUUgICBMQlUgUzAsIDE0KFMxKQpCRkQwNjQzQSAgICAgIDBDMDAgICBOT1AKQkZEMDY0M0MgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo1NjQ6ICAgICAgICAgICAgICAgICANCjU2NTogICAgICAgICAgICAgICAgIAkJCS8qIHBkUEFTUyB3aWxsIG9ubHkgYmUgcmV0dXJuZWQgaWYgdGhlIG11dGV4IHdhcyBzdWNjZXNzZnVsbHkNCjU2NjogICAgICAgICAgICAgICAgIAkJCW9idGFpbmVkLiAgVGhlIGNhbGxpbmcgdGFzayBtYXkgaGF2ZSBlbnRlcmVkIHRoZSBCbG9ja2VkIHN0YXRlDQo1Njc6ICAgICAgICAgICAgICAgICAJCQliZWZvcmUgcmVhY2hpbmcgaGVyZS4gKi8NCjU2ODogICAgICAgICAgICAgICAgIAkJCWlmKCB4UmV0dXJuID09IHBkUEFTUyApDQpCRkQwNjQ0MCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA2NDQ0ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA2NDQ2ICAwMDA4QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDY0NUEKQkZEMDY0NDggIDBDMDAwMDA4ICAgU0xMIFpFUk8sIFQwLCAxCkJGRDA2NDRBICAgICAgMEMwMCAgIE5PUAo1Njk6ICAgICAgICAgICAgICAgICAJCQl7DQo1NzA6ICAgICAgICAgICAgICAgICAJCQkJKCBweE11dGV4LT51LnV4UmVjdXJzaXZlQ2FsbENvdW50ICkrKzsNCkJGRDA2NDRDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDY0NTAgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQpCRkQwNjQ1MiAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDEKQkZEMDY0NTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNjQ1OCAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApCjU3MTogICAgICAgICAgICAgICAgIAkJCX0NCjU3MjogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjU3MzogICAgICAgICAgICAgICAgIAkJCXsNCjU3NDogICAgICAgICAgICAgICAgIAkJCQl0cmFjZVRBS0VfTVVURVhfUkVDVVJTSVZFX0ZBSUxFRCggcHhNdXRleCApOw0KNTc1OiAgICAgICAgICAgICAgICAgCQkJfQ0KNTc2OiAgICAgICAgICAgICAgICAgCQl9DQo1Nzc6ICAgICAgICAgICAgICAgICANCjU3ODogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwNjQ1QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjU3OTogICAgICAgICAgICAgICAgIAl9DQpCRkQwNjQ1RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNjQ2MCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApCkJGRDA2NDYyICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkKQkZEMDY0NjQgICAgICA0QTA3ICAgTFcgUzAsIDI4KFNQKQpCRkQwNjQ2NiAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDA2NDY4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDY0NkEgICAgICAwQzAwICAgTk9QCjU4MDogICAgICAgICAgICAgICAgIA0KNTgxOiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9SRUNVUlNJVkVfTVVURVhFUyAqLw0KNTgyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo1ODM6ICAgICAgICAgICAgICAgICANCjU4NDogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9DT1VOVElOR19TRU1BUEhPUkVTID09IDEgKQ0KNTg1OiAgICAgICAgICAgICAgICAgDQo1ODY6ICAgICAgICAgICAgICAgICAJUXVldWVIYW5kbGVfdCB4UXVldWVDcmVhdGVDb3VudGluZ1NlbWFwaG9yZSggY29uc3QgVUJhc2VUeXBlX3QgdXhNYXhDb3VudCwgY29uc3QgVUJhc2VUeXBlX3QgdXhJbml0aWFsQ291bnQgKQ0KNTg3OiAgICAgICAgICAgICAgICAgCXsNCkJGRDA2NTBDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA2NTBFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDY1MTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNjUxMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNjUxNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA2NTE4ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKNTg4OiAgICAgICAgICAgICAgICAgCVF1ZXVlSGFuZGxlX3QgeEhhbmRsZTsNCjU4OTogICAgICAgICAgICAgICAgIA0KNTkwOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHV4TWF4Q291bnQgIT0gMCApOw0KQkZEMDY1MUMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNjUyMCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjUzNgpCRkQwNjUyNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNjUyNiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA2NTI4ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDA2NTJBICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDY1MkMgIDAyNEUzMEEwICAgQURESVUgQTEsIFpFUk8sIDU5MApCRkQwNjUzMCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDY1MzIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDY1MzQgICAgICAwQzAwICAgTk9QCjU5MTogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB1eEluaXRpYWxDb3VudCA8PSB1eE1heENvdW50ICk7DQpCRkQwNjUzNiAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpCkJGRDA2NTNBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDY1M0UgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxCkJGRDA2NTQwICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwNjU0MiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjU1OApCRkQwNjU0NiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNjU0OCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA2NTRBICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDA2NTRDICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDY1NEUgIDAyNEYzMEEwICAgQURESVUgQTEsIFpFUk8sIDU5MQpCRkQwNjU1MiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDY1NTQgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDY1NTYgICAgICAwQzAwICAgTk9QCjU5MjogICAgICAgICAgICAgICAgIA0KNTkzOiAgICAgICAgICAgICAgICAgCQl4SGFuZGxlID0geFF1ZXVlR2VuZXJpY0NyZWF0ZSggdXhNYXhDb3VudCwgcXVldWVTRU1BUEhPUkVfUVVFVUVfSVRFTV9MRU5HVEgsIHF1ZXVlUVVFVUVfVFlQRV9DT1VOVElOR19TRU1BUEhPUkUgKTsNCkJGRDA2NTU4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDY1NUMgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTwpCRkQwNjU1RSAgICAgIEVGMDIgICBMSSBBMiwgMgpCRkQwNjU2MCAgMUVGQTc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNDcmVhdGUKQkZEMDY1NjIgIDBDMDAxRUZBICAgTEIgUzcsIDMwNzIoSzApCkJGRDA2NTY0ICAgICAgMEMwMCAgIE5PUApCRkQwNjU2NiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjU5NDogICAgICAgICAgICAgICAgIA0KNTk1OiAgICAgICAgICAgICAgICAgCQlpZiggeEhhbmRsZSAhPSBOVUxMICkNCkJGRDA2NTZBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDY1NkUgIDAwMDU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY1N0MKNTk2OiAgICAgICAgICAgICAgICAgCQl7DQo1OTc6ICAgICAgICAgICAgICAgICAJCQkoICggUXVldWVfdCAqICkgeEhhbmRsZSApLT51eE1lc3NhZ2VzV2FpdGluZyA9IHV4SW5pdGlhbENvdW50Ow0KQkZEMDY1NzIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjU3NiAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpCkJGRDA2NTdBICAgICAgRTlBRSAgIFNXIFYxLCA1NihWMCkKNTk4OiAgICAgICAgICAgICAgICAgDQo1OTk6ICAgICAgICAgICAgICAgICAJCQl0cmFjZUNSRUFURV9DT1VOVElOR19TRU1BUEhPUkUoKTsNCjYwMDogICAgICAgICAgICAgICAgIAkJfQ0KNjAxOiAgICAgICAgICAgICAgICAgCQllbHNlDQo2MDI6ICAgICAgICAgICAgICAgICAJCXsNCjYwMzogICAgICAgICAgICAgICAgIAkJCXRyYWNlQ1JFQVRFX0NPVU5USU5HX1NFTUFQSE9SRV9GQUlMRUQoKTsNCjYwNDogICAgICAgICAgICAgICAgIAkJfQ0KNjA1OiAgICAgICAgICAgICAgICAgDQo2MDY6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeEhhbmRsZSApOw0KQkZEMDY1N0MgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjU4MCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjU5NgpCRkQwNjU4NCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNjU4NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA2NTg4ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDA2NThBICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDY1OEMgIDAyNUUzMEEwICAgQURESVUgQTEsIFpFUk8sIDYwNgpCRkQwNjU5MCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDY1OTIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDY1OTQgICAgICAwQzAwICAgTk9QCjYwNzogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhIYW5kbGU7DQpCRkQwNjU5NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjYwODogICAgICAgICAgICAgICAgIAl9DQpCRkQwNjU5QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNjU5QyAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA2NTlFICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDY1QTAgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNjVBMiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2NUE0ICAgICAgMEMwMCAgIE5PUAo2MDk6ICAgICAgICAgICAgICAgICANCjYxMDogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfQ09VTlRJTkdfU0VNQVBIT1JFUyAqLw0KNjExOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo2MTI6ICAgICAgICAgICAgICAgICANCjYxMzogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFF1ZXVlR2VuZXJpY1NlbmQoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBjb25zdCB2b2lkICogY29uc3QgcHZJdGVtVG9RdWV1ZSwgVGlja1R5cGVfdCB4VGlja3NUb1dhaXQsIGNvbnN0IEJhc2VUeXBlX3QgeENvcHlQb3NpdGlvbiApDQo2MTQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwMEQ0NCAgICAgIDRGRTEgICBBRERJVSBTUCwgU1AsIC02NApCRkQwMEQ0NiAgICAgIENCRUYgICBTVyBSQSwgNjAoU1ApCkJGRDAwRDQ4ICAgICAgQ0JDRSAgIFNXIFM4LCA1NihTUCkKQkZEMDBENEEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDBENEMgIDAwNDBGODlFICAgU1cgQTAsIDY0KFM4KQpCRkQwMEQ1MCAgMDA0NEY4QkUgICBTVyBBMSwgNjgoUzgpCkJGRDAwRDU0ICAwMDQ4RjhERSAgIFNXIEEyLCA3MihTOCkKQkZEMDBENTggIDAwNENGOEZFICAgU1cgQTMsIDc2KFM4KQo2MTU6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhFbnRyeVRpbWVTZXQgPSBwZEZBTFNFLCB4WWllbGRSZXF1aXJlZDsNCkJGRDAwRDVDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQo2MTY6ICAgICAgICAgICAgICAgICBUaW1lT3V0X3QgeFRpbWVPdXQ7DQo2MTc6ICAgICAgICAgICAgICAgICBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDBENjAgIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQpCRkQwMEQ2NCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjYxODogICAgICAgICAgICAgICAgIA0KNjE5OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDBENjggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMEQ2QyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMEQ4MgpCRkQwMEQ3MCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMEQ3MiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAwRDc0ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDAwRDc2ICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDBENzggIDAyNkIzMEEwICAgQURESVUgQTEsIFpFUk8sIDYxOQpCRkQwMEQ3QyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDBEN0UgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDBEODAgICAgICAwQzAwICAgTk9QCjYyMDogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICEoICggcHZJdGVtVG9RdWV1ZSA9PSBOVUxMICkgJiYgKCBweFF1ZXVlLT51eEl0ZW1TaXplICE9ICggVUJhc2VUeXBlX3QgKSAwVSApICkgKTsNCkJGRDAwRDgyICAwMDQ0RkM1RSAgIExXIFYwLCA2OChTOCkKQkZEMDBEODYgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBEOTYKQkZEMDBEOEEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMEQ4RSAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDAwRDkyICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRDlDCkJGRDAwRDk2ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAwRDk4ICAgICAgQ0MwMiAgIEIgMHhCRkQwMEQ5RQpCRkQwMEQ5QSAgICAgIDBDMDAgICBOT1AKQkZEMDBEOUMgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwMEQ5RSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMERCNApCRkQwMERBMiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMERBNCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAwREE2ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDAwREE4ICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDBEQUEgIDAyNkMzMEEwICAgQURESVUgQTEsIFpFUk8sIDYyMApCRkQwMERBRSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDBEQjAgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDBEQjIgICAgICAwQzAwICAgTk9QCjYyMTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICEoICggeENvcHlQb3NpdGlvbiA9PSBxdWV1ZU9WRVJXUklURSApICYmICggcHhRdWV1ZS0+dXhMZW5ndGggIT0gMSApICkgKTsNCkJGRDAwREI0ICAwMDRDRkM3RSAgIExXIFYxLCA3NihTOCkKQkZEMDBEQjggICAgICBFRDAyICAgTEkgVjAsIDIKQkZEMDBEQkEgIDAwMDhCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMERDRQpCRkQwMERCQyAgMEMwMDAwMDggICBTTEwgWkVSTywgVDAsIDEKQkZEMDBEQkUgICAgICAwQzAwICAgTk9QCkJGRDAwREMwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDBEQzQgICAgICA2OUFGICAgTFcgVjEsIDYwKFYwKQpCRkQwMERDNiAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMERDOCAgMDAwNEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAwREQ0CkJGRDAwRENBICAwQzAwMDAwNCAgIFNMTCBaRVJPLCBBMCwgMQpCRkQwMERDQyAgICAgIDBDMDAgICBOT1AKQkZEMDBEQ0UgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDBERDAgICAgICBDQzAyICAgQiAweEJGRDAwREQ2CkJGRDAwREQyICAgICAgMEMwMCAgIE5PUApCRkQwMERENCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCkJGRDAwREQ2ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAwREVDCkJGRDAwRERBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAwRERDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDBEREUgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDBERTAgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwMERFMiAgMDI2RDMwQTAgICBBRERJVSBBMSwgWkVSTywgNjIxCkJGRDAwREU2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMERFOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMERFQSAgICAgIDBDMDAgICBOT1AKNjIyOiAgICAgICAgICAgICAgICAgCSNpZiAoICggSU5DTFVERV94VGFza0dldFNjaGVkdWxlclN0YXRlID09IDEgKSB8fCAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApICkNCjYyMzogICAgICAgICAgICAgICAgIAl7DQo2MjQ6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggISggKCB4VGFza0dldFNjaGVkdWxlclN0YXRlKCkgPT0gdGFza1NDSEVEVUxFUl9TVVNQRU5ERUQgKSAmJiAoIHhUaWNrc1RvV2FpdCAhPSAwICkgKSApOw0KQkZEMDBERUMgIDRBOEU3N0U4ICAgSkFMUyB4VGFza0dldFNjaGVkdWxlclN0YXRlCkJGRDAwREVFICAgICAgNEE4RSAgIExXIFM0LCA1NihTUCkKQkZEMDBERjAgICAgICAwQzAwICAgTk9QCkJGRDAwREYyICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAwREZFCkJGRDAwREY2ICAwMDQ4RkM1RSAgIExXIFYwLCA3MihTOCkKQkZEMDBERkEgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBFMDQKQkZEMDBERkUgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDBFMDAgICAgICBDQzAyICAgQiAweEJGRDAwRTA2CkJGRDAwRTAyICAgICAgMEMwMCAgIE5PUApCRkQwMEUwNCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCkJGRDAwRTA2ICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRTIyCkJGRDAwRTBBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAwRTBDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDBFMEUgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDBFMTAgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwMEUxMiAgMDI3MDMwQTAgICBBRERJVSBBMSwgWkVSTywgNjI0CkJGRDAwRTE2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMEUxOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMEUxQSAgICAgIDBDMDAgICBOT1AKQkZEMDBFMUMgICAgICBDQzAyICAgQiAweEJGRDAwRTIyCkJGRDAwRTFFICAgICAgMEMwMCAgIE5PUAo2MjU6ICAgICAgICAgICAgICAgICAJfQ0KNjI2OiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KNjI3OiAgICAgICAgICAgICAgICAgDQo2Mjg6ICAgICAgICAgICAgICAgICANCjYyOTogICAgICAgICAgICAgICAgIAkvKiBUaGlzIGZ1bmN0aW9uIHJlbGF4ZXMgdGhlIGNvZGluZyBzdGFuZGFyZCBzb21ld2hhdCB0byBhbGxvdyByZXR1cm4NCjYzMDogICAgICAgICAgICAgICAgIAlzdGF0ZW1lbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLiAgVGhpcyBpcyBkb25lIGluIHRoZSBpbnRlcmVzdA0KNjMxOiAgICAgICAgICAgICAgICAgCW9mIGV4ZWN1dGlvbiB0aW1lIGVmZmljaWVuY3kuICovDQo2MzI6ICAgICAgICAgICAgICAgICAJZm9yKCA7OyApDQo2MzM6ICAgICAgICAgICAgICAgICAJew0KNjM0OiAgICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAwRTIyICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAwRTI0ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMEUyNiAgICAgIDBDMDAgICBOT1AKNjM1OiAgICAgICAgICAgICAgICAgCQl7DQo2MzY6ICAgICAgICAgICAgICAgICAJCQkvKiBJcyB0aGVyZSByb29tIG9uIHRoZSBxdWV1ZSBub3c/ICBUaGUgcnVubmluZyB0YXNrIG11c3QgYmUgdGhlDQo2Mzc6ICAgICAgICAgICAgICAgICAJCQloaWdoZXN0IHByaW9yaXR5IHRhc2sgd2FudGluZyB0byBhY2Nlc3MgdGhlIHF1ZXVlLiAgSWYgdGhlIGhlYWQgaXRlbQ0KNjM4OiAgICAgICAgICAgICAgICAgCQkJaW4gdGhlIHF1ZXVlIGlzIHRvIGJlIG92ZXJ3cml0dGVuIHRoZW4gaXQgZG9lcyBub3QgbWF0dGVyIGlmIHRoZQ0KNjM5OiAgICAgICAgICAgICAgICAgCQkJcXVldWUgaXMgZnVsbC4gKi8NCjY0MDogICAgICAgICAgICAgICAgIAkJCWlmKCAoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZS0+dXhMZW5ndGggKSB8fCAoIHhDb3B5UG9zaXRpb24gPT0gcXVldWVPVkVSV1JJVEUgKSApDQpCRkQwMEUyOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAwRTJDICAgICAgNjlBRSAgIExXIFYxLCA1NihWMCkKQkZEMDBFMkUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMEUzMiAgICAgIDY5MkYgICBMVyBWMCwgNjAoVjApCkJGRDAwRTM0ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwMEUzNiAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDBFMzggIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBFNDgKQkZEMDBFM0MgIDAwNENGQzdFICAgTFcgVjEsIDc2KFM4KQpCRkQwMEU0MCAgICAgIEVEMDIgICBMSSBWMCwgMgpCRkQwMEU0MiAgMDA2RUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAwRjIyCkJGRDAwRTQ0ICAwQzAwMDA2RSAgIFNMTCBWMSwgVDYsIDEKQkZEMDBFNDYgICAgICAwQzAwICAgTk9QCjY0MTogICAgICAgICAgICAgICAgIAkJCXsNCjY0MjogICAgICAgICAgICAgICAgIAkJCQl0cmFjZVFVRVVFX1NFTkQoIHB4UXVldWUgKTsNCjY0MzogICAgICAgICAgICAgICAgIAkJCQl4WWllbGRSZXF1aXJlZCA9IHBydkNvcHlEYXRhVG9RdWV1ZSggcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeENvcHlQb3NpdGlvbiApOw0KQkZEMDBFNDggIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQpCRkQwMEU0QyAgMDA0NEZDQkUgICBMVyBBMSwgNjgoUzgpCkJGRDAwRTUwICAwMDRDRkNERSAgIExXIEEyLCA3NihTOCkKQkZEMDBFNTQgIDE0RTY3N0U4ICAgSkFMUyBwcnZDb3B5RGF0YVRvUXVldWUKQkZEMDBFNTYgIDBDMDAxNEU2ICAgTEJVIEEzLCAzMDcyKEEyKQpCRkQwMEU1OCAgICAgIDBDMDAgICBOT1AKQkZEMDBFNUEgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQo2NDQ6ICAgICAgICAgICAgICAgICANCjY0NTogICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjY0NjogICAgICAgICAgICAgICAgIAkJCQl7DQo2NDc6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCBweFF1ZXVlLT5weFF1ZXVlU2V0Q29udGFpbmVyICE9IE5VTEwgKQ0KQkZEMDBFNUUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMEU2MiAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApCkJGRDAwRTY2ICAwMDFFNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAwRUE2CjY0ODogICAgICAgICAgICAgICAgIAkJCQkJew0KNjQ5OiAgICAgICAgICAgICAgICAgCQkJCQkJaWYoIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyKCBweFF1ZXVlLCB4Q29weVBvc2l0aW9uICkgPT0gcGRUUlVFICkNCkJGRDAwRTZBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDBFNkUgIDAwNENGQ0JFICAgTFcgQTEsIDc2KFM4KQpCRkQwMEU3MiAgMjFEODc3RTggICBKQUxTIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyCkJGRDAwRTc0ICAwQzAwMjFEOCAgIExXQzIgVDYsIDMwNzIoVDgpCkJGRDAwRTc2ICAgICAgMEMwMCAgIE5PUApCRkQwMEU3OCAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMApCRkQwMEU3QSAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMEU3QyAgMDA0QkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAwRjE2CkJGRDAwRTdFICAwQzAwMDA0QiAgIFNMTCBWMCwgVDMsIDEKQkZEMDBFODAgICAgICAwQzAwICAgTk9QCjY1MDogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjY1MTogICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgcXVldWUgaXMgYSBtZW1iZXIgb2YgYSBxdWV1ZSBzZXQsIGFuZCBwb3N0aW5nDQo2NTI6ICAgICAgICAgICAgICAgICAJCQkJCQkJdG8gdGhlIHF1ZXVlIHNldCBjYXVzZWQgYSBoaWdoZXIgcHJpb3JpdHkgdGFzayB0bw0KNjUzOiAgICAgICAgICAgICAgICAgCQkJCQkJCXVuYmxvY2suIEEgY29udGV4dCBzd2l0Y2ggaXMgcmVxdWlyZWQuICovDQo2NTQ6ICAgICAgICAgICAgICAgICAJCQkJCQkJcXVldWVZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMEU4MiAgNEUxNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDAwRTg0ICAgICAgNEUxNiAgIEFERElVIFMwLCBTMCwgLTUKQkZEMDBFODYgICAgICAwQzAwICAgTk9QCkJGRDAwRTg4ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKQkZEMDBFOEMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMEU5MCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDBFOTQgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQpCRkQwMEU5OCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDAwRTlDICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQpCRkQwMEU5RSAgICAgIDRFMjYgICBBRERJVSBTMSwgUzEsIDMKQkZEMDBFQTAgICAgICAwQzAwICAgTk9QCkJGRDAwRUEyICAgICAgQ0MzOSAgIEIgMHhCRkQwMEYxNgpCRkQwMEVBNCAgICAgIDBDMDAgICBOT1AKNjU1OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KNjU2OiAgICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KNjU3OiAgICAgICAgICAgICAgICAgCQkJCQkJew0KNjU4OiAgICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjY1OTogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjY2MDogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNjYxOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQo2NjI6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjY2MzogICAgICAgICAgICAgICAgIAkJCQkJCS8qIElmIHRoZXJlIHdhcyBhIHRhc2sgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUgb24gdGhlDQo2NjQ6ICAgICAgICAgICAgICAgICAJCQkJCQlxdWV1ZSB0aGVuIHVuYmxvY2sgaXQgbm93LiAqLw0KNjY1OiAgICAgICAgICAgICAgICAgCQkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCkJGRDAwRUE2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDBFQUEgICAgICA2OTI5ICAgTFcgVjAsIDM2KFYwKQpCRkQwMEVBQyAgMDAxRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMEVFRQo2NjY6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo2Njc6ICAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRUUlVFICkNCkJGRDAwRUIwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDBFQjQgIDAwMjQzMDQyICAgQURESVUgVjAsIFYwLCAzNgpCRkQwMEVCOCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMEVCQSAgMjJCQzc3RTggICBKQUxTIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdApCRkQwMEVCQyAgMEMwMDIyQkMgICBMV0MyIFM1LCAzMDcyKEdQKQpCRkQwMEVCRSAgICAgIDBDMDAgICBOT1AKQkZEMDBFQzAgICAgICAwQzYyICAgTU9WRSBWMSwgVjAKQkZEMDBFQzIgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDBFQzQgIDAwMjdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMEYxNgpCRkQwMEVDNiAgMEMwMDAwMjcgICBTTEwgQVQsIEEzLCAxCkJGRDAwRUM4ICAgICAgMEMwMCAgIE5PUAo2Njg6ICAgICAgICAgICAgICAgICAJCQkJCQkJew0KNjY5OiAgICAgICAgICAgICAgICAgCQkJCQkJCQkvKiBUaGUgdW5ibG9ja2VkIHRhc2sgaGFzIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4NCjY3MDogICAgICAgICAgICAgICAgIAkJCQkJCQkJb3VyIG93biBzbyB5aWVsZCBpbW1lZGlhdGVseS4gIFllcyBpdCBpcyBvayB0bw0KNjcxOiAgICAgICAgICAgICAgICAgCQkJCQkJCQlkbyB0aGlzIGZyb20gd2l0aGluIHRoZSBjcml0aWNhbCBzZWN0aW9uIC0gdGhlDQo2NzI6ICAgICAgICAgICAgICAgICAJCQkJCQkJCWtlcm5lbCB0YWtlcyBjYXJlIG9mIHRoYXQuICovDQo2NzM6ICAgICAgICAgICAgICAgICAJCQkJCQkJCXF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KQkZEMDBFQ0EgIDRFMTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQpCRkQwMEVDQyAgICAgIDRFMTYgICBBRERJVSBTMCwgUzAsIC01CkJGRDAwRUNFICAgICAgMEMwMCAgIE5PUApCRkQwMEVEMCAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpCkJGRDAwRUQ0ICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDBFRDggIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDAwRURDICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkKQkZEMDBFRTAgIDAwMjRGQzlFICAgTFcgQTAsIDM2KFM4KQpCRkQwMEVFNCAgNEUyNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UKQkZEMDBFRTYgICAgICA0RTI2ICAgQURESVUgUzEsIFMxLCAzCkJGRDAwRUU4ICAgICAgMEMwMCAgIE5PUApCRkQwMEVFQSAgICAgIENDMTUgICBCIDB4QkZEMDBGMTYKQkZEMDBFRUMgICAgICAwQzAwICAgTk9QCjY3NDogICAgICAgICAgICAgICAgIAkJCQkJCQl9DQo2NzU6ICAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KNjc2OiAgICAgICAgICAgICAgICAgCQkJCQkJCXsNCjY3NzogICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjc4OiAgICAgICAgICAgICAgICAgCQkJCQkJCX0NCjY3OTogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjY4MDogICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UgaWYoIHhZaWVsZFJlcXVpcmVkICE9IHBkRkFMU0UgKQ0KQkZEMDBFRUUgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMEVGMiAgMDAxMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMEYxNgo2ODE6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo2ODI6ICAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhpcyBwYXRoIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgd2lsbCBvbmx5IGdldA0KNjgzOiAgICAgICAgICAgICAgICAgCQkJCQkJCWV4ZWN1dGVkIGlmIHRoZSB0YXNrIHdhcyBob2xkaW5nIG11bHRpcGxlIG11dGV4ZXMNCjY4NDogICAgICAgICAgICAgICAgIAkJCQkJCQlhbmQgdGhlIG11dGV4ZXMgd2VyZSBnaXZlbiBiYWNrIGluIGFuIG9yZGVyIHRoYXQgaXMNCjY4NTogICAgICAgICAgICAgICAgIAkJCQkJCQlkaWZmZXJlbnQgdG8gdGhhdCBpbiB3aGljaCB0aGV5IHdlcmUgdGFrZW4uICovDQo2ODY6ICAgICAgICAgICAgICAgICAJCQkJCQkJcXVldWVZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMEVGNiAgNEUxNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDAwRUY4ICAgICAgNEUxNiAgIEFERElVIFMwLCBTMCwgLTUKQkZEMDBFRkEgICAgICAwQzAwICAgTk9QCkJGRDAwRUZDICAwMDI4Rjg1RSAgIFNXIFYwLCA0MChTOCkKQkZEMDBGMDAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwMEYwNCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDBGMDggIDAwMjhGODVFICAgU1cgVjAsIDQwKFM4KQpCRkQwMEYwQyAgMDAyOEZDOUUgICBMVyBBMCwgNDAoUzgpCkJGRDAwRjEwICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQpCRkQwMEYxMiAgICAgIDRFMjYgICBBRERJVSBTMSwgUzEsIDMKQkZEMDBGMTQgICAgICAwQzAwICAgTk9QCjY4NzogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjY4ODogICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjY4OTogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjY5MDogICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo2OTE6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo2OTI6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjY5MzogICAgICAgICAgICAgICAgIAkJCQl9DQo2OTQ6ICAgICAgICAgICAgICAgICAJCQkJI2Vsc2UgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjY5NTogICAgICAgICAgICAgICAgIAkJCQl7DQo2OTY6ICAgICAgICAgICAgICAgICAJCQkJCS8qIElmIHRoZXJlIHdhcyBhIHRhc2sgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUgb24gdGhlDQo2OTc6ICAgICAgICAgICAgICAgICAJCQkJCXF1ZXVlIHRoZW4gdW5ibG9jayBpdCBub3cuICovDQo2OTg6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQo2OTk6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjcwMDogICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkVFJVRSApDQo3MDE6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo3MDI6ICAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuDQo3MDM6ICAgICAgICAgICAgICAgICAJCQkJCQkJb3VyIG93biBzbyB5aWVsZCBpbW1lZGlhdGVseS4gIFllcyBpdCBpcyBvayB0byBkbw0KNzA0OiAgICAgICAgICAgICAgICAgCQkJCQkJCXRoaXMgZnJvbSB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gLSB0aGUga2VybmVsDQo3MDU6ICAgICAgICAgICAgICAgICAJCQkJCQkJdGFrZXMgY2FyZSBvZiB0aGF0LiAqLw0KNzA2OiAgICAgICAgICAgICAgICAgCQkJCQkJCXF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KNzA3OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KNzA4OiAgICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KNzA5OiAgICAgICAgICAgICAgICAgCQkJCQkJew0KNzEwOiAgICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjcxMTogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjcxMjogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNzEzOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlIGlmKCB4WWllbGRSZXF1aXJlZCAhPSBwZEZBTFNFICkNCjcxNDogICAgICAgICAgICAgICAgIAkJCQkJew0KNzE1OiAgICAgICAgICAgICAgICAgCQkJCQkJLyogVGhpcyBwYXRoIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgd2lsbCBvbmx5IGdldA0KNzE2OiAgICAgICAgICAgICAgICAgCQkJCQkJZXhlY3V0ZWQgaWYgdGhlIHRhc2sgd2FzIGhvbGRpbmcgbXVsdGlwbGUgbXV0ZXhlcyBhbmQNCjcxNzogICAgICAgICAgICAgICAgIAkJCQkJCXRoZSBtdXRleGVzIHdlcmUgZ2l2ZW4gYmFjayBpbiBhbiBvcmRlciB0aGF0IGlzDQo3MTg6ICAgICAgICAgICAgICAgICAJCQkJCQlkaWZmZXJlbnQgdG8gdGhhdCBpbiB3aGljaCB0aGV5IHdlcmUgdGFrZW4uICovDQo3MTk6ICAgICAgICAgICAgICAgICAJCQkJCQlxdWV1ZVlJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKTsNCjcyMDogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNzIxOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQo3MjI6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjcyMzogICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjcyNDogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNzI1OiAgICAgICAgICAgICAgICAgCQkJCX0NCjcyNjogICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjcyNzogICAgICAgICAgICAgICAgIA0KNzI4OiAgICAgICAgICAgICAgICAgCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMEYxNiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAwRjE4ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyNzFDCkJGRDAwRjFBICAgICAgMEMwMCAgIE5PUAo3Mjk6ICAgICAgICAgICAgICAgICAJCQkJcmV0dXJuIHBkUEFTUzsNCkJGRDAwRjFDICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAwRjFFICAgICAgQ0M4NyAgIEIgMHhCRkQwMTAyRQpCRkQwMEYyMCAgICAgIDBDMDAgICBOT1AKNzMwOiAgICAgICAgICAgICAgICAgCQkJfQ0KNzMxOiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNzMyOiAgICAgICAgICAgICAgICAgCQkJew0KNzMzOiAgICAgICAgICAgICAgICAgCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gKCBUaWNrVHlwZV90ICkgMCApDQpCRkQwMEYyMiAgMDA0OEZDNUUgICBMVyBWMCwgNzIoUzgpCkJGRDAwRjI2ICAwMDA2NDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRjM2CjczNDogICAgICAgICAgICAgICAgIAkJCQl7DQo3MzU6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBxdWV1ZSB3YXMgZnVsbCBhbmQgbm8gYmxvY2sgdGltZSBpcyBzcGVjaWZpZWQgKG9yDQo3MzY6ICAgICAgICAgICAgICAgICAJCQkJCXRoZSBibG9jayB0aW1lIGhhcyBleHBpcmVkKSBzbyBsZWF2ZSBub3cuICovDQo3Mzc6ICAgICAgICAgICAgICAgICAJCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMEYyQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAwRjJDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyNzMwCkJGRDAwRjJFICAgICAgMEMwMCAgIE5PUAo3Mzg6ICAgICAgICAgICAgICAgICANCjczOTogICAgICAgICAgICAgICAgIAkJCQkJLyogUmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBwcml2aWxlZ2UgbGV2ZWwgYmVmb3JlIGV4aXRpbmcNCjc0MDogICAgICAgICAgICAgICAgIAkJCQkJdGhlIGZ1bmN0aW9uLiAqLw0KNzQxOiAgICAgICAgICAgICAgICAgCQkJCQl0cmFjZVFVRVVFX1NFTkRfRkFJTEVEKCBweFF1ZXVlICk7DQo3NDI6ICAgICAgICAgICAgICAgICAJCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KQkZEMDBGMzAgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwMEYzMiAgICAgIENDN0QgICBCIDB4QkZEMDEwMkUKQkZEMDBGMzQgICAgICAwQzAwICAgTk9QCjc0MzogICAgICAgICAgICAgICAgIAkJCQl9DQo3NDQ6ICAgICAgICAgICAgICAgICAJCQkJZWxzZSBpZiggeEVudHJ5VGltZVNldCA9PSBwZEZBTFNFICkNCkJGRDAwRjM2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDBGM0EgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBGNTAKNzQ1OiAgICAgICAgICAgICAgICAgCQkJCXsNCjc0NjogICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHF1ZXVlIHdhcyBmdWxsIGFuZCBhIGJsb2NrIHRpbWUgd2FzIHNwZWNpZmllZCBzbw0KNzQ3OiAgICAgICAgICAgICAgICAgCQkJCQljb25maWd1cmUgdGhlIHRpbWVvdXQgc3RydWN0dXJlLiAqLw0KNzQ4OiAgICAgICAgICAgICAgICAgCQkJCQl2VGFza1NldFRpbWVPdXRTdGF0ZSggJnhUaW1lT3V0ICk7DQpCRkQwMEYzRSAgMDAyQzMwNUUgICBBRERJVSBWMCwgUzgsIDQ0CkJGRDAwRjQyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAwRjQ0ICA0N0E2NzdFOCAgIEpBTFMgdlRhc2tTZXRUaW1lT3V0U3RhdGUKQkZEMDBGNDggICAgICAwQzAwICAgTk9QCjc0OTogICAgICAgICAgICAgICAgIAkJCQkJeEVudHJ5VGltZVNldCA9IHBkVFJVRTsNCkJGRDAwRjRBICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAwRjRDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNzUwOiAgICAgICAgICAgICAgICAgCQkJCX0NCjc1MTogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo3NTI6ICAgICAgICAgICAgICAgICAJCQkJew0KNzUzOiAgICAgICAgICAgICAgICAgCQkJCQkvKiBFbnRyeSB0aW1lIHdhcyBhbHJlYWR5IHNldC4gKi8NCjc1NDogICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNzU1OiAgICAgICAgICAgICAgICAgCQkJCX0NCjc1NjogICAgICAgICAgICAgICAgIAkJCX0NCjc1NzogICAgICAgICAgICAgICAgIAkJfQ0KNzU4OiAgICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDBGNTAgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMEY1MiAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMjc1NgpCRkQwMEY1NCAgICAgIDBDMDAgICBOT1AKNzU5OiAgICAgICAgICAgICAgICAgDQo3NjA6ICAgICAgICAgICAgICAgICAJCS8qIEludGVycnVwdHMgYW5kIG90aGVyIHRhc2tzIGNhbiBzZW5kIHRvIGFuZCByZWNlaXZlIGZyb20gdGhlIHF1ZXVlDQo3NjE6ICAgICAgICAgICAgICAgICAJCW5vdyB0aGUgY3JpdGljYWwgc2VjdGlvbiBoYXMgYmVlbiBleGl0ZWQuICovDQo3NjI6ICAgICAgICAgICAgICAgICANCjc2MzogICAgICAgICAgICAgICAgIAkJdlRhc2tTdXNwZW5kQWxsKCk7DQpCRkQwMEY1NiAgNEVGNDc3RTggICBKQUxTIHZUYXNrU3VzcGVuZEFsbApCRkQwMEY1OCAgICAgIDRFRjQgICBBRERJVSBTNywgUzcsIC02CkJGRDAwRjVBICAgICAgMEMwMCAgIE5PUAo3NjQ6ICAgICAgICAgICAgICAgICAJCXBydkxvY2tRdWV1ZSggcHhRdWV1ZSApOw0KQkZEMDBGNUMgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDBGNUUgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDAwRjYwICAgICAgMEMwMCAgIE5PUApCRkQwMEY2MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAwRjY2ICAwMDQ0RkM2MiAgIExXIFYxLCA2OChWMCkKQkZEMDBGNkEgICAgICBFRDdGICAgTEkgVjAsIC0xCkJGRDAwRjZDICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDBGN0EKQkZEMDBGNkUgIDBDMDAwMDA1ICAgU0xMIFpFUk8sIEExLCAxCkJGRDAwRjcwICAgICAgMEMwMCAgIE5PUApCRkQwMEY3MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAwRjc2ICAwMDQ0RjgwMiAgIFNXIFpFUk8sIDY4KFYwKQpCRkQwMEY3QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAwRjdFICAwMDQ4RkM2MiAgIExXIFYxLCA3MihWMCkKQkZEMDBGODIgICAgICBFRDdGICAgTEkgVjAsIC0xCkJGRDAwRjg0ICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDBGOTIKQkZEMDBGODYgIDBDMDAwMDA1ICAgU0xMIFpFUk8sIEExLCAxCkJGRDAwRjg4ICAgICAgMEMwMCAgIE5PUApCRkQwMEY4QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAwRjhFICAwMDQ4RjgwMiAgIFNXIFpFUk8sIDcyKFYwKQpCRkQwMEY5MiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAwRjk0ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyNzk4CkJGRDAwRjk2ICAgICAgMEMwMCAgIE5PUAo3NjU6ICAgICAgICAgICAgICAgICANCjc2NjogICAgICAgICAgICAgICAgIAkJLyogVXBkYXRlIHRoZSB0aW1lb3V0IHN0YXRlIHRvIHNlZSBpZiBpdCBoYXMgZXhwaXJlZCB5ZXQuICovDQo3Njc6ICAgICAgICAgICAgICAgICAJCWlmKCB4VGFza0NoZWNrRm9yVGltZU91dCggJnhUaW1lT3V0LCAmeFRpY2tzVG9XYWl0ICkgPT0gcGRGQUxTRSApDQpCRkQwMEY5OCAgMDAyQzMwN0UgICBBRERJVSBWMSwgUzgsIDQ0CkJGRDAwRjlDICAwMDQ4MzA1RSAgIEFERElVIFYwLCBTOCwgNzIKQkZEMDBGQTAgICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDBGQTIgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDBGQTQgIDFGRjY3N0U4ICAgSkFMUyB4VGFza0NoZWNrRm9yVGltZU91dApCRkQwMEZBNiAgMEMwMDFGRjYgICBMQiBSQSwgMzA3MihTNikKQkZEMDBGQTggICAgICAwQzAwICAgTk9QCkJGRDAwRkFBICAwMDM3NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMDFDCjc2ODogICAgICAgICAgICAgICAgIAkJew0KNzY5OiAgICAgICAgICAgICAgICAgCQkJaWYoIHBydklzUXVldWVGdWxsKCBweFF1ZXVlICkgIT0gcGRGQUxTRSApDQpCRkQwMEZBRSAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDAwRkIyICA0NzgyNzdFOCAgIEpBTFMgcHJ2SXNRdWV1ZUZ1bGwKQkZEMDBGQjYgICAgICAwQzAwICAgTk9QCkJGRDAwRkI4ICAwMDI2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxMDA4Cjc3MDogICAgICAgICAgICAgICAgIAkJCXsNCjc3MTogICAgICAgICAgICAgICAgIAkJCQl0cmFjZUJMT0NLSU5HX09OX1FVRVVFX1NFTkQoIHB4UXVldWUgKTsNCjc3MjogICAgICAgICAgICAgICAgIAkJCQl2VGFza1BsYWNlT25FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSwgeFRpY2tzVG9XYWl0ICk7DQpCRkQwMEZCQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAwRkMwICAgICAgNkRBOCAgIEFERElVIFYxLCBWMCwgMTYKQkZEMDBGQzIgIDAwNDhGQzVFICAgTFcgVjAsIDcyKFM4KQpCRkQwMEZDNiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMEZDOCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMEZDQSAgMkYzQTc3RTggICBKQUxTIHZUYXNrUGxhY2VPbkV2ZW50TGlzdApCRkQwMEZDQyAgICAgIDJGM0EgICBBTkRJIEEyLCBWMSwgMHgyMApCRkQwMEZDRSAgICAgIDBDMDAgICBOT1AKNzczOiAgICAgICAgICAgICAgICAgDQo3NzQ6ICAgICAgICAgICAgICAgICAJCQkJLyogVW5sb2NraW5nIHRoZSBxdWV1ZSBtZWFucyBxdWV1ZSBldmVudHMgY2FuIGVmZmVjdCB0aGUNCjc3NTogICAgICAgICAgICAgICAgIAkJCQlldmVudCBsaXN0LiAgSXQgaXMgcG9zc2libGUJdGhhdCBpbnRlcnJ1cHRzIG9jY3VycmluZyBub3cNCjc3NjogICAgICAgICAgICAgICAgIAkJCQlyZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIGV2ZW50CWxpc3QgYWdhaW4gLSBidXQgYXMgdGhlDQo3Nzc6ICAgICAgICAgICAgICAgICAJCQkJc2NoZWR1bGVyIGlzIHN1c3BlbmRlZCB0aGUgdGFzayB3aWxsIGdvIG9udG8gdGhlIHBlbmRpbmcNCjc3ODogICAgICAgICAgICAgICAgIAkJCQlyZWFkeSBsYXN0IGluc3RlYWQgb2YgdGhlIGFjdHVhbCByZWFkeSBsaXN0LiAqLw0KNzc5OiAgICAgICAgICAgICAgICAgCQkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwMEZEMCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDAwRkQ0ICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUKQkZEMDBGRDYgIDBDMDAxREVFICAgTEIgVDcsIDMwNzIoVDYpCkJGRDAwRkQ4ICAgICAgMEMwMCAgIE5PUAo3ODA6ICAgICAgICAgICAgICAgICANCjc4MTogICAgICAgICAgICAgICAgIAkJCQkvKiBSZXN1bWluZyB0aGUgc2NoZWR1bGVyIHdpbGwgbW92ZSB0YXNrcyBmcm9tIHRoZSBwZW5kaW5nDQo3ODI6ICAgICAgICAgICAgICAgICAJCQkJcmVhZHkgbGlzdCBpbnRvIHRoZSByZWFkeSBsaXN0IC0gc28gaXQgaXMgZmVhc2libGUgdGhhdCB0aGlzDQo3ODM6ICAgICAgICAgICAgICAgICAJCQkJdGFzayBpcyBhbHJlYWR5IGluIGEgcmVhZHkgbGlzdCBiZWZvcmUgaXQgeWllbGRzIC0gaW4gd2hpY2gNCjc4NDogICAgICAgICAgICAgICAgIAkJCQljYXNlIHRoZSB5aWVsZCB3aWxsIG5vdCBjYXVzZSBhIGNvbnRleHQgc3dpdGNoIHVubGVzcyB0aGVyZQ0KNzg1OiAgICAgICAgICAgICAgICAgCQkJCWlzIGFsc28gYSBoaWdoZXIgcHJpb3JpdHkgdGFzayBpbiB0aGUgcGVuZGluZyByZWFkeSBsaXN0LiAqLw0KNzg2OiAgICAgICAgICAgICAgICAgCQkJCWlmKCB4VGFza1Jlc3VtZUFsbCgpID09IHBkRkFMU0UgKQ0KQkZEMDBGREEgIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbApCRkQwMEZEQyAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpCkJGRDAwRkRFICAgICAgMEMwMCAgIE5PUApCRkQwMEZFMCAgRkYxRTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMEUyMApCRkQwMEZFMiAgNzdFOEZGMUUgICBMVyBUOCwgMzA2OTYoUzgpCjc4NzogICAgICAgICAgICAgICAgIAkJCQl7DQo3ODg6ICAgICAgICAgICAgICAgICAJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQpCRkQwMEZFNCAgNEUxNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDAwRkU2ICAgICAgNEUxNiAgIEFERElVIFMwLCBTMCwgLTUKQkZEMDBGRTggICAgICAwQzAwICAgTk9QCkJGRDAwRkVBICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKQkZEMDBGRUUgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwMEZGMiAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDBGRjYgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQpCRkQwMEZGQSAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDAwRkZFICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQpCRkQwMTAwMCAgICAgIDRFMjYgICBBRERJVSBTMSwgUzEsIDMKQkZEMDEwMDIgICAgICAwQzAwICAgTk9QCjc4OTogICAgICAgICAgICAgICAgIAkJCQl9DQo3OTA6ICAgICAgICAgICAgICAgICAJCQl9DQo3OTE6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo3OTI6ICAgICAgICAgICAgICAgICAJCQl7DQo3OTM6ICAgICAgICAgICAgICAgICAJCQkJLyogVHJ5IGFnYWluLiAqLw0KNzk0OiAgICAgICAgICAgICAgICAgCQkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwMTAwOCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDAxMDBDICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUKQkZEMDEwMEUgIDBDMDAxREVFICAgTEIgVDcsIDMwNzIoVDYpCkJGRDAxMDEwICAgICAgMEMwMCAgIE5PUAo3OTU6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDAxMDEyICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDEwMTQgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwMTAxNiAgICAgIDBDMDAgICBOT1AKNzk2OiAgICAgICAgICAgICAgICAgCQkJfQ0KNzk3OiAgICAgICAgICAgICAgICAgCQl9DQo3OTg6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjc5OTogICAgICAgICAgICAgICAgIAkJew0KODAwOiAgICAgICAgICAgICAgICAgCQkJLyogVGhlIHRpbWVvdXQgaGFzIGV4cGlyZWQuICovDQo4MDE6ICAgICAgICAgICAgICAgICAJCQlwcnZVbmxvY2tRdWV1ZSggcHhRdWV1ZSApOw0KQkZEMDEwMUMgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQpCRkQwMTAyMCAgMURFRTc3RTggICBKQUxTIHBydlVubG9ja1F1ZXVlCkJGRDAxMDIyICAwQzAwMURFRSAgIExCIFQ3LCAzMDcyKFQ2KQpCRkQwMTAyNCAgICAgIDBDMDAgICBOT1AKODAyOiAgICAgICAgICAgICAgICAgCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDAxMDI2ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDEwMjggIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwMTAyQSAgICAgIDBDMDAgICBOT1AKODAzOiAgICAgICAgICAgICAgICAgDQo4MDQ6ICAgICAgICAgICAgICAgICAJCQkvKiBSZXR1cm4gdG8gdGhlIG9yaWdpbmFsIHByaXZpbGVnZSBsZXZlbCBiZWZvcmUgZXhpdGluZyB0aGUNCjgwNTogICAgICAgICAgICAgICAgIAkJCWZ1bmN0aW9uLiAqLw0KODA2OiAgICAgICAgICAgICAgICAgCQkJdHJhY2VRVUVVRV9TRU5EX0ZBSUxFRCggcHhRdWV1ZSApOw0KODA3OiAgICAgICAgICAgICAgICAgCQkJcmV0dXJuIGVyclFVRVVFX0ZVTEw7DQpCRkQwMTAyQyAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjgwODogICAgICAgICAgICAgICAgIAkJfQ0KODA5OiAgICAgICAgICAgICAgICAgCX0NCkJGRDAwRTIwICAgICAgMEMwMCAgIE5PUApCRkQwMTAwNCAgICAgIENGMEUgICBCIDB4QkZEMDBFMjIKQkZEMDEwMDYgICAgICAwQzAwICAgTk9QCkJGRDAxMDE4ICAgICAgQ0YwNCAgIEIgMHhCRkQwMEUyMgpCRkQwMTAxQSAgICAgIDBDMDAgICBOT1AKODEwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDEwMkUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDEwMzAgICAgICA0QkVGICAgTFcgUkEsIDYwKFNQKQpCRkQwMTAzMiAgICAgIDRCQ0UgICBMVyBTOCwgNTYoU1ApCkJGRDAxMDM0ICAgICAgNEMyMSAgIEFERElVIFNQLCBTUCwgNjQKQkZEMDEwMzYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMTAzOCAgICAgIDBDMDAgICBOT1AKODExOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4MTI6ICAgICAgICAgICAgICAgICANCjgxMzogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9BTFRFUk5BVElWRV9BUEkgPT0gMSApDQo4MTQ6ICAgICAgICAgICAgICAgICANCjgxNTogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhRdWV1ZUFsdEdlbmVyaWNTZW5kKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgY29uc3Qgdm9pZCAqIGNvbnN0IHB2SXRlbVRvUXVldWUsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0LCBCYXNlVHlwZV90IHhDb3B5UG9zaXRpb24gKQ0KODE2OiAgICAgICAgICAgICAgICAgCXsNCjgxNzogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhFbnRyeVRpbWVTZXQgPSBwZEZBTFNFOw0KODE4OiAgICAgICAgICAgICAgICAgCVRpbWVPdXRfdCB4VGltZU91dDsNCjgxOTogICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KODIwOiAgICAgICAgICAgICAgICAgDQo4MjE6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KODIyOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoICEoICggcHZJdGVtVG9RdWV1ZSA9PSBOVUxMICkgJiYgKCBweFF1ZXVlLT51eEl0ZW1TaXplICE9ICggVUJhc2VUeXBlX3QgKSAwVSApICkgKTsNCjgyMzogICAgICAgICAgICAgICAgIA0KODI0OiAgICAgICAgICAgICAgICAgCQlmb3IoIDs7ICkNCjgyNTogICAgICAgICAgICAgICAgIAkJew0KODI2OiAgICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQo4Mjc6ICAgICAgICAgICAgICAgICAJCQl7DQo4Mjg6ICAgICAgICAgICAgICAgICAJCQkJLyogSXMgdGhlcmUgcm9vbSBvbiB0aGUgcXVldWUgbm93PyAgVG8gYmUgcnVubmluZyB3ZSBtdXN0IGJlDQo4Mjk6ICAgICAgICAgICAgICAgICAJCQkJdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB3YW50aW5nIHRvIGFjY2VzcyB0aGUgcXVldWUuICovDQo4MzA6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZS0+dXhMZW5ndGggKQ0KODMxOiAgICAgICAgICAgICAgICAgCQkJCXsNCjgzMjogICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VRVUVVRV9TRU5EKCBweFF1ZXVlICk7DQo4MzM6ICAgICAgICAgICAgICAgICAJCQkJCXBydkNvcHlEYXRhVG9RdWV1ZSggcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgeENvcHlQb3NpdGlvbiApOw0KODM0OiAgICAgICAgICAgICAgICAgDQo4MzU6ICAgICAgICAgICAgICAgICAJCQkJCS8qIElmIHRoZXJlIHdhcyBhIHRhc2sgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUgb24gdGhlDQo4MzY6ICAgICAgICAgICAgICAgICAJCQkJCXF1ZXVlIHRoZW4gdW5ibG9jayBpdCBub3cuICovDQo4Mzc6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQo4Mzg6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjgzOTogICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkVFJVRSApDQo4NDA6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo4NDE6ICAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuDQo4NDI6ICAgICAgICAgICAgICAgICAJCQkJCQkJb3VyIG93biBzbyB5aWVsZCBpbW1lZGlhdGVseS4gKi8NCjg0MzogICAgICAgICAgICAgICAgIAkJCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KODQ0OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KODQ1OiAgICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KODQ2OiAgICAgICAgICAgICAgICAgCQkJCQkJew0KODQ3OiAgICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjg0ODogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjg0OTogICAgICAgICAgICAgICAgIAkJCQkJfQ0KODUwOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQo4NTE6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjg1MjogICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjg1MzogICAgICAgICAgICAgICAgIAkJCQkJfQ0KODU0OiAgICAgICAgICAgICAgICAgDQo4NTU6ICAgICAgICAgICAgICAgICAJCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQo4NTY6ICAgICAgICAgICAgICAgICAJCQkJCXJldHVybiBwZFBBU1M7DQo4NTc6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODU4OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjg1OTogICAgICAgICAgICAgICAgIAkJCQl7DQo4NjA6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gKCBUaWNrVHlwZV90ICkgMCApDQo4NjE6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjg2MjogICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQo4NjM6ICAgICAgICAgICAgICAgICAJCQkJCQlyZXR1cm4gZXJyUVVFVUVfRlVMTDsNCjg2NDogICAgICAgICAgICAgICAgIAkJCQkJfQ0KODY1OiAgICAgICAgICAgICAgICAgCQkJCQllbHNlIGlmKCB4RW50cnlUaW1lU2V0ID09IHBkRkFMU0UgKQ0KODY2OiAgICAgICAgICAgICAgICAgCQkJCQl7DQo4Njc6ICAgICAgICAgICAgICAgICAJCQkJCQl2VGFza1NldFRpbWVPdXRTdGF0ZSggJnhUaW1lT3V0ICk7DQo4Njg6ICAgICAgICAgICAgICAgICAJCQkJCQl4RW50cnlUaW1lU2V0ID0gcGRUUlVFOw0KODY5OiAgICAgICAgICAgICAgICAgCQkJCQl9DQo4NzA6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODcxOiAgICAgICAgICAgICAgICAgCQkJfQ0KODcyOiAgICAgICAgICAgICAgICAgCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjg3MzogICAgICAgICAgICAgICAgIA0KODc0OiAgICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQo4NzU6ICAgICAgICAgICAgICAgICAJCQl7DQo4NzY6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrQ2hlY2tGb3JUaW1lT3V0KCAmeFRpbWVPdXQsICZ4VGlja3NUb1dhaXQgKSA9PSBwZEZBTFNFICkNCjg3NzogICAgICAgICAgICAgICAgIAkJCQl7DQo4Nzg6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCBwcnZJc1F1ZXVlRnVsbCggcHhRdWV1ZSApICE9IHBkRkFMU0UgKQ0KODc5OiAgICAgICAgICAgICAgICAgCQkJCQl7DQo4ODA6ICAgICAgICAgICAgICAgICAJCQkJCQl0cmFjZUJMT0NLSU5HX09OX1FVRVVFX1NFTkQoIHB4UXVldWUgKTsNCjg4MTogICAgICAgICAgICAgICAgIAkJCQkJCXZUYXNrUGxhY2VPbkV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApLCB4VGlja3NUb1dhaXQgKTsNCjg4MjogICAgICAgICAgICAgICAgIAkJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQo4ODM6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjg4NDogICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KODg1OiAgICAgICAgICAgICAgICAgCQkJCQl7DQo4ODY6ICAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo4ODc6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjg4ODogICAgICAgICAgICAgICAgIAkJCQl9DQo4ODk6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KODkwOiAgICAgICAgICAgICAgICAgCQkJCXsNCjg5MTogICAgICAgICAgICAgICAgIAkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjg5MjogICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VRVUVVRV9TRU5EX0ZBSUxFRCggcHhRdWV1ZSApOw0KODkzOiAgICAgICAgICAgICAgICAgCQkJCQlyZXR1cm4gZXJyUVVFVUVfRlVMTDsNCjg5NDogICAgICAgICAgICAgICAgIAkJCQl9DQo4OTU6ICAgICAgICAgICAgICAgICAJCQl9DQo4OTY6ICAgICAgICAgICAgICAgICAJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KODk3OiAgICAgICAgICAgICAgICAgCQl9DQo4OTg6ICAgICAgICAgICAgICAgICAJfQ0KODk5OiAgICAgICAgICAgICAgICAgDQo5MDA6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX0FMVEVSTkFUSVZFX0FQSSAqLw0KOTAxOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo5MDI6ICAgICAgICAgICAgICAgICANCjkwMzogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9BTFRFUk5BVElWRV9BUEkgPT0gMSApDQo5MDQ6ICAgICAgICAgICAgICAgICANCjkwNTogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhRdWV1ZUFsdEdlbmVyaWNSZWNlaXZlKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgdm9pZCAqIGNvbnN0IHB2QnVmZmVyLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCwgQmFzZVR5cGVfdCB4SnVzdFBlZWtpbmcgKQ0KOTA2OiAgICAgICAgICAgICAgICAgCXsNCjkwNzogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhFbnRyeVRpbWVTZXQgPSBwZEZBTFNFOw0KOTA4OiAgICAgICAgICAgICAgICAgCVRpbWVPdXRfdCB4VGltZU91dDsNCjkwOTogICAgICAgICAgICAgICAgIAlpbnQ4X3QgKnBjT3JpZ2luYWxSZWFkUG9zaXRpb247DQo5MTA6ICAgICAgICAgICAgICAgICAJUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCjkxMTogICAgICAgICAgICAgICAgIA0KOTEyOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCjkxMzogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAhKCAoIHB2QnVmZmVyID09IE5VTEwgKSAmJiAoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCBVQmFzZVR5cGVfdCApIDBVICkgKSApOw0KOTE0OiAgICAgICAgICAgICAgICAgDQo5MTU6ICAgICAgICAgICAgICAgICAJCWZvciggOzsgKQ0KOTE2OiAgICAgICAgICAgICAgICAgCQl7DQo5MTc6ICAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCjkxODogICAgICAgICAgICAgICAgIAkJCXsNCjkxOTogICAgICAgICAgICAgICAgIAkJCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPiAoIFVCYXNlVHlwZV90ICkgMCApDQo5MjA6ICAgICAgICAgICAgICAgICAJCQkJew0KOTIxOiAgICAgICAgICAgICAgICAgCQkJCQkvKiBSZW1lbWJlciBvdXIgcmVhZCBwb3NpdGlvbiBpbiBjYXNlIHdlIGFyZSBqdXN0IHBlZWtpbmcuICovDQo5MjI6ICAgICAgICAgICAgICAgICAJCQkJCXBjT3JpZ2luYWxSZWFkUG9zaXRpb24gPSBweFF1ZXVlLT51LnBjUmVhZEZyb207DQo5MjM6ICAgICAgICAgICAgICAgICANCjkyNDogICAgICAgICAgICAgICAgIAkJCQkJcHJ2Q29weURhdGFGcm9tUXVldWUoIHB4UXVldWUsIHB2QnVmZmVyICk7DQo5MjU6ICAgICAgICAgICAgICAgICANCjkyNjogICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhKdXN0UGVla2luZyA9PSBwZEZBTFNFICkNCjkyNzogICAgICAgICAgICAgICAgIAkJCQkJew0KOTI4OiAgICAgICAgICAgICAgICAgCQkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFKCBweFF1ZXVlICk7DQo5Mjk6ICAgICAgICAgICAgICAgICANCjkzMDogICAgICAgICAgICAgICAgIAkJCQkJCS8qIERhdGEgaXMgYWN0dWFsbHkgYmVpbmcgcmVtb3ZlZCAobm90IGp1c3QgcGVla2VkKS4gKi8NCjkzMTogICAgICAgICAgICAgICAgIAkJCQkJCS0tKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KOTMyOiAgICAgICAgICAgICAgICAgDQo5MzM6ICAgICAgICAgICAgICAgICAJCQkJCQkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjkzNDogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjkzNTogICAgICAgICAgICAgICAgIAkJCQkJCQlpZiggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApDQo5MzY6ICAgICAgICAgICAgICAgICAJCQkJCQkJew0KOTM3OiAgICAgICAgICAgICAgICAgCQkJCQkJCQkvKiBSZWNvcmQgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGltcGxlbWVudA0KOTM4OiAgICAgICAgICAgICAgICAgCQkJCQkJCQlwcmlvcml0eSBpbmhlcml0YW5jZSBzaG91bGQgaXQgYmVjb21lIG5lY2Vzc2FyeS4gKi8NCjkzOTogICAgICAgICAgICAgICAgIAkJCQkJCQkJcHhRdWV1ZS0+cHhNdXRleEhvbGRlciA9ICggaW50OF90ICogKSB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCk7DQo5NDA6ICAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KOTQxOiAgICAgICAgICAgICAgICAgCQkJCQkJCWVsc2UNCjk0MjogICAgICAgICAgICAgICAgIAkJCQkJCQl7DQo5NDM6ICAgICAgICAgICAgICAgICAJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjk0NDogICAgICAgICAgICAgICAgIAkJCQkJCQl9DQo5NDU6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo5NDY6ICAgICAgICAgICAgICAgICAJCQkJCQkjZW5kaWYNCjk0NzogICAgICAgICAgICAgICAgIA0KOTQ4OiAgICAgICAgICAgICAgICAgCQkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCjk0OTogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjk1MDogICAgICAgICAgICAgICAgIAkJCQkJCQlpZiggeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZFRSVUUgKQ0KOTUxOiAgICAgICAgICAgICAgICAgCQkJCQkJCXsNCjk1MjogICAgICAgICAgICAgICAgIAkJCQkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCjk1MzogICAgICAgICAgICAgICAgIAkJCQkJCQl9DQo5NTQ6ICAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KOTU1OiAgICAgICAgICAgICAgICAgCQkJCQkJCXsNCjk1NjogICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTU3OiAgICAgICAgICAgICAgICAgCQkJCQkJCX0NCjk1ODogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjk1OTogICAgICAgICAgICAgICAgIAkJCQkJfQ0KOTYwOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQo5NjE6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjk2MjogICAgICAgICAgICAgICAgIAkJCQkJCXRyYWNlUVVFVUVfUEVFSyggcHhRdWV1ZSApOw0KOTYzOiAgICAgICAgICAgICAgICAgDQo5NjQ6ICAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgZGF0YSBpcyBub3QgYmVpbmcgcmVtb3ZlZCwgc28gcmVzZXQgb3VyIHJlYWQNCjk2NTogICAgICAgICAgICAgICAgIAkJCQkJCXBvaW50ZXIuICovDQo5NjY6ICAgICAgICAgICAgICAgICAJCQkJCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gPSBwY09yaWdpbmFsUmVhZFBvc2l0aW9uOw0KOTY3OiAgICAgICAgICAgICAgICAgDQo5Njg6ICAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgZGF0YSBpcyBiZWluZyBsZWZ0IGluIHRoZSBxdWV1ZSwgc28gc2VlIGlmIHRoZXJlIGFyZQ0KOTY5OiAgICAgICAgICAgICAgICAgCQkJCQkJYW55IG90aGVyIHRhc2tzIHdhaXRpbmcgZm9yIHRoZSBkYXRhLiAqLw0KOTcwOiAgICAgICAgICAgICAgICAgCQkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCjk3MTogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjk3MjogICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUYXNrcyB0aGF0IGFyZSByZW1vdmVkIGZyb20gdGhlIGV2ZW50IGxpc3Qgd2lsbCBnZXQgYWRkZWQgdG8NCjk3MzogICAgICAgICAgICAgICAgIAkJCQkJCQl0aGUgcGVuZGluZyByZWFkeSBsaXN0IGFzIHRoZSBzY2hlZHVsZXIgaXMgc3RpbGwgc3VzcGVuZGVkLiAqLw0KOTc0OiAgICAgICAgICAgICAgICAgCQkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KOTc1OiAgICAgICAgICAgICAgICAgCQkJCQkJCXsNCjk3NjogICAgICAgICAgICAgICAgIAkJCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGlzIHRhc2suICovDQo5Nzc6ICAgICAgICAgICAgICAgICAJCQkJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQo5Nzg6ICAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KOTc5OiAgICAgICAgICAgICAgICAgCQkJCQkJCWVsc2UNCjk4MDogICAgICAgICAgICAgICAgIAkJCQkJCQl7DQo5ODE6ICAgICAgICAgICAgICAgICAJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjk4MjogICAgICAgICAgICAgICAgIAkJCQkJCQl9DQo5ODM6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo5ODQ6ICAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQo5ODU6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo5ODY6ICAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTg3OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KOTg4OiAgICAgICAgICAgICAgICAgCQkJCQl9DQo5ODk6ICAgICAgICAgICAgICAgICANCjk5MDogICAgICAgICAgICAgICAgIAkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjk5MTogICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIHBkUEFTUzsNCjk5MjogICAgICAgICAgICAgICAgIAkJCQl9DQo5OTM6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KOTk0OiAgICAgICAgICAgICAgICAgCQkJCXsNCjk5NTogICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhUaWNrc1RvV2FpdCA9PSAoIFRpY2tUeXBlX3QgKSAwICkNCjk5NjogICAgICAgICAgICAgICAgIAkJCQkJew0KOTk3OiAgICAgICAgICAgICAgICAgCQkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjk5ODogICAgICAgICAgICAgICAgIAkJCQkJCXRyYWNlUVVFVUVfUkVDRUlWRV9GQUlMRUQoIHB4UXVldWUgKTsNCjk5OTogICAgICAgICAgICAgICAgIAkJCQkJCXJldHVybiBlcnJRVUVVRV9FTVBUWTsNCjEwMDA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTAwMTogICAgICAgICAgICAgICAgCQkJCQllbHNlIGlmKCB4RW50cnlUaW1lU2V0ID09IHBkRkFMU0UgKQ0KMTAwMjogICAgICAgICAgICAgICAgCQkJCQl7DQoxMDAzOiAgICAgICAgICAgICAgICAJCQkJCQl2VGFza1NldFRpbWVPdXRTdGF0ZSggJnhUaW1lT3V0ICk7DQoxMDA0OiAgICAgICAgICAgICAgICAJCQkJCQl4RW50cnlUaW1lU2V0ID0gcGRUUlVFOw0KMTAwNTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMDA2OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTAwNzogICAgICAgICAgICAgICAgCQkJfQ0KMTAwODogICAgICAgICAgICAgICAgCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjEwMDk6ICAgICAgICAgICAgICAgIA0KMTAxMDogICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQoxMDExOiAgICAgICAgICAgICAgICAJCQl7DQoxMDEyOiAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrQ2hlY2tGb3JUaW1lT3V0KCAmeFRpbWVPdXQsICZ4VGlja3NUb1dhaXQgKSA9PSBwZEZBTFNFICkNCjEwMTM6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMDE0OiAgICAgICAgICAgICAgICAJCQkJCWlmKCBwcnZJc1F1ZXVlRW1wdHkoIHB4UXVldWUgKSAhPSBwZEZBTFNFICkNCjEwMTU6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTAxNjogICAgICAgICAgICAgICAgCQkJCQkJdHJhY2VCTE9DS0lOR19PTl9RVUVVRV9SRUNFSVZFKCBweFF1ZXVlICk7DQoxMDE3OiAgICAgICAgICAgICAgICANCjEwMTg6ICAgICAgICAgICAgICAgIAkJCQkJCSNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KMTAxOTogICAgICAgICAgICAgICAgCQkJCQkJew0KMTAyMDogICAgICAgICAgICAgICAgCQkJCQkJCWlmKCBweFF1ZXVlLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCjEwMjE6ICAgICAgICAgICAgICAgIAkJCQkJCQl7DQoxMDIyOiAgICAgICAgICAgICAgICAJCQkJCQkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KMTAyMzogICAgICAgICAgICAgICAgCQkJCQkJCQl7DQoxMDI0OiAgICAgICAgICAgICAgICAJCQkJCQkJCQl2VGFza1ByaW9yaXR5SW5oZXJpdCggKCB2b2lkICogKSBweFF1ZXVlLT5weE11dGV4SG9sZGVyICk7DQoxMDI1OiAgICAgICAgICAgICAgICAJCQkJCQkJCX0NCjEwMjY6ICAgICAgICAgICAgICAgIAkJCQkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjEwMjc6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMDI4OiAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KMTAyOTogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjEwMzA6ICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTAzMTogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjEwMzI6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjEwMzM6ICAgICAgICAgICAgICAgIAkJCQkJCSNlbmRpZg0KMTAzNDogICAgICAgICAgICAgICAgDQoxMDM1OiAgICAgICAgICAgICAgICAJCQkJCQl2VGFza1BsYWNlT25FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSwgeFRpY2tzVG9XYWl0ICk7DQoxMDM2OiAgICAgICAgICAgICAgICAJCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KMTAzNzogICAgICAgICAgICAgICAgCQkJCQl9DQoxMDM4OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjEwMzk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTA0MDogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTA0MTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMDQyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTA0MzogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjEwNDQ6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMDQ1OiAgICAgICAgICAgICAgICAJCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQoxMDQ2OiAgICAgICAgICAgICAgICAJCQkJCXRyYWNlUVVFVUVfUkVDRUlWRV9GQUlMRUQoIHB4UXVldWUgKTsNCjEwNDc6ICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIGVyclFVRVVFX0VNUFRZOw0KMTA0ODogICAgICAgICAgICAgICAgCQkJCX0NCjEwNDk6ICAgICAgICAgICAgICAgIAkJCX0NCjEwNTA6ICAgICAgICAgICAgICAgIAkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQoxMDUxOiAgICAgICAgICAgICAgICAJCX0NCjEwNTI6ICAgICAgICAgICAgICAgIAl9DQoxMDUzOiAgICAgICAgICAgICAgICANCjEwNTQ6ICAgICAgICAgICAgICAgIA0KMTA1NTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9BTFRFUk5BVElWRV9BUEkgKi8NCjEwNTY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTA1NzogICAgICAgICAgICAgICAgDQoxMDU4OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUiggUXVldWVIYW5kbGVfdCB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBCYXNlVHlwZV90ICogY29uc3QgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiwgY29uc3QgQmFzZVR5cGVfdCB4Q29weVBvc2l0aW9uICkNCjEwNTk6ICAgICAgICAgICAgICAgIHsNCkJGRDAyM0Q0ICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwCkJGRDAyM0Q2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkKQkZEMDIzRDggICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQpCRkQwMjNEQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMjNEQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpCkJGRDAyM0UwICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkKQkZEMDIzRTQgIDAwMzBGOERFICAgU1cgQTIsIDQ4KFM4KQpCRkQwMjNFOCAgMDAzNEY4RkUgICBTVyBBMywgNTIoUzgpCjEwNjA6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjEwNjE6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQoxMDYyOiAgICAgICAgICAgICAgICBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDIzRUMgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwMjNGMCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjEwNjM6ICAgICAgICAgICAgICAgIA0KMTA2NDogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDIzRjQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjNGOCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjQwRQpCRkQwMjNGQyAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMjNGRSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAyNDAwICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDAyNDAyICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDI0MDQgIDA0MjgzMEEwICAgQURESVUgQTEsIFpFUk8sIDEwNjQKQkZEMDI0MDYgICAgICAwNDI4ICAgQUREVSBTMCwgQTAsIFYwCkJGRDAyNDA4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMjQwQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMjQwQyAgICAgIDBDMDAgICBOT1AKMTA2NTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggISggKCBwdkl0ZW1Ub1F1ZXVlID09IE5VTEwgKSAmJiAoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCBVQmFzZVR5cGVfdCApIDBVICkgKSApOw0KQkZEMDI0MEUgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQpCRkQwMjQxMiAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjQyMgpCRkQwMjQxNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyNDFBICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkKQkZEMDI0MUUgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI0MjgKQkZEMDI0MjIgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDI0MjQgICAgICBDQzAyICAgQiAweEJGRDAyNDJBCkJGRDAyNDI2ICAgICAgMEMwMCAgIE5PUApCRkQwMjQyOCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCkJGRDAyNDJBICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyNDQwCkJGRDAyNDJFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAyNDMwICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDI0MzIgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDI0MzQgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwMjQzNiAgMDQyOTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTA2NQpCRkQwMjQzOCAgICAgIDA0MjkgICBTVUJVIFMwLCBBMCwgVjAKQkZEMDI0M0EgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAyNDNDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAyNDNFICAgICAgMEMwMCAgIE5PUAoxMDY2OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCAhKCAoIHhDb3B5UG9zaXRpb24gPT0gcXVldWVPVkVSV1JJVEUgKSAmJiAoIHB4UXVldWUtPnV4TGVuZ3RoICE9IDEgKSApICk7DQpCRkQwMjQ0MCAgMDAzNEZDN0UgICBMVyBWMSwgNTIoUzgpCkJGRDAyNDQ0ICAgICAgRUQwMiAgIExJIFYwLCAyCkJGRDAyNDQ2ICAwMDA4QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDI0NUEKQkZEMDI0NDggIDBDMDAwMDA4ICAgU0xMIFpFUk8sIFQwLCAxCkJGRDAyNDRBICAgICAgMEMwMCAgIE5PUApCRkQwMjQ0QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyNDUwICAgICAgNjlBRiAgIExXIFYxLCA2MChWMCkKQkZEMDI0NTIgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDI0NTQgIDAwMDRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjQ2MApCRkQwMjQ1NiAgMEMwMDAwMDQgICBTTEwgWkVSTywgQTAsIDEKQkZEMDI0NTggICAgICAwQzAwICAgTk9QCkJGRDAyNDVBICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyNDVDICAgICAgQ0MwMiAgIEIgMHhCRkQwMjQ2MgpCRkQwMjQ1RSAgICAgIDBDMDAgICBOT1AKQkZEMDI0NjAgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwMjQ2MiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjQ3OApCRkQwMjQ2NiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMjQ2OCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAyNDZBICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDAyNDZDICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDI0NkUgIDA0MkEzMEEwICAgQURESVUgQTEsIFpFUk8sIDEwNjYKQkZEMDI0NzAgICAgICAwNDJBICAgQUREVSBTMCwgQTEsIFYwCkJGRDAyNDcyICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMjQ3NCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMjQ3NiAgICAgIDBDMDAgICBOT1AKMTA2NzogICAgICAgICAgICAgICAgDQoxMDY4OiAgICAgICAgICAgICAgICAJLyogUlRPUyBwb3J0cyB0aGF0IHN1cHBvcnQgaW50ZXJydXB0IG5lc3RpbmcgaGF2ZSB0aGUgY29uY2VwdCBvZiBhIG1heGltdW0NCjEwNjk6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5LiAgSW50ZXJydXB0cyB0aGF0IGFyZQ0KMTA3MDogICAgICAgICAgICAgICAgCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZXB0IHBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4NCjEwNzE6ICAgICAgICAgICAgICAgIAl3aGVuIHRoZSBSVE9TIGtlcm5lbCBpcyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIGJ1dCBjYW5ub3QgbWFrZSBhbnkgY2FsbHMgdG8NCjEwNzI6ICAgICAgICAgICAgICAgIAlGcmVlUlRPUyBBUEkgZnVuY3Rpb25zLiAgSWYgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oDQoxMDczOiAgICAgICAgICAgICAgICAJdGhlbiBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQoxMDc0OiAgICAgICAgICAgICAgICAJZmFpbHVyZSBpZiBhIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgdGhhdCBoYXMgYmVlbg0KMTA3NTogICAgICAgICAgICAgICAgCWFzc2lnbmVkIGEgcHJpb3JpdHkgYWJvdmUgdGhlIGNvbmZpZ3VyZWQgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eS4NCjEwNzY6ICAgICAgICAgICAgICAgIAlPbmx5IEZyZWVSVE9TIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiBGcm9tSVNSIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzDQoxMDc3OiAgICAgICAgICAgICAgICAJdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhdCBvciAobG9naWNhbGx5KSBiZWxvdyB0aGUgbWF4aW11bQ0KMTA3ODogICAgICAgICAgICAgICAgCXN5c3RlbSBjYWxsCWludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlIGludGVycnVwdA0KMTA3OTogICAgICAgICAgICAgICAgCXNhZmUgQVBJIHRvIGVuc3VyZSBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLg0KMTA4MDogICAgICAgICAgICAgICAgCU1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMgcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZw0KMTA4MTogICAgICAgICAgICAgICAgCWxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1JUT1MtQ29ydGV4LU0zLU00Lmh0bWwgKi8NCjEwODI6ICAgICAgICAgICAgICAgIAlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCk7DQoxMDgzOiAgICAgICAgICAgICAgICANCjEwODQ6ICAgICAgICAgICAgICAgIAkvKiBTaW1pbGFyIHRvIHhRdWV1ZUdlbmVyaWNTZW5kLCBleGNlcHQgd2l0aG91dCBibG9ja2luZyBpZiB0aGVyZSBpcyBubyByb29tDQoxMDg1OiAgICAgICAgICAgICAgICAJaW4gdGhlIHF1ZXVlLiAgQWxzbyBkb24ndCBkaXJlY3RseSB3YWtlIGEgdGFzayB0aGF0IHdhcyBibG9ja2VkIG9uIGEgcXVldWUNCjEwODY6ICAgICAgICAgICAgICAgIAlyZWFkLCBpbnN0ZWFkIHJldHVybiBhIGZsYWcgdG8gc2F5IHdoZXRoZXIgYSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZCBvcg0KMTA4NzogICAgICAgICAgICAgICAgCW5vdCAoaS5lLiBoYXMgYSB0YXNrIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB1cyBiZWVuIHdva2VuIGJ5IHRoaXMNCjEwODg6ICAgICAgICAgICAgICAgIAlwb3N0KS4gKi8NCjEwODk6ICAgICAgICAgICAgICAgIAl1eFNhdmVkSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KQkZEMDI0NzggIDQ3NUU3N0U4ICAgSkFMUyB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUgpCRkQwMjQ3QyAgICAgIDBDMDAgICBOT1AKQkZEMDI0N0UgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQoxMDkwOiAgICAgICAgICAgICAgICAJew0KMTA5MTogICAgICAgICAgICAgICAgCQlpZiggKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWUtPnV4TGVuZ3RoICkgfHwgKCB4Q29weVBvc2l0aW9uID09IHF1ZXVlT1ZFUldSSVRFICkgKQ0KQkZEMDI0ODIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjQ4NiAgICAgIDY5QUUgICBMVyBWMSwgNTYoVjApCkJGRDAyNDg4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDI0OEMgICAgICA2OTJGICAgTFcgVjAsIDYwKFYwKQpCRkQwMjQ4RSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDI0OTAgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDAyNDkyICAwMDA2NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyNEEyCkJGRDAyNDk2ICAwMDM0RkM3RSAgIExXIFYxLCA1MihTOCkKQkZEMDI0OUEgICAgICBFRDAyICAgTEkgVjAsIDIKQkZEMDI0OUMgIDAwNTVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjU0QQpCRkQwMjQ5RSAgMEMwMDAwNTUgICBTTEwgVjAsIFM1LCAxCkJGRDAyNEEwICAgICAgMEMwMCAgIE5PUAoxMDkyOiAgICAgICAgICAgICAgICAJCXsNCjEwOTM6ICAgICAgICAgICAgICAgIAkJCXRyYWNlUVVFVUVfU0VORF9GUk9NX0lTUiggcHhRdWV1ZSApOw0KMTA5NDogICAgICAgICAgICAgICAgDQoxMDk1OiAgICAgICAgICAgICAgICAJCQkvKiBTZW1hcGhvcmVzIHVzZSB4UXVldWVHaXZlRnJvbUlTUigpLCBzbyBweFF1ZXVlIHdpbGwgbm90IGJlIGENCjEwOTY6ICAgICAgICAgICAgICAgIAkJCXNlbWFwaG9yZSBvciBtdXRleC4gIFRoYXQgbWVhbnMgcHJ2Q29weURhdGFUb1F1ZXVlKCkgY2Fubm90IHJlc3VsdA0KMTA5NzogICAgICAgICAgICAgICAgCQkJaW4gYSB0YXNrIGRpc2luaGVyaXRpbmcgYSBwcmlvcml0eSBhbmQgcHJ2Q29weURhdGFUb1F1ZXVlKCkgY2FuIGJlDQoxMDk4OiAgICAgICAgICAgICAgICAJCQljYWxsZWQgaGVyZSBldmVuIHRob3VnaCB0aGUgZGlzaW5oZXJpdCBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBpZg0KMTA5OTogICAgICAgICAgICAgICAgCQkJdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgcmVhZHkgbGlzdHMuICovDQoxMTAwOiAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSBwcnZDb3B5RGF0YVRvUXVldWUoIHB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHhDb3B5UG9zaXRpb24gKTsNCkJGRDAyNEEyICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDI0QTYgIDAwMkNGQ0JFICAgTFcgQTEsIDQ0KFM4KQpCRkQwMjRBQSAgMDAzNEZDREUgICBMVyBBMiwgNTIoUzgpCkJGRDAyNEFFICAxNEU2NzdFOCAgIEpBTFMgcHJ2Q29weURhdGFUb1F1ZXVlCkJGRDAyNEIwICAwQzAwMTRFNiAgIExCVSBBMywgMzA3MihBMikKQkZEMDI0QjIgICAgICAwQzAwICAgTk9QCjExMDE6ICAgICAgICAgICAgICAgIA0KMTEwMjogICAgICAgICAgICAgICAgCQkJLyogVGhlIGV2ZW50IGxpc3QgaXMgbm90IGFsdGVyZWQgaWYgdGhlIHF1ZXVlIGlzIGxvY2tlZC4gIFRoaXMgd2lsbA0KMTEwMzogICAgICAgICAgICAgICAgCQkJYmUgZG9uZSB3aGVuIHRoZSBxdWV1ZSBpcyB1bmxvY2tlZCBsYXRlci4gKi8NCjExMDQ6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT54VHhMb2NrID09IHF1ZXVlVU5MT0NLRUQgKQ0KQkZEMDI0QjQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjRCOCAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApCkJGRDAyNEJDICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwMjRCRSAgMDAzNkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyNTJFCkJGRDAyNEMwICAwQzAwMDAzNiAgIFNMTCBBVCwgUzYsIDEKQkZEMDI0QzIgICAgICAwQzAwICAgTk9QCjExMDU6ICAgICAgICAgICAgICAgIAkJCXsNCjExMDY6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjExMDc6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMTA4OiAgICAgICAgICAgICAgICAJCQkJCWlmKCBweFF1ZXVlLT5weFF1ZXVlU2V0Q29udGFpbmVyICE9IE5VTEwgKQ0KQkZEMDI0QzQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjRDOCAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApCkJGRDAyNENDICAwMDE2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyNEZDCjExMDk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTExMDogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyKCBweFF1ZXVlLCB4Q29weVBvc2l0aW9uICkgPT0gcGRUUlVFICkNCkJGRDAyNEQwICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDI0RDQgIDAwMzRGQ0JFICAgTFcgQTEsIDUyKFM4KQpCRkQwMjREOCAgMjFEODc3RTggICBKQUxTIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyCkJGRDAyNERBICAwQzAwMjFEOCAgIExXQzIgVDYsIDMwNzIoVDgpCkJGRDAyNERDICAgICAgMEMwMCAgIE5PUApCRkQwMjRERSAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMApCRkQwMjRFMCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMjRFMiAgMDAyREI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyNTQwCkJGRDAyNEU0ICAwQzAwMDAyRCAgIFNMTCBBVCwgVDUsIDEKQkZEMDI0RTYgICAgICAwQzAwICAgTk9QCjExMTE6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjExMTI6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgcXVldWUgaXMgYSBtZW1iZXIgb2YgYSBxdWV1ZSBzZXQsIGFuZCBwb3N0aW5nDQoxMTEzOiAgICAgICAgICAgICAgICAJCQkJCQkJdG8gdGhlIHF1ZXVlIHNldCBjYXVzZWQgYSBoaWdoZXIgcHJpb3JpdHkgdGFzayB0bw0KMTExNDogICAgICAgICAgICAgICAgCQkJCQkJCXVuYmxvY2suICBBIGNvbnRleHQgc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTExNTogICAgICAgICAgICAgICAgCQkJCQkJCWlmKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICE9IE5VTEwgKQ0KQkZEMDI0RTggIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMjRFQyAgMDAyODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjU0MAoxMTE2OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTExNzogICAgICAgICAgICAgICAgCQkJCQkJCQkqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkVFJVRTsNCkJGRDAyNEYwICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDI0RjQgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDI0RjYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCkJGRDAyNEY4ICAgICAgQ0MyMyAgIEIgMHhCRkQwMjU0MApCRkQwMjRGQSAgICAgIDBDMDAgICBOT1AKMTExODogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjExMTk6ICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQoxMTIwOiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTEyMTogICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTIyOiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTEyMzogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTEyNDogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTEyNTogICAgICAgICAgICAgICAgCQkJCQkJew0KMTEyNjogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjExMjc6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjExMjg6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTEyOTogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxMTMwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjExMzE6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQpCRkQwMjRGQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyNTAwICAgICAgNjkyOSAgIExXIFYwLCAzNihWMCkKQkZEMDI1MDIgIDAwMUQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI1NDAKMTEzMjogICAgICAgICAgICAgICAgCQkJCQkJew0KMTEzMzogICAgICAgICAgICAgICAgCQkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KQkZEMDI1MDYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjUwQSAgMDAyNDMwNDIgICBBRERJVSBWMCwgVjAsIDM2CkJGRDAyNTBFICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAyNTEwICAyMkJDNzdFOCAgIEpBTFMgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0CkJGRDAyNTEyICAwQzAwMjJCQyAgIExXQzIgUzUsIDMwNzIoR1ApCkJGRDAyNTE0ICAgICAgMEMwMCAgIE5PUApCRkQwMjUxNiAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjU0MAoxMTM0OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTEzNTogICAgICAgICAgICAgICAgCQkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSBzbw0KMTEzNjogICAgICAgICAgICAgICAgCQkJCQkJCQlyZWNvcmQgdGhhdCBhIGNvbnRleHQgc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTEzNzogICAgICAgICAgICAgICAgCQkJCQkJCQlpZiggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBOVUxMICkNCkJGRDAyNTFBICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDI1MUUgIDAwMEY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI1NDAKMTEzODogICAgICAgICAgICAgICAgCQkJCQkJCQl7DQoxMTM5OiAgICAgICAgICAgICAgICAJCQkJCQkJCQkqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkVFJVRTsNCkJGRDAyNTIyICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDI1MjYgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDI1MjggICAgICBFOUEwICAgU1cgVjEsIDAoVjApCkJGRDAyNTJBICAgICAgQ0MwQSAgIEIgMHhCRkQwMjU0MApCRkQwMjUyQyAgICAgIDBDMDAgICBOT1AKMTE0MDogICAgICAgICAgICAgICAgCQkJCQkJCQl9DQoxMTQxOiAgICAgICAgICAgICAgICAJCQkJCQkJCWVsc2UNCjExNDI6ICAgICAgICAgICAgICAgIAkJCQkJCQkJew0KMTE0MzogICAgICAgICAgICAgICAgCQkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTE0NDogICAgICAgICAgICAgICAgCQkJCQkJCQl9DQoxMTQ1OiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTE0NjogICAgICAgICAgICAgICAgCQkJCQkJCWVsc2UNCjExNDc6ICAgICAgICAgICAgICAgIAkJCQkJCQl7DQoxMTQ4OiAgICAgICAgICAgICAgICAJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjExNDk6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMTUwOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMTUxOiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoxMTUyOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMTUzOiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTE1NDogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTE1NTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMTU2OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTE1NzogICAgICAgICAgICAgICAgCQkJCSNlbHNlIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoxMTU4OiAgICAgICAgICAgICAgICAJCQkJew0KMTE1OTogICAgICAgICAgICAgICAgCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KMTE2MDogICAgICAgICAgICAgICAgCQkJCQl7DQoxMTYxOiAgICAgICAgICAgICAgICAJCQkJCQlpZiggeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSAhPSBwZEZBTFNFICkNCjExNjI6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjExNjM6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSBzbyByZWNvcmQgdGhhdCBhDQoxMTY0OiAgICAgICAgICAgICAgICAJCQkJCQkJY29udGV4dAlzd2l0Y2ggaXMgcmVxdWlyZWQuICovDQoxMTY1OiAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQoxMTY2OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTE2NzogICAgICAgICAgICAgICAgCQkJCQkJCQkqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkVFJVRTsNCjExNjg6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMTY5OiAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KMTE3MDogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjExNzE6ICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTE3MjogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjExNzM6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjExNzQ6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjExNzU6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjExNzY6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTc3OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMTc4OiAgICAgICAgICAgICAgICAJCQkJCX0NCjExNzk6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTE4MDogICAgICAgICAgICAgICAgCQkJCQl7DQoxMTgxOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTgyOiAgICAgICAgICAgICAgICAJCQkJCX0NCjExODM6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMTg0OiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoxMTg1OiAgICAgICAgICAgICAgICAJCQl9DQoxMTg2OiAgICAgICAgICAgICAgICAJCQllbHNlDQoxMTg3OiAgICAgICAgICAgICAgICAJCQl7DQoxMTg4OiAgICAgICAgICAgICAgICAJCQkJLyogSW5jcmVtZW50IHRoZSBsb2NrIGNvdW50IHNvIHRoZSB0YXNrIHRoYXQgdW5sb2NrcyB0aGUgcXVldWUNCjExODk6ICAgICAgICAgICAgICAgIAkJCQlrbm93cyB0aGF0IGRhdGEgd2FzIHBvc3RlZCB3aGlsZSBpdCB3YXMgbG9ja2VkLiAqLw0KMTE5MDogICAgICAgICAgICAgICAgCQkJCSsrKCBweFF1ZXVlLT54VHhMb2NrICk7DQpCRkQwMjUyRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyNTMyICAwMDQ4RkM0MiAgIExXIFYwLCA3MihWMCkKQkZEMDI1MzYgICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxCkJGRDAyNTM4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDI1M0MgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQoxMTkxOiAgICAgICAgICAgICAgICAJCQl9DQoxMTkyOiAgICAgICAgICAgICAgICANCjExOTM6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwMjU0MCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMjU0MiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDAyNTQ2ICAgICAgQ0MwMyAgIEIgMHhCRkQwMjU0RQpCRkQwMjU0OCAgICAgIDBDMDAgICBOT1AKMTE5NDogICAgICAgICAgICAgICAgCQl9DQoxMTk1OiAgICAgICAgICAgICAgICAJCWVsc2UNCjExOTY6ICAgICAgICAgICAgICAgIAkJew0KMTE5NzogICAgICAgICAgICAgICAgCQkJdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSX0ZBSUxFRCggcHhRdWV1ZSApOw0KMTE5ODogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IGVyclFVRVVFX0ZVTEw7DQpCRkQwMjU0QSAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMTE5OTogICAgICAgICAgICAgICAgCQl9DQoxMjAwOiAgICAgICAgICAgICAgICAJfQ0KMTIwMTogICAgICAgICAgICAgICAgCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDI1NEUgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQpCRkQwMjU1MiAgNEQ1RTc3RTggICBKQUxTIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUgpCRkQwMjU1NCAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xCkJGRDAyNTU2ICAgICAgMEMwMCAgIE5PUAoxMjAyOiAgICAgICAgICAgICAgICANCjEyMDM6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDAyNTU4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMTIwNDogICAgICAgICAgICAgICAgfQ0KQkZEMDI1NUMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDI1NUUgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwMjU2MCAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDAyNTYyICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDI1NjQgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMjU2NiAgICAgIDBDMDAgICBOT1AKMTIwNTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMjA2OiAgICAgICAgICAgICAgICANCjEyMDc6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFF1ZXVlR2l2ZUZyb21JU1IoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBCYXNlVHlwZV90ICogY29uc3QgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApDQoxMjA4OiAgICAgICAgICAgICAgICB7DQpCRkQwMjg2QyAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwMjg2RSAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDAyODcwICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDI4NzIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDI4NzQgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQpCRkQwMjg3OCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpCjEyMDk6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjEyMTA6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQoxMjExOiAgICAgICAgICAgICAgICBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDI4N0MgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwMjg4MCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjEyMTI6ICAgICAgICAgICAgICAgIA0KMTIxMzogICAgICAgICAgICAgICAgCS8qIFNpbWlsYXIgdG8geFF1ZXVlR2VuZXJpY1NlbmRGcm9tSVNSKCkgYnV0IHVzZWQgd2l0aCBzZW1hcGhvcmVzIHdoZXJlIHRoZQ0KMTIxNDogICAgICAgICAgICAgICAgCWl0ZW0gc2l6ZSBpcyAwLiAgRG9uJ3QgZGlyZWN0bHkgd2FrZSBhIHRhc2sgdGhhdCB3YXMgYmxvY2tlZCBvbiBhIHF1ZXVlDQoxMjE1OiAgICAgICAgICAgICAgICAJcmVhZCwgaW5zdGVhZCByZXR1cm4gYSBmbGFnIHRvIHNheSB3aGV0aGVyIGEgY29udGV4dCBzd2l0Y2ggaXMgcmVxdWlyZWQgb3INCjEyMTY6ICAgICAgICAgICAgICAgIAlub3QgKGkuZS4gaGFzIGEgdGFzayB3aXRoIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdXMgYmVlbiB3b2tlbiBieSB0aGlzDQoxMjE3OiAgICAgICAgICAgICAgICAJcG9zdCkuICovDQoxMjE4OiAgICAgICAgICAgICAgICANCjEyMTk6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCkJGRDAyODg0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDI4ODggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI4OUUKQkZEMDI4OEMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDI4OEUgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMjg5MCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwMjg5MiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDAyODk0ICAwNEMzMzBBMCAgIEFERElVIEExLCBaRVJPLCAxMjE5CkJGRDAyODk2ICAgICAgMDRDMyAgIFNVQlUgUzEsIFMxLCBBMApCRkQwMjg5OCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDI4OUEgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDI4OUMgICAgICAwQzAwICAgTk9QCjEyMjA6ICAgICAgICAgICAgICAgIA0KMTIyMTogICAgICAgICAgICAgICAgCS8qIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUigpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgeFF1ZXVlR2l2ZUZyb21JU1IoKQ0KMTIyMjogICAgICAgICAgICAgICAgCWlmIHRoZSBpdGVtIHNpemUgaXMgbm90IDAuICovDQoxMjIzOiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFF1ZXVlLT51eEl0ZW1TaXplID09IDAgKTsNCkJGRDAyODlFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDI4QTIgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQpCRkQwMjhBNiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjhCQwpCRkQwMjhBQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMjhBQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAyOEFFICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDAyOEIwICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDI4QjIgIDA0QzczMEEwICAgQURESVUgQTEsIFpFUk8sIDEyMjMKQkZEMDI4QjQgICAgICAwNEM3ICAgU1VCVSBTMSwgVjEsIEEwCkJGRDAyOEI2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMjhCOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMjhCQSAgICAgIDBDMDAgICBOT1AKMTIyNDogICAgICAgICAgICAgICAgDQoxMjI1OiAgICAgICAgICAgICAgICAJLyogTm9ybWFsbHkgYSBtdXRleCB3b3VsZCBub3QgYmUgZ2l2ZW4gZnJvbSBhbiBpbnRlcnJ1cHQsIGFuZCBkb2luZyBzbyBpcw0KMTIyNjogICAgICAgICAgICAgICAgCWRlZmluaXRlbHkgd3JvbmcgaWYgdGhlcmUgaXMgYSBtdXRleCBob2xkZXIgYXMgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbWFrZXMgbm8NCjEyMjc6ICAgICAgICAgICAgICAgIAlzZW5zZSBmb3IgYW4gaW50ZXJydXB0cywgb25seSB0YXNrcy4gKi8NCjEyMjg6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICEoICggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApICYmICggcHhRdWV1ZS0+cHhNdXRleEhvbGRlciAhPSBOVUxMICkgKSApOw0KQkZEMDI4QkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjhDMCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDI4QzIgIDAwMDU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI4RDAKQkZEMDI4QzYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjhDQSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDI4Q0MgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI4RDYKQkZEMDI4RDAgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDI4RDIgICAgICBDQzAyICAgQiAweEJGRDAyOEQ4CkJGRDAyOEQ0ICAgICAgMEMwMCAgIE5PUApCRkQwMjhENiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCkJGRDAyOEQ4ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyOEVFCkJGRDAyOERDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAyOERFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDI4RTAgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDI4RTIgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwMjhFNCAgMDRDQzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTIyOApCRkQwMjhFNiAgICAgIDA0Q0MgICBBRERVIFMxLCBBMiwgQTAKQkZEMDI4RTggIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAyOEVBICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAyOEVDICAgICAgMEMwMCAgIE5PUAoxMjI5OiAgICAgICAgICAgICAgICANCjEyMzA6ICAgICAgICAgICAgICAgIAkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGEgbWF4aW11bQ0KMTIzMTogICAgICAgICAgICAgICAgCXN5c3RlbSBjYWxsIChvciBtYXhpbXVtIEFQSSBjYWxsKSBpbnRlcnJ1cHQgcHJpb3JpdHkuICBJbnRlcnJ1cHRzIHRoYXQgYXJlDQoxMjMyOiAgICAgICAgICAgICAgICAJYWJvdmUgdGhlIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkgYXJlIGtlcHQgcGVybWFuZW50bHkgZW5hYmxlZCwgZXZlbg0KMTIzMzogICAgICAgICAgICAgICAgCXdoZW4gdGhlIFJUT1Mga2VybmVsIGlzIGluIGEgY3JpdGljYWwgc2VjdGlvbiwgYnV0IGNhbm5vdCBtYWtlIGFueSBjYWxscyB0bw0KMTIzNDogICAgICAgICAgICAgICAgCUZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmgNCjEyMzU6ICAgICAgICAgICAgICAgIAl0aGVuIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSB3aWxsIHJlc3VsdCBpbiBhbiBhc3NlcnRpb24NCjEyMzY6ICAgICAgICAgICAgICAgIAlmYWlsdXJlIGlmIGEgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCB0aGF0IGhhcyBiZWVuDQoxMjM3OiAgICAgICAgICAgICAgICAJYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5Lg0KMTIzODogICAgICAgICAgICAgICAgCU9ubHkgRnJlZVJUT1MgZnVuY3Rpb25zIHRoYXQgZW5kIGluIEZyb21JU1IgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdHMNCjEyMzk6ICAgICAgICAgICAgICAgIAl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpIGJlbG93IHRoZSBtYXhpbXVtDQoxMjQwOiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwJaW50ZXJydXB0IHByaW9yaXR5LiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUgaW50ZXJydXB0DQoxMjQxOiAgICAgICAgICAgICAgICAJc2FmZSBBUEkgdG8gZW5zdXJlIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcyBzaW1wbGUgYXMgcG9zc2libGUuDQoxMjQyOiAgICAgICAgICAgICAgICAJTW9yZSBpbmZvcm1hdGlvbiAoYWxiZWl0IENvcnRleC1NIHNwZWNpZmljKSBpcyBwcm92aWRlZCBvbiB0aGUgZm9sbG93aW5nDQoxMjQzOiAgICAgICAgICAgICAgICAJbGluazogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCAqLw0KMTI0NDogICAgICAgICAgICAgICAgCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjEyNDU6ICAgICAgICAgICAgICAgIA0KMTI0NjogICAgICAgICAgICAgICAgCXV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQpCRkQwMjhFRSAgNDc1RTc3RTggICBKQUxTIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSCkJGRDAyOEYyICAgICAgMEMwMCAgIE5PUApCRkQwMjhGNCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjEyNDc6ICAgICAgICAgICAgICAgIAl7DQoxMjQ4OiAgICAgICAgICAgICAgICAJCS8qIFdoZW4gdGhlIHF1ZXVlIGlzIHVzZWQgdG8gaW1wbGVtZW50IGEgc2VtYXBob3JlIG5vIGRhdGEgaXMgZXZlcg0KMTI0OTogICAgICAgICAgICAgICAgCQltb3ZlZCB0aHJvdWdoIHRoZSBxdWV1ZSBidXQgaXQgaXMgc3RpbGwgdmFsaWQgdG8gc2VlIGlmIHRoZSBxdWV1ZSAnaGFzDQoxMjUwOiAgICAgICAgICAgICAgICAJCXNwYWNlJy4gKi8NCjEyNTE6ICAgICAgICAgICAgICAgIAkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZS0+dXhMZW5ndGggKQ0KQkZEMDI4RjggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjhGQyAgICAgIDY5QUUgICBMVyBWMSwgNTYoVjApCkJGRDAyOEZFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDI5MDIgICAgICA2OTJGICAgTFcgVjAsIDYwKFYwKQpCRkQwMjkwNCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDI5MDYgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDAyOTA4ICAwMDUxNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOUFFCjEyNTI6ICAgICAgICAgICAgICAgIAkJew0KMTI1MzogICAgICAgICAgICAgICAgCQkJdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSKCBweFF1ZXVlICk7DQoxMjU0OiAgICAgICAgICAgICAgICANCjEyNTU6ICAgICAgICAgICAgICAgIAkJCS8qIEEgdGFzayBjYW4gb25seSBoYXZlIGFuIGluaGVyaXRlZCBwcmlvcml0eSBpZiBpdCBpcyBhIG11dGV4DQoxMjU2OiAgICAgICAgICAgICAgICAJCQlob2xkZXIgLSBhbmQgaWYgdGhlcmUgaXMgYSBtdXRleCBob2xkZXIgdGhlbiB0aGUgbXV0ZXggY2Fubm90IGJlDQoxMjU3OiAgICAgICAgICAgICAgICAJCQlnaXZlbiBmcm9tIGFuIElTUi4gIEFzIHRoaXMgaXMgdGhlIElTUiB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBpdA0KMTI1ODogICAgICAgICAgICAgICAgCQkJY2FuIGJlIGFzc3VtZWQgdGhlcmUgaXMgbm8gbXV0ZXggaG9sZGVyIGFuZCBubyBuZWVkIHRvIGRldGVybWluZSBpZg0KMTI1OTogICAgICAgICAgICAgICAgCQkJcHJpb3JpdHkgZGlzaW5oZXJpdGFuY2UgaXMgbmVlZGVkLiAgU2ltcGx5IGluY3JlYXNlIHRoZSBjb3VudCBvZg0KMTI2MDogICAgICAgICAgICAgICAgCQkJbWVzc2FnZXMgKHNlbWFwaG9yZXMpIGF2YWlsYWJsZS4gKi8NCjEyNjE6ICAgICAgICAgICAgICAgIAkJCSsrKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KQkZEMDI5MEMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjkxMCAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApCkJGRDAyOTEyICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQpCRkQwMjkxNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyOTE4ICAgICAgRTlBRSAgIFNXIFYxLCA1NihWMCkKMTI2MjogICAgICAgICAgICAgICAgDQoxMjYzOiAgICAgICAgICAgICAgICAJCQkvKiBUaGUgZXZlbnQgbGlzdCBpcyBub3QgYWx0ZXJlZCBpZiB0aGUgcXVldWUgaXMgbG9ja2VkLiAgVGhpcyB3aWxsDQoxMjY0OiAgICAgICAgICAgICAgICAJCQliZSBkb25lIHdoZW4gdGhlIHF1ZXVlIGlzIHVubG9ja2VkIGxhdGVyLiAqLw0KMTI2NTogICAgICAgICAgICAgICAgCQkJaWYoIHB4UXVldWUtPnhUeExvY2sgPT0gcXVldWVVTkxPQ0tFRCApDQpCRkQwMjkxQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyOTFFICAwMDQ4RkM2MiAgIExXIFYxLCA3MihWMCkKQkZEMDI5MjIgICAgICBFRDdGICAgTEkgVjAsIC0xCkJGRDAyOTI0ICAwMDM1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDI5OTIKQkZEMDI5MjYgIDBDMDAwMDM1ICAgU0xMIEFULCBTNSwgMQpCRkQwMjkyOCAgICAgIDBDMDAgICBOT1AKMTI2NjogICAgICAgICAgICAgICAgCQkJew0KMTI2NzogICAgICAgICAgICAgICAgCQkJCSNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMTI2ODogICAgICAgICAgICAgICAgCQkJCXsNCjEyNjk6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4UXVldWUtPnB4UXVldWVTZXRDb250YWluZXIgIT0gTlVMTCApDQpCRkQwMjkyQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyOTJFICAwMDRDRkM0MiAgIExXIFYwLCA3NihWMCkKQkZEMDI5MzIgIDAwMTU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI5NjAKMTI3MDogICAgICAgICAgICAgICAgCQkJCQl7DQoxMjcxOiAgICAgICAgICAgICAgICAJCQkJCQlpZiggcHJ2Tm90aWZ5UXVldWVTZXRDb250YWluZXIoIHB4UXVldWUsIHF1ZXVlU0VORF9UT19CQUNLICkgPT0gcGRUUlVFICkNCkJGRDAyOTM2ICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDI5M0EgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTwpCRkQwMjkzQyAgMjFEODc3RTggICBKQUxTIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyCkJGRDAyOTNFICAwQzAwMjFEOCAgIExXQzIgVDYsIDMwNzIoVDgpCkJGRDAyOTQwICAgICAgMEMwMCAgIE5PUApCRkQwMjk0MiAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMApCRkQwMjk0NCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMjk0NiAgMDAyREI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyOUE0CkJGRDAyOTQ4ICAwQzAwMDAyRCAgIFNMTCBBVCwgVDUsIDEKQkZEMDI5NEEgICAgICAwQzAwICAgTk9QCjEyNzI6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjEyNzM6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgc2VtYXBob3JlIGlzIGEgbWVtYmVyIG9mIGEgcXVldWUgc2V0LCBhbmQNCjEyNzQ6ICAgICAgICAgICAgICAgIAkJCQkJCQlwb3N0aW5nCXRvIHRoZSBxdWV1ZSBzZXQgY2F1c2VkIGEgaGlnaGVyIHByaW9yaXR5DQoxMjc1OiAgICAgICAgICAgICAgICAJCQkJCQkJdGFzayB0bwl1bmJsb2NrLiAgQSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZC4gKi8NCjEyNzY6ICAgICAgICAgICAgICAgIAkJCQkJCQlpZiggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBOVUxMICkNCkJGRDAyOTRDICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkKQkZEMDI5NTAgIDAwMjg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI5QTQKMTI3NzogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjEyNzg6ICAgICAgICAgICAgICAgIAkJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQpCRkQwMjk1NCAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAyOTU4ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAyOTVBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQpCRkQwMjk1QyAgICAgIENDMjMgICBCIDB4QkZEMDI5QTQKQkZEMDI5NUUgICAgICAwQzAwICAgTk9QCjEyNzk6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMjgwOiAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KMTI4MTogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjEyODI6ICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTI4MzogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjEyODQ6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjEyODU6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjEyODY6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjEyODc6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMjg4OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMjg5OiAgICAgICAgICAgICAgICAJCQkJCX0NCjEyOTA6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTI5MTogICAgICAgICAgICAgICAgCQkJCQl7DQoxMjkyOiAgICAgICAgICAgICAgICAJCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KQkZEMDI5NjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjk2NCAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApCkJGRDAyOTY2ICAwMDFENDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOUE0CjEyOTM6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjEyOTQ6ICAgICAgICAgICAgICAgIAkJCQkJCQlpZiggeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSAhPSBwZEZBTFNFICkNCkJGRDAyOTZBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDI5NkUgIDAwMjQzMDQyICAgQURESVUgVjAsIFYwLCAzNgpCRkQwMjk3MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMjk3NCAgMjJCQzc3RTggICBKQUxTIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdApCRkQwMjk3NiAgMEMwMDIyQkMgICBMV0MyIFM1LCAzMDcyKEdQKQpCRkQwMjk3OCAgICAgIDBDMDAgICBOT1AKQkZEMDI5N0EgIDAwMTM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI5QTQKMTI5NTogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjEyOTY6ICAgICAgICAgICAgICAgIAkJCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgc28NCjEyOTc6ICAgICAgICAgICAgICAgIAkJCQkJCQkJcmVjb3JkIHRoYXQgYSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZC4gKi8NCjEyOTg6ICAgICAgICAgICAgICAgIAkJCQkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwMjk3RSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAyOTgyICAwMDBGNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOUE0CjEyOTk6ICAgICAgICAgICAgICAgIAkJCQkJCQkJew0KMTMwMDogICAgICAgICAgICAgICAgCQkJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQpCRkQwMjk4NiAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAyOThBICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAyOThDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQpCRkQwMjk4RSAgICAgIENDMEEgICBCIDB4QkZEMDI5QTQKQkZEMDI5OTAgICAgICAwQzAwICAgTk9QCjEzMDE6ICAgICAgICAgICAgICAgIAkJCQkJCQkJfQ0KMTMwMjogICAgICAgICAgICAgICAgCQkJCQkJCQllbHNlDQoxMzAzOiAgICAgICAgICAgICAgICAJCQkJCQkJCXsNCjEzMDQ6ICAgICAgICAgICAgICAgIAkJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzMDU6ICAgICAgICAgICAgICAgIAkJCQkJCQkJfQ0KMTMwNjogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjEzMDc6ICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQoxMzA4OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTMwOTogICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMzEwOiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTMxMTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTMxMjogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTMxMzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTMxNDogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzMTU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjEzMTY6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTMxNzogICAgICAgICAgICAgICAgCQkJCX0NCjEzMTg6ICAgICAgICAgICAgICAgIAkJCQkjZWxzZSAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMTMxOTogICAgICAgICAgICAgICAgCQkJCXsNCjEzMjA6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCjEzMjE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTMyMjogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQoxMzIzOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMzI0OiAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgc28gcmVjb3JkIHRoYXQgYQ0KMTMyNTogICAgICAgICAgICAgICAgCQkJCQkJCWNvbnRleHQJc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTMyNjogICAgICAgICAgICAgICAgCQkJCQkJCWlmKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICE9IE5VTEwgKQ0KMTMyNzogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjEzMjg6ICAgICAgICAgICAgICAgIAkJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQoxMzI5OiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTMzMDogICAgICAgICAgICAgICAgCQkJCQkJCWVsc2UNCjEzMzE6ICAgICAgICAgICAgICAgIAkJCQkJCQl7DQoxMzMyOiAgICAgICAgICAgICAgICAJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzMzM6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMzM0OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMzM1OiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoxMzM2OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMzM3OiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTMzODogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTMzOTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMzQwOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjEzNDE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTM0MjogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTM0MzogICAgICAgICAgICAgICAgCQkJCQl9DQoxMzQ0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTM0NTogICAgICAgICAgICAgICAgCQkJCSNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMTM0NjogICAgICAgICAgICAgICAgCQkJfQ0KMTM0NzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTM0ODogICAgICAgICAgICAgICAgCQkJew0KMTM0OTogICAgICAgICAgICAgICAgCQkJCS8qIEluY3JlbWVudCB0aGUgbG9jayBjb3VudCBzbyB0aGUgdGFzayB0aGF0IHVubG9ja3MgdGhlIHF1ZXVlDQoxMzUwOiAgICAgICAgICAgICAgICAJCQkJa25vd3MgdGhhdCBkYXRhIHdhcyBwb3N0ZWQgd2hpbGUgaXQgd2FzIGxvY2tlZC4gKi8NCjEzNTE6ICAgICAgICAgICAgICAgIAkJCQkrKyggcHhRdWV1ZS0+eFR4TG9jayApOw0KQkZEMDI5OTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjk5NiAgMDA0OEZDNDIgICBMVyBWMCwgNzIoVjApCkJGRDAyOTlBICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQpCRkQwMjk5QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyOUEwICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKMTM1MjogICAgICAgICAgICAgICAgCQkJfQ0KMTM1MzogICAgICAgICAgICAgICAgDQoxMzU0OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDI5QTQgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDI5QTYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwMjlBQSAgICAgIENDMDMgICBCIDB4QkZEMDI5QjIKQkZEMDI5QUMgICAgICAwQzAwICAgTk9QCjEzNTU6ICAgICAgICAgICAgICAgIAkJfQ0KMTM1NjogICAgICAgICAgICAgICAgCQllbHNlDQoxMzU3OiAgICAgICAgICAgICAgICAJCXsNCjEzNTg6ICAgICAgICAgICAgICAgIAkJCXRyYWNlUVVFVUVfU0VORF9GUk9NX0lTUl9GQUlMRUQoIHB4UXVldWUgKTsNCjEzNTk6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBlcnJRVUVVRV9GVUxMOw0KQkZEMDI5QUUgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjEzNjA6ICAgICAgICAgICAgICAgIAkJfQ0KMTM2MTogICAgICAgICAgICAgICAgCX0NCjEzNjI6ICAgICAgICAgICAgICAgIAlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKTsNCkJGRDAyOUIyICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkKQkZEMDI5QjYgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDI5QjggICAgICA0RDVFICAgQURESVUgVDIsIFQyLCAtMQpCRkQwMjlCQSAgICAgIDBDMDAgICBOT1AKMTM2MzogICAgICAgICAgICAgICAgDQoxMzY0OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwMjlCQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjEzNjU6ICAgICAgICAgICAgICAgIH0NCkJGRDAyOUMwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAyOUMyICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDI5QzQgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwMjlDNiAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDAyOUM4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDI5Q0EgICAgICAwQzAwICAgTk9QCjEzNjY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTM2NzogICAgICAgICAgICAgICAgDQoxMzY4OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgdm9pZCAqIGNvbnN0IHB2QnVmZmVyLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCwgY29uc3QgQmFzZVR5cGVfdCB4SnVzdFBlZWtpbmcgKQ0KMTM2OTogICAgICAgICAgICAgICAgew0KQkZEMDEwM0MgICAgICA0RkU1ICAgQURESVUgU1AsIFNQLCAtNTYKQkZEMDEwM0UgICAgICBDQkVEICAgU1cgUkEsIDUyKFNQKQpCRkQwMTA0MCAgICAgIENCQ0MgICBTVyBTOCwgNDgoU1ApCkJGRDAxMDQyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAxMDQ0ICAwMDM4Rjg5RSAgIFNXIEEwLCA1NihTOCkKQkZEMDEwNDggIDAwM0NGOEJFICAgU1cgQTEsIDYwKFM4KQpCRkQwMTA0QyAgMDA0MEY4REUgICBTVyBBMiwgNjQoUzgpCkJGRDAxMDUwICAwMDQ0RjhGRSAgIFNXIEEzLCA2OChTOCkKMTM3MDogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4RW50cnlUaW1lU2V0ID0gcGRGQUxTRTsNCkJGRDAxMDU0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQoxMzcxOiAgICAgICAgICAgICAgICBUaW1lT3V0X3QgeFRpbWVPdXQ7DQoxMzcyOiAgICAgICAgICAgICAgICBpbnQ4X3QgKnBjT3JpZ2luYWxSZWFkUG9zaXRpb247DQoxMzczOiAgICAgICAgICAgICAgICBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDEwNTggIDAwMzhGQzVFICAgTFcgVjAsIDU2KFM4KQpCRkQwMTA1QyAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjEzNzQ6ICAgICAgICAgICAgICAgIA0KMTM3NTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDEwNjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTA2NCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTA3QQpCRkQwMTA2OCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMTA2QSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAxMDZDICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDAxMDZFICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDEwNzAgIDA1NUYzMEEwICAgQURESVUgQTEsIFpFUk8sIDEzNzUKQkZEMDEwNzIgICAgICAwNTVGICAgU1VCVSBWMCwgQTMsIEExCkJGRDAxMDc0ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMTA3NiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMTA3OCAgICAgIDBDMDAgICBOT1AKMTM3NjogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggISggKCBwdkJ1ZmZlciA9PSBOVUxMICkgJiYgKCBweFF1ZXVlLT51eEl0ZW1TaXplICE9ICggVUJhc2VUeXBlX3QgKSAwVSApICkgKTsNCkJGRDAxMDdBICAwMDNDRkM1RSAgIExXIFYwLCA2MChTOCkKQkZEMDEwN0UgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEwOEUKQkZEMDEwODIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTA4NiAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDAxMDhBICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMDk0CkJGRDAxMDhFICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxMDkwICAgICAgQ0MwMiAgIEIgMHhCRkQwMTA5NgpCRkQwMTA5MiAgICAgIDBDMDAgICBOT1AKQkZEMDEwOTQgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwMTA5NiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTBBQwpCRkQwMTA5QSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMTA5QyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAxMDlFICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDAxMEEwICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDEwQTIgIDA1NjAzMEEwICAgQURESVUgQTEsIFpFUk8sIDEzNzYKQkZEMDEwQTQgICAgICAwNTYwICAgQUREVSBWMCwgUzAsIEEyCkJGRDAxMEE2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMTBBOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMTBBQSAgICAgIDBDMDAgICBOT1AKMTM3NzogICAgICAgICAgICAgICAgCSNpZiAoICggSU5DTFVERV94VGFza0dldFNjaGVkdWxlclN0YXRlID09IDEgKSB8fCAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApICkNCjEzNzg6ICAgICAgICAgICAgICAgIAl7DQoxMzc5OiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggISggKCB4VGFza0dldFNjaGVkdWxlclN0YXRlKCkgPT0gdGFza1NDSEVEVUxFUl9TVVNQRU5ERUQgKSAmJiAoIHhUaWNrc1RvV2FpdCAhPSAwICkgKSApOw0KQkZEMDEwQUMgIDRBOEU3N0U4ICAgSkFMUyB4VGFza0dldFNjaGVkdWxlclN0YXRlCkJGRDAxMEFFICAgICAgNEE4RSAgIExXIFM0LCA1NihTUCkKQkZEMDEwQjAgICAgICAwQzAwICAgTk9QCkJGRDAxMEIyICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMEJFCkJGRDAxMEI2ICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkKQkZEMDEwQkEgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEwQzQKQkZEMDEwQkUgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDEwQzAgICAgICBDQzAyICAgQiAweEJGRDAxMEM2CkJGRDAxMEMyICAgICAgMEMwMCAgIE5PUApCRkQwMTBDNCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCkJGRDAxMEM2ICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMEUyCkJGRDAxMENBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAxMENDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDEwQ0UgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDEwRDAgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwMTBEMiAgMDU2MzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTM3OQpCRkQwMTBENCAgICAgIDA1NjMgICBTVUJVIFYwLCBTMSwgQTIKQkZEMDEwRDYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAxMEQ4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAxMERBICAgICAgMEMwMCAgIE5PUApCRkQwMTBEQyAgICAgIENDMDIgICBCIDB4QkZEMDEwRTIKQkZEMDEwREUgICAgICAwQzAwICAgTk9QCjEzODA6ICAgICAgICAgICAgICAgIAl9DQoxMzgxOiAgICAgICAgICAgICAgICAJI2VuZGlmDQoxMzgyOiAgICAgICAgICAgICAgICANCjEzODM6ICAgICAgICAgICAgICAgIAkvKiBUaGlzIGZ1bmN0aW9uIHJlbGF4ZXMgdGhlIGNvZGluZyBzdGFuZGFyZCBzb21ld2hhdCB0byBhbGxvdyByZXR1cm4NCjEzODQ6ICAgICAgICAgICAgICAgIAlzdGF0ZW1lbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLiAgVGhpcyBpcyBkb25lIGluIHRoZSBpbnRlcmVzdA0KMTM4NTogICAgICAgICAgICAgICAgCW9mIGV4ZWN1dGlvbiB0aW1lIGVmZmljaWVuY3kuICovDQoxMzg2OiAgICAgICAgICAgICAgICANCjEzODc6ICAgICAgICAgICAgICAgIAlmb3IoIDs7ICkNCjEzODg6ICAgICAgICAgICAgICAgIAl7DQoxMzg5OiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDEwRTIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDEwRTQgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDAxMEU2ICAgICAgMEMwMCAgIE5PUAoxMzkwOiAgICAgICAgICAgICAgICAJCXsNCjEzOTE6ICAgICAgICAgICAgICAgIAkJCS8qIElzIHRoZXJlIGRhdGEgaW4gdGhlIHF1ZXVlIG5vdz8gIFRvIGJlIHJ1bm5pbmcgdGhlIGNhbGxpbmcgdGFzaw0KMTM5MjogICAgICAgICAgICAgICAgCQkJbXVzdCBiZQl0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHdhbnRpbmcgdG8gYWNjZXNzIHRoZSBxdWV1ZS4gKi8NCjEzOTM6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAxMEU4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDEwRUMgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQpCRkQwMTBFRSAgMDA3MDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTFEMgoxMzk0OiAgICAgICAgICAgICAgICAJCQl7DQoxMzk1OiAgICAgICAgICAgICAgICAJCQkJLyogUmVtZW1iZXIgdGhlIHJlYWQgcG9zaXRpb24gaW4gY2FzZSB0aGUgcXVldWUgaXMgb25seSBiZWluZw0KMTM5NjogICAgICAgICAgICAgICAgCQkJCXBlZWtlZC4gKi8NCjEzOTc6ICAgICAgICAgICAgICAgIAkJCQlwY09yaWdpbmFsUmVhZFBvc2l0aW9uID0gcHhRdWV1ZS0+dS5wY1JlYWRGcm9tOw0KQkZEMDEwRjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTBGNiAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDAxMEY4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMTM5ODogICAgICAgICAgICAgICAgDQoxMzk5OiAgICAgICAgICAgICAgICAJCQkJcHJ2Q29weURhdGFGcm9tUXVldWUoIHB4UXVldWUsIHB2QnVmZmVyICk7DQpCRkQwMTBGQyAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDAxMTAwICAwMDNDRkNCRSAgIExXIEExLCA2MChTOCkKQkZEMDExMDQgIDM2N0E3N0U4ICAgSkFMUyBwcnZDb3B5RGF0YUZyb21RdWV1ZQpCRkQwMTEwNiAgMEMwMDM2N0EgICBMSFUgUzMsIDMwNzIoSzApCkJGRDAxMTA4ICAgICAgMEMwMCAgIE5PUAoxNDAwOiAgICAgICAgICAgICAgICANCjE0MDE6ICAgICAgICAgICAgICAgIAkJCQlpZiggeEp1c3RQZWVraW5nID09IHBkRkFMU0UgKQ0KQkZEMDExMEEgIDAwNDRGQzVFICAgTFcgVjAsIDY4KFM4KQpCRkQwMTEwRSAgMDAzNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTE3RQoxNDAyOiAgICAgICAgICAgICAgICAJCQkJew0KMTQwMzogICAgICAgICAgICAgICAgCQkJCQl0cmFjZVFVRVVFX1JFQ0VJVkUoIHB4UXVldWUgKTsNCjE0MDQ6ICAgICAgICAgICAgICAgIA0KMTQwNTogICAgICAgICAgICAgICAgCQkJCQkvKiBBY3R1YWxseSByZW1vdmluZyBkYXRhLCBub3QganVzdCBwZWVraW5nLiAqLw0KMTQwNjogICAgICAgICAgICAgICAgCQkJCQktLSggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgKTsNCkJGRDAxMTEyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDExMTYgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQpCRkQwMTExOCAgICAgIDZEQUUgICBBRERJVSBWMSwgVjAsIC0xCkJGRDAxMTFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDExMUUgICAgICBFOUFFICAgU1cgVjEsIDU2KFYwKQoxNDA3OiAgICAgICAgICAgICAgICANCjE0MDg6ICAgICAgICAgICAgICAgIAkJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxNDA5OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE0MTA6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBweFF1ZXVlLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCkJGRDAxMTIwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDExMjQgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAxMTI2ICAwMDA3NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMTM4CjE0MTE6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE0MTI6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBSZWNvcmQgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGltcGxlbWVudA0KMTQxMzogICAgICAgICAgICAgICAgCQkJCQkJCXByaW9yaXR5IGluaGVyaXRhbmNlIHNob3VsZCBpdCBiZWNvbWUgbmVjZXNzYXJ5LiAqLw0KMTQxNDogICAgICAgICAgICAgICAgCQkJCQkJCXB4UXVldWUtPnB4TXV0ZXhIb2xkZXIgPSAoIGludDhfdCAqICkgcHZUYXNrSW5jcmVtZW50TXV0ZXhIZWxkQ291bnQoKTsgLypsaW50ICFlOTYxIENhc3QgaXMgbm90IHJlZHVuZGFudCBhcyBUYXNrSGFuZGxlX3QgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDExMkEgIDRDRTA3N0U4ICAgSkFMUyBwdlRhc2tJbmNyZW1lbnRNdXRleEhlbGRDb3VudApCRkQwMTEyQyAgICAgIDRDRTAgICBBRERJVSBBMywgQTMsIDAKQkZEMDExMkUgICAgICAwQzAwICAgTk9QCkJGRDAxMTMwICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDAxMTMyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDExMzYgICAgICBFOUExICAgU1cgVjEsIDQoVjApCjE0MTU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE0MTY6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjE0MTc6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE0MTg6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDE5OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxNDIwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0MjE6ICAgICAgICAgICAgICAgIAkJCQkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9NVVRFWEVTICovDQoxNDIyOiAgICAgICAgICAgICAgICANCjE0MjM6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCkJGRDAxMTM4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDExM0MgICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQpCRkQwMTEzRSAgMDA0MjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTFDNgoxNDI0OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE0MjU6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkVFJVRSApDQpCRkQwMTE0MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxMTQ2ICAgICAgNkQyOCAgIEFERElVIFYwLCBWMCwgMTYKQkZEMDExNDggICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDExNEEgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QKQkZEMDExNEMgIDBDMDAyMkJDICAgTFdDMiBTNSwgMzA3MihHUCkKQkZEMDExNEUgICAgICAwQzAwICAgTk9QCkJGRDAxMTUwICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDAxMTUyICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAxMTU0ICAwMDM3QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDExQzYKQkZEMDExNTYgIDBDMDAwMDM3ICAgU0xMIEFULCBTNywgMQpCRkQwMTE1OCAgICAgIDBDMDAgICBOT1AKMTQyNjogICAgICAgICAgICAgICAgCQkJCQkJew0KMTQyNzogICAgICAgICAgICAgICAgCQkJCQkJCXF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KQkZEMDExNUEgIDRFMTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQpCRkQwMTE1QyAgICAgIDRFMTYgICBBRERJVSBTMCwgUzAsIC01CkJGRDAxMTVFICAgICAgMEMwMCAgIE5PUApCRkQwMTE2MCAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpCkJGRDAxMTY0ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDExNjggIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDAxMTZDICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkKQkZEMDExNzAgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQpCRkQwMTE3NCAgNEUyNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UKQkZEMDExNzYgICAgICA0RTI2ICAgQURESVUgUzEsIFMxLCAzCkJGRDAxMTc4ICAgICAgMEMwMCAgIE5PUApCRkQwMTE3QSAgICAgIENDMjUgICBCIDB4QkZEMDExQzYKQkZEMDExN0MgICAgICAwQzAwICAgTk9QCjE0Mjg6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE0Mjk6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjE0MzA6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE0MzE6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDMyOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxNDMzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0MzQ6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTQzNTogICAgICAgICAgICAgICAgCQkJCQl7DQoxNDM2OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDM3OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0Mzg6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDM5OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTQ0MDogICAgICAgICAgICAgICAgCQkJCXsNCjE0NDE6ICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VRVUVVRV9QRUVLKCBweFF1ZXVlICk7DQoxNDQyOiAgICAgICAgICAgICAgICANCjE0NDM6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGRhdGEgaXMgbm90IGJlaW5nIHJlbW92ZWQsIHNvIHJlc2V0IHRoZSByZWFkDQoxNDQ0OiAgICAgICAgICAgICAgICAJCQkJCXBvaW50ZXIuICovDQoxNDQ1OiAgICAgICAgICAgICAgICAJCQkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSA9IHBjT3JpZ2luYWxSZWFkUG9zaXRpb247DQpCRkQwMTE3RSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxMTgyICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkKQkZEMDExODYgICAgICBFOUEzICAgU1cgVjEsIDEyKFYwKQoxNDQ2OiAgICAgICAgICAgICAgICANCjE0NDc6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGRhdGEgaXMgYmVpbmcgbGVmdCBpbiB0aGUgcXVldWUsIHNvIHNlZSBpZiB0aGVyZSBhcmUNCjE0NDg6ICAgICAgICAgICAgICAgIAkJCQkJYW55IG90aGVyIHRhc2tzIHdhaXRpbmcgZm9yIHRoZSBkYXRhLiAqLw0KMTQ0OTogICAgICAgICAgICAgICAgCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KQkZEMDExODggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTE4QyAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApCkJGRDAxMThFICAwMDFBNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxMUM2CjE0NTA6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTQ1MTogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQpCRkQwMTE5MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxMTk2ICAwMDI0MzA0MiAgIEFERElVIFYwLCBWMCwgMzYKQkZEMDExOUEgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDExOUMgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QKQkZEMDExOUUgIDBDMDAyMkJDICAgTFdDMiBTNSwgMzA3MihHUCkKQkZEMDExQTAgICAgICAwQzAwICAgTk9QCkJGRDAxMUEyICAwMDEwNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxMUM2CjE0NTI6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE0NTM6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgdGFzay4gKi8NCjE0NTQ6ICAgICAgICAgICAgICAgIAkJCQkJCQlxdWV1ZVlJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKTsNCkJGRDAxMUE2ICA0RTE2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDExQTggICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQpCRkQwMTFBQSAgICAgIDBDMDAgICBOT1AKQkZEMDExQUMgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQpCRkQwMTFCMCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAxMUI0ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwMTFCOCAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpCkJGRDAxMUJDICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDExQzAgIDRFMjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDAxMUMyICAgICAgNEUyNiAgIEFERElVIFMxLCBTMSwgMwpCRkQwMTFDNCAgICAgIDBDMDAgICBOT1AKMTQ1NTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTQ1NjogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTQ1NzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTQ1ODogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0NTk6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE0NjA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTQ2MTogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxNDYyOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE0NjM6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0NjQ6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTQ2NTogICAgICAgICAgICAgICAgCQkJCX0NCjE0NjY6ICAgICAgICAgICAgICAgIA0KMTQ2NzogICAgICAgICAgICAgICAgCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMTFDNiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAxMUM4ICAwQzAwNDBBQSAgIEJORVpDIFQyLCBwcnZDb3B5RGF0YVRvUXVldWUKQkZEMDExQ0EgICAgICAwQzAwICAgTk9QCjE0Njg6ICAgICAgICAgICAgICAgIAkJCQlyZXR1cm4gcGRQQVNTOw0KQkZEMDExQ0MgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDExQ0UgICAgICBDQzlBICAgQiAweEJGRDAxMzA0CkJGRDAxMUQwICAgICAgMEMwMCAgIE5PUAoxNDY5OiAgICAgICAgICAgICAgICAJCQl9DQoxNDcwOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxNDcxOiAgICAgICAgICAgICAgICAJCQl7DQoxNDcyOiAgICAgICAgICAgICAgICAJCQkJaWYoIHhUaWNrc1RvV2FpdCA9PSAoIFRpY2tUeXBlX3QgKSAwICkNCkJGRDAxMUQyICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkKQkZEMDExRDYgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDExRTYKMTQ3MzogICAgICAgICAgICAgICAgCQkJCXsNCjE0NzQ6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHF1ZXVlIHdhcyBlbXB0eSBhbmQgbm8gYmxvY2sgdGltZSBpcyBzcGVjaWZpZWQgKG9yDQoxNDc1OiAgICAgICAgICAgICAgICAJCQkJCXRoZSBibG9jayB0aW1lIGhhcyBleHBpcmVkKSBzbyBsZWF2ZSBub3cuICovDQoxNDc2OiAgICAgICAgICAgICAgICAJCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMTFEQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAxMURDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyOUUwCkJGRDAxMURFICAgICAgMEMwMCAgIE5PUAoxNDc3OiAgICAgICAgICAgICAgICAJCQkJCXRyYWNlUVVFVUVfUkVDRUlWRV9GQUlMRUQoIHB4UXVldWUgKTsNCjE0Nzg6ICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIGVyclFVRVVFX0VNUFRZOw0KQkZEMDExRTAgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwpCRkQwMTFFMiAgICAgIENDOTAgICBCIDB4QkZEMDEzMDQKQkZEMDExRTQgICAgICAwQzAwICAgTk9QCjE0Nzk6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDgwOiAgICAgICAgICAgICAgICAJCQkJZWxzZSBpZiggeEVudHJ5VGltZVNldCA9PSBwZEZBTFNFICkNCkJGRDAxMUU2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDExRUEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEyMDAKMTQ4MTogICAgICAgICAgICAgICAgCQkJCXsNCjE0ODI6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBibG9jayB0aW1lIHdhcyBzcGVjaWZpZWQgc28NCjE0ODM6ICAgICAgICAgICAgICAgIAkJCQkJY29uZmlndXJlIHRoZSB0aW1lb3V0IHN0cnVjdHVyZS4gKi8NCjE0ODQ6ICAgICAgICAgICAgICAgIAkJCQkJdlRhc2tTZXRUaW1lT3V0U3RhdGUoICZ4VGltZU91dCApOw0KQkZEMDExRUUgIDAwMjgzMDVFICAgQURESVUgVjAsIFM4LCA0MApCRkQwMTFGMiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwMTFGNCAgNDdBNjc3RTggICBKQUxTIHZUYXNrU2V0VGltZU91dFN0YXRlCkJGRDAxMUY4ICAgICAgMEMwMCAgIE5PUAoxNDg1OiAgICAgICAgICAgICAgICAJCQkJCXhFbnRyeVRpbWVTZXQgPSBwZFRSVUU7DQpCRkQwMTFGQSAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMTFGQyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE0ODY6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDg3OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTQ4ODogICAgICAgICAgICAgICAgCQkJCXsNCjE0ODk6ICAgICAgICAgICAgICAgIAkJCQkJLyogRW50cnkgdGltZSB3YXMgYWxyZWFkeSBzZXQuICovDQoxNDkwOiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0OTE6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDkyOiAgICAgICAgICAgICAgICAJCQl9DQoxNDkzOiAgICAgICAgICAgICAgICAJCX0NCjE0OTQ6ICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAxMjAwICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDEyMDIgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDJBMDYKQkZEMDEyMDQgICAgICAwQzAwICAgTk9QCjE0OTU6ICAgICAgICAgICAgICAgIA0KMTQ5NjogICAgICAgICAgICAgICAgCQkvKiBJbnRlcnJ1cHRzIGFuZCBvdGhlciB0YXNrcyBjYW4gc2VuZCB0byBhbmQgcmVjZWl2ZSBmcm9tIHRoZSBxdWV1ZQ0KMTQ5NzogICAgICAgICAgICAgICAgCQlub3cgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaGFzIGJlZW4gZXhpdGVkLiAqLw0KMTQ5ODogICAgICAgICAgICAgICAgDQoxNDk5OiAgICAgICAgICAgICAgICAJCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDEyMDYgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwKQkZEMDEyMDggICAgICA0RUY0ICAgQURESVUgUzcsIFM3LCAtNgpCRkQwMTIwQSAgICAgIDBDMDAgICBOT1AKMTUwMDogICAgICAgICAgICAgICAgCQlwcnZMb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDAxMjBDICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAxMjBFICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMTIxMCAgICAgIDBDMDAgICBOT1AKQkZEMDEyMTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTIxNiAgMDA0NEZDNjIgICBMVyBWMSwgNjgoVjApCkJGRDAxMjFBICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwMTIxQyAgMDAwNUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxMjJBCkJGRDAxMjFFICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQpCRkQwMTIyMCAgICAgIDBDMDAgICBOT1AKQkZEMDEyMjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTIyNiAgMDA0NEY4MDIgICBTVyBaRVJPLCA2OChWMCkKQkZEMDEyMkEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTIyRSAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApCkJGRDAxMjMyICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwMTIzNCAgMDAwNUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxMjQyCkJGRDAxMjM2ICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQpCRkQwMTIzOCAgICAgIDBDMDAgICBOT1AKQkZEMDEyM0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTIzRSAgMDA0OEY4MDIgICBTVyBaRVJPLCA3MihWMCkKQkZEMDEyNDIgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMTI0NCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMkE0OApCRkQwMTI0NiAgICAgIDBDMDAgICBOT1AKMTUwMTogICAgICAgICAgICAgICAgDQoxNTAyOiAgICAgICAgICAgICAgICAJCS8qIFVwZGF0ZSB0aGUgdGltZW91dCBzdGF0ZSB0byBzZWUgaWYgaXQgaGFzIGV4cGlyZWQgeWV0LiAqLw0KMTUwMzogICAgICAgICAgICAgICAgCQlpZiggeFRhc2tDaGVja0ZvclRpbWVPdXQoICZ4VGltZU91dCwgJnhUaWNrc1RvV2FpdCApID09IHBkRkFMU0UgKQ0KQkZEMDEyNDggIDAwMjgzMDdFICAgQURESVUgVjEsIFM4LCA0MApCRkQwMTI0QyAgMDA0MDMwNUUgICBBRERJVSBWMCwgUzgsIDY0CkJGRDAxMjUwICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDAxMjUyICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDAxMjU0ICAxRkY2NzdFOCAgIEpBTFMgeFRhc2tDaGVja0ZvclRpbWVPdXQKQkZEMDEyNTYgIDBDMDAxRkY2ICAgTEIgUkEsIDMwNzIoUzYpCkJGRDAxMjU4ICAgICAgMEMwMCAgIE5PUApCRkQwMTI1QSAgMDA0QTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTJGMgoxNTA0OiAgICAgICAgICAgICAgICAJCXsNCjE1MDU6ICAgICAgICAgICAgICAgIAkJCWlmKCBwcnZJc1F1ZXVlRW1wdHkoIHB4UXVldWUgKSAhPSBwZEZBTFNFICkNCkJGRDAxMjVFICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDEyNjIgIDQ5RDA3N0U4ICAgSkFMUyBwcnZJc1F1ZXVlRW1wdHkKQkZEMDEyNjQgICAgICA0OUQwICAgTFcgVDYsIDY0KFNQKQpCRkQwMTI2NiAgICAgIDBDMDAgICBOT1AKQkZEMDEyNjggIDAwMzk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDEyREUKMTUwNjogICAgICAgICAgICAgICAgCQkJew0KMTUwNzogICAgICAgICAgICAgICAgCQkJCXRyYWNlQkxPQ0tJTkdfT05fUVVFVUVfUkVDRUlWRSggcHhRdWV1ZSApOw0KMTUwODogICAgICAgICAgICAgICAgDQoxNTA5OiAgICAgICAgICAgICAgICAJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxNTEwOiAgICAgICAgICAgICAgICAJCQkJew0KMTUxMTogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApDQpCRkQwMTI2QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxMjcwICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMTI3MiAgMDAwRDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTI5MAoxNTEyOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE1MTM6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDEyNzYgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDEyNzggIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDAxMjdBICAgICAgMEMwMCAgIE5PUAoxNTE0OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxNTE1OiAgICAgICAgICAgICAgICAJCQkJCQkJdlRhc2tQcmlvcml0eUluaGVyaXQoICggdm9pZCAqICkgcHhRdWV1ZS0+cHhNdXRleEhvbGRlciApOw0KQkZEMDEyN0MgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTI4MCAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDEyODIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDEyODQgIDFBOTA3N0U4ICAgSkFMUyB2VGFza1ByaW9yaXR5SW5oZXJpdApCRkQwMTI4NiAgMEMwMDFBOTAgICBTQiBTNCwgMzA3MihTMCkKQkZEMDEyODggICAgICAwQzAwICAgTk9QCjE1MTY6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE1MTc6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMTI4QSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAxMjhDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyQTkwCkJGRDAxMjhFICAgICAgMEMwMCAgIE5PUAoxNTE4OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE1MTk6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTUyMDogICAgICAgICAgICAgICAgCQkJCQl7DQoxNTIxOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNTIyOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE1MjM6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNTI0OiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoxNTI1OiAgICAgICAgICAgICAgICANCjE1MjY6ICAgICAgICAgICAgICAgIAkJCQl2VGFza1BsYWNlT25FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSwgeFRpY2tzVG9XYWl0ICk7DQpCRkQwMTI5MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxMjk0ICAwMDI0MzA2MiAgIEFERElVIFYxLCBWMCwgMzYKQkZEMDEyOTggIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQpCRkQwMTI5QyAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMTI5RSAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMTJBMCAgMkYzQTc3RTggICBKQUxTIHZUYXNrUGxhY2VPbkV2ZW50TGlzdApCRkQwMTJBMiAgICAgIDJGM0EgICBBTkRJIEEyLCBWMSwgMHgyMApCRkQwMTJBNCAgICAgIDBDMDAgICBOT1AKMTUyNzogICAgICAgICAgICAgICAgCQkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwMTJBNiAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDAxMkFBICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUKQkZEMDEyQUMgIDBDMDAxREVFICAgTEIgVDcsIDMwNzIoVDYpCkJGRDAxMkFFICAgICAgMEMwMCAgIE5PUAoxNTI4OiAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrUmVzdW1lQWxsKCkgPT0gcGRGQUxTRSApDQpCRkQwMTJCMCAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsCkJGRDAxMkIyICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikKQkZEMDEyQjQgICAgICAwQzAwICAgTk9QCkJGRDAxMkI2ICBGRjEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMEUwCkJGRDAxMkI4ICA3N0U4RkYxMyAgIExXIFQ4LCAzMDY5NihTMykKMTUyOTogICAgICAgICAgICAgICAgCQkJCXsNCjE1MzA6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDAxMkJBICA0RTE2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDEyQkMgICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQpCRkQwMTJCRSAgICAgIDBDMDAgICBOT1AKQkZEMDEyQzAgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQpCRkQwMTJDNCAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDAxMkM4ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwMTJDQyAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpCkJGRDAxMkQwICAwMDI0RkM5RSAgIExXIEEwLCAzNihTOCkKQkZEMDEyRDQgIDRFMjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDAxMkQ2ICAgICAgNEUyNiAgIEFERElVIFMxLCBTMSwgMwpCRkQwMTJEOCAgICAgIDBDMDAgICBOT1AKMTUzMTogICAgICAgICAgICAgICAgCQkJCX0NCjE1MzI6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxNTMzOiAgICAgICAgICAgICAgICAJCQkJew0KMTUzNDogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNTM1OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTUzNjogICAgICAgICAgICAgICAgCQkJfQ0KMTUzNzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTUzODogICAgICAgICAgICAgICAgCQkJew0KMTUzOTogICAgICAgICAgICAgICAgCQkJCS8qIFRyeSBhZ2Fpbi4gKi8NCjE1NDA6ICAgICAgICAgICAgICAgIAkJCQlwcnZVbmxvY2tRdWV1ZSggcHhRdWV1ZSApOw0KQkZEMDEyREUgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQpCRkQwMTJFMiAgMURFRTc3RTggICBKQUxTIHBydlVubG9ja1F1ZXVlCkJGRDAxMkU0ICAwQzAwMURFRSAgIExCIFQ3LCAzMDcyKFQ2KQpCRkQwMTJFNiAgICAgIDBDMDAgICBOT1AKMTU0MTogICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwMTJFOCAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsCkJGRDAxMkVBICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikKQkZEMDEyRUMgICAgICAwQzAwICAgTk9QCjE1NDI6ICAgICAgICAgICAgICAgIAkJCX0NCjE1NDM6ICAgICAgICAgICAgICAgIAkJfQ0KMTU0NDogICAgICAgICAgICAgICAgCQllbHNlDQoxNTQ1OiAgICAgICAgICAgICAgICAJCXsNCjE1NDY6ICAgICAgICAgICAgICAgIAkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwMTJGMiAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDAxMkY2ICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUKQkZEMDEyRjggIDBDMDAxREVFICAgTEIgVDcsIDMwNzIoVDYpCkJGRDAxMkZBICAgICAgMEMwMCAgIE5PUAoxNTQ3OiAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDEyRkMgIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbApCRkQwMTJGRSAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpCkJGRDAxMzAwICAgICAgMEMwMCAgIE5PUAoxNTQ4OiAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1JFQ0VJVkVfRkFJTEVEKCBweFF1ZXVlICk7DQoxNTQ5OiAgICAgICAgICAgICAgICAJCQlyZXR1cm4gZXJyUVVFVUVfRU1QVFk7DQpCRkQwMTMwMiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjE1NTA6ICAgICAgICAgICAgICAgIAkJfQ0KMTU1MTogICAgICAgICAgICAgICAgCX0NCkJGRDAxMEUwICAgICAgMEMwMCAgIE5PUApCRkQwMTJEQSAgICAgIENGMDMgICBCIDB4QkZEMDEwRTIKQkZEMDEyREMgICAgICAwQzAwICAgTk9QCkJGRDAxMkVFICAgICAgQ0VGOSAgIEIgMHhCRkQwMTBFMgpCRkQwMTJGMCAgICAgIDBDMDAgICBOT1AKMTU1MjogICAgICAgICAgICAgICAgfQ0KQkZEMDEzMDQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDEzMDYgICAgICA0QkVEICAgTFcgUkEsIDUyKFNQKQpCRkQwMTMwOCAgICAgIDRCQ0MgICBMVyBTOCwgNDgoU1ApCkJGRDAxMzBBICAgICAgNEMxRCAgIEFERElVIFNQLCBTUCwgNTYKQkZEMDEzMEMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMTMwRSAgICAgIDBDMDAgICBOT1AKMTU1MzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNTU0OiAgICAgICAgICAgICAgICANCjE1NTU6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFF1ZXVlUmVjZWl2ZUZyb21JU1IoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIsIEJhc2VUeXBlX3QgKiBjb25zdCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCjE1NTY6ICAgICAgICAgICAgICAgIHsNCkJGRDAzQUM4ICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwCkJGRDAzQUNBICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkKQkZEMDNBQ0MgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQpCRkQwM0FDRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwM0FEMCAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpCkJGRDAzQUQ0ICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkKQkZEMDNBRDggIDAwMzBGOERFICAgU1cgQTIsIDQ4KFM4KQoxNTU3OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoxNTU4OiAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KMTU1OTogICAgICAgICAgICAgICAgUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCkJGRDAzQURDICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDNBRTAgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoxNTYwOiAgICAgICAgICAgICAgICANCjE1NjE6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCkJGRDAzQUU0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDNBRTggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNBRkUKQkZEMDNBRUMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDNBRUUgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwM0FGMCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwM0FGMiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDAzQUY0ICAwNjE5MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNTYxCkJGRDAzQUY2ICAgICAgMDYxOSAgIFNVQlUgQTAsIEEwLCBTMQpCRkQwM0FGOCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDNBRkEgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDNBRkMgICAgICAwQzAwICAgTk9QCjE1NjI6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICEoICggcHZCdWZmZXIgPT0gTlVMTCApICYmICggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAoIFVCYXNlVHlwZV90ICkgMFUgKSApICk7DQpCRkQwM0FGRSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAzQjAyICAwMDA2NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzQjEyCkJGRDAzQjA2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDNCMEEgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQpCRkQwM0IwRSAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwM0IxOApCRkQwM0IxMiAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwM0IxNCAgICAgIENDMDIgICBCIDB4QkZEMDNCMUEKQkZEMDNCMTYgICAgICAwQzAwICAgTk9QCkJGRDAzQjE4ICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8KQkZEMDNCMUEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNCMzAKQkZEMDNCMUUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDNCMjAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwM0IyMiAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwM0IyNCAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDAzQjI2ICAwNjFBMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNTYyCkJGRDAzQjI4ICAgICAgMDYxQSAgIEFERFUgQTAsIEExLCBTMQpCRkQwM0IyQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDNCMkMgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDNCMkUgICAgICAwQzAwICAgTk9QCjE1NjM6ICAgICAgICAgICAgICAgIA0KMTU2NDogICAgICAgICAgICAgICAgCS8qIFJUT1MgcG9ydHMgdGhhdCBzdXBwb3J0IGludGVycnVwdCBuZXN0aW5nIGhhdmUgdGhlIGNvbmNlcHQgb2YgYSBtYXhpbXVtDQoxNTY1OiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwgKG9yIG1heGltdW0gQVBJIGNhbGwpIGludGVycnVwdCBwcmlvcml0eS4gIEludGVycnVwdHMgdGhhdCBhcmUNCjE1NjY6ICAgICAgICAgICAgICAgIAlhYm92ZSB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eSBhcmUga2VwdCBwZXJtYW5lbnRseSBlbmFibGVkLCBldmVuDQoxNTY3OiAgICAgICAgICAgICAgICAJd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvDQoxNTY4OiAgICAgICAgICAgICAgICAJRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4gIElmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaA0KMTU2OTogICAgICAgICAgICAgICAgCXRoZW4gcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbg0KMTU3MDogICAgICAgICAgICAgICAgCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4NCjE1NzE6ICAgICAgICAgICAgICAgIAlhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlIHRoZSBjb25maWd1cmVkIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkuDQoxNTcyOiAgICAgICAgICAgICAgICAJT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cw0KMTU3MzogICAgICAgICAgICAgICAgCXRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgKGxvZ2ljYWxseSkgYmVsb3cgdGhlIG1heGltdW0NCjE1NzQ6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbAlpbnRlcnJ1cHQgcHJpb3JpdHkuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQNCjE1NzU6ICAgICAgICAgICAgICAgIAlzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4NCjE1NzY6ICAgICAgICAgICAgICAgIAlNb3JlIGluZm9ybWF0aW9uIChhbGJlaXQgQ29ydGV4LU0gc3BlY2lmaWMpIGlzIHByb3ZpZGVkIG9uIHRoZSBmb2xsb3dpbmcNCjE1Nzc6ICAgICAgICAgICAgICAgIAlsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxNTc4OiAgICAgICAgICAgICAgICAJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpOw0KMTU3OTogICAgICAgICAgICAgICAgDQoxNTgwOiAgICAgICAgICAgICAgICAJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDAzQjMwICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDNCMzQgICAgICAwQzAwICAgTk9QCkJGRDAzQjM2ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMTU4MTogICAgICAgICAgICAgICAgCXsNCjE1ODI6ICAgICAgICAgICAgICAgIAkJLyogQ2Fubm90IGJsb2NrIGluIGFuIElTUiwgc28gY2hlY2sgdGhlcmUgaXMgZGF0YSBhdmFpbGFibGUuICovDQoxNTgzOiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAzQjNBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDNCM0UgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQpCRkQwM0I0MCAgMDAzQzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0JCQwoxNTg0OiAgICAgICAgICAgICAgICAJCXsNCjE1ODU6ICAgICAgICAgICAgICAgIAkJCXRyYWNlUVVFVUVfUkVDRUlWRV9GUk9NX0lTUiggcHhRdWV1ZSApOw0KMTU4NjogICAgICAgICAgICAgICAgDQoxNTg3OiAgICAgICAgICAgICAgICAJCQlwcnZDb3B5RGF0YUZyb21RdWV1ZSggcHhRdWV1ZSwgcHZCdWZmZXIgKTsNCkJGRDAzQjQ0ICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDNCNDggIDAwMkNGQ0JFICAgTFcgQTEsIDQ0KFM4KQpCRkQwM0I0QyAgMzY3QTc3RTggICBKQUxTIHBydkNvcHlEYXRhRnJvbVF1ZXVlCkJGRDAzQjRFICAwQzAwMzY3QSAgIExIVSBTMywgMzA3MihLMCkKQkZEMDNCNTAgICAgICAwQzAwICAgTk9QCjE1ODg6ICAgICAgICAgICAgICAgIAkJCS0tKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KQkZEMDNCNTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwM0I1NiAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApCkJGRDAzQjU4ICAgICAgNkRBRSAgIEFERElVIFYxLCBWMCwgLTEKQkZEMDNCNUEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwM0I1RSAgICAgIEU5QUUgICBTVyBWMSwgNTYoVjApCjE1ODk6ICAgICAgICAgICAgICAgIA0KMTU5MDogICAgICAgICAgICAgICAgCQkJLyogSWYgdGhlIHF1ZXVlIGlzIGxvY2tlZCB0aGUgZXZlbnQgbGlzdCB3aWxsIG5vdCBiZSBtb2RpZmllZC4NCjE1OTE6ICAgICAgICAgICAgICAgIAkJCUluc3RlYWQgdXBkYXRlIHRoZSBsb2NrIGNvdW50IHNvIHRoZSB0YXNrIHRoYXQgdW5sb2NrcyB0aGUgcXVldWUNCjE1OTI6ICAgICAgICAgICAgICAgIAkJCXdpbGwga25vdyB0aGF0IGFuIElTUiBoYXMgcmVtb3ZlZCBkYXRhIHdoaWxlIHRoZSBxdWV1ZSB3YXMNCjE1OTM6ICAgICAgICAgICAgICAgIAkJCWxvY2tlZC4gKi8NCjE1OTQ6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT54UnhMb2NrID09IHF1ZXVlVU5MT0NLRUQgKQ0KQkZEMDNCNjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwM0I2NCAgMDA0NEZDNjIgICBMVyBWMSwgNjgoVjApCkJGRDAzQjY4ICAgICAgRUQ3RiAgIExJIFYwLCAtMQpCRkQwM0I2QSAgMDAxOUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAzQkEwCkJGRDAzQjZDICAwQzAwMDAxOSAgIFNMTCBaRVJPLCBUOSwgMQpCRkQwM0I2RSAgICAgIDBDMDAgICBOT1AKMTU5NTogICAgICAgICAgICAgICAgCQkJew0KMTU5NjogICAgICAgICAgICAgICAgCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgPT0gcGRGQUxTRSApDQpCRkQwM0I3MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAzQjc0ICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkKQkZEMDNCNzYgIDAwMUM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNCQjIKMTU5NzogICAgICAgICAgICAgICAgCQkJCXsNCjE1OTg6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgIT0gcGRGQUxTRSApDQpCRkQwM0I3QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAzQjdFICAgICAgNkQyOCAgIEFERElVIFYwLCBWMCwgMTYKQkZEMDNCODAgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDNCODIgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QKQkZEMDNCODQgIDBDMDAyMkJDICAgTFdDMiBTNSwgMzA3MihHUCkKQkZEMDNCODYgICAgICAwQzAwICAgTk9QCkJGRDAzQjg4ICAwMDEzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzQkIyCjE1OTk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTYwMDogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB1cyBzbw0KMTYwMTogICAgICAgICAgICAgICAgCQkJCQkJZm9yY2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCjE2MDI6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICE9IE5VTEwgKQ0KQkZEMDNCOEMgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwM0I5MCAgMDAwRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0JCMgoxNjAzOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxNjA0OiAgICAgICAgICAgICAgICAJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQpCRkQwM0I5NCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAzQjk4ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAzQjlBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQpCRkQwM0I5QyAgICAgIENDMEEgICBCIDB4QkZEMDNCQjIKQkZEMDNCOUUgICAgICAwQzAwICAgTk9QCjE2MDU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE2MDY6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjE2MDc6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE2MDg6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNjA5OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxNjEwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE2MTE6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTYxMjogICAgICAgICAgICAgICAgCQkJCQl7DQoxNjEzOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNjE0OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE2MTU6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNjE2OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTYxNzogICAgICAgICAgICAgICAgCQkJCXsNCjE2MTg6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTYxOTogICAgICAgICAgICAgICAgCQkJCX0NCjE2MjA6ICAgICAgICAgICAgICAgIAkJCX0NCjE2MjE6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjE2MjI6ICAgICAgICAgICAgICAgIAkJCXsNCjE2MjM6ICAgICAgICAgICAgICAgIAkJCQkvKiBJbmNyZW1lbnQgdGhlIGxvY2sgY291bnQgc28gdGhlIHRhc2sgdGhhdCB1bmxvY2tzIHRoZSBxdWV1ZQ0KMTYyNDogICAgICAgICAgICAgICAgCQkJCWtub3dzIHRoYXQgZGF0YSB3YXMgcmVtb3ZlZCB3aGlsZSBpdCB3YXMgbG9ja2VkLiAqLw0KMTYyNTogICAgICAgICAgICAgICAgCQkJCSsrKCBweFF1ZXVlLT54UnhMb2NrICk7DQpCRkQwM0JBMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAzQkE0ICAwMDQ0RkM0MiAgIExXIFYwLCA2OChWMCkKQkZEMDNCQTggICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxCkJGRDAzQkFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDNCQUUgIDAwNDRGODYyICAgU1cgVjEsIDY4KFYwKQoxNjI2OiAgICAgICAgICAgICAgICAJCQl9DQoxNjI3OiAgICAgICAgICAgICAgICANCjE2Mjg6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwM0JCMiAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwM0JCNCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDAzQkI4ICAgICAgQ0MwMyAgIEIgMHhCRkQwM0JDMApCRkQwM0JCQSAgICAgIDBDMDAgICBOT1AKMTYyOTogICAgICAgICAgICAgICAgCQl9DQoxNjMwOiAgICAgICAgICAgICAgICAJCWVsc2UNCjE2MzE6ICAgICAgICAgICAgICAgIAkJew0KMTYzMjogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDAzQkJDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQoxNjMzOiAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1JFQ0VJVkVfRlJPTV9JU1JfRkFJTEVEKCBweFF1ZXVlICk7DQoxNjM0OiAgICAgICAgICAgICAgICAJCX0NCjE2MzU6ICAgICAgICAgICAgICAgIAl9DQoxNjM2OiAgICAgICAgICAgICAgICAJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICk7DQpCRkQwM0JDMCAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDAzQkM0ICA0RDVFNzdFOCAgIEpBTFMgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSCkJGRDAzQkM2ICAgICAgNEQ1RSAgIEFERElVIFQyLCBUMiwgLTEKQkZEMDNCQzggICAgICAwQzAwICAgTk9QCjE2Mzc6ICAgICAgICAgICAgICAgIA0KMTYzODogICAgICAgICAgICAgICAgCXJldHVybiB4UmV0dXJuOw0KQkZEMDNCQ0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQoxNjM5OiAgICAgICAgICAgICAgICB9DQpCRkQwM0JDRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwM0JEMCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApCkJGRDAzQkQyICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkKQkZEMDNCRDQgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MApCRkQwM0JENiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDAzQkQ4ICAgICAgMEMwMCAgIE5PUAoxNjQwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2NDE6ICAgICAgICAgICAgICAgIA0KMTY0MjogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UXVldWVQZWVrRnJvbUlTUiggUXVldWVIYW5kbGVfdCB4UXVldWUsICB2b2lkICogY29uc3QgcHZCdWZmZXIgKQ0KMTY0MzogICAgICAgICAgICAgICAgew0KQkZEMDQ4MjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDQ4MjYgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwNDgyOCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDA0ODJBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA0ODJDICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKQkZEMDQ4MzAgIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQoxNjQ0OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoxNjQ1OiAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KMTY0NjogICAgICAgICAgICAgICAgaW50OF90ICpwY09yaWdpbmFsUmVhZFBvc2l0aW9uOw0KMTY0NzogICAgICAgICAgICAgICAgUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCkJGRDA0ODM0ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDQ4MzggIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoxNjQ4OiAgICAgICAgICAgICAgICANCjE2NDk6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCkJGRDA0ODNDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQ4NDAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ4NTYKQkZEMDQ4NDQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDQ4NDYgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNDg0OCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwNDg0QSAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDA0ODRDICAwNjcxMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjQ5CkJGRDA0ODRFICAgICAgMDY3MSAgIFNVQlUgQTAsIFMwLCBBMwpCRkQwNDg1MCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDQ4NTIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDQ4NTQgICAgICAwQzAwICAgTk9QCjE2NTA6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICEoICggcHZCdWZmZXIgPT0gTlVMTCApICYmICggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAoIFVCYXNlVHlwZV90ICkgMFUgKSApICk7DQpCRkQwNDg1NiAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDA0ODVBICAwMDA2NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0ODZBCkJGRDA0ODVFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQ4NjIgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQpCRkQwNDg2NiAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDg3MApCRkQwNDg2QSAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwNDg2QyAgICAgIENDMDIgICBCIDB4QkZEMDQ4NzIKQkZEMDQ4NkUgICAgICAwQzAwICAgTk9QCkJGRDA0ODcwICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8KQkZEMDQ4NzIgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ4ODgKQkZEMDQ4NzYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDQ4NzggIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNDg3QSAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwNDg3QyAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDA0ODdFICAwNjcyMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjUwCkJGRDA0ODgwICAgICAgMDY3MiAgIEFERFUgQTAsIFMxLCBBMwpCRkQwNDg4MiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDQ4ODQgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDQ4ODYgICAgICAwQzAwICAgTk9QCjE2NTE6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gMCApOyAvKiBDYW4ndCBwZWVrIGEgc2VtYXBob3JlLiAqLw0KQkZEMDQ4ODggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDg4QyAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDA0ODkwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0OEE2CkJGRDA0ODk0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0ODk2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQ4OTggIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDQ4OUEgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwNDg5QyAgMDY3MzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTY1MQpCRkQwNDg5RSAgICAgIDA2NzMgICBTVUJVIEEwLCBTMSwgQTMKQkZEMDQ4QTAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA0OEEyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA0OEE0ICAgICAgMEMwMCAgIE5PUAoxNjUyOiAgICAgICAgICAgICAgICANCjE2NTM6ICAgICAgICAgICAgICAgIAkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGEgbWF4aW11bQ0KMTY1NDogICAgICAgICAgICAgICAgCXN5c3RlbSBjYWxsIChvciBtYXhpbXVtIEFQSSBjYWxsKSBpbnRlcnJ1cHQgcHJpb3JpdHkuICBJbnRlcnJ1cHRzIHRoYXQgYXJlDQoxNjU1OiAgICAgICAgICAgICAgICAJYWJvdmUgdGhlIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkgYXJlIGtlcHQgcGVybWFuZW50bHkgZW5hYmxlZCwgZXZlbg0KMTY1NjogICAgICAgICAgICAgICAgCXdoZW4gdGhlIFJUT1Mga2VybmVsIGlzIGluIGEgY3JpdGljYWwgc2VjdGlvbiwgYnV0IGNhbm5vdCBtYWtlIGFueSBjYWxscyB0bw0KMTY1NzogICAgICAgICAgICAgICAgCUZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmgNCjE2NTg6ICAgICAgICAgICAgICAgIAl0aGVuIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSB3aWxsIHJlc3VsdCBpbiBhbiBhc3NlcnRpb24NCjE2NTk6ICAgICAgICAgICAgICAgIAlmYWlsdXJlIGlmIGEgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCB0aGF0IGhhcyBiZWVuDQoxNjYwOiAgICAgICAgICAgICAgICAJYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5Lg0KMTY2MTogICAgICAgICAgICAgICAgCU9ubHkgRnJlZVJUT1MgZnVuY3Rpb25zIHRoYXQgZW5kIGluIEZyb21JU1IgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdHMNCjE2NjI6ICAgICAgICAgICAgICAgIAl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpIGJlbG93IHRoZSBtYXhpbXVtDQoxNjYzOiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwJaW50ZXJydXB0IHByaW9yaXR5LiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUgaW50ZXJydXB0DQoxNjY0OiAgICAgICAgICAgICAgICAJc2FmZSBBUEkgdG8gZW5zdXJlIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcyBzaW1wbGUgYXMgcG9zc2libGUuDQoxNjY1OiAgICAgICAgICAgICAgICAJTW9yZSBpbmZvcm1hdGlvbiAoYWxiZWl0IENvcnRleC1NIHNwZWNpZmljKSBpcyBwcm92aWRlZCBvbiB0aGUgZm9sbG93aW5nDQoxNjY2OiAgICAgICAgICAgICAgICAJbGluazogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCAqLw0KMTY2NzogICAgICAgICAgICAgICAgCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjE2Njg6ICAgICAgICAgICAgICAgIA0KMTY2OTogICAgICAgICAgICAgICAgCXV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQpCRkQwNDhBNiAgNDc1RTc3RTggICBKQUxTIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSCkJGRDA0OEFBICAgICAgMEMwMCAgIE5PUApCRkQwNDhBQyAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjE2NzA6ICAgICAgICAgICAgICAgIAl7DQoxNjcxOiAgICAgICAgICAgICAgICAJCS8qIENhbm5vdCBibG9jayBpbiBhbiBJU1IsIHNvIGNoZWNrIHRoZXJlIGlzIGRhdGEgYXZhaWxhYmxlLiAqLw0KMTY3MjogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPiAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwNDhCMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0OEI0ICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkKQkZEMDQ4QjYgIDAwMTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDQ4RTYKMTY3MzogICAgICAgICAgICAgICAgCQl7DQoxNjc0OiAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1BFRUtfRlJPTV9JU1IoIHB4UXVldWUgKTsNCjE2NzU6ICAgICAgICAgICAgICAgIA0KMTY3NjogICAgICAgICAgICAgICAgCQkJLyogUmVtZW1iZXIgdGhlIHJlYWQgcG9zaXRpb24gc28gaXQgY2FuIGJlIHJlc2V0IGFzIG5vdGhpbmcgaXMNCjE2Nzc6ICAgICAgICAgICAgICAgIAkJCWFjdHVhbGx5IGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuICovDQoxNjc4OiAgICAgICAgICAgICAgICAJCQlwY09yaWdpbmFsUmVhZFBvc2l0aW9uID0gcHhRdWV1ZS0+dS5wY1JlYWRGcm9tOw0KQkZEMDQ4QkEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDhCRSAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA0OEMwICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkKMTY3OTogICAgICAgICAgICAgICAgCQkJcHJ2Q29weURhdGFGcm9tUXVldWUoIHB4UXVldWUsIHB2QnVmZmVyICk7DQpCRkQwNDhDNCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpCkJGRDA0OEM4ICAwMDJDRkNCRSAgIExXIEExLCA0NChTOCkKQkZEMDQ4Q0MgIDM2N0E3N0U4ICAgSkFMUyBwcnZDb3B5RGF0YUZyb21RdWV1ZQpCRkQwNDhDRSAgMEMwMDM2N0EgICBMSFUgUzMsIDMwNzIoSzApCkJGRDA0OEQwICAgICAgMEMwMCAgIE5PUAoxNjgwOiAgICAgICAgICAgICAgICAJCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gPSBwY09yaWdpbmFsUmVhZFBvc2l0aW9uOw0KQkZEMDQ4RDIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDhENiAgMDAxQ0ZDN0UgICBMVyBWMSwgMjgoUzgpCkJGRDA0OERBICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkKMTY4MTogICAgICAgICAgICAgICAgDQoxNjgyOiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDQ4REMgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDQ4REUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwNDhFMiAgICAgIENDMDMgICBCIDB4QkZEMDQ4RUEKQkZEMDQ4RTQgICAgICAwQzAwICAgTk9QCjE2ODM6ICAgICAgICAgICAgICAgIAkJfQ0KMTY4NDogICAgICAgICAgICAgICAgCQllbHNlDQoxNjg1OiAgICAgICAgICAgICAgICAJCXsNCjE2ODY6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBSUw7DQpCRkQwNDhFNiAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMTY4NzogICAgICAgICAgICAgICAgCQkJdHJhY2VRVUVVRV9QRUVLX0ZST01fSVNSX0ZBSUxFRCggcHhRdWV1ZSApOw0KMTY4ODogICAgICAgICAgICAgICAgCQl9DQoxNjg5OiAgICAgICAgICAgICAgICAJfQ0KMTY5MDogICAgICAgICAgICAgICAgCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDQ4RUEgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQpCRkQwNDhFRSAgNEQ1RTc3RTggICBKQUxTIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUgpCRkQwNDhGMCAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xCkJGRDA0OEYyICAgICAgMEMwMCAgIE5PUAoxNjkxOiAgICAgICAgICAgICAgICANCjE2OTI6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA0OEY0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMTY5MzogICAgICAgICAgICAgICAgfQ0KQkZEMDQ4RjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDQ4RkEgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQpCRkQwNDhGQyAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApCkJGRDA0OEZFICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDAKQkZEMDQ5MDAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNDkwMiAgICAgIDBDMDAgICBOT1AKMTY5NDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNjk1OiAgICAgICAgICAgICAgICANCjE2OTY6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4UXVldWVNZXNzYWdlc1dhaXRpbmcoIGNvbnN0IFF1ZXVlSGFuZGxlX3QgeFF1ZXVlICkNCjE2OTc6ICAgICAgICAgICAgICAgIHsNCkJGRDA4QjJDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4QjJFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDhCMzAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOEIzMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOEIzNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjE2OTg6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4UmV0dXJuOw0KMTY5OTogICAgICAgICAgICAgICAgDQoxNzAwOiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4UXVldWUgKTsNCkJGRDA4QjM4ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDhCM0MgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDhCNTIKQkZEMDhCNDAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDhCNDIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwOEI0NCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwOEI0NiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDA4QjQ4ICAwNkE0MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNzAwCkJGRDA4QjRBICAgICAgMDZBNCAgIEFERFUgQTEsIFYwLCBWMApCRkQwOEI0QyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDhCNEUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDhCNTAgICAgICAwQzAwICAgTk9QCjE3MDE6ICAgICAgICAgICAgICAgIA0KMTcwMjogICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDhCNTIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDhCNTQgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA4QjU2ICAgICAgMEMwMCAgIE5PUAoxNzAzOiAgICAgICAgICAgICAgICAJew0KMTcwNDogICAgICAgICAgICAgICAgCQl1eFJldHVybiA9ICggKCBRdWV1ZV90ICogKSB4UXVldWUgKS0+dXhNZXNzYWdlc1dhaXRpbmc7DQpCRkQwOEI1OCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA4QjVDICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkKQkZEMDhCNUUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxNzA1OiAgICAgICAgICAgICAgICAJfQ0KMTcwNjogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwOEI2MiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA4QjY0ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDBBMzY4CkJGRDA4QjY2ICAgICAgMEMwMCAgIE5PUAoxNzA3OiAgICAgICAgICAgICAgICANCjE3MDg6ICAgICAgICAgICAgICAgIAlyZXR1cm4gdXhSZXR1cm47DQpCRkQwOEI2OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjE3MDk6ICAgICAgICAgICAgICAgIH0gLypsaW50ICFlODE4IFBvaW50ZXIgY2Fubm90IGJlIGRlY2xhcmVkIGNvbnN0IGFzIHhRdWV1ZSBpcyBhIHR5cGVkZWYgbm90IHBvaW50ZXIuICovDQpCRkQwOEI2QyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOEI2RSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4QjcwICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDhCNzIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOEI3NCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4Qjc2ICAgICAgMEMwMCAgIE5PUAoxNzEwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE3MTE6ICAgICAgICAgICAgICAgIA0KMTcxMjogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhRdWV1ZVNwYWNlc0F2YWlsYWJsZSggY29uc3QgUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMTcxMzogICAgICAgICAgICAgICAgew0KQkZEMDgyRDQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDgyRDYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwODJEOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4MkRBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4MkRDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMTcxNDogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhSZXR1cm47DQoxNzE1OiAgICAgICAgICAgICAgICBRdWV1ZV90ICpweFF1ZXVlOw0KMTcxNjogICAgICAgICAgICAgICAgDQoxNzE3OiAgICAgICAgICAgICAgICAJcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDgyRTAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwODJFNCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE3MTg6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCkJGRDA4MkU4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDgyRUMgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDgzMDIKQkZEMDgyRjAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDgyRjIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwODJGNCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwODJGNiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDA4MkY4ICAwNkI2MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNzE4CkJGRDA4MkZBICAgICAgMDZCNiAgIEFERFUgQTEsIFYxLCBWMQpCRkQwODJGQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDgyRkUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDgzMDAgICAgICAwQzAwICAgTk9QCjE3MTk6ICAgICAgICAgICAgICAgIA0KMTcyMDogICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDgzMDIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDgzMDQgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA4MzA2ICAgICAgMEMwMCAgIE5PUAoxNzIxOiAgICAgICAgICAgICAgICAJew0KMTcyMjogICAgICAgICAgICAgICAgCQl1eFJldHVybiA9IHB4UXVldWUtPnV4TGVuZ3RoIC0gcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmc7DQpCRkQwODMwOCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4MzBDICAgICAgNjlBRiAgIExXIFYxLCA2MChWMCkKQkZEMDgzMEUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODMxMiAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApCkJGRDA4MzE0ICAgICAgMDUyNyAgIFNVQlUgVjAsIFYxLCBWMApCRkQwODMxNiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjE3MjM6ICAgICAgICAgICAgICAgIAl9DQoxNzI0OiAgICAgICAgICAgICAgICAJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA4MzFBICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDgzMUMgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDlCMjAKQkZEMDgzMUUgICAgICAwQzAwICAgTk9QCjE3MjU6ICAgICAgICAgICAgICAgIA0KMTcyNjogICAgICAgICAgICAgICAgCXJldHVybiB1eFJldHVybjsNCkJGRDA4MzIwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKMTcyNzogICAgICAgICAgICAgICAgfSAvKmxpbnQgIWU4MTggUG9pbnRlciBjYW5ub3QgYmUgZGVjbGFyZWQgY29uc3QgYXMgeFF1ZXVlIGlzIGEgdHlwZWRlZiBub3QgcG9pbnRlci4gKi8NCkJGRDA4MzI0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4MzI2ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDgzMjggICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwODMyQSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4MzJDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDgzMkUgICAgICAwQzAwICAgTk9QCjE3Mjg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTcyOTogICAgICAgICAgICAgICAgDQoxNzMwOiAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFF1ZXVlTWVzc2FnZXNXYWl0aW5nRnJvbUlTUiggY29uc3QgUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMTczMTogICAgICAgICAgICAgICAgew0KQkZEMDkzNjAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDkzNjIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOTM2NCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA5MzY2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5MzY4ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMTczMjogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhSZXR1cm47DQoxNzMzOiAgICAgICAgICAgICAgICANCjE3MzQ6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHhRdWV1ZSApOw0KQkZEMDkzNkMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwOTM3MCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOTM4NgpCRkQwOTM3NCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwOTM3NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA5Mzc4ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDA5MzdBICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDkzN0MgIDA2QzYzMEEwICAgQURESVUgQTEsIFpFUk8sIDE3MzQKQkZEMDkzN0UgICAgICAwNkM2ICAgQUREVSBBMSwgVjEsIEEwCkJGRDA5MzgwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwOTM4MiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwOTM4NCAgICAgIDBDMDAgICBOT1AKMTczNTogICAgICAgICAgICAgICAgDQoxNzM2OiAgICAgICAgICAgICAgICAJdXhSZXR1cm4gPSAoICggUXVldWVfdCAqICkgeFF1ZXVlICktPnV4TWVzc2FnZXNXYWl0aW5nOw0KQkZEMDkzODYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwOTM4QSAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApCkJGRDA5MzhDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTczNzogICAgICAgICAgICAgICAgDQoxNzM4OiAgICAgICAgICAgICAgICAJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDkzOTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQoxNzM5OiAgICAgICAgICAgICAgICB9IC8qbGludCAhZTgxOCBQb2ludGVyIGNhbm5vdCBiZSBkZWNsYXJlZCBjb25zdCBhcyB4UXVldWUgaXMgYSB0eXBlZGVmIG5vdCBwb2ludGVyLiAqLw0KQkZEMDkzOTQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDkzOTYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTM5OCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5MzlBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDkzOUMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTM5RSAgICAgIDBDMDAgICBOT1AKMTc0MDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzQxOiAgICAgICAgICAgICAgICANCjE3NDI6ICAgICAgICAgICAgICAgIHZvaWQgdlF1ZXVlRGVsZXRlKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSApDQoxNzQzOiAgICAgICAgICAgICAgICB7DQpCRkQwOTE4OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOTE4QSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA5MThDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDkxOEUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDkxOTAgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQoxNzQ0OiAgICAgICAgICAgICAgICBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDkxOTQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwOTE5OCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE3NDU6ICAgICAgICAgICAgICAgIA0KMTc0NjogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDkxOUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOTFBMCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOTFCNgpCRkQwOTFBNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwOTFBNiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA5MUE4ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4CkJGRDA5MUFBICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkKQkZEMDkxQUMgIDA2RDIzMEEwICAgQURESVUgQTEsIFpFUk8sIDE3NDYKQkZEMDkxQUUgICAgICAwNkQyICAgQUREVSBBMSwgUzEsIEExCkJGRDA5MUIwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwOTFCMiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwOTFCNCAgICAgIDBDMDAgICBOT1AKMTc0NzogICAgICAgICAgICAgICAgDQoxNzQ4OiAgICAgICAgICAgICAgICAJdHJhY2VRVUVVRV9ERUxFVEUoIHB4UXVldWUgKTsNCjE3NDk6ICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFID4gMCApDQoxNzUwOiAgICAgICAgICAgICAgICAJew0KMTc1MTogICAgICAgICAgICAgICAgCQl2UXVldWVVbnJlZ2lzdGVyUXVldWUoIHB4UXVldWUgKTsNCjE3NTI6ICAgICAgICAgICAgICAgIAl9DQoxNzUzOiAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNzU0OiAgICAgICAgICAgICAgICAJdlBvcnRGcmVlKCBweFF1ZXVlICk7DQpCRkQwOTFCNiAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpCkJGRDA5MUJBICAyRkVBNzdFOCAgIEpBTFMgdlBvcnRGcmVlCkJGRDA5MUJDICAgICAgMkZFQSAgIEFOREkgQTMsIEEyLCAweDIwCkJGRDA5MUJFICAgICAgMEMwMCAgIE5PUAoxNzU1OiAgICAgICAgICAgICAgICB9DQpCRkQwOTFDMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTFDMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA5MUM0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDkxQzYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOTFDOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5MUNBICAgICAgMEMwMCAgIE5PUAoxNzU2OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE3NTc6ICAgICAgICAgICAgICAgIA0KMTc1ODogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMTc1OTogICAgICAgICAgICAgICAgDQoxNzYwOiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhRdWV1ZUdldFF1ZXVlTnVtYmVyKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSApDQoxNzYxOiAgICAgICAgICAgICAgICAJew0KMTc2MjogICAgICAgICAgICAgICAgCQlyZXR1cm4gKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZSApLT51eFF1ZXVlTnVtYmVyOw0KMTc2MzogICAgICAgICAgICAgICAgCX0NCjE3NjQ6ICAgICAgICAgICAgICAgIA0KMTc2NTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSAqLw0KMTc2NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzY3OiAgICAgICAgICAgICAgICANCjE3Njg6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjE3Njk6ICAgICAgICAgICAgICAgIA0KMTc3MDogICAgICAgICAgICAgICAgCXZvaWQgdlF1ZXVlU2V0UXVldWVOdW1iZXIoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBVQmFzZVR5cGVfdCB1eFF1ZXVlTnVtYmVyICkNCjE3NzE6ICAgICAgICAgICAgICAgIAl7DQoxNzcyOiAgICAgICAgICAgICAgICAJCSggKCBRdWV1ZV90ICogKSB4UXVldWUgKS0+dXhRdWV1ZU51bWJlciA9IHV4UXVldWVOdW1iZXI7DQoxNzczOiAgICAgICAgICAgICAgICAJfQ0KMTc3NDogICAgICAgICAgICAgICAgDQoxNzc1OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZICovDQoxNzc2OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE3Nzc6ICAgICAgICAgICAgICAgIA0KMTc3ODogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMTc3OTogICAgICAgICAgICAgICAgDQoxNzgwOiAgICAgICAgICAgICAgICAJdWludDhfdCB1Y1F1ZXVlR2V0UXVldWVUeXBlKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSApDQoxNzgxOiAgICAgICAgICAgICAgICAJew0KMTc4MjogICAgICAgICAgICAgICAgCQlyZXR1cm4gKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZSApLT51Y1F1ZXVlVHlwZTsNCjE3ODM6ICAgICAgICAgICAgICAgIAl9DQoxNzg0OiAgICAgICAgICAgICAgICANCjE3ODU6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjE3ODY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTc4NzogICAgICAgICAgICAgICAgDQoxNzg4OiAgICAgICAgICAgICAgICBzdGF0aWMgQmFzZVR5cGVfdCBwcnZDb3B5RGF0YVRvUXVldWUoIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlLCBjb25zdCB2b2lkICpwdkl0ZW1Ub1F1ZXVlLCBjb25zdCBCYXNlVHlwZV90IHhQb3NpdGlvbiApDQoxNzg5OiAgICAgICAgICAgICAgICB7DQpCRkQwMjlDQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwMjlDRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDAyOUQwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDI5RDIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDI5RDQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwMjlEOCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpCkJGRDAyOURDICAwMDI4RjhERSAgIFNXIEEyLCA0MChTOCkKMTc5MDogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDAyOUUwICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQoxNzkxOiAgICAgICAgICAgICAgICANCjE3OTI6ICAgICAgICAgICAgICAgIAlpZiggcHhRdWV1ZS0+dXhJdGVtU2l6ZSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMjlFNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyOUU4ICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkKQkZEMDI5RUMgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJBMTYKMTc5MzogICAgICAgICAgICAgICAgCXsNCjE3OTQ6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxNzk1OiAgICAgICAgICAgICAgICAJCXsNCjE3OTY6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCkJGRDAyOUYwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDI5RjQgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAyOUY2ICAwMDgxNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyQUZDCjE3OTc6ICAgICAgICAgICAgICAgIAkJCXsNCjE3OTg6ICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgbXV0ZXggaXMgbm8gbG9uZ2VyIGJlaW5nIGhlbGQuICovDQoxNzk5OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHhUYXNrUHJpb3JpdHlEaXNpbmhlcml0KCAoIHZvaWQgKiApIHB4UXVldWUtPnB4TXV0ZXhIb2xkZXIgKTsNCkJGRDAyOUZBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDI5RkUgICAgICA2OTIxICAgTFcgVjAsIDQoVjApCkJGRDAyQTAwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDAyQTAyICAxNzgyNzdFOCAgIEpBTFMgeFRhc2tQcmlvcml0eURpc2luaGVyaXQKQkZEMDJBMDQgIDBDMDAxNzgyICAgTEJVIEdQLCAzMDcyKFYwKQpCRkQwMkEwNiAgICAgIDBDMDAgICBOT1AKQkZEMDJBMDggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxODAwOiAgICAgICAgICAgICAgICAJCQkJcHhRdWV1ZS0+cHhNdXRleEhvbGRlciA9IE5VTEw7DQpCRkQwMkEwQyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQTEwICAgICAgRTgyMSAgIFNXIFMwLCA0KFYwKQpCRkQwMkExMiAgICAgIENDNzQgICBCIDB4QkZEMDJBRkMKQkZEMDJBMTQgICAgICAwQzAwICAgTk9QCjE4MDE6ICAgICAgICAgICAgICAgIAkJCX0NCjE4MDI6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjE4MDM6ICAgICAgICAgICAgICAgIAkJCXsNCjE4MDQ6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxODA1OiAgICAgICAgICAgICAgICAJCQl9DQoxODA2OiAgICAgICAgICAgICAgICAJCX0NCjE4MDc6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9NVVRFWEVTICovDQoxODA4OiAgICAgICAgICAgICAgICAJfQ0KMTgwOTogICAgICAgICAgICAgICAgCWVsc2UgaWYoIHhQb3NpdGlvbiA9PSBxdWV1ZVNFTkRfVE9fQkFDSyApDQpCRkQwMkExNiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDAyQTFBICAwMDJCNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyQTc0CjE4MTA6ICAgICAgICAgICAgICAgIAl7DQoxODExOiAgICAgICAgICAgICAgICAJCSggdm9pZCApIG1lbWNweSggKCB2b2lkICogKSBweFF1ZXVlLT5wY1dyaXRlVG8sIHB2SXRlbVRvUXVldWUsICggc2l6ZV90ICkgcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOyAvKmxpbnQgIWU5NjEgIWU0MTggTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMsIHBsdXMgcHJldmlvdXMgbG9naWMgZW5zdXJlcyBhIG51bGwgcG9pbnRlciBjYW4gb25seSBiZSBwYXNzZWQgdG8gbWVtY3B5KCkgaWYgdGhlIGNvcHkgc2l6ZSBpcyAwLiAqLw0KQkZEMDJBMUUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkEyMiAgICAgIDY5QTIgICBMVyBWMSwgOChWMCkKQkZEMDJBMjQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkEyOCAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDAyQTJDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDAyQTJFICAwMDI0RkNCRSAgIExXIEExLCAzNihTOCkKQkZEMDJBMzIgICAgICAwQ0MyICAgTU9WRSBBMiwgVjAKQkZEMDJBMzQgIDFCQjQ3N0U4ICAgSkFMUyAweEJGRDAzNzY4CkJGRDAyQTM2ICAwQzAwMUJCNCAgIFNCIFNQLCAzMDcyKFM0KQpCRkQwMkEzOCAgICAgIDBDMDAgICBOT1AKMTgxMjogICAgICAgICAgICAgICAgCQlweFF1ZXVlLT5wY1dyaXRlVG8gKz0gcHhRdWV1ZS0+dXhJdGVtU2l6ZTsNCkJGRDAyQTNBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDJBM0UgICAgICA2OUEyICAgTFcgVjEsIDgoVjApCkJGRDAyQTQwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDJBNDQgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQpCRkQwMkE0OCAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDJBNEEgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkE0RSAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKMTgxMzogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+cGNXcml0ZVRvID49IHB4UXVldWUtPnBjVGFpbCApIC8qbGludCAhZTk0NiBNSVNSQSBleGNlcHRpb24ganVzdGlmaWVkIGFzIGNvbXBhcmlzb24gb2YgcG9pbnRlcnMgaXMgdGhlIGNsZWFuZXN0IHNvbHV0aW9uLiAqLw0KQkZEMDJBNTAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkE1NCAgICAgIDY5QTIgICBMVyBWMSwgOChWMCkKQkZEMDJBNTYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkE1QSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDJBNUMgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDAyQTVFICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0NgpCRkQwMkE2MCAgMDA0QzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkFGQwoxODE0OiAgICAgICAgICAgICAgICAJCXsNCjE4MTU6ICAgICAgICAgICAgICAgIAkJCXB4UXVldWUtPnBjV3JpdGVUbyA9IHB4UXVldWUtPnBjSGVhZDsNCkJGRDAyQTY0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDJBNjggICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAyQTZBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDJBNkUgICAgICBFOUEyICAgU1cgVjEsIDgoVjApCkJGRDAyQTcwICAgICAgQ0M0NSAgIEIgMHhCRkQwMkFGQwpCRkQwMkE3MiAgICAgIDBDMDAgICBOT1AKMTgxNjogICAgICAgICAgICAgICAgCQl9DQoxODE3OiAgICAgICAgICAgICAgICAJCWVsc2UNCjE4MTg6ICAgICAgICAgICAgICAgIAkJew0KMTgxOTogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTgyMDogICAgICAgICAgICAgICAgCQl9DQoxODIxOiAgICAgICAgICAgICAgICAJfQ0KMTgyMjogICAgICAgICAgICAgICAgCWVsc2UNCjE4MjM6ICAgICAgICAgICAgICAgIAl7DQoxODI0OiAgICAgICAgICAgICAgICAJCSggdm9pZCApIG1lbWNweSggKCB2b2lkICogKSBweFF1ZXVlLT51LnBjUmVhZEZyb20sIHB2SXRlbVRvUXVldWUsICggc2l6ZV90ICkgcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQpCRkQwMkE3NCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQTc4ICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkKQkZEMDJBN0EgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkE3RSAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDAyQTgyICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDAyQTg0ICAwMDI0RkNCRSAgIExXIEExLCAzNihTOCkKQkZEMDJBODggICAgICAwQ0MyICAgTU9WRSBBMiwgVjAKQkZEMDJBOEEgIDFCQjQ3N0U4ICAgSkFMUyAweEJGRDAzNzY4CkJGRDAyQThDICAwQzAwMUJCNCAgIFNCIFNQLCAzMDcyKFM0KQpCRkQwMkE4RSAgICAgIDBDMDAgICBOT1AKMTgyNTogICAgICAgICAgICAgICAgCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gLT0gcHhRdWV1ZS0+dXhJdGVtU2l6ZTsNCkJGRDAyQTkwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDJBOTQgICAgICA2OUEzICAgTFcgVjEsIDEyKFYwKQpCRkQwMkE5NiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQTlBICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkKQkZEMDJBOUMgIDAwNDAwMDQwICAgU1JMIFYwLCBaRVJPLCAwCkJGRDAyQTlFICAxMUQwMDA0MCAgIFNVQlUgVjAsIFpFUk8sIFYwCkJGRDAyQUEwICAwNUE2MTFEMCAgIEFEREkgVDYsIFMwLCAxNDQ2CkJGRDAyQUEyICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwMkFBNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQUE4ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkKMTgyNjogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+dS5wY1JlYWRGcm9tIDwgcHhRdWV1ZS0+cGNIZWFkICkgLypsaW50ICFlOTQ2IE1JU1JBIGV4Y2VwdGlvbiBqdXN0aWZpZWQgYXMgY29tcGFyaXNvbiBvZiBwb2ludGVycyBpcyB0aGUgY2xlYW5lc3Qgc29sdXRpb24uICovDQpCRkQwMkFBQSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQUFFICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkKQkZEMDJBQjAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkFCNCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDJBQjYgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDAyQUI4ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwMkFCQSAgMDAwRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkFEOAoxODI3OiAgICAgICAgICAgICAgICAJCXsNCjE4Mjg6ICAgICAgICAgICAgICAgIAkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSA9ICggcHhRdWV1ZS0+cGNUYWlsIC0gcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KQkZEMDJBQkUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkFDMiAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkKQkZEMDJBQzQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkFDOCAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDAyQUNBICAwMDQwMDA0MCAgIFNSTCBWMCwgWkVSTywgMApCRkQwMkFDQyAgMTFEMDAwNDAgICBTVUJVIFYwLCBaRVJPLCBWMApCRkQwMkFDRSAgMDVBNjExRDAgICBBRERJIFQ2LCBTMCwgMTQ0NgpCRkQwMkFEMCAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjAKQkZEMDJBRDIgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkFENiAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApCjE4Mjk6ICAgICAgICAgICAgICAgIAkJfQ0KMTgzMDogICAgICAgICAgICAgICAgCQllbHNlDQoxODMxOiAgICAgICAgICAgICAgICAJCXsNCjE4MzI6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE4MzM6ICAgICAgICAgICAgICAgIAkJfQ0KMTgzNDogICAgICAgICAgICAgICAgDQoxODM1OiAgICAgICAgICAgICAgICAJCWlmKCB4UG9zaXRpb24gPT0gcXVldWVPVkVSV1JJVEUgKQ0KQkZEMDJBRDggIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQpCRkQwMkFEQyAgICAgIEVEMDIgICBMSSBWMCwgMgpCRkQwMkFERSAgMDAwREI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyQUZDCkJGRDAyQUUwICAwQzAwMDAwRCAgIFNMTCBaRVJPLCBUNSwgMQpCRkQwMkFFMiAgICAgIDBDMDAgICBOT1AKMTgzNjogICAgICAgICAgICAgICAgCQl7DQoxODM3OiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPiAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMkFFNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQUU4ICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkKQkZEMDJBRUEgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDJBRkMKMTgzODogICAgICAgICAgICAgICAgCQkJew0KMTgzOTogICAgICAgICAgICAgICAgCQkJCS8qIEFuIGl0ZW0gaXMgbm90IGJlaW5nIGFkZGVkIGJ1dCBvdmVyd3JpdHRlbiwgc28gc3VidHJhY3QNCjE4NDA6ICAgICAgICAgICAgICAgIAkJCQlvbmUgZnJvbSB0aGUgcmVjb3JkZWQgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZSBzbyB3aGVuDQoxODQxOiAgICAgICAgICAgICAgICAJCQkJb25lIGlzIGFkZGVkIGFnYWluIGJlbG93IHRoZSBudW1iZXIgb2YgcmVjb3JkZWQgaXRlbXMgcmVtYWlucw0KMTg0MjogICAgICAgICAgICAgICAgCQkJCWNvcnJlY3QuICovDQoxODQzOiAgICAgICAgICAgICAgICAJCQkJLS0oIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICk7DQpCRkQwMkFFRSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQUYyICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkKQkZEMDJBRjQgICAgICA2REFFICAgQURESVUgVjEsIFYwLCAtMQpCRkQwMkFGNiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQUZBICAgICAgRTlBRSAgIFNXIFYxLCA1NihWMCkKMTg0NDogICAgICAgICAgICAgICAgCQkJfQ0KMTg0NTogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTg0NjogICAgICAgICAgICAgICAgCQkJew0KMTg0NzogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE4NDg6ICAgICAgICAgICAgICAgIAkJCX0NCjE4NDk6ICAgICAgICAgICAgICAgIAkJfQ0KMTg1MDogICAgICAgICAgICAgICAgCQllbHNlDQoxODUxOiAgICAgICAgICAgICAgICAJCXsNCjE4NTI6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE4NTM6ICAgICAgICAgICAgICAgIAkJfQ0KMTg1NDogICAgICAgICAgICAgICAgCX0NCjE4NTU6ICAgICAgICAgICAgICAgIA0KMTg1NjogICAgICAgICAgICAgICAgCSsrKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KQkZEMDJBRkMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMkIwMCAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApCkJGRDAyQjAyICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQpCRkQwMkIwNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyQjA4ICAgICAgRTlBRSAgIFNXIFYxLCA1NihWMCkKMTg1NzogICAgICAgICAgICAgICAgDQoxODU4OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwMkIwQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjE4NTk6ICAgICAgICAgICAgICAgIH0NCkJGRDAyQjBFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAyQjEwICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDJCMTIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwMkIxNCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDAyQjE2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDJCMTggICAgICAwQzAwICAgTk9QCjE4NjA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTg2MTogICAgICAgICAgICAgICAgDQoxODYyOiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZDb3B5RGF0YUZyb21RdWV1ZSggUXVldWVfdCAqIGNvbnN0IHB4UXVldWUsIHZvaWQgKiBjb25zdCBwdkJ1ZmZlciApDQoxODYzOiAgICAgICAgICAgICAgICB7DQpCRkQwNkNGNCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwNkNGNiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA2Q0Y4ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDZDRkEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDZDRkMgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQpCRkQwNkQwMCAgMDAxQ0Y4QkUgICBTVyBBMSwgMjgoUzgpCjE4NjQ6ICAgICAgICAgICAgICAgIAlpZiggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwNkQwNCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2RDA4ICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkKQkZEMDZEMEMgIDAwMjk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDZENjIKMTg2NTogICAgICAgICAgICAgICAgCXsNCjE4NjY6ICAgICAgICAgICAgICAgIAkJcHhRdWV1ZS0+dS5wY1JlYWRGcm9tICs9IHB4UXVldWUtPnV4SXRlbVNpemU7DQpCRkQwNkQxMCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2RDE0ICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkKQkZEMDZEMTYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNkQxQSAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDA2RDFFICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwNkQyMCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2RDI0ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkKMTg2NzogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+dS5wY1JlYWRGcm9tID49IHB4UXVldWUtPnBjVGFpbCApIC8qbGludCAhZTk0NiBNSVNSQSBleGNlcHRpb24ganVzdGlmaWVkIGFzIHVzZSBvZiB0aGUgcmVsYXRpb25hbCBvcGVyYXRvciBpcyB0aGUgY2xlYW5lc3Qgc29sdXRpb25zLiAqLw0KQkZEMDZEMjYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNkQyQSAgICAgIDY5QTMgICBMVyBWMSwgMTIoVjApCkJGRDA2RDJDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDZEMzAgICAgICA2OTIxICAgTFcgVjAsIDQoVjApCkJGRDA2RDMyICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwNkQzNCAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDZEMzYgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZENDYKMTg2ODogICAgICAgICAgICAgICAgCQl7DQoxODY5OiAgICAgICAgICAgICAgICAJCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gPSBweFF1ZXVlLT5wY0hlYWQ7DQpCRkQwNkQzQSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2RDNFICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwNkQ0MCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2RDQ0ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkKMTg3MDogICAgICAgICAgICAgICAgCQl9DQoxODcxOiAgICAgICAgICAgICAgICAJCWVsc2UNCjE4NzI6ICAgICAgICAgICAgICAgIAkJew0KMTg3MzogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTg3NDogICAgICAgICAgICAgICAgCQl9DQoxODc1OiAgICAgICAgICAgICAgICAJCSggdm9pZCApIG1lbWNweSggKCB2b2lkICogKSBwdkJ1ZmZlciwgKCB2b2lkICogKSBweFF1ZXVlLT51LnBjUmVhZEZyb20sICggc2l6ZV90ICkgcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOyAvKmxpbnQgIWU5NjEgIWU0MTggTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICBBbHNvIHByZXZpb3VzIGxvZ2ljIGVuc3VyZXMgYSBudWxsIHBvaW50ZXIgY2FuIG9ubHkgYmUgcGFzc2VkIHRvIG1lbWNweSgpIHdoZW4gdGhlIGNvdW50IGlzIDAuICovDQpCRkQwNkQ0NiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2RDRBICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkKQkZEMDZENEMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNkQ1MCAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApCkJGRDA2RDU0ICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkKQkZEMDZENTggICAgICAwQ0EzICAgTU9WRSBBMSwgVjEKQkZEMDZENUEgICAgICAwQ0MyICAgTU9WRSBBMiwgVjAKQkZEMDZENUMgIDFCQjQ3N0U4ICAgSkFMUyAweEJGRDAzNzY4CkJGRDA2RDVFICAwQzAwMUJCNCAgIFNCIFNQLCAzMDcyKFM0KQpCRkQwNkQ2MCAgICAgIDBDMDAgICBOT1AKMTg3NjogICAgICAgICAgICAgICAgCX0NCjE4Nzc6ICAgICAgICAgICAgICAgIH0NCkJGRDA2RDYyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA2RDY0ICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkKQkZEMDZENjYgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQpCRkQwNkQ2OCAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0CkJGRDA2RDZBICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDZENkMgICAgICAwQzAwICAgTk9QCjE4Nzg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTg3OTogICAgICAgICAgICAgICAgDQoxODgwOiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZVbmxvY2tRdWV1ZSggUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgKQ0KMTg4MTogICAgICAgICAgICAgICAgew0KQkZEMDNCREMgICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQKQkZEMDNCREUgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQpCRkQwM0JFMCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApCkJGRDAzQkUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAzQkU0ICAwMDE4Rjg5RSAgIFNXIEEwLCAyNChTOCkKMTg4MjogICAgICAgICAgICAgICAgCS8qIFRISVMgRlVOQ1RJT04gTVVTVCBCRSBDQUxMRUQgV0lUSCBUSEUgU0NIRURVTEVSIFNVU1BFTkRFRC4gKi8NCjE4ODM6ICAgICAgICAgICAgICAgIA0KMTg4NDogICAgICAgICAgICAgICAgCS8qIFRoZSBsb2NrIGNvdW50cyBjb250YWlucyB0aGUgbnVtYmVyIG9mIGV4dHJhIGRhdGEgaXRlbXMgcGxhY2VkIG9yDQoxODg1OiAgICAgICAgICAgICAgICAJcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSB3aGlsZSB0aGUgcXVldWUgd2FzIGxvY2tlZC4gIFdoZW4gYSBxdWV1ZSBpcw0KMTg4NjogICAgICAgICAgICAgICAgCWxvY2tlZCBpdGVtcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZSBldmVudCBsaXN0cyBjYW5ub3QgYmUNCjE4ODc6ICAgICAgICAgICAgICAgIAl1cGRhdGVkLiAqLw0KMTg4ODogICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDNCRTggIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDNCRUEgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDAzQkVDICAgICAgMEMwMCAgIE5PUAoxODg5OiAgICAgICAgICAgICAgICAJew0KMTg5MDogICAgICAgICAgICAgICAgCQkvKiBTZWUgaWYgZGF0YSB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIHdoaWxlIGl0IHdhcyBsb2NrZWQuICovDQoxODkxOiAgICAgICAgICAgICAgICAJCXdoaWxlKCBweFF1ZXVlLT54VHhMb2NrID4gcXVldWVMT0NLRURfVU5NT0RJRklFRCApDQpCRkQwM0JFRSAgICAgIENDMzIgICBCIDB4QkZEMDNDNTQKQkZEMDNCRjAgICAgICAwQzAwICAgTk9QCkJGRDAzQzU0ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDNDNTggIDAwNDhGQzQyICAgTFcgVjAsIDcyKFYwKQpCRkQwM0M1QyAgRkZDOTQwQzIgICBCR1RaIFYwLCAweEJGRDAzQkYyCkJGRDAzQzVFICAwQzAwRkZDOSAgIExXIFM4LCAzMDcyKFQxKQpCRkQwM0M2MCAgICAgIDBDMDAgICBOT1AKQkZEMDNDNjIgICAgICBDQzAyICAgQiAweEJGRDAzQzY4CkJGRDAzQzY0ICAgICAgMEMwMCAgIE5PUAoxODkyOiAgICAgICAgICAgICAgICAJCXsNCjE4OTM6ICAgICAgICAgICAgICAgIAkJCS8qIERhdGEgd2FzIHBvc3RlZCB3aGlsZSB0aGUgcXVldWUgd2FzIGxvY2tlZC4gIEFyZSBhbnkgdGFza3MNCjE4OTQ6ICAgICAgICAgICAgICAgIAkJCWJsb2NrZWQgd2FpdGluZyBmb3IgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlPyAqLw0KMTg5NTogICAgICAgICAgICAgICAgCQkJI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoxODk2OiAgICAgICAgICAgICAgICAJCQl7DQoxODk3OiAgICAgICAgICAgICAgICAJCQkJaWYoIHB4UXVldWUtPnB4UXVldWVTZXRDb250YWluZXIgIT0gTlVMTCApDQpCRkQwM0JGMiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAzQkY2ICAwMDRDRkM0MiAgIExXIFYwLCA3NihWMCkKQkZEMDNCRkEgIDAwMTA0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNDMUUKMTg5ODogICAgICAgICAgICAgICAgCQkJCXsNCjE4OTk6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyKCBweFF1ZXVlLCBxdWV1ZVNFTkRfVE9fQkFDSyApID09IHBkVFJVRSApDQpCRkQwM0JGRSAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDAzQzAyICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8KQkZEMDNDMDQgIDIxRDg3N0U4ICAgSkFMUyBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lcgpCRkQwM0MwNiAgMEMwMDIxRDggICBMV0MyIFQ2LCAzMDcyKFQ4KQpCRkQwM0MwOCAgICAgIDBDMDAgICBOT1AKQkZEMDNDMEEgICAgICAwQzYyICAgTU9WRSBWMSwgVjAKQkZEMDNDMEMgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDNDMEUgIDAwMThCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwM0M0MgpCRkQwM0MxMCAgMEMwMDAwMTggICBTTEwgWkVSTywgVDgsIDEKQkZEMDNDMTIgICAgICAwQzAwICAgTk9QCjE5MDA6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTkwMTogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHF1ZXVlIGlzIGEgbWVtYmVyIG9mIGEgcXVldWUgc2V0LCBhbmQgcG9zdGluZyB0bw0KMTkwMjogICAgICAgICAgICAgICAgCQkJCQkJdGhlIHF1ZXVlIHNldCBjYXVzZWQgYSBoaWdoZXIgcHJpb3JpdHkgdGFzayB0byB1bmJsb2NrLg0KMTkwMzogICAgICAgICAgICAgICAgCQkJCQkJQSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZC4gKi8NCjE5MDQ6ICAgICAgICAgICAgICAgIAkJCQkJCXZUYXNrTWlzc2VkWWllbGQoKTsNCkJGRDAzQzE0ICA0RjJBNzdFOCAgIEpBTFMgdlRhc2tNaXNzZWRZaWVsZApCRkQwM0MxNiAgICAgIDRGMkEgICBBRERJVSBUOSwgVDksIDUKQkZEMDNDMTggICAgICAwQzAwICAgTk9QCkJGRDAzQzFBICAgICAgQ0MxMyAgIEIgMHhCRkQwM0M0MgpCRkQwM0MxQyAgICAgIDBDMDAgICBOT1AKMTkwNTogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTA2OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE5MDc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTkwODogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTkwOTogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTEwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTkxMTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjE5MTI6ICAgICAgICAgICAgICAgIAkJCQl7DQoxOTEzOiAgICAgICAgICAgICAgICAJCQkJCS8qIFRhc2tzIHRoYXQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgbGlzdCB3aWxsIGdldCBhZGRlZCB0bw0KMTkxNDogICAgICAgICAgICAgICAgCQkJCQl0aGUgcGVuZGluZyByZWFkeSBsaXN0IGFzIHRoZSBzY2hlZHVsZXIgaXMgc3RpbGwgc3VzcGVuZGVkLiAqLw0KMTkxNTogICAgICAgICAgICAgICAgCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KQkZEMDNDMUUgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0MyMiAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApCkJGRDAzQzI0ICAwMDFGNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzQzY2CjE5MTY6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTkxNzogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQpCRkQwM0MyOCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAzQzJDICAwMDI0MzA0MiAgIEFERElVIFYwLCBWMCwgMzYKQkZEMDNDMzAgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDNDMzIgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QKQkZEMDNDMzQgIDBDMDAyMkJDICAgTFdDMiBTNSwgMzA3MihHUCkKQkZEMDNDMzYgICAgICAwQzAwICAgTk9QCkJGRDAzQzM4ICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzQzQyCjE5MTg6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE5MTk6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSBzbyByZWNvcmQgdGhhdCBhDQoxOTIwOiAgICAgICAgICAgICAgICAJCQkJCQkJY29udGV4dAlzd2l0Y2ggaXMgcmVxdWlyZWQuICovDQoxOTIxOiAgICAgICAgICAgICAgICAJCQkJCQkJdlRhc2tNaXNzZWRZaWVsZCgpOw0KQkZEMDNDM0MgIDRGMkE3N0U4ICAgSkFMUyB2VGFza01pc3NlZFlpZWxkCkJGRDAzQzNFICAgICAgNEYyQSAgIEFERElVIFQ5LCBUOSwgNQpCRkQwM0M0MCAgICAgIDBDMDAgICBOT1AKMTkyMjogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTkyMzogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTkyNDogICAgICAgICAgICAgICAgCQkJCQkJew0KMTkyNTogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE5MjY6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE5Mjc6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTkyODogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxOTI5OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE5MzA6ICAgICAgICAgICAgICAgIAkJCQkJCWJyZWFrOw0KQkZEMDNDNjYgICAgICAwQzAwICAgTk9QCjE5MzE6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTkzMjogICAgICAgICAgICAgICAgCQkJCX0NCjE5MzM6ICAgICAgICAgICAgICAgIAkJCX0NCjE5MzQ6ICAgICAgICAgICAgICAgIAkJCSNlbHNlIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoxOTM1OiAgICAgICAgICAgICAgICAJCQl7DQoxOTM2OiAgICAgICAgICAgICAgICAJCQkJLyogVGFza3MgdGhhdCBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0IHdpbGwgZ2V0IGFkZGVkIHRvDQoxOTM3OiAgICAgICAgICAgICAgICAJCQkJdGhlIHBlbmRpbmcgcmVhZHkgbGlzdCBhcyB0aGUgc2NoZWR1bGVyIGlzIHN0aWxsIHN1c3BlbmRlZC4gKi8NCjE5Mzg6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KMTkzOTogICAgICAgICAgICAgICAgCQkJCXsNCjE5NDA6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQoxOTQxOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE5NDI6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHNvIHJlY29yZCB0aGF0IGENCjE5NDM6ICAgICAgICAgICAgICAgIAkJCQkJCWNvbnRleHQJc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTk0NDogICAgICAgICAgICAgICAgCQkJCQkJdlRhc2tNaXNzZWRZaWVsZCgpOw0KMTk0NTogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTQ2OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE5NDc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTk0ODogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTk0OTogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTUwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTk1MTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjE5NTI6ICAgICAgICAgICAgICAgIAkJCQl7DQoxOTUzOiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KMTk1NDogICAgICAgICAgICAgICAgCQkJCX0NCjE5NTU6ICAgICAgICAgICAgICAgIAkJCX0NCjE5NTY6ICAgICAgICAgICAgICAgIAkJCSNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMTk1NzogICAgICAgICAgICAgICAgDQoxOTU4OiAgICAgICAgICAgICAgICAJCQktLSggcHhRdWV1ZS0+eFR4TG9jayApOw0KQkZEMDNDNDIgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0M0NiAgMDA0OEZDNDIgICBMVyBWMCwgNzIoVjApCkJGRDAzQzRBICAgICAgNkRBRSAgIEFERElVIFYxLCBWMCwgLTEKQkZEMDNDNEMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0M1MCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApCjE5NTk6ICAgICAgICAgICAgICAgIAkJfQ0KMTk2MDogICAgICAgICAgICAgICAgDQoxOTYxOiAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnhUeExvY2sgPSBxdWV1ZVVOTE9DS0VEOw0KQkZEMDNDNjggIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0M2QyAgICAgIEVERkYgICBMSSBWMSwgLTEKQkZEMDNDNkUgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQoxOTYyOiAgICAgICAgICAgICAgICAJfQ0KMTk2MzogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwM0M3MiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAzQzc0ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1NDc4CkJGRDAzQzc2ICAgICAgMEMwMCAgIE5PUAoxOTY0OiAgICAgICAgICAgICAgICANCjE5NjU6ICAgICAgICAgICAgICAgIAkvKiBEbyB0aGUgc2FtZSBmb3IgdGhlIFJ4IGxvY2suICovDQoxOTY2OiAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwM0M3OCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwM0M3QSAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDNDN0MgICAgICAwQzAwICAgTk9QCjE5Njc6ICAgICAgICAgICAgICAgIAl7DQoxOTY4OiAgICAgICAgICAgICAgICAJCXdoaWxlKCBweFF1ZXVlLT54UnhMb2NrID4gcXVldWVMT0NLRURfVU5NT0RJRklFRCApDQpCRkQwM0M3RSAgICAgIENDMUIgICBCIDB4QkZEMDNDQjYKQkZEMDNDODAgICAgICAwQzAwICAgTk9QCkJGRDAzQ0I2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDNDQkEgIDAwNDRGQzQyICAgTFcgVjAsIDY4KFYwKQpCRkQwM0NCRSAgRkZFMDQwQzIgICBCR1RaIFYwLCAweEJGRDAzQzgyCkJGRDAzQ0MwICAwQzAwRkZFMCAgIExXIFJBLCAzMDcyKFpFUk8pCkJGRDAzQ0MyICAgICAgMEMwMCAgIE5PUApCRkQwM0NDNCAgICAgIENDMDIgICBCIDB4QkZEMDNDQ0EKQkZEMDNDQzYgICAgICAwQzAwICAgTk9QCjE5Njk6ICAgICAgICAgICAgICAgIAkJew0KMTk3MDogICAgICAgICAgICAgICAgCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCkJGRDAzQzgyICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDNDODYgICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQpCRkQwM0M4OCAgMDAxRTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0NDOAoxOTcxOiAgICAgICAgICAgICAgICAJCQl7DQoxOTcyOiAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgIT0gcGRGQUxTRSApDQpCRkQwM0M4QyAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAzQzkwICAgICAgNkQyOCAgIEFERElVIFYwLCBWMCwgMTYKQkZEMDNDOTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDNDOTQgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QKQkZEMDNDOTYgIDBDMDAyMkJDICAgTFdDMiBTNSwgMzA3MihHUCkKQkZEMDNDOTggICAgICAwQzAwICAgTk9QCkJGRDAzQzlBICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzQ0E0CjE5NzM6ICAgICAgICAgICAgICAgIAkJCQl7DQoxOTc0OiAgICAgICAgICAgICAgICAJCQkJCXZUYXNrTWlzc2VkWWllbGQoKTsNCkJGRDAzQzlFICA0RjJBNzdFOCAgIEpBTFMgdlRhc2tNaXNzZWRZaWVsZApCRkQwM0NBMCAgICAgIDRGMkEgICBBRERJVSBUOSwgVDksIDUKQkZEMDNDQTIgICAgICAwQzAwICAgTk9QCjE5NzU6ICAgICAgICAgICAgICAgIAkJCQl9DQoxOTc2OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTk3NzogICAgICAgICAgICAgICAgCQkJCXsNCjE5Nzg6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTk3OTogICAgICAgICAgICAgICAgCQkJCX0NCjE5ODA6ICAgICAgICAgICAgICAgIA0KMTk4MTogICAgICAgICAgICAgICAgCQkJCS0tKCBweFF1ZXVlLT54UnhMb2NrICk7DQpCRkQwM0NBNCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAzQ0E4ICAwMDQ0RkM0MiAgIExXIFYwLCA2OChWMCkKQkZEMDNDQUMgICAgICA2REFFICAgQURESVUgVjEsIFYwLCAtMQpCRkQwM0NBRSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAzQ0IyICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkKMTk4MjogICAgICAgICAgICAgICAgCQkJfQ0KMTk4MzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTk4NDogICAgICAgICAgICAgICAgCQkJew0KMTk4NTogICAgICAgICAgICAgICAgCQkJCWJyZWFrOw0KQkZEMDNDQzggICAgICAwQzAwICAgTk9QCjE5ODY6ICAgICAgICAgICAgICAgIAkJCX0NCjE5ODc6ICAgICAgICAgICAgICAgIAkJfQ0KMTk4ODogICAgICAgICAgICAgICAgDQoxOTg5OiAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnhSeExvY2sgPSBxdWV1ZVVOTE9DS0VEOw0KQkZEMDNDQ0EgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwM0NDRSAgICAgIEVERkYgICBMSSBWMSwgLTEKQkZEMDNDRDAgIDAwNDRGODYyICAgU1cgVjEsIDY4KFYwKQoxOTkwOiAgICAgICAgICAgICAgICAJfQ0KMTk5MTogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwM0NENCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDAzQ0Q2ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1NERBCkJGRDAzQ0Q4ICAgICAgMEMwMCAgIE5PUAoxOTkyOiAgICAgICAgICAgICAgICB9DQpCRkQwM0NEQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwM0NEQyAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDAzQ0RFICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDNDRTAgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwM0NFMiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDAzQ0U0ICAgICAgMEMwMCAgIE5PUAoxOTkzOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE5OTQ6ICAgICAgICAgICAgICAgIA0KMTk5NTogICAgICAgICAgICAgICAgc3RhdGljIEJhc2VUeXBlX3QgcHJ2SXNRdWV1ZUVtcHR5KCBjb25zdCBRdWV1ZV90ICpweFF1ZXVlICkNCjE5OTY6ICAgICAgICAgICAgICAgIHsNCkJGRDA5M0EwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA5M0EyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDkzQTQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOTNBNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTNBOCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjE5OTc6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjE5OTg6ICAgICAgICAgICAgICAgIA0KMTk5OTogICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDkzQUMgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDkzQUUgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA5M0IwICAgICAgMEMwMCAgIE5PUAoyMDAwOiAgICAgICAgICAgICAgICAJew0KMjAwMTogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPT0gKCBVQmFzZVR5cGVfdCApICAwICkNCkJGRDA5M0IyICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDkzQjYgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQpCRkQwOTNCOCAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOTNDNgoyMDAyOiAgICAgICAgICAgICAgICAJCXsNCjIwMDM6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZFRSVUU7DQpCRkQwOTNCQyAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwOTNCRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA5M0MyICAgICAgQ0MwMyAgIEIgMHhCRkQwOTNDQQpCRkQwOTNDNCAgICAgIDBDMDAgICBOT1AKMjAwNDogICAgICAgICAgICAgICAgCQl9DQoyMDA1OiAgICAgICAgICAgICAgICAJCWVsc2UNCjIwMDY6ICAgICAgICAgICAgICAgIAkJew0KMjAwNzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwOTNDNiAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMjAwODogICAgICAgICAgICAgICAgCQl9DQoyMDA5OiAgICAgICAgICAgICAgICAJfQ0KMjAxMDogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwOTNDQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA5M0NDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDBBQkQwCkJGRDA5M0NFICAgICAgMEMwMCAgIE5PUAoyMDExOiAgICAgICAgICAgICAgICANCjIwMTI6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA5M0QwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMjAxMzogICAgICAgICAgICAgICAgfQ0KQkZEMDkzRDQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDkzRDYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTNEOCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5M0RBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDkzREMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTNERSAgICAgIDBDMDAgICBOT1AKMjAxNDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMDE1OiAgICAgICAgICAgICAgICANCjIwMTY6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFF1ZXVlSXNRdWV1ZUVtcHR5RnJvbUlTUiggY29uc3QgUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMjAxNzogICAgICAgICAgICAgICAgew0KQkZEMDg5NTQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDg5NTYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwODk1OCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4OTVBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4OTVDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMjAxODogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjAxOTogICAgICAgICAgICAgICAgDQoyMDIwOiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4UXVldWUgKTsNCkJGRDA4OTYwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDg5NjQgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg5N0EKQkZEMDg5NjggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDg5NkEgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwODk2QyAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwODk2RSAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDA4OTcwICAwN0U0MzBBMCAgIEFERElVIEExLCBaRVJPLCAyMDIwCkJGRDA4OTcyICAgICAgMDdFNCAgIEFERFUgQTMsIFYwLCBBMgpCRkQwODk3NCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDg5NzYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDg5NzggICAgICAwQzAwICAgTk9QCjIwMjE6ICAgICAgICAgICAgICAgIAlpZiggKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZSApLT51eE1lc3NhZ2VzV2FpdGluZyA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwODk3QSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA4OTdFICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkKQkZEMDg5ODAgIDAwMDU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg5OEUKMjAyMjogICAgICAgICAgICAgICAgCXsNCjIwMjM6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA4OTg0ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA4OTg2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDg5OEEgICAgICBDQzAzICAgQiAweEJGRDA4OTkyCkJGRDA4OThDICAgICAgMEMwMCAgIE5PUAoyMDI0OiAgICAgICAgICAgICAgICAJfQ0KMjAyNTogICAgICAgICAgICAgICAgCWVsc2UNCjIwMjY6ICAgICAgICAgICAgICAgIAl7DQoyMDI3OiAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDg5OEUgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjIwMjg6ICAgICAgICAgICAgICAgIAl9DQoyMDI5OiAgICAgICAgICAgICAgICANCjIwMzA6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA4OTkyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMjAzMTogICAgICAgICAgICAgICAgfSAvKmxpbnQgIWU4MTggeFF1ZXVlIGNvdWxkIG5vdCBiZSBwb2ludGVyIHRvIGNvbnN0IGJlY2F1c2UgaXQgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDg5OTYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDg5OTggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwODk5QSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4OTlDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDg5OUUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODlBMCAgICAgIDBDMDAgICBOT1AKMjAzMjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMDMzOiAgICAgICAgICAgICAgICANCjIwMzQ6ICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydklzUXVldWVGdWxsKCBjb25zdCBRdWV1ZV90ICpweFF1ZXVlICkNCjIwMzU6ICAgICAgICAgICAgICAgIHsNCkJGRDA4RjA0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4RjA2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDhGMDggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOEYwQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOEYwQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjIwMzY6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjIwMzc6ICAgICAgICAgICAgICAgIA0KMjAzODogICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDhGMTAgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwKQkZEMDhGMTIgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyCkJGRDA4RjE0ICAgICAgMEMwMCAgIE5PUAoyMDM5OiAgICAgICAgICAgICAgICAJew0KMjA0MDogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPT0gcHhRdWV1ZS0+dXhMZW5ndGggKQ0KQkZEMDhGMTYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwOEYxQSAgICAgIDY5QUUgICBMVyBWMSwgNTYoVjApCkJGRDA4RjFDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDhGMjAgICAgICA2OTJGICAgTFcgVjAsIDYwKFYwKQpCRkQwOEYyMiAgMDAwNkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA4RjMyCkJGRDA4RjI0ICAwQzAwMDAwNiAgIFNMTCBaRVJPLCBBMiwgMQpCRkQwOEYyNiAgICAgIDBDMDAgICBOT1AKMjA0MTogICAgICAgICAgICAgICAgCQl7DQoyMDQyOiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDhGMjggICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDhGMkEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwOEYyRSAgICAgIENDMDMgICBCIDB4QkZEMDhGMzYKQkZEMDhGMzAgICAgICAwQzAwICAgTk9QCjIwNDM6ICAgICAgICAgICAgICAgIAkJfQ0KMjA0NDogICAgICAgICAgICAgICAgCQllbHNlDQoyMDQ1OiAgICAgICAgICAgICAgICAJCXsNCjIwNDY6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDhGMzIgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjIwNDc6ICAgICAgICAgICAgICAgIAkJfQ0KMjA0ODogICAgICAgICAgICAgICAgCX0NCjIwNDk6ICAgICAgICAgICAgICAgIAl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDhGMzYgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwOEYzOCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwQTczQwpCRkQwOEYzQSAgICAgIDBDMDAgICBOT1AKMjA1MDogICAgICAgICAgICAgICAgDQoyMDUxOiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwOEYzQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjIwNTI6ICAgICAgICAgICAgICAgIH0NCkJGRDA4RjQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4RjQyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDhGNDQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwOEY0NiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4RjQ4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDhGNEEgICAgICAwQzAwICAgTk9QCjIwNTM6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjA1NDogICAgICAgICAgICAgICAgDQoyMDU1OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhRdWV1ZUlzUXVldWVGdWxsRnJvbUlTUiggY29uc3QgUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMjA1NjogICAgICAgICAgICAgICAgew0KQkZEMDg0RjggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDg0RkEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwODRGQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4NEZFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4NTAwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMjA1NzogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjA1ODogICAgICAgICAgICAgICAgDQoyMDU5OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4UXVldWUgKTsNCkJGRDA4NTA0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDg1MDggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg1MUUKQkZEMDg1MEMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDg1MEUgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwODUxMCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwODUxMiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDA4NTE0ICAwODBCMzBBMCAgIEFERElVIEExLCBaRVJPLCAyMDU5CkJGRDA4NTE2ICAgICAgMDgwQiAgIExCVSBTMCwgMTEoUzApCkJGRDA4NTE4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwODUxQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwODUxQyAgICAgIDBDMDAgICBOT1AKMjA2MDogICAgICAgICAgICAgICAgCWlmKCAoICggUXVldWVfdCAqICkgeFF1ZXVlICktPnV4TWVzc2FnZXNXYWl0aW5nID09ICggKCBRdWV1ZV90ICogKSB4UXVldWUgKS0+dXhMZW5ndGggKQ0KQkZEMDg1MUUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwODUyMiAgICAgIDY5QUUgICBMVyBWMSwgNTYoVjApCkJGRDA4NTI0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDg1MjggICAgICA2OTJGICAgTFcgVjAsIDYwKFYwKQpCRkQwODUyQSAgMDAwNkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA4NTNBCkJGRDA4NTJDICAwQzAwMDAwNiAgIFNMTCBaRVJPLCBBMiwgMQpCRkQwODUyRSAgICAgIDBDMDAgICBOT1AKMjA2MTogICAgICAgICAgICAgICAgCXsNCjIwNjI6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA4NTMwICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA4NTMyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDg1MzYgICAgICBDQzAzICAgQiAweEJGRDA4NTNFCkJGRDA4NTM4ICAgICAgMEMwMCAgIE5PUAoyMDYzOiAgICAgICAgICAgICAgICAJfQ0KMjA2NDogICAgICAgICAgICAgICAgCWVsc2UNCjIwNjU6ICAgICAgICAgICAgICAgIAl7DQoyMDY2OiAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDg1M0EgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjIwNjc6ICAgICAgICAgICAgICAgIAl9DQoyMDY4OiAgICAgICAgICAgICAgICANCjIwNjk6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA4NTNFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMjA3MDogICAgICAgICAgICAgICAgfSAvKmxpbnQgIWU4MTggeFF1ZXVlIGNvdWxkIG5vdCBiZSBwb2ludGVyIHRvIGNvbnN0IGJlY2F1c2UgaXQgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDg1NDIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDg1NDQgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwODU0NiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4NTQ4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDg1NEEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODU0QyAgICAgIDBDMDAgICBOT1AKMjA3MTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMDcyOiAgICAgICAgICAgICAgICANCjIwNzM6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyA9PSAxICkNCjIwNzQ6ICAgICAgICAgICAgICAgIA0KMjA3NTogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFF1ZXVlQ1JTZW5kKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgY29uc3Qgdm9pZCAqcHZJdGVtVG9RdWV1ZSwgVGlja1R5cGVfdCB4VGlja3NUb1dhaXQgKQ0KMjA3NjogICAgICAgICAgICAgICAgCXsNCjIwNzc6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQoyMDc4OiAgICAgICAgICAgICAgICAJUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCjIwNzk6ICAgICAgICAgICAgICAgIA0KMjA4MDogICAgICAgICAgICAgICAgCQkvKiBJZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBmdWxsIHdlIG1heSBoYXZlIHRvIGJsb2NrLiAgQSBjcml0aWNhbCBzZWN0aW9uDQoyMDgxOiAgICAgICAgICAgICAgICAJCWlzIHJlcXVpcmVkIHRvIHByZXZlbnQgYW4gaW50ZXJydXB0IHJlbW92aW5nIHNvbWV0aGluZyBmcm9tIHRoZSBxdWV1ZQ0KMjA4MjogICAgICAgICAgICAgICAgCQliZXR3ZWVuIHRoZSBjaGVjayB0byBzZWUgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwgYW5kIGJsb2NraW5nIG9uIHRoZSBxdWV1ZS4gKi8NCjIwODM6ICAgICAgICAgICAgICAgIAkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KMjA4NDogICAgICAgICAgICAgICAgCQl7DQoyMDg1OiAgICAgICAgICAgICAgICAJCQlpZiggcHJ2SXNRdWV1ZUZ1bGwoIHB4UXVldWUgKSAhPSBwZEZBTFNFICkNCjIwODY6ICAgICAgICAgICAgICAgIAkJCXsNCjIwODc6ICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgcXVldWUgaXMgZnVsbCAtIGRvIHdlIHdhbnQgdG8gYmxvY2sgb3IganVzdCBsZWF2ZSB3aXRob3V0DQoyMDg4OiAgICAgICAgICAgICAgICAJCQkJcG9zdGluZz8gKi8NCjIwODk6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFRpY2tzVG9XYWl0ID4gKCBUaWNrVHlwZV90ICkgMCApDQoyMDkwOiAgICAgICAgICAgICAgICAJCQkJew0KMjA5MTogICAgICAgICAgICAgICAgCQkJCQkvKiBBcyB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgY29yb3V0aW5lIHdlIGNhbm5vdCBibG9jayBkaXJlY3RseSwgYnV0DQoyMDkyOiAgICAgICAgICAgICAgICAJCQkJCXJldHVybiBpbmRpY2F0aW5nIHRoYXQgd2UgbmVlZCB0byBibG9jay4gKi8NCjIwOTM6ICAgICAgICAgICAgICAgIAkJCQkJdkNvUm91dGluZUFkZFRvRGVsYXllZExpc3QoIHhUaWNrc1RvV2FpdCwgJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICk7DQoyMDk0OiAgICAgICAgICAgICAgICAJCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KMjA5NTogICAgICAgICAgICAgICAgCQkJCQlyZXR1cm4gZXJyUVVFVUVfQkxPQ0tFRDsNCjIwOTY6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMDk3OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMjA5ODogICAgICAgICAgICAgICAgCQkJCXsNCjIwOTk6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQoyMTAwOiAgICAgICAgICAgICAgICAJCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KMjEwMTogICAgICAgICAgICAgICAgCQkJCX0NCjIxMDI6ICAgICAgICAgICAgICAgIAkJCX0NCjIxMDM6ICAgICAgICAgICAgICAgIAkJfQ0KMjEwNDogICAgICAgICAgICAgICAgCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCjIxMDU6ICAgICAgICAgICAgICAgIA0KMjEwNjogICAgICAgICAgICAgICAgCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQoyMTA3OiAgICAgICAgICAgICAgICAJCXsNCjIxMDg6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWUtPnV4TGVuZ3RoICkNCjIxMDk6ICAgICAgICAgICAgICAgIAkJCXsNCjIxMTA6ICAgICAgICAgICAgICAgIAkJCQkvKiBUaGVyZSBpcyByb29tIGluIHRoZSBxdWV1ZSwgY29weSB0aGUgZGF0YSBpbnRvIHRoZSBxdWV1ZS4gKi8NCjIxMTE6ICAgICAgICAgICAgICAgIAkJCQlwcnZDb3B5RGF0YVRvUXVldWUoIHB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHF1ZXVlU0VORF9UT19CQUNLICk7DQoyMTEyOiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkUEFTUzsNCjIxMTM6ICAgICAgICAgICAgICAgIA0KMjExNDogICAgICAgICAgICAgICAgCQkJCS8qIFdlcmUgYW55IGNvLXJvdXRpbmVzIHdhaXRpbmcgZm9yIGRhdGEgdG8gYmVjb21lIGF2YWlsYWJsZT8gKi8NCjIxMTU6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KMjExNjogICAgICAgICAgICAgICAgCQkJCXsNCjIxMTc6ICAgICAgICAgICAgICAgIAkJCQkJLyogSW4gdGhpcyBpbnN0YW5jZSB0aGUgY28tcm91dGluZSBjb3VsZCBiZSBwbGFjZWQgZGlyZWN0bHkNCjIxMTg6ICAgICAgICAgICAgICAgIAkJCQkJaW50byB0aGUgcmVhZHkgbGlzdCBhcyB3ZSBhcmUgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbi4NCjIxMTk6ICAgICAgICAgICAgICAgIAkJCQkJSW5zdGVhZCB0aGUgc2FtZSBwZW5kaW5nIHJlYWR5IGxpc3QgbWVjaGFuaXNtIGlzIHVzZWQgYXMgaWYNCjIxMjA6ICAgICAgICAgICAgICAgIAkJCQkJdGhlIGV2ZW50IHdlcmUgY2F1c2VkIGZyb20gd2l0aGluIGFuIGludGVycnVwdC4gKi8NCjIxMjE6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhDb1JvdXRpbmVSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSAhPSBwZEZBTFNFICkNCjIxMjI6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjEyMzogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIGNvLXJvdXRpbmUgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgc28gcmVjb3JkDQoyMTI0OiAgICAgICAgICAgICAgICAJCQkJCQl0aGF0IGEgeWllbGQgbWlnaHQgYmUgYXBwcm9wcmlhdGUuICovDQoyMTI1OiAgICAgICAgICAgICAgICAJCQkJCQl4UmV0dXJuID0gZXJyUVVFVUVfWUlFTEQ7DQoyMTI2OiAgICAgICAgICAgICAgICAJCQkJCX0NCjIxMjc6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMjEyODogICAgICAgICAgICAgICAgCQkJCQl7DQoyMTI5OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMTMwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjIxMzE6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMTMyOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMjEzMzogICAgICAgICAgICAgICAgCQkJCXsNCjIxMzQ6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjEzNTogICAgICAgICAgICAgICAgCQkJCX0NCjIxMzY6ICAgICAgICAgICAgICAgIAkJCX0NCjIxMzc6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjIxMzg6ICAgICAgICAgICAgICAgIAkJCXsNCjIxMzk6ICAgICAgICAgICAgICAgIAkJCQl4UmV0dXJuID0gZXJyUVVFVUVfRlVMTDsNCjIxNDA6ICAgICAgICAgICAgICAgIAkJCX0NCjIxNDE6ICAgICAgICAgICAgICAgIAkJfQ0KMjE0MjogICAgICAgICAgICAgICAgCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCjIxNDM6ICAgICAgICAgICAgICAgIA0KMjE0NDogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjIxNDU6ICAgICAgICAgICAgICAgIAl9DQoyMTQ2OiAgICAgICAgICAgICAgICANCjIxNDc6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfQ09fUk9VVElORVMgKi8NCjIxNDg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjE0OTogICAgICAgICAgICAgICAgDQoyMTUwOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfQ09fUk9VVElORVMgPT0gMSApDQoyMTUxOiAgICAgICAgICAgICAgICANCjIxNTI6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhRdWV1ZUNSUmVjZWl2ZSggUXVldWVIYW5kbGVfdCB4UXVldWUsIHZvaWQgKnB2QnVmZmVyLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCApDQoyMTUzOiAgICAgICAgICAgICAgICAJew0KMjE1NDogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjIxNTU6ICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KMjE1NjogICAgICAgICAgICAgICAgDQoyMTU3OiAgICAgICAgICAgICAgICAJCS8qIElmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IHdlIG1heSBoYXZlIHRvIGJsb2NrLiAgQSBjcml0aWNhbCBzZWN0aW9uDQoyMTU4OiAgICAgICAgICAgICAgICAJCWlzIHJlcXVpcmVkIHRvIHByZXZlbnQgYW4gaW50ZXJydXB0IGFkZGluZyBzb21ldGhpbmcgdG8gdGhlIHF1ZXVlDQoyMTU5OiAgICAgICAgICAgICAgICAJCWJldHdlZW4gdGhlIGNoZWNrIHRvIHNlZSBpZiB0aGUgcXVldWUgaXMgZW1wdHkgYW5kIGJsb2NraW5nIG9uIHRoZSBxdWV1ZS4gKi8NCjIxNjA6ICAgICAgICAgICAgICAgIAkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KMjE2MTogICAgICAgICAgICAgICAgCQl7DQoyMTYyOiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KMjE2MzogICAgICAgICAgICAgICAgCQkJew0KMjE2NDogICAgICAgICAgICAgICAgCQkJCS8qIFRoZXJlIGFyZSBubyBtZXNzYWdlcyBpbiB0aGUgcXVldWUsIGRvIHdlIHdhbnQgdG8gYmxvY2sgb3IganVzdA0KMjE2NTogICAgICAgICAgICAgICAgCQkJCWxlYXZlIHdpdGggbm90aGluZz8gKi8NCjIxNjY6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFRpY2tzVG9XYWl0ID4gKCBUaWNrVHlwZV90ICkgMCApDQoyMTY3OiAgICAgICAgICAgICAgICAJCQkJew0KMjE2ODogICAgICAgICAgICAgICAgCQkJCQkvKiBBcyB0aGlzIGlzIGEgY28tcm91dGluZSB3ZSBjYW5ub3QgYmxvY2sgZGlyZWN0bHksIGJ1dCByZXR1cm4NCjIxNjk6ICAgICAgICAgICAgICAgIAkJCQkJaW5kaWNhdGluZyB0aGF0IHdlIG5lZWQgdG8gYmxvY2suICovDQoyMTcwOiAgICAgICAgICAgICAgICAJCQkJCXZDb1JvdXRpbmVBZGRUb0RlbGF5ZWRMaXN0KCB4VGlja3NUb1dhaXQsICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApOw0KMjE3MTogICAgICAgICAgICAgICAgCQkJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCjIxNzI6ICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIGVyclFVRVVFX0JMT0NLRUQ7DQoyMTczOiAgICAgICAgICAgICAgICAJCQkJfQ0KMjE3NDogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjIxNzU6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMTc2OiAgICAgICAgICAgICAgICAJCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KMjE3NzogICAgICAgICAgICAgICAgCQkJCQlyZXR1cm4gZXJyUVVFVUVfRlVMTDsNCjIxNzg6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMTc5OiAgICAgICAgICAgICAgICAJCQl9DQoyMTgwOiAgICAgICAgICAgICAgICAJCQllbHNlDQoyMTgxOiAgICAgICAgICAgICAgICAJCQl7DQoyMTgyOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjE4MzogICAgICAgICAgICAgICAgCQkJfQ0KMjE4NDogICAgICAgICAgICAgICAgCQl9DQoyMTg1OiAgICAgICAgICAgICAgICAJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KMjE4NjogICAgICAgICAgICAgICAgDQoyMTg3OiAgICAgICAgICAgICAgICAJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCjIxODg6ICAgICAgICAgICAgICAgIAkJew0KMjE4OTogICAgICAgICAgICAgICAgCQkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID4gKCBVQmFzZVR5cGVfdCApIDAgKQ0KMjE5MDogICAgICAgICAgICAgICAgCQkJew0KMjE5MTogICAgICAgICAgICAgICAgCQkJCS8qIERhdGEgaXMgYXZhaWxhYmxlIGZyb20gdGhlIHF1ZXVlLiAqLw0KMjE5MjogICAgICAgICAgICAgICAgCQkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSArPSBweFF1ZXVlLT51eEl0ZW1TaXplOw0KMjE5MzogICAgICAgICAgICAgICAgCQkJCWlmKCBweFF1ZXVlLT51LnBjUmVhZEZyb20gPj0gcHhRdWV1ZS0+cGNUYWlsICkNCjIxOTQ6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMTk1OiAgICAgICAgICAgICAgICAJCQkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSA9IHB4UXVldWUtPnBjSGVhZDsNCjIxOTY6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMTk3OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMjE5ODogICAgICAgICAgICAgICAgCQkJCXsNCjIxOTk6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjIwMDogICAgICAgICAgICAgICAgCQkJCX0NCjIyMDE6ICAgICAgICAgICAgICAgIAkJCQktLSggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgKTsNCjIyMDI6ICAgICAgICAgICAgICAgIAkJCQkoIHZvaWQgKSBtZW1jcHkoICggdm9pZCAqICkgcHZCdWZmZXIsICggdm9pZCAqICkgcHhRdWV1ZS0+dS5wY1JlYWRGcm9tLCAoIHVuc2lnbmVkICkgcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KMjIwMzogICAgICAgICAgICAgICAgDQoyMjA0OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkUEFTUzsNCjIyMDU6ICAgICAgICAgICAgICAgIA0KMjIwNjogICAgICAgICAgICAgICAgCQkJCS8qIFdlcmUgYW55IGNvLXJvdXRpbmVzIHdhaXRpbmcgZm9yIHNwYWNlIHRvIGJlY29tZSBhdmFpbGFibGU/ICovDQoyMjA3OiAgICAgICAgICAgICAgICAJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCjIyMDg6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMjA5OiAgICAgICAgICAgICAgICAJCQkJCS8qIEluIHRoaXMgaW5zdGFuY2UgdGhlIGNvLXJvdXRpbmUgY291bGQgYmUgcGxhY2VkIGRpcmVjdGx5DQoyMjEwOiAgICAgICAgICAgICAgICAJCQkJCWludG8gdGhlIHJlYWR5IGxpc3QgYXMgd2UgYXJlIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24uDQoyMjExOiAgICAgICAgICAgICAgICAJCQkJCUluc3RlYWQgdGhlIHNhbWUgcGVuZGluZyByZWFkeSBsaXN0IG1lY2hhbmlzbSBpcyB1c2VkIGFzIGlmDQoyMjEyOiAgICAgICAgICAgICAgICAJCQkJCXRoZSBldmVudCB3ZXJlIGNhdXNlZCBmcm9tIHdpdGhpbiBhbiBpbnRlcnJ1cHQuICovDQoyMjEzOiAgICAgICAgICAgICAgICAJCQkJCWlmKCB4Q29Sb3V0aW5lUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgIT0gcGRGQUxTRSApDQoyMjE0OiAgICAgICAgICAgICAgICAJCQkJCXsNCjIyMTU6ICAgICAgICAgICAgICAgIAkJCQkJCXhSZXR1cm4gPSBlcnJRVUVVRV9ZSUVMRDsNCjIyMTY6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjIxNzogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoyMjE4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjIyMTk6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyMjA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjIyMTogICAgICAgICAgICAgICAgCQkJCX0NCjIyMjI6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoyMjIzOiAgICAgICAgICAgICAgICAJCQkJew0KMjIyNDogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMjI1OiAgICAgICAgICAgICAgICAJCQkJfQ0KMjIyNjogICAgICAgICAgICAgICAgCQkJfQ0KMjIyNzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjIyODogICAgICAgICAgICAgICAgCQkJew0KMjIyOTogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSBwZEZBSUw7DQoyMjMwOiAgICAgICAgICAgICAgICAJCQl9DQoyMjMxOiAgICAgICAgICAgICAgICAJCX0NCjIyMzI6ICAgICAgICAgICAgICAgIAkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQoyMjMzOiAgICAgICAgICAgICAgICANCjIyMzQ6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQoyMjM1OiAgICAgICAgICAgICAgICAJfQ0KMjIzNjogICAgICAgICAgICAgICAgDQoyMjM3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX0NPX1JPVVRJTkVTICovDQoyMjM4OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIyMzk6ICAgICAgICAgICAgICAgIA0KMjI0MDogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX0NPX1JPVVRJTkVTID09IDEgKQ0KMjI0MTogICAgICAgICAgICAgICAgDQoyMjQyOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UXVldWVDUlNlbmRGcm9tSVNSKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgY29uc3Qgdm9pZCAqcHZJdGVtVG9RdWV1ZSwgQmFzZVR5cGVfdCB4Q29Sb3V0aW5lUHJldmlvdXNseVdva2VuICkNCjIyNDM6ICAgICAgICAgICAgICAgIAl7DQoyMjQ0OiAgICAgICAgICAgICAgICAJUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCjIyNDU6ICAgICAgICAgICAgICAgIA0KMjI0NjogICAgICAgICAgICAgICAgCQkvKiBDYW5ub3QgYmxvY2sgd2l0aGluIGFuIElTUiBzbyBpZiB0aGVyZSBpcyBubyBzcGFjZSBvbiB0aGUgcXVldWUgdGhlbg0KMjI0NzogICAgICAgICAgICAgICAgCQlleGl0IHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuICovDQoyMjQ4OiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWUtPnV4TGVuZ3RoICkNCjIyNDk6ICAgICAgICAgICAgICAgIAkJew0KMjI1MDogICAgICAgICAgICAgICAgCQkJcHJ2Q29weURhdGFUb1F1ZXVlKCBweFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCBxdWV1ZVNFTkRfVE9fQkFDSyApOw0KMjI1MTogICAgICAgICAgICAgICAgDQoyMjUyOiAgICAgICAgICAgICAgICAJCQkvKiBXZSBvbmx5IHdhbnQgdG8gd2FrZSBvbmUgY28tcm91dGluZSBwZXIgSVNSLCBzbyBjaGVjayB0aGF0IGENCjIyNTM6ICAgICAgICAgICAgICAgIAkJCWNvLXJvdXRpbmUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gd29rZW4uICovDQoyMjU0OiAgICAgICAgICAgICAgICAJCQlpZiggeENvUm91dGluZVByZXZpb3VzbHlXb2tlbiA9PSBwZEZBTFNFICkNCjIyNTU6ICAgICAgICAgICAgICAgIAkJCXsNCjIyNTY6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KMjI1NzogICAgICAgICAgICAgICAgCQkJCXsNCjIyNTg6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhDb1JvdXRpbmVSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSAhPSBwZEZBTFNFICkNCjIyNTk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjI2MDogICAgICAgICAgICAgICAgCQkJCQkJcmV0dXJuIHBkVFJVRTsNCjIyNjE6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjI2MjogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoyMjYzOiAgICAgICAgICAgICAgICAJCQkJCXsNCjIyNjQ6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyNjU6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjI2NjogICAgICAgICAgICAgICAgCQkJCX0NCjIyNjc6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoyMjY4OiAgICAgICAgICAgICAgICAJCQkJew0KMjI2OTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMjcwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMjI3MTogICAgICAgICAgICAgICAgCQkJfQ0KMjI3MjogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjI3MzogICAgICAgICAgICAgICAgCQkJew0KMjI3NDogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyNzU6ICAgICAgICAgICAgICAgIAkJCX0NCjIyNzY6ICAgICAgICAgICAgICAgIAkJfQ0KMjI3NzogICAgICAgICAgICAgICAgCQllbHNlDQoyMjc4OiAgICAgICAgICAgICAgICAJCXsNCjIyNzk6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyODA6ICAgICAgICAgICAgICAgIAkJfQ0KMjI4MTogICAgICAgICAgICAgICAgDQoyMjgyOiAgICAgICAgICAgICAgICAJCXJldHVybiB4Q29Sb3V0aW5lUHJldmlvdXNseVdva2VuOw0KMjI4MzogICAgICAgICAgICAgICAgCX0NCjIyODQ6ICAgICAgICAgICAgICAgIA0KMjI4NTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyAqLw0KMjI4NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMjg3OiAgICAgICAgICAgICAgICANCjIyODg6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyA9PSAxICkNCjIyODk6ICAgICAgICAgICAgICAgIA0KMjI5MDogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFF1ZXVlQ1JSZWNlaXZlRnJvbUlTUiggUXVldWVIYW5kbGVfdCB4UXVldWUsIHZvaWQgKnB2QnVmZmVyLCBCYXNlVHlwZV90ICpweENvUm91dGluZVdva2VuICkNCjIyOTE6ICAgICAgICAgICAgICAgIAl7DQoyMjkyOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjI5MzogICAgICAgICAgICAgICAgCVF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlID0gKCBRdWV1ZV90ICogKSB4UXVldWU7DQoyMjk0OiAgICAgICAgICAgICAgICANCjIyOTU6ICAgICAgICAgICAgICAgIAkJLyogV2UgY2Fubm90IGJsb2NrIGZyb20gYW4gSVNSLCBzbyBjaGVjayB0aGVyZSBpcyBkYXRhIGF2YWlsYWJsZS4gSWYNCjIyOTY6ICAgICAgICAgICAgICAgIAkJbm90IHRoZW4ganVzdCBsZWF2ZSB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiAqLw0KMjI5NzogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPiAoIFVCYXNlVHlwZV90ICkgMCApDQoyMjk4OiAgICAgICAgICAgICAgICAJCXsNCjIyOTk6ICAgICAgICAgICAgICAgIAkJCS8qIENvcHkgdGhlIGRhdGEgZnJvbSB0aGUgcXVldWUuICovDQoyMzAwOiAgICAgICAgICAgICAgICAJCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gKz0gcHhRdWV1ZS0+dXhJdGVtU2l6ZTsNCjIzMDE6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT51LnBjUmVhZEZyb20gPj0gcHhRdWV1ZS0+cGNUYWlsICkNCjIzMDI6ICAgICAgICAgICAgICAgIAkJCXsNCjIzMDM6ICAgICAgICAgICAgICAgIAkJCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gPSBweFF1ZXVlLT5wY0hlYWQ7DQoyMzA0OiAgICAgICAgICAgICAgICAJCQl9DQoyMzA1OiAgICAgICAgICAgICAgICAJCQllbHNlDQoyMzA2OiAgICAgICAgICAgICAgICAJCQl7DQoyMzA3OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjMwODogICAgICAgICAgICAgICAgCQkJfQ0KMjMwOTogICAgICAgICAgICAgICAgCQkJLS0oIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICk7DQoyMzEwOiAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSBtZW1jcHkoICggdm9pZCAqICkgcHZCdWZmZXIsICggdm9pZCAqICkgcHhRdWV1ZS0+dS5wY1JlYWRGcm9tLCAoIHVuc2lnbmVkICkgcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KMjMxMTogICAgICAgICAgICAgICAgDQoyMzEyOiAgICAgICAgICAgICAgICAJCQlpZiggKCAqcHhDb1JvdXRpbmVXb2tlbiApID09IHBkRkFMU0UgKQ0KMjMxMzogICAgICAgICAgICAgICAgCQkJew0KMjMxNDogICAgICAgICAgICAgICAgCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgPT0gcGRGQUxTRSApDQoyMzE1OiAgICAgICAgICAgICAgICAJCQkJew0KMjMxNjogICAgICAgICAgICAgICAgCQkJCQlpZiggeENvUm91dGluZVJlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApICE9IHBkRkFMU0UgKQ0KMjMxNzogICAgICAgICAgICAgICAgCQkJCQl7DQoyMzE4OiAgICAgICAgICAgICAgICAJCQkJCQkqcHhDb1JvdXRpbmVXb2tlbiA9IHBkVFJVRTsNCjIzMTk6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjMyMDogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoyMzIxOiAgICAgICAgICAgICAgICAJCQkJCXsNCjIzMjI6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIzMjM6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjMyNDogICAgICAgICAgICAgICAgCQkJCX0NCjIzMjU6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoyMzI2OiAgICAgICAgICAgICAgICAJCQkJew0KMjMyNzogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMzI4OiAgICAgICAgICAgICAgICAJCQkJfQ0KMjMyOTogICAgICAgICAgICAgICAgCQkJfQ0KMjMzMDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjMzMTogICAgICAgICAgICAgICAgCQkJew0KMjMzMjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIzMzM6ICAgICAgICAgICAgICAgIAkJCX0NCjIzMzQ6ICAgICAgICAgICAgICAgIA0KMjMzNTogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkUEFTUzsNCjIzMzY6ICAgICAgICAgICAgICAgIAkJfQ0KMjMzNzogICAgICAgICAgICAgICAgCQllbHNlDQoyMzM4OiAgICAgICAgICAgICAgICAJCXsNCjIzMzk6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBSUw7DQoyMzQwOiAgICAgICAgICAgICAgICAJCX0NCjIzNDE6ICAgICAgICAgICAgICAgIA0KMjM0MjogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjIzNDM6ICAgICAgICAgICAgICAgIAl9DQoyMzQ0OiAgICAgICAgICAgICAgICANCjIzNDU6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfQ09fUk9VVElORVMgKi8NCjIzNDY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjM0NzogICAgICAgICAgICAgICAgDQoyMzQ4OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFID4gMCApDQoyMzQ5OiAgICAgICAgICAgICAgICANCjIzNTA6ICAgICAgICAgICAgICAgIAl2b2lkIHZRdWV1ZUFkZFRvUmVnaXN0cnkoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBjb25zdCBjaGFyICpwY1F1ZXVlTmFtZSApIC8qbGludCAhZTk3MSBVbnF1YWxpZmllZCBjaGFyIHR5cGVzIGFyZSBhbGxvd2VkIGZvciBzdHJpbmdzIGFuZCBzaW5nbGUgY2hhcmFjdGVycyBvbmx5LiAqLw0KMjM1MTogICAgICAgICAgICAgICAgCXsNCjIzNTI6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eDsNCjIzNTM6ICAgICAgICAgICAgICAgIA0KMjM1NDogICAgICAgICAgICAgICAgCQkvKiBTZWUgaWYgdGhlcmUgaXMgYW4gZW1wdHkgc3BhY2UgaW4gdGhlIHJlZ2lzdHJ5LiAgQSBOVUxMIG5hbWUgZGVub3Rlcw0KMjM1NTogICAgICAgICAgICAgICAgCQlhIGZyZWUgc2xvdC4gKi8NCjIzNTY6ICAgICAgICAgICAgICAgIAkJZm9yKCB1eCA9ICggVUJhc2VUeXBlX3QgKSAwVTsgdXggPCAoIFVCYXNlVHlwZV90ICkgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRTsgdXgrKyApDQoyMzU3OiAgICAgICAgICAgICAgICAJCXsNCjIzNTg6ICAgICAgICAgICAgICAgIAkJCWlmKCB4UXVldWVSZWdpc3RyeVsgdXggXS5wY1F1ZXVlTmFtZSA9PSBOVUxMICkNCjIzNTk6ICAgICAgICAgICAgICAgIAkJCXsNCjIzNjA6ICAgICAgICAgICAgICAgIAkJCQkvKiBTdG9yZSB0aGUgaW5mb3JtYXRpb24gb24gdGhpcyBxdWV1ZS4gKi8NCjIzNjE6ICAgICAgICAgICAgICAgIAkJCQl4UXVldWVSZWdpc3RyeVsgdXggXS5wY1F1ZXVlTmFtZSA9IHBjUXVldWVOYW1lOw0KMjM2MjogICAgICAgICAgICAgICAgCQkJCXhRdWV1ZVJlZ2lzdHJ5WyB1eCBdLnhIYW5kbGUgPSB4UXVldWU7DQoyMzYzOiAgICAgICAgICAgICAgICANCjIzNjQ6ICAgICAgICAgICAgICAgIAkJCQl0cmFjZVFVRVVFX1JFR0lTVFJZX0FERCggeFF1ZXVlLCBwY1F1ZXVlTmFtZSApOw0KMjM2NTogICAgICAgICAgICAgICAgCQkJCWJyZWFrOw0KMjM2NjogICAgICAgICAgICAgICAgCQkJfQ0KMjM2NzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjM2ODogICAgICAgICAgICAgICAgCQkJew0KMjM2OTogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIzNzA6ICAgICAgICAgICAgICAgIAkJCX0NCjIzNzE6ICAgICAgICAgICAgICAgIAkJfQ0KMjM3MjogICAgICAgICAgICAgICAgCX0NCjIzNzM6ICAgICAgICAgICAgICAgIA0KMjM3NDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgKi8NCjIzNzU6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjM3NjogICAgICAgICAgICAgICAgDQoyMzc3OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFID4gMCApDQoyMzc4OiAgICAgICAgICAgICAgICANCjIzNzk6ICAgICAgICAgICAgICAgIAl2b2lkIHZRdWV1ZVVucmVnaXN0ZXJRdWV1ZSggUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMjM4MDogICAgICAgICAgICAgICAgCXsNCjIzODE6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eDsNCjIzODI6ICAgICAgICAgICAgICAgIA0KMjM4MzogICAgICAgICAgICAgICAgCQkvKiBTZWUgaWYgdGhlIGhhbmRsZSBvZiB0aGUgcXVldWUgYmVpbmcgdW5yZWdpc3RlcmVkIGluIGFjdHVhbGx5IGluIHRoZQ0KMjM4NDogICAgICAgICAgICAgICAgCQlyZWdpc3RyeS4gKi8NCjIzODU6ICAgICAgICAgICAgICAgIAkJZm9yKCB1eCA9ICggVUJhc2VUeXBlX3QgKSAwVTsgdXggPCAoIFVCYXNlVHlwZV90ICkgY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRTsgdXgrKyApDQoyMzg2OiAgICAgICAgICAgICAgICAJCXsNCjIzODc6ICAgICAgICAgICAgICAgIAkJCWlmKCB4UXVldWVSZWdpc3RyeVsgdXggXS54SGFuZGxlID09IHhRdWV1ZSApDQoyMzg4OiAgICAgICAgICAgICAgICAJCQl7DQoyMzg5OiAgICAgICAgICAgICAgICAJCQkJLyogU2V0IHRoZSBuYW1lIHRvIE5VTEwgdG8gc2hvdyB0aGF0IHRoaXMgc2xvdCBpZiBmcmVlIGFnYWluLiAqLw0KMjM5MDogICAgICAgICAgICAgICAgCQkJCXhRdWV1ZVJlZ2lzdHJ5WyB1eCBdLnBjUXVldWVOYW1lID0gTlVMTDsNCjIzOTE6ICAgICAgICAgICAgICAgIAkJCQlicmVhazsNCjIzOTI6ICAgICAgICAgICAgICAgIAkJCX0NCjIzOTM6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjIzOTQ6ICAgICAgICAgICAgICAgIAkJCXsNCjIzOTU6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMzk2OiAgICAgICAgICAgICAgICAJCQl9DQoyMzk3OiAgICAgICAgICAgICAgICAJCX0NCjIzOTg6ICAgICAgICAgICAgICAgIA0KMjM5OTogICAgICAgICAgICAgICAgCX0gLypsaW50ICFlODE4IHhRdWV1ZSBjb3VsZCBub3QgYmUgcG9pbnRlciB0byBjb25zdCBiZWNhdXNlIGl0IGlzIGEgdHlwZWRlZi4gKi8NCjI0MDA6ICAgICAgICAgICAgICAgIA0KMjQwMTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgKi8NCjI0MDI6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQwMzogICAgICAgICAgICAgICAgDQoyNDA0OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVElNRVJTID09IDEgKQ0KMjQwNTogICAgICAgICAgICAgICAgDQoyNDA2OiAgICAgICAgICAgICAgICAJdm9pZCB2UXVldWVXYWl0Rm9yTWVzc2FnZVJlc3RyaWN0ZWQoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCwgY29uc3QgQmFzZVR5cGVfdCB4V2FpdEluZGVmaW5pdGVseSApDQoyNDA3OiAgICAgICAgICAgICAgICAJew0KQkZEMDY5MjggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDY5MkEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNjkyQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA2OTJFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA2OTMwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDY5MzQgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQpCRkQwNjkzOCAgMDAyOEY4REUgICBTVyBBMiwgNDAoUzgpCjI0MDg6ICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDY5M0MgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNjk0MCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjI0MDk6ICAgICAgICAgICAgICAgIA0KMjQxMDogICAgICAgICAgICAgICAgCQkvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGJ5IGFwcGxpY2F0aW9uIGNvZGUgaGVuY2UgdGhlDQoyNDExOiAgICAgICAgICAgICAgICAJCSdSZXN0cmljdGVkJyBpbiBpdHMgbmFtZS4gIEl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLiAgSXQgaXMNCjI0MTI6ICAgICAgICAgICAgICAgIAkJZGVzaWduZWQgZm9yIHVzZSBieSBrZXJuZWwgY29kZSwgYW5kIGhhcyBzcGVjaWFsIGNhbGxpbmcgcmVxdWlyZW1lbnRzLg0KMjQxMzogICAgICAgICAgICAgICAgCQlJdCBjYW4gcmVzdWx0IGluIHZMaXN0SW5zZXJ0KCkgYmVpbmcgY2FsbGVkIG9uIGEgbGlzdCB0aGF0IGNhbiBvbmx5DQoyNDE0OiAgICAgICAgICAgICAgICAJCXBvc3NpYmx5IGV2ZXIgaGF2ZSBvbmUgaXRlbSBpbiBpdCwgc28gdGhlIGxpc3Qgd2lsbCBiZSBmYXN0LCBidXQgZXZlbg0KMjQxNTogICAgICAgICAgICAgICAgCQlzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHNjaGVkdWxlciBsb2NrZWQgYW5kIG5vdCBmcm9tIGEgY3JpdGljYWwNCjI0MTY6ICAgICAgICAgICAgICAgIAkJc2VjdGlvbi4gKi8NCjI0MTc6ICAgICAgICAgICAgICAgIA0KMjQxODogICAgICAgICAgICAgICAgCQkvKiBPbmx5IGRvIGFueXRoaW5nIGlmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBpbiB0aGUgcXVldWUuICBUaGlzIGZ1bmN0aW9uDQoyNDE5OiAgICAgICAgICAgICAgICAJCXdpbGwgbm90IGFjdHVhbGx5IGNhdXNlIHRoZSB0YXNrIHRvIGJsb2NrLCBqdXN0IHBsYWNlIGl0IG9uIGEgYmxvY2tlZA0KMjQyMDogICAgICAgICAgICAgICAgCQlsaXN0LiAgSXQgd2lsbCBub3QgYmxvY2sgdW50aWwgdGhlIHNjaGVkdWxlciBpcyB1bmxvY2tlZCAtIGF0IHdoaWNoDQoyNDIxOiAgICAgICAgICAgICAgICAJCXRpbWUgYSB5aWVsZCB3aWxsIGJlIHBlcmZvcm1lZC4gIElmIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIHF1ZXVlIHdoaWxlDQoyNDIyOiAgICAgICAgICAgICAgICAJCXRoZSBxdWV1ZSBpcyBsb2NrZWQsIGFuZCB0aGUgY2FsbGluZyB0YXNrIGJsb2NrcyBvbiB0aGUgcXVldWUsIHRoZW4gdGhlDQoyNDIzOiAgICAgICAgICAgICAgICAJCWNhbGxpbmcgdGFzayB3aWxsIGJlIGltbWVkaWF0ZWx5IHVuYmxvY2tlZCB3aGVuIHRoZSBxdWV1ZSBpcyB1bmxvY2tlZC4gKi8NCjI0MjQ6ICAgICAgICAgICAgICAgIAkJcHJ2TG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwNjk0NCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwNjk0NiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDY5NDggICAgICAwQzAwICAgTk9QCkJGRDA2OTRBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDY5NEUgIDAwNDRGQzYyICAgTFcgVjEsIDY4KFYwKQpCRkQwNjk1MiAgICAgIEVEN0YgICBMSSBWMCwgLTEKQkZEMDY5NTQgIDAwMDVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNjk2MgpCRkQwNjk1NiAgMEMwMDAwMDUgICBTTEwgWkVSTywgQTEsIDEKQkZEMDY5NTggICAgICAwQzAwICAgTk9QCkJGRDA2OTVBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDY5NUUgIDAwNDRGODAyICAgU1cgWkVSTywgNjgoVjApCkJGRDA2OTYyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDY5NjYgIDAwNDhGQzYyICAgTFcgVjEsIDcyKFYwKQpCRkQwNjk2QSAgICAgIEVEN0YgICBMSSBWMCwgLTEKQkZEMDY5NkMgIDAwMDVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNjk3QQpCRkQwNjk2RSAgMEMwMDAwMDUgICBTTEwgWkVSTywgQTEsIDEKQkZEMDY5NzAgICAgICAwQzAwICAgTk9QCkJGRDA2OTcyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDY5NzYgIDAwNDhGODAyICAgU1cgWkVSTywgNzIoVjApCkJGRDA2OTdBICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDY5N0MgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDgxODAKQkZEMDY5N0UgICAgICAwQzAwICAgTk9QCjI0MjU6ICAgICAgICAgICAgICAgIAkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID09ICggVUJhc2VUeXBlX3QgKSAwVSApDQpCRkQwNjk4MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA2OTg0ICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkKQkZEMDY5ODYgIDAwMEM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDY5QTIKMjQyNjogICAgICAgICAgICAgICAgCQl7DQoyNDI3OiAgICAgICAgICAgICAgICAJCQkvKiBUaGVyZSBpcyBub3RoaW5nIGluIHRoZSBxdWV1ZSwgYmxvY2sgZm9yIHRoZSBzcGVjaWZpZWQgcGVyaW9kLiAqLw0KMjQyODogICAgICAgICAgICAgICAgCQkJdlRhc2tQbGFjZU9uRXZlbnRMaXN0UmVzdHJpY3RlZCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApLCB4VGlja3NUb1dhaXQsIHhXYWl0SW5kZWZpbml0ZWx5ICk7DQpCRkQwNjk4QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA2OThFICAwMDI0MzA0MiAgIEFERElVIFYwLCBWMCwgMzYKQkZEMDY5OTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDY5OTQgIDAwMjRGQ0JFICAgTFcgQTEsIDM2KFM4KQpCRkQwNjk5OCAgMDAyOEZDREUgICBMVyBBMiwgNDAoUzgpCkJGRDA2OTlDICAyRTJDNzdFOCAgIEpBTFMgdlRhc2tQbGFjZU9uRXZlbnRMaXN0UmVzdHJpY3RlZApCRkQwNjk5RSAgICAgIDJFMkMgICBBTkRJIEEwLCBWMCwgMHg0MApCRkQwNjlBMCAgICAgIDBDMDAgICBOT1AKMjQyOTogICAgICAgICAgICAgICAgCQl9DQoyNDMwOiAgICAgICAgICAgICAgICAJCWVsc2UNCjI0MzE6ICAgICAgICAgICAgICAgIAkJew0KMjQzMjogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjQzMzogICAgICAgICAgICAgICAgCQl9DQoyNDM0OiAgICAgICAgICAgICAgICAJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwNjlBMiAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpCkJGRDA2OUE2ICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUKQkZEMDY5QTggIDBDMDAxREVFICAgTEIgVDcsIDMwNzIoVDYpCkJGRDA2OUFBICAgICAgMEMwMCAgIE5PUAoyNDM1OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDY5QUMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDY5QUUgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNjlCMCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA2OUIyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDY5QjQgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNjlCNiAgICAgIDBDMDAgICBOT1AKMjQzNjogICAgICAgICAgICAgICAgDQoyNDM3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RJTUVSUyAqLw0KMjQzODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDM5OiAgICAgICAgICAgICAgICANCjI0NDA6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMjQ0MTogICAgICAgICAgICAgICAgDQoyNDQyOiAgICAgICAgICAgICAgICAJUXVldWVTZXRIYW5kbGVfdCB4UXVldWVDcmVhdGVTZXQoIGNvbnN0IFVCYXNlVHlwZV90IHV4RXZlbnRRdWV1ZUxlbmd0aCApDQoyNDQzOiAgICAgICAgICAgICAgICAJew0KQkZEMDk4QUMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDk4QUUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOThCMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA5OEIyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5OEI0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMjQ0NDogICAgICAgICAgICAgICAgCVF1ZXVlU2V0SGFuZGxlX3QgcHhRdWV1ZTsNCjI0NDU6ICAgICAgICAgICAgICAgIA0KMjQ0NjogICAgICAgICAgICAgICAgCQlweFF1ZXVlID0geFF1ZXVlR2VuZXJpY0NyZWF0ZSggdXhFdmVudFF1ZXVlTGVuZ3RoLCBzaXplb2YoIFF1ZXVlX3QgKiApLCBxdWV1ZVFVRVVFX1RZUEVfU0VUICk7DQpCRkQwOThCOCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA5OEJDICAgICAgRUU4NCAgIExJIEExLCA0CkJGRDA5OEJFICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8KQkZEMDk4QzAgIDFFRkE3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljQ3JlYXRlCkJGRDA5OEMyICAwQzAwMUVGQSAgIExCIFM3LCAzMDcyKEswKQpCRkQwOThDNCAgICAgIDBDMDAgICBOT1AKQkZEMDk4QzYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyNDQ3OiAgICAgICAgICAgICAgICANCjI0NDg6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHB4UXVldWU7DQpCRkQwOThDQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjI0NDk6ICAgICAgICAgICAgICAgIAl9DQpCRkQwOThDRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOThEMCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA5OEQyICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDk4RDQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOThENiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5OEQ4ICAgICAgMEMwMCAgIE5PUAoyNDUwOiAgICAgICAgICAgICAgICANCjI0NTE6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMjQ1MjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDUzOiAgICAgICAgICAgICAgICANCjI0NTQ6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMjQ1NTogICAgICAgICAgICAgICAgDQoyNDU2OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UXVldWVBZGRUb1NldCggUXVldWVTZXRNZW1iZXJIYW5kbGVfdCB4UXVldWVPclNlbWFwaG9yZSwgUXVldWVTZXRIYW5kbGVfdCB4UXVldWVTZXQgKQ0KMjQ1NzogICAgICAgICAgICAgICAgCXsNCkJGRDA3RTlDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA3RTlFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDdFQTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwN0VBMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwN0VBNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA3RUE4ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKMjQ1ODogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjI0NTk6ICAgICAgICAgICAgICAgIA0KMjQ2MDogICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA3RUFDICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDA3RUFFICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwN0VCMCAgICAgIDBDMDAgICBOT1AKMjQ2MTogICAgICAgICAgICAgICAgCQl7DQoyNDYyOiAgICAgICAgICAgICAgICAJCQlpZiggKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZU9yU2VtYXBob3JlICktPnB4UXVldWVTZXRDb250YWluZXIgIT0gTlVMTCApDQpCRkQwN0VCMiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA3RUI2ICAwMDRDRkM0MiAgIExXIFYwLCA3NihWMCkKQkZEMDdFQkEgIDAwMDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdFQzYKMjQ2MzogICAgICAgICAgICAgICAgCQkJew0KMjQ2NDogICAgICAgICAgICAgICAgCQkJCS8qIENhbm5vdCBhZGQgYSBxdWV1ZS9zZW1hcGhvcmUgdG8gbW9yZSB0aGFuIG9uZSBxdWV1ZSBzZXQuICovDQoyNDY1OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDA3RUJFICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQpCRkQwN0VDMiAgICAgIENDMTMgICBCIDB4QkZEMDdFRUEKQkZEMDdFQzQgICAgICAwQzAwICAgTk9QCjI0NjY6ICAgICAgICAgICAgICAgIAkJCX0NCjI0Njc6ICAgICAgICAgICAgICAgIAkJCWVsc2UgaWYoICggKCBRdWV1ZV90ICogKSB4UXVldWVPclNlbWFwaG9yZSApLT51eE1lc3NhZ2VzV2FpdGluZyAhPSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwN0VDNiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA3RUNBICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkKQkZEMDdFQ0MgIDAwMDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdFRDgKMjQ2ODogICAgICAgICAgICAgICAgCQkJew0KMjQ2OTogICAgICAgICAgICAgICAgCQkJCS8qIENhbm5vdCBhZGQgYSBxdWV1ZS9zZW1hcGhvcmUgdG8gYSBxdWV1ZSBzZXQgaWYgdGhlcmUgYXJlIGFscmVhZHkNCjI0NzA6ICAgICAgICAgICAgICAgIAkJCQlpdGVtcyBpbiB0aGUgcXVldWUvc2VtYXBob3JlLiAqLw0KMjQ3MTogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSBwZEZBSUw7DQpCRkQwN0VEMCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKQkZEMDdFRDQgICAgICBDQzBBICAgQiAweEJGRDA3RUVBCkJGRDA3RUQ2ICAgICAgMEMwMCAgIE5PUAoyNDcyOiAgICAgICAgICAgICAgICAJCQl9DQoyNDczOiAgICAgICAgICAgICAgICAJCQllbHNlDQoyNDc0OiAgICAgICAgICAgICAgICAJCQl7DQoyNDc1OiAgICAgICAgICAgICAgICAJCQkJKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZU9yU2VtYXBob3JlICktPnB4UXVldWVTZXRDb250YWluZXIgPSB4UXVldWVTZXQ7DQpCRkQwN0VEOCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA3RURDICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkKQkZEMDdFRTAgIDAwNENGODYyICAgU1cgVjEsIDc2KFYwKQoyNDc2OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkUEFTUzsNCkJGRDA3RUU0ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA3RUU2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjQ3NzogICAgICAgICAgICAgICAgCQkJfQ0KMjQ3ODogICAgICAgICAgICAgICAgCQl9DQoyNDc5OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwN0VFQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA3RUVDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA5NkYwCkJGRDA3RUVFICAgICAgMEMwMCAgIE5PUAoyNDgwOiAgICAgICAgICAgICAgICANCjI0ODE6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwN0VGMCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjI0ODI6ICAgICAgICAgICAgICAgIAl9DQpCRkQwN0VGNCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwN0VGNiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA3RUY4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDdFRkEgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwN0VGQyAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA3RUZFICAgICAgMEMwMCAgIE5PUAoyNDgzOiAgICAgICAgICAgICAgICANCjI0ODQ6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMjQ4NTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDg2OiAgICAgICAgICAgICAgICANCjI0ODc6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMjQ4ODogICAgICAgICAgICAgICAgDQoyNDg5OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UXVldWVSZW1vdmVGcm9tU2V0KCBRdWV1ZVNldE1lbWJlckhhbmRsZV90IHhRdWV1ZU9yU2VtYXBob3JlLCBRdWV1ZVNldEhhbmRsZV90IHhRdWV1ZVNldCApDQoyNDkwOiAgICAgICAgICAgICAgICAJew0KQkZEMDc5RkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDc5RkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwN0EwMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA3QTAyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA3QTA0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDdBMDggIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQoyNDkxOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjQ5MjogICAgICAgICAgICAgICAgCVF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlT3JTZW1hcGhvcmUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZU9yU2VtYXBob3JlOw0KQkZEMDdBMEMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwN0ExMCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjI0OTM6ICAgICAgICAgICAgICAgIA0KMjQ5NDogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZU9yU2VtYXBob3JlLT5weFF1ZXVlU2V0Q29udGFpbmVyICE9IHhRdWV1ZVNldCApDQpCRkQwN0ExNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA3QTE4ICAwMDRDRkM2MiAgIExXIFYxLCA3NihWMCkKQkZEMDdBMUMgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwN0EyMCAgMDAwNTk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA3QTJFCkJGRDA3QTIyICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQpCRkQwN0EyNCAgICAgIDBDMDAgICBOT1AKMjQ5NTogICAgICAgICAgICAgICAgCQl7DQoyNDk2OiAgICAgICAgICAgICAgICAJCQkvKiBUaGUgcXVldWUgd2FzIG5vdCBhIG1lbWJlciBvZiB0aGUgc2V0LiAqLw0KMjQ5NzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDA3QTI2ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQpCRkQwN0EyQSAgICAgIENDMTcgICBCIDB4QkZEMDdBNUEKQkZEMDdBMkMgICAgICAwQzAwICAgTk9QCjI0OTg6ICAgICAgICAgICAgICAgIAkJfQ0KMjQ5OTogICAgICAgICAgICAgICAgCQllbHNlIGlmKCBweFF1ZXVlT3JTZW1hcGhvcmUtPnV4TWVzc2FnZXNXYWl0aW5nICE9ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA3QTJFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDdBMzIgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQpCRkQwN0EzNCAgMDAwNDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0E0MAoyNTAwOiAgICAgICAgICAgICAgICAJCXsNCjI1MDE6ICAgICAgICAgICAgICAgIAkJCS8qIEl0IGlzIGRhbmdlcm91cyB0byByZW1vdmUgYSBxdWV1ZSBmcm9tIGEgc2V0IHdoZW4gdGhlIHF1ZXVlIGlzDQoyNTAyOiAgICAgICAgICAgICAgICAJCQlub3QgZW1wdHkgYmVjYXVzZSB0aGUgcXVldWUgc2V0IHdpbGwgc3RpbGwgaG9sZCBwZW5kaW5nIGV2ZW50cyBmb3INCjI1MDM6ICAgICAgICAgICAgICAgIAkJCXRoZSBxdWV1ZS4gKi8NCjI1MDQ6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBSUw7DQpCRkQwN0EzOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKQkZEMDdBM0MgICAgICBDQzBFICAgQiAweEJGRDA3QTVBCkJGRDA3QTNFICAgICAgMEMwMCAgIE5PUAoyNTA1OiAgICAgICAgICAgICAgICAJCX0NCjI1MDY6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjUwNzogICAgICAgICAgICAgICAgCQl7DQoyNTA4OiAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA3QTQwICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDA3QTQyICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwN0E0NCAgICAgIDBDMDAgICBOT1AKMjUwOTogICAgICAgICAgICAgICAgCQkJew0KMjUxMDogICAgICAgICAgICAgICAgCQkJCS8qIFRoZSBxdWV1ZSBpcyBubyBsb25nZXIgY29udGFpbmVkIGluIHRoZSBzZXQuICovDQoyNTExOiAgICAgICAgICAgICAgICAJCQkJcHhRdWV1ZU9yU2VtYXBob3JlLT5weFF1ZXVlU2V0Q29udGFpbmVyID0gTlVMTDsNCkJGRDA3QTQ2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDdBNEEgIDAwNENGODAyICAgU1cgWkVSTywgNzYoVjApCjI1MTI6ICAgICAgICAgICAgICAgIAkJCX0NCjI1MTM6ICAgICAgICAgICAgICAgIAkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwN0E0RSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA3QTUwICAwQzAwNDBBQSAgIEJORVpDIFQyLCBncGlvX3BvcnRfYml0bWFwcwpCRkQwN0E1MiAgICAgIDBDMDAgICBOT1AKMjUxNDogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkUEFTUzsNCkJGRDA3QTU0ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA3QTU2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjUxNTogICAgICAgICAgICAgICAgCQl9DQoyNTE2OiAgICAgICAgICAgICAgICANCjI1MTc6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwN0E1QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjI1MTg6ICAgICAgICAgICAgICAgIAl9IC8qbGludCAhZTgxOCB4UXVldWVTZXQgY291bGQgbm90IGJlIGRlY2xhcmVkIGFzIHBvaW50aW5nIHRvIGNvbnN0IGFzIGl0IGlzIGEgdHlwZWRlZi4gKi8NCkJGRDA3QTVFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3QTYwICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDdBNjIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwN0E2NCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3QTY2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDdBNjggICAgICAwQzAwICAgTk9QCjI1MTk6ICAgICAgICAgICAgICAgIA0KMjUyMDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoyNTIxOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI1MjI6ICAgICAgICAgICAgICAgIA0KMjUyMzogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoyNTI0OiAgICAgICAgICAgICAgICANCjI1MjU6ICAgICAgICAgICAgICAgIAlRdWV1ZVNldE1lbWJlckhhbmRsZV90IHhRdWV1ZVNlbGVjdEZyb21TZXQoIFF1ZXVlU2V0SGFuZGxlX3QgeFF1ZXVlU2V0LCBUaWNrVHlwZV90IGNvbnN0IHhUaWNrc1RvV2FpdCApDQoyNTI2OiAgICAgICAgICAgICAgICAJew0KQkZEMDk0RTAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDk0RTIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOTRFNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA5NEU2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5NEU4ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDk0RUMgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQoyNTI3OiAgICAgICAgICAgICAgICAJUXVldWVTZXRNZW1iZXJIYW5kbGVfdCB4UmV0dXJuID0gTlVMTDsNCkJGRDA5NEYwICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQoyNTI4OiAgICAgICAgICAgICAgICANCjI1Mjk6ICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgeFF1ZXVlR2VuZXJpY1JlY2VpdmUoICggUXVldWVIYW5kbGVfdCApIHhRdWV1ZVNldCwgJnhSZXR1cm4sIHhUaWNrc1RvV2FpdCwgcGRGQUxTRSApOyAvKmxpbnQgIWU5NjEgQ2FzdGluZyBmcm9tIG9uZSB0eXBlZGVmIHRvIGFub3RoZXIgaXMgbm90IHJlZHVuZGFudC4gKi8NCkJGRDA5NEY0ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDk0RjggIDAwMTAzMDVFICAgQURESVUgVjAsIFM4LCAxNgpCRkQwOTRGQyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwOTRGRSAgMDAyNEZDREUgICBMVyBBMiwgMzYoUzgpCkJGRDA5NTAyICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8KQkZEMDk1MDQgIDA4MUU3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljUmVjZWl2ZQpCRkQwOTUwNiAgICAgIDA4MUUgICBMQlUgUzAsIDE0KFMxKQpCRkQwOTUwOCAgICAgIDBDMDAgICBOT1AKMjUzMDogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA5NTBBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMjUzMTogICAgICAgICAgICAgICAgCX0NCkJGRDA5NTBFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5NTEwICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDk1MTIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwOTUxNCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA5NTE2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDk1MTggICAgICAwQzAwICAgTk9QCjI1MzI6ICAgICAgICAgICAgICAgIA0KMjUzMzogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoyNTM0OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI1MzU6ICAgICAgICAgICAgICAgIA0KMjUzNjogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoyNTM3OiAgICAgICAgICAgICAgICANCjI1Mzg6ICAgICAgICAgICAgICAgIAlRdWV1ZVNldE1lbWJlckhhbmRsZV90IHhRdWV1ZVNlbGVjdEZyb21TZXRGcm9tSVNSKCBRdWV1ZVNldEhhbmRsZV90IHhRdWV1ZVNldCApDQoyNTM5OiAgICAgICAgICAgICAgICAJew0KQkZEMDk3REMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDk3REUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOTdFMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA5N0UyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5N0U0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKMjU0MDogICAgICAgICAgICAgICAgCVF1ZXVlU2V0TWVtYmVySGFuZGxlX3QgeFJldHVybiA9IE5VTEw7DQpCRkQwOTdFOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMjU0MTogICAgICAgICAgICAgICAgDQoyNTQyOiAgICAgICAgICAgICAgICAJCSggdm9pZCApIHhRdWV1ZVJlY2VpdmVGcm9tSVNSKCAoIFF1ZXVlSGFuZGxlX3QgKSB4UXVldWVTZXQsICZ4UmV0dXJuLCBOVUxMICk7IC8qbGludCAhZTk2MSBDYXN0aW5nIGZyb20gb25lIHR5cGVkZWYgdG8gYW5vdGhlciBpcyBub3QgcmVkdW5kYW50LiAqLw0KQkZEMDk3RUMgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwOTdGMCAgMDAxMDMwNUUgICBBRERJVSBWMCwgUzgsIDE2CkJGRDA5N0Y0ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA5N0Y2ICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8KQkZEMDk3RjggIDFENjQ3N0U4ICAgSkFMUyB4UXVldWVSZWNlaXZlRnJvbUlTUgpCRkQwOTdGQSAgMEMwMDFENjQgICBMQiBUMywgMzA3MihBMCkKQkZEMDk3RkMgICAgICAwQzAwICAgTk9QCjI1NDM6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwOTdGRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjI1NDQ6ICAgICAgICAgICAgICAgIAl9DQpCRkQwOTgwMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTgwNCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA5ODA2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDk4MDggICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOTgwQSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5ODBDICAgICAgMEMwMCAgIE5PUAoyNTQ1OiAgICAgICAgICAgICAgICANCjI1NDY6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMjU0NzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNTQ4OiAgICAgICAgICAgICAgICANCjI1NDk6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMjU1MDogICAgICAgICAgICAgICAgDQoyNTUxOiAgICAgICAgICAgICAgICAJc3RhdGljIEJhc2VUeXBlX3QgcHJ2Tm90aWZ5UXVldWVTZXRDb250YWluZXIoIGNvbnN0IFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlLCBjb25zdCBCYXNlVHlwZV90IHhDb3B5UG9zaXRpb24gKQ0KMjU1MjogICAgICAgICAgICAgICAgCXsNCkJGRDA0M0IwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA0M0IyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDQzQjQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNDNCNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNDNCOCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA0M0JDICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKMjU1MzogICAgICAgICAgICAgICAgCVF1ZXVlX3QgKnB4UXVldWVTZXRDb250YWluZXIgPSBweFF1ZXVlLT5weFF1ZXVlU2V0Q29udGFpbmVyOw0KQkZEMDQzQzAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwNDNDNCAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApCkJGRDA0M0M4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMjU1NDogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwNDNDQyAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMjU1NTogICAgICAgICAgICAgICAgDQoyNTU2OiAgICAgICAgICAgICAgICAJCS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZm9ybSBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQoyNTU3OiAgICAgICAgICAgICAgICANCjI1NTg6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweFF1ZXVlU2V0Q29udGFpbmVyICk7DQpCRkQwNDNEMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0M0Q0ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0M0VBCkJGRDA0M0Q4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0M0RBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDQzREMgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgKQkZEMDQzREUgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQpCRkQwNDNFMCAgMDlGRTMwQTAgICBBRERJVSBBMSwgWkVSTywgMjU1OApCRkQwNDNFMiAgICAgIDA5RkUgICBMQlUgVjEsIDE0KEEzKQpCRkQwNDNFNCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDQzRTYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDQzRTggICAgICAwQzAwICAgTk9QCjI1NTk6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweFF1ZXVlU2V0Q29udGFpbmVyLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWVTZXRDb250YWluZXItPnV4TGVuZ3RoICk7DQpCRkQwNDNFQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0M0VFICAgICAgNjlBRSAgIExXIFYxLCA1NihWMCkKQkZEMDQzRjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDNGNCAgICAgIDY5MkYgICBMVyBWMCwgNjAoVjApCkJGRDA0M0Y2ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwNDNGOCAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDQzRkEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ0MTAKQkZEMDQzRkUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDQ0MDAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwNDQwMiAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOApCRkQwNDQwNCAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApCkJGRDA0NDA2ICAwOUZGMzBBMCAgIEFERElVIEExLCBaRVJPLCAyNTU5CkJGRDA0NDA4ICAgICAgMDlGRiAgIExCVSBWMSwgLTEoQTMpCkJGRDA0NDBBICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNDQwQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNDQwRSAgICAgIDBDMDAgICBOT1AKMjU2MDogICAgICAgICAgICAgICAgDQoyNTYxOiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlU2V0Q29udGFpbmVyLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWVTZXRDb250YWluZXItPnV4TGVuZ3RoICkNCkJGRDA0NDEwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQ0MTQgICAgICA2OUFFICAgTFcgVjEsIDU2KFYwKQpCRkQwNDQxNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0NDFBICAgICAgNjkyRiAgIExXIFYwLCA2MChWMCkKQkZEMDQ0MUMgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA0NDFFICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwNDQyMCAgMDAzMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNDQ4NAoyNTYyOiAgICAgICAgICAgICAgICAJCXsNCjI1NjM6ICAgICAgICAgICAgICAgIAkJCXRyYWNlUVVFVUVfU0VORCggcHhRdWV1ZVNldENvbnRhaW5lciApOw0KMjU2NDogICAgICAgICAgICAgICAgDQoyNTY1OiAgICAgICAgICAgICAgICAJCQkvKiBUaGUgZGF0YSBjb3BpZWQgaXMgdGhlIGhhbmRsZSBvZiB0aGUgcXVldWUgdGhhdCBjb250YWlucyBkYXRhLiAqLw0KMjU2NjogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBydkNvcHlEYXRhVG9RdWV1ZSggcHhRdWV1ZVNldENvbnRhaW5lciwgJnB4UXVldWUsIHhDb3B5UG9zaXRpb24gKTsNCkJGRDA0NDI0ICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDQ0MjggIDAwMjAzMEJFICAgQURESVUgQTEsIFM4LCAzMgpCRkQwNDQyQyAgMDAyNEZDREUgICBMVyBBMiwgMzYoUzgpCkJGRDA0NDMwICAxNEU2NzdFOCAgIEpBTFMgcHJ2Q29weURhdGFUb1F1ZXVlCkJGRDA0NDMyICAwQzAwMTRFNiAgIExCVSBBMywgMzA3MihBMikKQkZEMDQ0MzQgICAgICAwQzAwICAgTk9QCkJGRDA0NDM2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjU2NzogICAgICAgICAgICAgICAgDQoyNTY4OiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZVNldENvbnRhaW5lci0+eFR4TG9jayA9PSBxdWV1ZVVOTE9DS0VEICkNCkJGRDA0NDNBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDQ0M0UgIDAwNDhGQzYyICAgTFcgVjEsIDcyKFYwKQpCRkQwNDQ0MiAgICAgIEVEN0YgICBMSSBWMCwgLTEKQkZEMDQ0NDQgIDAwMTVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNDQ3MgpCRkQwNDQ0NiAgMEMwMDAwMTUgICBTTEwgWkVSTywgUzUsIDEKQkZEMDQ0NDggICAgICAwQzAwICAgTk9QCjI1Njk6ICAgICAgICAgICAgICAgIAkJCXsNCjI1NzA6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWVTZXRDb250YWluZXItPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KQkZEMDQ0NEEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDQ0RSAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApCkJGRDA0NDUwICAwMDE4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0NDg0CjI1NzE6ICAgICAgICAgICAgICAgIAkJCQl7DQoyNTcyOiAgICAgICAgICAgICAgICAJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWVTZXRDb250YWluZXItPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KQkZEMDQ0NTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDQ1OCAgMDAyNDMwNDIgICBBRERJVSBWMCwgVjAsIDM2CkJGRDA0NDVDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA0NDVFICAyMkJDNzdFOCAgIEpBTFMgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0CkJGRDA0NDYwICAwQzAwMjJCQyAgIExXQzIgUzUsIDMwNzIoR1ApCkJGRDA0NDYyICAgICAgMEMwMCAgIE5PUApCRkQwNDQ2NCAgMDAwRTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNDQ4NAoyNTczOiAgICAgICAgICAgICAgICAJCQkJCXsNCjI1NzQ6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5LiAqLw0KMjU3NTogICAgICAgICAgICAgICAgCQkJCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA0NDY4ICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA0NDZBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDQ0NkUgICAgICBDQzBBICAgQiAweEJGRDA0NDg0CkJGRDA0NDcwICAgICAgMEMwMCAgIE5PUAoyNTc2OiAgICAgICAgICAgICAgICAJCQkJCX0NCjI1Nzc6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMjU3ODogICAgICAgICAgICAgICAgCQkJCQl7DQoyNTc5OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyNTgwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjI1ODE6ICAgICAgICAgICAgICAgIAkJCQl9DQoyNTgyOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMjU4MzogICAgICAgICAgICAgICAgCQkJCXsNCjI1ODQ6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjU4NTogICAgICAgICAgICAgICAgCQkJCX0NCjI1ODY6ICAgICAgICAgICAgICAgIAkJCX0NCjI1ODc6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjI1ODg6ICAgICAgICAgICAgICAgIAkJCXsNCjI1ODk6ICAgICAgICAgICAgICAgIAkJCQkoIHB4UXVldWVTZXRDb250YWluZXItPnhUeExvY2sgKSsrOw0KQkZEMDQ0NzIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNDQ3NiAgMDA0OEZDNDIgICBMVyBWMCwgNzIoVjApCkJGRDA0NDdBICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQpCRkQwNDQ3QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA0NDgwICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkKMjU5MDogICAgICAgICAgICAgICAgCQkJfQ0KMjU5MTogICAgICAgICAgICAgICAgCQl9DQoyNTkyOiAgICAgICAgICAgICAgICAJCWVsc2UNCjI1OTM6ICAgICAgICAgICAgICAgIAkJew0KMjU5NDogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjU5NTogICAgICAgICAgICAgICAgCQl9DQoyNTk2OiAgICAgICAgICAgICAgICANCjI1OTc6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwNDQ4NCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjI1OTg6ICAgICAgICAgICAgICAgIAl9DQpCRkQwNDQ4OCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNDQ4QSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA0NDhDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDQ0OEUgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNDQ5MCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA0NDkyICAgICAgMEMwMCAgIE5PUAoyNTk5OiAgICAgICAgICAgICAgICANCjI2MDA6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMjYwMTogICAgICAgICAgICAgICAgDQoyNjAyOiAgICAgICAgICAgICAgICANCjI2MDM6ICAgICAgICAgICAgICAgIA0KMjYwNDogICAgICAgICAgICAgICAgDQoyNjA1OiAgICAgICAgICAgICAgICANCjI2MDY6ICAgICAgICAgICAgICAgIA0KMjYwNzogICAgICAgICAgICAgICAgDQoyNjA4OiAgICAgICAgICAgICAgICANCjI2MDk6ICAgICAgICAgICAgICAgIA0KMjYxMDogICAgICAgICAgICAgICAgDQoyNjExOiAgICAgICAgICAgICAgICANCjI2MTI6ICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9zb3VyY2UvcG9ydGFibGUvbXBsYWIvcGljMzJtZWMxNHh4L3BvcnRtYWNyby5oICAtLS0tLS0tLS0tLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qDQoyOiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgVjguMi4xIC0gQ29weXJpZ2h0IChDKSAyMDE1IFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KMzogICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQNCjQ6ICAgICAgICAgICAgICAgICAgIA0KNTogICAgICAgICAgICAgICAgICAgICAgIFZJU0lUIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIFRPIEVOU1VSRSBZT1UgQVJFIFVTSU5HIFRIRSBMQVRFU1QgVkVSU0lPTi4NCjY6ICAgICAgICAgICAgICAgICAgIA0KNzogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQo4OiAgICAgICAgICAgICAgICAgICANCjk6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQoxMDogICAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQoxMTogICAgICAgICAgICAgICAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uID4+IUFORCBNT0RJRklFRCBCWSE8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgI2lmbmRlZiBQT1JUTUFDUk9fSA0KNzE6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KNzI6ICAgICAgICAgICAgICAgICAgDQo3MzogICAgICAgICAgICAgICAgICAjaWZkZWYgX19jcGx1c3BsdXMNCjc0OiAgICAgICAgICAgICAgICAgIGV4dGVybiAiQyIgew0KNzU6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo3NjogICAgICAgICAgICAgICAgICANCjc3OiAgICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjc4OiAgICAgICAgICAgICAgICAgICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQo3OTogICAgICAgICAgICAgICAgICAgKg0KODA6ICAgICAgICAgICAgICAgICAgICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCjgxOiAgICAgICAgICAgICAgICAgICAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCjgyOiAgICAgICAgICAgICAgICAgICAqDQo4MzogICAgICAgICAgICAgICAgICAgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQo4NDogICAgICAgICAgICAgICAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo4NTogICAgICAgICAgICAgICAgICAgKi8NCjg2OiAgICAgICAgICAgICAgICAgIA0KODc6ICAgICAgICAgICAgICAgICAgLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCjg4OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgIGNoYXINCjg5OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQo5MDogICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICBkb3VibGUNCjkxOiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCjkyOiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQo5MzogICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICB1aW50MzJfdA0KOTQ6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgbG9uZw0KOTU6ICAgICAgICAgICAgICAgICAgDQo5NjogICAgICAgICAgICAgICAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KOTc6ICAgICAgICAgICAgICAgICAgdHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQo5ODogICAgICAgICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQo5OTogICAgICAgICAgICAgICAgICANCjEwMDogICAgICAgICAgICAgICAgICNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCjEwMTogICAgICAgICAgICAgICAgICAgICB0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQoxMDI6ICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KMTAzOiAgICAgICAgICAgICAgICAgI2Vsc2UNCjEwNDogICAgICAgICAgICAgICAgICAgICB0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQoxMDU6ICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KMTA2OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMDc6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEwODogICAgICAgICAgICAgICAgIA0KMTA5OiAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KMTEwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgIDgNCjExMTogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAtMQ0KMTEyOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQoxMTM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjExNDogICAgICAgICAgICAgICAgIA0KMTE1OiAgICAgICAgICAgICAgICAgLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KMTE2OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0SVBMX1NISUZUICAgICAgICggMTBVTCApDQoxMTc6ICAgICAgICAgICAgICAgICAvKiBEb24ndCBzdHJhZGRsZSB0aGUgQ0VFIGJpdC4gIEludGVycnVwdHMgY2FsbGluZyBGcmVlUlRPUyBmdW5jdGlvbnMgc2hvdWxkDQoxMTg6ICAgICAgICAgICAgICAgICAgICBuZXZlciBoYXZlIGhpZ2hlciBJUEwgYml0cyBzZXQgYW55d2F5LiAqLw0KMTE5OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0QUxMX0lQTF9CSVRTICAgICggMHg3RlVMIDw8IHBvcnRJUExfU0hJRlQgKQ0KMTIwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0U1cwX0JJVCAgICAgICAgICggMHgwMSA8PCA4ICkNCjEyMTogICAgICAgICAgICAgICAgIA0KMTIyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMjM6ICAgICAgICAgICAgICAgICANCjEyNDogICAgICAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgdWxQb3J0R2V0Q1AwU3RhdHVzKCB2b2lkICkNCjEyNTogICAgICAgICAgICAgICAgIHsNCkJGRDA5QjRDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5QjRFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlCNTAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5QjUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5QzZDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5QzZFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlDNzAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5QzcyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5RDZDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5RDZFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlENzAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5RDcyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjEyNjogICAgICAgICAgICAgICAgIHVpbnQzMl90IHJ2Ow0KMTI3OiAgICAgICAgICAgICAgICAgDQoxMjg6ICAgICAgICAgICAgICAgICAJX19hc20gdm9sYXRpbGUoDQpCRkQwOUI1NCAgMDBGQzAyMEMgICBNRkMwIFMwLCBTdGF0dXMKQkZEMDlCNTggIDAwMDBGQTFFICAgU1cgUzAsIDAoUzgpCkJGRDA5Qzc0ICAwMEZDMDIwQyAgIE1GQzAgUzAsIFN0YXR1cwpCRkQwOUM3OCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkKQkZEMDlENzQgIDAwRkMwMjBDICAgTUZDMCBTMCwgU3RhdHVzCkJGRDA5RDc4ICAwMDAwRkExRSAgIFNXIFMwLCAwKFM4KQoxMjk6ICAgICAgICAgICAgICAgICAJCQkiXG5cdCINCjEzMDogICAgICAgICAgICAgICAgIAkJCSJtZmMwICUwLCQxMiwwICAgICAgXG5cdCINCjEzMTogICAgICAgICAgICAgICAgIAkJCTogIj1yIiAoIHJ2ICkgOjogKTsNCjEzMjogICAgICAgICAgICAgICAgIA0KMTMzOiAgICAgICAgICAgICAgICAgCXJldHVybiBydjsNCkJGRDA5QjVDICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwOUM3QyAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKQkZEMDlEN0MgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCjEzNDogICAgICAgICAgICAgICAgIH0NCkJGRDA5QjYwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5QjYyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDlCNjQgICAgICA0QTAyICAgTFcgUzAsIDgoU1ApCkJGRDA5QjY2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlCNjggICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwOUM4MCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUM4MiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA5Qzg0ICAgICAgNEEwMiAgIExXIFMwLCA4KFNQKQpCRkQwOUM4NiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5Qzg4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYKQkZEMDlEODAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlEODIgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwOUQ4NCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkKQkZEMDlEODYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUQ4OCAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CjEzNTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTM2OiAgICAgICAgICAgICAgICAgDQoxMzc6ICAgICAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRTZXRDUDBTdGF0dXMoIHVpbnQzMl90IG5ld19zdGF0dXMpDQoxMzg6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUI2QyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5QjZFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUI3MCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUI3MiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkKQkZEMDlDOEMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUM4RSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlDOTAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDlDOTIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpCkJGRDA5RDhDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDlEOEUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5RDkwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5RDkyICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQoxMzk6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgbmV3X3N0YXR1czsNCjE0MDogICAgICAgICAgICAgICAgIA0KMTQxOiAgICAgICAgICAgICAgICAgCV9fYXNtX18gX192b2xhdGlsZV9fKA0KQkZEMDlCNzYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpCkJGRDA5Qjc4ICAwMDRDMDAwOCAgIElOUyBaRVJPLCBUMCwgMSwgMApCRkQwOUI3QSAgMDJGQzAwNEMgICBNVEMwIFYwLCBTdGF0dXMKQkZEMDlCN0MgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwOUI3RSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwOUI4MCAgMEZCRTE4MDAgICBTQiBaRVJPLCA0MDMwKFpFUk8pCkJGRDA5Qzk2ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQpCRkQwOUM5OCAgMDA0QzAwMDggICBJTlMgWkVSTywgVDAsIDEsIDAKQkZEMDlDOUEgIDAyRkMwMDRDICAgTVRDMCBWMCwgU3RhdHVzCkJGRDA5QzlDICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDlDOUUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDlDQTAgIDBGQkUxODAwICAgU0IgWkVSTywgNDAzMChaRVJPKQpCRkQwOUQ5NiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkKQkZEMDlEOTggIDAwNEMwMDA4ICAgSU5TIFpFUk8sIFQwLCAxLCAwCkJGRDA5RDlBICAwMkZDMDA0QyAgIE1UQzAgVjAsIFN0YXR1cwpCRkQwOUQ5QyAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA5RDlFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA5REEwICAwRkJFMTgwMCAgIFNCIFpFUk8sIDQwMzAoWkVSTykKMTQyOiAgICAgICAgICAgICAgICAgCQkJIlxuXHQiDQoxNDM6ICAgICAgICAgICAgICAgICAJCQkibXRjMCAlMCwkMTIsMCAgICAgIFxuXHQiDQoxNDQ6ICAgICAgICAgICAgICAgICAJCQkiZWhiICAgICAgICAgICAgICAgIFxuXHQiDQoxNDU6ICAgICAgICAgICAgICAgICAJCQk6DQoxNDY6ICAgICAgICAgICAgICAgICAJCQk6InIiICggbmV3X3N0YXR1cyApIDogKTsNCjE0NzogICAgICAgICAgICAgICAgIH0NCkJGRDA5QjgyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5Qjg0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUI4NiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5Qjg4ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUNBMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUNBNCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDlDQTYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUNBOCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlEQTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlEQTQgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5REE2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlEQTggICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4CjE0ODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTQ5OiAgICAgICAgICAgICAgICAgDQoxNTA6ICAgICAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHVsUG9ydEdldENQMENhdXNlKCB2b2lkICkNCjE1MTogICAgICAgICAgICAgICAgIHsNCkJGRDA5QjhDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5QjhFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlCOTAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5QjkyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5QkNDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5QkNFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlCRDAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5QkQyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5QzJDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5QzJFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlDMzAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5QzMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5Q0FDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5Q0FFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlDQjAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5Q0IyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5Q0VDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5Q0VFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlDRjAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5Q0YyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjE1MjogICAgICAgICAgICAgICAgIHVpbnQzMl90IHJ2Ow0KMTUzOiAgICAgICAgICAgICAgICAgDQoxNTQ6ICAgICAgICAgICAgICAgICAJX19hc20gdm9sYXRpbGUoDQpCRkQwOUI5NCAgMDBGQzAyMEQgICBNRkMwIFMwLCBDYXVzZQpCRkQwOUI5OCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkKQkZEMDlCRDQgIDAwRkMwMjBEICAgTUZDMCBTMCwgQ2F1c2UKQkZEMDlCRDggIDAwMDBGQTFFICAgU1cgUzAsIDAoUzgpCkJGRDA5QzM0ICAwMEZDMDIwRCAgIE1GQzAgUzAsIENhdXNlCkJGRDA5QzM4ICAwMDAwRkExRSAgIFNXIFMwLCAwKFM4KQpCRkQwOUNCNCAgMDBGQzAyMEQgICBNRkMwIFMwLCBDYXVzZQpCRkQwOUNCOCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkKQkZEMDlDRjQgIDAwRkMwMjBEICAgTUZDMCBTMCwgQ2F1c2UKQkZEMDlDRjggIDAwMDBGQTFFICAgU1cgUzAsIDAoUzgpCjE1NTogICAgICAgICAgICAgICAgIAkJCSJcblx0Ig0KMTU2OiAgICAgICAgICAgICAgICAgCQkJIm1mYzAgJTAsJDEzLDAgICAgICBcblx0Ig0KMTU3OiAgICAgICAgICAgICAgICAgCQkJOiAiPXIiICggcnYgKSA6OiApOw0KMTU4OiAgICAgICAgICAgICAgICAgDQoxNTk6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KQkZEMDlCOUMgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA5QkRDICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwOUMzQyAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKQkZEMDlDQkMgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA5Q0ZDICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQoxNjA6ICAgICAgICAgICAgICAgICB9DQpCRkQwOUJBMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUJBMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA5QkE0ICAgICAgNEEwMiAgIExXIFMwLCA4KFNQKQpCRkQwOUJBNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5QkE4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYKQkZEMDlCRTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlCRTIgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwOUJFNCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkKQkZEMDlCRTYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUJFOCAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDA5QzQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5QzQyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDlDNDQgICAgICA0QTAyICAgTFcgUzAsIDgoU1ApCkJGRDA5QzQ2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlDNDggICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwOUNDMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUNDMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA5Q0M0ICAgICAgNEEwMiAgIExXIFMwLCA4KFNQKQpCRkQwOUNDNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5Q0M4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYKQkZEMDlEMDAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlEMDIgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwOUQwNCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkKQkZEMDlEMDYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUQwOCAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CjE2MTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTYyOiAgICAgICAgICAgICAgICAgDQoxNjM6ICAgICAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRTZXRDUDBDYXVzZSggdWludDMyX3QgbmV3X2NhdXNlICkNCjE2NDogICAgICAgICAgICAgICAgIHsNCkJGRDA5QkFDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDlCQUUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5QkIwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5QkIyICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQpCRkQwOUJFQyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5QkVFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUJGMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUJGMiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkKQkZEMDlDNEMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUM0RSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlDNTAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDlDNTIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpCkJGRDA5Q0NDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDlDQ0UgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5Q0QwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5Q0QyICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQpCRkQwOUQwQyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5RDBFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUQxMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUQxMiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkKMTY1OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIG5ld19jYXVzZTsNCjE2NjogICAgICAgICAgICAgICAgIA0KMTY3OiAgICAgICAgICAgICAgICAgCV9fYXNtX18gX192b2xhdGlsZV9fKA0KQkZEMDlCQjYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpCkJGRDA5QkI4ICAwMDREMDAwOCAgIEFERFFILlBIIFpFUk8sIFQwLCBaRVJPCkJGRDA5QkJBICAwMkZDMDA0RCAgIE1UQzAgVjAsIENhdXNlCkJGRDA5QkJDICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDlCQkUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDlCQzAgIDBGQkUxODAwICAgU0IgWkVSTywgNDAzMChaRVJPKQpCRkQwOUJGNiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkKQkZEMDlCRjggIDAwNEQwMDA4ICAgQUREUUguUEggWkVSTywgVDAsIFpFUk8KQkZEMDlCRkEgIDAyRkMwMDREICAgTVRDMCBWMCwgQ2F1c2UKQkZEMDlCRkMgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwOUJGRSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwOUMwMCAgMEZCRTE4MDAgICBTQiBaRVJPLCA0MDMwKFpFUk8pCkJGRDA5QzU2ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQpCRkQwOUM1OCAgMDA0RDAwMDggICBBRERRSC5QSCBaRVJPLCBUMCwgWkVSTwpCRkQwOUM1QSAgMDJGQzAwNEQgICBNVEMwIFYwLCBDYXVzZQpCRkQwOUM1QyAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA5QzVFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA5QzYwICAwRkJFMTgwMCAgIFNCIFpFUk8sIDQwMzAoWkVSTykKQkZEMDlDRDYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpCkJGRDA5Q0Q4ICAwMDREMDAwOCAgIEFERFFILlBIIFpFUk8sIFQwLCBaRVJPCkJGRDA5Q0RBICAwMkZDMDA0RCAgIE1UQzAgVjAsIENhdXNlCkJGRDA5Q0RDICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDlDREUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDlDRTAgIDBGQkUxODAwICAgU0IgWkVSTywgNDAzMChaRVJPKQpCRkQwOUQxNiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkKQkZEMDlEMTggIDAwNEQwMDA4ICAgQUREUUguUEggWkVSTywgVDAsIFpFUk8KQkZEMDlEMUEgIDAyRkMwMDREICAgTVRDMCBWMCwgQ2F1c2UKQkZEMDlEMUMgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwOUQxRSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwOUQyMCAgMEZCRTE4MDAgICBTQiBaRVJPLCA0MDMwKFpFUk8pCjE2ODogICAgICAgICAgICAgICAgIAkJCSJcblx0Ig0KMTY5OiAgICAgICAgICAgICAgICAgCQkJIm10YzAgJTAsJDEzLDAgICAgICBcblx0Ig0KMTcwOiAgICAgICAgICAgICAgICAgCQkJImVoYiAgICAgICAgICAgICAgICBcblx0Ig0KMTcxOiAgICAgICAgICAgICAgICAgCQkJOg0KMTcyOiAgICAgICAgICAgICAgICAgCQkJOiJyIiAoIG5ld19jYXVzZSApIDogKTsNCjE3MzogICAgICAgICAgICAgICAgIH0NCkJGRDA5QkMyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5QkM0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUJDNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5QkM4ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUMwMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUMwNCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDlDMDYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUMwOCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlDNjIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlDNjQgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5QzY2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlDNjggICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4CkJGRDA5Q0UyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5Q0U0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUNFNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5Q0U4ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUQyMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUQyNCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDlEMjYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUQyOCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKMTc0OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzU6ICAgICAgICAgICAgICAgICANCjE3NjogICAgICAgICAgICAgICAgIC8qIFRoaXMgY2xlYXJzIHRoZSBJUEwgYml0cywgdGhlbiBzZXRzIHRoZW0gdG8NCjE3NzogICAgICAgICAgICAgICAgIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gIEFuIGV4dHJhIGNoZWNrIGlzIHBlcmZvcm1lZCBpZg0KMTc4OiAgICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QgaW5hZHZlcnRlbnRseQ0KMTc5OiAgICAgICAgICAgICAgICAgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgSVBMDQoxODA6ICAgICAgICAgICAgICAgICB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHdoZW4gYW4gSVNSDQoxODE6ICAgICAgICAgICAgICAgICBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb25zIGFyZQ0KMTgyOiAgICAgICAgICAgICAgICAgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlIGludGVycnVwdCBBUEkgdG8NCjE4MzogICAgICAgICAgICAgICAgIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcyBzaW1wbGUgYXMgcG9zc2libGUuICovDQoxODQ6ICAgICAgICAgICAgICAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQoxODU6ICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjE4NjogICAgICAgICAgICAgICAgIAl7IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjE4NzogICAgICAgICAgICAgICAgIAl1aW50MzJfdCB1bFN0YXR1czsgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxODg6ICAgICAgICAgICAgICAgICAJCS8qIE1hc2sgaW50ZXJydXB0cyBhdCBhbmQgYmVsb3cgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovICAJCQkJCQkJCQkJXA0KMTg5OiAgICAgICAgICAgICAgICAgCQl1bFN0YXR1cyA9IHVsUG9ydEdldENQMFN0YXR1cygpOyAJCQkJCQkJCQkJCQkJCQkJCQlcDQoxOTA6ICAgICAgICAgICAgICAgICAJCS8qIElzIHRoZSBjdXJyZW50IElQTCBiZWxvdyBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFk/ICovIAkJCQkJCQkJCVwNCjE5MTogICAgICAgICAgICAgICAgIAkJaWYoICggKCB1bFN0YXR1cyAmIHBvcnRBTExfSVBMX0JJVFMgKSA+PiBwb3J0SVBMX1NISUZUICkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSAJCVwNCjE5MjogICAgICAgICAgICAgICAgIAkJeyAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjE5MzogICAgICAgICAgICAgICAgIAkJCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAgCQkJCQkJCQkJCQkJCQkJCQlcDQoxOTQ6ICAgICAgICAgICAgICAgICAJCQl2UG9ydFNldENQMFN0YXR1cyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7IAkJXA0KMTk1OiAgICAgICAgICAgICAgICAgCQl9IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTk2OiAgICAgICAgICAgICAgICAgICAgIH0NCjE5NzogICAgICAgICAgICAgICAgICNlbHNlIC8qIGNvbmZpZ0FTU0VSVCAqLw0KMTk4OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxOTk6ICAgICAgICAgICAgICAgICAJeyAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoyMDA6ICAgICAgICAgICAgICAgICAJdWludDMyX3QgdWxTdGF0dXM7ICAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMjAxOiAgICAgICAgICAgICAgICAgCQkvKiBNYXNrIGludGVycnVwdHMgYXQgYW5kIGJlbG93IHRoZSBrZXJuZWwgaW50ZXJydXB0IHByaW9yaXR5LiAqLyAJCQkJCQkJCQkJXA0KMjAyOiAgICAgICAgICAgICAgICAgCQl1bFN0YXR1cyA9IHVsUG9ydEdldENQMFN0YXR1cygpOyAJCQkJCQkJCQkJCQkJCQkJCQlcDQoyMDM6ICAgICAgICAgICAgICAgICAJCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMjA0OiAgICAgICAgICAgICAgICAgCQl2UG9ydFNldENQMFN0YXR1cyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7IAkJCVwNCjIwNTogICAgICAgICAgICAgICAgIAl9DQoyMDY6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnQVNTRVJUICovDQoyMDc6ICAgICAgICAgICAgICAgICANCjIwODogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgCQkJXA0KMjA5OiAgICAgICAgICAgICAgICAgeyAJCQkJCQkJCQkJCVwNCjIxMDogICAgICAgICAgICAgICAgIHVpbnQzMl90IHVsU3RhdHVzOyAJCQkJCQkJXA0KMjExOiAgICAgICAgICAgICAgICAgCS8qIFVubWFzayBhbGwgaW50ZXJydXB0cy4gKi8gCQkJXA0KMjEyOiAgICAgICAgICAgICAgICAgCXVsU3RhdHVzID0gdWxQb3J0R2V0Q1AwU3RhdHVzKCk7IAkJXA0KMjEzOiAgICAgICAgICAgICAgICAgCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAJCQlcDQoyMTQ6ICAgICAgICAgICAgICAgICAJdlBvcnRTZXRDUDBTdGF0dXMoIHVsU3RhdHVzICk7IAkJCVwNCjIxNTogICAgICAgICAgICAgICAgIH0NCjIxNjogICAgICAgICAgICAgICAgIA0KMjE3OiAgICAgICAgICAgICAgICAgDQoyMTg6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCjIxOTogICAgICAgICAgICAgICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQoyMjA6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQgkxDQoyMjE6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2VGFza0VudGVyQ3JpdGljYWwoKQ0KMjIyOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KMjIzOiAgICAgICAgICAgICAgICAgDQoyMjQ6ICAgICAgICAgICAgICAgICBleHRlcm4gVUJhc2VUeXBlX3QgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKTsNCjIyNTogICAgICAgICAgICAgICAgIGV4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggVUJhc2VUeXBlX3QgKTsNCjIyNjogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCkNCjIyNzogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKSB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQoyMjg6ICAgICAgICAgICAgICAgICANCjIyOTogICAgICAgICAgICAgICAgICNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQoyMzA6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gMQ0KMjMxOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyMzI6ICAgICAgICAgICAgICAgICANCjIzMzogICAgICAgICAgICAgICAgICNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KMjM0OiAgICAgICAgICAgICAgICAgDQoyMzU6ICAgICAgICAgICAgICAgICAJLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQoyMzY6ICAgICAgICAgICAgICAgICAJI2lmKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCjIzNzogICAgICAgICAgICAgICAgIAkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCjIzODogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjIzOTogICAgICAgICAgICAgICAgIA0KMjQwOiAgICAgICAgICAgICAgICAgCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCjI0MTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCjI0MjogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCjI0MzogICAgICAgICAgICAgICAgIA0KMjQ0OiAgICAgICAgICAgICAgICAgCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQ1OiAgICAgICAgICAgICAgICAgDQoyNDY6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgdXhUb3BQcmlvcml0eSA9ICggMzEgLSBfY2x6KCAoIHV4UmVhZHlQcmlvcml0aWVzICkgKSApDQoyNDc6ICAgICAgICAgICAgICAgICANCjI0ODogICAgICAgICAgICAgICAgICNlbmRpZiAvKiB0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZICovDQoyNDk6ICAgICAgICAgICAgICAgICANCjI1MDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjUxOiAgICAgICAgICAgICAgICAgDQoyNTI6ICAgICAgICAgICAgICAgICAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCjI1MzogICAgICAgICAgICAgICAgIA0KMjU0OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0WUlFTEQoKSAJCQkJCQlcDQoyNTU6ICAgICAgICAgICAgICAgICB7IAkJCQkJCQkJCQkJXA0KMjU2OiAgICAgICAgICAgICAgICAgdWludDMyX3QgdWxDYXVzZTsgCQkJCQkJCVwNCjI1NzogICAgICAgICAgICAgICAgICAgICAvKiBUcmlnZ2VyIHNvZnR3YXJlIGludGVycnVwdC4gKi8gCQlcDQoyNTg6ICAgICAgICAgICAgICAgICAgICAgdWxDYXVzZSA9IHVsUG9ydEdldENQMENhdXNlKCk7IAkJCVwNCjI1OTogICAgICAgICAgICAgICAgICAgICB1bENhdXNlIHw9IHBvcnRTVzBfQklUOyAJCQkJXA0KMjYwOiAgICAgICAgICAgICAgICAgICAgIHZQb3J0U2V0Q1AwQ2F1c2UoIHVsQ2F1c2UgKTsgCQkJXA0KMjYxOiAgICAgICAgICAgICAgICAgfQ0KMjYyOiAgICAgICAgICAgICAgICAgDQoyNjM6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhJbnRlcnJ1cHROZXN0aW5nOw0KMjY0OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOX0lTUigpIGNvbmZpZ0FTU0VSVCggdXhJbnRlcnJ1cHROZXN0aW5nID09IDAgKQ0KMjY1OiAgICAgICAgICAgICAgICAgDQoyNjY6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnROT1AoKSBfX2FzbSB2b2xhdGlsZSAoICJub3AiICkNCjI2NzogICAgICAgICAgICAgICAgIA0KMjY4OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNjk6ICAgICAgICAgICAgICAgICANCjI3MDogICAgICAgICAgICAgICAgIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KMjcxOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQ0KMjcyOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCjI3MzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjc0OiAgICAgICAgICAgICAgICAgDQoyNzU6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgCWlmKCB4U3dpdGNoUmVxdWlyZWQgKQlcDQoyNzY6ICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJeyAJCQkJCQlcDQoyNzc6ICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCXBvcnRZSUVMRCgpOwkJXA0KMjc4OiAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCX0NCjI3OTogICAgICAgICAgICAgICAgIA0KMjgwOiAgICAgICAgICAgICAgICAgLyogUmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlci4gKi8NCjI4MTogICAgICAgICAgICAgICAgICNpZmRlZiBfX0RFQlVHDQoyODI6ICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0UkVNT1ZFX1NUQVRJQ19RVUFMSUZJRVINCjI4MzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjg0OiAgICAgICAgICAgICAgICAgDQoyODU6ICAgICAgICAgICAgICAgICAjaWZkZWYgX19jcGx1c3BsdXMNCjI4NjogICAgICAgICAgICAgICAgIH0NCjI4NzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjg4OiAgICAgICAgICAgICAgICAgDQoyODk6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCjI5MDogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9zb3VyY2UvcG9ydGFibGUvbXBsYWIvcGljMzJtZWMxNHh4L3BvcnQuYyAgLS0tLS0tLS0tLS0tLS0tLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qDQoyOiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgVjguMi4xIC0gQ29weXJpZ2h0IChDKSAyMDE1IFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KMzogICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQNCjQ6ICAgICAgICAgICAgICAgICAgIA0KNTogICAgICAgICAgICAgICAgICAgICAgIFZJU0lUIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIFRPIEVOU1VSRSBZT1UgQVJFIFVTSU5HIFRIRSBMQVRFU1QgVkVSU0lPTi4NCjY6ICAgICAgICAgICAgICAgICAgIA0KNzogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQo4OiAgICAgICAgICAgICAgICAgICANCjk6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQoxMDogICAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQoxMTogICAgICAgICAgICAgICAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uID4+IUFORCBNT0RJRklFRCBCWSE8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNzE6ICAgICAgICAgICAgICAgICAgICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBJQzMyTVogcG9ydC4NCjcyOiAgICAgICAgICAgICAgICAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNzM6ICAgICAgICAgICAgICAgICAgDQo3NDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8eGMuaD4NCjc1OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxjcDBkZWZzLmg+DQo3NjogICAgICAgICAgICAgICAgICANCjc3OiAgICAgICAgICAgICAgICAgIC8qIFNjaGVkdWxlciBpbmNsdWRlIGZpbGVzLiAqLw0KNzg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQo3OTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGFzay5oIg0KODA6ICAgICAgICAgICAgICAgICAgDQo4MTogICAgICAgICAgICAgICAgICAjaWYgIWRlZmluZWQoX19NRUNfXykNCjgyOiAgICAgICAgICAgICAgICAgICAgICAjZXJyb3IgVGhpcyBwb3J0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBYQzMyIG9uIE1FQzE0eHguICBQbGVhc2UgdXBkYXRlIHlvdXIgQyBjb21waWxlciB2ZXJzaW9uIG9yIHNldHRpbmdzLg0KODM6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4NDogICAgICAgICAgICAgICAgICANCjg1OiAgICAgICAgICAgICAgICAgICNpZiggKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPj0gMHg3ICkgfHwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPT0gMCApICkNCjg2OiAgICAgICAgICAgICAgICAgIAkjZXJyb3IgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgbGVzcyB0aGFuIDcgYW5kIGdyZWF0ZXIgdGhhbiAwDQo4NzogICAgICAgICAgICAgICAgICAjZW5kaWYNCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KOTA6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0VElNRVJfUFJFU0NBTEUJOA0KOTE6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0UFJFU0NBTEVfQklUUwkxDQo5MjogICAgICAgICAgICAgICAgICANCjkzOiAgICAgICAgICAgICAgICAgIC8qIEJpdHMgd2l0aGluIHZhcmlvdXMgcmVnaXN0ZXJzLiAqLw0KOTQ6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0SUVfQklUCQkJCQkoIDB4MDAwMDAwMDEgKQ0KOTU6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0RVhMX0JJVAkJCQkJKCAweDAwMDAwMDAyICkNCjk2OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1YX0JJVAkJCQkJKCAweDAxMDAwMDAwICkgLyogQWxsb3cgYWNjZXNzIHRvIERTUCBpbnN0cnVjdGlvbnMuICovDQo5NzogICAgICAgICAgICAgICAgICANCjk4OiAgICAgICAgICAgICAgICAgIC8qIEJpdHMgd2l0aGluIHRoZSBDQVVTRSByZWdpc3Rlci4gKi8NCjk5OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydENPUkVfU1dfMAkJCQkoIDB4MDAwMDAxMDAgKQ0KMTAwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0Q09SRV9TV18xCQkJCSggMHgwMDAwMDIwMCApDQoxMDE6ICAgICAgICAgICAgICAgICANCjEwMjogICAgICAgICAgICAgICAgIC8qIFRoZSBFWEwgYml0IGlzIHNldCB0byBlbnN1cmUgaW50ZXJydXB0cyBkbyBub3Qgb2NjdXIgd2hpbGUgdGhlIGNvbnRleHQgb2YNCjEwMzogICAgICAgICAgICAgICAgIHRoZSBmaXJzdCB0YXNrIGlzIGJlaW5nIHJlc3RvcmVkLiAqLw0KMTA0OiAgICAgICAgICAgICAgICAgLyogTUVDMTR4eCBkb2VzIG5vdCBoYXZlIERTUCBIVyAqLw0KMTA1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0SU5JVElBTF9TUgkJCQkoIHBvcnRJRV9CSVQgfCBwb3J0RVhMX0JJVCApDQoxMDY6ICAgICAgICAgICAgICAgICANCjEwNzogICAgICAgICAgICAgICAgIC8qIE1FQzE0eHggUlRPUyBUaW1lciBNTUNSJ3MgKi8NCjEwODogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfUlRNUl9QUkVMT0FECSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QTAwMDc0MDR1bCkpDQoxMDk6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX1JUTVJfQ09OVFJPTAkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEEwMDA3NDA4dWwpKQ0KMTEwOiAgICAgICAgICAgICAgICAgDQoxMTE6ICAgICAgICAgICAgICAgICAvKiBNRUMxNHh4IEpUVklDIGV4dGVybmFsIGludGVycnVwdCBjb250cm9sbGVyDQoxMTI6ICAgICAgICAgICAgICAgICAgKiBpcyBtYXBwZWQgdG8gTTE0SyBjbG9zZWx5LWNvdXBsZWQgcGVyaXBoZXJhbCBzcGFjZS4NCjExMzogICAgICAgICAgICAgICAgICAqLw0KMTE0OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfQklUUE9TCSg0KQ0KMTE1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfTUFTSwkJKDF1bCA8PCAocG9ydEdJUlEyM19SVE9TX1RJTUVSX0JJVFBPUykpDQoxMTY6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TUkMJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMwRjB1bCkpDQoxMTc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TRVRFTgkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzBGNHVsKSkNCjExODogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX0NMUkVOCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMEY4dWwpKQ0KMTE5OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfUkVTVUxUCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMwRkN1bCkpDQoxMjA6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19BR0NUUkwJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzIzQ3VsKSkNCjEyMTogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUEJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMzRjB1bCkpDQoxMjI6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19QUklCCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDM0Y0dWwpKQ0KMTIzOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfUFJJQwkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzNGOHVsKSkNCjEyNDogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUQJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMzRkN1bCkpDQoxMjU6ICAgICAgICAgICAgICAgICANCjEyNjogICAgICAgICAgICAgICAgIC8qIE1JUFMgU29mdHdhcmUgSW50ZXJydXB0cyBhcmUgcm91dGVkIHRocm91Z2ggSlRWSUMgR0lSUTI0ICovDQoxMjc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9CSVRQT1MJKDEpDQoxMjg6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9NQVNLCSgxdWwgPDwgKHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9CSVRQT1MpKQ0KMTI5OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfU1JDCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMTAwdWwpKQ0KMTMwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfU0VURU4JCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMxMDR1bCkpDQoxMzE6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9DTFJFTgkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzEwOHVsKSkNCjEzMjogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1JFU1VMVAkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMTBDdWwpKQ0KMTMzOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfQUdDVFJMCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMyNDB1bCkpDQoxMzQ6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9QUklBCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDNDAwdWwpKQ0KMTM1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfUFJJQgkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzQwNHVsKSkNCjEzNjogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1BSSUMJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkM0MDh1bCkpDQoxMzc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9QUklECQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDNDBDdWwpKQ0KMTM4OiAgICAgICAgICAgICAgICAgDQoxMzk6ICAgICAgICAgICAgICAgICAvKg0KMTQwOiAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCBwb3J0LmMgZ2VuZXJhdGVzIGl0cyB0aWNrIGludGVycnVwdCBmcm9tIFRJTUVSMS4gIFRoZSB1c2VyIGNhbg0KMTQxOiAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgdGhpcyBiZWhhdmlvdXIgYnk6DQoxNDI6ICAgICAgICAgICAgICAgICAJMTogUHJvdmlkaW5nIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpLA0KMTQzOiAgICAgICAgICAgICAgICAgCSAgIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbmZpZ3VyZXMgdGhlIHRpbWVyLiAgVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQNCjE0NDogICAgICAgICAgICAgICAgIAkgICBhcyBhIHdlYWsgc3ltYm9sIGluIHRoaXMgZmlsZSBzbyBpZiB0aGUgc2FtZSBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgaW4gdGhlDQoxNDU6ICAgICAgICAgICAgICAgICAJICAgYXBwbGljYXRpb24gY29kZSB0aGVuIHRoZSB2ZXJzaW9uIGluIHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwgYmUgbGlua2VkDQoxNDY6ICAgICAgICAgICAgICAgICAJICAgaW50byB0aGUgYXBwbGljYXRpb24gaW4gcHJlZmVyZW5jZSB0byB0aGUgdmVyc2lvbiBkZWZpbmVkIGluIHRoaXMgZmlsZS4NCjE0NzogICAgICAgICAgICAgICAgIAkyOiBEZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIHRvIHRoZSB2ZWN0b3IgbnVtYmVyIG9mIHRoZSB0aW1lciB1c2VkDQoxNDg6ICAgICAgICAgICAgICAgICAJICAgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdGltZXIgMSBpcyB1c2VkIHRoZW4NCjE0OTogICAgICAgICAgICAgICAgIAkgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgc2V0IHRvIF9USU1FUl8xX1ZFQ1RPUi4NCjE1MDogICAgICAgICAgICAgICAgIAkgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1Igc2hvdWxkIGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4NCjE1MTogICAgICAgICAgICAgICAgIAkzOiBEZWZpbmUgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZQ0KMTUyOiAgICAgICAgICAgICAgICAgCSAgIHRpbWVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdGltZXIgMSBpcw0KMTUzOiAgICAgICAgICAgICAgICAgCSAgIHVzZWQgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSBpcyBkZWZpbmVkIHRvDQoxNTQ6ICAgICAgICAgICAgICAgICAJICAgSUZTMENMUiA9IF9JRlMwX1QxSUZfTUFTSy4NCjE1NTogICAgICAgICAgICAgICAgICovDQoxNTY6ICAgICAgICAgICAgICAgICAjaWZuZGVmIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUg0KMTU3OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIGdpcnEyM19iNA0KMTU4OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfU1JDID0gcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sNCjE1OTogICAgICAgICAgICAgICAgICNlbHNlDQoxNjA6ICAgICAgICAgICAgICAgICAJI2lmbmRlZiBjb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVA0KMTYxOiAgICAgICAgICAgICAgICAgCQkjZXJyb3IgSWYgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIGlzIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZSB0aGVuIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUIG11c3QgYWxzbyBiZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIGNvZGUuDQoxNjI6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNjM6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE2NDogICAgICAgICAgICAgICAgIA0KMTY1OiAgICAgICAgICAgICAgICAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBwcmUtbG9hZGluZyBvZiB0aGUgaW5pdGlhbCBSQSB3aXRoIHRoZSBhZGRyZXNzIG9mDQoxNjY6ICAgICAgICAgICAgICAgICBwcnZUYXNrRXhpdEVycm9yKCkgaW4gY2FzZSBpcyBtZXNzZXMgdXAgdW53aW5kaW5nIG9mIHRoZSBzdGFjayBpbiB0aGUNCjE2NzogICAgICAgICAgICAgICAgIGRlYnVnZ2VyIC0gaW4gd2hpY2ggY2FzZSBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTIGNhbiBiZSBkZWZpbmVkIGFzIDAgKE5VTEwpLiAqLw0KMTY4OiAgICAgICAgICAgICAgICAgI2lmZGVmIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCjE2OTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCWNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCjE3MDogICAgICAgICAgICAgICAgICNlbHNlDQoxNzE6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUwlwcnZUYXNrRXhpdEVycm9yDQoxNzI6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE3MzogICAgICAgICAgICAgICAgIA0KMTc0OiAgICAgICAgICAgICAgICAgLyogU2V0IGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyB0byAzIHRvIGFkZCBJU1Igc3RhY2sgY2hlY2tpbmcgdG8gdGFzaw0KMTc1OiAgICAgICAgICAgICAgICAgc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCjE3NjogICAgICAgICAgICAgICAgIHN0YWNrIG92ZXJmbG93IGhvb2sgZnVuY3Rpb24gKGJlY2F1c2UgdGhlIHN0YWNrIG92ZXJmbG93IGhvb2sgaXMgc3BlY2lmaWMgdG8gYQ0KMTc3OiAgICAgICAgICAgICAgICAgdGFzayBzdGFjaywgbm90IHRoZSBJU1Igc3RhY2spLiAqLw0KMTc4OiAgICAgICAgICAgICAgICAgI2lmKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCjE3OTogICAgICAgICAgICAgICAgIA0KMTgwOiAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHVzZSAweGE1IGFzIHRoZSBzdGFjayBmaWxsIGJ5dGVzIGFzIHRoYXQgaXMgdXNlZCBieSB0aGUga2VybmVybCBmb3INCjE4MTogICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFzayBzdGFja3MsIGFuZCBzbyB3aWxsIGxlZ2l0aW1hdGVseSBhcHBlYXIgaW4gbWFueSBwb3NpdGlvbnMgd2l0aGluDQoxODI6ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIElTUiBzdGFjay4gKi8NCjE4MzogICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFCTB4ZWUNCjE4NDogICAgICAgICAgICAgICAgIA0KMTg1OiAgICAgICAgICAgICAgICAgCXN0YXRpYyBjb25zdCB1aW50OF90IHVjRXhwZWN0ZWRTdGFja0J5dGVzW10gPSB7DQoxODY6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxODc6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxODg6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxODk6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxOTA6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUgfTsJXA0KMTkxOiAgICAgICAgICAgICAgICAgDQoxOTI6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCkgY29uZmlnQVNTRVJUKCAoIG1lbWNtcCggKCB2b2lkICogKSB4SVNSU3RhY2ssICggdm9pZCAqICkgdWNFeHBlY3RlZFN0YWNrQnl0ZXMsIHNpemVvZiggdWNFeHBlY3RlZFN0YWNrQnl0ZXMgKSApID09IDAgKSApDQoxOTM6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTk0OiAgICAgICAgICAgICAgICAgCS8qIERlZmluZSB0aGUgZnVuY3Rpb24gYXdheS4gKi8NCjE5NTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKQ0KMTk2OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCjE5NzogICAgICAgICAgICAgICAgIA0KMTk4OiAgICAgICAgICAgICAgICAgDQoxOTk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIwMDogICAgICAgICAgICAgICAgIA0KMjAxOiAgICAgICAgICAgICAgICAgLyoNCjIwMjogICAgICAgICAgICAgICAgICAqIFVzZWQgdG8gY2F0Y2ggdGFza3MgdGhhdCBhdHRlbXB0IHRvIHJldHVybiBmcm9tIHRoZWlyIGltcGxlbWVudGluZyBmdW5jdGlvbi4NCjIwMzogICAgICAgICAgICAgICAgICAqLw0KMjA0OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2VGFza0V4aXRFcnJvciggdm9pZCApOw0KMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIwNzogICAgICAgICAgICAgICAgIA0KMjA4OiAgICAgICAgICAgICAgICAgLyogUmVjb3JkcyB0aGUgaW50ZXJydXB0IG5lc3RpbmcgZGVwdGguICBUaGlzIGlzIGluaXRpYWxpc2VkIHRvIG9uZSBhcyBpdCBpcw0KMjA5OiAgICAgICAgICAgICAgICAgZGVjcmVtZW50ZWQgdG8gMCB3aGVuIHRoZSBmaXJzdCB0YXNrIHN0YXJ0cy4gKi8NCjIxMDogICAgICAgICAgICAgICAgIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4SW50ZXJydXB0TmVzdGluZyA9IDB4MDE7DQoyMTE6ICAgICAgICAgICAgICAgICANCjIxMjogICAgICAgICAgICAgICAgIC8qIFN0b3JlcyB0aGUgdGFzayBzdGFjayBwb2ludGVyIHdoZW4gYSBzd2l0Y2ggaXMgbWFkZSB0byB1c2UgdGhlIHN5c3RlbSBzdGFjay4gKi8NCjIxMzogICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID0gMDsNCjIxNDogICAgICAgICAgICAgICAgIA0KMjE1OiAgICAgICAgICAgICAgICAgLyogVGhlIHN0YWNrIHVzZWQgYnkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgdGhhdCBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KMjE2OiAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRSBdID0geyAwIH07DQoyMTc6ICAgICAgICAgICAgICAgICANCjIxODogICAgICAgICAgICAgICAgIC8qIFRoZSB0b3Agb2Ygc3RhY2sgdmFsdWUgZW5zdXJlcyB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgNiByZWdpc3RlcnMgb24NCjIxOTogICAgICAgICAgICAgICAgIHRoZSBjYWxsZXJzIHN0YWNrLCBhcyBzb21lIGZ1bmN0aW9ucyBzZWVtIHRvIHdhbnQgdG8gZG8gdGhpcy4gKi8NCjIyMDogICAgICAgICAgICAgICAgIGNvbnN0IFN0YWNrVHlwZV90ICogY29uc3QgeElTUlN0YWNrVG9wID0gJiggeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRSAtIDcgXSApOw0KMjIxOiAgICAgICAgICAgICAgICAgDQoyMjI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIyMzogICAgICAgICAgICAgICAgIA0KMjI0OiAgICAgICAgICAgICAgICAgLyogTG9jYWwgaW5saW5lIGFzc2VtYmx5IHJvdXRpbmVzIHRvIHJlYWQvd3JpdGUgTUlQUyBNMTRLIENQMCByZWdpc3RlcnMuICBBdm9pZHMNCjIyNTogICAgICAgICAgICAgICAgIHRoZSBuZWVkIGZvciBjb21waWxlciBpbnRyaW5zaWNzIHdoaWNoIHZhcnkgd2l0aCBjb21waWxlci4gKi8NCjIyNjogICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50MzJfdCBwcnZEaXNhYmxlSW50ZXJydXB0KCB2b2lkICkNCjIyNzogICAgICAgICAgICAgICAgIHsNCkJGRDA5QTk4ICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA5QTlBICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDlBOUMgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApCkJGRDA5QTlFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjIyODogICAgICAgICAgICAgICAgIHVpbnQzMl90IHByZXZfc3RhdGU7DQoyMjk6ICAgICAgICAgICAgICAgICANCjIzMDogICAgICAgICAgICAgICAgIAlfX2FzbSB2b2xhdGlsZSggImRpICUwOyBlaGIiIDogIj1yIiAoIHByZXZfc3RhdGUgKSA6OiAibWVtb3J5IiApOw0KQkZEMDlBQTAgIDQ3N0MwMDEwICAgREkgUzAKQkZEMDlBQTQgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDlBQTYgIEZBMUUxODAwICAgU0IgWkVSTywgLTE1MDYoWkVSTykKQkZEMDlBQTggIDAwMDBGQTFFICAgU1cgUzAsIDAoUzgpCjIzMTogICAgICAgICAgICAgICAgIAlyZXR1cm4gcHJldl9zdGF0ZTsNCkJGRDA5QUFDICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQoyMzI6ICAgICAgICAgICAgICAgICB9DQpCRkQwOUFCMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUFCMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA5QUI0ICAgICAgNEEwMiAgIExXIFMwLCA4KFNQKQpCRkQwOUFCNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5QUI4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYKMjMzOiAgICAgICAgICAgICAgICAgDQoyMzQ6ICAgICAgICAgICAgICAgICANCjIzNTogICAgICAgICAgICAgICAgIC8qDQoyMzY6ICAgICAgICAgICAgICAgICAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KMjM3OiAgICAgICAgICAgICAgICAgICovDQoyMzg6ICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQoyMzk6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTYzMCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwNTYzMiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA1NjM0ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDU2MzYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDU2MzggIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQpCRkQwNTYzQyAgMDAxQ0Y4QkUgICBTVyBBMSwgMjgoUzgpCkJGRDA1NjQwICAwMDIwRjhERSAgIFNXIEEyLCAzMihTOCkKMjQwOiAgICAgICAgICAgICAgICAgCS8qIEVuc3VyZSBieXRlIGFsaWdubWVudCBpcyBtYWludGFpbmVkIHdoZW4gbGVhdmluZyB0aGlzIGZ1bmN0aW9uLiAqLw0KMjQxOiAgICAgICAgICAgICAgICAgCXB4VG9wT2ZTdGFjay0tOw0KQkZEMDU2NDQgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNTY0NiAgNEM1ODAwMTggICBNT1ZaIFQxLCBUOCwgWkVSTwpCRkQwNTY0OCAgICAgIDRDNTggICBBRERJVSBWMCwgVjAsIC00CkJGRDA1NjRBICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMjQyOiAgICAgICAgICAgICAgICAgDQoyNDM6ICAgICAgICAgICAgICAgICAJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgMHhERUFEQkVFRjsNCkJGRDA1NjRFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2NTIgIERFQUQ0MUEzICAgTFVJIFYxLCAweERFQUQKQkZEMDU2NTYgIEJFRUY1MDYzICAgT1JJIFYxLCBWMSwgLTE2NjU3CkJGRDA1NjU4ICBFOUEwQkVFRiAgIExEQzEgRjIzLCAtNTcyOChUNykKQkZEMDU2NUEgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjI0NDogICAgICAgICAgICAgICAgIAlweFRvcE9mU3RhY2stLTsNCkJGRDA1NjVDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2NUUgIDRDNTgwMDE4ICAgTU9WWiBUMSwgVDgsIFpFUk8KQkZEMDU2NjAgICAgICA0QzU4ICAgQURESVUgVjAsIFYwLCAtNApCRkQwNTY2MiAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjI0NTogICAgICAgICAgICAgICAgIA0KMjQ2OiAgICAgICAgICAgICAgICAgCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIDB4MTIzNDU2Nzg7CS8qIFdvcmQgdG8gd2hpY2ggdGhlIHN0YWNrIHBvaW50ZXIgd2lsbCBiZSBsZWZ0IHBvaW50aW5nIGFmdGVyIGNvbnRleHQgcmVzdG9yZS4gKi8NCkJGRDA1NjY2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2NkEgIDEyMzQ0MUEzICAgTFVJIFYxLCAweDEyMzQKQkZEMDU2NkMgIDUwNjMxMjM0ICAgQURESSBTMSwgUzQsIDIwNTc5CkJGRDA1NjZFICA1Njc4NTA2MyAgIE9SSSBWMSwgVjEsIDIyMTM2CkJGRDA1NjcwICBFOUEwNTY3OCAgIFBSRUZYIDI5LCAxOShUOCkKQkZEMDU2NzIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjI0NzogICAgICAgICAgICAgICAgIAlweFRvcE9mU3RhY2stLTsNCkJGRDA1Njc0ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2NzYgIDRDNTgwMDE4ICAgTU9WWiBUMSwgVDgsIFpFUk8KQkZEMDU2NzggICAgICA0QzU4ICAgQURESVUgVjAsIFYwLCAtNApCRkQwNTY3QSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjI0ODogICAgICAgICAgICAgICAgIA0KMjQ5OiAgICAgICAgICAgICAgICAgCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHVsUG9ydEdldENQMENhdXNlKCk7DQpCRkQwNTY3RSAgNERDNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDA1NjgwICAgICAgNERDNiAgIEFERElVIFQ2LCBUNiwgMwpCRkQwNTY4MiAgICAgIDBDMDAgICBOT1AKQkZEMDU2ODQgICAgICAwQzYyICAgTU9WRSBWMSwgVjAKQkZEMDU2ODYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNTY4QSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjUwOiAgICAgICAgICAgICAgICAgCXB4VG9wT2ZTdGFjay0tOw0KQkZEMDU2OEMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNTY4RSAgNEM1ODAwMTggICBNT1ZaIFQxLCBUOCwgWkVSTwpCRkQwNTY5MCAgICAgIDRDNTggICBBRERJVSBWMCwgVjAsIC00CkJGRDA1NjkyICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMjUxOiAgICAgICAgICAgICAgICAgDQoyNTI6ICAgICAgICAgICAgICAgICAJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgcG9ydElOSVRJQUxfU1I7CS8qIENQMF9TVEFUVVMgKi8NCkJGRDA1Njk2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2OUEgICAgICBFRDgzICAgTEkgVjEsIDMKQkZEMDU2OUMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjI1MzogICAgICAgICAgICAgICAgIAlweFRvcE9mU3RhY2stLTsNCkJGRDA1NjlFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2QTAgIDRDNTgwMDE4ICAgTU9WWiBUMSwgVDgsIFpFUk8KQkZEMDU2QTIgICAgICA0QzU4ICAgQURESVUgVjAsIFYwLCAtNApCRkQwNTZBNCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjI1NDogICAgICAgICAgICAgICAgIA0KMjU1OiAgICAgICAgICAgICAgICAgCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHB4Q29kZTsgCQkvKiBDUDBfRVBDICovDQpCRkQwNTZBOCAgMDAxQ0ZDN0UgICBMVyBWMSwgMjgoUzgpCkJGRDA1NkFDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2QjAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjI1NjogICAgICAgICAgICAgICAgIAlweFRvcE9mU3RhY2stLTsNCkJGRDA1NkIyICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2QjQgIDRDNTgwMDE4ICAgTU9WWiBUMSwgVDgsIFpFUk8KQkZEMDU2QjYgICAgICA0QzU4ICAgQURESVUgVjAsIFYwLCAtNApCRkQwNTZCOCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjI1NzogICAgICAgICAgICAgICAgIA0KMjU4OiAgICAgICAgICAgICAgICAgCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTOwkvKiByYSAqLw0KQkZEMDU2QkMgIEJGRDA0MUEyICAgTFVJIFYwLCAweEJGRDAKQkZEMDU2QkUgIDMwNjJCRkQwICAgTERDMSBGMzAsIDEyMzg2KFMwKQpCRkQwNTZDMCAgN0JCRDMwNjIgICBBRERJVSBWMSwgVjAsIDMxNjc3CkJGRDA1NkMyICBGQzVFN0JCRCAgIEFERElVUEMgQTMsIDQwNjIzMDIKQkZEMDU2QzQgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNTZDOCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjU5OiAgICAgICAgICAgICAgICAgCXB4VG9wT2ZTdGFjayAtPSAxNTsNCkJGRDA1NkNBICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDU2Q0UgIEZGQzQzMDQyICAgQURESVUgVjAsIFYwLCAtNjAKQkZEMDU2RDAgIEY4NUVGRkM0ICAgTFcgUzgsIC0xOTU0KEEwKQpCRkQwNTZEMiAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpCjI2MDogICAgICAgICAgICAgICAgIA0KMjYxOiAgICAgICAgICAgICAgICAgCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHB2UGFyYW1ldGVyczsgLyogUGFyYW1ldGVycyB0byBwYXNzIGluLiAqLw0KQkZEMDU2RDYgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQpCRkQwNTZEQSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA1NkRFICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyNjI6ICAgICAgICAgICAgICAgICAJcHhUb3BPZlN0YWNrIC09IDE1Ow0KQkZEMDU2RTAgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwNTZFNCAgRkZDNDMwNDIgICBBRERJVSBWMCwgVjAsIC02MApCRkQwNTZFNiAgRjg1RUZGQzQgICBMVyBTOCwgLTE5NTQoQTApCkJGRDA1NkU4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMjYzOiAgICAgICAgICAgICAgICAgDQoyNjQ6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCkJGRDA1NkVDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKMjY1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDU2RjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDU2RjIgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwNTZGNCAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA1NkY2ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDU2RjggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNTZGQSAgICAgIDBDMDAgICBOT1AKMjY2OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNjc6ICAgICAgICAgICAgICAgICANCjI2ODogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlRhc2tFeGl0RXJyb3IoIHZvaWQgKQ0KMjY5OiAgICAgICAgICAgICAgICAgew0KQkZEMDdCQkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDdCQkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwN0JDMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA3QkMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjI3MDogICAgICAgICAgICAgICAgIAkvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KMjcxOiAgICAgICAgICAgICAgICAgCWl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KMjcyOiAgICAgICAgICAgICAgICAgCXNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCjI3MzogICAgICAgICAgICAgICAgIA0KMjc0OiAgICAgICAgICAgICAgICAgCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCjI3NTogICAgICAgICAgICAgICAgIAlkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQoyNzY6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB1eFNhdmVkVGFza1N0YWNrUG9pbnRlciA9PSAwVUwgKTsNCkJGRDA3QkM0ICA4MDJDRkM1QyAgIExXIFYwLCAtMzI3MjQoR1ApCkJGRDA3QkM4ICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3QkRFCkJGRDA3QkNDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA3QkNFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDdCRDAgIDhBQUMzMDgyICAgQURESVUgQTAsIFYwLCAtMzAwMzYKQkZEMDdCRDIgICAgICA4QUFDICAgU0IgQTEsIDEyKFYwKQpCRkQwN0JENCAgMDExNDMwQTAgICBBRERJVSBBMSwgWkVSTywgMjc2CkJGRDA3QkQ4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwN0JEQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwN0JEQyAgICAgIDBDMDAgICBOT1AKMjc3OiAgICAgICAgICAgICAgICAgCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCkJGRDA3QkRFICA0REE2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwU3RhdHVzCkJGRDA3QkUwICAgICAgNERBNiAgIEFERElVIFQ1LCBUNSwgMwpCRkQwN0JFMiAgICAgIDBDMDAgICBOT1AKQkZEMDdCRTQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwN0JFOCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA3QkVDICAwMDAxNDFBMiAgIExVSSBWMCwgMHgxCkJGRDA3QkYwICBGQzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xMDI0CkJGRDA3QkYyICA0NDkzRkMwMCAgIExXIFpFUk8sIDE3NTU1KFpFUk8pCkJGRDA3QkY0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwN0JGNiAgNTA0MDAwNDIgICBTUkwgVjAsIFYwLCAxMApCRkQwN0JGOCAgQjA0MjUwNDAgICBPUkkgVjAsIFpFUk8sIC0yMDQxNApCRkQwN0JGQSAgMDAwM0IwNDIgICBTTFRJVSBWMCwgVjAsIDMKQkZEMDdCRkUgIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdDMjQKQkZEMDdDMDIgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwN0MwNiAgRkZGRTQxQTIgICBMVUkgVjAsIDB4RkZGRQpCRkQwN0MwOCAgNTA0MkZGRkUgICBMVyBSQSwgMjA1NDYoUzgpCkJGRDA3QzBBICAwM0ZGNTA0MiAgIE9SSSBWMCwgVjAsIDEwMjMKQkZEMDdDMEUgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA3QzEwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDdDMTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwN0MxOCAgMEMwMDUwNDIgICBPUkkgVjAsIFYwLCAzMDcyCkJGRDA3QzFBICAgICAgMEMwMCAgIE5PUApCRkQwN0MxQyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwN0MxRSAgNERCNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwU3RhdHVzCkJGRDA3QzIwICAgICAgNERCNiAgIEFERElVIFQ1LCBUNSwgLTUKQkZEMDdDMjIgICAgICAwQzAwICAgTk9QCjI3ODogICAgICAgICAgICAgICAgIAlmb3IoIDs7ICk7DQpCRkQwN0MyNCAgICAgIENGRkYgICBCIDB4QkZEMDdDMjQKQkZEMDdDMjYgICAgICAwQzAwICAgTk9QCjI3OTogICAgICAgICAgICAgICAgIH0NCjI4MDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjgxOiAgICAgICAgICAgICAgICAgDQoyODI6ICAgICAgICAgICAgICAgICAvKg0KMjgzOiAgICAgICAgICAgICAgICAgICogU2V0dXAgYSB0aW1lciBmb3IgYSByZWd1bGFyIHRpY2suICBUaGlzIGZ1bmN0aW9uIHVzZXMgcGVyaXBoZXJhbCB0aW1lciAxLg0KMjg0OiAgICAgICAgICAgICAgICAgICogVGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHdlYWsgc28gYW4gYXBwbGljYXRpb24gd3JpdGVyIGNhbiB1c2UgYSBkaWZmZXJlbnQNCjI4NTogICAgICAgICAgICAgICAgICAqIHRpbWVyIGJ5IHJlZGVmaW5pbmcgdGhpcyBpbXBsZW1lbnRhdGlvbi4gIElmIGEgZGlmZmVyZW50IHRpbWVyIGlzIHVzZWQgdGhlbg0KMjg2OiAgICAgICAgICAgICAgICAgICogY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIG11c3QgYWxzbyBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdG8NCjI4NzogICAgICAgICAgICAgICAgICAqIGVuc3VyZSB0aGUgUlRPUyBwcm92aWRlZCB0aWNrIGludGVycnVwdCBoYW5kbGVyIGlzIGluc3RhbGxlZCBvbiB0aGUgY29ycmVjdA0KMjg4OiAgICAgICAgICAgICAgICAgICogdmVjdG9yIG51bWJlci4gIFdoZW4gVGltZXIgMSBpcyB1c2VkIHRoZSB2ZWN0b3IgbnVtYmVyIGlzIGRlZmluZWQgYXMNCjI4OTogICAgICAgICAgICAgICAgICAqIF9USU1FUl8xX1ZFQ1RPUi4NCjI5MDogICAgICAgICAgICAgICAgICAqLw0KMjkxOiAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoIHdlYWsgKSkgdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCggdm9pZCApDQoyOTI6ICAgICAgICAgICAgICAgICB7DQpCRkQwNjI4NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNjI4NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA2Mjg4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDYyOEEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMjkzOiAgICAgICAgICAgICAgICAgCS8qIE1FQzE0eHggUlRPUyBUaW1lciB3aG9zZSBpbnB1dCBjbG9jayBpcyAzMktIeiAqLw0KMjk0OiAgICAgICAgICAgICAgICAgCWNvbnN0IHVpbnQzMl90IHByZWxvYWQgPSAoIDMyNzY4dWwgLyAoIGNvbmZpZ1RJQ0tfUkFURV9IWiApICk7DQpCRkQwNjI4QyAgICAgIEVEMjAgICBMSSBWMCwgMzIKQkZEMDYyOEUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyOTU6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBwcmVsb2FkICE9IDBVTCApOw0KQkZEMDYyOTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjI5NiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjJBQwpCRkQwNjI5QSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNjI5QyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA2MjlFICA4QUFDMzA4MiAgIEFERElVIEEwLCBWMCwgLTMwMDM2CkJGRDA2MkEwICAgICAgOEFBQyAgIFNCIEExLCAxMihWMCkKQkZEMDYyQTIgIDAxMjczMEEwICAgQURESVUgQTEsIFpFUk8sIDI5NQpCRkQwNjJBNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDYyQTggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDYyQUEgICAgICAwQzAwICAgTk9QCjI5NjogICAgICAgICAgICAgICAgIA0KMjk3OiAgICAgICAgICAgICAgICAgCXBvcnRNTUNSX1JUTVJfQ09OVFJPTCA9IDB1bDsNCkJGRDA2MkFDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDA2MkIwICA3NDA4NTA0MiAgIE9SSSBWMCwgVjAsIDI5NzA0CkJGRDA2MkIyICBFODIwNzQwOCAgIEpBTFMgMHhCODExRDA0MApCRkQwNjJCNCAgICAgIEU4MjAgICBTVyBTMCwgMChWMCkKMjk4OiAgICAgICAgICAgICAgICAgCXBvcnRNTUNSX1JUTVJfUFJFTE9BRCA9IHByZWxvYWQ7DQpCRkQwNjJCNiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwNjJCQSAgNzQwNDUwNDIgICBPUkkgVjAsIFYwLCAyOTcwMApCRkQwNjJCQyAgRkM3RTc0MDQgICBKQUxTIDB4QjgwOUY4RkMKQkZEMDYyQkUgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwNjJDMiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjk5OiAgICAgICAgICAgICAgICAgDQozMDA6ICAgICAgICAgICAgICAgICAJcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1NSQyA9ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sgKTsNCkJGRDA2MkM0ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA2MkM2ICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkKQkZEMDYyQzggIEMwRjA1MDQyICAgT1JJIFYwLCBWMCwgLTE2MTQ0CkJGRDA2MkNDICAgICAgRUQ5MCAgIExJIFYxLCAxNgpCRkQwNjJDRSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMzAxOiAgICAgICAgICAgICAgICAgCXBvcnRNTUNSX0pUVklDX0dJUlEyM19QUklBICY9IH4oIDB4MEZ1bCA8PCAxNiApOw0KQkZEMDYyRDAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDYyRDIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNjJENCAgQzNGMDUwNDIgICBPUkkgVjAsIFYwLCAtMTUzNzYKQkZEMDYyRDggIEJGRkY0MUEzICAgTFVJIFYxLCAweEJGRkYKQkZEMDYyREEgIDUwNjNCRkZGICAgTERDMSBGMzEsIDIwNTc5KFJBKQpCRkQwNjJEQyAgQzNGMDUwNjMgICBPUkkgVjEsIFYxLCAtMTUzNzYKQkZEMDYyRTAgICAgICA2QTMwICAgTFcgQTAsIDAoVjEpCkJGRDA2MkUyICBGRkYwNDFBMyAgIExVSSBWMSwgMHhGRkYwCkJGRDA2MkU0ICA1MDYzRkZGMCAgIExXIFJBLCAyMDU3OShTMCkKQkZEMDYyRTYgIEZGRkY1MDYzICAgT1JJIFYxLCBWMSwgLTEKQkZEMDYyRTggIDQ0OUNGRkZGICAgTFcgUkEsIDE3NTY0KFJBKQpCRkQwNjJFQSAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTAKQkZEMDYyRUMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjMwMjogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9KVFZJQ19HSVJRMjNfUFJJQSB8PSAoICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApIDw8IDE2ICk7DQpCRkQwNjJFRSAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNjJGMCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA2MkYyICBDM0YwNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTM3NgpCRkQwNjJGNiAgQkZGRjQxQTMgICBMVUkgVjEsIDB4QkZGRgpCRkQwNjJGOCAgNTA2M0JGRkYgICBMREMxIEYzMSwgMjA1NzkoUkEpCkJGRDA2MkZBICBDM0YwNTA2MyAgIE9SSSBWMSwgVjEsIC0xNTM3NgpCRkQwNjJGRSAgICAgIDY5QjAgICBMVyBWMSwgMChWMSkKQkZEMDYzMDAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjMwMzogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9KVFZJQ19HSVJRMjNfU0VURU4gPSAoIHBvcnRHSVJRMjNfUlRPU19USU1FUl9NQVNLICk7DQpCRkQwNjMwMiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNjMwNCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA2MzA2ICBDMEY0NTA0MiAgIE9SSSBWMCwgVjAsIC0xNjE0MApCRkQwNjMwQSAgICAgIEVEOTAgICBMSSBWMSwgMTYKQkZEMDYzMEMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjMwNDogICAgICAgICAgICAgICAgIA0KMzA1OiAgICAgICAgICAgICAgICAgCXBvcnRNTUNSX1JUTVJfQ09OVFJPTCA9IDB4MEZ1Ow0KQkZEMDYzMEUgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDYzMTIgIDc0MDg1MDQyICAgT1JJIFYwLCBWMCwgMjk3MDQKQkZEMDYzMTQgIEVEOEY3NDA4ICAgSkFMUyAweEI4MTFEQjFFCkJGRDA2MzE2ICAgICAgRUQ4RiAgIExJIFYxLCAxNQpCRkQwNjMxOCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMzA2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDYzMUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDYzMUMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNjMxRSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA2MzIwICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDYzMjIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNjMyNCAgICAgIDBDMDAgICBOT1AKMzA3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMDg6ICAgICAgICAgICAgICAgICANCjMwOTogICAgICAgICAgICAgICAgIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIodm9pZCkNCjMxMDogICAgICAgICAgICAgICAgIHsNCkJGRDA5N0E4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5N0FBICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDk3QUMgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOTdBRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAozMTE6ICAgICAgICAgICAgICAgICAJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KMzEyOiAgICAgICAgICAgICAgICAgCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQozMTM6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB1eEludGVycnVwdE5lc3RpbmcgPT0gMTAwMFVMICk7DQpCRkQwOTdCMCAgODAxNEZDN0MgICBMVyBWMSwgLTMyNzQ4KEdQKQpCRkQwOTdCNCAgMDNFODMwNDAgICBBRERJVSBWMCwgWkVSTywgMTAwMApCRkQwOTdCOCAgMDAwQTk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA5N0QwCkJGRDA5N0JBICAwQzAwMDAwQSAgIFNMTCBaRVJPLCBUMiwgMQpCRkQwOTdCQyAgICAgIDBDMDAgICBOT1AKQkZEMDk3QkUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDk3QzAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwOTdDMiAgOEFBQzMwODIgICBBRERJVSBBMCwgVjAsIC0zMDAzNgpCRkQwOTdDNCAgICAgIDhBQUMgICBTQiBBMSwgMTIoVjApCkJGRDA5N0M2ICAwMTM5MzBBMCAgIEFERElVIEExLCBaRVJPLCAzMTMKQkZEMDk3Q0EgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA5N0NDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA5N0NFICAgICAgMEMwMCAgIE5PUAozMTQ6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTdEMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTdEMiAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA5N0Q0ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDk3RDYgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwOTdEOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5N0RBICAgICAgMEMwMCAgIE5PUAozMTU6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxNjogICAgICAgICAgICAgICAgIA0KMzE3OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCjMxODogICAgICAgICAgICAgICAgIHsNCkJGRDA2ODk4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA2ODlBICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDY4OUMgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwNjg5RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAozMTk6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQozMjA6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KMzIxOiAgICAgICAgICAgICAgICAgDQozMjI6ICAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQozMjM6ICAgICAgICAgICAgICAgICAJew0KMzI0OiAgICAgICAgICAgICAgICAgCQkvKiBGaWxsIHRoZSBJU1Igc3RhY2sgdG8gbWFrZSBpdCBlYXN5IHRvIGFzc2VzIGhvdyBtdWNoIGlzIGJlaW5nIHVzZWQuICovDQozMjU6ICAgICAgICAgICAgICAgICAJCW1lbXNldCggKCB2b2lkICogKSB4SVNSU3RhY2ssIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBzaXplb2YoIHhJU1JTdGFjayApICk7DQpCRkQwNjhBMCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwNjhBMiAgMzA4MkJGRDIgICBMREMxIEYzMCwgMTI0MTgoUzIpCkJGRDA2OEE0ICBBRDY4MzA4MiAgIEFERElVIEEwLCBWMCwgLTIxMTQ0CkJGRDA2OEE2ICAgICAgQUQ2OCAgIEJORVogVjAsIDB4QkZEMDY5NzgKQkZEMDY4QTggIDAwRUUzMEEwICAgQURESVUgQTEsIFpFUk8sIDIzOApCRkQwNjhBQSAgMzBDMDAwRUUgICBST1RSIEEzLCBUNiwgNgpCRkQwNjhBQyAgMEJFMDMwQzAgICBBRERJVSBBMiwgWkVSTywgMzA0MApCRkQwNjhBRSAgICAgIDBCRTAgICBMQlUgQTMsIDAoQTIpCkJGRDA2OEIwICAzNkY2NzdFOCAgIEpBTFMgMHhCRkQwNkRFQwpCRkQwNjhCMiAgMEMwMDM2RjYgICBMSFUgUzcsIDMwNzIoUzYpCkJGRDA2OEI0ICAgICAgMEMwMCAgIE5PUAozMjY6ICAgICAgICAgICAgICAgICAJfQ0KMzI3OiAgICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICovDQozMjg6ICAgICAgICAgICAgICAgICANCjMyOTogICAgICAgICAgICAgICAgIAkvKiBDbGVhciB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGZsYWcuICovDQozMzA6ICAgICAgICAgICAgICAgICAJcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1NSQyA9IChwb3J0R0lSUTI0X00xNEtfU09GVElSUTBfTUFTSyk7DQpCRkQwNjhCNiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNjhCOCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA2OEJBICBDMTAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xNjEyOApCRkQwNjhCRSAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwNjhDMCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMzMxOiAgICAgICAgICAgICAgICAgDQozMzI6ICAgICAgICAgICAgICAgICAJLyogU2V0IHNvZnR3YXJlIHRpbWVyIHByaW9yaXR5Lg0KMzMzOiAgICAgICAgICAgICAgICAgCUVhY2ggR0lSUW4gaGFzIG9uZSBuaWJibGUgY29udGFpbmluZyBpdHMgcHJpb3JpdHkgKi8NCjMzNDogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9KVFZJQ19HSVJRMjRfUFJJQSAmPSB+KDB4RjB1bCk7DQpCRkQwNjhDMiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNjhDNCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA2OEM2ICBDNDAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTM2MApCRkQwNjhDQSAgQkZGRjQxQTMgICBMVUkgVjEsIDB4QkZGRgpCRkQwNjhDQyAgNTA2M0JGRkYgICBMREMxIEYzMSwgMjA1NzkoUkEpCkJGRDA2OENFICBDNDAwNTA2MyAgIE9SSSBWMSwgVjEsIC0xNTM2MApCRkQwNjhEMiAgICAgIDZBMzAgICBMVyBBMCwgMChWMSkKQkZEMDY4RDQgIEZGMEYzMDYwICAgQURESVUgVjEsIFpFUk8sIC0yNDEKQkZEMDY4RDYgIDQ0OUNGRjBGICAgTFcgVDgsIDE3NTY0KFQ3KQpCRkQwNjhEOCAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTAKQkZEMDY4REEgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjMzNTogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9KVFZJQ19HSVJRMjRfUFJJQSB8PSAoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgNCApOw0KQkZEMDY4REMgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDY4REUgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNjhFMCAgQzQwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTUzNjAKQkZEMDY4RTQgIEJGRkY0MUEzICAgTFVJIFYxLCAweEJGRkYKQkZEMDY4RTYgIDUwNjNCRkZGICAgTERDMSBGMzEsIDIwNTc5KFJBKQpCRkQwNjhFOCAgQzQwMDUwNjMgICBPUkkgVjEsIFYxLCAtMTUzNjAKQkZEMDY4RUMgICAgICA2OUIwICAgTFcgVjEsIDAoVjEpCkJGRDA2OEVFICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQozMzY6ICAgICAgICAgICAgICAgICANCjMzNzogICAgICAgICAgICAgICAgIAkvKiBFbmFibGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KMzM4OiAgICAgICAgICAgICAgICAgCXBvcnRNTUNSX0pUVklDX0dJUlEyNF9TRVRFTiA9ICggcG9ydEdJUlEyNF9NMTRLX1NPRlRJUlEwX01BU0sgKTsNCkJGRDA2OEYwICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA2OEYyICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkKQkZEMDY4RjQgIEMxMDQ1MDQyICAgT1JJIFYwLCBWMCwgLTE2MTI0CkJGRDA2OEY4ICAgICAgRUQ4MiAgIExJIFYxLCAyCkJGRDA2OEZBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQozMzk6ICAgICAgICAgICAgICAgICANCjM0MDogICAgICAgICAgICAgICAgIAkvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIHdpbGwgaGF2ZSBiZWVuDQozNDE6ICAgICAgICAgICAgICAgICAJZGlzYWJsZWQgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUuICovDQozNDI6ICAgICAgICAgICAgICAgICAJdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoKTsNCkJGRDA2OEZDICAzMTQyNzdFOCAgIEpBTFMgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQKQkZEMDY4RkUgIDBDMDAzMTQyICAgQURESVUgVDIsIFYwLCAzMDcyCkJGRDA2OTAwICAgICAgMEMwMCAgIE5PUAozNDM6ICAgICAgICAgICAgICAgICANCjM0NDogICAgICAgICAgICAgICAgIAkvKiBLaWNrIG9mZiB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBzbyBmYXIuDQozNDU6ICAgICAgICAgICAgICAgICAJSXRzIHN0YWNrIGxvY2F0aW9uIGlzIGxvYWRlZCBpbnRvIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyLiAqLw0KMzQ2OiAgICAgICAgICAgICAgICAgCXV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID0gKiggVUJhc2VUeXBlX3QgKiApIHB4Q3VycmVudFRDQjsNCkJGRDA2OTAyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApCkJGRDA2OTA2ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwNjkwOCAgODAyQ0Y4NUMgICBTVyBWMCwgLTMyNzI0KEdQKQozNDc6ICAgICAgICAgICAgICAgICAJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KQkZEMDY5MEMgIDA1NUE3N0U4ICAgSkFMUyAweEJGRDAwQUI0CkJGRDA2OTBFICAgICAgMDU1QSAgIEFERFUgVjAsIEExLCBBMQpCRkQwNjkxMCAgICAgIDBDMDAgICBOT1AKMzQ4OiAgICAgICAgICAgICAgICAgDQozNDk6ICAgICAgICAgICAgICAgICAJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlIGFzIHRoZSB0YXNrcyB3aWxsIG5vdyBiZSBleGVjdXRpbmchICBDYWxsIHRoZSB0YXNrDQozNTA6ICAgICAgICAgICAgICAgICAJZXhpdCBlcnJvciBmdW5jdGlvbiB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGEgc3RhdGljIGZ1bmN0aW9uDQozNTE6ICAgICAgICAgICAgICAgICAJbm90IGJlaW5nIGNhbGxlZCBpbiB0aGUgY2FzZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3cml0ZXIgb3ZlcnJpZGVzIHRoaXMNCjM1MjogICAgICAgICAgICAgICAgIAlmdW5jdGlvbmFsaXR5IGJ5IGRlZmluaW5nIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MuICovDQozNTM6ICAgICAgICAgICAgICAgICAJcHJ2VGFza0V4aXRFcnJvcigpOw0KQkZEMDY5MTIgIDNEREU3N0U4ICAgSkFMUyBwcnZUYXNrRXhpdEVycm9yCkJGRDA2OTE0ICAwQzAwM0RERSAgIExIIFQ2LCAzMDcyKFM4KQpCRkQwNjkxNiAgICAgIDBDMDAgICBOT1AKMzU0OiAgICAgICAgICAgICAgICAgDQozNTU6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHBkRkFMU0U7DQpCRkQwNjkxOCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjM1NjogICAgICAgICAgICAgICAgIH0NCkJGRDA2OTFBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA2OTFDICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkKQkZEMDY5MUUgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQpCRkQwNjkyMCAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0CkJGRDA2OTIyICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDY5MjQgICAgICAwQzAwICAgTk9QCjM1NzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzU4OiAgICAgICAgICAgICAgICAgDQozNTk6ICAgICAgICAgICAgICAgICB2b2lkIHZQb3J0SW5jcmVtZW50VGljayggdm9pZCApDQozNjA6ICAgICAgICAgICAgICAgICB7DQpCRkQwNjlCOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNjlCQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA2OUJDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDY5QkUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzYxOiAgICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1czsNCjM2MjogICAgICAgICAgICAgICAgIHVpbnQzMl90IHVsQ2F1c2U7DQozNjM6ICAgICAgICAgICAgICAgICANCjM2NDogICAgICAgICAgICAgICAgIAl1eFNhdmVkU3RhdHVzID0gdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKTsNCkJGRDA2OUMwICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDY5QzQgICAgICAwQzAwICAgTk9QCkJGRDA2OUM2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzY1OiAgICAgICAgICAgICAgICAgCXsNCjM2NjogICAgICAgICAgICAgICAgIAkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KQkZEMDY5Q0EgIDEwNDA3N0U4ICAgSkFMUyB4VGFza0luY3JlbWVudFRpY2sKQkZEMDY5Q0MgIDBDMDAxMDQwICAgQURESSBWMCwgWkVSTywgMzA3MgpCRkQwNjlDRSAgICAgIDBDMDAgICBOT1AKQkZEMDY5RDAgIDAwMTA0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY5RjQKMzY3OiAgICAgICAgICAgICAgICAgCQl7DQozNjg6ICAgICAgICAgICAgICAgICAJCQkvKiBQZW5kIGEgY29udGV4dCBzd2l0Y2guICovDQozNjk6ICAgICAgICAgICAgICAgICAJCQl1bENhdXNlID0gdWxQb3J0R2V0Q1AwQ2F1c2UoKTsNCkJGRDA2OUQ0ICA0REM2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDY5RDYgICAgICA0REM2ICAgQURESVUgVDYsIFQ2LCAzCkJGRDA2OUQ4ICAgICAgMEMwMCAgIE5PUApCRkQwNjlEQSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjM3MDogICAgICAgICAgICAgICAgIAkJCXVsQ2F1c2UgfD0gKCAxdWwgPDwgOFVMICk7DQpCRkQwNjlERSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA2OUUyICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwNjlFNiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjM3MTogICAgICAgICAgICAgICAgIAkJCXZQb3J0U2V0Q1AwQ2F1c2UoIHVsQ2F1c2UgKTsNCkJGRDA2OUVBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDY5RUUgIDRERDY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDA2OUYwICAgICAgNERENiAgIEFERElVIFQ2LCBUNiwgLTUKQkZEMDY5RjIgICAgICAwQzAwICAgTk9QCjM3MjogICAgICAgICAgICAgICAgIAkJfQ0KMzczOiAgICAgICAgICAgICAgICAgCX0NCjM3NDogICAgICAgICAgICAgICAgIAl2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHV4U2F2ZWRTdGF0dXMgKTsNCkJGRDA2OUY0ICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkKQkZEMDY5RjggIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDY5RkEgICAgICA0RDVFICAgQURESVUgVDIsIFQyLCAtMQpCRkQwNjlGQyAgICAgIDBDMDAgICBOT1AKMzc1OiAgICAgICAgICAgICAgICAgDQozNzY6ICAgICAgICAgICAgICAgICAJLyogTG9vayBmb3IgdGhlIElTUiBzdGFjayBnZXR0aW5nIG5lYXIgb3IgcGFzdCBpdHMgbGltaXQuICovDQozNzc6ICAgICAgICAgICAgICAgICAJcG9ydENIRUNLX0lTUl9TVEFDSygpOw0KQkZEMDY5RkUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDZBMDAgIDMwODJCRkQyICAgTERDMSBGMzAsIDEyNDE4KFMyKQpCRkQwNkEwMiAgQUQ2ODMwODIgICBBRERJVSBBMCwgVjAsIC0yMTE0NApCRkQwNkEwNCAgICAgIEFENjggICBCTkVaIFYwLCAweEJGRDA2QUQ2CkJGRDA2QTA2ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA2QTA4ICAzMEEyQkZEMSAgIExEQzEgRjMwLCAxMjQ1MChTMSkKQkZEMDZBMEEgIDhBOTQzMEEyICAgQURESVUgQTEsIFYwLCAtMzAwNjAKQkZEMDZBMEMgICAgICA4QTk0ICAgU0IgQTEsIDQoUzEpCkJGRDA2QTBFICAgICAgRUYxNCAgIExJIEEyLCAyMApCRkQwNkExMCAgM0RBNjc3RTggICBKQUxTIDB4QkZEMDdCNEMKQkZEMDZBMTIgIDBDMDAzREE2ICAgTEggVDUsIDMwNzIoQTIpCkJGRDA2QTE0ICAgICAgMEMwMCAgIE5PUApCRkQwNkExNiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNkEyQwpCRkQwNkExQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNkExQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA2QTFFICA4QUFDMzA4MiAgIEFERElVIEEwLCBWMCwgLTMwMDM2CkJGRDA2QTIwICAgICAgOEFBQyAgIFNCIEExLCAxMihWMCkKQkZEMDZBMjIgIDAxNzkzMEEwICAgQURESVUgQTEsIFpFUk8sIDM3NwpCRkQwNkEyNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDZBMjggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDZBMkEgICAgICAwQzAwICAgTk9QCjM3ODogICAgICAgICAgICAgICAgIA0KMzc5OiAgICAgICAgICAgICAgICAgCS8qIENsZWFyIHRpbWVyIGludGVycnVwdC4gKi8NCjM4MDogICAgICAgICAgICAgICAgIAljb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpOw0KQkZEMDZBMkMgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDZBMkUgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNkEzMCAgQzBGMDUwNDIgICBPUkkgVjAsIFYwLCAtMTYxNDQKQkZEMDZBMzQgICAgICBFRDkwICAgTEkgVjEsIDE2CkJGRDA2QTM2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQozODE6ICAgICAgICAgICAgICAgICB9DQpCRkQwNkEzOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNkEzQSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA2QTNDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDZBM0UgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNkE0MCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA2QTQyICAgICAgMEMwMCAgIE5PUAozODI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM4MzogICAgICAgICAgICAgICAgIA0KMzg0OiAgICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoIHZvaWQgKQ0KMzg1OiAgICAgICAgICAgICAgICAgew0KQkZEMDhFQkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDhFQkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOEVDMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4RUMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjM4NjogICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4U2F2ZWRTdGF0dXNSZWdpc3RlcjsNCjM4NzogICAgICAgICAgICAgICAgIA0KMzg4OiAgICAgICAgICAgICAgICAgCXBydkRpc2FibGVJbnRlcnJ1cHQoKTsNCkJGRDA4RUM0ICA0RDRDNzdFOCAgIEpBTFMgcHJ2RGlzYWJsZUludGVycnVwdApCRkQwOEVDNiAgICAgIDRENEMgICBBRERJVSBUMiwgVDIsIDYKQkZEMDhFQzggICAgICAwQzAwICAgTk9QCjM4OTogICAgICAgICAgICAgICAgIAl1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgPSB1bFBvcnRHZXRDUDBTdGF0dXMoKSB8IDB4MDE7DQpCRkQwOEVDQSAgNERBNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cwpCRkQwOEVDQyAgICAgIDREQTYgICBBRERJVSBUNSwgVDUsIDMKQkZEMDhFQ0UgICAgICAwQzAwICAgTk9QCkJGRDA4RUQwICAwMDAxNTA0MiAgIE9SSSBWMCwgVjAsIDEKQkZEMDhFRDQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozOTA6ICAgICAgICAgICAgICAgICANCjM5MTogICAgICAgICAgICAgICAgIAkvKiBUaGlzIGNsZWFycyB0aGUgSVBMIGJpdHMsIHRoZW4gc2V0cyB0aGVtIHRvDQozOTI6ICAgICAgICAgICAgICAgICAJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZA0KMzkzOiAgICAgICAgICAgICAgICAgCWZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGEgcHJpb3JpdHkgYWJvdmUNCjM5NDogICAgICAgICAgICAgICAgIAljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgc28sIHdoZW4gdXNlZCBjb3JyZWN0bHksIHRoZSBhY3Rpb24NCjM5NTogICAgICAgICAgICAgICAgIAljYW4gb25seSByZXN1bHQgaW4gdGhlIElQTCBiZWluZyB1bmNoYW5nZWQgb3IgcmFpc2VkLCBhbmQgdGhlcmVmb3JlIG5ldmVyDQozOTY6ICAgICAgICAgICAgICAgICAJbG93ZXJlZC4gKi8NCjM5NzogICAgICAgICAgICAgICAgIAl2UG9ydFNldENQMFN0YXR1cyggKCAoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciAmICggfnBvcnRBTExfSVBMX0JJVFMgKSApICkgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKTsNCkJGRDA4RUQ4ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDhFREMgIEZGRkU0MUEyICAgTFVJIFYwLCAweEZGRkUKQkZEMDhFREUgIDUwNDJGRkZFICAgTFcgUkEsIDIwNTQ2KFM4KQpCRkQwOEVFMCAgMDNGRjUwNDIgICBPUkkgVjAsIFYwLCAxMDIzCkJGRDA4RUU0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwOEVFNiAgMEMwMDUwNDIgICBPUkkgVjAsIFYwLCAzMDcyCkJGRDA4RUU4ICAgICAgMEMwMCAgIE5PUApCRkQwOEVFQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOEVFQyAgNERCNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwU3RhdHVzCkJGRDA4RUVFICAgICAgNERCNiAgIEFERElVIFQ1LCBUNSwgLTUKQkZEMDhFRjAgICAgICAwQzAwICAgTk9QCjM5ODogICAgICAgICAgICAgICAgIA0KMzk5OiAgICAgICAgICAgICAgICAgCXJldHVybiB1eFNhdmVkU3RhdHVzUmVnaXN0ZXI7DQpCRkQwOEVGMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjQwMDogICAgICAgICAgICAgICAgIH0NCkJGRDA4RUY2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4RUY4ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDhFRkEgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwOEVGQyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4RUZFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDhGMDAgICAgICAwQzAwICAgTk9QCjQwMTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDAyOiAgICAgICAgICAgICAgICAgDQo0MDM6ICAgICAgICAgICAgICAgICB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCjQwNDogICAgICAgICAgICAgICAgIHsNCkJGRDA5QUJDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5QUJFICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDlBQzAgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOUFDMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUFDNCAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpCjQwNTogICAgICAgICAgICAgICAgIAl2UG9ydFNldENQMFN0YXR1cyggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICk7DQpCRkQwOUFDOCAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA5QUNDICA0REI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMKQkZEMDlBQ0UgICAgICA0REI2ICAgQURESVUgVDUsIFQ1LCAtNQpCRkQwOUFEMCAgICAgIDBDMDAgICBOT1AKNDA2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlBRDIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlBRDQgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwOUFENiAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA5QUQ4ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDlBREEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUFEQyAgICAgIDBDMDAgICBOT1AKNDA3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0MDg6ICAgICAgICAgICAgICAgICANCjQwOTogICAgICAgICAgICAgICAgIA0KNDEwOiAgICAgICAgICAgICAgICAgDQo0MTE6ICAgICAgICAgICAgICAgICANCjQxMjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9zb3VyY2UvcG9ydGFibGUvbWVtbWFuZy9oZWFwXzIuYyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qDQoyOiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgVjguMi4xIC0gQ29weXJpZ2h0IChDKSAyMDE1IFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KMzogICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQNCjQ6ICAgICAgICAgICAgICAgICAgIA0KNTogICAgICAgICAgICAgICAgICAgICAgIFZJU0lUIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIFRPIEVOU1VSRSBZT1UgQVJFIFVTSU5HIFRIRSBMQVRFU1QgVkVSU0lPTi4NCjY6ICAgICAgICAgICAgICAgICAgIA0KNzogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQo4OiAgICAgICAgICAgICAgICAgICANCjk6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQoxMDogICAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQoxMTogICAgICAgICAgICAgICAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uID4+IUFORCBNT0RJRklFRCBCWSE8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgLyoNCjcxOiAgICAgICAgICAgICAgICAgICAqIEEgc2FtcGxlIGltcGxlbWVudGF0aW9uIG9mIHB2UG9ydE1hbGxvYygpIGFuZCB2UG9ydEZyZWUoKSB0aGF0IHBlcm1pdHMNCjcyOiAgICAgICAgICAgICAgICAgICAqIGFsbG9jYXRlZCBibG9ja3MgdG8gYmUgZnJlZWQsIGJ1dCBkb2VzIG5vdCBjb21iaW5lIGFkamFjZW50IGZyZWUgYmxvY2tzDQo3MzogICAgICAgICAgICAgICAgICAgKiBpbnRvIGEgc2luZ2xlIGxhcmdlciBibG9jayAoYW5kIHNvIHdpbGwgZnJhZ21lbnQgbWVtb3J5KS4gIFNlZSBoZWFwXzQuYyBmb3INCjc0OiAgICAgICAgICAgICAgICAgICAqIGFuIGVxdWl2YWxlbnQgdGhhdCBkb2VzIGNvbWJpbmUgYWRqYWNlbnQgYmxvY2tzIGludG8gc2luZ2xlIGxhcmdlciBibG9ja3MuDQo3NTogICAgICAgICAgICAgICAgICAgKg0KNzY6ICAgICAgICAgICAgICAgICAgICogU2VlIGhlYXBfMS5jLCBoZWFwXzMuYyBhbmQgaGVhcF80LmMgZm9yIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZQ0KNzc6ICAgICAgICAgICAgICAgICAgICogbWVtb3J5IG1hbmFnZW1lbnQgcGFnZXMgb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQo3ODogICAgICAgICAgICAgICAgICAgKi8NCjc5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4NCjgwOiAgICAgICAgICAgICAgICAgIA0KODE6ICAgICAgICAgICAgICAgICAgLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZw0KODI6ICAgICAgICAgICAgICAgICAgYWxsIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgTVBVIHdyYXBwZXJzLiAgVGhhdCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4NCjgzOiAgICAgICAgICAgICAgICAgIHRhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQo4NDogICAgICAgICAgICAgICAgICAjZGVmaW5lIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQo4NTogICAgICAgICAgICAgICAgICANCjg2OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KODc6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInRhc2suaCINCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgI3VuZGVmIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQo5MDogICAgICAgICAgICAgICAgICANCjkxOiAgICAgICAgICAgICAgICAgIC8qIEEgZmV3IGJ5dGVzIG1pZ2h0IGJlIGxvc3QgdG8gYnl0ZSBhbGlnbmluZyB0aGUgaGVhcCBzdGFydCBhZGRyZXNzLiAqLw0KOTI6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBjb25maWdBREpVU1RFRF9IRUFQX1NJWkUJKCBjb25maWdUT1RBTF9IRUFQX1NJWkUgLSBwb3J0QllURV9BTElHTk1FTlQgKQ0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICAvKg0KOTU6ICAgICAgICAgICAgICAgICAgICogSW5pdGlhbGlzZXMgdGhlIGhlYXAgc3RydWN0dXJlcyBiZWZvcmUgdGhlaXIgZmlyc3QgdXNlLg0KOTY6ICAgICAgICAgICAgICAgICAgICovDQo5NzogICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZIZWFwSW5pdCggdm9pZCApOw0KOTg6ICAgICAgICAgICAgICAgICAgDQo5OTogICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IGZvciB0aGUgaGVhcC4gKi8NCjEwMDogICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50OF90IHVjSGVhcFsgY29uZmlnVE9UQUxfSEVBUF9TSVpFIF07DQoxMDE6ICAgICAgICAgICAgICAgICANCjEwMjogICAgICAgICAgICAgICAgIC8qIERlZmluZSB0aGUgbGlua2VkIGxpc3Qgc3RydWN0dXJlLiAgVGhpcyBpcyB1c2VkIHRvIGxpbmsgZnJlZSBibG9ja3MgaW4gb3JkZXINCjEwMzogICAgICAgICAgICAgICAgIG9mIHRoZWlyIHNpemUuICovDQoxMDQ6ICAgICAgICAgICAgICAgICB0eXBlZGVmIHN0cnVjdCBBX0JMT0NLX0xJTksNCjEwNTogICAgICAgICAgICAgICAgIHsNCjEwNjogICAgICAgICAgICAgICAgIAlzdHJ1Y3QgQV9CTE9DS19MSU5LICpweE5leHRGcmVlQmxvY2s7CS8qPDwgVGhlIG5leHQgZnJlZSBibG9jayBpbiB0aGUgbGlzdC4gKi8NCjEwNzogICAgICAgICAgICAgICAgIAlzaXplX3QgeEJsb2NrU2l6ZTsJCQkJCQkvKjw8IFRoZSBzaXplIG9mIHRoZSBmcmVlIGJsb2NrLiAqLw0KMTA4OiAgICAgICAgICAgICAgICAgfSBCbG9ja0xpbmtfdDsNCjEwOTogICAgICAgICAgICAgICAgIA0KMTEwOiAgICAgICAgICAgICAgICAgDQoxMTE6ICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgaGVhcFNUUlVDVF9TSVpFCT0gKCAoIHNpemVvZiAoIEJsb2NrTGlua190ICkgKyAoIHBvcnRCWVRFX0FMSUdOTUVOVCAtIDEgKSApICYgfnBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICk7DQoxMTI6ICAgICAgICAgICAgICAgICAjZGVmaW5lIGhlYXBNSU5JTVVNX0JMT0NLX1NJWkUJKCAoIHNpemVfdCApICggaGVhcFNUUlVDVF9TSVpFICogMiApICkNCjExMzogICAgICAgICAgICAgICAgIA0KMTE0OiAgICAgICAgICAgICAgICAgLyogQ3JlYXRlIGEgY291cGxlIG9mIGxpc3QgbGlua3MgdG8gbWFyayB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgbGlzdC4gKi8NCjExNTogICAgICAgICAgICAgICAgIHN0YXRpYyBCbG9ja0xpbmtfdCB4U3RhcnQsIHhFbmQ7DQoxMTY6ICAgICAgICAgICAgICAgICANCjExNzogICAgICAgICAgICAgICAgIC8qIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgZnJlZSBieXRlcyByZW1haW5pbmcsIGJ1dCBzYXlzIG5vdGhpbmcgYWJvdXQNCjExODogICAgICAgICAgICAgICAgIGZyYWdtZW50YXRpb24uICovDQoxMTk6ICAgICAgICAgICAgICAgICBzdGF0aWMgc2l6ZV90IHhGcmVlQnl0ZXNSZW1haW5pbmcgPSBjb25maWdBREpVU1RFRF9IRUFQX1NJWkU7DQoxMjA6ICAgICAgICAgICAgICAgICANCjEyMTogICAgICAgICAgICAgICAgIC8qIFNUQVRJQyBGVU5DVElPTlMgQVJFIERFRklORUQgQVMgTUFDUk9TIFRPIE1JTklNSVpFIFRIRSBGVU5DVElPTiBDQUxMIERFUFRILiAqLw0KMTIyOiAgICAgICAgICAgICAgICAgDQoxMjM6ICAgICAgICAgICAgICAgICAvKg0KMTI0OiAgICAgICAgICAgICAgICAgICogSW5zZXJ0IGEgYmxvY2sgaW50byB0aGUgbGlzdCBvZiBmcmVlIGJsb2NrcyAtIHdoaWNoIGlzIG9yZGVyZWQgYnkgc2l6ZSBvZg0KMTI1OiAgICAgICAgICAgICAgICAgICogdGhlIGJsb2NrLiAgU21hbGwgYmxvY2tzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdCBhbmQgbGFyZ2UgYmxvY2tzIGF0IHRoZSBlbmQNCjEyNjogICAgICAgICAgICAgICAgICAqIG9mIHRoZSBsaXN0Lg0KMTI3OiAgICAgICAgICAgICAgICAgICovDQoxMjg6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBydkluc2VydEJsb2NrSW50b0ZyZWVMaXN0KCBweEJsb2NrVG9JbnNlcnQgKQkJCQkJCQkJXA0KMTI5OiAgICAgICAgICAgICAgICAgewkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjEzMDogICAgICAgICAgICAgICAgIEJsb2NrTGlua190ICpweEl0ZXJhdG9yOwkJCQkJCQkJCQkJCQkJCQlcDQoxMzE6ICAgICAgICAgICAgICAgICBzaXplX3QgeEJsb2NrU2l6ZTsJCQkJCQkJCQkJCQkJCQkJCVwNCjEzMjogICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjEzMzogICAgICAgICAgICAgICAgIAl4QmxvY2tTaXplID0gcHhCbG9ja1RvSW5zZXJ0LT54QmxvY2tTaXplOwkJCQkJCQkJCQlcDQoxMzQ6ICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxMzU6ICAgICAgICAgICAgICAgICAJLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IHVudGlsIGEgYmxvY2sgaXMgZm91bmQgdGhhdCBoYXMgYSBsYXJnZXIgc2l6ZSAqLwlcDQoxMzY6ICAgICAgICAgICAgICAgICAJLyogdGhhbiB0aGUgYmxvY2sgd2UgYXJlIGluc2VydGluZy4gKi8JCQkJCQkJCQkJCVwNCjEzNzogICAgICAgICAgICAgICAgIAlmb3IoIHB4SXRlcmF0b3IgPSAmeFN0YXJ0OyBweEl0ZXJhdG9yLT5weE5leHRGcmVlQmxvY2stPnhCbG9ja1NpemUgPCB4QmxvY2tTaXplOyBweEl0ZXJhdG9yID0gcHhJdGVyYXRvci0+cHhOZXh0RnJlZUJsb2NrICkJXA0KMTM4OiAgICAgICAgICAgICAgICAgCXsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjEzOTogICAgICAgICAgICAgICAgIAkJLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlIC0ganVzdCBpdGVyYXRlIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uLiAqLwlcDQoxNDA6ICAgICAgICAgICAgICAgICAJfQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTQxOiAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTQyOiAgICAgICAgICAgICAgICAgCS8qIFVwZGF0ZSB0aGUgbGlzdCB0byBpbmNsdWRlIHRoZSBibG9jayBiZWluZyBpbnNlcnRlZCBpbiB0aGUgY29ycmVjdCAqLwkJXA0KMTQzOiAgICAgICAgICAgICAgICAgCS8qIHBvc2l0aW9uLiAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KMTQ0OiAgICAgICAgICAgICAgICAgCXB4QmxvY2tUb0luc2VydC0+cHhOZXh0RnJlZUJsb2NrID0gcHhJdGVyYXRvci0+cHhOZXh0RnJlZUJsb2NrOwkJCQkJXA0KMTQ1OiAgICAgICAgICAgICAgICAgCXB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jayA9IHB4QmxvY2tUb0luc2VydDsJCQkJCQkJCQlcDQoxNDY6ICAgICAgICAgICAgICAgICB9DQoxNDc6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE0ODogICAgICAgICAgICAgICAgIA0KMTQ5OiAgICAgICAgICAgICAgICAgdm9pZCAqcHZQb3J0TWFsbG9jKCBzaXplX3QgeFdhbnRlZFNpemUgKQ0KMTUwOiAgICAgICAgICAgICAgICAgew0KQkZEMDIyMkMgICAgICA0RkU5ICAgQURESVUgU1AsIFNQLCAtNDgKQkZEMDIyMkUgICAgICBDQkVCICAgU1cgUkEsIDQ0KFNQKQpCRkQwMjIzMCAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApCkJGRDAyMjMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAyMjM0ICAwMDMwRjg5RSAgIFNXIEEwLCA0OChTOCkKMTUxOiAgICAgICAgICAgICAgICAgQmxvY2tMaW5rX3QgKnB4QmxvY2ssICpweFByZXZpb3VzQmxvY2ssICpweE5ld0Jsb2NrTGluazsNCjE1MjogICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHhIZWFwSGFzQmVlbkluaXRpYWxpc2VkID0gcGRGQUxTRTsNCjE1MzogICAgICAgICAgICAgICAgIHZvaWQgKnB2UmV0dXJuID0gTlVMTDsNCkJGRDAyMjM4ICAwMDE4RjgxRSAgIFNXIFpFUk8sIDI0KFM4KQoxNTQ6ICAgICAgICAgICAgICAgICANCjE1NTogICAgICAgICAgICAgICAgIAl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDAyMjNDICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsCkJGRDAyMjNFICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYKQkZEMDIyNDAgICAgICAwQzAwICAgTk9QCjE1NjogICAgICAgICAgICAgICAgIAl7DQoxNTc6ICAgICAgICAgICAgICAgICAJCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gbWFsbG9jIHRoZW4gdGhlIGhlYXAgd2lsbCByZXF1aXJlDQoxNTg6ICAgICAgICAgICAgICAgICAJCWluaXRpYWxpc2F0aW9uIHRvIHNldHVwIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiAqLw0KMTU5OiAgICAgICAgICAgICAgICAgCQlpZiggeEhlYXBIYXNCZWVuSW5pdGlhbGlzZWQgPT0gcGRGQUxTRSApDQpCRkQwMjI0MiAgODAyOEZDNUMgICBMVyBWMCwgLTMyNzI4KEdQKQpCRkQwMjI0NiAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjI1NgoxNjA6ICAgICAgICAgICAgICAgICAJCXsNCjE2MTogICAgICAgICAgICAgICAgIAkJCXBydkhlYXBJbml0KCk7DQpCRkQwMjI0QSAgNDI1MDc3RTggICBKQUxTIHBydkhlYXBJbml0CkJGRDAyMjRFICAgICAgMEMwMCAgIE5PUAoxNjI6ICAgICAgICAgICAgICAgICAJCQl4SGVhcEhhc0JlZW5Jbml0aWFsaXNlZCA9IHBkVFJVRTsNCkJGRDAyMjUwICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyMjUyICA4MDI4Rjg1QyAgIFNXIFYwLCAtMzI3MjgoR1ApCjE2MzogICAgICAgICAgICAgICAgIAkJfQ0KMTY0OiAgICAgICAgICAgICAgICAgDQoxNjU6ICAgICAgICAgICAgICAgICAJCS8qIFRoZSB3YW50ZWQgc2l6ZSBpcyBpbmNyZWFzZWQgc28gaXQgY2FuIGNvbnRhaW4gYSBCbG9ja0xpbmtfdA0KMTY2OiAgICAgICAgICAgICAgICAgCQlzdHJ1Y3R1cmUgaW4gYWRkaXRpb24gdG8gdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgYnl0ZXMuICovDQoxNjc6ICAgICAgICAgICAgICAgICAJCWlmKCB4V2FudGVkU2l6ZSA+IDAgKQ0KQkZEMDIyNTYgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMjI1QSAgMDAxNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjI4QQoxNjg6ICAgICAgICAgICAgICAgICAJCXsNCjE2OTogICAgICAgICAgICAgICAgIAkJCXhXYW50ZWRTaXplICs9IGhlYXBTVFJVQ1RfU0laRTsNCkJGRDAyMjVFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAyMjYwICAzNDQyQkZEMSAgIExEQzEgRjMwLCAxMzM3OChTMSkKQkZEMDIyNjIgIDlGMkMzNDQyICAgTEhVIFYwLCAtMjQ3ODgoVjApCkJGRDAyMjY0ICBGQzdFOUYyQyAgIExXQzEgRjI1LCAtODk4KFQ0KQpCRkQwMjI2NiAgMDAzMEZDN0UgICBMVyBWMSwgNDgoUzgpCkJGRDAyMjZBICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwMjI2QyAgMDAzMEY4NUUgICBTVyBWMCwgNDgoUzgpCjE3MDogICAgICAgICAgICAgICAgIA0KMTcxOiAgICAgICAgICAgICAgICAgCQkJLyogRW5zdXJlIHRoYXQgYmxvY2tzIGFyZSBhbHdheXMgYWxpZ25lZCB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLiAqLw0KMTcyOiAgICAgICAgICAgICAgICAgCQkJaWYoICggeFdhbnRlZFNpemUgJiBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApICE9IDAgKQ0KQkZEMDIyNzAgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMjI3NCAgICAgIDJEMjUgICBBTkRJIFYwLCBWMCwgMHg3CkJGRDAyMjc2ICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyMjhBCjE3MzogICAgICAgICAgICAgICAgIAkJCXsNCjE3NDogICAgICAgICAgICAgICAgIAkJCQkvKiBCeXRlIGFsaWdubWVudCByZXF1aXJlZC4gKi8NCjE3NTogICAgICAgICAgICAgICAgIAkJCQl4V2FudGVkU2l6ZSArPSAoIHBvcnRCWVRFX0FMSUdOTUVOVCAtICggeFdhbnRlZFNpemUgJiBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApICk7DQpCRkQwMjI3QSAgMDAzMEZDN0UgICBMVyBWMSwgNDgoUzgpCkJGRDAyMjdDICAzMDQwMDAzMCAgIFNSTCBBVCwgUzAsIDYKQkZEMDIyN0UgIEZGRjgzMDQwICAgQURESVUgVjAsIFpFUk8sIC04CkJGRDAyMjgwICA0NDkzRkZGOCAgIExXIFJBLCAxNzU1NShUOCkKQkZEMDIyODIgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDAyMjg0ICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOApCRkQwMjI4NiAgMDAzMEY4NUUgICBTVyBWMCwgNDgoUzgpCjE3NjogICAgICAgICAgICAgICAgIAkJCX0NCjE3NzogICAgICAgICAgICAgICAgIAkJfQ0KMTc4OiAgICAgICAgICAgICAgICAgDQoxNzk6ICAgICAgICAgICAgICAgICAJCWlmKCAoIHhXYW50ZWRTaXplID4gMCApICYmICggeFdhbnRlZFNpemUgPCBjb25maWdBREpVU1RFRF9IRUFQX1NJWkUgKSApDQpCRkQwMjI4QSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAyMjhFICAwMDhGNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyM0IwCkJGRDAyMjkyICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDIyOTYgIDFGRjhCMDQyICAgU0xUSVUgVjAsIFYwLCA4MTg0CkJGRDAyMjk4ICA0MEUyMUZGOCAgIExCIFJBLCAxNjYxMChUOCkKQkZEMDIyOUEgIDAwODk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDIzQjAKMTgwOiAgICAgICAgICAgICAgICAgCQl7DQoxODE6ICAgICAgICAgICAgICAgICAJCQkvKiBCbG9ja3MgYXJlIHN0b3JlZCBpbiBieXRlIG9yZGVyIC0gdHJhdmVyc2UgdGhlIGxpc3QgZnJvbSB0aGUgc3RhcnQNCjE4MjogICAgICAgICAgICAgICAgIAkJCShzbWFsbGVzdCkgYmxvY2sgdW50aWwgb25lIG9mIGFkZXF1YXRlIHNpemUgaXMgZm91bmQuICovDQoxODM6ICAgICAgICAgICAgICAgICAJCQlweFByZXZpb3VzQmxvY2sgPSAmeFN0YXJ0Ow0KQkZEMDIyOUUgIDgwMTgzMDVDICAgQURESVUgVjAsIEdQLCAtMzI3NDQKQkZEMDIyQTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoxODQ6ICAgICAgICAgICAgICAgICAJCQlweEJsb2NrID0geFN0YXJ0LnB4TmV4dEZyZWVCbG9jazsNCkJGRDAyMkE2ICA4MDE4RkM1QyAgIExXIFYwLCAtMzI3NDQoR1ApCkJGRDAyMkFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTg1OiAgICAgICAgICAgICAgICAgCQkJd2hpbGUoICggcHhCbG9jay0+eEJsb2NrU2l6ZSA8IHhXYW50ZWRTaXplICkgJiYgKCBweEJsb2NrLT5weE5leHRGcmVlQmxvY2sgIT0gTlVMTCApICkNCkJGRDAyMkFFICAgICAgQ0MwQSAgIEIgMHhCRkQwMjJDNApCRkQwMjJCMCAgICAgIDBDMDAgICBOT1AKQkZEMDIyQzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMjJDOCAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkKQkZEMDIyQ0EgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMjJDRSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDIyRDAgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDAyMkQyICAwMDA1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyMkUwCkJGRDAyMkQ2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDIyREEgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAyMkRDICBGRkU5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMkIyCkJGRDAyMkRFICBGQzdFRkZFOSAgIExXIFJBLCAtODk4KFQxKQoxODY6ICAgICAgICAgICAgICAgICAJCQl7DQoxODc6ICAgICAgICAgICAgICAgICAJCQkJcHhQcmV2aW91c0Jsb2NrID0gcHhCbG9jazsNCkJGRDAyMkIyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDIyQjYgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoxODg6ICAgICAgICAgICAgICAgICAJCQkJcHhCbG9jayA9IHB4QmxvY2stPnB4TmV4dEZyZWVCbG9jazsNCkJGRDAyMkJBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDIyQkUgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAyMkMwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTg5OiAgICAgICAgICAgICAgICAgCQkJfQ0KMTkwOiAgICAgICAgICAgICAgICAgDQoxOTE6ICAgICAgICAgICAgICAgICAJCQkvKiBJZiB3ZSBmb3VuZCB0aGUgZW5kIG1hcmtlciB0aGVuIGEgYmxvY2sgb2YgYWRlcXVhdGUgc2l6ZSB3YXMgbm90IGZvdW5kLiAqLw0KMTkyOiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4QmxvY2sgIT0gJnhFbmQgKQ0KQkZEMDIyRTAgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwMjJFNCAgODAyMDMwNUMgICBBRERJVSBWMCwgR1AsIC0zMjczNgpCRkQwMjJFOCAgMDA2Mjk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDAyM0IwCkJGRDAyMkVBICAwQzAwMDA2MiAgIFNMTCBWMSwgVjAsIDEKQkZEMDIyRUMgICAgICAwQzAwICAgTk9QCjE5MzogICAgICAgICAgICAgICAgIAkJCXsNCjE5NDogICAgICAgICAgICAgICAgIAkJCQkvKiBSZXR1cm4gdGhlIG1lbW9yeSBzcGFjZSAtIGp1bXBpbmcgb3ZlciB0aGUgQmxvY2tMaW5rX3Qgc3RydWN0dXJlDQoxOTU6ICAgICAgICAgICAgICAgICAJCQkJYXQgaXRzIHN0YXJ0LiAqLw0KMTk2OiAgICAgICAgICAgICAgICAgCQkJCXB2UmV0dXJuID0gKCB2b2lkICogKSAoICggKCB1aW50OF90ICogKSBweFByZXZpb3VzQmxvY2stPnB4TmV4dEZyZWVCbG9jayApICsgaGVhcFNUUlVDVF9TSVpFICk7DQpCRkQwMjJFRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyMkYyICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwMjJGNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMjJGNiAgMzQ0MkJGRDEgICBMREMxIEYzMCwgMTMzNzgoUzEpCkJGRDAyMkY4ICA5RjJDMzQ0MiAgIExIVSBWMCwgLTI0Nzg4KFYwKQpCRkQwMjJGQSAgMDUyNjlGMkMgICBMV0MxIEYyNSwgMTMxOChUNCkKQkZEMDIyRkMgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAyMkZFICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMTk3OiAgICAgICAgICAgICAgICAgDQoxOTg6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhpcyBibG9jayBpcyBiZWluZyByZXR1cm5lZCBmb3IgdXNlIHNvIG11c3QgYmUgdGFrZW4gb3V0IG9mIHRoZQ0KMTk5OiAgICAgICAgICAgICAgICAgCQkJCWxpc3Qgb2YgZnJlZSBibG9ja3MuICovDQoyMDA6ICAgICAgICAgICAgICAgICAJCQkJcHhQcmV2aW91c0Jsb2NrLT5weE5leHRGcmVlQmxvY2sgPSBweEJsb2NrLT5weE5leHRGcmVlQmxvY2s7DQpCRkQwMjMwMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAyMzA2ICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwMjMwOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAyMzBDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyMDE6ICAgICAgICAgICAgICAgICANCjIwMjogICAgICAgICAgICAgICAgIAkJCQkvKiBJZiB0aGUgYmxvY2sgaXMgbGFyZ2VyIHRoYW4gcmVxdWlyZWQgaXQgY2FuIGJlIHNwbGl0IGludG8gdHdvLiAqLw0KMjAzOiAgICAgICAgICAgICAgICAgCQkJCWlmKCAoIHB4QmxvY2stPnhCbG9ja1NpemUgLSB4V2FudGVkU2l6ZSApID4gaGVhcE1JTklNVU1fQkxPQ0tfU0laRSApDQpCRkQwMjMwRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAyMzEyICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQpCRkQwMjMxNCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpCkJGRDAyMzE4ICAgICAgMDVBNyAgIFNVQlUgVjEsIFYxLCBWMApCRkQwMjMxQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMjMxQyAgMzQ0MkJGRDEgICBMREMxIEYzMCwgMTMzNzgoUzEpCkJGRDAyMzFFICA5RjJDMzQ0MiAgIExIVSBWMCwgLTI0Nzg4KFYwKQpCRkQwMjMyMCAgMjUyMjlGMkMgICBMV0MxIEYyNSwgOTUwNihUNCkKQkZEMDIzMjIgICAgICAyNTIyICAgU0xMIFYwLCBWMCwgMQpCRkQwMjMyNCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjEKQkZEMDIzMjYgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwCkJGRDAyMzI4ICAwMDNBNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyM0EwCjIwNDogICAgICAgICAgICAgICAgIAkJCQl7DQoyMDU6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFRoaXMgYmxvY2sgaXMgdG8gYmUgc3BsaXQgaW50byB0d28uICBDcmVhdGUgYSBuZXcgYmxvY2sNCjIwNjogICAgICAgICAgICAgICAgIAkJCQkJZm9sbG93aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkLiBUaGUgdm9pZCBjYXN0IGlzDQoyMDc6ICAgICAgICAgICAgICAgICAJCQkJCXVzZWQgdG8gcHJldmVudCBieXRlIGFsaWdubWVudCB3YXJuaW5ncyBmcm9tIHRoZSBjb21waWxlci4gKi8NCjIwODogICAgICAgICAgICAgICAgIAkJCQkJcHhOZXdCbG9ja0xpbmsgPSAoIHZvaWQgKiApICggKCAoIHVpbnQ4X3QgKiApIHB4QmxvY2sgKSArIHhXYW50ZWRTaXplICk7DQpCRkQwMjMyQyAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAyMzMwICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkKQkZEMDIzMzQgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAyMzM2ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKMjA5OiAgICAgICAgICAgICAgICAgDQoyMTA6ICAgICAgICAgICAgICAgICAJCQkJCS8qIENhbGN1bGF0ZSB0aGUgc2l6ZXMgb2YgdHdvIGJsb2NrcyBzcGxpdCBmcm9tIHRoZSBzaW5nbGUNCjIxMTogICAgICAgICAgICAgICAgIAkJCQkJYmxvY2suICovDQoyMTI6ICAgICAgICAgICAgICAgICAJCQkJCXB4TmV3QmxvY2tMaW5rLT54QmxvY2tTaXplID0gcHhCbG9jay0+eEJsb2NrU2l6ZSAtIHhXYW50ZWRTaXplOw0KQkZEMDIzM0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMjMzRSAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkKQkZEMDIzNDAgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMjM0NCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjAKQkZEMDIzNDYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMjM0QSAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkKMjEzOiAgICAgICAgICAgICAgICAgCQkJCQlweEJsb2NrLT54QmxvY2tTaXplID0geFdhbnRlZFNpemU7DQpCRkQwMjM0QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAyMzUwICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkKQkZEMDIzNTQgICAgICBFOUExICAgU1cgVjEsIDQoVjApCjIxNDogICAgICAgICAgICAgICAgIA0KMjE1OiAgICAgICAgICAgICAgICAgCQkJCQkvKiBJbnNlcnQgdGhlIG5ldyBibG9jayBpbnRvIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiAqLw0KMjE2OiAgICAgICAgICAgICAgICAgCQkJCQlwcnZJbnNlcnRCbG9ja0ludG9GcmVlTGlzdCggKCBweE5ld0Jsb2NrTGluayApICk7DQpCRkQwMjM1NiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyMzVBICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQpCRkQwMjM1QyAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpCkJGRDAyMzYwICA4MDE4MzA1QyAgIEFERElVIFYwLCBHUCwgLTMyNzQ0CkJGRDAyMzY0ICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkKQkZEMDIzNjggICAgICBDQzA2ICAgQiAweEJGRDAyMzc2CkJGRDAyMzZBICAgICAgMEMwMCAgIE5PUApCRkQwMjM2QyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAyMzcwICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMjM3MiAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpCkJGRDAyMzc2ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDIzN0EgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAyMzdDICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQpCRkQwMjM3RSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDAyMzgyICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwMjM4NCAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDIzODYgIEZGRjE0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDIzNkMKQkZEMDIzODggIEZDNUVGRkYxICAgTFcgUkEsIC05MzAoUzEpCkJGRDAyMzhBICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDIzOEUgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAyMzkwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDIzOTQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCkJGRDAyMzk2ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDIzOUEgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQpCRkQwMjM5RSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjE3OiAgICAgICAgICAgICAgICAgCQkJCX0NCjIxODogICAgICAgICAgICAgICAgIA0KMjE5OiAgICAgICAgICAgICAgICAgCQkJCXhGcmVlQnl0ZXNSZW1haW5pbmcgLT0gcHhCbG9jay0+eEJsb2NrU2l6ZTsNCkJGRDAyM0EwICA4MDEwRkM3QyAgIExXIFYxLCAtMzI3NTIoR1ApCkJGRDAyM0E0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDIzQTggICAgICA2OTIxICAgTFcgVjAsIDQoVjApCkJGRDAyM0FBICAgICAgMDUyNyAgIFNVQlUgVjAsIFYxLCBWMApCRkQwMjNBQyAgODAxMEY4NUMgICBTVyBWMCwgLTMyNzUyKEdQKQoyMjA6ICAgICAgICAgICAgICAgICAJCQl9DQoyMjE6ICAgICAgICAgICAgICAgICAJCX0NCjIyMjogICAgICAgICAgICAgICAgIA0KMjIzOiAgICAgICAgICAgICAgICAgCQl0cmFjZU1BTExPQyggcHZSZXR1cm4sIHhXYW50ZWRTaXplICk7DQoyMjQ6ICAgICAgICAgICAgICAgICAJfQ0KMjI1OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwMjNCMCAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsCkJGRDAyM0IyICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikKQkZEMDIzQjQgICAgICAwQzAwICAgTk9QCjIyNjogICAgICAgICAgICAgICAgIA0KMjI3OiAgICAgICAgICAgICAgICAgCSNpZiggY29uZmlnVVNFX01BTExPQ19GQUlMRURfSE9PSyA9PSAxICkNCjIyODogICAgICAgICAgICAgICAgIAl7DQoyMjk6ICAgICAgICAgICAgICAgICAJCWlmKCBwdlJldHVybiA9PSBOVUxMICkNCkJGRDAyM0I2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDIzQkEgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDIzQzQKMjMwOiAgICAgICAgICAgICAgICAgCQl7DQoyMzE6ICAgICAgICAgICAgICAgICAJCQlleHRlcm4gdm9pZCB2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCB2b2lkICk7DQoyMzI6ICAgICAgICAgICAgICAgICAJCQl2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCk7DQpCRkQwMjNCRSAgNDQ4MDc3RTggICBKQUxTIHZBcHBsaWNhdGlvbk1hbGxvY0ZhaWxlZEhvb2sKQkZEMDIzQzAgICAgICA0NDgwICAgQU5EMTYgUzAsIFMwCkJGRDAyM0MyICAgICAgMEMwMCAgIE5PUAoyMzM6ICAgICAgICAgICAgICAgICAJCX0NCjIzNDogICAgICAgICAgICAgICAgIAl9DQoyMzU6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoyMzY6ICAgICAgICAgICAgICAgICANCjIzNzogICAgICAgICAgICAgICAgIAlyZXR1cm4gcHZSZXR1cm47DQpCRkQwMjNDNCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCjIzODogICAgICAgICAgICAgICAgIH0NCkJGRDAyM0M4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAyM0NBICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkKQkZEMDIzQ0MgICAgICA0QkNBICAgTFcgUzgsIDQwKFNQKQpCRkQwMjNDRSAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4CkJGRDAyM0QwICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDIzRDIgICAgICAwQzAwICAgTk9QCjIzOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQwOiAgICAgICAgICAgICAgICAgDQoyNDE6ICAgICAgICAgICAgICAgICB2b2lkIHZQb3J0RnJlZSggdm9pZCAqcHYgKQ0KMjQyOiAgICAgICAgICAgICAgICAgew0KQkZEMDVGRDQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDVGRDYgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwNUZEOCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDA1RkRBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA1RkRDICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKMjQzOiAgICAgICAgICAgICAgICAgdWludDhfdCAqcHVjID0gKCB1aW50OF90ICogKSBwdjsNCkJGRDA1RkUwICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDVGRTQgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoyNDQ6ICAgICAgICAgICAgICAgICBCbG9ja0xpbmtfdCAqcHhMaW5rOw0KMjQ1OiAgICAgICAgICAgICAgICAgDQoyNDY6ICAgICAgICAgICAgICAgICAJaWYoIHB2ICE9IE5VTEwgKQ0KQkZEMDVGRTggIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwNUZFQyAgMDA0MjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjA3NAoyNDc6ICAgICAgICAgICAgICAgICAJew0KMjQ4OiAgICAgICAgICAgICAgICAgCQkvKiBUaGUgbWVtb3J5IGJlaW5nIGZyZWVkIHdpbGwgaGF2ZSBhbiBCbG9ja0xpbmtfdCBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHkNCjI0OTogICAgICAgICAgICAgICAgIAkJYmVmb3JlIGl0LiAqLw0KMjUwOiAgICAgICAgICAgICAgICAgCQlwdWMgLT0gaGVhcFNUUlVDVF9TSVpFOw0KQkZEMDVGRjAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDVGRjIgIDM0NDJCRkQxICAgTERDMSBGMzAsIDEzMzc4KFMxKQpCRkQwNUZGNCAgOUYyQzM0NDIgICBMSFUgVjAsIC0yNDc4OChWMCkKQkZEMDVGRjYgIDAwNDA5RjJDICAgTFdDMSBGMjUsIDY0KFQ0KQpCRkQwNUZGOCAgMTFEMDAwNDAgICBTVUJVIFYwLCBaRVJPLCBWMApCRkQwNUZGQSAgRkM3RTExRDAgICBBRERJIFQ2LCBTMCwgLTg5OApCRkQwNUZGQyAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDA2MDAwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNjAwMiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjI1MTogICAgICAgICAgICAgICAgIA0KMjUyOiAgICAgICAgICAgICAgICAgCQkvKiBUaGlzIHVuZXhwZWN0ZWQgY2FzdGluZyBpcyB0byBrZWVwIHNvbWUgY29tcGlsZXJzIGZyb20gaXNzdWluZw0KMjUzOiAgICAgICAgICAgICAgICAgCQlieXRlIGFsaWdubWVudCB3YXJuaW5ncy4gKi8NCjI1NDogICAgICAgICAgICAgICAgIAkJcHhMaW5rID0gKCB2b2lkICogKSBwdWM7DQpCRkQwNjAwNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA2MDBBICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMjU1OiAgICAgICAgICAgICAgICAgDQoyNTY6ICAgICAgICAgICAgICAgICAJCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDYwMEUgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwKQkZEMDYwMTAgICAgICA0RUY0ICAgQURESVUgUzcsIFM3LCAtNgpCRkQwNjAxMiAgICAgIDBDMDAgICBOT1AKMjU3OiAgICAgICAgICAgICAgICAgCQl7DQoyNTg6ICAgICAgICAgICAgICAgICAJCQkvKiBBZGQgdGhpcyBibG9jayB0byB0aGUgbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCjI1OTogICAgICAgICAgICAgICAgIAkJCXBydkluc2VydEJsb2NrSW50b0ZyZWVMaXN0KCAoICggQmxvY2tMaW5rX3QgKiApIHB4TGluayApICk7DQpCRkQwNjAxNCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2MDE4ICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQpCRkQwNjAxQSAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpCkJGRDA2MDFFICA4MDE4MzA1QyAgIEFERElVIFYwLCBHUCwgLTMyNzQ0CkJGRDA2MDIyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDYwMjYgICAgICBDQzA2ICAgQiAweEJGRDA2MDM0CkJGRDA2MDI4ICAgICAgMEMwMCAgIE5PUApCRkQwNjAyQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA2MDJFICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwNjAzMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA2MDM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYwMzggICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDA2MDNBICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQpCRkQwNjAzQyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDA2MDQwICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwNjA0MiAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDYwNDQgIEZGRjE0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDYwMkEKQkZEMDYwNDYgIEZDNUVGRkYxICAgTFcgUkEsIC05MzAoUzEpCkJGRDA2MDQ4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYwNEMgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDA2MDRFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDYwNTIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCkJGRDA2MDU0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDYwNTggIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQpCRkQwNjA1QyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjYwOiAgICAgICAgICAgICAgICAgCQkJeEZyZWVCeXRlc1JlbWFpbmluZyArPSBweExpbmstPnhCbG9ja1NpemU7DQpCRkQwNjA1RSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA2MDYyICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQpCRkQwNjA2NCAgODAxMEZDNUMgICBMVyBWMCwgLTMyNzUyKEdQKQpCRkQwNjA2OCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDYwNkEgIDgwMTBGODVDICAgU1cgVjAsIC0zMjc1MihHUCkKMjYxOiAgICAgICAgICAgICAgICAgCQkJdHJhY2VGUkVFKCBwdiwgcHhMaW5rLT54QmxvY2tTaXplICk7DQoyNjI6ICAgICAgICAgICAgICAgICAJCX0NCjI2MzogICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDA2MDZFICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDYwNzAgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwNjA3MiAgICAgIDBDMDAgICBOT1AKMjY0OiAgICAgICAgICAgICAgICAgCX0NCjI2NTogICAgICAgICAgICAgICAgIH0NCkJGRDA2MDc0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA2MDc2ICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDYwNzggICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwNjA3QSAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDA2MDdDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDYwN0UgICAgICAwQzAwICAgTk9QCjI2NjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjY3OiAgICAgICAgICAgICAgICAgDQoyNjg6ICAgICAgICAgICAgICAgICBzaXplX3QgeFBvcnRHZXRGcmVlSGVhcFNpemUoIHZvaWQgKQ0KMjY5OiAgICAgICAgICAgICAgICAgew0KQkZEMDlFODQgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUU4NiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlFODggICAgICAwRkREICAgTU9WRSBTOCwgU1AKMjcwOiAgICAgICAgICAgICAgICAgCXJldHVybiB4RnJlZUJ5dGVzUmVtYWluaW5nOw0KQkZEMDlFOEEgIDgwMTBGQzVDICAgTFcgVjAsIC0zMjc1MihHUCkKMjcxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlFOEUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlFOTAgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5RTkyICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUU5NCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5RTk2ICAgICAgMEMwMCAgIE5PUAoyNzI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI3MzogICAgICAgICAgICAgICAgIA0KMjc0OiAgICAgICAgICAgICAgICAgdm9pZCB2UG9ydEluaXRpYWxpc2VCbG9ja3MoIHZvaWQgKQ0KMjc1OiAgICAgICAgICAgICAgICAgew0KQkZEMDlFRDQgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUVENiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlFRDggICAgICAwRkREICAgTU9WRSBTOCwgU1AKMjc2OiAgICAgICAgICAgICAgICAgCS8qIFRoaXMganVzdCBleGlzdHMgdG8ga2VlcCB0aGUgbGlua2VyIHF1aWV0LiAqLw0KMjc3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlFREEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlFREMgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5RURFICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUVFMCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5RUUyICAgICAgMEMwMCAgIE5PUAoyNzg6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI3OTogICAgICAgICAgICAgICAgIA0KMjgwOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2SGVhcEluaXQoIHZvaWQgKQ0KMjgxOiAgICAgICAgICAgICAgICAgew0KQkZEMDg0QTAgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYKQkZEMDg0QTIgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwODRBNCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoyODI6ICAgICAgICAgICAgICAgICBCbG9ja0xpbmtfdCAqcHhGaXJzdEZyZWVCbG9jazsNCjI4MzogICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnB1Y0FsaWduZWRIZWFwOw0KMjg0OiAgICAgICAgICAgICAgICAgDQoyODU6ICAgICAgICAgICAgICAgICAJLyogRW5zdXJlIHRoZSBoZWFwIHN0YXJ0cyBvbiBhIGNvcnJlY3RseSBhbGlnbmVkIGJvdW5kYXJ5LiAqLw0KMjg2OiAgICAgICAgICAgICAgICAgCXB1Y0FsaWduZWRIZWFwID0gKCB1aW50OF90ICogKSAoICggKCBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgKSAmdWNIZWFwWyBwb3J0QllURV9BTElHTk1FTlQgXSApICYgKCB+KCAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICkgKSApOw0KQkZEMDg0QTYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDg0QTggIDMwNjJCRkQyICAgTERDMSBGMzAsIDEyMzg2KFMyKQpCRkQwODRBQSAgOEQ3MDMwNjIgICBBRERJVSBWMSwgVjAsIC0yOTMyOApCRkQwODRBQyAgICAgIDhENzAgICBCRVFaIFYwLCAweEJGRDA4NThFCkJGRDA4NEFFICBGRkY4MzA0MCAgIEFERElVIFYwLCBaRVJPLCAtOApCRkQwODRCMCAgNDQ5M0ZGRjggICBMVyBSQSwgMTc1NTUoVDgpCkJGRDA4NEIyICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwODRCNCAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkKMjg3OiAgICAgICAgICAgICAgICAgDQoyODg6ICAgICAgICAgICAgICAgICAJLyogeFN0YXJ0IGlzIHVzZWQgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3Qgb2YgZnJlZQ0KMjg5OiAgICAgICAgICAgICAgICAgCWJsb2Nrcy4gIFRoZSB2b2lkIGNhc3QgaXMgdXNlZCB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KMjkwOiAgICAgICAgICAgICAgICAgCXhTdGFydC5weE5leHRGcmVlQmxvY2sgPSAoIHZvaWQgKiApIHB1Y0FsaWduZWRIZWFwOw0KQkZEMDg0QjggIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA4NEJDICA4MDE4Rjg1QyAgIFNXIFYwLCAtMzI3NDQoR1ApCjI5MTogICAgICAgICAgICAgICAgIAl4U3RhcnQueEJsb2NrU2l6ZSA9ICggc2l6ZV90ICkgMDsNCkJGRDA4NEMwICA4MDFDRjgxQyAgIFNXIFpFUk8sIC0zMjc0MChHUCkKMjkyOiAgICAgICAgICAgICAgICAgDQoyOTM6ICAgICAgICAgICAgICAgICAJLyogeEVuZCBpcyB1c2VkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCjI5NDogICAgICAgICAgICAgICAgIAl4RW5kLnhCbG9ja1NpemUgPSBjb25maWdBREpVU1RFRF9IRUFQX1NJWkU7DQpCRkQwODRDNCAgMUZGODMwNDAgICBBRERJVSBWMCwgWkVSTywgODE4NApCRkQwODRDNiAgRjg1QzFGRjggICBMQiBSQSwgLTE5NTYoVDgpCkJGRDA4NEM4ICA4MDI0Rjg1QyAgIFNXIFYwLCAtMzI3MzIoR1ApCjI5NTogICAgICAgICAgICAgICAgIAl4RW5kLnB4TmV4dEZyZWVCbG9jayA9IE5VTEw7DQpCRkQwODRDQyAgODAyMEY4MUMgICBTVyBaRVJPLCAtMzI3MzYoR1ApCjI5NjogICAgICAgICAgICAgICAgIA0KMjk3OiAgICAgICAgICAgICAgICAgCS8qIFRvIHN0YXJ0IHdpdGggdGhlcmUgaXMgYSBzaW5nbGUgZnJlZSBibG9jayB0aGF0IGlzIHNpemVkIHRvIHRha2UgdXAgdGhlDQoyOTg6ICAgICAgICAgICAgICAgICAJZW50aXJlIGhlYXAgc3BhY2UuICovDQoyOTk6ICAgICAgICAgICAgICAgICAJcHhGaXJzdEZyZWVCbG9jayA9ICggdm9pZCAqICkgcHVjQWxpZ25lZEhlYXA7DQpCRkQwODREMCAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKQkZEMDg0RDQgIDAwMDRGODVFICAgU1cgVjAsIDQoUzgpCjMwMDogICAgICAgICAgICAgICAgIAlweEZpcnN0RnJlZUJsb2NrLT54QmxvY2tTaXplID0gY29uZmlnQURKVVNURURfSEVBUF9TSVpFOw0KQkZEMDg0RDggIDAwMDRGQzVFICAgTFcgVjAsIDQoUzgpCkJGRDA4NERDICAxRkY4MzA2MCAgIEFERElVIFYxLCBaRVJPLCA4MTg0CkJGRDA4NERFICBFOUExMUZGOCAgIExCIFJBLCAtNTcyNyhUOCkKQkZEMDg0RTAgICAgICBFOUExICAgU1cgVjEsIDQoVjApCjMwMTogICAgICAgICAgICAgICAgIAlweEZpcnN0RnJlZUJsb2NrLT5weE5leHRGcmVlQmxvY2sgPSAmeEVuZDsNCkJGRDA4NEUyICAwMDA0RkM1RSAgIExXIFYwLCA0KFM4KQpCRkQwODRFNCAgMzA3QzAwMDQgICBNVExPIEEwLCAwCkJGRDA4NEU2ICA4MDIwMzA3QyAgIEFERElVIFYxLCBHUCwgLTMyNzM2CkJGRDA4NEVBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQozMDI6ICAgICAgICAgICAgICAgICB9DQpCRkQwODRFQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODRFRSAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA4NEYwICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYKQkZEMDg0RjIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODRGNCAgICAgIDBDMDAgICBOT1AKMzAzOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL3NvdXJjZS9saXN0LmMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4hQU5EIE1PRElGSUVEIEJZITw8IHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQoxMjogICAgICAgICAgICAgICAgICANCjEzOiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE0OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBOT1RFOiBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvICAgICAhPDwNCjE1OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgICAhPDwNCjE2OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvYmxpZ2VkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzICAgICAhPDwNCjE3OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUyBrZXJuZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPDwNCjE4OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE5OiAgICAgICAgICAgICAgICAgIA0KMjA6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQ0KMjE6ICAgICAgICAgICAgICAgICAgICAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MNCjIyOiAgICAgICAgICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBGdWxsIGxpY2Vuc2UgdGV4dCBpcyBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZw0KMjM6ICAgICAgICAgICAgICAgICAgICAgIGxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sDQoyNDogICAgICAgICAgICAgICAgICANCjI1OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMjc6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEZyZWVSVE9TIHByb3ZpZGVzIGNvbXBsZXRlbHkgZnJlZSB5ZXQgcHJvZmVzc2lvbmFsbHkgZGV2ZWxvcGVkLCAgICAqDQoyODogICAgICAgICAgICAgICAgICAgICAgICogICAgcm9idXN0LCBzdHJpY3RseSBxdWFsaXR5IGNvbnRyb2xsZWQsIHN1cHBvcnRlZCwgYW5kIGNyb3NzICAgICAgICAgICoNCjI5OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBwbGF0Zm9ybSBzb2Z0d2FyZSB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IHRoZSBtYXJrZXQgbGVhZGVyLCBpdCAgICAgKg0KMzA6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGlzIHRoZSBpbmR1c3RyeSdzIGRlIGZhY3RvIHN0YW5kYXJkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMTogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMyOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBIZWxwIHlvdXJzZWxmIGdldCBzdGFydGVkIHF1aWNrbHkgd2hpbGUgc2ltdWx0YW5lb3VzbHkgaGVscGluZyAgICAgKg0KMzM6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHRvIHN1cHBvcnQgdGhlIEZyZWVSVE9TIHByb2plY3QgYnkgcHVyY2hhc2luZyBhIEZyZWVSVE9TICAgICAgICAgICAqDQozNDogICAgICAgICAgICAgICAgICAgICAgICogICAgdHV0b3JpYWwgYm9vaywgcmVmZXJlbmNlIG1hbnVhbCwgb3IgYm90aDogICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM1OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgLSBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZw0KNDA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSBGQVEgcGFnZSAiTXkgYXBwbGljYXRpb24gZG9lcyBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyIuICBIYXZlIHlvdQ0KNDE6ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY29uZmlnQVNTRVJUKCk/DQo0MjogICAgICAgICAgICAgICAgICANCjQzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9zdXBwb3J0IC0gSW4gcmV0dXJuIGZvciByZWNlaXZpbmcgdGhpcyB0b3AgcXVhbGl0eQ0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvZnR3YXJlIGZvciBmcmVlIHdlIHJlcXVlc3QgeW91IGFzc2lzdCBvdXIgZ2xvYmFsIGNvbW11bml0eSBieQ0KNDU6ICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN1cHBvcnQgZm9ydW0uDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy90cmFpbmluZyAtIEludmVzdGluZyBpbiB0cmFpbmluZyBhbGxvd3MgeW91ciB0ZWFtIHRvDQo0ODogICAgICAgICAgICAgICAgICAgICAgYmUgYXMgcHJvZHVjdGl2ZSBhcyBwb3NzaWJsZSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE5vdyB5b3UgY2FuIHJlY2VpdmUNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyB0cmFpbmluZyBkaXJlY3RseSBmcm9tIFJpY2hhcmQgQmFycnksIENFTyBvZiBSZWFsIFRpbWUgRW5naW5lZXJzDQo1MDogICAgICAgICAgICAgICAgICAgICAgTHRkLCBhbmQgdGhlIHdvcmxkJ3MgbGVhZGluZyBhdXRob3JpdHkgb24gdGhlIHdvcmxkJ3MgbGVhZGluZyBSVE9TLg0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCjUzOiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLCBhIERPUw0KNTQ6ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgRkFUIGZpbGUgc3lzdGVtLCBhbmQgb3VyIHRpbnkgdGhyZWFkIGF3YXJlIFVEUC9JUCBzdGFjay4NCjU1OiAgICAgICAgICAgICAgICAgIA0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL2xhYnMgLSBXaGVyZSBuZXcgRnJlZVJUT1MgcHJvZHVjdHMgZ28gdG8gaW5jdWJhdGUuDQo1NzogICAgICAgICAgICAgICAgICAgICAgQ29tZSBhbmQgdHJ5IEZyZWVSVE9TK1RDUCwgb3VyIG5ldyBvcGVuIHNvdXJjZSBUQ1AvSVAgc3RhY2sgZm9yIEZyZWVSVE9TLg0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZC4gbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoDQo2MDogICAgICAgICAgICAgICAgICAgICAgSW50ZWdyaXR5IFN5c3RlbXMgbHRkLiB0byBzZWxsIHVuZGVyIHRoZSBPcGVuUlRPUyBicmFuZC4gIExvdyBjb3N0IE9wZW5SVE9TDQo2MTogICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgb2ZmZXIgdGlja2V0ZWQgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uIGFuZCBjb21tZXJjaWFsIG1pZGRsZXdhcmUuDQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbyBwcm92aWRlIGEgc2FmZXR5DQo2NDogICAgICAgICAgICAgICAgICAgICAgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIGZvciB1c2UgaW4gc2FmZXR5IGFuZA0KNjU6ICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb24gY3JpdGljYWwgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBwcm92YWJsZSBkZXBlbmRhYmlsaXR5Lg0KNjY6ICAgICAgICAgICAgICAgICAgDQo2NzogICAgICAgICAgICAgICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQo2ODogICAgICAgICAgICAgICAgICAqLw0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICANCjcxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4NCjcyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KNzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImxpc3QuaCINCjc0OiAgICAgICAgICAgICAgICAgIA0KNzU6ICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNzY6ICAgICAgICAgICAgICAgICAgICogUFVCTElDIExJU1QgQVBJIGRvY3VtZW50ZWQgaW4gbGlzdC5oDQo3NzogICAgICAgICAgICAgICAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNzg6ICAgICAgICAgICAgICAgICAgDQo3OTogICAgICAgICAgICAgICAgICB2b2lkIHZMaXN0SW5pdGlhbGlzZSggTGlzdF90ICogY29uc3QgcHhMaXN0ICkNCjgwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA4QUUwICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDhBRTIgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA4QUU0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4QUU2ICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQo4MTogICAgICAgICAgICAgICAgICAJLyogVGhlIGxpc3Qgc3RydWN0dXJlIGNvbnRhaW5zIGEgbGlzdCBpdGVtIHdoaWNoIGlzIHVzZWQgdG8gbWFyayB0aGUNCjgyOiAgICAgICAgICAgICAgICAgIAllbmQgb2YgdGhlIGxpc3QuICBUbyBpbml0aWFsaXNlIHRoZSBsaXN0IHRoZSBsaXN0IGVuZCBpcyBpbnNlcnRlZA0KODM6ICAgICAgICAgICAgICAgICAgCWFzIHRoZSBvbmx5IGxpc3QgZW50cnkuICovDQo4NDogICAgICAgICAgICAgICAgICAJcHhMaXN0LT5weEluZGV4ID0gKCBMaXN0SXRlbV90ICogKSAmKCBweExpc3QtPnhMaXN0RW5kICk7CQkJLypsaW50ICFlODI2ICFlNzQwIFRoZSBtaW5pIGxpc3Qgc3RydWN0dXJlIGlzIHVzZWQgYXMgdGhlIGxpc3QgZW5kIHRvIHNhdmUgUkFNLiAgVGhpcyBpcyBjaGVja2VkIGFuZCB2YWxpZC4gKi8NCkJGRDA4QUVBICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQpCRkQwOEFFRSAgICAgIDZEMjQgICBBRERJVSBWMCwgVjAsIDgKQkZEMDhBRjAgICAgICAwQzYyICAgTU9WRSBWMSwgVjAKQkZEMDhBRjIgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpCkJGRDA4QUY2ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQo4NTogICAgICAgICAgICAgICAgICANCjg2OiAgICAgICAgICAgICAgICAgIAkvKiBUaGUgbGlzdCBlbmQgdmFsdWUgaXMgdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUgaW4gdGhlIGxpc3QgdG8NCjg3OiAgICAgICAgICAgICAgICAgIAllbnN1cmUgaXQgcmVtYWlucyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiAqLw0KODg6ICAgICAgICAgICAgICAgICAgCXB4TGlzdC0+eExpc3RFbmQueEl0ZW1WYWx1ZSA9IHBvcnRNQVhfREVMQVk7DQpCRkQwOEFGOCAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkKQkZEMDhBRkMgICAgICBFREZGICAgTEkgVjEsIC0xCkJGRDA4QUZFICAgICAgRTlBMiAgIFNXIFYxLCA4KFYwKQo4OTogICAgICAgICAgICAgICAgICANCjkwOiAgICAgICAgICAgICAgICAgIAkvKiBUaGUgbGlzdCBlbmQgbmV4dCBhbmQgcHJldmlvdXMgcG9pbnRlcnMgcG9pbnQgdG8gaXRzZWxmIHNvIHdlIGtub3cNCjkxOiAgICAgICAgICAgICAgICAgIAl3aGVuIHRoZSBsaXN0IGlzIGVtcHR5LiAqLw0KOTI6ICAgICAgICAgICAgICAgICAgCXB4TGlzdC0+eExpc3RFbmQucHhOZXh0ID0gKCBMaXN0SXRlbV90ICogKSAmKCBweExpc3QtPnhMaXN0RW5kICk7CS8qbGludCAhZTgyNiAhZTc0MCBUaGUgbWluaSBsaXN0IHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBsaXN0IGVuZCB0byBzYXZlIFJBTS4gIFRoaXMgaXMgY2hlY2tlZCBhbmQgdmFsaWQuICovDQpCRkQwOEIwMCAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkKQkZEMDhCMDQgICAgICA2RDI0ICAgQURESVUgVjAsIFYwLCA4CkJGRDA4QjA2ICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDA4QjA4ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQpCRkQwOEIwQyAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApCjkzOiAgICAgICAgICAgICAgICAgIAlweExpc3QtPnhMaXN0RW5kLnB4UHJldmlvdXMgPSAoIExpc3RJdGVtX3QgKiApICYoIHB4TGlzdC0+eExpc3RFbmQgKTsvKmxpbnQgIWU4MjYgIWU3NDAgVGhlIG1pbmkgbGlzdCBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgbGlzdCBlbmQgdG8gc2F2ZSBSQU0uICBUaGlzIGlzIGNoZWNrZWQgYW5kIHZhbGlkLiAqLw0KQkZEMDhCMEUgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpCkJGRDA4QjEyICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOApCRkQwOEIxNCAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMApCRkQwOEIxNiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkKQkZEMDhCMUEgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQo5NDogICAgICAgICAgICAgICAgICANCjk1OiAgICAgICAgICAgICAgICAgIAlweExpc3QtPnV4TnVtYmVyT2ZJdGVtcyA9ICggVUJhc2VUeXBlX3QgKSAwVTsNCkJGRDA4QjFDICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQpCRkQwOEIyMCAgICAgIEU4MjAgICBTVyBTMCwgMChWMCkKOTY6ICAgICAgICAgICAgICAgICAgDQo5NzogICAgICAgICAgICAgICAgICAJLyogV3JpdGUga25vd24gdmFsdWVzIGludG8gdGhlIGxpc3QgaWYNCjk4OiAgICAgICAgICAgICAgICAgIAljb25maWdVU0VfTElTVF9EQVRBX0lOVEVHUklUWV9DSEVDS19CWVRFUyBpcyBzZXQgdG8gMS4gKi8NCjk5OiAgICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSU5URUdSSVRZX0NIRUNLXzFfVkFMVUUoIHB4TGlzdCApOw0KMTAwOiAgICAgICAgICAgICAgICAgCWxpc3RTRVRfTElTVF9JTlRFR1JJVFlfQ0hFQ0tfMl9WQUxVRSggcHhMaXN0ICk7DQoxMDE6ICAgICAgICAgICAgICAgICB9DQpCRkQwOEIyMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOEIyNCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDhCMjYgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4CkJGRDA4QjI4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDhCMkEgICAgICAwQzAwICAgTk9QCjEwMjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTAzOiAgICAgICAgICAgICAgICAgDQoxMDQ6ICAgICAgICAgICAgICAgICB2b2lkIHZMaXN0SW5pdGlhbGlzZUl0ZW0oIExpc3RJdGVtX3QgKiBjb25zdCBweEl0ZW0gKQ0KMTA1OiAgICAgICAgICAgICAgICAgew0KQkZEMDlEQ0MgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOURDRSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlERDAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDlERDIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpCjEwNjogICAgICAgICAgICAgICAgIAkvKiBNYWtlIHN1cmUgdGhlIGxpc3QgaXRlbSBpcyBub3QgcmVjb3JkZWQgYXMgYmVpbmcgb24gYSBsaXN0LiAqLw0KMTA3OiAgICAgICAgICAgICAgICAgCXB4SXRlbS0+cHZDb250YWluZXIgPSBOVUxMOw0KQkZEMDlERDYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpCkJGRDA5RERBICAgICAgRTgyNCAgIFNXIFMwLCAxNihWMCkKMTA4OiAgICAgICAgICAgICAgICAgDQoxMDk6ICAgICAgICAgICAgICAgICAJLyogV3JpdGUga25vd24gdmFsdWVzIGludG8gdGhlIGxpc3QgaXRlbSBpZg0KMTEwOiAgICAgICAgICAgICAgICAgCWNvbmZpZ1VTRV9MSVNUX0RBVEFfSU5URUdSSVRZX0NIRUNLX0JZVEVTIGlzIHNldCB0byAxLiAqLw0KMTExOiAgICAgICAgICAgICAgICAgCWxpc3RTRVRfRklSU1RfTElTVF9JVEVNX0lOVEVHUklUWV9DSEVDS19WQUxVRSggcHhJdGVtICk7DQoxMTI6ICAgICAgICAgICAgICAgICAJbGlzdFNFVF9TRUNPTkRfTElTVF9JVEVNX0lOVEVHUklUWV9DSEVDS19WQUxVRSggcHhJdGVtICk7DQoxMTM6ICAgICAgICAgICAgICAgICB9DQpCRkQwOUREQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOURERSAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDlERTAgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4CkJGRDA5REUyICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlERTQgICAgICAwQzAwICAgTk9QCjExNDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTE1OiAgICAgICAgICAgICAgICAgDQoxMTY6ICAgICAgICAgICAgICAgICB2b2lkIHZMaXN0SW5zZXJ0RW5kKCBMaXN0X3QgKiBjb25zdCBweExpc3QsIExpc3RJdGVtX3QgKiBjb25zdCBweE5ld0xpc3RJdGVtICkNCjExNzogICAgICAgICAgICAgICAgIHsNCkJGRDA3Qzk0ICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA3Qzk2ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDdDOTggICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDdDOUEgIDAwMTBGODlFICAgU1cgQTAsIDE2KFM4KQpCRkQwN0M5RSAgMDAxNEY4QkUgICBTVyBBMSwgMjAoUzgpCjExODogICAgICAgICAgICAgICAgIExpc3RJdGVtX3QgKiBjb25zdCBweEluZGV4ID0gcHhMaXN0LT5weEluZGV4Ow0KQkZEMDdDQTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwN0NBNiAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDdDQTggIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCjExOTogICAgICAgICAgICAgICAgIA0KMTIwOiAgICAgICAgICAgICAgICAgCS8qIE9ubHkgZWZmZWN0aXZlIHdoZW4gY29uZmlnQVNTRVJUKCkgaXMgYWxzbyBkZWZpbmVkLCB0aGVzZSB0ZXN0cyBtYXkgY2F0Y2gNCjEyMTogICAgICAgICAgICAgICAgIAl0aGUgbGlzdCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgb3ZlcndyaXR0ZW4gaW4gbWVtb3J5LiAgVGhleSB3aWxsIG5vdCBjYXRjaA0KMTIyOiAgICAgICAgICAgICAgICAgCWRhdGEgZXJyb3JzIGNhdXNlZCBieSBpbmNvcnJlY3QgY29uZmlndXJhdGlvbiBvciB1c2Ugb2YgRnJlZVJUT1MuICovDQoxMjM6ICAgICAgICAgICAgICAgICAJbGlzdFRFU1RfTElTVF9JTlRFR1JJVFkoIHB4TGlzdCApOw0KMTI0OiAgICAgICAgICAgICAgICAgCWxpc3RURVNUX0xJU1RfSVRFTV9JTlRFR1JJVFkoIHB4TmV3TGlzdEl0ZW0gKTsNCjEyNTogICAgICAgICAgICAgICAgIA0KMTI2OiAgICAgICAgICAgICAgICAgCS8qIEluc2VydCBhIG5ldyBsaXN0IGl0ZW0gaW50byBweExpc3QsIGJ1dCByYXRoZXIgdGhhbiBzb3J0IHRoZSBsaXN0LA0KMTI3OiAgICAgICAgICAgICAgICAgCW1ha2VzIHRoZSBuZXcgbGlzdCBpdGVtIHRoZSBsYXN0IGl0ZW0gdG8gYmUgcmVtb3ZlZCBieSBhIGNhbGwgdG8NCjEyODogICAgICAgICAgICAgICAgIAlsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkoKS4gKi8NCjEyOTogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5weE5leHQgPSBweEluZGV4Ow0KQkZEMDdDQUMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwN0NCMCAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkKQkZEMDdDQjQgICAgICBFOUExICAgU1cgVjEsIDQoVjApCjEzMDogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5weFByZXZpb3VzID0gcHhJbmRleC0+cHhQcmV2aW91czsNCkJGRDA3Q0I2ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwN0NCQSAgICAgIDY5QTIgICBMVyBWMSwgOChWMCkKQkZEMDdDQkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwN0NDMCAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKMTMxOiAgICAgICAgICAgICAgICAgDQoxMzI6ICAgICAgICAgICAgICAgICAJLyogT25seSB1c2VkIGR1cmluZyBkZWNpc2lvbiBjb3ZlcmFnZSB0ZXN0aW5nLiAqLw0KMTMzOiAgICAgICAgICAgICAgICAgCW10Q09WRVJBR0VfVEVTVF9ERUxBWSgpOw0KMTM0OiAgICAgICAgICAgICAgICAgDQoxMzU6ICAgICAgICAgICAgICAgICAJcHhJbmRleC0+cHhQcmV2aW91cy0+cHhOZXh0ID0gcHhOZXdMaXN0SXRlbTsNCkJGRDA3Q0MyICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwN0NDNiAgICAgIDY5MjIgICBMVyBWMCwgOChWMCkKQkZEMDdDQzggIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQpCRkQwN0NDQyAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkKMTM2OiAgICAgICAgICAgICAgICAgCXB4SW5kZXgtPnB4UHJldmlvdXMgPSBweE5ld0xpc3RJdGVtOw0KQkZEMDdDQ0UgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA3Q0QyICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkKQkZEMDdDRDYgICAgICBFOUEyICAgU1cgVjEsIDgoVjApCjEzNzogICAgICAgICAgICAgICAgIA0KMTM4OiAgICAgICAgICAgICAgICAgCS8qIFJlbWVtYmVyIHdoaWNoIGxpc3QgdGhlIGl0ZW0gaXMgaW4uICovDQoxMzk6ICAgICAgICAgICAgICAgICAJcHhOZXdMaXN0SXRlbS0+cHZDb250YWluZXIgPSAoIHZvaWQgKiApIHB4TGlzdDsNCkJGRDA3Q0Q4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDdDREMgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwN0NFMCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjE0MDogICAgICAgICAgICAgICAgIA0KMTQxOiAgICAgICAgICAgICAgICAgCSggcHhMaXN0LT51eE51bWJlck9mSXRlbXMgKSsrOw0KQkZEMDdDRTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwN0NFNiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDdDRTggICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxCkJGRDA3Q0VBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDdDRUUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjE0MjogICAgICAgICAgICAgICAgIH0NCkJGRDA3Q0YwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3Q0YyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDdDRjQgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwN0NGNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA3Q0Y4ICAgICAgMEMwMCAgIE5PUAoxNDM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE0NDogICAgICAgICAgICAgICAgIA0KMTQ1OiAgICAgICAgICAgICAgICAgdm9pZCB2TGlzdEluc2VydCggTGlzdF90ICogY29uc3QgcHhMaXN0LCBMaXN0SXRlbV90ICogY29uc3QgcHhOZXdMaXN0SXRlbSApDQoxNDY6ICAgICAgICAgICAgICAgICB7DQpCRkQwNjA4MCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNgpCRkQwNjA4MiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA2MDg0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA2MDg2ICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkKQkZEMDYwOEEgIDAwMTRGOEJFICAgU1cgQTEsIDIwKFM4KQoxNDc6ICAgICAgICAgICAgICAgICBMaXN0SXRlbV90ICpweEl0ZXJhdG9yOw0KMTQ4OiAgICAgICAgICAgICAgICAgY29uc3QgVGlja1R5cGVfdCB4VmFsdWVPZkluc2VydGlvbiA9IHB4TmV3TGlzdEl0ZW0tPnhJdGVtVmFsdWU7DQpCRkQwNjA4RSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA2MDkyICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwNjA5NCAgMDAwNEY4NUUgICBTVyBWMCwgNChTOCkKMTQ5OiAgICAgICAgICAgICAgICAgDQoxNTA6ICAgICAgICAgICAgICAgICAJLyogT25seSBlZmZlY3RpdmUgd2hlbiBjb25maWdBU1NFUlQoKSBpcyBhbHNvIGRlZmluZWQsIHRoZXNlIHRlc3RzIG1heSBjYXRjaA0KMTUxOiAgICAgICAgICAgICAgICAgCXRoZSBsaXN0IGRhdGEgc3RydWN0dXJlcyBiZWluZyBvdmVyd3JpdHRlbiBpbiBtZW1vcnkuICBUaGV5IHdpbGwgbm90IGNhdGNoDQoxNTI6ICAgICAgICAgICAgICAgICAJZGF0YSBlcnJvcnMgY2F1c2VkIGJ5IGluY29ycmVjdCBjb25maWd1cmF0aW9uIG9yIHVzZSBvZiBGcmVlUlRPUy4gKi8NCjE1MzogICAgICAgICAgICAgICAgIAlsaXN0VEVTVF9MSVNUX0lOVEVHUklUWSggcHhMaXN0ICk7DQoxNTQ6ICAgICAgICAgICAgICAgICAJbGlzdFRFU1RfTElTVF9JVEVNX0lOVEVHUklUWSggcHhOZXdMaXN0SXRlbSApOw0KMTU1OiAgICAgICAgICAgICAgICAgDQoxNTY6ICAgICAgICAgICAgICAgICAJLyogSW5zZXJ0IHRoZSBuZXcgbGlzdCBpdGVtIGludG8gdGhlIGxpc3QsIHNvcnRlZCBpbiB4SXRlbVZhbHVlIG9yZGVyLg0KMTU3OiAgICAgICAgICAgICAgICAgDQoxNTg6ICAgICAgICAgICAgICAgICAJSWYgdGhlIGxpc3QgYWxyZWFkeSBjb250YWlucyBhIGxpc3QgaXRlbSB3aXRoIHRoZSBzYW1lIGl0ZW0gdmFsdWUgdGhlbiB0aGUNCjE1OTogICAgICAgICAgICAgICAgIAluZXcgbGlzdCBpdGVtIHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIgaXQuICBUaGlzIGVuc3VyZXMgdGhhdCBUQ0IncyB3aGljaCBhcmUNCjE2MDogICAgICAgICAgICAgICAgIAlzdG9yZWQgaW4gcmVhZHkgbGlzdHMgKGFsbCBvZiB3aGljaCBoYXZlIHRoZSBzYW1lIHhJdGVtVmFsdWUgdmFsdWUpIGdldCBhDQoxNjE6ICAgICAgICAgICAgICAgICAJc2hhcmUgb2YgdGhlIENQVS4gIEhvd2V2ZXIsIGlmIHRoZSB4SXRlbVZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBiYWNrIG1hcmtlcg0KMTYyOiAgICAgICAgICAgICAgICAgCXRoZSBpdGVyYXRpb24gbG9vcCBiZWxvdyB3aWxsIG5vdCBlbmQuICBUaGVyZWZvcmUgdGhlIHZhbHVlIGlzIGNoZWNrZWQNCjE2MzogICAgICAgICAgICAgICAgIAlmaXJzdCwgYW5kIHRoZSBhbGdvcml0aG0gc2xpZ2h0bHkgbW9kaWZpZWQgaWYgbmVjZXNzYXJ5LiAqLw0KMTY0OiAgICAgICAgICAgICAgICAgCWlmKCB4VmFsdWVPZkluc2VydGlvbiA9PSBwb3J0TUFYX0RFTEFZICkNCkJGRDA2MDk4ICAwMDA0RkM3RSAgIExXIFYxLCA0KFM4KQpCRkQwNjA5QyAgICAgIEVEN0YgICBMSSBWMCwgLTEKQkZEMDYwOUUgIDAwMDhCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNjBCMgpCRkQwNjBBMCAgMEMwMDAwMDggICBTTEwgWkVSTywgVDAsIDEKQkZEMDYwQTIgICAgICAwQzAwICAgTk9QCjE2NTogICAgICAgICAgICAgICAgIAl7DQoxNjY6ICAgICAgICAgICAgICAgICAJCXB4SXRlcmF0b3IgPSBweExpc3QtPnhMaXN0RW5kLnB4UHJldmlvdXM7DQpCRkQwNjBBNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA2MEE4ICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkKQkZEMDYwQUEgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCkJGRDA2MEFFICAgICAgQ0MxNyAgIEIgMHhCRkQwNjBERQpCRkQwNjBCMCAgICAgIDBDMDAgICBOT1AKMTY3OiAgICAgICAgICAgICAgICAgCX0NCjE2ODogICAgICAgICAgICAgICAgIAllbHNlDQoxNjk6ICAgICAgICAgICAgICAgICAJew0KMTcwOiAgICAgICAgICAgICAgICAgCQkvKiAqKiogTk9URSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTcxOiAgICAgICAgICAgICAgICAgCQlJZiB5b3UgZmluZCB5b3VyIGFwcGxpY2F0aW9uIGlzIGNyYXNoaW5nIGhlcmUgdGhlbiBsaWtlbHkgY2F1c2VzIGFyZQ0KMTcyOiAgICAgICAgICAgICAgICAgCQlsaXN0ZWQgYmVsb3cuICBJbiBhZGRpdGlvbiBzZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRkFRSGVscC5odG1sIGZvcg0KMTczOiAgICAgICAgICAgICAgICAgCQltb3JlIHRpcHMsIGFuZCBlbnN1cmUgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCENCjE3NDogICAgICAgICAgICAgICAgIAkJaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTEwLmh0bWwjY29uZmlnQVNTRVJUDQoxNzU6ICAgICAgICAgICAgICAgICANCjE3NjogICAgICAgICAgICAgICAgIAkJCTEpIFN0YWNrIG92ZXJmbG93IC0NCjE3NzogICAgICAgICAgICAgICAgIAkJCSAgIHNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9TdGFja3MtYW5kLXN0YWNrLW92ZXJmbG93LWNoZWNraW5nLmh0bWwNCjE3ODogICAgICAgICAgICAgICAgIAkJCTIpIEluY29ycmVjdCBpbnRlcnJ1cHQgcHJpb3JpdHkgYXNzaWdubWVudCwgZXNwZWNpYWxseSBvbiBDb3J0ZXgtTQ0KMTc5OiAgICAgICAgICAgICAgICAgCQkJICAgcGFydHMgd2hlcmUgbnVtZXJpY2FsbHkgaGlnaCBwcmlvcml0eSB2YWx1ZXMgZGVub3RlIGxvdyBhY3R1YWwNCjE4MDogICAgICAgICAgICAgICAgIAkJCSAgIGludGVycnVwdCBwcmlvcml0aWVzLCB3aGljaCBjYW4gc2VlbSBjb3VudGVyIGludHVpdGl2ZS4gIFNlZQ0KMTgxOiAgICAgICAgICAgICAgICAgCQkJICAgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCBhbmQgdGhlIGRlZmluaXRpb24NCjE4MjogICAgICAgICAgICAgICAgIAkJCSAgIG9mIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBvbg0KMTgzOiAgICAgICAgICAgICAgICAgCQkJICAgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTEwLmh0bWwNCjE4NDogICAgICAgICAgICAgICAgIAkJCTMpIENhbGxpbmcgYW4gQVBJIGZ1bmN0aW9uIGZyb20gd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiBvciB3aGVuDQoxODU6ICAgICAgICAgICAgICAgICAJCQkgICB0aGUgc2NoZWR1bGVyIGlzIHN1c3BlbmRlZCwgb3IgY2FsbGluZyBhbiBBUEkgZnVuY3Rpb24gdGhhdCBkb2VzDQoxODY6ICAgICAgICAgICAgICAgICAJCQkgICBub3QgZW5kIGluICJGcm9tSVNSIiBmcm9tIGFuIGludGVycnVwdC4NCjE4NzogICAgICAgICAgICAgICAgIAkJCTQpIFVzaW5nIGEgcXVldWUgb3Igc2VtYXBob3JlIGJlZm9yZSBpdCBoYXMgYmVlbiBpbml0aWFsaXNlZCBvcg0KMTg4OiAgICAgICAgICAgICAgICAgCQkJICAgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZCAoYXJlIGludGVycnVwdHMgZmlyaW5nDQoxODk6ICAgICAgICAgICAgICAgICAJCQkgICBiZWZvcmUgdlRhc2tTdGFydFNjaGVkdWxlcigpIGhhcyBiZWVuIGNhbGxlZD8pLg0KMTkwOiAgICAgICAgICAgICAgICAgCQkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMTkxOiAgICAgICAgICAgICAgICAgDQoxOTI6ICAgICAgICAgICAgICAgICAJCWZvciggcHhJdGVyYXRvciA9ICggTGlzdEl0ZW1fdCAqICkgJiggcHhMaXN0LT54TGlzdEVuZCApOyBweEl0ZXJhdG9yLT5weE5leHQtPnhJdGVtVmFsdWUgPD0geFZhbHVlT2ZJbnNlcnRpb247IHB4SXRlcmF0b3IgPSBweEl0ZXJhdG9yLT5weE5leHQgKSAvKmxpbnQgIWU4MjYgIWU3NDAgVGhlIG1pbmkgbGlzdCBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgbGlzdCBlbmQgdG8gc2F2ZSBSQU0uICBUaGlzIGlzIGNoZWNrZWQgYW5kIHZhbGlkLiAqLw0KQkZEMDYwQjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjBCNiAgICAgIDZEMjQgICBBRERJVSBWMCwgVjAsIDgKQkZEMDYwQjggIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCkJGRDA2MEJDICAgICAgQ0MwNiAgIEIgMHhCRkQwNjBDQQpCRkQwNjBCRSAgICAgIDBDMDAgICBOT1AKQkZEMDYwQzAgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA2MEM0ICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQpCRkQwNjBDNiAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkKQkZEMDYwQ0EgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA2MENFICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQpCRkQwNjBEMCAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkKQkZEMDYwRDIgIDAwMDRGQzVFICAgTFcgVjAsIDQoUzgpCkJGRDA2MEQ2ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQpCRkQwNjBEOCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTAKQkZEMDYwREEgIEZGRjE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDYwQzAKQkZEMDYwREMgIEZDNUVGRkYxICAgTFcgUkEsIC05MzAoUzEpCjE5MzogICAgICAgICAgICAgICAgIAkJew0KMTk0OiAgICAgICAgICAgICAgICAgCQkJLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLCBqdXN0IGl0ZXJhdGluZyB0byB0aGUgd2FudGVkDQoxOTU6ICAgICAgICAgICAgICAgICAJCQlpbnNlcnRpb24gcG9zaXRpb24uICovDQoxOTY6ICAgICAgICAgICAgICAgICAJCX0NCjE5NzogICAgICAgICAgICAgICAgIAl9DQoxOTg6ICAgICAgICAgICAgICAgICANCjE5OTogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5weE5leHQgPSBweEl0ZXJhdG9yLT5weE5leHQ7DQpCRkQwNjBERSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKQkZEMDYwRTIgICAgICA2OUExICAgTFcgVjEsIDQoVjApCkJGRDA2MEU0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDYwRTggICAgICBFOUExICAgU1cgVjEsIDQoVjApCjIwMDogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5weE5leHQtPnB4UHJldmlvdXMgPSBweE5ld0xpc3RJdGVtOw0KQkZEMDYwRUEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNjBFRSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDYwRjAgIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQpCRkQwNjBGNCAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKMjAxOiAgICAgICAgICAgICAgICAgCXB4TmV3TGlzdEl0ZW0tPnB4UHJldmlvdXMgPSBweEl0ZXJhdG9yOw0KQkZEMDYwRjYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNjBGQSAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkKQkZEMDYwRkUgICAgICBFOUEyICAgU1cgVjEsIDgoVjApCjIwMjogICAgICAgICAgICAgICAgIAlweEl0ZXJhdG9yLT5weE5leHQgPSBweE5ld0xpc3RJdGVtOw0KQkZEMDYxMDAgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA2MTA0ICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkKQkZEMDYxMDggICAgICBFOUExICAgU1cgVjEsIDQoVjApCjIwMzogICAgICAgICAgICAgICAgIA0KMjA0OiAgICAgICAgICAgICAgICAgCS8qIFJlbWVtYmVyIHdoaWNoIGxpc3QgdGhlIGl0ZW0gaXMgaW4uICBUaGlzIGFsbG93cyBmYXN0IHJlbW92YWwgb2YgdGhlDQoyMDU6ICAgICAgICAgICAgICAgICAJaXRlbSBsYXRlci4gKi8NCjIwNjogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5wdkNvbnRhaW5lciA9ICggdm9pZCAqICkgcHhMaXN0Ow0KQkZEMDYxMEEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNjEwRSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA2MTEyICAgICAgRTlBNCAgIFNXIFYxLCAxNihWMCkKMjA3OiAgICAgICAgICAgICAgICAgDQoyMDg6ICAgICAgICAgICAgICAgICAJKCBweExpc3QtPnV4TnVtYmVyT2ZJdGVtcyApKys7DQpCRkQwNjExNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA2MTE4ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwNjExQSAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDEKQkZEMDYxMUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjEyMCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjA5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDYxMjIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDYxMjQgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwNjEyNiAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDA2MTI4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDYxMkEgICAgICAwQzAwICAgTk9QCjIxMDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjExOiAgICAgICAgICAgICAgICAgDQoyMTI6ICAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eExpc3RSZW1vdmUoIExpc3RJdGVtX3QgKiBjb25zdCBweEl0ZW1Ub1JlbW92ZSApDQoyMTM6ICAgICAgICAgICAgICAgICB7DQpCRkQwMDE5MCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNgpCRkQwMDE5MiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDAwMTk0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDAwMTk2ICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkKMjE0OiAgICAgICAgICAgICAgICAgLyogVGhlIGxpc3QgaXRlbSBrbm93cyB3aGljaCBsaXN0IGl0IGlzIGluLiAgT2J0YWluIHRoZSBsaXN0IGZyb20gdGhlIGxpc3QNCjIxNTogICAgICAgICAgICAgICAgIGl0ZW0uICovDQoyMTY6ICAgICAgICAgICAgICAgICBMaXN0X3QgKiBjb25zdCBweExpc3QgPSAoIExpc3RfdCAqICkgcHhJdGVtVG9SZW1vdmUtPnB2Q29udGFpbmVyOw0KQkZEMDAxOUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMDE5RSAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApCkJGRDAwMUEwICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQoyMTc6ICAgICAgICAgICAgICAgICANCjIxODogICAgICAgICAgICAgICAgIAlweEl0ZW1Ub1JlbW92ZS0+cHhOZXh0LT5weFByZXZpb3VzID0gcHhJdGVtVG9SZW1vdmUtPnB4UHJldmlvdXM7DQpCRkQwMDFBNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAwMUE4ICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQpCRkQwMDFBQSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAwMUFFICAgICAgNjlCMiAgIExXIFYxLCA4KFYxKQpCRkQwMDFCMCAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKMjE5OiAgICAgICAgICAgICAgICAgCXB4SXRlbVRvUmVtb3ZlLT5weFByZXZpb3VzLT5weE5leHQgPSBweEl0ZW1Ub1JlbW92ZS0+cHhOZXh0Ow0KQkZEMDAxQjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMDFCNiAgICAgIDY5MjIgICBMVyBWMCwgOChWMCkKQkZEMDAxQjggIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwMDFCQyAgICAgIDY5QjEgICBMVyBWMSwgNChWMSkKQkZEMDAxQkUgICAgICBFOUExICAgU1cgVjEsIDQoVjApCjIyMDogICAgICAgICAgICAgICAgIA0KMjIxOiAgICAgICAgICAgICAgICAgCS8qIE9ubHkgdXNlZCBkdXJpbmcgZGVjaXNpb24gY292ZXJhZ2UgdGVzdGluZy4gKi8NCjIyMjogICAgICAgICAgICAgICAgIAltdENPVkVSQUdFX1RFU1RfREVMQVkoKTsNCjIyMzogICAgICAgICAgICAgICAgIA0KMjI0OiAgICAgICAgICAgICAgICAgCS8qIE1ha2Ugc3VyZSB0aGUgaW5kZXggaXMgbGVmdCBwb2ludGluZyB0byBhIHZhbGlkIGl0ZW0uICovDQoyMjU6ICAgICAgICAgICAgICAgICAJaWYoIHB4TGlzdC0+cHhJbmRleCA9PSBweEl0ZW1Ub1JlbW92ZSApDQpCRkQwMDFDMCAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKQkZEMDAxQzQgICAgICA2OUExICAgTFcgVjEsIDQoVjApCkJGRDAwMUM2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDAxQ0EgIDAwMDdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMDFEQwpCRkQwMDFDQyAgMEMwMDAwMDcgICBTTEwgWkVSTywgQTMsIDEKQkZEMDAxQ0UgICAgICAwQzAwICAgTk9QCjIyNjogICAgICAgICAgICAgICAgIAl7DQoyMjc6ICAgICAgICAgICAgICAgICAJCXB4TGlzdC0+cHhJbmRleCA9IHB4SXRlbVRvUmVtb3ZlLT5weFByZXZpb3VzOw0KQkZEMDAxRDAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMDFENCAgICAgIDY5QTIgICBMVyBWMSwgOChWMCkKQkZEMDAxRDYgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDAwMURBICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQoyMjg6ICAgICAgICAgICAgICAgICAJfQ0KMjI5OiAgICAgICAgICAgICAgICAgCWVsc2UNCjIzMDogICAgICAgICAgICAgICAgIAl7DQoyMzE6ICAgICAgICAgICAgICAgICAJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIzMjogICAgICAgICAgICAgICAgIAl9DQoyMzM6ICAgICAgICAgICAgICAgICANCjIzNDogICAgICAgICAgICAgICAgIAlweEl0ZW1Ub1JlbW92ZS0+cHZDb250YWluZXIgPSBOVUxMOw0KQkZEMDAxREMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMDFFMCAgICAgIEU4MjQgICBTVyBTMCwgMTYoVjApCjIzNTogICAgICAgICAgICAgICAgIAkoIHB4TGlzdC0+dXhOdW1iZXJPZkl0ZW1zICktLTsNCkJGRDAwMUUyICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwMDFFNiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDAxRTggICAgICA2REFFICAgQURESVUgVjEsIFYwLCAtMQpCRkQwMDFFQSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKQkZEMDAxRUUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjIzNjogICAgICAgICAgICAgICAgIA0KMjM3OiAgICAgICAgICAgICAgICAgCXJldHVybiBweExpc3QtPnV4TnVtYmVyT2ZJdGVtczsNCkJGRDAwMUYwICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwMDFGNCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKMjM4OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDAxRjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDAxRjggICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwMDFGQSAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDAwMUZDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDAxRkUgICAgICAwQzAwICAgTk9QCjIzOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQwOiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL3NvdXJjZS9ldmVudF9ncm91cHMuYyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4hQU5EIE1PRElGSUVEIEJZITw8IHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQoxMjogICAgICAgICAgICAgICAgICANCjEzOiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE0OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBOT1RFOiBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvICAgICAhPDwNCjE1OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgICAhPDwNCjE2OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvYmxpZ2VkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzICAgICAhPDwNCjE3OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUyBrZXJuZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPDwNCjE4OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE5OiAgICAgICAgICAgICAgICAgIA0KMjA6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQ0KMjE6ICAgICAgICAgICAgICAgICAgICAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MNCjIyOiAgICAgICAgICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBGdWxsIGxpY2Vuc2UgdGV4dCBpcyBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZw0KMjM6ICAgICAgICAgICAgICAgICAgICAgIGxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sDQoyNDogICAgICAgICAgICAgICAgICANCjI1OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMjc6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEZyZWVSVE9TIHByb3ZpZGVzIGNvbXBsZXRlbHkgZnJlZSB5ZXQgcHJvZmVzc2lvbmFsbHkgZGV2ZWxvcGVkLCAgICAqDQoyODogICAgICAgICAgICAgICAgICAgICAgICogICAgcm9idXN0LCBzdHJpY3RseSBxdWFsaXR5IGNvbnRyb2xsZWQsIHN1cHBvcnRlZCwgYW5kIGNyb3NzICAgICAgICAgICoNCjI5OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBwbGF0Zm9ybSBzb2Z0d2FyZSB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IHRoZSBtYXJrZXQgbGVhZGVyLCBpdCAgICAgKg0KMzA6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGlzIHRoZSBpbmR1c3RyeSdzIGRlIGZhY3RvIHN0YW5kYXJkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMTogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMyOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBIZWxwIHlvdXJzZWxmIGdldCBzdGFydGVkIHF1aWNrbHkgd2hpbGUgc2ltdWx0YW5lb3VzbHkgaGVscGluZyAgICAgKg0KMzM6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHRvIHN1cHBvcnQgdGhlIEZyZWVSVE9TIHByb2plY3QgYnkgcHVyY2hhc2luZyBhIEZyZWVSVE9TICAgICAgICAgICAqDQozNDogICAgICAgICAgICAgICAgICAgICAgICogICAgdHV0b3JpYWwgYm9vaywgcmVmZXJlbmNlIG1hbnVhbCwgb3IgYm90aDogICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM1OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgLSBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZw0KNDA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSBGQVEgcGFnZSAiTXkgYXBwbGljYXRpb24gZG9lcyBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyIuICBIYXZlIHlvdQ0KNDE6ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY29uZmlnQVNTRVJUKCk/DQo0MjogICAgICAgICAgICAgICAgICANCjQzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9zdXBwb3J0IC0gSW4gcmV0dXJuIGZvciByZWNlaXZpbmcgdGhpcyB0b3AgcXVhbGl0eQ0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvZnR3YXJlIGZvciBmcmVlIHdlIHJlcXVlc3QgeW91IGFzc2lzdCBvdXIgZ2xvYmFsIGNvbW11bml0eSBieQ0KNDU6ICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN1cHBvcnQgZm9ydW0uDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy90cmFpbmluZyAtIEludmVzdGluZyBpbiB0cmFpbmluZyBhbGxvd3MgeW91ciB0ZWFtIHRvDQo0ODogICAgICAgICAgICAgICAgICAgICAgYmUgYXMgcHJvZHVjdGl2ZSBhcyBwb3NzaWJsZSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE5vdyB5b3UgY2FuIHJlY2VpdmUNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyB0cmFpbmluZyBkaXJlY3RseSBmcm9tIFJpY2hhcmQgQmFycnksIENFTyBvZiBSZWFsIFRpbWUgRW5naW5lZXJzDQo1MDogICAgICAgICAgICAgICAgICAgICAgTHRkLCBhbmQgdGhlIHdvcmxkJ3MgbGVhZGluZyBhdXRob3JpdHkgb24gdGhlIHdvcmxkJ3MgbGVhZGluZyBSVE9TLg0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCjUzOiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLCBhIERPUw0KNTQ6ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgRkFUIGZpbGUgc3lzdGVtLCBhbmQgb3VyIHRpbnkgdGhyZWFkIGF3YXJlIFVEUC9JUCBzdGFjay4NCjU1OiAgICAgICAgICAgICAgICAgIA0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL2xhYnMgLSBXaGVyZSBuZXcgRnJlZVJUT1MgcHJvZHVjdHMgZ28gdG8gaW5jdWJhdGUuDQo1NzogICAgICAgICAgICAgICAgICAgICAgQ29tZSBhbmQgdHJ5IEZyZWVSVE9TK1RDUCwgb3VyIG5ldyBvcGVuIHNvdXJjZSBUQ1AvSVAgc3RhY2sgZm9yIEZyZWVSVE9TLg0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZC4gbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoDQo2MDogICAgICAgICAgICAgICAgICAgICAgSW50ZWdyaXR5IFN5c3RlbXMgbHRkLiB0byBzZWxsIHVuZGVyIHRoZSBPcGVuUlRPUyBicmFuZC4gIExvdyBjb3N0IE9wZW5SVE9TDQo2MTogICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgb2ZmZXIgdGlja2V0ZWQgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uIGFuZCBjb21tZXJjaWFsIG1pZGRsZXdhcmUuDQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbyBwcm92aWRlIGEgc2FmZXR5DQo2NDogICAgICAgICAgICAgICAgICAgICAgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIGZvciB1c2UgaW4gc2FmZXR5IGFuZA0KNjU6ICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb24gY3JpdGljYWwgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBwcm92YWJsZSBkZXBlbmRhYmlsaXR5Lg0KNjY6ICAgICAgICAgICAgICAgICAgDQo2NzogICAgICAgICAgICAgICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQo2ODogICAgICAgICAgICAgICAgICAqLw0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICAvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCjcxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4NCjcyOiAgICAgICAgICAgICAgICAgIA0KNzM6ICAgICAgICAgICAgICAgICAgLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZw0KNzQ6ICAgICAgICAgICAgICAgICAgYWxsIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgTVBVIHdyYXBwZXJzLiAgVGhhdCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4NCjc1OiAgICAgICAgICAgICAgICAgIHRhc2suaCBpcyBpbmNsdWRlZCBmcm9tIGFuIGFwcGxpY2F0aW9uIGZpbGUuICovDQo3NjogICAgICAgICAgICAgICAgICAjZGVmaW5lIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFDQo3NzogICAgICAgICAgICAgICAgICANCjc4OiAgICAgICAgICAgICAgICAgIC8qIEZyZWVSVE9TIGluY2x1ZGVzLiAqLw0KNzk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQo4MDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGFzay5oIg0KODE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInRpbWVycy5oIg0KODI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImV2ZW50X2dyb3Vwcy5oIg0KODM6ICAgICAgICAgICAgICAgICAgDQo4NDogICAgICAgICAgICAgICAgICAvKiBMaW50IGU5NjEgYW5kIGU3NTAgYXJlIHN1cHByZXNzZWQgYXMgYSBNSVNSQSBleGNlcHRpb24ganVzdGlmaWVkIGJlY2F1c2UgdGhlDQo4NTogICAgICAgICAgICAgICAgICBNUFUgcG9ydHMgcmVxdWlyZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSB0byBiZSBkZWZpbmVkIGZvciB0aGUNCjg2OiAgICAgICAgICAgICAgICAgIGhlYWRlciBmaWxlcyBhYm92ZSwgYnV0IG5vdCBpbiB0aGlzIGZpbGUsIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0DQo4NzogICAgICAgICAgICAgICAgICBwcml2aWxlZ2VkIFZzIHVucHJpdmlsZWdlZCBsaW5rYWdlIGFuZCBwbGFjZW1lbnQuICovDQo4ODogICAgICAgICAgICAgICAgICAjdW5kZWYgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgLypsaW50ICFlOTYxICFlNzUwLiAqLw0KODk6ICAgICAgICAgICAgICAgICAgDQo5MDogICAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3hFdmVudEdyb3VwU2V0Qml0RnJvbUlTUiA9PSAxICkgJiYgKCBjb25maWdVU0VfVElNRVJTID09IDAgKQ0KOTE6ICAgICAgICAgICAgICAgICAgCSNlcnJvciBjb25maWdVU0VfVElNRVJTIG11c3QgYmUgc2V0IHRvIDEgdG8gbWFrZSB0aGUgeEV2ZW50R3JvdXBTZXRCaXRGcm9tSVNSKCkgZnVuY3Rpb24gYXZhaWxhYmxlLg0KOTI6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo5MzogICAgICAgICAgICAgICAgICANCjk0OiAgICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfeEV2ZW50R3JvdXBTZXRCaXRGcm9tSVNSID09IDEgKSAmJiAoIElOQ0xVREVfeFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbCA9PSAwICkNCjk1OiAgICAgICAgICAgICAgICAgIAkjZXJyb3IgSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsIG11c3QgYWxzbyBiZSBzZXQgdG8gb25lIHRvIG1ha2UgdGhlIHhFdmVudEdyb3VwU2V0Qml0RnJvbUlTUigpIGZ1bmN0aW9uIGF2YWlsYWJsZS4NCjk2OiAgICAgICAgICAgICAgICAgICNlbmRpZg0KOTc6ICAgICAgICAgICAgICAgICAgDQo5ODogICAgICAgICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGJpdCBmaWVsZHMgY29udmV5IGNvbnRyb2wgaW5mb3JtYXRpb24gaW4gYSB0YXNrJ3MgZXZlbnQgbGlzdA0KOTk6ICAgICAgICAgICAgICAgICAgaXRlbSB2YWx1ZS4gIEl0IGlzIGltcG9ydGFudCB0aGV5IGRvbid0IGNsYXNoIHdpdGggdGhlDQoxMDA6ICAgICAgICAgICAgICAgICB0YXNrRVZFTlRfTElTVF9JVEVNX1ZBTFVFX0lOX1VTRSBkZWZpbml0aW9uLiAqLw0KMTAxOiAgICAgICAgICAgICAgICAgI2lmIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMQ0KMTAyOiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgZXZlbnRDTEVBUl9FVkVOVFNfT05fRVhJVF9CSVQJMHgwMTAwVQ0KMTAzOiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgZXZlbnRVTkJMT0NLRURfRFVFX1RPX0JJVF9TRVQJMHgwMjAwVQ0KMTA0OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgZXZlbnRXQUlUX0ZPUl9BTExfQklUUwkJCTB4MDQwMFUNCjEwNTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIGV2ZW50RVZFTlRfQklUU19DT05UUk9MX0JZVEVTCTB4ZmYwMFUNCjEwNjogICAgICAgICAgICAgICAgICNlbHNlDQoxMDc6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBldmVudENMRUFSX0VWRU5UU19PTl9FWElUX0JJVAkweDAxMDAwMDAwVUwNCjEwODogICAgICAgICAgICAgICAgIAkjZGVmaW5lIGV2ZW50VU5CTE9DS0VEX0RVRV9UT19CSVRfU0VUCTB4MDIwMDAwMDBVTA0KMTA5OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgZXZlbnRXQUlUX0ZPUl9BTExfQklUUwkJCTB4MDQwMDAwMDBVTA0KMTEwOiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVMJMHhmZjAwMDAwMFVMDQoxMTE6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjExMjogICAgICAgICAgICAgICAgIA0KMTEzOiAgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgeEV2ZW50R3JvdXBEZWZpbml0aW9uDQoxMTQ6ICAgICAgICAgICAgICAgICB7DQoxMTU6ICAgICAgICAgICAgICAgICAJRXZlbnRCaXRzX3QgdXhFdmVudEJpdHM7DQoxMTY6ICAgICAgICAgICAgICAgICAJTGlzdF90IHhUYXNrc1dhaXRpbmdGb3JCaXRzOwkJLyo8IExpc3Qgb2YgdGFza3Mgd2FpdGluZyBmb3IgYSBiaXQgdG8gYmUgc2V0LiAqLw0KMTE3OiAgICAgICAgICAgICAgICAgDQoxMTg6ICAgICAgICAgICAgICAgICAJI2lmKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoxMTk6ICAgICAgICAgICAgICAgICAJCVVCYXNlVHlwZV90IHV4RXZlbnRHcm91cE51bWJlcjsNCjEyMDogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjEyMTogICAgICAgICAgICAgICAgIA0KMTIyOiAgICAgICAgICAgICAgICAgfSBFdmVudEdyb3VwX3Q7DQoxMjM6ICAgICAgICAgICAgICAgICANCjEyNDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTI1OiAgICAgICAgICAgICAgICAgDQoxMjY6ICAgICAgICAgICAgICAgICAvKg0KMTI3OiAgICAgICAgICAgICAgICAgICogVGVzdCB0aGUgYml0cyBzZXQgaW4gdXhDdXJyZW50RXZlbnRCaXRzIHRvIHNlZSBpZiB0aGUgd2FpdCBjb25kaXRpb24gaXMgbWV0Lg0KMTI4OiAgICAgICAgICAgICAgICAgICogVGhlIHdhaXQgY29uZGl0aW9uIGlzIGRlZmluZWQgYnkgeFdhaXRGb3JBbGxCaXRzLiAgSWYgeFdhaXRGb3JBbGxCaXRzIGlzDQoxMjk6ICAgICAgICAgICAgICAgICAgKiBwZFRSVUUgdGhlbiB0aGUgd2FpdCBjb25kaXRpb24gaXMgbWV0IGlmIGFsbCB0aGUgYml0cyBzZXQgaW4gdXhCaXRzVG9XYWl0Rm9yDQoxMzA6ICAgICAgICAgICAgICAgICAgKiBhcmUgYWxzbyBzZXQgaW4gdXhDdXJyZW50RXZlbnRCaXRzLiAgSWYgeFdhaXRGb3JBbGxCaXRzIGlzIHBkRkFMU0UgdGhlbiB0aGUNCjEzMTogICAgICAgICAgICAgICAgICAqIHdhaXQgY29uZGl0aW9uIGlzIG1ldCBpZiBhbnkgb2YgdGhlIGJpdHMgc2V0IGluIHV4Qml0c1RvV2FpdCBmb3IgYXJlIGFsc28gc2V0DQoxMzI6ICAgICAgICAgICAgICAgICAgKiBpbiB1eEN1cnJlbnRFdmVudEJpdHMuDQoxMzM6ICAgICAgICAgICAgICAgICAgKi8NCjEzNDogICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydlRlc3RXYWl0Q29uZGl0aW9uKCBjb25zdCBFdmVudEJpdHNfdCB1eEN1cnJlbnRFdmVudEJpdHMsIGNvbnN0IEV2ZW50Qml0c190IHV4Qml0c1RvV2FpdEZvciwgY29uc3QgQmFzZVR5cGVfdCB4V2FpdEZvckFsbEJpdHMgKTsNCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMzc6ICAgICAgICAgICAgICAgICANCjEzODogICAgICAgICAgICAgICAgIEV2ZW50R3JvdXBIYW5kbGVfdCB4RXZlbnRHcm91cENyZWF0ZSggdm9pZCApDQoxMzk6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTMyMCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOTMyMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA5MzI0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDkzMjYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMTQwOiAgICAgICAgICAgICAgICAgRXZlbnRHcm91cF90ICpweEV2ZW50Qml0czsNCjE0MTogICAgICAgICAgICAgICAgIA0KMTQyOiAgICAgICAgICAgICAgICAgCXB4RXZlbnRCaXRzID0gKCBFdmVudEdyb3VwX3QgKiApIHB2UG9ydE1hbGxvYyggc2l6ZW9mKCBFdmVudEdyb3VwX3QgKSApOw0KQkZEMDkzMjggICAgICBFRTE4ICAgTEkgQTAsIDI0CkJGRDA5MzJBICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jCkJGRDA5MzJDICAwQzAwMTExNiAgIEFEREkgVDAsIFM2LCAzMDcyCkJGRDA5MzJFICAgICAgMEMwMCAgIE5PUApCRkQwOTMzMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE0MzogICAgICAgICAgICAgICAgIAlpZiggcHhFdmVudEJpdHMgIT0gTlVMTCApDQpCRkQwOTMzNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA5MzM4ICAwMDBBNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5MzUwCjE0NDogICAgICAgICAgICAgICAgIAl7DQoxNDU6ICAgICAgICAgICAgICAgICAJCXB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyA9IDA7DQpCRkQwOTMzQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA5MzQwICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQoxNDY6ICAgICAgICAgICAgICAgICAJCXZMaXN0SW5pdGlhbGlzZSggJiggcHhFdmVudEJpdHMtPnhUYXNrc1dhaXRpbmdGb3JCaXRzICkgKTsNCkJGRDA5MzQyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDkzNDYgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDA5MzQ4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA5MzRBICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlCkJGRDA5MzRDICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkKQkZEMDkzNEUgICAgICAwQzAwICAgTk9QCjE0NzogICAgICAgICAgICAgICAgIAkJdHJhY2VFVkVOVF9HUk9VUF9DUkVBVEUoIHB4RXZlbnRCaXRzICk7DQoxNDg6ICAgICAgICAgICAgICAgICAJfQ0KMTQ5OiAgICAgICAgICAgICAgICAgCWVsc2UNCjE1MDogICAgICAgICAgICAgICAgIAl7DQoxNTE6ICAgICAgICAgICAgICAgICAJCXRyYWNlRVZFTlRfR1JPVVBfQ1JFQVRFX0ZBSUxFRCgpOw0KMTUyOiAgICAgICAgICAgICAgICAgCX0NCjE1MzogICAgICAgICAgICAgICAgIA0KMTU0OiAgICAgICAgICAgICAgICAgCXJldHVybiAoIEV2ZW50R3JvdXBIYW5kbGVfdCApIHB4RXZlbnRCaXRzOw0KQkZEMDkzNTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQoxNTU6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTM1NCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTM1NiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA5MzU4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDkzNUEgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOTM1QyAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5MzVFICAgICAgMEMwMCAgIE5PUAoxNTY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE1NzogICAgICAgICAgICAgICAgIA0KMTU4OiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgeEV2ZW50R3JvdXBTeW5jKCBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXAsIGNvbnN0IEV2ZW50Qml0c190IHV4Qml0c1RvU2V0LCBjb25zdCBFdmVudEJpdHNfdCB1eEJpdHNUb1dhaXRGb3IsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjE1OTogICAgICAgICAgICAgICAgIHsNCkJGRDAxQjBDICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4CkJGRDAxQjBFICAgICAgQ0JFQiAgIFNXIFJBLCA0NChTUCkKQkZEMDFCMTAgICAgICBDQkNBICAgU1cgUzgsIDQwKFNQKQpCRkQwMUIxMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMUIxNCAgMDAzMEY4OUUgICBTVyBBMCwgNDgoUzgpCkJGRDAxQjE4ICAwMDM0RjhCRSAgIFNXIEExLCA1MihTOCkKQkZEMDFCMUMgIDAwMzhGOERFICAgU1cgQTIsIDU2KFM4KQpCRkQwMUIyMCAgMDAzQ0Y4RkUgICBTVyBBMywgNjAoUzgpCjE2MDogICAgICAgICAgICAgICAgIEV2ZW50Qml0c190IHV4T3JpZ2luYWxCaXRWYWx1ZSwgdXhSZXR1cm47DQoxNjE6ICAgICAgICAgICAgICAgICBFdmVudEdyb3VwX3QgKnB4RXZlbnRCaXRzID0gKCBFdmVudEdyb3VwX3QgKiApIHhFdmVudEdyb3VwOw0KQkZEMDFCMjQgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQpCRkQwMUIyOCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjE2MjogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeEFscmVhZHlZaWVsZGVkOw0KMTYzOiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZW91dE9jY3VycmVkID0gcGRGQUxTRTsNCkJGRDAxQjJDICAwMDE4RjgxRSAgIFNXIFpFUk8sIDI0KFM4KQoxNjQ6ICAgICAgICAgICAgICAgICANCjE2NTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggdXhCaXRzVG9XYWl0Rm9yICYgZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVMgKSA9PSAwICk7DQpCRkQwMUIzMCAgMDAzOEZDN0UgICBMVyBWMSwgNTYoUzgpCkJGRDAxQjM0ICBGRjAwNDFBMiAgIExVSSBWMCwgMHhGRjAwCkJGRDAxQjM2ICA0NDkzRkYwMCAgIExXIFQ4LCAxNzU1NShaRVJPKQpCRkQwMUIzOCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDFCM0EgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDFCNTAKQkZEMDFCM0UgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDFCNDAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMUI0MiAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OApCRkQwMUI0NCAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkKQkZEMDFCNDYgIDAwQTUzMEEwICAgQURESVUgQTEsIFpFUk8sIDE2NQpCRkQwMUI0QSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDFCNEMgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDFCNEUgICAgICAwQzAwICAgTk9QCjE2NjogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHV4Qml0c1RvV2FpdEZvciAhPSAwICk7DQpCRkQwMUI1MCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpCkJGRDAxQjU0ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxQjZBCkJGRDAxQjU4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAxQjVBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDFCNUMgIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgKQkZEMDFCNUUgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpCkJGRDAxQjYwICAwMEE2MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjYKQkZEMDFCNjQgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAxQjY2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAxQjY4ICAgICAgMEMwMCAgIE5PUAoxNjc6ICAgICAgICAgICAgICAgICAJI2lmICggKCBJTkNMVURFX3hUYXNrR2V0U2NoZWR1bGVyU3RhdGUgPT0gMSApIHx8ICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKQ0KMTY4OiAgICAgICAgICAgICAgICAgCXsNCjE2OTogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAhKCAoIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKSA9PSB0YXNrU0NIRURVTEVSX1NVU1BFTkRFRCApICYmICggeFRpY2tzVG9XYWl0ICE9IDAgKSApICk7DQpCRkQwMUI2QSAgNEE4RTc3RTggICBKQUxTIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUKQkZEMDFCNkMgICAgICA0QThFICAgTFcgUzQsIDU2KFNQKQpCRkQwMUI2RSAgICAgIDBDMDAgICBOT1AKQkZEMDFCNzAgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDFCN0MKQkZEMDFCNzQgIDAwM0NGQzVFICAgTFcgVjAsIDYwKFM4KQpCRkQwMUI3OCAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMUI4MgpCRkQwMUI3QyAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMUI3RSAgICAgIENDMDIgICBCIDB4QkZEMDFCODQKQkZEMDFCODAgICAgICAwQzAwICAgTk9QCkJGRDAxQjgyICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8KQkZEMDFCODQgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDFCOUEKQkZEMDFCODggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDFCOEEgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMUI4QyAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OApCRkQwMUI4RSAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkKQkZEMDFCOTAgIDAwQTkzMEEwICAgQURESVUgQTEsIFpFUk8sIDE2OQpCRkQwMUI5NCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDFCOTYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDFCOTggICAgICAwQzAwICAgTk9QCjE3MDogICAgICAgICAgICAgICAgIAl9DQoxNzE6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNzI6ICAgICAgICAgICAgICAgICANCjE3MzogICAgICAgICAgICAgICAgIAl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDAxQjlBICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsCkJGRDAxQjlDICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYKQkZEMDFCOUUgICAgICAwQzAwICAgTk9QCjE3NDogICAgICAgICAgICAgICAgIAl7DQoxNzU6ICAgICAgICAgICAgICAgICAJCXV4T3JpZ2luYWxCaXRWYWx1ZSA9IHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDAxQkEwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFCQTQgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAxQkE2ICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkKMTc2OiAgICAgICAgICAgICAgICAgDQoxNzc6ICAgICAgICAgICAgICAgICAJCSggdm9pZCApIHhFdmVudEdyb3VwU2V0Qml0cyggeEV2ZW50R3JvdXAsIHV4Qml0c1RvU2V0ICk7DQpCRkQwMUJBQSAgMDAzMEZDOUUgICBMVyBBMCwgNDgoUzgpCkJGRDAxQkFFICAwMDM0RkNCRSAgIExXIEExLCA1MihTOCkKQkZEMDFCQjIgIDEyQjQ3N0U4ICAgSkFMUyB4RXZlbnRHcm91cFNldEJpdHMKQkZEMDFCQjQgIDBDMDAxMkI0ICAgQURESSBTNSwgUzQsIDMwNzIKQkZEMDFCQjYgICAgICAwQzAwICAgTk9QCjE3ODogICAgICAgICAgICAgICAgIA0KMTc5OiAgICAgICAgICAgICAgICAgCQlpZiggKCAoIHV4T3JpZ2luYWxCaXRWYWx1ZSB8IHV4Qml0c1RvU2V0ICkgJiB1eEJpdHNUb1dhaXRGb3IgKSA9PSB1eEJpdHNUb1dhaXRGb3IgKQ0KQkZEMDFCQjggIDAwMUNGQzdFICAgTFcgVjEsIDI4KFM4KQpCRkQwMUJCQyAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpCkJGRDAxQkMwICAgICAgNDREQSAgIE9SMTYgVjEsIFYwCkJGRDAxQkMyICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkKQkZEMDFCQzYgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwCkJGRDAxQkM4ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkKQkZEMDFCQ0MgIDAwMTZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMUJGQwpCRkQwMUJDRSAgMEMwMDAwMTYgICBTTEwgWkVSTywgUzYsIDEKQkZEMDFCRDAgICAgICAwQzAwICAgTk9QCjE4MDogICAgICAgICAgICAgICAgIAkJew0KMTgxOiAgICAgICAgICAgICAgICAgCQkJLyogQWxsIHRoZSByZW5kZXp2b3VzIGJpdHMgYXJlIG5vdyBzZXQgLSBubyBuZWVkIHRvIGJsb2NrLiAqLw0KMTgyOiAgICAgICAgICAgICAgICAgCQkJdXhSZXR1cm4gPSAoIHV4T3JpZ2luYWxCaXRWYWx1ZSB8IHV4Qml0c1RvU2V0ICk7DQpCRkQwMUJEMiAgMDAxQ0ZDN0UgICBMVyBWMSwgMjgoUzgpCkJGRDAxQkQ2ICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkKQkZEMDFCREEgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDFCREMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxODM6ICAgICAgICAgICAgICAgICANCjE4NDogICAgICAgICAgICAgICAgIAkJCS8qIFJlbmRlenZvdXMgYWx3YXlzIGNsZWFyIHRoZSBiaXRzLiAgVGhleSB3aWxsIGhhdmUgYmVlbiBjbGVhcmVkDQoxODU6ICAgICAgICAgICAgICAgICAJCQlhbHJlYWR5IHVubGVzcyB0aGlzIGlzIHRoZSBvbmx5IHRhc2sgaW4gdGhlIHJlbmRlenZvdXMuICovDQoxODY6ICAgICAgICAgICAgICAgICAJCQlweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgJj0gfnV4Qml0c1RvV2FpdEZvcjsNCkJGRDAxQkUwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFCRTQgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAxQkU2ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkKQkZEMDFCRUEgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwCkJGRDAxQkVDICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMApCRkQwMUJFRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxQkYyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoxODc6ICAgICAgICAgICAgICAgICANCjE4ODogICAgICAgICAgICAgICAgIAkJCXhUaWNrc1RvV2FpdCA9IDA7DQpCRkQwMUJGNCAgMDAzQ0Y4MUUgICBTVyBaRVJPLCA2MChTOCkKQkZEMDFCRjYgIENDMUQwMDNDICAgU0hJTE8gbnVsbCwgNjAKQkZEMDFCRjggICAgICBDQzFEICAgQiAweEJGRDAxQzM0CkJGRDAxQkZBICAgICAgMEMwMCAgIE5PUAoxODk6ICAgICAgICAgICAgICAgICAJCX0NCjE5MDogICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTkxOiAgICAgICAgICAgICAgICAgCQl7DQoxOTI6ICAgICAgICAgICAgICAgICAJCQlpZiggeFRpY2tzVG9XYWl0ICE9ICggVGlja1R5cGVfdCApIDAgKQ0KQkZEMDFCRkMgIDAwM0NGQzVFICAgTFcgVjAsIDYwKFM4KQpCRkQwMUMwMCAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUMyQQoxOTM6ICAgICAgICAgICAgICAgICAJCQl7DQoxOTQ6ICAgICAgICAgICAgICAgICAJCQkJdHJhY2VFVkVOVF9HUk9VUF9TWU5DX0JMT0NLKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9TZXQsIHV4Qml0c1RvV2FpdEZvciApOw0KMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICAJCQkJLyogU3RvcmUgdGhlIGJpdHMgdGhhdCB0aGUgY2FsbGluZyB0YXNrIGlzIHdhaXRpbmcgZm9yIGluIHRoZQ0KMTk3OiAgICAgICAgICAgICAgICAgCQkJCXRhc2sncyBldmVudCBsaXN0IGl0ZW0gc28gdGhlIGtlcm5lbCBrbm93cyB3aGVuIGEgbWF0Y2ggaXMNCjE5ODogICAgICAgICAgICAgICAgIAkJCQlmb3VuZC4gIFRoZW4gZW50ZXIgdGhlIGJsb2NrZWQgc3RhdGUuICovDQoxOTk6ICAgICAgICAgICAgICAgICAJCQkJdlRhc2tQbGFjZU9uVW5vcmRlcmVkRXZlbnRMaXN0KCAmKCBweEV2ZW50Qml0cy0+eFRhc2tzV2FpdGluZ0ZvckJpdHMgKSwgKCB1eEJpdHNUb1dhaXRGb3IgfCBldmVudENMRUFSX0VWRU5UU19PTl9FWElUX0JJVCB8IGV2ZW50V0FJVF9GT1JfQUxMX0JJVFMgKSwgeFRpY2tzVG9XYWl0ICk7DQpCRkQwMUMwNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxQzA4ICAgICAgNkRBMiAgIEFERElVIFYxLCBWMCwgNApCRkQwMUMwQSAgMDAzOEZDOUUgICBMVyBBMCwgNTYoUzgpCkJGRDAxQzBFICAwNTAwNDFBMiAgIExVSSBWMCwgMHg1MDAKQkZEMDFDMTAgICAgICAwNTAwICAgQUREVSBWMCwgUzAsIFMwCkJGRDAxQzEyICAgICAgNDRENCAgIE9SMTYgVjAsIEEwCkJGRDAxQzE0ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDAxQzE2ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDAxQzE4ICAwMDNDRkNERSAgIExXIEEyLCA2MChTOCkKQkZEMDFDMUMgIDI0ODI3N0U4ICAgSkFMUyB2VGFza1BsYWNlT25Vbm9yZGVyZWRFdmVudExpc3QKQkZEMDFDMUUgICAgICAyNDgyICAgU0xMIFMxLCBTMCwgMQpCRkQwMUMyMCAgICAgIDBDMDAgICBOT1AKMjAwOiAgICAgICAgICAgICAgICAgDQoyMDE6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhpcyBhc3NpZ25tZW50IGlzIG9ic29sZXRlIGFzIHV4UmV0dXJuIHdpbGwgZ2V0IHNldCBhZnRlcg0KMjAyOiAgICAgICAgICAgICAgICAgCQkJCXRoZSB0YXNrIHVuYmxvY2tzLCBidXQgc29tZSBjb21waWxlcnMgbWlzdGFrZW5seSBnZW5lcmF0ZSBhDQoyMDM6ICAgICAgICAgICAgICAgICAJCQkJd2FybmluZyBhYm91dCB1eFJldHVybiBiZWluZyByZXR1cm5lZCB3aXRob3V0IGJlaW5nIHNldCBpZiB0aGUNCjIwNDogICAgICAgICAgICAgICAgIAkJCQlhc3NpZ25tZW50IGlzIG9taXR0ZWQuICovDQoyMDU6ICAgICAgICAgICAgICAgICAJCQkJdXhSZXR1cm4gPSAwOw0KQkZEMDFDMjIgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCkJGRDAxQzI2ICAgICAgQ0MwNiAgIEIgMHhCRkQwMUMzNApCRkQwMUMyOCAgICAgIDBDMDAgICBOT1AKMjA2OiAgICAgICAgICAgICAgICAgCQkJfQ0KMjA3OiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjA4OiAgICAgICAgICAgICAgICAgCQkJew0KMjA5OiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoZSByZW5kZXp2b3VzIGJpdHMgd2VyZSBub3Qgc2V0LCBidXQgbm8gYmxvY2sgdGltZSB3YXMNCjIxMDogICAgICAgICAgICAgICAgIAkJCQlzcGVjaWZpZWQgLSBqdXN0IHJldHVybiB0aGUgY3VycmVudCBldmVudCBiaXQgdmFsdWUuICovDQoyMTE6ICAgICAgICAgICAgICAgICAJCQkJdXhSZXR1cm4gPSBweEV2ZW50Qml0cy0+dXhFdmVudEJpdHM7DQpCRkQwMUMyQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxQzJFICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwMUMzMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjIxMjogICAgICAgICAgICAgICAgIAkJCX0NCjIxMzogICAgICAgICAgICAgICAgIAkJfQ0KMjE0OiAgICAgICAgICAgICAgICAgCX0NCjIxNTogICAgICAgICAgICAgICAgIAl4QWxyZWFkeVlpZWxkZWQgPSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDFDMzQgIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbApCRkQwMUMzNiAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpCkJGRDAxQzM4ICAgICAgMEMwMCAgIE5PUApCRkQwMUMzQSAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpCjIxNjogICAgICAgICAgICAgICAgIA0KMjE3OiAgICAgICAgICAgICAgICAgCWlmKCB4VGlja3NUb1dhaXQgIT0gKCBUaWNrVHlwZV90ICkgMCApDQpCRkQwMUMzRSAgMDAzQ0ZDNUUgICBMVyBWMCwgNjAoUzgpCkJGRDAxQzQyICAwMDQ4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxQ0Q2CjIxODogICAgICAgICAgICAgICAgIAl7DQoyMTk6ICAgICAgICAgICAgICAgICAJCWlmKCB4QWxyZWFkeVlpZWxkZWQgPT0gcGRGQUxTRSApDQpCRkQwMUM0NiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAxQzRBICAwMDEwNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxQzZFCjIyMDogICAgICAgICAgICAgICAgIAkJew0KMjIxOiAgICAgICAgICAgICAgICAgCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDAxQzRFICA0REU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UKQkZEMDFDNTAgICAgICA0REU2ICAgQURESVUgVDcsIFQ3LCAzCkJGRDAxQzUyICAgICAgMEMwMCAgIE5PUApCRkQwMUM1NCAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpCkJGRDAxQzU4ICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDFDNUMgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDAxQzYwICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkKQkZEMDFDNjQgIDAwMjRGQzlFICAgTFcgQTAsIDM2KFM4KQpCRkQwMUM2OCAgNERGNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UKQkZEMDFDNkEgICAgICA0REY2ICAgQURESVUgVDcsIFQ3LCAtNQpCRkQwMUM2QyAgICAgIDBDMDAgICBOT1AKMjIyOiAgICAgICAgICAgICAgICAgCQl9DQoyMjM6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjIyNDogICAgICAgICAgICAgICAgIAkJew0KMjI1OiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjI2OiAgICAgICAgICAgICAgICAgCQl9DQoyMjc6ICAgICAgICAgICAgICAgICANCjIyODogICAgICAgICAgICAgICAgIAkJLyogVGhlIHRhc2sgYmxvY2tlZCB0byB3YWl0IGZvciBpdHMgcmVxdWlyZWQgYml0cyB0byBiZSBzZXQgLSBhdCB0aGlzDQoyMjk6ICAgICAgICAgICAgICAgICAJCXBvaW50IGVpdGhlciB0aGUgcmVxdWlyZWQgYml0cyB3ZXJlIHNldCBvciB0aGUgYmxvY2sgdGltZSBleHBpcmVkLiAgSWYNCjIzMDogICAgICAgICAgICAgICAgIAkJdGhlIHJlcXVpcmVkIGJpdHMgd2VyZSBzZXQgdGhleSB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHRhc2sncw0KMjMxOiAgICAgICAgICAgICAgICAgCQlldmVudCBsaXN0IGl0ZW0sIGFuZCB0aGV5IHNob3VsZCBub3cgYmUgcmV0cmlldmVkIHRoZW4gY2xlYXJlZC4gKi8NCjIzMjogICAgICAgICAgICAgICAgIAkJdXhSZXR1cm4gPSB1eFRhc2tSZXNldEV2ZW50SXRlbVZhbHVlKCk7DQpCRkQwMUM2RSAgNEM4Njc3RTggICBKQUxTIHV4VGFza1Jlc2V0RXZlbnRJdGVtVmFsdWUKQkZEMDFDNzAgICAgICA0Qzg2ICAgQURESVUgQTAsIEEwLCAzCkJGRDAxQzcyICAgICAgMEMwMCAgIE5PUApCRkQwMUM3NCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjIzMzogICAgICAgICAgICAgICAgIA0KMjM0OiAgICAgICAgICAgICAgICAgCQlpZiggKCB1eFJldHVybiAmIGV2ZW50VU5CTE9DS0VEX0RVRV9UT19CSVRfU0VUICkgPT0gKCBFdmVudEJpdHNfdCApIDAgKQ0KQkZEMDFDNzggIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwMUM3QyAgMDIwMDQxQTIgICBMVUkgVjAsIDB4MjAwCkJGRDAxQzgwICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwMUM4MiAgMDAyMjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMUNDQQoyMzU6ICAgICAgICAgICAgICAgICAJCXsNCjIzNjogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0YXNrIHRpbWVkIG91dCwganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgZXZlbnQgYml0IHZhbHVlLiAqLw0KMjM3OiAgICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMUM4NiAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwMUM4OCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDFDOEEgICAgICAwQzAwICAgTk9QCjIzODogICAgICAgICAgICAgICAgIAkJCXsNCjIzOTogICAgICAgICAgICAgICAgIAkJCQl1eFJldHVybiA9IHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDAxQzhDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFDOTAgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAxQzkyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjQwOiAgICAgICAgICAgICAgICAgDQoyNDE6ICAgICAgICAgICAgICAgICAJCQkJLyogQWx0aG91Z2ggdGhlIHRhc2sgZ290IGhlcmUgYmVjYXVzZSBpdCB0aW1lZCBvdXQgYmVmb3JlIHRoZQ0KMjQyOiAgICAgICAgICAgICAgICAgCQkJCWJpdHMgaXQgd2FzIHdhaXRpbmcgZm9yIHdlcmUgc2V0LCBpdCBpcyBwb3NzaWJsZSB0aGF0IHNpbmNlIGl0DQoyNDM6ICAgICAgICAgICAgICAgICAJCQkJdW5ibG9ja2VkIGFub3RoZXIgdGFzayBoYXMgc2V0IHRoZSBiaXRzLiAgSWYgdGhpcyBpcyB0aGUgY2FzZQ0KMjQ0OiAgICAgICAgICAgICAgICAgCQkJCXRoZW4gaXQgbmVlZHMgdG8gY2xlYXIgdGhlIGJpdHMgYmVmb3JlIGV4aXRpbmcuICovDQoyNDU6ICAgICAgICAgICAgICAgICAJCQkJaWYoICggdXhSZXR1cm4gJiB1eEJpdHNUb1dhaXRGb3IgKSA9PSB1eEJpdHNUb1dhaXRGb3IgKQ0KQkZEMDFDOTYgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwMUM5QSAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpCkJGRDAxQzlFICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMApCRkQwMUNBMCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpCkJGRDAxQ0E0ICAwMDBCQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDFDQkUKQkZEMDFDQTYgIDBDMDAwMDBCICAgU0xMIFpFUk8sIFQzLCAxCkJGRDAxQ0E4ICAgICAgMEMwMCAgIE5PUAoyNDY6ICAgICAgICAgICAgICAgICAJCQkJew0KMjQ3OiAgICAgICAgICAgICAgICAgCQkJCQlweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgJj0gfnV4Qml0c1RvV2FpdEZvcjsNCkJGRDAxQ0FBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDFDQUUgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAxQ0IwICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkKQkZEMDFDQjQgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwCkJGRDAxQ0I2ICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMApCRkQwMUNCOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDAxQ0JDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyNDg6ICAgICAgICAgICAgICAgICAJCQkJfQ0KMjQ5OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjI1MDogICAgICAgICAgICAgICAgIAkJCQl7DQoyNTE6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI1MjogICAgICAgICAgICAgICAgIAkJCQl9DQoyNTM6ICAgICAgICAgICAgICAgICAJCQl9DQoyNTQ6ICAgICAgICAgICAgICAgICAJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDFDQkUgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbApCRkQwMUNDMCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMzRDNApCRkQwMUNDMiAgICAgIDBDMDAgICBOT1AKMjU1OiAgICAgICAgICAgICAgICAgDQoyNTY6ICAgICAgICAgICAgICAgICAJCQl4VGltZW91dE9jY3VycmVkID0gcGRUUlVFOw0KQkZEMDFDQzQgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDFDQzYgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQoyNTc6ICAgICAgICAgICAgICAgICAJCX0NCjI1ODogICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjU5OiAgICAgICAgICAgICAgICAgCQl7DQoyNjA6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgdGFzayB1bmJsb2NrZWQgYmVjYXVzZSB0aGUgYml0cyB3ZXJlIHNldC4gKi8NCjI2MTogICAgICAgICAgICAgICAgIAkJfQ0KMjYyOiAgICAgICAgICAgICAgICAgDQoyNjM6ICAgICAgICAgICAgICAgICAJCS8qIENvbnRyb2wgYml0cyBtaWdodCBiZSBzZXQgYXMgdGhlIHRhc2sgaGFkIGJsb2NrZWQgc2hvdWxkIG5vdCBiZQ0KMjY0OiAgICAgICAgICAgICAgICAgCQlyZXR1cm5lZC4gKi8NCjI2NTogICAgICAgICAgICAgICAgIAkJdXhSZXR1cm4gJj0gfmV2ZW50RVZFTlRfQklUU19DT05UUk9MX0JZVEVTOw0KQkZEMDFDQ0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMUNDRSAgQjgyQzAwNDIgICBFWFQgVjAsIFYwLCAwLCAyNApCRkQwMUNEMCAgRjg1RUI4MkMgICBTREMxIEYxLCAtMTk1NChUNCkKQkZEMDFDRDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyNjY6ICAgICAgICAgICAgICAgICAJfQ0KMjY3OiAgICAgICAgICAgICAgICAgDQoyNjg6ICAgICAgICAgICAgICAgICAJdHJhY2VFVkVOVF9HUk9VUF9TWU5DX0VORCggeEV2ZW50R3JvdXAsIHV4Qml0c1RvU2V0LCB1eEJpdHNUb1dhaXRGb3IsIHhUaW1lb3V0T2NjdXJyZWQgKTsNCjI2OTogICAgICAgICAgICAgICAgIA0KMjcwOiAgICAgICAgICAgICAgICAgCXJldHVybiB1eFJldHVybjsNCkJGRDAxQ0Q2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKMjcxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDFDREEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDFDREMgICAgICA0QkVCICAgTFcgUkEsIDQ0KFNQKQpCRkQwMUNERSAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApCkJGRDAxQ0UwICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgKQkZEMDFDRTIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwMUNFNCAgICAgIDBDMDAgICBOT1AKMjcyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNzM6ICAgICAgICAgICAgICAgICANCjI3NDogICAgICAgICAgICAgICAgIEV2ZW50Qml0c190IHhFdmVudEdyb3VwV2FpdEJpdHMoIEV2ZW50R3JvdXBIYW5kbGVfdCB4RXZlbnRHcm91cCwgY29uc3QgRXZlbnRCaXRzX3QgdXhCaXRzVG9XYWl0Rm9yLCBjb25zdCBCYXNlVHlwZV90IHhDbGVhck9uRXhpdCwgY29uc3QgQmFzZVR5cGVfdCB4V2FpdEZvckFsbEJpdHMsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjI3NTogICAgICAgICAgICAgICAgIHsNCkJGRDAxMzEwICAgICAgNEZFNSAgIEFERElVIFNQLCBTUCwgLTU2CkJGRDAxMzEyICAgICAgQ0JFRCAgIFNXIFJBLCA1MihTUCkKQkZEMDEzMTQgICAgICBDQkNDICAgU1cgUzgsIDQ4KFNQKQpCRkQwMTMxNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMTMxOCAgMDAzOEY4OUUgICBTVyBBMCwgNTYoUzgpCkJGRDAxMzFDICAwMDNDRjhCRSAgIFNXIEExLCA2MChTOCkKQkZEMDEzMjAgIDAwNDBGOERFICAgU1cgQTIsIDY0KFM4KQpCRkQwMTMyNCAgMDA0NEY4RkUgICBTVyBBMywgNjgoUzgpCjI3NjogICAgICAgICAgICAgICAgIEV2ZW50R3JvdXBfdCAqcHhFdmVudEJpdHMgPSAoIEV2ZW50R3JvdXBfdCAqICkgeEV2ZW50R3JvdXA7DQpCRkQwMTMyOCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpCkJGRDAxMzJDICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMjc3OiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgdXhSZXR1cm4sIHV4Q29udHJvbEJpdHMgPSAwOw0KQkZEMDEzMzAgIDAwMTRGODFFICAgU1cgWkVSTywgMjAoUzgpCjI3ODogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFdhaXRDb25kaXRpb25NZXQsIHhBbHJlYWR5WWllbGRlZDsNCjI3OTogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRpbWVvdXRPY2N1cnJlZCA9IHBkRkFMU0U7DQpCRkQwMTMzNCAgMDAxQ0Y4MUUgICBTVyBaRVJPLCAyOChTOCkKMjgwOiAgICAgICAgICAgICAgICAgDQoyODE6ICAgICAgICAgICAgICAgICAJLyogQ2hlY2sgdGhlIHVzZXIgaXMgbm90IGF0dGVtcHRpbmcgdG8gd2FpdCBvbiB0aGUgYml0cyB1c2VkIGJ5IHRoZSBrZXJuZWwNCjI4MjogICAgICAgICAgICAgICAgIAlpdHNlbGYsIGFuZCB0aGF0IGF0IGxlYXN0IG9uZSBiaXQgaXMgYmVpbmcgcmVxdWVzdGVkLiAqLw0KMjgzOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeEV2ZW50R3JvdXAgKTsNCkJGRDAxMzM4ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkKQkZEMDEzM0MgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEzNTIKQkZEMDEzNDAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDEzNDIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMTM0NCAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OApCRkQwMTM0NiAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkKQkZEMDEzNDggIDAxMUIzMEEwICAgQURESVUgQTEsIFpFUk8sIDI4MwpCRkQwMTM0QyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDEzNEUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDEzNTAgICAgICAwQzAwICAgTk9QCjI4NDogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggdXhCaXRzVG9XYWl0Rm9yICYgZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVMgKSA9PSAwICk7DQpCRkQwMTM1MiAgMDAzQ0ZDN0UgICBMVyBWMSwgNjAoUzgpCkJGRDAxMzU2ICBGRjAwNDFBMiAgIExVSSBWMCwgMHhGRjAwCkJGRDAxMzU4ICA0NDkzRkYwMCAgIExXIFQ4LCAxNzU1NShaRVJPKQpCRkQwMTM1QSAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDEzNUMgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDEzNzIKQkZEMDEzNjAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDEzNjIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMTM2NCAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OApCRkQwMTM2NiAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkKQkZEMDEzNjggIDAxMUMzMEEwICAgQURESVUgQTEsIFpFUk8sIDI4NApCRkQwMTM2QyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDEzNkUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDEzNzAgICAgICAwQzAwICAgTk9QCjI4NTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHV4Qml0c1RvV2FpdEZvciAhPSAwICk7DQpCRkQwMTM3MiAgMDAzQ0ZDNUUgICBMVyBWMCwgNjAoUzgpCkJGRDAxMzc2ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMzhDCkJGRDAxMzdBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAxMzdDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDEzN0UgIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgKQkZEMDEzODAgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpCkJGRDAxMzgyICAwMTFEMzBBMCAgIEFERElVIEExLCBaRVJPLCAyODUKQkZEMDEzODYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAxMzg4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAxMzhBICAgICAgMEMwMCAgIE5PUAoyODY6ICAgICAgICAgICAgICAgICAJI2lmICggKCBJTkNMVURFX3hUYXNrR2V0U2NoZWR1bGVyU3RhdGUgPT0gMSApIHx8ICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKQ0KMjg3OiAgICAgICAgICAgICAgICAgCXsNCjI4ODogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAhKCAoIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKSA9PSB0YXNrU0NIRURVTEVSX1NVU1BFTkRFRCApICYmICggeFRpY2tzVG9XYWl0ICE9IDAgKSApICk7DQpCRkQwMTM4QyAgNEE4RTc3RTggICBKQUxTIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUKQkZEMDEzOEUgICAgICA0QThFICAgTFcgUzQsIDU2KFNQKQpCRkQwMTM5MCAgICAgIDBDMDAgICBOT1AKQkZEMDEzOTIgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEzOUUKQkZEMDEzOTYgIDAwNDhGQzVFICAgTFcgVjAsIDcyKFM4KQpCRkQwMTM5QSAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTNBNApCRkQwMTM5RSAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwMTNBMCAgICAgIENDMDIgICBCIDB4QkZEMDEzQTYKQkZEMDEzQTIgICAgICAwQzAwICAgTk9QCkJGRDAxM0E0ICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8KQkZEMDEzQTYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEzQkMKQkZEMDEzQUEgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDEzQUMgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwMTNBRSAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OApCRkQwMTNCMCAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkKQkZEMDEzQjIgIDAxMjAzMEEwICAgQURESVUgQTEsIFpFUk8sIDI4OApCRkQwMTNCNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDEzQjggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDEzQkEgICAgICAwQzAwICAgTk9QCjI4OTogICAgICAgICAgICAgICAgIAl9DQoyOTA6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoyOTE6ICAgICAgICAgICAgICAgICANCjI5MjogICAgICAgICAgICAgICAgIAl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDAxM0JDICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsCkJGRDAxM0JFICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYKQkZEMDEzQzAgICAgICAwQzAwICAgTk9QCjI5MzogICAgICAgICAgICAgICAgIAl7DQoyOTQ6ICAgICAgICAgICAgICAgICAJCWNvbnN0IEV2ZW50Qml0c190IHV4Q3VycmVudEV2ZW50Qml0cyA9IHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDAxM0MyICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDEzQzYgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDAxM0M4ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKMjk1OiAgICAgICAgICAgICAgICAgDQoyOTY6ICAgICAgICAgICAgICAgICAJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgd2FpdCBjb25kaXRpb24gaXMgYWxyZWFkeSBtZXQgb3Igbm90LiAqLw0KMjk3OiAgICAgICAgICAgICAgICAgCQl4V2FpdENvbmRpdGlvbk1ldCA9IHBydlRlc3RXYWl0Q29uZGl0aW9uKCB1eEN1cnJlbnRFdmVudEJpdHMsIHV4Qml0c1RvV2FpdEZvciwgeFdhaXRGb3JBbGxCaXRzICk7DQpCRkQwMTNDQyAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDAxM0QwICAwMDNDRkNCRSAgIExXIEExLCA2MChTOCkKQkZEMDEzRDQgIDAwNDRGQ0RFICAgTFcgQTIsIDY4KFM4KQpCRkQwMTNEOCAgNDA3QTc3RTggICBKQUxTIHBydlRlc3RXYWl0Q29uZGl0aW9uCkJGRDAxM0RBICAwQzAwNDA3QSAgIEJHRVpBTCBLMCwgMHhCRkQwMkJERQpCRkQwMTNEQyAgICAgIDBDMDAgICBOT1AKQkZEMDEzREUgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQoyOTg6ICAgICAgICAgICAgICAgICANCjI5OTogICAgICAgICAgICAgICAgIAkJaWYoIHhXYWl0Q29uZGl0aW9uTWV0ICE9IHBkRkFMU0UgKQ0KQkZEMDEzRTIgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwMTNFNiAgMDAxNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTQxNgozMDA6ICAgICAgICAgICAgICAgICAJCXsNCjMwMTogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB3YWl0IGNvbmRpdGlvbiBoYXMgYWxyZWFkeSBiZWVuIG1ldCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvDQozMDI6ICAgICAgICAgICAgICAgICAJCQlibG9jay4gKi8NCjMwMzogICAgICAgICAgICAgICAgIAkJCXV4UmV0dXJuID0gdXhDdXJyZW50RXZlbnRCaXRzOw0KQkZEMDEzRUEgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMTNFRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjMwNDogICAgICAgICAgICAgICAgIAkJCXhUaWNrc1RvV2FpdCA9ICggVGlja1R5cGVfdCApIDA7DQpCRkQwMTNGMiAgMDA0OEY4MUUgICBTVyBaRVJPLCA3MihTOCkKMzA1OiAgICAgICAgICAgICAgICAgDQozMDY6ICAgICAgICAgICAgICAgICAJCQkvKiBDbGVhciB0aGUgd2FpdCBiaXRzIGlmIHJlcXVlc3RlZCB0byBkbyBzby4gKi8NCjMwNzogICAgICAgICAgICAgICAgIAkJCWlmKCB4Q2xlYXJPbkV4aXQgIT0gcGRGQUxTRSApDQpCRkQwMTNGNiAgMDA0MEZDNUUgICBMVyBWMCwgNjQoUzgpCkJGRDAxM0ZBICAwMDNENDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxNDc4CjMwODogICAgICAgICAgICAgICAgIAkJCXsNCjMwOTogICAgICAgICAgICAgICAgIAkJCQlweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgJj0gfnV4Qml0c1RvV2FpdEZvcjsNCkJGRDAxM0ZFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDE0MDIgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAxNDA0ICAwMDNDRkM1RSAgIExXIFYwLCA2MChTOCkKQkZEMDE0MDggICAgICA0NDEyICAgTk9UMTYgVjAsIFYwCkJGRDAxNDBBICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMApCRkQwMTQwQyAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDAxNDEwICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQpCRkQwMTQxMiAgICAgIENDMzIgICBCIDB4QkZEMDE0NzgKQkZEMDE0MTQgICAgICAwQzAwICAgTk9QCjMxMDogICAgICAgICAgICAgICAgIAkJCX0NCjMxMTogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjMxMjogICAgICAgICAgICAgICAgIAkJCXsNCjMxMzogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozMTQ6ICAgICAgICAgICAgICAgICAJCQl9DQozMTU6ICAgICAgICAgICAgICAgICAJCX0NCjMxNjogICAgICAgICAgICAgICAgIAkJZWxzZSBpZiggeFRpY2tzVG9XYWl0ID09ICggVGlja1R5cGVfdCApIDAgKQ0KQkZEMDE0MTYgIDAwNDhGQzVFICAgTFcgVjAsIDcyKFM4KQpCRkQwMTQxQSAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTQyQQozMTc6ICAgICAgICAgICAgICAgICAJCXsNCjMxODogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB3YWl0IGNvbmRpdGlvbiBoYXMgbm90IGJlZW4gbWV0LCBidXQgbm8gYmxvY2sgdGltZSB3YXMNCjMxOTogICAgICAgICAgICAgICAgIAkJCXNwZWNpZmllZCwgc28ganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUuICovDQozMjA6ICAgICAgICAgICAgICAgICAJCQl1eFJldHVybiA9IHV4Q3VycmVudEV2ZW50Qml0czsNCkJGRDAxNDFFICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDE0MjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwMTQyNiAgICAgIENDMjggICBCIDB4QkZEMDE0NzgKQkZEMDE0MjggICAgICAwQzAwICAgTk9QCjMyMTogICAgICAgICAgICAgICAgIAkJfQ0KMzIyOiAgICAgICAgICAgICAgICAgCQllbHNlDQozMjM6ICAgICAgICAgICAgICAgICAJCXsNCjMyNDogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0YXNrIGlzIGdvaW5nIHRvIGJsb2NrIHRvIHdhaXQgZm9yIGl0cyByZXF1aXJlZCBiaXRzIHRvIGJlDQozMjU6ICAgICAgICAgICAgICAgICAJCQlzZXQuICB1eENvbnRyb2xCaXRzIGFyZSB1c2VkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpZWQgYmVoYXZpb3VyIG9mDQozMjY6ICAgICAgICAgICAgICAgICAJCQl0aGlzIGNhbGwgdG8geEV2ZW50R3JvdXBXYWl0Qml0cygpIC0gZm9yIHVzZSB3aGVuIHRoZSBldmVudCBiaXRzDQozMjc6ICAgICAgICAgICAgICAgICAJCQl1bmJsb2NrIHRoZSB0YXNrLiAqLw0KMzI4OiAgICAgICAgICAgICAgICAgCQkJaWYoIHhDbGVhck9uRXhpdCAhPSBwZEZBTFNFICkNCkJGRDAxNDJBICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkKQkZEMDE0MkUgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE0NDAKMzI5OiAgICAgICAgICAgICAgICAgCQkJew0KMzMwOiAgICAgICAgICAgICAgICAgCQkJCXV4Q29udHJvbEJpdHMgfD0gZXZlbnRDTEVBUl9FVkVOVFNfT05fRVhJVF9CSVQ7DQpCRkQwMTQzMiAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDAxNDM2ICAwMTAwNDFBMiAgIExVSSBWMCwgMHgxMDAKQkZEMDE0M0EgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDE0M0MgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQozMzE6ICAgICAgICAgICAgICAgICAJCQl9DQozMzI6ICAgICAgICAgICAgICAgICAJCQllbHNlDQozMzM6ICAgICAgICAgICAgICAgICAJCQl7DQozMzQ6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzM1OiAgICAgICAgICAgICAgICAgCQkJfQ0KMzM2OiAgICAgICAgICAgICAgICAgDQozMzc6ICAgICAgICAgICAgICAgICAJCQlpZiggeFdhaXRGb3JBbGxCaXRzICE9IHBkRkFMU0UgKQ0KQkZEMDE0NDAgIDAwNDRGQzVFICAgTFcgVjAsIDY4KFM4KQpCRkQwMTQ0NCAgMDAwNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTQ1NgozMzg6ICAgICAgICAgICAgICAgICAJCQl7DQozMzk6ICAgICAgICAgICAgICAgICAJCQkJdXhDb250cm9sQml0cyB8PSBldmVudFdBSVRfRk9SX0FMTF9CSVRTOw0KQkZEMDE0NDggIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQpCRkQwMTQ0QyAgMDQwMDQxQTIgICBMVUkgVjAsIDB4NDAwCkJGRDAxNDRFICAgICAgMDQwMCAgIEFERFUgUzAsIFMwLCBTMApCRkQwMTQ1MCAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQpCRkQwMTQ1MiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjM0MDogICAgICAgICAgICAgICAgIAkJCX0NCjM0MTogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjM0MjogICAgICAgICAgICAgICAgIAkJCXsNCjM0MzogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNDQ6ICAgICAgICAgICAgICAgICAJCQl9DQozNDU6ICAgICAgICAgICAgICAgICANCjM0NjogICAgICAgICAgICAgICAgIAkJCS8qIFN0b3JlIHRoZSBiaXRzIHRoYXQgdGhlIGNhbGxpbmcgdGFzayBpcyB3YWl0aW5nIGZvciBpbiB0aGUNCjM0NzogICAgICAgICAgICAgICAgIAkJCXRhc2sncyBldmVudCBsaXN0IGl0ZW0gc28gdGhlIGtlcm5lbCBrbm93cyB3aGVuIGEgbWF0Y2ggaXMNCjM0ODogICAgICAgICAgICAgICAgIAkJCWZvdW5kLiAgVGhlbiBlbnRlciB0aGUgYmxvY2tlZCBzdGF0ZS4gKi8NCjM0OTogICAgICAgICAgICAgICAgIAkJCXZUYXNrUGxhY2VPblVub3JkZXJlZEV2ZW50TGlzdCggJiggcHhFdmVudEJpdHMtPnhUYXNrc1dhaXRpbmdGb3JCaXRzICksICggdXhCaXRzVG9XYWl0Rm9yIHwgdXhDb250cm9sQml0cyApLCB4VGlja3NUb1dhaXQgKTsNCkJGRDAxNDU2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDE0NUEgICAgICA2REEyICAgQURESVUgVjEsIFYwLCA0CkJGRDAxNDVDICAwMDNDRkM5RSAgIExXIEEwLCA2MChTOCkKQkZEMDE0NjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMTQ2NCAgICAgIDQ0RDQgICBPUjE2IFYwLCBBMApCRkQwMTQ2NiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQpCRkQwMTQ2OCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMTQ2QSAgMDA0OEZDREUgICBMVyBBMiwgNzIoUzgpCkJGRDAxNDZFICAyNDgyNzdFOCAgIEpBTFMgdlRhc2tQbGFjZU9uVW5vcmRlcmVkRXZlbnRMaXN0CkJGRDAxNDcwICAgICAgMjQ4MiAgIFNMTCBTMSwgUzAsIDEKQkZEMDE0NzIgICAgICAwQzAwICAgTk9QCjM1MDogICAgICAgICAgICAgICAgIA0KMzUxOiAgICAgICAgICAgICAgICAgCQkJLyogVGhpcyBpcyBvYnNvbGV0ZSBhcyBpdCB3aWxsIGdldCBzZXQgYWZ0ZXIgdGhlIHRhc2sgdW5ibG9ja3MsIGJ1dA0KMzUyOiAgICAgICAgICAgICAgICAgCQkJc29tZSBjb21waWxlcnMgbWlzdGFrZW5seSBnZW5lcmF0ZSBhIHdhcm5pbmcgYWJvdXQgdGhlIHZhcmlhYmxlDQozNTM6ICAgICAgICAgICAgICAgICAJCQliZWluZyByZXR1cm5lZCB3aXRob3V0IGJlaW5nIHNldCBpZiBpdCBpcyBub3QgZG9uZS4gKi8NCjM1NDogICAgICAgICAgICAgICAgIAkJCXV4UmV0dXJuID0gMDsNCkJGRDAxNDc0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQozNTU6ICAgICAgICAgICAgICAgICANCjM1NjogICAgICAgICAgICAgICAgIAkJCXRyYWNlRVZFTlRfR1JPVVBfV0FJVF9CSVRTX0JMT0NLKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9XYWl0Rm9yICk7DQozNTc6ICAgICAgICAgICAgICAgICAJCX0NCjM1ODogICAgICAgICAgICAgICAgIAl9DQozNTk6ICAgICAgICAgICAgICAgICAJeEFscmVhZHlZaWVsZGVkID0geFRhc2tSZXN1bWVBbGwoKTsNCkJGRDAxNDc4ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDE0N0EgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwMTQ3QyAgICAgIDBDMDAgICBOT1AKQkZEMDE0N0UgIDAwMjhGODVFICAgU1cgVjAsIDQwKFM4KQozNjA6ICAgICAgICAgICAgICAgICANCjM2MTogICAgICAgICAgICAgICAgIAlpZiggeFRpY2tzVG9XYWl0ICE9ICggVGlja1R5cGVfdCApIDAgKQ0KQkZEMDE0ODIgIDAwNDhGQzVFICAgTFcgVjAsIDcyKFM4KQpCRkQwMTQ4NiAgMDA0QzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTUyMgozNjI6ICAgICAgICAgICAgICAgICAJew0KMzYzOiAgICAgICAgICAgICAgICAgCQlpZiggeEFscmVhZHlZaWVsZGVkID09IHBkRkFMU0UgKQ0KQkZEMDE0OEEgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwMTQ4RSAgMDAxMDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTRCMgozNjQ6ICAgICAgICAgICAgICAgICAJCXsNCjM2NTogICAgICAgICAgICAgICAgIAkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQpCRkQwMTQ5MiAgNERFNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlCkJGRDAxNDk0ICAgICAgNERFNiAgIEFERElVIFQ3LCBUNywgMwpCRkQwMTQ5NiAgICAgIDBDMDAgICBOT1AKQkZEMDE0OTggIDAwMkNGODVFICAgU1cgVjAsIDQ0KFM4KQpCRkQwMTQ5QyAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAxNEEwICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwMTRBNCAgMDAyQ0Y4NUUgICBTVyBWMCwgNDQoUzgpCkJGRDAxNEE4ICAwMDJDRkM5RSAgIExXIEEwLCA0NChTOCkKQkZEMDE0QUMgIDRERjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlCkJGRDAxNEFFICAgICAgNERGNiAgIEFERElVIFQ3LCBUNywgLTUKQkZEMDE0QjAgICAgICAwQzAwICAgTk9QCjM2NjogICAgICAgICAgICAgICAgIAkJfQ0KMzY3OiAgICAgICAgICAgICAgICAgCQllbHNlDQozNjg6ICAgICAgICAgICAgICAgICAJCXsNCjM2OTogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM3MDogICAgICAgICAgICAgICAgIAkJfQ0KMzcxOiAgICAgICAgICAgICAgICAgDQozNzI6ICAgICAgICAgICAgICAgICAJCS8qIFRoZSB0YXNrIGJsb2NrZWQgdG8gd2FpdCBmb3IgaXRzIHJlcXVpcmVkIGJpdHMgdG8gYmUgc2V0IC0gYXQgdGhpcw0KMzczOiAgICAgICAgICAgICAgICAgCQlwb2ludCBlaXRoZXIgdGhlIHJlcXVpcmVkIGJpdHMgd2VyZSBzZXQgb3IgdGhlIGJsb2NrIHRpbWUgZXhwaXJlZC4gIElmDQozNzQ6ICAgICAgICAgICAgICAgICAJCXRoZSByZXF1aXJlZCBiaXRzIHdlcmUgc2V0IHRoZXkgd2lsbCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSB0YXNrJ3MNCjM3NTogICAgICAgICAgICAgICAgIAkJZXZlbnQgbGlzdCBpdGVtLCBhbmQgdGhleSBzaG91bGQgbm93IGJlIHJldHJpZXZlZCB0aGVuIGNsZWFyZWQuICovDQozNzY6ICAgICAgICAgICAgICAgICAJCXV4UmV0dXJuID0gdXhUYXNrUmVzZXRFdmVudEl0ZW1WYWx1ZSgpOw0KQkZEMDE0QjIgIDRDODY3N0U4ICAgSkFMUyB1eFRhc2tSZXNldEV2ZW50SXRlbVZhbHVlCkJGRDAxNEI0ICAgICAgNEM4NiAgIEFERElVIEEwLCBBMCwgMwpCRkQwMTRCNiAgICAgIDBDMDAgICBOT1AKQkZEMDE0QjggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozNzc6ICAgICAgICAgICAgICAgICANCjM3ODogICAgICAgICAgICAgICAgIAkJaWYoICggdXhSZXR1cm4gJiBldmVudFVOQkxPQ0tFRF9EVUVfVE9fQklUX1NFVCApID09ICggRXZlbnRCaXRzX3QgKSAwICkNCkJGRDAxNEJDICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDE0QzAgIDAyMDA0MUEyICAgTFVJIFYwLCAweDIwMApCRkQwMTRDNCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDE0QzYgIDAwMjY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE1MTYKMzc5OiAgICAgICAgICAgICAgICAgCQl7DQozODA6ICAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAxNENBICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDAxNENDICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwMTRDRSAgICAgIDBDMDAgICBOT1AKMzgxOiAgICAgICAgICAgICAgICAgCQkJew0KMzgyOiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoZSB0YXNrIHRpbWVkIG91dCwganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgZXZlbnQgYml0IHZhbHVlLiAqLw0KMzgzOiAgICAgICAgICAgICAgICAgCQkJCXV4UmV0dXJuID0gcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzOw0KQkZEMDE0RDAgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwMTRENCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDE0RDYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozODQ6ICAgICAgICAgICAgICAgICANCjM4NTogICAgICAgICAgICAgICAgIAkJCQkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBldmVudCBiaXRzIHdlcmUgdXBkYXRlZCBiZXR3ZWVuIHRoaXMNCjM4NjogICAgICAgICAgICAgICAgIAkJCQl0YXNrIGxlYXZpbmcgdGhlIEJsb2NrZWQgc3RhdGUgYW5kIHJ1bm5pbmcgYWdhaW4uICovDQozODc6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHBydlRlc3RXYWl0Q29uZGl0aW9uKCB1eFJldHVybiwgdXhCaXRzVG9XYWl0Rm9yLCB4V2FpdEZvckFsbEJpdHMgKSAhPSBwZEZBTFNFICkNCkJGRDAxNERBICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkKQkZEMDE0REUgIDAwM0NGQ0JFICAgTFcgQTEsIDYwKFM4KQpCRkQwMTRFMiAgMDA0NEZDREUgICBMVyBBMiwgNjgoUzgpCkJGRDAxNEU2ICA0MDdBNzdFOCAgIEpBTFMgcHJ2VGVzdFdhaXRDb25kaXRpb24KQkZEMDE0RTggIDBDMDA0MDdBICAgQkdFWkFMIEswLCAweEJGRDAyQ0VDCkJGRDAxNEVBICAgICAgMEMwMCAgIE5PUApCRkQwMTRFQyAgMDAwRTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTUwQwozODg6ICAgICAgICAgICAgICAgICAJCQkJew0KMzg5OiAgICAgICAgICAgICAgICAgCQkJCQlpZiggeENsZWFyT25FeGl0ICE9IHBkRkFMU0UgKQ0KQkZEMDE0RjAgIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQpCRkQwMTRGNCAgMDAwQTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTUwQwozOTA6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjM5MTogICAgICAgICAgICAgICAgIAkJCQkJCXB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyAmPSB+dXhCaXRzVG9XYWl0Rm9yOw0KQkZEMDE0RjggIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwMTRGQyAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkKQkZEMDE0RkUgIDAwM0NGQzVFICAgTFcgVjAsIDYwKFM4KQpCRkQwMTUwMiAgICAgIDQ0MTIgICBOT1QxNiBWMCwgVjAKQkZEMDE1MDQgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwCkJGRDAxNTA2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDE1MEEgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjM5MjogICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzkzOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQozOTQ6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjM5NTogICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM5NjogICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzk3OiAgICAgICAgICAgICAgICAgCQkJCX0NCjM5ODogICAgICAgICAgICAgICAgIAkJCQllbHNlDQozOTk6ICAgICAgICAgICAgICAgICAJCQkJew0KNDAwOiAgICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0MDE6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNDAyOiAgICAgICAgICAgICAgICAgCQkJfQ0KNDAzOiAgICAgICAgICAgICAgICAgCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAxNTBDICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwKQkZEMDE1MEUgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDJEMTIKQkZEMDE1MTAgICAgICAwQzAwICAgTk9QCjQwNDogICAgICAgICAgICAgICAgIA0KNDA1OiAgICAgICAgICAgICAgICAgCQkJLyogUHJldmVudCBjb21waWxlciB3YXJuaW5ncyB3aGVuIHRyYWNlIG1hY3JvcyBhcmUgbm90IHVzZWQuICovDQo0MDY6ICAgICAgICAgICAgICAgICAJCQl4VGltZW91dE9jY3VycmVkID0gcGRGQUxTRTsNCkJGRDAxNTEyICAwMDFDRjgxRSAgIFNXIFpFUk8sIDI4KFM4KQo0MDc6ICAgICAgICAgICAgICAgICAJCX0NCjQwODogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNDA5OiAgICAgICAgICAgICAgICAgCQl7DQo0MTA6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgdGFzayB1bmJsb2NrZWQgYmVjYXVzZSB0aGUgYml0cyB3ZXJlIHNldC4gKi8NCjQxMTogICAgICAgICAgICAgICAgIAkJfQ0KNDEyOiAgICAgICAgICAgICAgICAgDQo0MTM6ICAgICAgICAgICAgICAgICAJCS8qIFRoZSB0YXNrIGJsb2NrZWQgc28gY29udHJvbCBiaXRzIG1heSBoYXZlIGJlZW4gc2V0LiAqLw0KNDE0OiAgICAgICAgICAgICAgICAgCQl1eFJldHVybiAmPSB+ZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVM7DQpCRkQwMTUxNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDAxNTFBICBCODJDMDA0MiAgIEVYVCBWMCwgVjAsIDAsIDI0CkJGRDAxNTFDICBGODVFQjgyQyAgIFNEQzEgRjEsIC0xOTU0KFQ0KQpCRkQwMTUxRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjQxNTogICAgICAgICAgICAgICAgIAl9DQo0MTY6ICAgICAgICAgICAgICAgICAJdHJhY2VFVkVOVF9HUk9VUF9XQUlUX0JJVFNfRU5EKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9XYWl0Rm9yLCB4VGltZW91dE9jY3VycmVkICk7DQo0MTc6ICAgICAgICAgICAgICAgICANCjQxODogICAgICAgICAgICAgICAgIAlyZXR1cm4gdXhSZXR1cm47DQpCRkQwMTUyMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjQxOTogICAgICAgICAgICAgICAgIH0NCkJGRDAxNTI2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAxNTI4ICAgICAgNEJFRCAgIExXIFJBLCA1MihTUCkKQkZEMDE1MkEgICAgICA0QkNDICAgTFcgUzgsIDQ4KFNQKQpCRkQwMTUyQyAgICAgIDRDMUQgICBBRERJVSBTUCwgU1AsIDU2CkJGRDAxNTJFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDE1MzAgICAgICAwQzAwICAgTk9QCjQyMDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDIxOiAgICAgICAgICAgICAgICAgDQo0MjI6ICAgICAgICAgICAgICAgICBFdmVudEJpdHNfdCB4RXZlbnRHcm91cENsZWFyQml0cyggRXZlbnRHcm91cEhhbmRsZV90IHhFdmVudEdyb3VwLCBjb25zdCBFdmVudEJpdHNfdCB1eEJpdHNUb0NsZWFyICkNCjQyMzogICAgICAgICAgICAgICAgIHsNCkJGRDA2QTQ0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA2QTQ2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDZBNDggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNkE0QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNkE0QyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA2QTUwICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKNDI0OiAgICAgICAgICAgICAgICAgRXZlbnRHcm91cF90ICpweEV2ZW50Qml0cyA9ICggRXZlbnRHcm91cF90ICogKSB4RXZlbnRHcm91cDsNCkJGRDA2QTU0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDZBNTggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo0MjU6ICAgICAgICAgICAgICAgICBFdmVudEJpdHNfdCB1eFJldHVybjsNCjQyNjogICAgICAgICAgICAgICAgIA0KNDI3OiAgICAgICAgICAgICAgICAgCS8qIENoZWNrIHRoZSB1c2VyIGlzIG5vdCBhdHRlbXB0aW5nIHRvIGNsZWFyIHRoZSBiaXRzIHVzZWQgYnkgdGhlIGtlcm5lbA0KNDI4OiAgICAgICAgICAgICAgICAgCWl0c2VsZi4gKi8NCjQyOTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHhFdmVudEdyb3VwICk7DQpCRkQwNkE1QyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA2QTYwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2QTc2CkJGRDA2QTY0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA2QTY2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDZBNjggIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgKQkZEMDZBNkEgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpCkJGRDA2QTZDICAwMUFEMzBBMCAgIEFERElVIEExLCBaRVJPLCA0MjkKQkZEMDZBNzAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA2QTcyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA2QTc0ICAgICAgMEMwMCAgIE5PUAo0MzA6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCAoIHV4Qml0c1RvQ2xlYXIgJiBldmVudEVWRU5UX0JJVFNfQ09OVFJPTF9CWVRFUyApID09IDAgKTsNCkJGRDA2QTc2ICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkKQkZEMDZBN0EgIEZGMDA0MUEyICAgTFVJIFYwLCAweEZGMDAKQkZEMDZBN0MgIDQ0OTNGRjAwICAgTFcgVDgsIDE3NTU1KFpFUk8pCkJGRDA2QTdFICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwNkE4MCAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNkE5NgpCRkQwNkE4NCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwNkE4NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA2QTg4ICA5QzBDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1NTg4CkJGRDA2QThBICAzMEEwOUMwQyAgIExXQzEgRjAsIDEyNDQ4KFQ0KQpCRkQwNkE4QyAgMDFBRTMwQTAgICBBRERJVSBBMSwgWkVSTywgNDMwCkJGRDA2QTkwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwNkE5MiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwNkE5NCAgICAgIDBDMDAgICBOT1AKNDMxOiAgICAgICAgICAgICAgICAgDQo0MzI6ICAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwNkE5NiAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbApCRkQwNkE5OCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzIKQkZEMDZBOUEgICAgICAwQzAwICAgTk9QCjQzMzogICAgICAgICAgICAgICAgIAl7DQo0MzQ6ICAgICAgICAgICAgICAgICAJCXRyYWNlRVZFTlRfR1JPVVBfQ0xFQVJfQklUUyggeEV2ZW50R3JvdXAsIHV4Qml0c1RvQ2xlYXIgKTsNCjQzNTogICAgICAgICAgICAgICAgIA0KNDM2OiAgICAgICAgICAgICAgICAgCQkvKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIGV2ZW50IGdyb3VwIHZhbHVlIHByaW9yIHRvIHRoZSBiaXRzIGJlaW5nDQo0Mzc6ICAgICAgICAgICAgICAgICAJCWNsZWFyZWQuICovDQo0Mzg6ICAgICAgICAgICAgICAgICAJCXV4UmV0dXJuID0gcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzOw0KQkZEMDZBOUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNkFBMCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDZBQTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo0Mzk6ICAgICAgICAgICAgICAgICANCjQ0MDogICAgICAgICAgICAgICAgIAkJLyogQ2xlYXIgdGhlIGJpdHMuICovDQo0NDE6ICAgICAgICAgICAgICAgICAJCXB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyAmPSB+dXhCaXRzVG9DbGVhcjsNCkJGRDA2QUE2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDZBQUEgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDA2QUFDICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDZBQjAgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwCkJGRDA2QUIyICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMApCRkQwNkFCNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA2QUI4ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0NDI6ICAgICAgICAgICAgICAgICAJfQ0KNDQzOiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwNkFCQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA2QUJDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA4MkMwCkJGRDA2QUJFICAgICAgMEMwMCAgIE5PUAo0NDQ6ICAgICAgICAgICAgICAgICANCjQ0NTogICAgICAgICAgICAgICAgIAlyZXR1cm4gdXhSZXR1cm47DQpCRkQwNkFDMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCjQ0NjogICAgICAgICAgICAgICAgIH0NCkJGRDA2QUM0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA2QUM2ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDZBQzggICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwNkFDQSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA2QUNDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDZBQ0UgICAgICAwQzAwICAgTk9QCjQ0NzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDQ4OiAgICAgICAgICAgICAgICAgDQo0NDk6ICAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgJiYgKCBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgPT0gMSApICYmICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKQ0KNDUwOiAgICAgICAgICAgICAgICAgDQo0NTE6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4RXZlbnRHcm91cENsZWFyQml0c0Zyb21JU1IoIEV2ZW50R3JvdXBIYW5kbGVfdCB4RXZlbnRHcm91cCwgY29uc3QgRXZlbnRCaXRzX3QgdXhCaXRzVG9DbGVhciApDQo0NTI6ICAgICAgICAgICAgICAgICAJew0KNDUzOiAgICAgICAgICAgICAgICAgCQlCYXNlVHlwZV90IHhSZXR1cm47DQo0NTQ6ICAgICAgICAgICAgICAgICANCjQ1NTogICAgICAgICAgICAgICAgIAkJdHJhY2VFVkVOVF9HUk9VUF9DTEVBUl9CSVRTX0ZST01fSVNSKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9DbGVhciApOw0KNDU2OiAgICAgICAgICAgICAgICAgCQl4UmV0dXJuID0geFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbEZyb21JU1IoIHZFdmVudEdyb3VwQ2xlYXJCaXRzQ2FsbGJhY2ssICggdm9pZCAqICkgeEV2ZW50R3JvdXAsICggdWludDMyX3QgKSB1eEJpdHNUb0NsZWFyLCBOVUxMICk7DQo0NTc6ICAgICAgICAgICAgICAgICANCjQ1ODogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQo0NTk6ICAgICAgICAgICAgICAgICAJfQ0KNDYwOiAgICAgICAgICAgICAgICAgDQo0NjE6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjQ2MjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDYzOiAgICAgICAgICAgICAgICAgDQo0NjQ6ICAgICAgICAgICAgICAgICBFdmVudEJpdHNfdCB4RXZlbnRHcm91cEdldEJpdHNGcm9tSVNSKCBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXAgKQ0KNDY1OiAgICAgICAgICAgICAgICAgew0KQkZEMDkxNDQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDkxNDYgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQpCRkQwOTE0OCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApCkJGRDA5MTRBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5MTRDICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkKNDY2OiAgICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhTYXZlZEludGVycnVwdFN0YXR1czsNCjQ2NzogICAgICAgICAgICAgICAgIEV2ZW50R3JvdXBfdCAqcHhFdmVudEJpdHMgPSAoIEV2ZW50R3JvdXBfdCAqICkgeEV2ZW50R3JvdXA7DQpCRkQwOTE1MCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA5MTU0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNDY4OiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgdXhSZXR1cm47DQo0Njk6ICAgICAgICAgICAgICAgICANCjQ3MDogICAgICAgICAgICAgICAgIAl1eFNhdmVkSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KQkZEMDkxNTggIDQ3NUU3N0U4ICAgSkFMUyB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUgpCRkQwOTE1QyAgICAgIDBDMDAgICBOT1AKQkZEMDkxNUUgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo0NzE6ICAgICAgICAgICAgICAgICAJew0KNDcyOiAgICAgICAgICAgICAgICAgCQl1eFJldHVybiA9IHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDA5MTYyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDkxNjYgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDA5MTY4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKNDczOiAgICAgICAgICAgICAgICAgCX0NCjQ3NDogICAgICAgICAgICAgICAgIAlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKTsNCkJGRDA5MTZDICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkKQkZEMDkxNzAgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IKQkZEMDkxNzIgICAgICA0RDVFICAgQURESVUgVDIsIFQyLCAtMQpCRkQwOTE3NCAgICAgIDBDMDAgICBOT1AKNDc1OiAgICAgICAgICAgICAgICAgDQo0NzY6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDkxNzYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQo0Nzc6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTE3QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTE3QyAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApCkJGRDA5MTdFICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkKQkZEMDkxODAgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MApCRkQwOTE4MiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5MTg0ICAgICAgMEMwMCAgIE5PUAo0Nzg6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQ3OTogICAgICAgICAgICAgICAgIA0KNDgwOiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgeEV2ZW50R3JvdXBTZXRCaXRzKCBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXAsIGNvbnN0IEV2ZW50Qml0c190IHV4Qml0c1RvU2V0ICkNCjQ4MTogICAgICAgICAgICAgICAgIHsNCkJGRDAyNTY4ICAgICAgNEZFMSAgIEFERElVIFNQLCBTUCwgLTY0CkJGRDAyNTZBICAgICAgQ0JFRiAgIFNXIFJBLCA2MChTUCkKQkZEMDI1NkMgICAgICBDQkNFICAgU1cgUzgsIDU2KFNQKQpCRkQwMjU2RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMjU3MCAgMDA0MEY4OUUgICBTVyBBMCwgNjQoUzgpCkJGRDAyNTc0ICAwMDQ0RjhCRSAgIFNXIEExLCA2OChTOCkKNDgyOiAgICAgICAgICAgICAgICAgTGlzdEl0ZW1fdCAqcHhMaXN0SXRlbSwgKnB4TmV4dDsNCjQ4MzogICAgICAgICAgICAgICAgIExpc3RJdGVtX3QgY29uc3QgKnB4TGlzdEVuZDsNCjQ4NDogICAgICAgICAgICAgICAgIExpc3RfdCAqcHhMaXN0Ow0KNDg1OiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgdXhCaXRzVG9DbGVhciA9IDAsIHV4Qml0c1dhaXRlZEZvciwgdXhDb250cm9sQml0czsNCkJGRDAyNTc4ICAwMDE0RjgxRSAgIFNXIFpFUk8sIDIwKFM4KQo0ODY6ICAgICAgICAgICAgICAgICBFdmVudEdyb3VwX3QgKnB4RXZlbnRCaXRzID0gKCBFdmVudEdyb3VwX3QgKiApIHhFdmVudEdyb3VwOw0KQkZEMDI1N0MgIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQpCRkQwMjU4MCAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpCjQ4NzogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeE1hdGNoRm91bmQgPSBwZEZBTFNFOw0KQkZEMDI1ODQgIDAwMThGODFFICAgU1cgWkVSTywgMjQoUzgpCjQ4ODogICAgICAgICAgICAgICAgIA0KNDg5OiAgICAgICAgICAgICAgICAgCS8qIENoZWNrIHRoZSB1c2VyIGlzIG5vdCBhdHRlbXB0aW5nIHRvIHNldCB0aGUgYml0cyB1c2VkIGJ5IHRoZSBrZXJuZWwNCjQ5MDogICAgICAgICAgICAgICAgIAlpdHNlbGYuICovDQo0OTE6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4RXZlbnRHcm91cCApOw0KQkZEMDI1ODggIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQpCRkQwMjU4QyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjVBMgpCRkQwMjU5MCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwMjU5MiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDAyNTk0ICA5QzBDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1NTg4CkJGRDAyNTk2ICAzMEEwOUMwQyAgIExXQzEgRjAsIDEyNDQ4KFQ0KQpCRkQwMjU5OCAgMDFFQjMwQTAgICBBRERJVSBBMSwgWkVSTywgNDkxCkJGRDAyNTlDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZApCRkQwMjU5RSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQpCRkQwMjVBMCAgICAgIDBDMDAgICBOT1AKNDkyOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggKCB1eEJpdHNUb1NldCAmIGV2ZW50RVZFTlRfQklUU19DT05UUk9MX0JZVEVTICkgPT0gMCApOw0KQkZEMDI1QTIgIDAwNDRGQzdFICAgTFcgVjEsIDY4KFM4KQpCRkQwMjVBNiAgRkYwMDQxQTIgICBMVUkgVjAsIDB4RkYwMApCRkQwMjVBOCAgNDQ5M0ZGMDAgICBMVyBUOCwgMTc1NTUoWkVSTykKQkZEMDI1QUEgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDAyNUFDICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyNUMyCkJGRDAyNUIwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDAyNUIyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDI1QjQgIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgKQkZEMDI1QjYgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpCkJGRDAyNUI4ICAwMUVDMzBBMCAgIEFERElVIEExLCBaRVJPLCA0OTIKQkZEMDI1QkMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDAyNUJFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDAyNUMwICAgICAgMEMwMCAgIE5PUAo0OTM6ICAgICAgICAgICAgICAgICANCjQ5NDogICAgICAgICAgICAgICAgIAlweExpc3QgPSAmKCBweEV2ZW50Qml0cy0+eFRhc2tzV2FpdGluZ0ZvckJpdHMgKTsNCkJGRDAyNUMyICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDI1QzYgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0CkJGRDAyNUM4ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkKNDk1OiAgICAgICAgICAgICAgICAgCXB4TGlzdEVuZCA9IGxpc3RHRVRfRU5EX01BUktFUiggcHhMaXN0ICk7IC8qbGludCAhZTgyNiAhZTc0MCBUaGUgbWluaSBsaXN0IHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBsaXN0IGVuZCB0byBzYXZlIFJBTS4gIFRoaXMgaXMgY2hlY2tlZCBhbmQgdmFsaWQuICovDQpCRkQwMjVDQyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDAyNUQwICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOApCRkQwMjVEMiAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpCjQ5NjogICAgICAgICAgICAgICAgIAl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDAyNUQ2ICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsCkJGRDAyNUQ4ICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYKQkZEMDI1REEgICAgICAwQzAwICAgTk9QCjQ5NzogICAgICAgICAgICAgICAgIAl7DQo0OTg6ICAgICAgICAgICAgICAgICAJCXRyYWNlRVZFTlRfR1JPVVBfU0VUX0JJVFMoIHhFdmVudEdyb3VwLCB1eEJpdHNUb1NldCApOw0KNDk5OiAgICAgICAgICAgICAgICAgDQo1MDA6ICAgICAgICAgICAgICAgICAJCXB4TGlzdEl0ZW0gPSBsaXN0R0VUX0hFQURfRU5UUlkoIHB4TGlzdCApOw0KQkZEMDI1REMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwMjVFMCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDAyNUUyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNTAxOiAgICAgICAgICAgICAgICAgDQo1MDI6ICAgICAgICAgICAgICAgICAJCS8qIFNldCB0aGUgYml0cy4gKi8NCjUwMzogICAgICAgICAgICAgICAgIAkJcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzIHw9IHV4Qml0c1RvU2V0Ow0KQkZEMDI1RTYgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMjVFQSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkKQkZEMDI1RUMgIDAwNDRGQzVFICAgTFcgVjAsIDY4KFM4KQpCRkQwMjVGMCAgICAgIDQ0REEgICBPUjE2IFYxLCBWMApCRkQwMjVGMiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAyNUY2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo1MDQ6ICAgICAgICAgICAgICAgICANCjUwNTogICAgICAgICAgICAgICAgIAkJLyogU2VlIGlmIHRoZSBuZXcgYml0IHZhbHVlIHNob3VsZCB1bmJsb2NrIGFueSB0YXNrcy4gKi8NCjUwNjogICAgICAgICAgICAgICAgIAkJd2hpbGUoIHB4TGlzdEl0ZW0gIT0gcHhMaXN0RW5kICkNCkJGRDAyNUY4ICAgICAgQ0M1RSAgIEIgMHhCRkQwMjZCNgpCRkQwMjVGQSAgICAgIDBDMDAgICBOT1AKQkZEMDI2QjYgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwMjZCQSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDAyNkJFICBGRjlEQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDI1RkMKQkZEMDI2QzAgIDBDMDBGRjlEICAgTFcgR1AsIDMwNzIoU1ApCkJGRDAyNkMyICAgICAgMEMwMCAgIE5PUAo1MDc6ICAgICAgICAgICAgICAgICAJCXsNCjUwODogICAgICAgICAgICAgICAgIAkJCXB4TmV4dCA9IGxpc3RHRVRfTkVYVCggcHhMaXN0SXRlbSApOw0KQkZEMDI1RkMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMjYwMCAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkKQkZEMDI2MDIgIDAwMjhGODVFICAgU1cgVjAsIDQwKFM4KQo1MDk6ICAgICAgICAgICAgICAgICAJCQl1eEJpdHNXYWl0ZWRGb3IgPSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRSggcHhMaXN0SXRlbSApOw0KQkZEMDI2MDYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwMjYwQSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDI2MEMgIDAwMkNGODVFICAgU1cgVjAsIDQ0KFM4KQo1MTA6ICAgICAgICAgICAgICAgICAJCQl4TWF0Y2hGb3VuZCA9IHBkRkFMU0U7DQpCRkQwMjYxMCAgMDAxOEY4MUUgICBTVyBaRVJPLCAyNChTOCkKNTExOiAgICAgICAgICAgICAgICAgDQo1MTI6ICAgICAgICAgICAgICAgICAJCQkvKiBTcGxpdCB0aGUgYml0cyB3YWl0ZWQgZm9yIGZyb20gdGhlIGNvbnRyb2wgYml0cy4gKi8NCjUxMzogICAgICAgICAgICAgICAgIAkJCXV4Q29udHJvbEJpdHMgPSB1eEJpdHNXYWl0ZWRGb3IgJiBldmVudEVWRU5UX0JJVFNfQ09OVFJPTF9CWVRFUzsNCkJGRDAyNjE0ICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkKQkZEMDI2MTggIEZGMDA0MUEyICAgTFVJIFYwLCAweEZGMDAKQkZEMDI2MUEgIDQ0OTNGRjAwICAgTFcgVDgsIDE3NTU1KFpFUk8pCkJGRDAyNjFDICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwMjYxRSAgMDAzMEY4NUUgICBTVyBWMCwgNDgoUzgpCjUxNDogICAgICAgICAgICAgICAgIAkJCXV4Qml0c1dhaXRlZEZvciAmPSB+ZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVM7DQpCRkQwMjYyMiAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAyNjI2ICBCODJDMDA0MiAgIEVYVCBWMCwgVjAsIDAsIDI0CkJGRDAyNjI4ICBGODVFQjgyQyAgIFNEQzEgRjEsIC0xOTU0KFQ0KQpCRkQwMjYyQSAgMDAyQ0Y4NUUgICBTVyBWMCwgNDQoUzgpCjUxNTogICAgICAgICAgICAgICAgIA0KNTE2OiAgICAgICAgICAgICAgICAgCQkJaWYoICggdXhDb250cm9sQml0cyAmIGV2ZW50V0FJVF9GT1JfQUxMX0JJVFMgKSA9PSAoIEV2ZW50Qml0c190ICkgMCApDQpCRkQwMjYyRSAgMDAzMEZDN0UgICBMVyBWMSwgNDgoUzgpCkJGRDAyNjMyICAwNDAwNDFBMiAgIExVSSBWMCwgMHg0MDAKQkZEMDI2MzQgICAgICAwNDAwICAgQUREVSBTMCwgUzAsIFMwCkJGRDAyNjM2ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwMjYzOCAgMDAwRDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjY1Ngo1MTc6ICAgICAgICAgICAgICAgICAJCQl7DQo1MTg6ICAgICAgICAgICAgICAgICAJCQkJLyogSnVzdCBsb29raW5nIGZvciBzaW5nbGUgYml0IGJlaW5nIHNldC4gKi8NCjUxOTogICAgICAgICAgICAgICAgIAkJCQlpZiggKCB1eEJpdHNXYWl0ZWRGb3IgJiBweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgKSAhPSAoIEV2ZW50Qml0c190ICkgMCApDQpCRkQwMjYzQyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAyNjQwICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwMjY0MiAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAyNjQ2ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwMjY0OCAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjY3Mgo1MjA6ICAgICAgICAgICAgICAgICAJCQkJew0KNTIxOiAgICAgICAgICAgICAgICAgCQkJCQl4TWF0Y2hGb3VuZCA9IHBkVFJVRTsNCkJGRDAyNjRDICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyNjRFICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKQkZEMDI2NTIgICAgICBDQzBGICAgQiAweEJGRDAyNjcyCkJGRDAyNjU0ICAgICAgMEMwMCAgIE5PUAo1MjI6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNTIzOiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjUyNDogICAgICAgICAgICAgICAgIAkJCQl7DQo1MjU6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjUyNjogICAgICAgICAgICAgICAgIAkJCQl9DQo1Mjc6ICAgICAgICAgICAgICAgICAJCQl9DQo1Mjg6ICAgICAgICAgICAgICAgICAJCQllbHNlIGlmKCAoIHV4Qml0c1dhaXRlZEZvciAmIHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyApID09IHV4Qml0c1dhaXRlZEZvciApDQpCRkQwMjY1NiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpCkJGRDAyNjVBICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwMjY1QyAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAyNjYwICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMApCRkQwMjY2MiAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDAyNjY2ICAwMDA0QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDI2NzIKQkZEMDI2NjggIDBDMDAwMDA0ICAgU0xMIFpFUk8sIEEwLCAxCkJGRDAyNjZBICAgICAgMEMwMCAgIE5PUAo1Mjk6ICAgICAgICAgICAgICAgICAJCQl7DQo1MzA6ICAgICAgICAgICAgICAgICAJCQkJLyogQWxsIGJpdHMgYXJlIHNldC4gKi8NCjUzMTogICAgICAgICAgICAgICAgIAkJCQl4TWF0Y2hGb3VuZCA9IHBkVFJVRTsNCkJGRDAyNjZDICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDAyNjZFICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKNTMyOiAgICAgICAgICAgICAgICAgCQkJfQ0KNTMzOiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNTM0OiAgICAgICAgICAgICAgICAgCQkJew0KNTM1OiAgICAgICAgICAgICAgICAgCQkJCS8qIE5lZWQgYWxsIGJpdHMgdG8gYmUgc2V0LCBidXQgbm90IGFsbCB0aGUgYml0cyB3ZXJlIHNldC4gKi8NCjUzNjogICAgICAgICAgICAgICAgIAkJCX0NCjUzNzogICAgICAgICAgICAgICAgIA0KNTM4OiAgICAgICAgICAgICAgICAgCQkJaWYoIHhNYXRjaEZvdW5kICE9IHBkRkFMU0UgKQ0KQkZEMDI2NzIgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQpCRkQwMjY3NiAgMDAxQTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjZBRQo1Mzk6ICAgICAgICAgICAgICAgICAJCQl7DQo1NDA6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIGJpdHMgbWF0Y2guICBTaG91bGQgdGhlIGJpdHMgYmUgY2xlYXJlZCBvbiBleGl0PyAqLw0KNTQxOiAgICAgICAgICAgICAgICAgCQkJCWlmKCAoIHV4Q29udHJvbEJpdHMgJiBldmVudENMRUFSX0VWRU5UU19PTl9FWElUX0JJVCApICE9ICggRXZlbnRCaXRzX3QgKSAwICkNCkJGRDAyNjdBICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkKQkZEMDI2N0UgIDAxMDA0MUEyICAgTFVJIFYwLCAweDEwMApCRkQwMjY4MiAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDI2ODQgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI2OTYKNTQyOiAgICAgICAgICAgICAgICAgCQkJCXsNCjU0MzogICAgICAgICAgICAgICAgIAkJCQkJdXhCaXRzVG9DbGVhciB8PSB1eEJpdHNXYWl0ZWRGb3I7DQpCRkQwMjY4OCAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDAyNjhDICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkKQkZEMDI2OTAgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDI2OTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo1NDQ6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNTQ1OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjU0NjogICAgICAgICAgICAgICAgIAkJCQl7DQo1NDc6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjU0ODogICAgICAgICAgICAgICAgIAkJCQl9DQo1NDk6ICAgICAgICAgICAgICAgICANCjU1MDogICAgICAgICAgICAgICAgIAkJCQkvKiBTdG9yZSB0aGUgYWN0dWFsIGV2ZW50IGZsYWcgdmFsdWUgaW4gdGhlIHRhc2sncyBldmVudCBsaXN0DQo1NTE6ICAgICAgICAgICAgICAgICAJCQkJaXRlbSBiZWZvcmUgcmVtb3ZpbmcgdGhlIHRhc2sgZnJvbSB0aGUgZXZlbnQgbGlzdC4gIFRoZQ0KNTUyOiAgICAgICAgICAgICAgICAgCQkJCWV2ZW50VU5CTE9DS0VEX0RVRV9UT19CSVRfU0VUIGJpdCBpcyBzZXQgc28gdGhlIHRhc2sga25vd3MNCjU1MzogICAgICAgICAgICAgICAgIAkJCQl0aGF0IGlzIHdhcyB1bmJsb2NrZWQgZHVlIHRvIGl0cyByZXF1aXJlZCBiaXRzIG1hdGNoaW5nLCByYXRoZXINCjU1NDogICAgICAgICAgICAgICAgIAkJCQl0aGFuIGJlY2F1c2UgaXQgdGltZWQgb3V0LiAqLw0KNTU1OiAgICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIHhUYXNrUmVtb3ZlRnJvbVVub3JkZXJlZEV2ZW50TGlzdCggcHhMaXN0SXRlbSwgcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzIHwgZXZlbnRVTkJMT0NLRURfRFVFX1RPX0JJVF9TRVQgKTsNCkJGRDAyNjk2ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDI2OUEgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDAyNjlDICAwMjAwNDFBMiAgIExVSSBWMCwgMHgyMDAKQkZEMDI2QTAgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDI2QTIgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQpCRkQwMjZBNiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMApCRkQwMjZBOCAgMjE2Mjc3RTggICBKQUxTIHhUYXNrUmVtb3ZlRnJvbVVub3JkZXJlZEV2ZW50TGlzdApCRkQwMjZBQSAgMEMwMDIxNjIgICBMV0MyIFQzLCAzMDcyKFYwKQpCRkQwMjZBQyAgICAgIDBDMDAgICBOT1AKNTU2OiAgICAgICAgICAgICAgICAgCQkJfQ0KNTU3OiAgICAgICAgICAgICAgICAgDQo1NTg6ICAgICAgICAgICAgICAgICAJCQkvKiBNb3ZlIG9udG8gdGhlIG5leHQgbGlzdCBpdGVtLiAgTm90ZSBweExpc3RJdGVtLT5weE5leHQgaXMgbm90DQo1NTk6ICAgICAgICAgICAgICAgICAJCQl1c2VkIGhlcmUgYXMgdGhlIGxpc3QgaXRlbSBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgbGlzdA0KNTYwOiAgICAgICAgICAgICAgICAgCQkJYW5kIGluc2VydGVkIGludG8gdGhlIHJlYWR5L3BlbmRpbmcgcmVhZGluZyBsaXN0LiAqLw0KNTYxOiAgICAgICAgICAgICAgICAgCQkJcHhMaXN0SXRlbSA9IHB4TmV4dDsNCkJGRDAyNkFFICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDI2QjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo1NjI6ICAgICAgICAgICAgICAgICAJCX0NCjU2MzogICAgICAgICAgICAgICAgIA0KNTY0OiAgICAgICAgICAgICAgICAgCQkvKiBDbGVhciBhbnkgYml0cyB0aGF0IG1hdGNoZWQgd2hlbiB0aGUgZXZlbnRDTEVBUl9FVkVOVFNfT05fRVhJVF9CSVQNCjU2NTogICAgICAgICAgICAgICAgIAkJYml0IHdhcyBzZXQgaW4gdGhlIGNvbnRyb2wgd29yZC4gKi8NCjU2NjogICAgICAgICAgICAgICAgIAkJcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzICY9IH51eEJpdHNUb0NsZWFyOw0KQkZEMDI2QzQgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQpCRkQwMjZDOCAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkKQkZEMDI2Q0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwMjZDRSAgICAgIDQ0MTIgICBOT1QxNiBWMCwgVjAKQkZEMDI2RDAgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwCkJGRDAyNkQyICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDI2RDYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjU2NzogICAgICAgICAgICAgICAgIAl9DQo1Njg6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDAyNkQ4ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDI2REEgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwMjZEQyAgICAgIDBDMDAgICBOT1AKNTY5OiAgICAgICAgICAgICAgICAgDQo1NzA6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDAyNkRFICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkKQkZEMDI2RTIgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCjU3MTogICAgICAgICAgICAgICAgIH0NCkJGRDAyNkU0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAyNkU2ICAgICAgNEJFRiAgIExXIFJBLCA2MChTUCkKQkZEMDI2RTggICAgICA0QkNFICAgTFcgUzgsIDU2KFNQKQpCRkQwMjZFQSAgICAgIDRDMjEgICBBRERJVSBTUCwgU1AsIDY0CkJGRDAyNkVDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDI2RUUgICAgICAwQzAwICAgTk9QCjU3MjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTczOiAgICAgICAgICAgICAgICAgDQo1NzQ6ICAgICAgICAgICAgICAgICB2b2lkIHZFdmVudEdyb3VwRGVsZXRlKCBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXAgKQ0KNTc1OiAgICAgICAgICAgICAgICAgew0KQkZEMDZDNzAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDZDNzIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNkM3NCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA2Qzc2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA2Qzc4ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKNTc2OiAgICAgICAgICAgICAgICAgRXZlbnRHcm91cF90ICpweEV2ZW50Qml0cyA9ICggRXZlbnRHcm91cF90ICogKSB4RXZlbnRHcm91cDsNCkJGRDA2QzdDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkKQkZEMDZDODAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo1Nzc6ICAgICAgICAgICAgICAgICBjb25zdCBMaXN0X3QgKnB4VGFza3NXYWl0aW5nRm9yQml0cyA9ICYoIHB4RXZlbnRCaXRzLT54VGFza3NXYWl0aW5nRm9yQml0cyApOw0KQkZEMDZDODQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNkM4OCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQKQkZEMDZDOEEgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo1Nzg6ICAgICAgICAgICAgICAgICANCjU3OTogICAgICAgICAgICAgICAgIAl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDA2QzhFICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsCkJGRDA2QzkwICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYKQkZEMDZDOTIgICAgICAwQzAwICAgTk9QCjU4MDogICAgICAgICAgICAgICAgIAl7DQo1ODE6ICAgICAgICAgICAgICAgICAJCXRyYWNlRVZFTlRfR1JPVVBfREVMRVRFKCB4RXZlbnRHcm91cCApOw0KNTgyOiAgICAgICAgICAgICAgICAgDQo1ODM6ICAgICAgICAgICAgICAgICAJCXdoaWxlKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggcHhUYXNrc1dhaXRpbmdGb3JCaXRzICkgPiAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwNkM5NCAgICAgIENDMUMgICBCIDB4QkZEMDZDQ0UKQkZEMDZDOTYgICAgICAwQzAwICAgTk9QCkJGRDA2Q0NFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDZDRDIgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDA2Q0Q0ICBGRkUwNDBBMiAgIEJORVpDIFYwLCAweEJGRDA2Qzk4CkJGRDA2Q0Q2ICBGQzlFRkZFMCAgIExXIFJBLCAtODY2KFpFUk8pCjU4NDogICAgICAgICAgICAgICAgIAkJew0KNTg1OiAgICAgICAgICAgICAgICAgCQkJLyogVW5ibG9jayB0aGUgdGFzaywgcmV0dXJuaW5nIDAgYXMgdGhlIGV2ZW50IGxpc3QgaXMgYmVpbmcgZGVsZXRlZA0KNTg2OiAgICAgICAgICAgICAgICAgCQkJYW5kCWNhbm5vdCB0aGVyZWZvcmUgaGF2ZSBhbnkgYml0cyBzZXQuICovDQo1ODc6ICAgICAgICAgICAgICAgICAJCQljb25maWdBU1NFUlQoIHB4VGFza3NXYWl0aW5nRm9yQml0cy0+eExpc3RFbmQucHhOZXh0ICE9ICggTGlzdEl0ZW1fdCAqICkgJiggcHhUYXNrc1dhaXRpbmdGb3JCaXRzLT54TGlzdEVuZCApICk7DQpCRkQwNkM5OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA2QzlDICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkKQkZEMDZDOUUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNkNBMiAgICAgIDZEMjQgICBBRERJVSBWMCwgVjAsIDgKQkZEMDZDQTQgIDAwMEFCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNkNCQwpCRkQwNkNBNiAgMEMwMDAwMEEgICBTTEwgWkVSTywgVDIsIDEKQkZEMDZDQTggICAgICAwQzAwICAgTk9QCkJGRDA2Q0FBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA2Q0FDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkKQkZEMDZDQUUgIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgKQkZEMDZDQjAgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpCkJGRDA2Q0IyICAwMjRCMzBBMCAgIEFERElVIEExLCBaRVJPLCA1ODcKQkZEMDZDQjYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA2Q0I4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA2Q0JBICAgICAgMEMwMCAgIE5PUAo1ODg6ICAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSB4VGFza1JlbW92ZUZyb21Vbm9yZGVyZWRFdmVudExpc3QoIHB4VGFza3NXYWl0aW5nRm9yQml0cy0+eExpc3RFbmQucHhOZXh0LCBldmVudFVOQkxPQ0tFRF9EVUVfVE9fQklUX1NFVCApOw0KQkZEMDZDQkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNkNDMCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApCkJGRDA2Q0MyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA2Q0M0ICAwMjAwNDFBNSAgIExVSSBBMSwgMHgyMDAKQkZEMDZDQzggIDIxNjI3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21Vbm9yZGVyZWRFdmVudExpc3QKQkZEMDZDQ0EgIDBDMDAyMTYyICAgTFdDMiBUMywgMzA3MihWMCkKQkZEMDZDQ0MgICAgICAwQzAwICAgTk9QCjU4OTogICAgICAgICAgICAgICAgIAkJfQ0KNTkwOiAgICAgICAgICAgICAgICAgDQo1OTE6ICAgICAgICAgICAgICAgICAJCXZQb3J0RnJlZSggcHhFdmVudEJpdHMgKTsNCkJGRDA2Q0Q4ICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkKQkZEMDZDREMgIDJGRUE3N0U4ICAgSkFMUyB2UG9ydEZyZWUKQkZEMDZDREUgICAgICAyRkVBICAgQU5ESSBBMywgQTIsIDB4MjAKQkZEMDZDRTAgICAgICAwQzAwICAgTk9QCjU5MjogICAgICAgICAgICAgICAgIAl9DQo1OTM6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDA2Q0UyICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwKQkZEMDZDRTQgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQpCRkQwNkNFNiAgICAgIDBDMDAgICBOT1AKNTk0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDZDRTggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDZDRUEgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNkNFQyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA2Q0VFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDZDRjAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNkNGMiAgICAgIDBDMDAgICBOT1AKNTk1OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo1OTY6ICAgICAgICAgICAgICAgICANCjU5NzogICAgICAgICAgICAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAtIGV4ZWN1dGUgYSAnc2V0IGJpdHMnIGNvbW1hbmQgdGhhdCB3YXMgcGVuZGVkIGZyb20NCjU5ODogICAgICAgICAgICAgICAgIGFuIGludGVycnVwdC4gKi8NCjU5OTogICAgICAgICAgICAgICAgIHZvaWQgdkV2ZW50R3JvdXBTZXRCaXRzQ2FsbGJhY2soIHZvaWQgKnB2RXZlbnRHcm91cCwgY29uc3QgdWludDMyX3QgdWxCaXRzVG9TZXQgKQ0KNjAwOiAgICAgICAgICAgICAgICAgew0KQkZEMDk5M0MgICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQKQkZEMDk5M0UgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQpCRkQwOTk0MCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApCkJGRDA5OTQyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5OTQ0ICAwMDE4Rjg5RSAgIFNXIEEwLCAyNChTOCkKQkZEMDk5NDggIDAwMUNGOEJFICAgU1cgQTEsIDI4KFM4KQo2MDE6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgeEV2ZW50R3JvdXBTZXRCaXRzKCBwdkV2ZW50R3JvdXAsICggRXZlbnRCaXRzX3QgKSB1bEJpdHNUb1NldCApOw0KQkZEMDk5NEMgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQpCRkQwOTk1MCAgMDAxQ0ZDQkUgICBMVyBBMSwgMjgoUzgpCkJGRDA5OTU0ICAxMkI0NzdFOCAgIEpBTFMgeEV2ZW50R3JvdXBTZXRCaXRzCkJGRDA5OTU2ICAwQzAwMTJCNCAgIEFEREkgUzUsIFM0LCAzMDcyCkJGRDA5OTU4ICAgICAgMEMwMCAgIE5PUAo2MDI6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTk1QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTk1QyAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA5OTVFICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDk5NjAgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwOTk2MiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5OTY0ICAgICAgMEMwMCAgIE5PUAo2MDM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjYwNDogICAgICAgICAgICAgICAgIA0KNjA1OiAgICAgICAgICAgICAgICAgLyogRm9yIGludGVybmFsIHVzZSBvbmx5IC0gZXhlY3V0ZSBhICdjbGVhciBiaXRzJyBjb21tYW5kIHRoYXQgd2FzIHBlbmRlZCBmcm9tDQo2MDY6ICAgICAgICAgICAgICAgICBhbiBpbnRlcnJ1cHQuICovDQo2MDc6ICAgICAgICAgICAgICAgICB2b2lkIHZFdmVudEdyb3VwQ2xlYXJCaXRzQ2FsbGJhY2soIHZvaWQgKnB2RXZlbnRHcm91cCwgY29uc3QgdWludDMyX3QgdWxCaXRzVG9DbGVhciApDQo2MDg6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTk2OCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwOTk2QSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA5OTZDICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDk5NkUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk5NzAgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQpCRkQwOTk3NCAgMDAxQ0Y4QkUgICBTVyBBMSwgMjgoUzgpCjYwOTogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB4RXZlbnRHcm91cENsZWFyQml0cyggcHZFdmVudEdyb3VwLCAoIEV2ZW50Qml0c190ICkgdWxCaXRzVG9DbGVhciApOw0KQkZEMDk5NzggIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQpCRkQwOTk3QyAgMDAxQ0ZDQkUgICBMVyBBMSwgMjgoUzgpCkJGRDA5OTgwICAzNTIyNzdFOCAgIEpBTFMgeEV2ZW50R3JvdXBDbGVhckJpdHMKQkZEMDk5ODIgIDBDMDAzNTIyICAgTEhVIFQxLCAzMDcyKFYwKQpCRkQwOTk4NCAgICAgIDBDMDAgICBOT1AKNjEwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk5ODYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk5ODggICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwOTk4QSAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA5OThDICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDk5OEUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTk5MCAgICAgIDBDMDAgICBOT1AKNjExOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo2MTI6ICAgICAgICAgICAgICAgICANCjYxMzogICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydlRlc3RXYWl0Q29uZGl0aW9uKCBjb25zdCBFdmVudEJpdHNfdCB1eEN1cnJlbnRFdmVudEJpdHMsIGNvbnN0IEV2ZW50Qml0c190IHV4Qml0c1RvV2FpdEZvciwgY29uc3QgQmFzZVR5cGVfdCB4V2FpdEZvckFsbEJpdHMgKQ0KNjE0OiAgICAgICAgICAgICAgICAgew0KQkZEMDgwRjQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYKQkZEMDgwRjYgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwODBGOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODBGQSAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpCkJGRDA4MEZFICAwMDE0RjhCRSAgIFNXIEExLCAyMChTOCkKQkZEMDgxMDIgIDAwMThGOERFICAgU1cgQTIsIDI0KFM4KQo2MTU6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhXYWl0Q29uZGl0aW9uTWV0ID0gcGRGQUxTRTsNCkJGRDA4MTA2ICAwMDAwRjgxRSAgIFNXIFpFUk8sIDAoUzgpCjYxNjogICAgICAgICAgICAgICAgIA0KNjE3OiAgICAgICAgICAgICAgICAgCWlmKCB4V2FpdEZvckFsbEJpdHMgPT0gcGRGQUxTRSApDQpCRkQwODEwQSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpCkJGRDA4MTBFICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDA4MTJBCjYxODogICAgICAgICAgICAgICAgIAl7DQo2MTk6ICAgICAgICAgICAgICAgICAJCS8qIFRhc2sgb25seSBoYXMgdG8gd2FpdCBmb3Igb25lIGJpdCB3aXRoaW4gdXhCaXRzVG9XYWl0Rm9yIHRvIGJlDQo2MjA6ICAgICAgICAgICAgICAgICAJCXNldC4gIElzIG9uZSBhbHJlYWR5IHNldD8gKi8NCjYyMTogICAgICAgICAgICAgICAgIAkJaWYoICggdXhDdXJyZW50RXZlbnRCaXRzICYgdXhCaXRzVG9XYWl0Rm9yICkgIT0gKCBFdmVudEJpdHNfdCApIDAgKQ0KQkZEMDgxMTIgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwODExNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA4MTFBICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwODExQyAgMDAxMjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODE0NAo2MjI6ICAgICAgICAgICAgICAgICAJCXsNCjYyMzogICAgICAgICAgICAgICAgIAkJCXhXYWl0Q29uZGl0aW9uTWV0ID0gcGRUUlVFOw0KQkZEMDgxMjAgICAgICBFRDAxICAgTEkgVjAsIDEKQkZEMDgxMjIgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCkJGRDA4MTI2ICAgICAgQ0MwRSAgIEIgMHhCRkQwODE0NApCRkQwODEyOCAgICAgIDBDMDAgICBOT1AKNjI0OiAgICAgICAgICAgICAgICAgCQl9DQo2MjU6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjYyNjogICAgICAgICAgICAgICAgIAkJew0KNjI3OiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjI4OiAgICAgICAgICAgICAgICAgCQl9DQo2Mjk6ICAgICAgICAgICAgICAgICAJfQ0KNjMwOiAgICAgICAgICAgICAgICAgCWVsc2UNCjYzMTogICAgICAgICAgICAgICAgIAl7DQo2MzI6ICAgICAgICAgICAgICAgICAJCS8qIFRhc2sgaGFzIHRvIHdhaXQgZm9yIGFsbCB0aGUgYml0cyBpbiB1eEJpdHNUb1dhaXRGb3IgdG8gYmUgc2V0Lg0KNjMzOiAgICAgICAgICAgICAgICAgCQlBcmUgdGhleSBzZXQgYWxyZWFkeT8gKi8NCjYzNDogICAgICAgICAgICAgICAgIAkJaWYoICggdXhDdXJyZW50RXZlbnRCaXRzICYgdXhCaXRzVG9XYWl0Rm9yICkgPT0gdXhCaXRzVG9XYWl0Rm9yICkNCkJGRDA4MTJBICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDgxMkUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwODEzMiAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjAKQkZEMDgxMzQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwODEzOCAgMDAwNEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA4MTQ0CkJGRDA4MTNBICAwQzAwMDAwNCAgIFNMTCBaRVJPLCBBMCwgMQpCRkQwODEzQyAgICAgIDBDMDAgICBOT1AKNjM1OiAgICAgICAgICAgICAgICAgCQl7DQo2MzY6ICAgICAgICAgICAgICAgICAJCQl4V2FpdENvbmRpdGlvbk1ldCA9IHBkVFJVRTsNCkJGRDA4MTNFICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA4MTQwICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQo2Mzc6ICAgICAgICAgICAgICAgICAJCX0NCjYzODogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNjM5OiAgICAgICAgICAgICAgICAgCQl7DQo2NDA6ICAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo2NDE6ICAgICAgICAgICAgICAgICAJCX0NCjY0MjogICAgICAgICAgICAgICAgIAl9DQo2NDM6ICAgICAgICAgICAgICAgICANCjY0NDogICAgICAgICAgICAgICAgIAlyZXR1cm4geFdhaXRDb25kaXRpb25NZXQ7DQpCRkQwODE0NCAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKNjQ1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDgxNDggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDgxNEEgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwODE0QyAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDA4MTRFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDgxNTAgICAgICAwQzAwICAgTk9QCjY0NjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNjQ3OiAgICAgICAgICAgICAgICAgDQo2NDg6ICAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgJiYgKCBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgPT0gMSApICYmICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKQ0KNjQ5OiAgICAgICAgICAgICAgICAgDQo2NTA6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4RXZlbnRHcm91cFNldEJpdHNGcm9tSVNSKCBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXAsIGNvbnN0IEV2ZW50Qml0c190IHV4Qml0c1RvU2V0LCBCYXNlVHlwZV90ICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCjY1MTogICAgICAgICAgICAgICAgIAl7DQo2NTI6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuOw0KNjUzOiAgICAgICAgICAgICAgICAgDQo2NTQ6ICAgICAgICAgICAgICAgICAJCXRyYWNlRVZFTlRfR1JPVVBfU0VUX0JJVFNfRlJPTV9JU1IoIHhFdmVudEdyb3VwLCB1eEJpdHNUb1NldCApOw0KNjU1OiAgICAgICAgICAgICAgICAgCQl4UmV0dXJuID0geFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbEZyb21JU1IoIHZFdmVudEdyb3VwU2V0Qml0c0NhbGxiYWNrLCAoIHZvaWQgKiApIHhFdmVudEdyb3VwLCAoIHVpbnQzMl90ICkgdXhCaXRzVG9TZXQsIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKTsNCjY1NjogICAgICAgICAgICAgICAgIA0KNjU3OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjY1ODogICAgICAgICAgICAgICAgIAl9DQo2NTk6ICAgICAgICAgICAgICAgICANCjY2MDogICAgICAgICAgICAgICAgICNlbmRpZg0KNjYxOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo2NjI6ICAgICAgICAgICAgICAgICANCjY2MzogICAgICAgICAgICAgICAgICNpZiAoY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEpDQo2NjQ6ICAgICAgICAgICAgICAgICANCjY2NTogICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eEV2ZW50R3JvdXBHZXROdW1iZXIoIHZvaWQqIHhFdmVudEdyb3VwICkNCjY2NjogICAgICAgICAgICAgICAgIAl7DQo2Njc6ICAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgeFJldHVybjsNCjY2ODogICAgICAgICAgICAgICAgIAlFdmVudEdyb3VwX3QgKnB4RXZlbnRCaXRzID0gKCBFdmVudEdyb3VwX3QgKiApIHhFdmVudEdyb3VwOw0KNjY5OiAgICAgICAgICAgICAgICAgDQo2NzA6ICAgICAgICAgICAgICAgICAJCWlmKCB4RXZlbnRHcm91cCA9PSBOVUxMICkNCjY3MTogICAgICAgICAgICAgICAgIAkJew0KNjcyOiAgICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IDA7DQo2NzM6ICAgICAgICAgICAgICAgICAJCX0NCjY3NDogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNjc1OiAgICAgICAgICAgICAgICAgCQl7DQo2NzY6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcHhFdmVudEJpdHMtPnV4RXZlbnRHcm91cE51bWJlcjsNCjY3NzogICAgICAgICAgICAgICAgIAkJfQ0KNjc4OiAgICAgICAgICAgICAgICAgDQo2Nzk6ICAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KNjgwOiAgICAgICAgICAgICAgICAgCX0NCjY4MTogICAgICAgICAgICAgICAgIA0KNjgyOiAgICAgICAgICAgICAgICAgI2VuZGlmDQo2ODM6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvc3RhcnR1cC9tcGxhYi9vbl9yZXNldC5jICAKMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBvbl9yZXNldC5jDQoyMjogICAgICAgICAgICAgICAgICAgKk1FQzE0eHggWEMzMiBNMTRLIFN0YXJ0dXAgY29kZSBfb25fcmVzZXQgaGFuZGxlcg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggU3RhcnR1cA0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfcGNyLmgiDQozMzogICAgICAgICAgICAgICAgICANCjM0OiAgICAgICAgICAgICAgICAgIC8qDQozNTogICAgICAgICAgICAgICAgICAgKiBGcm9tIGxpbmtlciBjb21tYW5kIGZpbGUNCjM2OiAgICAgICAgICAgICAgICAgICAqLw0KMzc6ICAgICAgICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90IF9lYmFzZV9hZGRyZXNzW107DQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgIA0KNDA6ICAgICAgICAgICAgICAgICAgLyoqIF9vbl9yZXNldCAtIFZlcnkgZWFybHkgSFcgaW5pdGlhbGl6YXRpb24uDQo0MTogICAgICAgICAgICAgICAgICAgKiBAbm90ZSBYQzMyIHN0YXJ0dXAgY29kZSBoYXMgaW5pdGlhbGl6ZWQgU1AgJiBHUC4gTm8gb3RoZXINCjQyOiAgICAgICAgICAgICAgICAgICAqIEMgZmVhdHVyZXMgaGF2ZSBiZWVuIGluaXRpYWxpemVkIChiZWZvcmUgLmJzcyBjbGVhciBhbmQNCjQzOiAgICAgICAgICAgICAgICAgICAqIGdsb2JhbCBkYXRhIGluaXQuKSBOT1RFOiBNSVBTIE0xNEsgaXMgc3RpbGwgaW4gQm9vdC1TdHJhcCANCjQ0OiAgICAgICAgICAgICAgICAgICAqIG1vZGUgYW5kIEVCQVNFIGhhcyBub3QgYmVlbiBwcm9ncmFtbWVkLiBBbnkgZXhjZXB0aW9uIG9yIA0KNDU6ICAgICAgICAgICAgICAgICAgICogaW50ZXJydXB0cyB3aWxsIHZlY3RvciB0byB0aGUgQkVWIEV4Y2VwdGlvbiBoYW5kbGVyISANCjQ2OiAgICAgICAgICAgICAgICAgICAqLw0KNDc6ICAgICAgICAgICAgICAgICAgdm9pZA0KNDg6ICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygobm9taXBzMTYpKSBfb25fcmVzZXQgKHZvaWQpDQo0OTogICAgICAgICAgICAgICAgICB7DQpCRkQwOTFDQyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5MUNFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOTFEMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo1MDogICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIEpUQUcgKi8NCjUxOiAgICAgICAgICAgICAgICAgICAgICBFQ1NfUkVHLT5KVEFHX0VOQUJMRSB8PSAxdTsNCkJGRDA5MUQyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDA5MUQ2ICBGQzIwNTA0MiAgIE9SSSBWMCwgVjAsIC05OTIKQkZEMDkxRDggIDQxQTNGQzIwICAgTFcgQVQsIDE2ODAzKFpFUk8pCkJGRDA5MURBICBBMDAwNDFBMyAgIExVSSBWMSwgMHhBMDAwCkJGRDA5MURFICBGQzIwNTA2MyAgIE9SSSBWMSwgVjEsIC05OTIKQkZEMDkxRTAgIDY5QjBGQzIwICAgTFcgQVQsIDI3MDU2KFpFUk8pCkJGRDA5MUUyICAgICAgNjlCMCAgIExXIFYxLCAwKFYxKQpCRkQwOTFFNCAgMDAwMTUwNjMgICBPUkkgVjEsIFYxLCAxCkJGRDA5MUU4ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo1MjogICAgICAgICAgICAgICAgICANCjUzOiAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIFdEVCAqLw0KNTQ6ICAgICAgICAgICAgICAgICAgICAgIFdEVC0+Q09OVFJPTCA9IDB1Ow0KQkZEMDkxRUEgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDkxRUUgIDA0MDA1MDQyICAgT1JJIFYwLCBWMCwgMTAyNApCRkQwOTFGMCAgICAgIDA0MDAgICBBRERVIFMwLCBTMCwgUzAKQkZEMDkxRjIgICAgICA4ODI0ICAgU0IgUzAsIDQoVjApCjU1OiAgICAgICAgICAgICAgICAgIA0KNTY6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBDUFUgY2xvY2sgZGl2aWRlciBzcGVjaWZpZWQgaW4gYXBwY2ZnLmggKi8NCjU3OiAgICAgICAgICAgICAgICAgICAgICBQQ1ItPlBST0NfQ0xPQ0tfQ05UUkwgPSAoIFBDUl9DTE9DS19ESVZJREVSICk7DQpCRkQwOTFGNCAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOApCRkQwOTFGOCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDkxRkMgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDkxRkUgICAgICBFOUE4ICAgU1cgVjEsIDMyKFYwKQo1ODogICAgICAgICAgICAgICAgICAgICAgX19FSEIoKTsNCkJGRDA5MjAwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA5MjAyICAwMDAwMTgwMCAgIFNCIFpFUk8sIDAoWkVSTykKNTk6ICAgICAgICAgICAgICAgICAgICAgIENQVV9OT1AoKTsNCkJGRDA5MjA0ICAwODAwMDAwMCAgIFNTTk9QCkJGRDA5MjA2ICAgICAgMDgwMCAgIExCVSBTMCwgMChTMCkKNjA6ICAgICAgICAgICAgICAgICAgDQo2MTogICAgICAgICAgICAgICAgICB9DQpCRkQwOTIwOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTIwQSAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDkyMEMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTIwRSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvc3RhcnR1cC9tcGxhYi9kZWZhdWx0LW9uLWJvb3RzdHJhcC5jCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICAqDQozOiAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgRGVmYXVsdCBfb25fYm9vdHN0cmFwIEltcGxlbWVudGF0aW9uDQo0OiAgICAgICAgICAgICAgICAgICAgKg0KNTogICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KNjogICAgICAgICAgICAgICAgICAgICogRmlsZW5hbWU6ICAgICAgICBkZWZhdWx0LW9uLWJvb3RzdHJhcC5jDQo3OiAgICAgICAgICAgICAgICAgICAgKg0KODogICAgICAgICAgICAgICAgICAgICogUHJvY2Vzc29yOiAgICAgICBQSUMzMg0KOTogICAgICAgICAgICAgICAgICAgICoNCjEwOiAgICAgICAgICAgICAgICAgICAqIENvbXBpbGVyOiAgICAgICAgTVBMQUIgQyBDb21waWxlciBmb3IgUElDMzIgTUNVcw0KMTE6ICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICBNUExBQiBJREUNCjEyOiAgICAgICAgICAgICAgICAgICAqIENvbXBhbnk6ICAgICAgICAgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLg0KMTM6ICAgICAgICAgICAgICAgICAgICoNCjE0OiAgICAgICAgICAgICAgICAgICAqIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50DQoxNTogICAgICAgICAgICAgICAgICAgKg0KMTY6ICAgICAgICAgICAgICAgICAgICogVGhlIHNvZnR3YXJlIHN1cHBsaWVkIGhlcmV3aXRoIGJ5IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluY29ycG9yYXRlZA0KMTc6ICAgICAgICAgICAgICAgICAgICogKHRoZSAnQ29tcGFueScpIGZvciBpdHMgUElDMzIvUElDMjRGIE1pY3JvY29udHJvbGxlciBpcyBpbnRlbmRlZA0KMTg6ICAgICAgICAgICAgICAgICAgICogYW5kIHN1cHBsaWVkIHRvIHlvdSwgdGhlIENvbXBhbnkncyBjdXN0b21lciwgZm9yIHVzZSBzb2xlbHkgYW5kDQoxOTogICAgICAgICAgICAgICAgICAgKiBleGNsdXNpdmVseSBvbiBNaWNyb2NoaXAgUElDMzIvUElDMjRGIE1pY3JvY29udHJvbGxlciBwcm9kdWN0cy4NCjIwOiAgICAgICAgICAgICAgICAgICAqIFRoZSBzb2Z0d2FyZSBpcyBvd25lZCBieSB0aGUgQ29tcGFueSBhbmQvb3IgaXRzIHN1cHBsaWVyLCBhbmQgaXMNCjIxOiAgICAgICAgICAgICAgICAgICAqIHByb3RlY3RlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLiBBbGwgcmlnaHRzIGFyZSByZXNlcnZlZC4NCjIyOiAgICAgICAgICAgICAgICAgICAqIEFueSB1c2UgaW4gdmlvbGF0aW9uIG9mIHRoZSBmb3JlZ29pbmcgcmVzdHJpY3Rpb25zIG1heSBzdWJqZWN0IHRoZQ0KMjM6ICAgICAgICAgICAgICAgICAgICogdXNlciB0byBjcmltaW5hbCBzYW5jdGlvbnMgdW5kZXIgYXBwbGljYWJsZSBsYXdzLCBhcyB3ZWxsIGFzIHRvDQoyNDogICAgICAgICAgICAgICAgICAgKiBjaXZpbCBsaWFiaWxpdHkgZm9yIHRoZSBicmVhY2ggb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMNCjI1OiAgICAgICAgICAgICAgICAgICAqIGxpY2Vuc2UuDQoyNjogICAgICAgICAgICAgICAgICAgKg0KMjc6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBJTiBBTiAiQVMgSVMiIENPTkRJVElPTi4gTk8gV0FSUkFOVElFUywNCjI4OiAgICAgICAgICAgICAgICAgICAqIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEDQoyOTogICAgICAgICAgICAgICAgICAgKiBUTywgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQ0KMzA6ICAgICAgICAgICAgICAgICAgICogUEFSVElDVUxBUiBQVVJQT1NFIEFQUExZIFRPIFRISVMgU09GVFdBUkUuIFRIRSBDT01QQU5ZIFNIQUxMIE5PVCwNCjMxOiAgICAgICAgICAgICAgICAgICAqIElOIEFOWSBDSVJDVU1TVEFOQ0VTLCBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIElOQ0lERU5UQUwgT1INCjMyOiAgICAgICAgICAgICAgICAgICAqIENPTlNFUVVFTlRJQUwgREFNQUdFUywgRk9SIEFOWSBSRUFTT04gV0hBVFNPRVZFUi4NCjMzOiAgICAgICAgICAgICAgICAgICAqDQozNDogICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQozNTogICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGEgZGVmYXVsdCBkZWZpbml0aW9uIG9mIGFuIF9vbl9ib290c3RyYXAoKSBmdW5jdGlvbi4NCjM2OiAgICAgICAgICAgICAgICAgICAqIEl0IGRvZXMgbm90aGluZyBhbmQganVzdCBnb2VzIHJldHVybnMuIElmIHRoZSB1c2VyDQozNzogICAgICAgICAgICAgICAgICAgKiBhcHBsaWNhdGlvbiBzdXBwbGllcyBhIGhhbmRsZXIgZnVuY3Rpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUNCjM4OiAgICAgICAgICAgICAgICAgICAqIHJlZmVyZW5jZWQgYW5kIHRodXMgbm90IHB1bGxlZCBpbiBmcm9tIHRoZSBsaWJyYXJ5Lg0KMzk6ICAgICAgICAgICAgICAgICAgICovDQo0MDogICAgICAgICAgICAgICAgICB2b2lkIA0KNDE6ICAgICAgICAgICAgICAgICAgX29uX2Jvb3RzdHJhcCAodm9pZCkNCjQyOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA5RUU0ICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDlFRTYgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5RUU4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjQzOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5RUVBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RUVDICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUVFRSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlFRjAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUVGMiAgICAgIDBDMDAgICBOT1AKLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9tZWMxNHh4X3RpbWVycy5jICAtLS0tLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiCpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgDQoyMjogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgbWVjMTR4eF90aW1lcnMuYw0KMjM6ICAgICAgICAgICAgICAgICAgICpNRUMxNHh4IFRpbWVycyANCjI0OiAgICAgICAgICAgICAgICAgICAqLw0KMjU6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IFBlcmlwaGVyYWxzIFRpbWVycw0KMjY6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNzogICAgICAgICAgICAgICAgICAgKi8NCjI4OiAgICAgICAgICAgICAgICAgIA0KMjk6ICAgICAgICAgICAgICAgICAgDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfcGNyLmgiDQozNDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RpbWVycy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgIC8vIHBhaXJzIG9mIGJ5dGVzIChzbGVlcCByZWcsIGJpdCBwb3NpdGlvbikNCjM4OiAgICAgICAgICAgICAgICAgIC8vIHNsZWVwIHJlZyA9IDAgZm9yIEVDX1NMRUVQX0VOIG9yIDEgZm9yIEVDX1NMRUVQX0VOMg0KMzk6ICAgICAgICAgICAgICAgICAgLy8NCjQwOiAgICAgICAgICAgICAgICAgIHN0cnVjdCBidG1yX3NsZWVwX2luZm9fcyB7DQo0MTogICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzbHBfcmVnOw0KNDI6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYml0X3BvczsNCjQzOiAgICAgICAgICAgICAgICAgIH07DQo0NDogICAgICAgICAgICAgICAgICANCjQ1OiAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRtcl9zbGVlcF9pbmZvX3MgYnRtcl9zbHBfaW5mb1tCVE1SX01BWF9JTlNUQU5DRV0gPSB7DQo0NjogICAgICAgICAgICAgICAgICAgICAgeyAwLCBQQ1JfRUNfVElNRVIwX1NMUF9CSVRQT1MgfSwNCjQ3OiAgICAgICAgICAgICAgICAgICAgICB7IDAsIFBDUl9FQ19USU1FUjFfU0xQX0JJVFBPUyB9LA0KNDg6ICAgICAgICAgICAgICAgICAgICAgIHsgMSwgUENSX0VDMl9USU1FUjJfU0xQX0JJVFBPUyB9LA0KNDk6ICAgICAgICAgICAgICAgICAgICAgIHsgMSwgUENSX0VDMl9USU1FUjNfU0xQX0JJVFBPUyB9DQo1MDogICAgICAgICAgICAgICAgICAgfTsNCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgDQo1MzogICAgICAgICAgICAgICAgICAjaWZkZWYgTUVDMTRYWF9CVElNRVJfQ0hFQ0tfSUQNCjU0OiAgICAgICAgICAgICAgICAgIA0KNTU6ICAgICAgICAgICAgICAgICAgLyoqDQo1NjogICAgICAgICAgICAgICAgICAgKiB0bXJfdmFsaWQgLSBMb2NhbCBoZWxwZXIgdGhhdCBjaGVja3MgaWYgbG9naWNhbCBUaW1lciBJRCBpcyANCjU3OiAgICAgICAgICAgICAgICAgICAqIHZhbGlkLiANCjU4OiAgICAgICAgICAgICAgICAgICAqIA0KNTk6ICAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KNjA6ICAgICAgICAgICAgICAgICAgICogDQo2MTogICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIDAtYmFzZWQgVGltZXIgSUQNCjYyOiAgICAgICAgICAgICAgICAgICAqIA0KNjM6ICAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IE5vbi16ZXJvKFZBTElEKSwgMChJbnZhbGlkKQ0KNjQ6ICAgICAgICAgICAgICAgICAgICovDQo2NTogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBidG1yX3ZhbGlkKHVpbnQ4X3QgdG1yX2lkKQ0KNjY6ICAgICAgICAgICAgICAgICAgew0KQkZEMDlBNDQgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUE0NiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlBNDggICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDlBNEEgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDlBNEMgIDAwMDgxODVFICAgU0IgVjAsIDgoUzgpCjY3OiAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcl9pZCA8IChCVE1SX0lEX01BWCApICkgew0KQkZEMDlBNTAgIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQpCRkQwOUE1NCAgMDAwNEIwNDIgICBTTFRJVSBWMCwgVjAsIDQKQkZEMDlBNTggIDAwMDM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDlBNjIKNjg6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCkJGRDA5QTVDICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA5QTVFICAgICAgQ0MwMiAgIEIgMHhCRkQwOUE2NApCRkQwOUE2MCAgICAgIDBDMDAgICBOT1AKNjk6ICAgICAgICAgICAgICAgICAgICAgIH0NCjcwOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQpCRkQwOUE2MiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjcxOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5QTY0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5QTY2ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUE2OCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlBNkEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUE2QyAgICAgIDBDMDAgICBOT1AKNzI6ICAgICAgICAgICAgICAgICAgDQo3MzogICAgICAgICAgICAgICAgICAjZWxzZQ0KNzQ6ICAgICAgICAgICAgICAgICAgDQo3NTogICAgICAgICAgICAgICAgICAvKioNCjc2OiAgICAgICAgICAgICAgICAgICAqIEBicmllZiAtIFRoaXMgdmVyc2lvbiBvZiB0bXJfdmFsaWQgc2tpcHMgY2hlY2tpbmcgYWx3YXlzIA0KNzc6ICAgICAgICAgICAgICAgICAgICogICAgICAgIHJldHVybmluZyBUUlVFLiBDb21waWxlciBtYXkgb3B0aW1pemUgaXQgb3V0Lg0KNzg6ICAgICAgICAgICAgICAgICAgICogDQo3OTogICAgICAgICAgICAgICAgICAgKi8NCjgwOiAgICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50OF90IGJ0bXJfdmFsaWQodWludDhfdCB0bXJfaWQpIA0KODE6ICAgICAgICAgICAgICAgICAgeyANCjgyOiAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgdG1yX2lkOw0KODM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyANCjg0OiAgICAgICAgICAgICAgICAgIH0NCjg1OiAgICAgICAgICAgICAgICAgIA0KODY6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4NzogICAgICAgICAgICAgICAgICANCjg4OiAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJ0bXJfZ2V0X2h3X2FkZHIodWludDhfdCBidG1yX2lkKQ0KODk6ICAgICAgICAgICAgICAgICAgew0KQkZEMDlBNzAgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUE3MiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlBNzQgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDlBNzYgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDlBNzggIDAwMDgxODVFICAgU0IgVjAsIDgoUzgpCjkwOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVpbnQzMl90KShCVE1SMF9CQVNFKSArIA0KQkZEMDlBODIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDlBODYgIDBDMDA1MDQyICAgT1JJIFYwLCBWMCwgMzA3MgpCRkQwOUE4OCAgICAgIDBDMDAgICBOT1AKQkZEMDlBOEEgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCjkxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoYnRtcl9pZCkgPDwgKEJUTVJfSU5TVEFOQ0VfQklUUE9TKSk7DQpCRkQwOUE3QyAgMDAwODE0NUUgICBMQlUgVjAsIDgoUzgpCkJGRDA5QTgwICAgICAgMjVBQSAgIFNMTCBWMSwgVjAsIDUKOTI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDlBOEMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlBOEUgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5QTkwICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUE5MiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5QTk0ICAgICAgMEMwMCAgIE5PUAo5MzogICAgICAgICAgICAgICAgICANCjk0OiAgICAgICAgICAgICAgICAgIC8qKg0KOTU6ICAgICAgICAgICAgICAgICAgICogYnRtcl9zbGVlcF9lbiAtIEVuYWJsZS9EaXNhYmxlIGNsb2NrIGdhdGluZyBvbiBpZGxlIG9mIGEgDQo5NjogICAgICAgICAgICAgICAgICAgKiB0aW1lciANCjk3OiAgICAgICAgICAgICAgICAgICAqIA0KOTg6ICAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5ICg4LzE2LzIwMTMpDQo5OTogICAgICAgICAgICAgICAgICAgKiANCjEwMDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB0bXJfaWQgemVybyBiYXNlZCB0aW1lciBJRC4NCjEwMTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBwd3Jfb24gYm9vbGVhbiB0cnVlPU9OLCBmYWxzZT1PRkYNCjEwMjogICAgICAgICAgICAgICAgICAqLw0KMTAzOiAgICAgICAgICAgICAgICAgdm9pZCBidG1yX3NsZWVwX2VuKHVpbnQ4X3QgdG1yX2lkLCB1aW50OF90IHNsZWVwX2VuKQ0KMTA0OiAgICAgICAgICAgICAgICAgew0KQkZEMDVEQzAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDVEQzIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNURDNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA1REM2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA1REM4ICAgICAgMEM2NCAgIE1PVkUgVjEsIEEwCkJGRDA1RENBICAgICAgMEM0NSAgIE1PVkUgVjAsIEExCkJGRDA1RENDICAwMDIwMTg3RSAgIFNCIFYxLCAzMihTOCkKQkZEMDVERDAgIDAwMjQxODVFICAgU0IgVjAsIDM2KFM4KQoxMDU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2xlZXBfbWFzazsNCjEwNjogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2b2xhdGlsZSAqIHA7DQoxMDc6ICAgICAgICAgICAgICAgICAgICAgDQoxMDg6ICAgICAgICAgICAgICAgICAgICAgc2xlZXBfbWFzayA9IDB1bDsNCkJGRDA1REQ0ICAwMDE0RjgxRSAgIFNXIFpFUk8sIDIwKFM4KQoxMDk6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBidG1yX3ZhbGlkKHRtcl9pZCkgKSB7DQpCRkQwNUREOCAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwNUREQyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNURERSAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDVERTAgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA1REUyICAgICAgMEMwMCAgIE5PUApCRkQwNURFNCAgMDA0MDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNUU2OAoxMTA6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidG1yX3NscF9pbmZvW3Rtcl9pZF0uc2xwX3JlZykgew0KQkZEMDVERTggIDAwMjAxNDdFICAgTEJVIFYxLCAzMihTOCkKQkZEMDVERUMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDVERUUgIDI1QjJCRkQxICAgTERDMSBGMzAsIDk2NTAoUzEpCkJGRDA1REYwICAgICAgMjVCMiAgIFNMTCBWMSwgVjEsIDEKQkZEMDVERjIgIDlGMjQzMDQyICAgQURESVUgVjAsIFYwLCAtMjQ3OTYKQkZEMDVERjQgIDA1MjY5RjI0ICAgTFdDMSBGMjUsIDEzMTgoQTApCkJGRDA1REY2ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNURGOCAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApCkJGRDA1REZBICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1RTBFCjExMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAodWludDMyX3Qgdm9sYXRpbGUgKikmKFBDUi0+RUNfU0xFRVBfRU4yKTsNCkJGRDA1REZFICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDA1RTAyICAwMTI0NTA0MiAgIE9SSSBWMCwgVjAsIDI5MgpCRkQwNUUwNiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA1RTA4ICBDQzA3MDAxMCAgIEJSRUFLCkJGRDA1RTBBICAgICAgQ0MwNyAgIEIgMHhCRkQwNUUxQQpCRkQwNUUwQyAgICAgIDBDMDAgICBOT1AKMTEyOiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMTEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICh1aW50MzJfdCB2b2xhdGlsZSAqKSYoUENSLT5FQ19TTEVFUF9FTik7DQpCRkQwNUUwRSAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOApCRkQwNUUxMiAgMDEwODUwNDIgICBPUkkgVjAsIFYwLCAyNjQKQkZEMDVFMTYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjExNTogICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBfbWFzayA9ICgxdWwgPDwgYnRtcl9zbHBfaW5mb1t0bXJfaWRdLmJpdF9wb3MpOw0KQkZEMDVFMUEgIDAwMjAxNDdFICAgTEJVIFYxLCAzMihTOCkKQkZEMDVFMUUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDVFMjAgIDI1QjJCRkQxICAgTERDMSBGMzAsIDk2NTAoUzEpCkJGRDA1RTIyICAgICAgMjVCMiAgIFNMTCBWMSwgVjEsIDEKQkZEMDVFMjQgIDlGMjQzMDQyICAgQURESVUgVjAsIFYwLCAtMjQ3OTYKQkZEMDVFMjYgIDA1MjY5RjI0ICAgTFdDMSBGMjUsIDEzMTgoQTApCkJGRDA1RTI4ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNUUyQSAgICAgIDA5MjEgICBMQlUgVjAsIDEoVjApCkJGRDA1RTJDICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA1RTJFICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQpCRkQwNUUzMCAgRjg1RTEwMTAgICBBRERJIFpFUk8sIFMwLCAtMTk1NApCRkQwNUUzMiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjExNjogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsZWVwX2VuKSB7DQpCRkQwNUUzNiAgMDAyNDE0NUUgICBMQlUgVjAsIDM2KFM4KQpCRkQwNUUzQSAgMDAwQjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNUU1NAoxMTc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCB8PSAoc2xlZXBfbWFzayk7DQpCRkQwNUUzRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1RTQyICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwNUU0NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA1RTQ4ICAgICAgNDREQSAgIE9SMTYgVjEsIFYwCkJGRDA1RTRBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDVFNEUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCkJGRDA1RTUwICAgICAgQ0MwQiAgIEIgMHhCRkQwNUU2OApCRkQwNUU1MiAgICAgIDBDMDAgICBOT1AKMTE4OiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMTE5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnAgJj0gfihzbGVlcF9tYXNrKTsNCkJGRDA1RTU0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDVFNTggICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDA1RTVBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDVFNUUgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwCkJGRDA1RTYwICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMApCRkQwNUU2MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1RTY2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoxMjA6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjEyMTogICAgICAgICAgICAgICAgICAgICB9DQoxMjI6ICAgICAgICAgICAgICAgICB9DQpCRkQwNUU2OCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNUU2QSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA1RTZDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDVFNkUgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNUU3MCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA1RTcyICAgICAgMEMwMCAgIE5PUAoxMjM6ICAgICAgICAgICAgICAgICANCjEyNDogICAgICAgICAgICAgICAgIC8qKg0KMTI1OiAgICAgICAgICAgICAgICAgICogYnRtcl9yZXNldCAtIFBlZm9ybSBzb2Z0IHJlc2V0IG9mIHNwZWNpZmllZCB0aW1lci4NCjEyNjogICAgICAgICAgICAgICAgICAqIA0KMTI3OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMTI4OiAgICAgICAgICAgICAgICAgICogDQoxMjk6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIDAtYmFzZWQgVGltZXIgSUQgDQoxMzA6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBTb2Z0IHJlc2V0IHNldCBhbGwgcmVnaXN0ZXJzIHRvIFBPUiB2YWx1ZXMuDQoxMzE6ICAgICAgICAgICAgICAgICAgKiBTcGlucyAyNTYgdGltZXMgd2FpdGluZyBvbiBoYXJkd2FyZSB0byBjbGVhciByZXNldCBiaXQuIA0KMTMyOiAgICAgICAgICAgICAgICAgICovDQoxMzM6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfcmVzZXQodWludDhfdCB0bXJfaWQpDQoxMzQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwNzk4OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNzk4QSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA3OThDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDc5OEUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDc5OTAgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDc5OTIgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQoxMzU6ICAgICAgICAgICAgICAgICAgICBCVE1SX1R5cGVEZWYgKiBwOw0KMTM2OiAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2FpdF9jbnQ7DQoxMzc6ICAgICAgICAgICAgICAgICANCjEzODogICAgICAgICAgICAgICAgICAgIGlmIChidG1yX3ZhbGlkKHRtcl9pZCkpIHsNCkJGRDA3OTk2ICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA3OTlBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA3OTlDICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZApCRkQwNzk5RSAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDEKQkZEMDc5QTAgICAgICAwQzAwICAgTk9QCkJGRDA3OUEyICAwMDI1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3OUYwCjEzOTogICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDc5QTYgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDc5QUEgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDc5QUMgIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyCkJGRDA3OUFFICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQKQkZEMDc5QjAgICAgICAwQzAwICAgTk9QCkJGRDA3OUIyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTQwOiAgICAgICAgICAgICAgICAgDQoxNDE6ICAgICAgICAgICAgICAgICAgICAgICBwLT5DT05UUk9MID0gKEJUTVJfQ05UTF9TT0ZUX1JFU0VUKTsNCkJGRDA3OUI2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDc5QjggIEVEOTAwMDE0ICAgU1VCIFNQLCBTNCwgWkVSTwpCRkQwNzlCQSAgICAgIEVEOTAgICBMSSBWMSwgMTYKQkZEMDc5QkMgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQoxNDI6ICAgICAgICAgICAgICAgICANCjE0MzogICAgICAgICAgICAgICAgICAgICAgIHdhaXRfY250ID0gMjU2dWw7DQpCRkQwNzlCRSAgMDEwMDMwNDAgICBBRERJVSBWMCwgWkVSTywgMjU2CkJGRDA3OUMyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTQ0OiAgICAgICAgICAgICAgICAgICAgICAgZG8gew0KMTQ1OiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggMHVsID09IChwLT5DT05UUk9MICYgQlRNUl9DTlRMX1NPRlRfUkVTRVQpICkgew0KQkZEMDc5QzYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNzlDQSAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApCkJGRDA3OUNDICAgICAgMkQyOCAgIEFOREkgVjAsIFYwLCAweDEwCkJGRDA3OUNFICAwMDBFNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3OUVFCjE0NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQpCRkQwNzlFRSAgICAgIDBDMDAgICBOT1AKMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjE0ODogICAgICAgICAgICAgICAgICAgICAgIH0gDQoxNDk6ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHdhaXRfY250LS0gKTsgDQpCRkQwNzlEMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA3OUQ0ICAwMDQwMDAxMCAgIFNSTCBaRVJPLCBTMCwgMApCRkQwNzlENiAgMTM5MDAwNDAgICBTTFRVIFYwLCBaRVJPLCBWMApCRkQwNzlEOCAgMkQyRDEzOTAgICBBRERJIEdQLCBTMCwgMTE1NjUKQkZEMDc5REEgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYKQkZEMDc5REMgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwNzlFMCAgICAgIDZEQkUgICBBRERJVSBWMSwgVjEsIC0xCkJGRDA3OUUyICAwMDEwRjg3RSAgIFNXIFYxLCAxNihTOCkKQkZEMDc5RTYgIEZGRUU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDc5QzYKQkZEMDc5RTggIENDMDJGRkVFICAgTFcgUkEsIC0xMzMxMChUNikKQkZEMDc5RUEgICAgICBDQzAyICAgQiAweEJGRDA3OUYwCkJGRDA3OUVDICAgICAgMEMwMCAgIE5PUAoxNTA6ICAgICAgICAgICAgICAgICAgICB9ICAgICAgDQoxNTE6ICAgICAgICAgICAgICAgICB9DQpCRkQwNzlGMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNzlGMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA3OUY0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDc5RjYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNzlGOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA3OUZBICAgICAgMEMwMCAgIE5PUAoxNTI6ICAgICAgICAgICAgICAgICANCjE1MzogICAgICAgICAgICAgICAgIC8qKg0KMTU0OiAgICAgICAgICAgICAgICAgICogYnRtcl9pbml0IC0gSW5pdGlhbGl6ZSBzcGVjaWZpZWQgdGltZXINCjE1NTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB6ZXJvIGJhc2VkIHRpbWVyIElEDQoxNTY6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2NudGwgYlsxNTowXSA9IHRpbWVyIGNvbmZpZ3VyYXRpb24gZmxhZ3MuDQoxNTc6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gaW5pdGlhbF9jb3VudCANCjE1ODogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBwcmVsb2FkX2NvdW50IA0KMTU5OiAgICAgICAgICAgICAgICAgICogQG5vdGUgcGVyZm9ybXMgYSBzb2Z0IHJlc2V0IG9mIHRoZSB0aW1lciBiZWZvcmUgDQoxNjA6ICAgICAgICAgICAgICAgICAgKiAgICAgICBjb25maWd1cmF0aW9uLg0KMTYxOiAgICAgICAgICAgICAgICAgICovDQoxNjI6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfaW5pdCh1aW50OF90IHRtcl9pZCwgDQoxNjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB0bXJfY250bCwNCjE2NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHByZXNjYWxlciwNCjE2NTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluaXRpYWxfY291bnQsDQoxNjY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmVsb2FkX2NvdW50KQ0KMTY3OiAgICAgICAgICAgICAgICAgew0KQkZEMDU2RkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDU2RkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwNTcwMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA1NzAyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA1NzA0ICAgICAgMEM2NSAgIE1PVkUgVjEsIEExCkJGRDA1NzA2ICAgICAgMEM0NiAgIE1PVkUgVjAsIEEyCkJGRDA1NzA4ICAwMDJDRjhGRSAgIFNXIEEzLCA0NChTOCkKQkZEMDU3MEMgIDAwMjAxODlFICAgU0IgQTAsIDMyKFM4KQpCRkQwNTcxMCAgMDAyNDM4N0UgICBTSCBWMSwgMzYoUzgpCkJGRDA1NzE0ICAwMDI4Mzg1RSAgIFNIIFYwLCA0MChTOCkKMTY4OiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHBUTVI7DQoxNjk6ICAgICAgICAgICAgICAgICANCjE3MDogICAgICAgICAgICAgICAgICAgICBwVE1SID0gTlVMTDsNCkJGRDA1NzE4ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQoxNzE6ICAgICAgICAgICAgICAgICANCjE3MjogICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl92YWxpZCh0bXJfaWQpKSB7DQpCRkQwNTcxQyAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwNTcyMCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNTcyMiAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDU3MjQgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA1NzI2ICAgICAgMEMwMCAgIE5PUApCRkQwNTcyOCAgMDA0ODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNTdCQwoxNzM6ICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bXJfcmVzZXQodG1yX2lkKTsNCkJGRDA1NzJDICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA1NzMwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA1NzMyICAzQ0M0NzdFOCAgIEpBTFMgYnRtcl9yZXNldApCRkQwNTczNCAgMEMwMDNDQzQgICBMSCBBMiwgMzA3MihBMCkKQkZEMDU3MzYgICAgICAwQzAwICAgTk9QCjE3NDogICAgICAgICAgICAgICAgICAgICAgICAgDQoxNzU6ICAgICAgICAgICAgICAgICAgICAgICAgIHBUTVIgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDU3MzggIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDU3M0MgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDU3M0UgIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyCkJGRDA1NzQwICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQKQkZEMDU3NDIgICAgICAwQzAwICAgTk9QCkJGRDA1NzQ0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMTc2OiAgICAgICAgICAgICAgICAgICAgICAgICANCjE3NzogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5nYXRlIHRpbWVyIGNsb2NrcyBhbmQgcHJvZ3JhbSBwcmVzY2FsZQ0KMTc4OiAgICAgICAgICAgICAgICAgICAgICAgICBwVE1SLT5DT05UUk9MID0gKCh1aW50MzJfdClwcmVzY2FsZXIgPDwgMTYpICsgKEJUTVJfQ05UTF9FTkFCTEUpOw0KQkZEMDU3NDggIDAwMjgzNDVFICAgTEhVIFYwLCA0MChTOCkKQkZEMDU3NEMgIDgwMDAwMDQyICAgU0xMIFYwLCBWMCwgMTYKQkZEMDU3NTAgICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxCkJGRDA1NzUyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDU3NTYgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQoxNzk6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KMTgwOiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9ncmFtIFByZWxvYWQgJiBpbml0aWFsIGNvdW50ZXIgdmFsdWUNCjE4MTogICAgICAgICAgICAgICAgICAgICAgICAgcFRNUi0+UFJFTE9BRCA9IHByZWxvYWRfY291bnQ7DQpCRkQwNTc1OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1NzVDICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkKQkZEMDU3NjAgICAgICBFOUExICAgU1cgVjEsIDQoVjApCjE4MjogICAgICAgICAgICAgICAgICAgICAgICAgcFRNUi0+Q09VTlQgPSBpbml0aWFsX2NvdW50Ow0KQkZEMDU3NjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTc2NiAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpCkJGRDA1NzZBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoxODM6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KMTg0OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9ncmFtIGNvbnRyb2wgcmVnaXN0ZXIsIGludGVycnVwdCBlbmFibGUsIGFuZCBjbGVhciBzdGF0dXMNCjE4NTogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcl9jbnRsICYgQlRNUl9DT1VOVF9VUCkgew0KQkZEMDU3NkMgIDAwMjQzNDVFICAgTEhVIFYwLCAzNihTOCkKQkZEMDU3NzAgICAgICAyRDI0ICAgQU5ESSBWMCwgVjAsIDB4NApCRkQwNTc3MiAgMDAwODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNTc4NgoxODY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVE1SLT5DT05UUk9MIHw9IEJUTVJfQ05UTF9DT1VOVF9VUDsgIA0KQkZEMDU3NzYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTc3QSAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApCkJGRDA1NzdDICAwMDA0NTA2MiAgIE9SSSBWMSwgVjAsIDQKQkZEMDU3ODAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTc4NCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjE4NzogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTg4OiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1yX2NudGwgJiBCVE1SX0FVVE9fUkVTVEFSVCkgew0KQkZEMDU3ODYgIDAwMjQzNDVFICAgTEhVIFYwLCAzNihTOCkKQkZEMDU3OEEgICAgICAyRDI2ICAgQU5ESSBWMCwgVjAsIDB4OApCRkQwNTc4QyAgMDAwODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNTdBMAoxODk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVE1SLT5DT05UUk9MIHw9IEJUTVJfQ05UTF9BVVRPX1JFU1RBUlQ7IA0KQkZEMDU3OTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTc5NCAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApCkJGRDA1Nzk2ICAwMDA4NTA2MiAgIE9SSSBWMSwgVjAsIDgKQkZEMDU3OUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTc5RSAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjE5MDogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTkxOiAgICAgICAgICAgICAgICAgICAgICAgICANCjE5MjogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcl9jbnRsICYgQlRNUl9JTlRfRU4pIHsNCkJGRDA1N0EwICAwMDI0MzQ1RSAgIExIVSBWMCwgMzYoUzgpCkJGRDA1N0E0ICAgICAgMkQyMSAgIEFOREkgVjAsIFYwLCAweDEKQkZEMDU3QTYgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYKQkZEMDU3QTggIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDU3QkMKMTkzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRNUi0+SU5URU4gPSAweDAxdTsgICAgLy8gZW5hYmxlIGZpcnN0DQpCRkQwNTdBQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1N0IwICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA1N0IyICAgICAgODlBQyAgIFNCIFYxLCAxMihWMCkKMTk0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRNUi0+U1RBVFVTID0gMHgwMXU7ICAgLy8gY2xlYXIgc3RhdHVzDQpCRkQwNTdCNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1N0I4ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA1N0JBICAgICAgODlBOCAgIFNCIFYxLCA4KFYwKQoxOTU6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjE5NjogICAgICAgICAgICAgICAgICAgICB9DQoxOTc6ICAgICAgICAgICAgICAgICB9DQpCRkQwNTdCQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNTdCRSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA1N0MwICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDU3QzIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNTdDNCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA1N0M2ICAgICAgMEMwMCAgIE5PUAoxOTg6ICAgICAgICAgICAgICAgICANCjE5OTogICAgICAgICAgICAgICAgIC8qKg0KMjAwOiAgICAgICAgICAgICAgICAgICogYnRtcl9pZW4gLSBFbmFibGUgc3BlY2lmaWVkIHRpbWVyJ3MgaW50ZXJydXB0Lg0KMjAxOiAgICAgICAgICAgICAgICAgICogDQoyMDI6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoyMDM6ICAgICAgICAgICAgICAgICAgKiANCjIwNDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB0bXJfaWQgemVybyBiYXNlZCB0aW1lciBJRC4NCjIwNTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBpZW4gTm9uLXplcm8gZW5hYmxlIGludGVycnVwdCBpbiB0aW1lciBibG9jaywgMCANCjIwNjogICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgZGlzYWJsZS4NCjIwNzogICAgICAgICAgICAgICAgICAqIEBub3RlIFdyaXRlIDAgb3IgMSB0byB0aW1lcidzIElOVEVOIHJlZ2lzdGVyLg0KMjA4OiAgICAgICAgICAgICAgICAgICovDQoyMDk6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfaWVuKHVpbnQ4X3QgdG1yX2lkLCB1aW50OF90IGllbikNCjIxMDogICAgICAgICAgICAgICAgIHsNCkJGRDA4MzMwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4MzMyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDgzMzQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODMzNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODMzOCAgICAgIDBDNjQgICBNT1ZFIFYxLCBBMApCRkQwODMzQSAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQpCRkQwODMzQyAgMDAyMDE4N0UgICBTQiBWMSwgMzIoUzgpCkJGRDA4MzQwICAwMDI0MTg1RSAgIFNCIFYwLCAzNihTOCkKMjExOiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQoyMTI6ICAgICAgICAgICAgICAgICANCjIxMzogICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl92YWxpZCh0bXJfaWQpKSB7DQpCRkQwODM0NCAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwODM0OCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwODM0QSAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDgzNEMgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA4MzRFICAgICAgMEMwMCAgIE5PUApCRkQwODM1MCAgMDAxNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODM3RQoyMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDgzNTQgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDgzNTggICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDgzNUEgIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyCkJGRDA4MzVDICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQKQkZEMDgzNUUgICAgICAwQzAwICAgTk9QCkJGRDA4MzYwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjE1OiAgICAgICAgICAgICAgICAgDQoyMTY6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZW4pIHsNCkJGRDA4MzY0ICAwMDI0MTQ1RSAgIExCVSBWMCwgMzYoUzgpCkJGRDA4MzY4ICAwMDA2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4Mzc4CjIxNzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5JTlRFTiA9IChCVE1SX0lOVEVOKTsgDQpCRkQwODM2QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4MzcwICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA4MzcyICAgICAgODlBQyAgIFNCIFYxLCAxMihWMCkKQkZEMDgzNzQgICAgICBDQzA0ICAgQiAweEJGRDA4MzdFCkJGRDA4Mzc2ICAgICAgMEMwMCAgIE5PUAoyMTg6ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoyMTk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+SU5URU4gPSAoQlRNUl9JTlRESVMpOyANCkJGRDA4Mzc4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDgzN0EgIDg4MkMwMDEwICAgRVhUIFpFUk8sIFMwLCAwLCAxOApCRkQwODM3QyAgICAgIDg4MkMgICBTQiBTMCwgMTIoVjApCjIyMDogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMjIxOiAgICAgICAgICAgICAgICAgICAgIH0NCjIyMjogICAgICAgICAgICAgICAgIH0NCkJGRDA4MzdFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4MzgwICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDgzODIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwODM4NCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4Mzg2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDgzODggICAgICAwQzAwICAgTk9QCjIyMzogICAgICAgICAgICAgICAgIA0KMjI0OiAgICAgICAgICAgICAgICAgLyoqDQoyMjU6ICAgICAgICAgICAgICAgICAgKiB0bXJfZ2V0X2Nscl9pc3RzIC0gUmVhZCBUaW1lciBpbnRlcnJ1cHQgc3RhdHVzIGFuZCBjbGVhciBpZg0KMjI2OiAgICAgICAgICAgICAgICAgICogc2V0LiANCjIyNzogICAgICAgICAgICAgICAgICAqIA0KMjI4OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjI5OiAgICAgICAgICAgICAgICAgICogDQoyMzA6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQuDQoyMzE6ICAgICAgICAgICAgICAgICAgKiANCjIzMjogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCB0cnVlIChUaW1lciBpbnRlcnJ1cHQgc3RhdHVzIHNldCkgZWxzZSBmYWxzZS4gDQoyMzM6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBJZiB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzIGlzIHNldCB0aGVuIGNsZWFyIGl0IGJlZm9yZSANCjIzNDogICAgICAgICAgICAgICAgICAqICAgICAgIHJldHVybmluZy4NCjIzNTogICAgICAgICAgICAgICAgICAqLw0KMjM2OiAgICAgICAgICAgICAgICAgdWludDhfdCBidG1yX2dldF9jbHJfaXN0cyh1aW50OF90IHRtcl9pZCkNCjIzNzogICAgICAgICAgICAgICAgIHsNCkJGRDA4MzhDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4MzhFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDgzOTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODM5MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODM5NCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMApCRkQwODM5NiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpCjIzODogICAgICAgICAgICAgICAgICAgICBCVE1SX1R5cGVEZWYgKiBwOw0KMjM5OiAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgcmM7DQoyNDA6ICAgICAgICAgICAgICAgICANCjI0MTogICAgICAgICAgICAgICAgICAgICByYyA9IChNRUMxNFhYX0ZBTFNFKTsNCkJGRDA4MzlBICAwMDEwMTgxRSAgIFNCIFpFUk8sIDE2KFM4KQoyNDI6ICAgICAgICAgICAgICAgICAgICAgaWYgKGJ0bXJfdmFsaWQodG1yX2lkKSkgew0KQkZEMDgzOUUgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDgzQTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDgzQTQgIDREMjI3N0U4ICAgSkFMUyBidG1yX3ZhbGlkCkJGRDA4M0E2ICAgICAgNEQyMiAgIEFERElVIFQxLCBUMSwgMQpCRkQwODNBOCAgICAgIDBDMDAgICBOT1AKQkZEMDgzQUEgIDAwMTU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDgzRDgKMjQzOiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKEJUTVJfVHlwZURlZiAqKWJ0bXJfZ2V0X2h3X2FkZHIodG1yX2lkKTsNCkJGRDA4M0FFICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA4M0IyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4M0I0ICA0RDM4NzdFOCAgIEpBTFMgYnRtcl9nZXRfaHdfYWRkcgpCRkQwODNCNiAgICAgIDREMzggICBBRERJVSBUMSwgVDEsIC00CkJGRDA4M0I4ICAgICAgMEMwMCAgIE5PUApCRkQwODNCQSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjI0NDogICAgICAgICAgICAgICAgIA0KMjQ1OiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHAtPlNUQVRVUyApIHsNCkJGRDA4M0JFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDgzQzIgICAgICAwOTI4ICAgTEJVIFYwLCA4KFYwKQpCRkQwODNDNCAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwODNDNiAgMDAwNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODNEOAoyNDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5TVEFUVVMgPSAoQlRNUl9TVEFUVVNfQUNUSVZFKTsNCkJGRDA4M0NBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDgzQ0UgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDgzRDAgICAgICA4OUE4ICAgU0IgVjEsIDgoVjApCjI0NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gdHJ1ZTsNCkJGRDA4M0QyICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA4M0Q0ICAwMDEwMTg1RSAgIFNCIFYwLCAxNihTOCkKMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgICB9DQoyNDk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjUwOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsNCkJGRDA4M0Q4ICAwMDEwMTQ1RSAgIExCVSBWMCwgMTYoUzgpCjI1MTogICAgICAgICAgICAgICAgIH0NCkJGRDA4M0RDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4M0RFICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDgzRTAgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwODNFMiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4M0U0ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDgzRTYgICAgICAwQzAwICAgTk9QCjI1MjogICAgICAgICAgICAgICAgIA0KMjUzOiAgICAgICAgICAgICAgICAgLyoqDQoyNTQ6ICAgICAgICAgICAgICAgICAgKiBidG1yX3JlbG9hZCAtIEZvcmNlIHRpbWVyIHRvIHJlbG9hZCBjb3VudGVyIGZyb20gcHJlbG9hZCANCjI1NTogICAgICAgICAgICAgICAgICAqIHJlZ2lzdGVyLiANCjI1NjogICAgICAgICAgICAgICAgICAqIA0KMjU3OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELiANCjI1ODogICAgICAgICAgICAgICAgICAqIEBub3RlIEhhcmR3YXJlIHdpbGwgb25seSByZWxvYWQgY291bnRlciBpZiB0aW1lciBpcyBydW5uaW5nLiANCjI1OTogICAgICAgICAgICAgICAgICAqLw0KMjYwOiAgICAgICAgICAgICAgICAgdm9pZCBidG1yX3JlbG9hZCh1aW50OF90IHRtcl9pZCkNCjI2MTogICAgICAgICAgICAgICAgIHsNCkJGRDA4NkIwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4NkIyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDg2QjQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODZCNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODZCOCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMApCRkQwODZCQSAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpCjI2MjogICAgICAgICAgICAgICAgICAgICBCVE1SX1R5cGVEZWYgKiBwOw0KMjYzOiAgICAgICAgICAgICAgICAgDQoyNjQ6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBidG1yX3ZhbGlkKHRtcl9pZCkgKSB7DQpCRkQwODZCRSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwODZDMiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwODZDNCAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDg2QzYgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA4NkM4ICAgICAgMEMwMCAgIE5PUApCRkQwODZDQSAgMDAxNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODZGQQoyNjU6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDg2Q0UgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDg2RDIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDg2RDQgIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyCkJGRDA4NkQ2ICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQKQkZEMDg2RDggICAgICAwQzAwICAgTk9QCkJGRDA4NkRBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjY2OiAgICAgICAgICAgICAgICAgDQoyNjc6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLT5DT05UUk9MICYgQlRNUl9DTlRMX1NUQVJUKSB7DQpCRkQwODZERSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4NkUyICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkKQkZEMDg2RTQgICAgICAyRDJBICAgQU5ESSBWMCwgVjAsIDB4MjAKQkZEMDg2RTYgIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg2RkEKMjY4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+Q09OVFJPTCB8PSBCVE1SX0NOVExfUkVMT0FEOw0KQkZEMDg2RUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODZFRSAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApCkJGRDA4NkYwICAwMDQwNTA2MiAgIE9SSSBWMSwgVjAsIDY0CkJGRDA4NkY0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDg2RjggICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQoyNjk6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjI3MDogICAgICAgICAgICAgICAgICAgICB9DQoyNzE6ICAgICAgICAgICAgICAgICB9DQpCRkQwODZGQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODZGQyAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4NkZFICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDg3MDAgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwODcwMiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4NzA0ICAgICAgMEMwMCAgIE5PUAoyNzI6ICAgICAgICAgICAgICAgICANCjI3MzogICAgICAgICAgICAgICAgIC8qKg0KMjc0OiAgICAgICAgICAgICAgICAgICogYnRtcl9zZXRfY291bnQgLSBQcm9ncmFtIHRpbWVyJ3MgY291bnRlciByZWdpc3Rlci4NCjI3NTogICAgICAgICAgICAgICAgICAqIA0KMjc2OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjc3OiAgICAgICAgICAgICAgICAgICogDQoyNzg6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQNCjI3OTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBjb3VudCBuZXcgY291bnRlciB2YWx1ZSANCjI4MDogICAgICAgICAgICAgICAgICAqIEBub3RlIFRpbWVyIGhhcmR3YXJlIG1heSBpbXBsZW1lbnQgYSAxNi1iaXQgb3IgMzItYml0IA0KMjgxOiAgICAgICAgICAgICAgICAgICogICAgICAgaGFyZHdhcmUgY291bnRlci4gSWYgdGhlIHRpbWVyIGlzIDE2LWJpdCBvbmx5IHRoZSBsb3dlcg0KMjgyOiAgICAgICAgICAgICAgICAgICogICAgICAgMTYtYml0cyBvZiB0aGUgY291bnQgcGFyYW10ZXIgYXJlIHVzZWQuDQoyODM6ICAgICAgICAgICAgICAgICAgKi8NCjI4NDogICAgICAgICAgICAgICAgIHZvaWQgYnRtcl9zZXRfY291bnQodWludDhfdCB0bXJfaWQsIHVpbnQzMl90IGNvdW50KQ0KMjg1OiAgICAgICAgICAgICAgICAgew0KQkZEMDkwRkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDkwRkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOTEwMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA5MTAyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5MTA0ICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA5MTA2ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKQkZEMDkxMEEgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQoyODY6ICAgICAgICAgICAgICAgICAgICAgQlRNUl9UeXBlRGVmICogcDsNCjI4NzogICAgICAgICAgICAgICAgIA0KMjg4OiAgICAgICAgICAgICAgICAgICAgIGlmIChidG1yX3ZhbGlkKHRtcl9pZCkpIHsNCkJGRDA5MTBFICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA5MTEyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA5MTE0ICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZApCRkQwOTExNiAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDEKQkZEMDkxMTggICAgICAwQzAwICAgTk9QCkJGRDA5MTFBICAwMDBENDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5MTM4CjI4OTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChCVE1SX1R5cGVEZWYgKilidG1yX2dldF9od19hZGRyKHRtcl9pZCk7DQpCRkQwOTExRSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwOTEyMiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOTEyNCAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHIKQkZEMDkxMjYgICAgICA0RDM4ICAgQURESVUgVDEsIFQxLCAtNApCRkQwOTEyOCAgICAgIDBDMDAgICBOT1AKQkZEMDkxMkEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyOTA6ICAgICAgICAgICAgICAgICANCjI5MTogICAgICAgICAgICAgICAgICAgICAgICAgcC0+Q09VTlQgPSBjb3VudDsNCkJGRDA5MTJFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDkxMzIgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQpCRkQwOTEzNiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjkyOiAgICAgICAgICAgICAgICAgICAgIH0NCjI5MzogICAgICAgICAgICAgICAgIH0NCkJGRDA5MTM4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5MTNBICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDkxM0MgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwOTEzRSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA5MTQwICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDkxNDIgICAgICAwQzAwICAgTk9QCjI5NDogICAgICAgICAgICAgICAgIA0KMjk1OiAgICAgICAgICAgICAgICAgLyoqDQoyOTY6ICAgICAgICAgICAgICAgICAgKiBidG1yX2NvdW50IC0gUmV0dXJuIGN1cnJlbnQgdmFsdWUgb2YgdGltZXIncyBjb3VudCByZWdpc3Rlci4NCjI5NzogICAgICAgICAgICAgICAgICAqIA0KMjk4OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjk5OiAgICAgICAgICAgICAgICAgICogDQozMDA6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQuDQozMDE6ICAgICAgICAgICAgICAgICAgKiANCjMwMjogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDMyX3QgdGltZXIgY291bnQgbWF5IGJlIDMyIG9yIDE2IGJpdHMgZGVwZW5kaW5nIA0KMzAzOiAgICAgICAgICAgICAgICAgICogICAgICAgICB1cG9uIHRoZSBoYXJkd2FyZS4gIE9uIE1FQzEzMjIgVGltZXJzIDAtMyBhcmUgMTYtYml0DQozMDQ6ICAgICAgICAgICAgICAgICAgKiAgICAgICAgIGFuZCBUaW1lcnMgNC01IGFyZSAzMi1iaXQuDQozMDU6ICAgICAgICAgICAgICAgICAgKi8NCjMwNjogICAgICAgICAgICAgICAgIHVpbnQzMl90IGJ0bXJfY291bnQodWludDhfdCB0bXJfaWQpDQozMDc6ICAgICAgICAgICAgICAgICB7DQpCRkQwOEQ0MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOEQ0MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4RDQ0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDhENDYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDhENDggICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDhENEEgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQozMDg6ICAgICAgICAgICAgICAgICAgICAgQlRNUl9UeXBlRGVmICogcDsNCjMwOTogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjbnQ7DQozMTA6ICAgICAgICAgICAgICAgICAgICAgDQozMTE6ICAgICAgICAgICAgICAgICAgICAgY250ID0gMHVsOw0KQkZEMDhENEUgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjMxMjogICAgICAgICAgICAgICAgICAgICBpZiAoIGJ0bXJfdmFsaWQodG1yX2lkKSApIHsNCkJGRDA4RDUyICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA4RDU2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4RDU4ICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZApCRkQwOEQ1QSAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDEKQkZEMDhENUMgICAgICAwQzAwICAgTk9QCkJGRDA4RDVFICAwMDBENDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4RDdDCjMxMzogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChCVE1SX1R5cGVEZWYgKilidG1yX2dldF9od19hZGRyKHRtcl9pZCk7DQpCRkQwOEQ2MiAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwOEQ2NiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOEQ2OCAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHIKQkZEMDhENkEgICAgICA0RDM4ICAgQURESVUgVDEsIFQxLCAtNApCRkQwOEQ2QyAgICAgIDBDMDAgICBOT1AKQkZEMDhENkUgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQozMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9ICh1aW50MzJfdCkocC0+Q09VTlQpOw0KQkZEMDhENzIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwOEQ3NiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDhENzggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozMTU6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzE2OiAgICAgICAgICAgICAgICAgICAgIA0KMzE3OiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbnQ7DQpCRkQwOEQ3QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjMxODogICAgICAgICAgICAgICAgIH0NCkJGRDA4RDgwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4RDgyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDhEODQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwOEQ4NiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4RDg4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDhEOEEgICAgICAwQzAwICAgTk9QCjMxOTogICAgICAgICAgICAgICAgIA0KMzIwOiAgICAgICAgICAgICAgICAgLyoqDQozMjE6ICAgICAgICAgICAgICAgICAgKiBidG1yX3N0YXJ0IC0gU3RhcnQgdGltZXIgY291bnRpbmcuDQozMjI6ICAgICAgICAgICAgICAgICAgKiANCjMyMzogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjMyNDogICAgICAgICAgICAgICAgICAqIA0KMzI1OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELg0KMzI2OiAgICAgICAgICAgICAgICAgICovDQozMjc6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfc3RhcnQodWludDhfdCBidG1yX2lkKQ0KMzI4OiAgICAgICAgICAgICAgICAgew0KQkZEMDhEOEMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDhEOEUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOEQ5MCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4RDkyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4RDk0ICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA4RDk2ICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkKMzI5OiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQozMzA6ICAgICAgICAgICAgICAgICANCjMzMTogICAgICAgICAgICAgICAgICAgICBpZiAoIGJ0bXJfdmFsaWQoYnRtcl9pZCkgKSB7DQpCRkQwOEQ5QSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwOEQ5RSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOERBMCAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDhEQTIgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA4REE0ICAgICAgMEMwMCAgIE5PUApCRkQwOERBNiAgMDAxMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOERDQQozMzI6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcihidG1yX2lkKTsNCkJGRDA4REFBICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA4REFFICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4REIwICA0RDM4NzdFOCAgIEpBTFMgYnRtcl9nZXRfaHdfYWRkcgpCRkQwOERCMiAgICAgIDREMzggICBBRERJVSBUMSwgVDEsIC00CkJGRDA4REI0ICAgICAgMEMwMCAgIE5PUApCRkQwOERCNiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjMzMzogICAgICAgICAgICAgICAgICAgICAgICAgcC0+Q09OVFJPTCB8PSBCVE1SX0NOVExfU1RBUlQ7DQpCRkQwOERCQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4REJFICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkKQkZEMDhEQzAgIDAwMjA1MDYyICAgT1JJIFYxLCBWMCwgMzIKQkZEMDhEQzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOERDOCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjMzNDogICAgICAgICAgICAgICAgICAgICB9DQozMzU6ICAgICAgICAgICAgICAgICB9DQpCRkQwOERDQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOERDQyAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4RENFICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDhERDAgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOEREMiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4REQ0ICAgICAgMEMwMCAgIE5PUAozMzY6ICAgICAgICAgICAgICAgICANCjMzNzogICAgICAgICAgICAgICAgIC8qKg0KMzM4OiAgICAgICAgICAgICAgICAgICogYnRtcl9zdG9wIC0gU3RvcCB0aW1lci4NCjMzOTogICAgICAgICAgICAgICAgICAqIA0KMzQwOiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMzQxOiAgICAgICAgICAgICAgICAgICogDQozNDI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQuIA0KMzQzOiAgICAgICAgICAgICAgICAgICogQG5vdGUgV2hlbiBhIHN0b3BwZWQgdGltZXIgaXMgc3RhcnRlZCBhZ2FpbiBpdCB3aWxsIHJlbG9hZCANCjM0NDogICAgICAgICAgICAgICAgICAqICAgICAgIHRoZSBjb3VudCByZWdpc3RlciBmcm9tIHByZWxvYWQgdmFsdWUuDQozNDU6ICAgICAgICAgICAgICAgICAgKi8NCjM0NjogICAgICAgICAgICAgICAgIHZvaWQgYnRtcl9zdG9wKHVpbnQ4X3QgdG1yX2lkKQ0KMzQ3OiAgICAgICAgICAgICAgICAgew0KQkZEMDhERDggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDhEREEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOEREQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4RERFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4REUwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA4REUyICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkKMzQ4OiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQozNDk6ICAgICAgICAgICAgICAgICANCjM1MDogICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl92YWxpZCh0bXJfaWQpKSB7DQpCRkQwOERFNiAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwOERFQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOERFQyAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDhERUUgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA4REYwICAgICAgMEMwMCAgIE5PUApCRkQwOERGMiAgMDAxMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEUxOAozNTE6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDhERjYgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDhERkEgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDhERkMgIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyCkJGRDA4REZFICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQKQkZEMDhFMDAgICAgICAwQzAwICAgTk9QCkJGRDA4RTAyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzUyOiAgICAgICAgICAgICAgICAgICAgICAgICBwLT5DT05UUk9MICY9IH4oQlRNUl9DTlRMX1NUQVJUKTsNCkJGRDA4RTA2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDhFMEEgICAgICA2OUE0ICAgTFcgVjEsIDE2KFYwKQpCRkQwOEUwQyAgRkZERjMwNDAgICBBRERJVSBWMCwgWkVSTywgLTMzCkJGRDA4RTBFICA0NDlBRkZERiAgIExXIFM4LCAxNzU2MihSQSkKQkZEMDhFMTAgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwCkJGRDA4RTEyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDhFMTYgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQozNTM6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzU0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhFMTggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDhFMUEgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOEUxQyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4RTFFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDhFMjAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOEUyMiAgICAgIDBDMDAgICBOT1AKMzU1OiAgICAgICAgICAgICAgICAgDQozNTY6ICAgICAgICAgICAgICAgICAvKioNCjM1NzogICAgICAgICAgICAgICAgICAqIGJ0bXJfaXNfc3RvcHBlZCAtIFJldHVybiBzdGF0ZSBvZiB0aW1lcidzIFNUQVJUIGJpdC4NCjM1ODogICAgICAgICAgICAgICAgICAqIA0KMzU5OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMzYwOiAgICAgICAgICAgICAgICAgICogDQozNjE6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQuDQozNjI6ICAgICAgICAgICAgICAgICAgKiANCjM2MzogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCBmYWxzZSh0aW1lciBub3Qgc3RhcnRlZCksIHRydWUodGltZXIgc3RhcnRlZCkNCjM2NDogICAgICAgICAgICAgICAgICAqLw0KMzY1OiAgICAgICAgICAgICAgICAgdWludDhfdCBidG1yX2lzX3N0b3BwZWQodWludDhfdCB0bXJfaWQpDQozNjY6ICAgICAgICAgICAgICAgICB7DQpCRkQwODNFOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODNFQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4M0VDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDgzRUUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDgzRjAgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDgzRjIgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQozNjc6ICAgICAgICAgICAgICAgICAgICAgQlRNUl9UeXBlRGVmICogcDsNCjM2ODogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHJjOw0KMzY5OiAgICAgICAgICAgICAgICAgICAgIA0KMzcwOiAgICAgICAgICAgICAgICAgICAgIHJjID0gKE1FQzE0WFhfVFJVRSk7DQpCRkQwODNGNiAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwODNGOCAgMDAxMDE4NUUgICBTQiBWMCwgMTYoUzgpCjM3MTogICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl92YWxpZCh0bXJfaWQpKSB7DQpCRkQwODNGQyAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwODQwMCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwODQwMiAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDg0MDQgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA4NDA2ICAgICAgMEMwMCAgIE5PUApCRkQwODQwOCAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODQzMgozNzI6ICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gKE1FQzE0WFhfRkFMU0UpOw0KQkZEMDg0MEMgIDAwMTAxODFFICAgU0IgWkVSTywgMTYoUzgpCjM3MzogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChCVE1SX1R5cGVEZWYgKilidG1yX2dldF9od19hZGRyKHRtcl9pZCk7DQpCRkQwODQxMCAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwODQxNCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwODQxNiAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHIKQkZEMDg0MTggICAgICA0RDM4ICAgQURESVUgVDEsIFQxLCAtNApCRkQwODQxQSAgICAgIDBDMDAgICBOT1AKQkZEMDg0MUMgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQozNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocC0+Q09OVFJPTCAmIEJUTVJfQ05UTF9TVEFSVCkgPT0gMCkgew0KQkZEMDg0MjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwODQyNCAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApCkJGRDA4NDI2ICAgICAgMkQyQSAgIEFOREkgVjAsIFYwLCAweDIwCkJGRDA4NDI4ICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA4NDMyCjM3NTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gKE1FQzE0WFhfVFJVRSk7DQpCRkQwODQyQyAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwODQyRSAgMDAxMDE4NUUgICBTQiBWMCwgMTYoUzgpCjM3NjogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMzc3OiAgICAgICAgICAgICAgICAgICAgIH0NCjM3ODogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQpCRkQwODQzMiAgMDAxMDE0NUUgICBMQlUgVjAsIDE2KFM4KQozNzk6ICAgICAgICAgICAgICAgICB9DQpCRkQwODQzNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODQzOCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4NDNBICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDg0M0MgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwODQzRSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4NDQwICAgICAgMEMwMCAgIE5PUAozODA6ICAgICAgICAgICAgICAgICANCjM4MTogICAgICAgICAgICAgICAgIA0KMzgyOiAgICAgICAgICAgICAgICAgLyoqDQozODM6ICAgICAgICAgICAgICAgICAgKiBidG1yX2hhbHQgLSBIYWx0IHRpbWVyIGNvdW50aW5nIHdpdGggbm8gcmVsb2FkIG9uIHVuaGFsdC4gDQozODQ6ICAgICAgICAgICAgICAgICAgKiANCjM4NTogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjM4NjogICAgICAgICAgICAgICAgICAqIA0KMzg3OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELiANCjM4ODogICAgICAgICAgICAgICAgICAqIEBub3RlIEEgaGFsdGVkIHRpbWVyIHdpbGwgbm90IHJlbG9hZCB0aGUgY291bnQgcmVnaXN0ZXIgd2hlbiANCjM4OTogICAgICAgICAgICAgICAgICAqICAgICAgIHVuaGFsdGVkLCBpdCB3aWxsIGNvbnRpbnVlIGNvdW50aW5nIGZyb20gdGhlIGN1cnJlbnQNCjM5MDogICAgICAgICAgICAgICAgICAqICAgICAgIGNvdW50IHZhbHVlLg0KMzkxOiAgICAgICAgICAgICAgICAgICovDQozOTI6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfaGFsdCh1aW50OF90IHRtcl9pZCkNCjM5MzogICAgICAgICAgICAgICAgIHsNCkJGRDA4RTI0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4RTI2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDhFMjggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOEUyQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOEUyQyAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMApCRkQwOEUyRSAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpCjM5NDogICAgICAgICAgICAgICAgICAgICBCVE1SX1R5cGVEZWYgKiBwOw0KMzk1OiAgICAgICAgICAgICAgICAgDQozOTY6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBidG1yX3ZhbGlkKHRtcl9pZCkgKSB7DQpCRkQwOEUzMiAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwOEUzNiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOEUzOCAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQKQkZEMDhFM0EgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxCkJGRDA4RTNDICAgICAgMEMwMCAgIE5PUApCRkQwOEUzRSAgMDAxMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEU2MgozOTc6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDhFNDIgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDhFNDYgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDhFNDggIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyCkJGRDA4RTRBICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQKQkZEMDhFNEMgICAgICAwQzAwICAgTk9QCkJGRDA4RTRFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzk4OiAgICAgICAgICAgICAgICAgICAgICAgICBwLT5DT05UUk9MIHw9IChCVE1SX0NOVExfSEFMVCk7DQpCRkQwOEU1MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4RTU2ICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkKQkZEMDhFNTggIDAwODA1MDYyICAgT1JJIFYxLCBWMCwgMTI4CkJGRDA4RTVDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDhFNjAgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQozOTk6ICAgICAgICAgICAgICAgICAgICAgfQ0KNDAwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhFNjIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDhFNjQgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOEU2NiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4RTY4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDhFNkEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOEU2QyAgICAgIDBDMDAgICBOT1AKNDAxOiAgICAgICAgICAgICAgICAgDQo0MDI6ICAgICAgICAgICAgICAgICANCjQwMzogICAgICAgICAgICAgICAgIC8qKg0KNDA0OiAgICAgICAgICAgICAgICAgICogYnRtcl91bmhhbHQgLSBVbmhhbHQgdGltZXIgY291bnRpbmcuDQo0MDU6ICAgICAgICAgICAgICAgICAgKiANCjQwNjogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjQwNzogICAgICAgICAgICAgICAgICAqIA0KNDA4OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELg0KNDA5OiAgICAgICAgICAgICAgICAgICovDQo0MTA6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfdW5oYWx0KHVpbnQ4X3QgdG1yX2lkKQ0KNDExOiAgICAgICAgICAgICAgICAgew0KQkZEMDhFNzAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDhFNzIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOEU3NCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4RTc2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4RTc4ICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA4RTdBICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkKNDEyOiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQo0MTM6ICAgICAgICAgICAgICAgICANCjQxNDogICAgICAgICAgICAgICAgICAgICBpZiAoIGJ0bXJfdmFsaWQodG1yX2lkKSApIHsNCkJGRDA4RTdFICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA4RTgyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4RTg0ICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZApCRkQwOEU4NiAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDEKQkZEMDhFODggICAgICAwQzAwICAgTk9QCkJGRDA4RThBICAwMDExNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4RUIwCjQxNTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChCVE1SX1R5cGVEZWYgKilidG1yX2dldF9od19hZGRyKHRtcl9pZCk7DQpCRkQwOEU4RSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwOEU5MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOEU5NCAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHIKQkZEMDhFOTYgICAgICA0RDM4ICAgQURESVUgVDEsIFQxLCAtNApCRkQwOEU5OCAgICAgIDBDMDAgICBOT1AKQkZEMDhFOUEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo0MTY6ICAgICAgICAgICAgICAgICAgICAgICAgIHAtPkNPTlRST0wgJj0gfihCVE1SX0NOVExfSEFMVCk7DQpCRkQwOEU5RSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4RUEyICAgICAgNjlBNCAgIExXIFYxLCAxNihWMCkKQkZEMDhFQTQgIEZGN0YzMDQwICAgQURESVUgVjAsIFpFUk8sIC0xMjkKQkZEMDhFQTYgIDQ0OUFGRjdGICAgTFcgSzEsIDE3NTYyKFJBKQpCRkQwOEVBOCAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjAKQkZEMDhFQUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOEVBRSAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjQxNzogICAgICAgICAgICAgICAgICAgICB9DQo0MTg6ICAgICAgICAgICAgICAgICB9DQpCRkQwOEVCMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOEVCMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4RUI0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDhFQjYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOEVCOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4RUJBICAgICAgMEMwMCAgIE5PUAo0MTk6ICAgICAgICAgICAgICAgICANCjQyMDogICAgICAgICAgICAgICAgIA0KNDIxOiAgICAgICAgICAgICAgICAgLyogZW5kIG1lYzE0eHhfdGltZXJzLmMgKi8NCjQyMjogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQo0MjM6ICAgICAgICAgICAgICAgICAgKi8NCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvbWVjMTR4eF90ZmRwLmMgIC0tLS0tLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogqSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBtZWMxNHh4X3RmZHAuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpNRUMxNHh4IFRyYWNlIEZJRk8gRGF0YSBQb3J0IGhhcmR3YXJlIGFjY2Vzcw0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggUGVyaXBoZXJhbHMgVEZEUA0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3Bjci5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RGRFBfVFJBQ0UNCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgI3VuZGVmIFRGRFBfUElOXzENCjM5OiAgICAgICAgICAgICAgICAgICN1bmRlZiBURkRQX1BJTl8yDQo0MDogICAgICAgICAgICAgICAgICANCjQxOiAgICAgICAgICAgICAgICAgIA0KNDI6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBURkRQX1BJTl8xIChHUElPXzAxMTZfSUQpICAgLy8gRnVuYzEgUHVsbFVwIGVuYWJsZWQNCjQzOiAgICAgICAgICAgICAgICAgICNkZWZpbmUgVEZEUF9QSU5fMiAoR1BJT18wMTE3X0lEKSAgIC8vIEZ1bmMxIFB1bGxVcCBlbmFibGVkDQo0NDogICAgICAgICAgICAgICAgICANCjQ1OiAgICAgICAgICAgICAgICAgIA0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCB0ZmRwX3htaXRfaGVhZGVyKHVpbnQxNl90IG5icikNCjQ4OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA5MDZDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDkwNkUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5MDcwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5MDcyICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA5MDc0ICAwMDA4Mzg1RSAgIFNIIFYwLCA4KFM4KQo0OTogICAgICAgICAgICAgICAgICAgICAgVEZEUC0+REFUQSA9IFRGRFBfRlJBTUVfU1RBUlQ7DQpCRkQwOTA3OCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwOTA3QyAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDkwN0UgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwOTA4MApCRkQwOTA4MCAgRkZGRDMwNjAgICBBRERJVSBWMSwgWkVSTywgLTMKQkZEMDkwODIgIDg5QTBGRkZEICAgTFcgUkEsIC0zMDMwNChTUCkKQkZEMDkwODQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCjUwOiAgICAgICAgICAgICAgICAgICAgICBURkRQX0RFTEFZKCk7DQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgICAgICBURkRQLT5EQVRBID0gKHVpbnQ4X3QpbmJyOw0KQkZEMDkwODYgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDkwOEEgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDA5MDhDICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDkwOEUKQkZEMDkwOEUgIDAwMDgzNDdFICAgTEhVIFYxLCA4KFM4KQpCRkQwOTA5MiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwOTA5NCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKNTM6ICAgICAgICAgICAgICAgICAgICAgIFRGRFBfREVMQVkoKTsNCjU0OiAgICAgICAgICAgICAgICAgICAgICBURkRQLT5EQVRBID0gKHVpbnQ4X3QpKG5iciA+PiA4KTsNCkJGRDA5MDk2ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDA5MDlBICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwOTA5QyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDA5MDlFCkJGRDA5MDlFICAwMDA4MzQ3RSAgIExIVSBWMSwgOChTOCkKQkZEMDkwQTIgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOApCRkQwOTBBNCAgICAgIDJEQkYgICBBTkRJIFYxLCBWMSwgMHhGRkZGCkJGRDA5MEE2ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDA5MEE4ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQo1NTogICAgICAgICAgICAgICAgICAgICAgVEZEUF9ERUxBWSgpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDkwQUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDkwQUMgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5MEFFICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOTBCMCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5MEIyICAgICAgMEMwMCAgIE5PUAo1NzogICAgICAgICAgICAgICAgICANCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgdGZkcF94bWl0X2h3b3JkKHVpbnQxNl90IGh3b3JkKQ0KNjA6ICAgICAgICAgICAgICAgICAgew0KQkZEMDk2NDggICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOTY0QSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDk2NEMgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk2NEUgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDk2NTAgIDAwMDgzODVFICAgU0ggVjAsIDgoUzgpCjYxOiAgICAgICAgICAgICAgICAgICAgICBURkRQLT5EQVRBID0gKHVpbnQ4X3QpaHdvcmQ7DQpCRkQwOTY1NCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwOTY1OCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDk2NUEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwOTY1QwpCRkQwOTY1QyAgMDAwODM0N0UgICBMSFUgVjEsIDgoUzgpCkJGRDA5NjYwICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDA5NjYyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQo2MjogICAgICAgICAgICAgICAgICAgICAgVEZEUF9ERUxBWSgpOw0KNjM6ICAgICAgICAgICAgICAgICAgICAgIFRGRFAtPkRBVEEgPSAodWludDhfdCkoaHdvcmQgPj4gOCk7DQpCRkQwOTY2NCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwOTY2OCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDk2NkEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwOTY2QwpCRkQwOTY2QyAgMDAwODM0N0UgICBMSFUgVjEsIDgoUzgpCkJGRDA5NjcwICAgICAgMjVCMSAgIFNSTCBWMSwgVjEsIDgKQkZEMDk2NzIgICAgICAyREJGICAgQU5ESSBWMSwgVjEsIDB4RkZGRgpCRkQwOTY3NCAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwOTY3NiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKNjQ6ICAgICAgICAgICAgICAgICAgICAgIFRGRFBfREVMQVkoKTsNCjY1OiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5Njc4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5NjdBICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOTY3QyAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDk2N0UgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTY4MCAgICAgIDBDMDAgICBOT1AKNjY6ICAgICAgICAgICAgICAgICAgDQo2NzogICAgICAgICAgICAgICAgICANCjY4OiAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHRmZHBfeG1pdF93b3JkKHVpbnQzMl90IHdvcmQpDQo2OTogICAgICAgICAgICAgICAgICB7DQpCRkQwOENGNCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNgpCRkQwOENGNiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA4Q0Y4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4Q0ZBICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkKNzA6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgaTsNCjcxOiAgICAgICAgICAgICAgICAgIA0KNzI6ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDB1OyBpIDwgNDsgaSsrKSB7DQpCRkQwOENGRSAgMDAwMDE4MUUgICBTQiBaRVJPLCAwKFM4KQpCRkQwOEQwMiAgICAgIENDMTMgICBCIDB4QkZEMDhEMkEKQkZEMDhEMDQgICAgICAwQzAwICAgTk9QCkJGRDA4RDIwICAwMDAwMTQ1RSAgIExCVSBWMCwgMChTOCkKQkZEMDhEMjQgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxCkJGRDA4RDI2ICAwMDAwMTg1RSAgIFNCIFYwLCAwKFM4KQpCRkQwOEQyQSAgMDAwMDE0NUUgICBMQlUgVjAsIDAoUzgpCkJGRDA4RDJFICAwMDA0QjA0MiAgIFNMVElVIFYwLCBWMCwgNApCRkQwOEQzMiAgRkZFODQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEQwNgpCRkQwOEQzNCAgMEZCRUZGRTggICBMVyBSQSwgNDAzMChUMCkKNzM6ICAgICAgICAgICAgICAgICAgICAgICAgICBURkRQLT5EQVRBID0gKHVpbnQ4X3Qpd29yZDsNCkJGRDA4RDA2ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDA4RDBBICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwOEQwQyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDA4RDBFCkJGRDA4RDBFICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDhEMTIgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDhEMTQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCjc0OiAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCA+Pj0gODsgDQpCRkQwOEQxNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4RDFBICAgICAgMjUyMSAgIFNSTCBWMCwgVjAsIDgKQkZEMDhEMUMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo3NTogICAgICAgICAgICAgICAgICAgICAgICAgIFRGRFBfREVMQVkoKTsNCjc2OiAgICAgICAgICAgICAgICAgICAgICB9DQo3NzogICAgICAgICAgICAgICAgICB9DQpCRkQwOEQzNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOEQzOCAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA4RDNBICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYKQkZEMDhEM0MgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOEQzRSAgICAgIDBDMDAgICBOT1AKNzg6ICAgICAgICAgICAgICAgICAgDQo3OTogICAgICAgICAgICAgICAgICANCjgwOiAgICAgICAgICAgICAgICAgIC8qKg0KODE6ICAgICAgICAgICAgICAgICAgICogdGZkcF9zbGVlcF9lbiAtIEdhdGUgY2xvY2tzIE9uL09mZiB0byBURkRQIGJsb2NrIHdoZW4gaWRsZQ0KODI6ICAgICAgICAgICAgICAgICAgICogDQo4MzogICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIEMyMTk2OSAoMi80LzIwMTQpDQo4NDogICAgICAgICAgICAgICAgICAgKiANCjg1OiAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSBzbGVlcF9lbiAoMT1HYXRlIGNsb2NrcyB3aGVuIGlkbGUpLCAoMD1EbyBub3QgZ2F0ZSANCjg2OiAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICBjbG9ja3Mgd2hlbiBpZGxlKQ0KODc6ICAgICAgICAgICAgICAgICAgICovDQo4ODogICAgICAgICAgICAgICAgICB2b2lkIHRmZHBfc2xlZXBfZW4odWludDhfdCBzbGVlcF9lbikNCjg5OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA4OEFDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDg4QUUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA4OEIwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4OEIyICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA4OEI0ICAwMDA4MTg1RSAgIFNCIFYwLCA4KFM4KQo5MDogICAgICAgICAgICAgICAgICAgICAgaWYgKCBzbGVlcF9lbiApIHsNCkJGRDA4OEI4ICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkKQkZEMDg4QkMgIDAwMEU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg4REMKOTE6ICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1ItPkVDX1NMRUVQX0VOIHw9IChQQ1JfRUNfVEZEUF9TTFBfQ0xLKTsNCkJGRDA4OEMwICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDA4OEM0ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwODhDOCAgQTAwODQxQTMgICBMVUkgVjEsIDB4QTAwOApCRkQwODhDQyAgMDEwMDUwNjMgICBPUkkgVjEsIFYxLCAyNTYKQkZEMDg4RDAgICAgICA2OUIyICAgTFcgVjEsIDgoVjEpCkJGRDA4OEQyICAwMDgwNTA2MyAgIE9SSSBWMSwgVjEsIDEyOApCRkQwODhENiAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKQkZEMDg4RDggICAgICBDQzBFICAgQiAweEJGRDA4OEY2CkJGRDA4OERBICAgICAgMEMwMCAgIE5PUAo5MjogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCjkzOiAgICAgICAgICAgICAgICAgICAgICAgICAgUENSLT5FQ19TTEVFUF9FTiAmPSB+KFBDUl9FQ19URkRQX1NMUF9DTEspOw0KQkZEMDg4REMgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgKQkZEMDg4RTAgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDA4OEU0ICBBMDA4NDFBMyAgIExVSSBWMSwgMHhBMDA4CkJGRDA4OEU4ICAwMTAwNTA2MyAgIE9SSSBWMSwgVjEsIDI1NgpCRkQwODhFQyAgICAgIDZBMzIgICBMVyBBMCwgOChWMSkKQkZEMDg4RUUgIEZGN0YzMDYwICAgQURESVUgVjEsIFpFUk8sIC0xMjkKQkZEMDg4RjAgIDQ0OUNGRjdGICAgTFcgSzEsIDE3NTY0KFJBKQpCRkQwODhGMiAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTAKQkZEMDg4RjQgICAgICBFOUEyICAgU1cgVjEsIDgoVjApCjk0OiAgICAgICAgICAgICAgICAgICAgICB9DQo5NTogICAgICAgICAgICAgICAgICB9DQpCRkQwODhGNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODhGOCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDg4RkEgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4CkJGRDA4OEZDICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDg4RkUgICAgICAwQzAwICAgTk9QCjk2OiAgICAgICAgICAgICAgICAgIA0KOTc6ICAgICAgICAgICAgICAgICAgDQo5ODogICAgICAgICAgICAgICAgICAvKioNCjk5OiAgICAgICAgICAgICAgICAgICAqIHRmZHBfZW5hYmxlIC0gSW5pdCBUcmFjZSBGSUZPIERhdGEgUG9ydA0KMTAwOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGJvb2xlYW4gdHJ1ZT1lbmFibGUgVEZEUCwgZmFsc2U9ZGlzYWJsZSBURkRQIA0KMTAxOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGJvb2xlYW4gdHJ1ZT1jaGFuZ2UgVEZEUCBwaW4gY29uZmlndXJhdGlvbi4gDQoxMDI6ICAgICAgICAgICAgICAgICAgKiBJZiBURkRQIGlzIGVuYWJsZWQgdGhlbiBHUElPMTAzLzEwNCBzZXQgdG8gQWx0LiBGdW5jLiAxIA0KMTAzOiAgICAgICAgICAgICAgICAgICogRWxzZSBHUElPMTAzLzEwNCBzZXQgdG8gR1BJTyBpbnB1dCwgaW50ZXJuYWwgUFUgZW5hYmxlZC4gDQoxMDQ6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSAtIA0KMTA1OiAgICAgICAgICAgICAgICAgICovDQoxMDY6ICAgICAgICAgICAgICAgICB2b2lkIHRmZHBfZW5hYmxlKHVpbnQ4X3QgZW4sIHVpbnQ4X3QgcGluX2NmZykNCjEwNzogICAgICAgICAgICAgICAgIHsNCkJGRDAzMkM0ICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDAzMkM2ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDMyQzggICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDMyQ0EgICAgICAwQzY0ICAgTU9WRSBWMSwgQTAKQkZEMDMyQ0MgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDMyQ0UgIDAwMTAxODdFICAgU0IgVjEsIDE2KFM4KQpCRkQwMzJEMiAgMDAxNDE4NUUgICBTQiBWMCwgMjAoUzgpCjEwODogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWxheTsNCjEwOTogICAgICAgICAgICAgICAgIA0KMTEwOiAgICAgICAgICAgICAgICAgICAgIGlmIChlbikgew0KQkZEMDMyRDYgIDAwMTAxNDVFICAgTEJVIFYwLCAxNihTOCkKQkZEMDMyREEgIDAwNzI0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDMzQzIKMTExOiAgICAgICAgICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbl9jZmcpIHsNCkJGRDAzMkRFICAwMDE0MTQ1RSAgIExCVSBWMCwgMjAoUzgpCkJGRDAzMkUyICAwMDY3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzM0I0CjExMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0IHdpdGggQWx0T3V0PTEgdG8gZHJpdmUgaGlnaCB3aGVuIHN3aXRjaGVkIHRvIG91dHB1dA0KMTE0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19DVFJMLT5SRUdbVEZEUF9QSU5fMV0udyA9ICgxdWwgPDwgMTYpOw0KQkZEMDMyRTYgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgKQkZEMDMyRUEgIDEwMDA1MDQyICAgT1JJIFYwLCBWMCwgNDA5NgpCRkQwMzJFQyAgNDFBMzEwMDAgICBBRERJIFpFUk8sIFpFUk8sIDE2ODAzCkJGRDAzMkVFICAwMDAxNDFBMyAgIExVSSBWMSwgMHgxCkJGRDAzMkYyICAwMTM4Rjg2MiAgIFNXIFYxLCAzMTIoVjApCjExNTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQ1RSTC0+UkVHW1RGRFBfUElOXzJdLncgPSAoMXVsIDw8IDE2KTsNCkJGRDAzMkY2ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDAzMkZBICAxMDAwNTA0MiAgIE9SSSBWMCwgVjAsIDQwOTYKQkZEMDMyRkMgIDQxQTMxMDAwICAgQURESSBaRVJPLCBaRVJPLCAxNjgwMwpCRkQwMzJGRSAgMDAwMTQxQTMgICBMVUkgVjEsIDB4MQpCRkQwMzMwMiAgMDEzQ0Y4NjIgICBTVyBWMSwgMzE2KFYwKQpCRkQwMzMwNCAgMzA0MDAxM0MgICBTUkwgVDEsIEdQLCA2CjExNjogICAgICAgICAgICAgICAgIA0KMTE3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSAxMjg7DQpCRkQwMzMwNiAgMDA4MDMwNDAgICBBRERJVSBWMCwgWkVSTywgMTI4CkJGRDAzMzBBICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQoxMTg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlbGF5LS0gKQ0KQkZEMDMzMEUgICAgICBDQzAzICAgQiAweEJGRDAzMzE2CkJGRDAzMzEwICAgICAgMEMwMCAgIE5PUApCRkQwMzMxNiAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkKQkZEMDMzMTggIDAwNDAwMDAwICAgU1JMIFpFUk8sIFpFUk8sIDAKQkZEMDMzMUEgIDEzOTAwMDQwICAgU0xUVSBWMCwgWkVSTywgVjAKQkZEMDMzMUMgIDJEMkQxMzkwICAgQURESSBHUCwgUzAsIDExNTY1CkJGRDAzMzFFICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDAzMzIwICAwMDAwRkM3RSAgIExXIFYxLCAwKFM4KQpCRkQwMzMyNCAgICAgIDZEQkUgICBBRERJVSBWMSwgVjEsIC0xCkJGRDAzMzI2ICAwMDAwRjg3RSAgIFNXIFYxLCAwKFM4KQpCRkQwMzMyQSAgRkZGMjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzMxMgpCRkQwMzMyQyAgNDFBMkZGRjIgICBMVyBSQSwgMTY4MDIoUzIpCjExOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCjEyMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFVfTk9QKCk7DQpCRkQwMzMxMiAgMDgwMDAwMDAgICBTU05PUApCRkQwMzMxNCAgICAgIDA4MDAgICBMQlUgUzAsIDAoUzApCjEyMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjEyMjogICAgICAgICAgICAgICAgIA0KMTIzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR1BJTyBPdXRwdXQgZW5hYmxlZCAoZHJpdmUgYmFzZWQgb24gYWJvdmUgc2V0dGluZ3MpDQoxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0NUUkwtPlJFR1tURkRQX1BJTl8xXS53IHw9ICgxdWwgPDwgOSk7DQpCRkQwMzMyRSAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOApCRkQwMzMzMiAgMTAwMDUwNDIgICBPUkkgVjAsIFYwLCA0MDk2CkJGRDAzMzM0ICA0MUEzMTAwMCAgIEFEREkgWkVSTywgWkVSTywgMTY4MDMKQkZEMDMzMzYgIEEwMDg0MUEzICAgTFVJIFYxLCAweEEwMDgKQkZEMDMzM0EgIDEwMDA1MDYzICAgT1JJIFYxLCBWMSwgNDA5NgpCRkQwMzMzQyAgRkM2MzEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC05MjUKQkZEMDMzM0UgIDAxMzhGQzYzICAgTFcgVjEsIDMxMihWMSkKQkZEMDMzNDIgIDAyMDA1MDYzICAgT1JJIFYxLCBWMSwgNTEyCkJGRDAzMzQ2ICAwMTM4Rjg2MiAgIFNXIFYxLCAzMTIoVjApCjEyNTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQ1RSTC0+UkVHW1RGRFBfUElOXzJdLncgfD0gKDF1bCA8PCA5KTsNCkJGRDAzMzRBICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDAzMzRFICAxMDAwNTA0MiAgIE9SSSBWMCwgVjAsIDQwOTYKQkZEMDMzNTAgIDQxQTMxMDAwICAgQURESSBaRVJPLCBaRVJPLCAxNjgwMwpCRkQwMzM1MiAgQTAwODQxQTMgICBMVUkgVjEsIDB4QTAwOApCRkQwMzM1NiAgMTAwMDUwNjMgICBPUkkgVjEsIFYxLCA0MDk2CkJGRDAzMzU4ICBGQzYzMTAwMCAgIEFEREkgWkVSTywgWkVSTywgLTkyNQpCRkQwMzM1QSAgMDEzQ0ZDNjMgICBMVyBWMSwgMzE2KFYxKQpCRkQwMzM1RSAgMDIwMDUwNjMgICBPUkkgVjEsIFYxLCA1MTIKQkZEMDMzNjIgIDAxM0NGODYyICAgU1cgVjEsIDMxNihWMCkKQkZEMDMzNjQgIDMwNDAwMTNDICAgU1JMIFQxLCBHUCwgNgoxMjY6ICAgICAgICAgICAgICAgICANCjEyNzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gMTI4Ow0KQkZEMDMzNjYgIDAwODAzMDQwICAgQURESVUgVjAsIFpFUk8sIDEyOAoxMjg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlbGF5LS0gKQ0KQkZEMDMzNkEgICAgICBDQzA0ICAgQiAweEJGRDAzMzc0CkJGRDAzMzZDICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQpCRkQwMzM2RSAgMDAwMDAwMDAgICBOT1AKQkZEMDMzNzQgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDAzMzc2ICAwMDQwMDAwMCAgIFNSTCBaRVJPLCBaRVJPLCAwCkJGRDAzMzc4ICAxMzkwMDA0MCAgIFNMVFUgVjAsIFpFUk8sIFYwCkJGRDAzMzdBICAyRDJEMTM5MCAgIEFEREkgR1AsIFMwLCAxMTU2NQpCRkQwMzM3QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwMzM3RSAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkKQkZEMDMzODIgICAgICA2REJFICAgQURESVUgVjEsIFYxLCAtMQpCRkQwMzM4NCAgMDAwMEY4N0UgICBTVyBWMSwgMChTOCkKQkZEMDMzODggIEZGRjI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDMzNzAKQkZEMDMzOEEgIDQxQTJGRkYyICAgTFcgUkEsIDE2ODAyKFMyKQoxMjk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoxMzA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVX05PUCgpOw0KQkZEMDMzNzAgIDA4MDAwMDAwICAgU1NOT1AKQkZEMDMzNzIgICAgICAwODAwICAgTEJVIFMwLCAwKFMwKQoxMzE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxMzI6ICAgICAgICAgICAgICAgICANCjEzMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byBGdW5jdGlvbiAxIChURkRQIG1vZGUgYlsxMzoxMl09MDFiKQ0KMTM0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19DVFJMLT5SRUdbVEZEUF9QSU5fMV0udyA9ICgxdWwgPDwgMTYpICsgKDF1bCA8PCAxMik7DQpCRkQwMzM4QyAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOApCRkQwMzM5MCAgMTAwMDUwNDIgICBPUkkgVjAsIFYwLCA0MDk2CkJGRDAzMzkyICA0MUEzMTAwMCAgIEFEREkgWkVSTywgWkVSTywgMTY4MDMKQkZEMDMzOTQgIDAwMDE0MUEzICAgTFVJIFYxLCAweDEKQkZEMDMzOTggIDEwMDA1MDYzICAgT1JJIFYxLCBWMSwgNDA5NgpCRkQwMzM5QSAgRjg2MjEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC0xOTUwCkJGRDAzMzlDICAwMTM4Rjg2MiAgIFNXIFYxLCAzMTIoVjApCjEzNTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQ1RSTC0+UkVHW1RGRFBfUElOXzJdLncgPSAoMXVsIDw8IDE2KSArICgxdWwgPDwgMTIpOw0KQkZEMDMzQTAgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgKQkZEMDMzQTQgIDEwMDA1MDQyICAgT1JJIFYwLCBWMCwgNDA5NgpCRkQwMzNBNiAgNDFBMzEwMDAgICBBRERJIFpFUk8sIFpFUk8sIDE2ODAzCkJGRDAzM0E4ICAwMDAxNDFBMyAgIExVSSBWMSwgMHgxCkJGRDAzM0FDICAxMDAwNTA2MyAgIE9SSSBWMSwgVjEsIDQwOTYKQkZEMDMzQUUgIEY4NjIxMDAwICAgQURESSBaRVJPLCBaRVJPLCAtMTk1MApCRkQwMzNCMCAgMDEzQ0Y4NjIgICBTVyBWMSwgMzE2KFYwKQoxMzY6ICAgICAgICAgICAgICAgICANCjEzNzogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTM4OiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiWzBdPTEoRW5hYmxlKQ0KMTM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiWzFdPTAoU2hpZnQgZGF0YSBvdXQgb24gcmlzaW5nIGVkZ2UpIA0KMTQwOiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiWzM6Ml09MDBiIFRGRFAgc2hpZnQgY2xvY2tzID0gQUhCX0NMSy8yDQoxNDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJbNjo0XT0wMDBiIDEgY2xvY2sgaW50ZXItcGFja2V0IGRlbGF5DQoxNDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KMTQzOiAgICAgICAgICAgICAgICAgICAgICAgICBURkRQLT5DT05UUk9MID0gMHgwMXU7DQpCRkQwMzNCNCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMzNCOCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDMzQkEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMzNCQwpCRkQwMzNCQyAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwMzNCRSAgICAgIENDMTYgICBCIDB4QkZEMDMzRUMKQkZEMDMzQzAgICAgICA4OUE0ICAgU0IgVjEsIDQoVjApCjE0NDogICAgICAgICAgICAgICAgIA0KMTQ1OiAgICAgICAgICAgICAgICAgICAgIH0gDQoxNDY6ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KMTQ3OiAgICAgICAgICAgICAgICAgICAgIHsNCjE0ODogICAgICAgICAgICAgICAgICAgICAgICAgVEZEUC0+Q09OVFJPTCA9IDB4MDB1Ow0KQkZEMDMzQzIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDMzQzYgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAzM0M4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDMzQ0EKQkZEMDMzQ0EgICAgICA4ODI0ICAgU0IgUzAsIDQoVjApCjE0OTogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbl9jZmcpIA0KQkZEMDMzQ0MgIDAwMTQxNDVFICAgTEJVIFYwLCAyMChTOCkKQkZEMDMzRDAgIDAwMEM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDMzRUMKMTUwOiAgICAgICAgICAgICAgICAgICAgICAgICB7IC8qIFNldCB0byBQT1IgdmFsdWUgKHRyaS1zdGF0ZWQgaW5wdXQpICovDQoxNTE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0NUUkwtPlJFR1tURkRQX1BJTl8xXS53ID0gMDsNCkJGRDAzM0Q0ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDAzM0Q4ICAxMDAwNTA0MiAgIE9SSSBWMCwgVjAsIDQwOTYKQkZEMDMzREEgIEY4MDIxMDAwICAgQURESSBaRVJPLCBaRVJPLCAtMjA0NgpCRkQwMzNEQyAgMDEzOEY4MDIgICBTVyBaRVJPLCAzMTIoVjApCjE1MjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQ1RSTC0+UkVHW1RGRFBfUElOXzJdLncgPSAwOw0KQkZEMDMzRTAgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgKQkZEMDMzRTQgIDEwMDA1MDQyICAgT1JJIFYwLCBWMCwgNDA5NgpCRkQwMzNFNiAgRjgwMjEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC0yMDQ2CkJGRDAzM0U4ICAwMTNDRjgwMiAgIFNXIFpFUk8sIDMxNihWMCkKMTUzOiAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxNTQ6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTU1OiAgICAgICAgICAgICAgICAgfSAvLyBlbmQgdGZkcF9lbmFibGUoKQ0KQkZEMDMzRUMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDMzRUUgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwMzNGMCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDAzM0YyICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYKMTU2OiAgICAgICAgICAgICAgICAgDQoxNTc6ICAgICAgICAgICAgICAgICANCjE1ODogICAgICAgICAgICAgICAgIC8qKg0KMTU5OiAgICAgICAgICAgICAgICAgICogVEZEUFRyYWNlMCAtIFRSQUNFMDogdHJhbnNtaXQgMTYtYml0IHRyYWNlIG51bWJlciBsc2IgZmlyc3QgDQoxNjA6ICAgICAgICAgICAgICAgICAgKiBvdmVyIFRGRFAuIA0KMTYxOiAgICAgICAgICAgICAgICAgICogDQoxNjI6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxNjM6ICAgICAgICAgICAgICAgICAgKiANCjE2NDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuYnIgMTYtYml0IHRyYWNlIG51bWJlciANCjE2NTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBiIHVudXNlZA0KMTY2OiAgICAgICAgICAgICAgICAgICogDQoxNjc6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgYWx3YXlzIFRSVUUgDQoxNjg6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBGdW5jdGlvbiBpbXBsZW1lbnRzIGNyaXRpY2FsIHNlY3Rpb24uIA0KMTY5OiAgICAgICAgICAgICAgICAgICogVXNlcyB0b29sIGtpdCBfX2Rpc2FibGVfaXJxKCkvX19lbmFibGVfaXJxKCkgcGFpciB3aGljaCBtYXkgdXNlIA0KMTcwOiAgICAgICAgICAgICAgICAgICogcHJpdmlsZWRnZWQgQ29ydGV4LU14IGluc3RydWN0aW9ucy4gDQoxNzE6ICAgICAgICAgICAgICAgICAgKi8NCjE3MjogICAgICAgICAgICAgICAgIHZvaWQgVEZEUFRyYWNlMCAoIHVpbnQxNl90IG5iciwgdWludDhfdCBiICkNCjE3MzogICAgICAgICAgICAgICAgIHsNCkJGRDA5QTE4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5QTFBICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDlBMUMgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOUExRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUEyMCAgICAgIDBDNjQgICBNT1ZFIFYxLCBBMApCRkQwOUEyMiAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQpCRkQwOUEyNCAgMDAxODM4N0UgICBTSCBWMSwgMjQoUzgpCkJGRDA5QTI4ICAwMDFDMTg1RSAgIFNCIFYwLCAyOChTOCkKMTc0OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMTc1OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlzYXZlOw0KMTc2OiAgICAgICAgICAgICAgICAgDQoxNzc6ICAgICAgICAgICAgICAgICAgICAgaXNhdmUgPSBtaXBzMzJyMl9kaXNfaW50cigpOw0KMTc4OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxNzk6ICAgICAgICAgICAgICAgICANCjE4MDogICAgICAgICAgICAgICAgICAgICAodm9pZCliOw0KMTgxOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9oZWFkZXIobmJyKTsNCkJGRDA5QTJDICAwMDE4MzQ1RSAgIExIVSBWMCwgMjQoUzgpCkJGRDA5QTMwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA5QTMyICA0ODM2NzdFOCAgIEpBTFMgdGZkcF94bWl0X2hlYWRlcgpCRkQwOUEzNCAgICAgIDQ4MzYgICBMVyBBVCwgODgoU1ApCkJGRDA5QTM2ICAgICAgMEMwMCAgIE5PUAoxODI6ICAgICAgICAgICAgICAgICANCjE4MzogICAgICAgICAgICAgICAgICNpZmRlZiBFTkFCTEVfVFJBQ0VfTUFTS19JUlENCjE4NDogICAgICAgICAgICAgICAgICAgICAgbWlwczMycjJfcmVzdG9yZV9pbnRyKGlzYXZlKTsNCjE4NTogICAgICAgICAgICAgICAgICNlbmRpZg0KMTg2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlBMzggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlBM0EgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwOUEzQyAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA5QTNFICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDlBNDAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUE0MiAgICAgIDBDMDAgICBOT1AKMTg3OiAgICAgICAgICAgICAgICAgDQoxODg6ICAgICAgICAgICAgICAgICANCjE4OTogICAgICAgICAgICAgICAgIC8qKg0KMTkwOiAgICAgICAgICAgICAgICAgICogVFJEUFRyYWNlMSAtIFRSQUNFMTogdHJhbnNtaXQgMTYtYml0IHRyYWNlIG51bWJlciBsc2IgZmlyc3QgDQoxOTE6ICAgICAgICAgICAgICAgICAgKiBhbmQgMTYtYml0IGRhdGEgbHNiIGZpcnN0IG92ZXIgVEZEUC4gDQoxOTI6ICAgICAgICAgICAgICAgICAgKiANCjE5MzogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjE5NDogICAgICAgICAgICAgICAgICAqIA0KMTk1OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIG5iciAxNi1iaXQgdHJhY2UgbnVtYmVyIA0KMTk2OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGIgdW51c2VkIA0KMTk3OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHVpbnQzMl90IHAxIDE2LWJpdCBkYXRhMSBpbiBiWzE1OjBdDQoxOTg6ICAgICAgICAgICAgICAgICAgKiANCjE5OTogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCBhbHdheXMgVFJVRSANCjIwMDogICAgICAgICAgICAgICAgICAqIEBub3RlIEZ1bmN0aW9uIGltcGxlbWVudHMgY3JpdGljYWwgc2VjdGlvbi4gDQoyMDE6ICAgICAgICAgICAgICAgICAgKiBVc2VzIHRvb2wga2l0IF9fZGlzYWJsZV9pcnEoKS9fX2VuYWJsZV9pcnEoKSBwYWlyIHdoaWNoIG1heSB1c2UgDQoyMDI6ICAgICAgICAgICAgICAgICAgKiBwcml2aWxlZGdlZCBDb3J0ZXgtTXggaW5zdHJ1Y3Rpb25zLiANCjIwMzogICAgICAgICAgICAgICAgICAqLw0KMjA0OiAgICAgICAgICAgICAgICAgdm9pZCBURkRQVHJhY2UxICggdWludDE2X3QgbmJyLCB1aW50OF90IGIsIHVpbnQzMl90IHAxICkNCjIwNTogICAgICAgICAgICAgICAgIHsNCkJGRDA5NEEwICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5NEEyICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDk0QTQgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOTRBNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTRBOCAgICAgIDBDNjQgICBNT1ZFIFYxLCBBMApCRkQwOTRBQSAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQpCRkQwOTRBQyAgMDAyMEY4REUgICBTVyBBMiwgMzIoUzgpCkJGRDA5NEIwICAwMDE4Mzg3RSAgIFNIIFYxLCAyNChTOCkKQkZEMDk0QjQgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQoyMDY6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoyMDc6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXNhdmU7DQoyMDg6ICAgICAgICAgICAgICAgICAgICAgDQoyMDk6ICAgICAgICAgICAgICAgICAgICAgaXNhdmUgPSBtaXBzMzJyMl9kaXNfaW50cigpOw0KMjEwOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyMTE6ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpYjsNCjIxMjogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaGVhZGVyKG5icik7DQpCRkQwOTRCOCAgMDAxODM0NUUgICBMSFUgVjAsIDI0KFM4KQpCRkQwOTRCQyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOTRCRSAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXIKQkZEMDk0QzAgICAgICA0ODM2ICAgTFcgQVQsIDg4KFNQKQpCRkQwOTRDMiAgICAgIDBDMDAgICBOT1AKMjEzOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMSk7DQpCRkQwOTRDNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA5NEM4ICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDk0Q0EgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDk0Q0MgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQKQkZEMDk0Q0UgICAgICA0QjI0ICAgTFcgVDksIDE2KFNQKQpCRkQwOTREMCAgICAgIDBDMDAgICBOT1AKMjE0OiAgICAgICAgICAgICAgICAgDQoyMTU6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoyMTY6ICAgICAgICAgICAgICAgICAgICAgbWlwczMycjJfcmVzdG9yZV9pbnRyKGlzYXZlKTsNCjIxNzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjE4OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk0RDIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk0RDQgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwOTRENiAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA5NEQ4ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDk0REEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTREQyAgICAgIDBDMDAgICBOT1AKMjE5OiAgICAgICAgICAgICAgICAgDQoyMjA6ICAgICAgICAgICAgICAgICANCjIyMTogICAgICAgICAgICAgICAgIC8qKg0KMjIyOiAgICAgICAgICAgICAgICAgICogVEZEUFRyYWNlMiAtIFRSQUNFMjogdHJhbnNtaXQgMTYtYml0IHRyYWNlIG51bWJlciBsc2IgZmlyc3QgDQoyMjM6ICAgICAgICAgICAgICAgICAgKiBhbmQgdHdvIDE2LWJpdCBkYXRhIHBhcmFtZXRlcnMgbHNiIGZpcnN0IG92ZXIgVEZEUC4NCjIyNDogICAgICAgICAgICAgICAgICAqIA0KMjI1OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjI2OiAgICAgICAgICAgICAgICAgICogDQoyMjc6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmJyIHRyYWNlIG51bWJlcg0KMjI4OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGIgdW51c2VkDQoyMjk6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDEgMTYtYml0IGRhdGExIGluIGJbMTU6MF0NCjIzMDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50MzJfdCBwMiAxNi1iaXQgZGF0YTIgaW4gYlsxNTowXQ0KMjMxOiAgICAgICAgICAgICAgICAgICogDQoyMzI6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgYWx3YXlzIFRSVUUgDQoyMzM6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBVc2VzIHRvb2wga2l0IGZ1bmN0aW9ucyB0byBzYXZlL2Rpc2FibGUvcmVzdG9yZSANCjIzNDogICAgICAgICAgICAgICAgICAqICAgICAgIGludGVycnVwdHMgZm9yIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIG1heSB1c2UNCjIzNTogICAgICAgICAgICAgICAgICAqICAgICAgIHByaXZpbGVkZ2VkIGluc3RydWN0aW9ucy4NCjIzNjogICAgICAgICAgICAgICAgICAqLw0KMjM3OiAgICAgICAgICAgICAgICAgdm9pZCBURkRQVHJhY2UyICggdWludDE2X3QgbmJyLCB1aW50OF90IGIsIHVpbnQzMl90IHAxLCB1aW50MzJfdCBwMiApDQoyMzg6ICAgICAgICAgICAgICAgICB7DQpCRkQwOEE0NCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwOEE0NiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA4QTQ4ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDhBNEEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDhBNEMgICAgICAwQzY0ICAgTU9WRSBWMSwgQTAKQkZEMDhBNEUgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDhBNTAgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQpCRkQwOEE1NCAgMDAyNEY4RkUgICBTVyBBMywgMzYoUzgpCkJGRDA4QTU4ICAwMDE4Mzg3RSAgIFNIIFYxLCAyNChTOCkKQkZEMDhBNUMgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQoyMzk6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoyNDA6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXNhdmU7DQoyNDE6ICAgICAgICAgICAgICAgICAgICAgDQoyNDI6ICAgICAgICAgICAgICAgICAgICAgaXNhdmUgPSBtaXBzMzJyMl9kaXNfaW50cigpOw0KMjQzOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyNDQ6ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpYjsNCjI0NTogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaGVhZGVyKG5icik7DQpCRkQwOEE2MCAgMDAxODM0NUUgICBMSFUgVjAsIDI0KFM4KQpCRkQwOEE2NCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOEE2NiAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXIKQkZEMDhBNjggICAgICA0ODM2ICAgTFcgQVQsIDg4KFNQKQpCRkQwOEE2QSAgICAgIDBDMDAgICBOT1AKMjQ2OiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMSk7DQpCRkQwOEE2QyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA4QTcwICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDhBNzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDhBNzQgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQKQkZEMDhBNzYgICAgICA0QjI0ICAgTFcgVDksIDE2KFNQKQpCRkQwOEE3OCAgICAgIDBDMDAgICBOT1AKMjQ3OiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMik7DQpCRkQwOEE3QSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDA4QTdFICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDhBODAgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDhBODIgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQKQkZEMDhBODQgICAgICA0QjI0ICAgTFcgVDksIDE2KFNQKQpCRkQwOEE4NiAgICAgIDBDMDAgICBOT1AKMjQ4OiAgICAgICAgICAgICAgICAgDQoyNDk6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoyNTA6ICAgICAgICAgICAgICAgICAgICAgbWlwczMycjJfcmVzdG9yZV9pbnRyKGlzYXZlKTsNCjI1MTogICAgICAgICAgICAgICAgICNlbmRpZg0KMjUyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhBODggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDhBOEEgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwOEE4QyAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA4QThFICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDhBOTAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOEE5MiAgICAgIDBDMDAgICBOT1AKMjUzOiAgICAgICAgICAgICAgICAgDQoyNTQ6ICAgICAgICAgICAgICAgICANCjI1NTogICAgICAgICAgICAgICAgIC8qKg0KMjU2OiAgICAgICAgICAgICAgICAgICogVEZEUFRyYWNlMyAtIFRSQUNFMzogdHJhbnNtaXQgMTYtYml0IHRyYWNlIG51bWJlciBsc2IgZmlyc3QgDQoyNTc6ICAgICAgICAgICAgICAgICAgKiBhbmQgdGhyZWUgMTYtYml0IGRhdGEgcGFyYW1ldGVycyBsc2IgZmlyc3Qgb3ZlciBURkRQLg0KMjU4OiAgICAgICAgICAgICAgICAgICogDQoyNTk6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoyNjA6ICAgICAgICAgICAgICAgICAgKiANCjI2MTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuYnIgdHJhY2UgbnVtYmVyDQoyNjI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gYiB1bnVzZWQNCjI2MzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50MzJfdCBwMSAxNi1iaXQgZGF0YTEgaW4gYlsxNTowXQ0KMjY0OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHVpbnQzMl90IHAyIDE2LWJpdCBkYXRhMiBpbiBiWzE1OjBdDQoyNjU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDMgMTYtYml0IGRhdGEzIGluIGJbMTU6MF0NCjI2NjogICAgICAgICAgICAgICAgICAqIA0KMjY3OiAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IGFsd2F5cyBUUlVFIA0KMjY4OiAgICAgICAgICAgICAgICAgICogQG5vdGUgVXNlcyB0b29sIGtpdCBmdW5jdGlvbnMgdG8gc2F2ZS9kaXNhYmxlL3Jlc3RvcmUgDQoyNjk6ICAgICAgICAgICAgICAgICAgKiAgICAgICBpbnRlcnJ1cHRzIGZvciBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBtYXkgdXNlDQoyNzA6ICAgICAgICAgICAgICAgICAgKiAgICAgICBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbnMuIA0KMjcxOiAgICAgICAgICAgICAgICAgICovDQoyNzI6ICAgICAgICAgICAgICAgICB2b2lkIFRGRFBUcmFjZTMgKCB1aW50MTZfdCBuYnIsIHVpbnQ4X3QgYiwgdWludDMyX3QgcDEsIHVpbnQzMl90IHAyLCB1aW50MzJfdCBwMykNCjI3MzogICAgICAgICAgICAgICAgIHsNCkJGRDA4Mjc0ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA4Mjc2ICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDgyNzggICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwODI3QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODI3QyAgICAgIDBDNjQgICBNT1ZFIFYxLCBBMApCRkQwODI3RSAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQpCRkQwODI4MCAgMDAyMEY4REUgICBTVyBBMiwgMzIoUzgpCkJGRDA4Mjg0ICAwMDI0RjhGRSAgIFNXIEEzLCAzNihTOCkKQkZEMDgyODggIDAwMTgzODdFICAgU0ggVjEsIDI0KFM4KQpCRkQwODI4QyAgMDAxQzE4NUUgICBTQiBWMCwgMjgoUzgpCjI3NDogICAgICAgICAgICAgICAgICNpZmRlZiBFTkFCTEVfVFJBQ0VfTUFTS19JUlENCjI3NTogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpc2F2ZTsNCjI3NjogICAgICAgICAgICAgICAgICAgICANCjI3NzogICAgICAgICAgICAgICAgICAgICBpc2F2ZSA9IG1pcHMzMnIyX2Rpc19pbnRyKCk7DQoyNzg6ICAgICAgICAgICAgICAgICAjZW5kaWYgIA0KMjc5OiAgICAgICAgICAgICAgICAgICAgICh2b2lkKWI7DQoyODA6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X2hlYWRlcihuYnIpOw0KQkZEMDgyOTAgIDAwMTgzNDVFICAgTEhVIFYwLCAyNChTOCkKQkZEMDgyOTQgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDgyOTYgIDQ4MzY3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaGVhZGVyCkJGRDA4Mjk4ICAgICAgNDgzNiAgIExXIEFULCA4OChTUCkKQkZEMDgyOUEgICAgICAwQzAwICAgTk9QCjI4MTogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaHdvcmQocDEpOw0KQkZEMDgyOUMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQpCRkQwODJBMCAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGCkJGRDA4MkEyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4MkE0ICA0QjI0NzdFOCAgIEpBTFMgdGZkcF94bWl0X2h3b3JkCkJGRDA4MkE2ICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkKQkZEMDgyQTggICAgICAwQzAwICAgTk9QCjI4MjogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaHdvcmQocDIpOw0KQkZEMDgyQUEgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwODJBRSAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGCkJGRDA4MkIwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4MkIyICA0QjI0NzdFOCAgIEpBTFMgdGZkcF94bWl0X2h3b3JkCkJGRDA4MkI0ICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkKQkZEMDgyQjYgICAgICAwQzAwICAgTk9QCjI4MzogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaHdvcmQocDMpOw0KQkZEMDgyQjggIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwODJCQyAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGCkJGRDA4MkJFICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4MkMwICA0QjI0NzdFOCAgIEpBTFMgdGZkcF94bWl0X2h3b3JkCkJGRDA4MkMyICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkKQkZEMDgyQzQgICAgICAwQzAwICAgTk9QCjI4NDogICAgICAgICAgICAgICAgIA0KMjg1OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMjg2OiAgICAgICAgICAgICAgICAgICAgIGlmICggaXNhdmUgJiAoMXVsPDwwKSApDQoyODc6ICAgICAgICAgICAgICAgICAgICAgew0KMjg4OiAgICAgICAgICAgICAgICAgICAgICAgICBtaXBzMzJyMl9lbl9pbnRyKCk7DQoyODk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjkwOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyOTE6ICAgICAgICAgICAgICAgICB9DQpCRkQwODJDNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODJDOCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA4MkNBICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDgyQ0MgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwODJDRSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4MkQwICAgICAgMEMwMCAgIE5PUAoyOTI6ICAgICAgICAgICAgICAgICANCjI5MzogICAgICAgICAgICAgICAgIA0KMjk0OiAgICAgICAgICAgICAgICAgLyoqDQoyOTU6ICAgICAgICAgICAgICAgICAgKiBURkRQVHJhY2U0IC0gVFJBQ0UzOiB0cmFuc21pdCAxNi1iaXQgdHJhY2UgbnVtYmVyIGxzYiBmaXJzdCANCjI5NjogICAgICAgICAgICAgICAgICAqIGFuZCBmb3VyIDE2LWJpdCBkYXRhIHBhcmFtZXRlcnMgbHNiIGZpcnN0IG92ZXIgVEZEUC4NCjI5NzogICAgICAgICAgICAgICAgICAqIA0KMjk4OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjk5OiAgICAgICAgICAgICAgICAgICogDQozMDA6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmJyIHRyYWNlIG51bWJlcg0KMzAxOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGIgdW51c2VkDQozMDI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDEgMTYtYml0IGRhdGExIGluIGJbMTU6MF0NCjMwMzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50MzJfdCBwMiAxNi1iaXQgZGF0YTIgaW4gYlsxNTowXQ0KMzA0OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHVpbnQzMl90IHAzIDE2LWJpdCBkYXRhMyBpbiBiWzE1OjBdDQozMDU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDQgMTYtYml0IGRhdGE0IGluIGJbMTU6MF0NCjMwNjogICAgICAgICAgICAgICAgICAqIA0KMzA3OiAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IGFsd2F5cyBUUlVFIA0KMzA4OiAgICAgICAgICAgICAgICAgICogQG5vdGUgVXNlcyB0b29sIGtpdCBmdW5jdGlvbnMgdG8gc2F2ZS9kaXNhYmxlL3Jlc3RvcmUgDQozMDk6ICAgICAgICAgICAgICAgICAgKiAgICAgICBpbnRlcnJ1cHRzIGZvciBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBtYXkgdXNlDQozMTA6ICAgICAgICAgICAgICAgICAgKiAgICAgICBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbnMuIA0KMzExOiAgICAgICAgICAgICAgICAgICovDQozMTI6ICAgICAgICAgICAgICAgICB2b2lkIFRGRFBUcmFjZTQgKCB1aW50MTZfdCBuYnIsIHVpbnQ4X3QgYiwgdWludDMyX3QgcDEsIHVpbnQzMl90IHAyLCB1aW50MzJfdCBwMywgdWludDMyX3QgcDQpDQozMTM6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0MyOCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwN0MyQSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA3QzJDICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDdDMkUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDdDMzAgICAgICAwQzY0ICAgTU9WRSBWMSwgQTAKQkZEMDdDMzIgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDdDMzQgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQpCRkQwN0MzOCAgMDAyNEY4RkUgICBTVyBBMywgMzYoUzgpCkJGRDA3QzNDICAwMDE4Mzg3RSAgIFNIIFYxLCAyNChTOCkKQkZEMDdDNDAgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQozMTQ6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQozMTU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXNhdmU7DQozMTY6ICAgICAgICAgICAgICAgICAgICAgDQozMTc6ICAgICAgICAgICAgICAgICAgICAgaXNhdmUgPSBtaXBzMzJyMl9kaXNfaW50cigpOw0KMzE4OiAgICAgICAgICAgICAgICAgI2VuZGlmDQozMTk6ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpYjsNCjMyMDogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaGVhZGVyKG5icik7DQpCRkQwN0M0NCAgMDAxODM0NUUgICBMSFUgVjAsIDI0KFM4KQpCRkQwN0M0OCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwN0M0QSAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXIKQkZEMDdDNEMgICAgICA0ODM2ICAgTFcgQVQsIDg4KFNQKQpCRkQwN0M0RSAgICAgIDBDMDAgICBOT1AKMzIxOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMSk7DQpCRkQwN0M1MCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpCkJGRDA3QzU0ICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDdDNTYgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDdDNTggIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQKQkZEMDdDNUEgICAgICA0QjI0ICAgTFcgVDksIDE2KFNQKQpCRkQwN0M1QyAgICAgIDBDMDAgICBOT1AKMzIyOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMik7DQpCRkQwN0M1RSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDA3QzYyICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDdDNjQgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDdDNjYgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQKQkZEMDdDNjggICAgICA0QjI0ICAgTFcgVDksIDE2KFNQKQpCRkQwN0M2QSAgICAgIDBDMDAgICBOT1AKMzIzOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMyk7DQpCRkQwN0M2QyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA3QzcwICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDdDNzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDdDNzQgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQKQkZEMDdDNzYgICAgICA0QjI0ICAgTFcgVDksIDE2KFNQKQpCRkQwN0M3OCAgICAgIDBDMDAgICBOT1AKMzI0OiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwNCk7DQpCRkQwN0M3QSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpCkJGRDA3QzdFICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDdDODAgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDdDODIgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQKQkZEMDdDODQgICAgICA0QjI0ICAgTFcgVDksIDE2KFNQKQpCRkQwN0M4NiAgICAgIDBDMDAgICBOT1AKMzI1OiAgICAgICAgICAgICAgICAgICAgICAgDQozMjY6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQozMjc6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc2F2ZSAmICgxdWw8PDApICkNCjMyODogICAgICAgICAgICAgICAgICAgICB7DQozMjk6ICAgICAgICAgICAgICAgICAgICAgICAgIG1pcHMzMnIyX2VuX2ludHIoKTsNCjMzMDogICAgICAgICAgICAgICAgICAgICB9DQozMzE6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjMzMjogICAgICAgICAgICAgICAgIH0NCkJGRDA3Qzg4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3QzhBICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkKQkZEMDdDOEMgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQpCRkQwN0M4RSAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0CkJGRDA3QzkwICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDdDOTIgICAgICAwQzAwICAgTk9QCjMzMzogICAgICAgICAgICAgICAgIA0KMzM0OiAgICAgICAgICAgICAgICAgDQozMzU6ICAgICAgICAgICAgICAgICAvKiogDQozMzY6ICAgICAgICAgICAgICAgICAgKiAgVEZEUFRyYWNlMTEgLSBUcmFuc21pdCBvbmUgMzItYml0IGRhdGEgaXRlbSBvdmVyIFRGRFAgDQozMzc6ICAgICAgICAgICAgICAgICAgKiANCjMzODogICAgICAgICAgICAgICAgICAqICBAcGFyYW0gbmJyIHRyYWNlIG51bWJlcg0KMzM5OiAgICAgICAgICAgICAgICAgICogIEBwYXJhbSBiIHVudXNlZCANCjM0MDogICAgICAgICAgICAgICAgICAqICBAcGFyYW0gdWludDMyX3QgcDEgMzItYml0IGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQNCjM0MTogICAgICAgICAgICAgICAgICAqIA0KMzQyOiAgICAgICAgICAgICAgICAgICovDQozNDM6ICAgICAgICAgICAgICAgICB2b2lkIFRGRFBUcmFjZTExKCB1aW50MTZfdCBuYnIsIHVpbnQ4X3QgYiwgdWludDMyX3QgcDEpDQozNDQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTY4NCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwOTY4NiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA5Njg4ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDk2OEEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk2OEMgICAgICAwQzY0ICAgTU9WRSBWMSwgQTAKQkZEMDk2OEUgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDk2OTAgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQpCRkQwOTY5NCAgMDAxODM4N0UgICBTSCBWMSwgMjQoUzgpCkJGRDA5Njk4ICAwMDFDMTg1RSAgIFNCIFYwLCAyOChTOCkKMzQ1OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMzQ2OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlzYXZlOw0KMzQ3OiAgICAgICAgICAgICAgICAgICAgIA0KMzQ4OiAgICAgICAgICAgICAgICAgICAgIGlzYXZlID0gbWlwczMycjJfZGlzX2ludHIoKTsNCjM0OTogICAgICAgICAgICAgICAgICNlbmRpZiAgDQozNTA6ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpYjsNCjM1MTogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaGVhZGVyKG5icik7DQpCRkQwOTY5QyAgMDAxODM0NUUgICBMSFUgVjAsIDI0KFM4KQpCRkQwOTZBMCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOTZBMiAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXIKQkZEMDk2QTQgICAgICA0ODM2ICAgTFcgQVQsIDg4KFNQKQpCRkQwOTZBNiAgICAgIDBDMDAgICBOT1AKMzUyOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF93b3JkKHAxKTsNCkJGRDA5NkE4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDk2QUMgIDQ2N0E3N0U4ICAgSkFMUyB0ZmRwX3htaXRfd29yZApCRkQwOTZCMCAgICAgIDBDMDAgICBOT1AKMzUzOiAgICAgICAgICAgICAgICAgICAgIA0KMzU0OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMzU1OiAgICAgICAgICAgICAgICAgICAgIGlmICggaXNhdmUgJiAoMXVsPDwwKSApDQozNTY6ICAgICAgICAgICAgICAgICAgICAgew0KMzU3OiAgICAgICAgICAgICAgICAgICAgICAgICBtaXBzMzJyMl9lbl9pbnRyKCk7DQozNTg6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzU5OiAgICAgICAgICAgICAgICAgI2VuZGlmDQozNjA6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTZCMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTZCNCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA5NkI2ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDk2QjggICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwOTZCQSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5NkJDICAgICAgMEMwMCAgIE5PUAozNjE6ICAgICAgICAgICAgICAgICANCjM2MjogICAgICAgICAgICAgICAgIA0KMzYzOiAgICAgICAgICAgICAgICAgLyoqIA0KMzY0OiAgICAgICAgICAgICAgICAgICogIFRGRFBUcmFjZTEyIC0gVHJhbnNtaXQgdHdvIDMyLWJpdCBkYXRhIGl0ZW1zIG92ZXIgVEZEUCANCjM2NTogICAgICAgICAgICAgICAgICAqIA0KMzY2OiAgICAgICAgICAgICAgICAgICogIEBwYXJhbSBuYnIgdHJhY2UgbnVtYmVyDQozNjc6ICAgICAgICAgICAgICAgICAgKiAgQHBhcmFtIGIgdW51c2VkIA0KMzY4OiAgICAgICAgICAgICAgICAgICogIEBwYXJhbSB1aW50MzJfdCBwMSAzMi1iaXQgZGF0YTEgdG8gYmUgdHJhbnNtaXR0ZWQNCjM2OTogICAgICAgICAgICAgICAgICAqICBAcGFyYW0gdWludDMyX3QgcDIgMzItYml0IGRhdGEyIHRvIGJlIHRyYW5zbWl0dGVkDQozNzA6ICAgICAgICAgICAgICAgICAgKiANCjM3MTogICAgICAgICAgICAgICAgICAqLw0KMzcyOiAgICAgICAgICAgICAgICAgdm9pZCBURkRQVHJhY2UxMiggdWludDE2X3QgbmJyLCB1aW50OF90IGIsIHVpbnQzMl90IHAxLCB1aW50MzJfdCBwMiApDQozNzM6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTBCNCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwOTBCNiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA5MEI4ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDkwQkEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDkwQkMgICAgICAwQzY0ICAgTU9WRSBWMSwgQTAKQkZEMDkwQkUgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDkwQzAgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQpCRkQwOTBDNCAgMDAyNEY4RkUgICBTVyBBMywgMzYoUzgpCkJGRDA5MEM4ICAwMDE4Mzg3RSAgIFNIIFYxLCAyNChTOCkKQkZEMDkwQ0MgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQozNzQ6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQozNzU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXNhdmU7DQozNzY6ICAgICAgICAgICAgICAgICAgICAgDQozNzc6ICAgICAgICAgICAgICAgICAgICAgaXNhdmUgPSBtaXBzMzJyMl9kaXNfaW50cigpOw0KMzc4OiAgICAgICAgICAgICAgICAgI2VuZGlmICANCjM3OTogICAgICAgICAgICAgICAgICAgICAodm9pZCliOw0KMzgwOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9oZWFkZXIobmJyKTsNCkJGRDA5MEQwICAwMDE4MzQ1RSAgIExIVSBWMCwgMjQoUzgpCkJGRDA5MEQ0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA5MEQ2ICA0ODM2NzdFOCAgIEpBTFMgdGZkcF94bWl0X2hlYWRlcgpCRkQwOTBEOCAgICAgIDQ4MzYgICBMVyBBVCwgODgoU1ApCkJGRDA5MERBICAgICAgMEMwMCAgIE5PUAozODE6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X3dvcmQocDEpOw0KQkZEMDkwREMgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwOTBFMCAgNDY3QTc3RTggICBKQUxTIHRmZHBfeG1pdF93b3JkCkJGRDA5MEU0ICAgICAgMEMwMCAgIE5PUAozODI6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X3dvcmQocDIpOw0KQkZEMDkwRTYgIDAwMjRGQzlFICAgTFcgQTAsIDM2KFM4KQpCRkQwOTBFQSAgNDY3QTc3RTggICBKQUxTIHRmZHBfeG1pdF93b3JkCkJGRDA5MEVFICAgICAgMEMwMCAgIE5PUAozODM6ICAgICAgICAgICAgICAgICANCjM4NDogICAgICAgICAgICAgICAgICNpZmRlZiBFTkFCTEVfVFJBQ0VfTUFTS19JUlENCjM4NTogICAgICAgICAgICAgICAgICAgICBpZiAoIGlzYXZlICYgKDF1bDw8MCkgKQ0KMzg2OiAgICAgICAgICAgICAgICAgICAgIHsNCjM4NzogICAgICAgICAgICAgICAgICAgICAgICAgbWlwczMycjJfZW5faW50cigpOw0KMzg4OiAgICAgICAgICAgICAgICAgICAgIH0NCjM4OTogICAgICAgICAgICAgICAgICNlbmRpZg0KMzkwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDkwRjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDkwRjIgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwOTBGNCAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA5MEY2ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDkwRjggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTBGQSAgICAgIDBDMDAgICBOT1AKMzkxOiAgICAgICAgICAgICAgICAgDQozOTI6ICAgICAgICAgICAgICAgICAjZW5kaWYgLy8gI2lmZGVmIEVOQUJMRV9URkRQX1RSQUNFDQozOTM6ICAgICAgICAgICAgICAgICANCjM5NDogICAgICAgICAgICAgICAgIA0KMzk1OiAgICAgICAgICAgICAgICAgLyogZW5kIG1lYzE0eHhfdGZkcC5jICovDQozOTY6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMzk3OiAgICAgICAgICAgICAgICAgICovDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L21lYzE0eHhfc3lzdGVtLmMgIC0tLS0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBtZWMxNHh4X3N5c3RlbS5jDQoyMjogICAgICAgICAgICAgICAgICAgKk1FQzE0eHggc3lzdGVtIGZ1bmN0aW9ucw0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggU3lzdGVtDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgIA0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3N5c3RlbS5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9qdHZpYy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAvKioNCjQwOiAgICAgICAgICAgICAgICAgICAqIEluaXRpYWxpemUgdGhlIHN5c3RlbQ0KNDE6ICAgICAgICAgICAgICAgICAgICoNCjQyOiAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSAgbm9uZQ0KNDM6ICAgICAgICAgICAgICAgICAgICogQHJldHVybiBub25lDQo0NDogICAgICAgICAgICAgICAgICAgKg0KNDU6ICAgICAgICAgICAgICAgICAgICogQGJyaWVmICBTZXR1cCB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4NCjQ2OiAgICAgICAgICAgICAgICAgICAqICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgU3lzdGVtLg0KNDc6ICAgICAgICAgICAgICAgICAgICovDQo0ODogICAgICAgICAgICAgICAgICB2b2lkIFN5c3RlbUluaXQgKHZvaWQpDQo0OTogICAgICAgICAgICAgICAgICB7DQpCRkQwOUUyMCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5RTIyICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUUyNCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo1MDogICAgICAgICAgICAgICAgICAgICAgDQo1MTogICAgICAgICAgICAgICAgICAgICAgUENSLT5QUk9DX0NMT0NLX0NOVFJMID0gKFBDUl9DTE9DS19ESVZJREVSKTsNCkJGRDA5RTI2ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDA5RTJBICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1NgpCRkQwOUUyRSAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwOUUzMCAgICAgIEU5QTggICBTVyBWMSwgMzIoVjApCjUyOiAgICAgICAgICAgICAgICAgICAgICANCjUzOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5RTMyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RTM0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUUzNiAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlFMzggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUUzQSAgICAgIDBDMDAgICBOT1AKNTQ6ICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTU6ICAgICAgICAgICAgICAgICAgDQo1NjogICAgICAgICAgICAgICAgICB1aW50MzJfdCBzeXNfY29kZV9zcmFtX2Jhc2Uodm9pZCkNCjU3OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA5RUFDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDlFQUUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5RUIwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjU4OiAgICAgICAgICAgICAgICAgICNpZiBNRUMxNFhYX0RFVklEICA9PSBNRUMxNDE4X0RFVklEDQo1OTogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoTUVDMTQxOF9JQ09ERV9QU1JBTV9CQVNFKTsNCjYwOiAgICAgICAgICAgICAgICAgICNlbHNlDQo2MTogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoTUVDMTQwNF9JQ09ERV9QU1JBTV9CQVNFKTsNCkJGRDA5RUIyICAxRkQwNDFBMiAgIExVSSBWMCwgMHgxRkQwCkJGRDA5RUI0ICAwRkJFMUZEMCAgIExCIFM4LCA0MDMwKFMwKQo2MjogICAgICAgICAgICAgICAgICAjZW5kaWYNCjYzOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5RUI2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RUI4ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUVCQSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlFQkMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUVCRSAgICAgIDBDMDAgICBOT1AKNjQ6ICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNjU6ICAgICAgICAgICAgICAgICAgDQo2NjogICAgICAgICAgICAgICAgICB1aW50OF90IHN5c192YWxpZF9zcmFtX2FkZHIodm9pZCAqIGNvbnN0IHApDQo2NzogICAgICAgICAgICAgICAgICB7DQpCRkQwOENBOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOENBQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4Q0FDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDhDQUUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDhDQjAgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQo2ODogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmFzZTsNCjY5OiAgICAgICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gc3lzX2NvZGVfc3JhbV9iYXNlKCk7DQpCRkQwOENCNCAgNEY1Njc3RTggICBKQUxTIHN5c19jb2RlX3NyYW1fYmFzZQpCRkQwOENCNiAgICAgIDRGNTYgICBBRERJVSBLMCwgSzAsIC01CkJGRDA4Q0I4ICAgICAgMEMwMCAgIE5PUApCRkQwOENCQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjcxOiAgICAgICAgICAgICAgICAgICAgICAgICAgDQo3MjogICAgICAgICAgICAgICAgICAgICAgaWYgKCh1aW50MzJfdClwID49IGJhc2UpIHsNCkJGRDA4Q0JFICAwMDIwRkM3RSAgIExXIFYxLCAzMihTOCkKQkZEMDhDQzIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOENDNiAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjAKQkZEMDhDQzggIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2CkJGRDA4Q0NBICAwMDBCNDBBMiAgIEJORVpDIFYwLCAweEJGRDA4Q0U0CjczOiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1aW50MzJfdClwIDwgKE1FQzE0WFhfRENPREVfVlNSQU1fTElNSVQpKSB7DQpCRkQwOENDRSAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDA4Q0QyICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA4Q0Q0ICAwMDQzQkZEMiAgIExEQzEgRjMwLCA2NyhTMikKQkZEMDhDRDYgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA4Q0Q4ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwOENEQSAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOENFNAo3NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMXU7DQpCRkQwOENERSAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwOENFMCAgICAgIENDMDIgICBCIDB4QkZEMDhDRTYKQkZEMDhDRTIgICAgICAwQzAwICAgTk9QCjc1OiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KNzY6ICAgICAgICAgICAgICAgICAgICAgIH0NCjc3OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHU7DQpCRkQwOENFNCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjc4OiAgICAgICAgICAgICAgICAgIH0NCkJGRDA4Q0U2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4Q0U4ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDhDRUEgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwOENFQyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4Q0VFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDhDRjAgICAgICAwQzAwICAgTk9QCjc5OiAgICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjgwOiAgICAgICAgICAgICAgICAgIA0KODE6ICAgICAgICAgICAgICAgICAgdWludDhfdCBzeXNfdmFsaWRfc3JhbV9yYW5nZSh2b2lkICogY29uc3QgcCwgY29uc3QgdWludDMyX3QgYnl0ZV9sZW4pDQo4MjogICAgICAgICAgICAgICAgICB7DQpCRkQwODg1OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODg1QSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4ODVDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDg4NUUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDg4NjAgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwODg2NCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpCjgzOiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiYXNlOw0KODQ6ICAgICAgICAgICAgICAgICAgDQo4NTogICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHN5c19jb2RlX3NyYW1fYmFzZSgpOw0KQkZEMDg4NjggIDRGNTY3N0U4ICAgSkFMUyBzeXNfY29kZV9zcmFtX2Jhc2UKQkZEMDg4NkEgICAgICA0RjU2ICAgQURESVUgSzAsIEswLCAtNQpCRkQwODg2QyAgICAgIDBDMDAgICBOT1AKQkZEMDg4NkUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQo4NjogICAgICAgICAgICAgICAgICANCjg3OiAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVpbnQzMl90KXAgPj0gYmFzZSkgew0KQkZEMDg4NzIgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQpCRkQwODg3NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4ODdBICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwODg3QyAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDg4N0UgIDAwMEU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg4OUUKODg6ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCh1aW50MzJfdClwICsgYnl0ZV9sZW4pIDwgKE1FQzE0WFhfRENPREVfVlNSQU1fTElNSVQpKSB7DQpCRkQwODg4MiAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDA4ODg2ICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDg4OEEgICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwCkJGRDA4ODhDICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDA4ODhFICAwMDQzQkZEMiAgIExEQzEgRjMwLCA2NyhTMikKQkZEMDg4OTAgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwCkJGRDA4ODkyICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMApCRkQwODg5NCAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODg5RQo4OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMXU7DQpCRkQwODg5OCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwODg5QSAgICAgIENDMDIgICBCIDB4QkZEMDg4QTAKQkZEMDg4OUMgICAgICAwQzAwICAgTk9QCjkwOiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KOTE6ICAgICAgICAgICAgICAgICAgICAgIH0NCjkyOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHU7DQpCRkQwODg5RSAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjkzOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA4OEEwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4OEEyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDg4QTQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwODhBNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4OEE4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDg4QUEgICAgICAwQzAwICAgTk9QCjk0OiAgICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjk1OiAgICAgICAgICAgICAgICAgIA0KOTY6ICAgICAgICAgICAgICAgICAgdm9pZCBzeXNfY3B1X2VuX3RpbWVyKHVpbnQzMl90IGNvdW50cywgdWludDhfdCBpZW4pDQo5NzogICAgICAgICAgICAgICAgICB7DQpCRkQwNzU3MCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwNzU3MiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA3NTc0ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDc1NzYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDc1NzggIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQpCRkQwNzU3QSAgMEM0NTAwMTggICBDTVAuTFQuUEggWkVSTywgVDgKQkZEMDc1N0MgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDc1N0UgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQo5ODogICAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBDb3VudGVyIGJ5IHNldHRpbmcgREMgYml0IHRvIDEgaW4gQ1AwLkNhdXNlICovDQo5OTogICAgICAgICAgICAgICAgICAgICAgX0NQMF9CSVNfQ0FVU0UoX0NQMF9DQVVTRV9EQ19NQVNLKTsNCkJGRDA3NTgyICAwODAwNDFBMiAgIExVSSBWMCwgMHg4MDAKQkZEMDc1ODQgICAgICAwODAwICAgTEJVIFMwLCAwKFMwKQpCRkQwNzU4NiAgMDBGQzAwNkQgICBNRkMwIFYxLCBDYXVzZQpCRkQwNzU4OCAgMEMwMDAwRkMgICBTTEwgQTMsIEdQLCAxCkJGRDA3NThBICAgICAgMEMwMCAgIE5PUApCRkQwNzU4QyAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQpCRkQwNzU4RSAgMDJGQzAwNEQgICBNVEMwIFYwLCBDYXVzZQpCRkQwNzU5MCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3NTkyICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3NTk0ICBGQzVFMTgwMCAgIFNCIFpFUk8sIC05MzAoWkVSTykKMTAwOiAgICAgICAgICAgICAgICAgDQoxMDE6ICAgICAgICAgICAgICAgICAgICAgX0NQMF9TRVRfQ09VTlQoY291bnRzKTsNCkJGRDA3NTk2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDc1OUEgIDAyRkMwMDQ5ICAgTVRDMCBWMCwgQ291bnQKQkZEMDc1OUMgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNzU5RSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNzVBMCAgMTQ1RTE4MDAgICBTQiBaRVJPLCA1MjE0KFpFUk8pCjEwMjogICAgICAgICAgICAgICAgICAgICBpZiAoaWVuKSB7DQpCRkQwNzVBMiAgMDAxQzE0NUUgICBMQlUgVjAsIDI4KFM4KQpCRkQwNzVBNiAgMDAwODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNzVCQQpCRkQwNzVBOCAgRUUxMDAwMDggICBNVUwgU1AsIFQwLCBaRVJPCjEwMzogICAgICAgICAgICAgICAgICAgICAgICAganR2aWNfZW5fc291cmNlKE1FQzE0eHhfR0lSUTI0X0lELCAwLCAwKTsNCkJGRDA3NUFBICAgICAgRUUxMCAgIExJIEEwLCAxNgpCRkQwNzVBQyAgICAgIDBDQTAgICBNT1ZFIEExLCBaRVJPCkJGRDA3NUFFICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8KQkZEMDc1QjAgIDNBN0M3N0U4ICAgSkFMUyBqdHZpY19lbl9zb3VyY2UKQkZEMDc1QjIgIDBDMDAzQTdDICAgU0ggUzMsIDMwNzIoR1ApCkJGRDA3NUI0ICAgICAgMEMwMCAgIE5PUApCRkQwNzVCNiAgICAgIENDMDcgICBCIDB4QkZEMDc1QzYKQkZEMDc1QjggICAgICAwQzAwICAgTk9QCjEwNDogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMTA1OiAgICAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNF9JRCwgMCwgMSk7DQpCRkQwNzVCQSAgICAgIEVFMTAgICBMSSBBMCwgMTYKQkZEMDc1QkMgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTwpCRkQwNzVCRSAgICAgIEVGMDEgICBMSSBBMiwgMQpCRkQwNzVDMCAgM0E0MDc3RTggICBKQUxTIGp0dmljX2Rpc19jbHJfc291cmNlCkJGRDA3NUMyICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pCkJGRDA3NUM0ICAgICAgMEMwMCAgIE5PUAoxMDY6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTA3OiAgICAgICAgICAgICAgICAgDQoxMDg6ICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIENvdW50ZXIgKi8NCjEwOTogICAgICAgICAgICAgICAgICAgICBfQ1AwX0JJQ19DQVVTRShfQ1AwX0NBVVNFX0RDX01BU0spOw0KQkZEMDc1QzYgIDA4MDA0MUEyICAgTFVJIFYwLCAweDgwMApCRkQwNzVDOCAgICAgIDA4MDAgICBMQlUgUzAsIDAoUzApCkJGRDA3NUNBICAwMEZDMDA2RCAgIE1GQzAgVjEsIENhdXNlCkJGRDA3NUNDICAwQzAwMDBGQyAgIFNMTCBBMywgR1AsIDEKQkZEMDc1Q0UgICAgICAwQzAwICAgTk9QCkJGRDA3NUQwICAgICAgNDQxMiAgIE5PVDE2IFYwLCBWMApCRkQwNzVEMiAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDc1RDQgIDAyRkMwMDREICAgTVRDMCBWMCwgQ2F1c2UKQkZEMDc1RDYgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNzVEOCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNzVEQSAgMEZCRTE4MDAgICBTQiBaRVJPLCA0MDMwKFpFUk8pCjExMDogICAgICAgICAgICAgICAgIA0KMTExOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDc1REMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc1REUgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQpCRkQwNzVFMCAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApCkJGRDA3NUUyICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQKQkZEMDc1RTQgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNzVFNiAgICAgIDBDMDAgICBOT1AKMTEyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTEzOiAgICAgICAgICAgICAgICAgDQoxMTQ6ICAgICAgICAgICAgICAgICB1aW50MzJfdCBjcHVfbWljcm9zZWNvbmRfY291bnQodm9pZCkNCjExNTogICAgICAgICAgICAgICAgIHsNCkJGRDA5RUMwICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDlFQzIgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5RUM0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjExNjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NQMF9HRVRfQ09VTlQoKTsNCkJGRDA5RUM2ICAwMEZDMDA0OSAgIE1GQzAgVjAsIENvdW50CjExNzogICAgICAgICAgICAgICAgIH0NCkJGRDA5RUNBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RUNDICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUVDRSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlFRDAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUVEMiAgICAgIDBDMDAgICBOT1AKMTE4OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTE5OiAgICAgICAgICAgICAgICAgDQoxMjA6ICAgICAgICAgICAgICAgICAvKg0KMTIxOiAgICAgICAgICAgICAgICAgICogQXNzdW1lcyBNMTRLIENQVSBpcyBydW5uaW5nIGF0IGNsb2NrIGRpdmlkZSBieSAxICg0OE1IeikNCjEyMjogICAgICAgICAgICAgICAgICAqIDF1cyA9IDQ4IGNvdW50cy4gDQoxMjM6ICAgICAgICAgICAgICAgICAgKiBOT1RFOiBXZSBuZWVkIHRvIGZpbmQgb3V0IGZyb20gREUgd2hhdCB0aGUgcGlwZWxpbmUgcmF0ZSBpcy4gDQoxMjQ6ICAgICAgICAgICAgICAgICAgKiBNMTRLIGNvdW50ZXIgdGlja3MgYXQgcGlwZWxpbmUgcmF0ZS4gDQoxMjU6ICAgICAgICAgICAgICAgICAgKi8NCjEyNjogICAgICAgICAgICAgICAgIHVpbnQzMl90IGNwdV9taWNyb3NlY29uZF9pbnRlcnZhbCh1aW50MzJfdCBzdGFydF9jb3VudCkNCjEyNzogICAgICAgICAgICAgICAgIHsNCkJGRDA3RENDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDA3RENFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDdERDAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDdERDIgIDAwMTBGODlFICAgU1cgQTAsIDE2KFM4KQoxMjg6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY3Vycl9jb3VudDsNCjEyOTogICAgICAgICAgICAgICAgICAgICANCjEzMDogICAgICAgICAgICAgICAgICAgICBjdXJyX2NvdW50ID0gX0NQMF9HRVRfQ09VTlQoKTsNCkJGRDA3REQ2ICAwMEZDMDA0OSAgIE1GQzAgVjAsIENvdW50CkJGRDA3RERBICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQoxMzE6ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJfY291bnQgPj0gc3RhcnRfY291bnQpIHsNCkJGRDA3RERFICAwMDAwRkM3RSAgIExXIFYxLCAwKFM4KQpCRkQwN0RFMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA3REU2ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMApCRkQwN0RFOCAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYKQkZEMDdERUEgIDAwMEY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDdFMEMKMTMyOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChjdXJyX2NvdW50IC0gc3RhcnRfY291bnQpID4+IDQpLyAzdWw7DQpCRkQwN0RFRSAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkKQkZEMDdERjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwN0RGNiAgICAgIDA1MjcgICBTVUJVIFYwLCBWMSwgVjAKQkZEMDdERjggICAgICAyNUE5ICAgU1JMIFYxLCBWMCwgNApCRkQwN0RGQSAgICAgIEVEMDMgICBMSSBWMCwgMwpCRkQwN0RGQyAgQkIzQzAwNDMgICBESVZVIFYwLCBWMQpCRkQwN0RGRSAgMDAwMkJCM0MgICBTREMxIEYyNSwgMihHUCkKQkZEMDdFMDAgIDcwM0MwMDAyICAgVEVRIFYwLCBaRVJPCkJGRDA3RTAyICA0NjAzNzAzQyAgIFhPUkkgQVQsIEdQLCAxNzkyMwpCRkQwN0UwNCAgICAgIDQ2MDMgICBNRkhJIFYxCkJGRDA3RTA2ICAgICAgNDY0MiAgIE1GTE8gVjAKQkZEMDdFMDggICAgICBDQzBGICAgQiAweEJGRDA3RTI4CkJGRDA3RTBBICAgICAgMEMwMCAgIE5PUAoxMzM6ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCjEzNDogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoKDB4RkZGRkZGRkZ1bCAtIHN0YXJ0X2NvdW50KSArIGN1cnJfY291bnQpID4+IDQpIC8gM3VsOw0KQkZEMDdFMEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwN0UxMCAgICAgIDQ0MUEgICBOT1QxNiBWMSwgVjAKQkZEMDdFMTIgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA3RTE2ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwN0UxOCAgICAgIDI1QTkgICBTUkwgVjEsIFYwLCA0CkJGRDA3RTFBICAgICAgRUQwMyAgIExJIFYwLCAzCkJGRDA3RTFDICBCQjNDMDA0MyAgIERJVlUgVjAsIFYxCkJGRDA3RTFFICAwMDAyQkIzQyAgIFNEQzEgRjI1LCAyKEdQKQpCRkQwN0UyMCAgNzAzQzAwMDIgICBURVEgVjAsIFpFUk8KQkZEMDdFMjIgIDQ2MDM3MDNDICAgWE9SSSBBVCwgR1AsIDE3OTIzCkJGRDA3RTI0ICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDdFMjYgICAgICA0NjQyICAgTUZMTyBWMAoxMzU6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTM2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDdFMjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDdFMkEgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwN0UyQyAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2CkJGRDA3RTJFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDdFMzAgICAgICAwQzAwICAgTk9QCjEzNzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEzODogICAgICAgICAgICAgICAgIA0KMTM5OiAgICAgICAgICAgICAgICAgLyogZW5kIG1lYzE0eHhfc3lzdGVtLmMgKi8NCjE0MDogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxNDE6ICAgICAgICAgICAgICAgICAgKi8NCjE0MjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9tZWMxNHh4X2p0dmljLmMgIC0tLS0tLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiCpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIG1lYzE0eHhfanR2aWMuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpNRUMxNHh4IEpUVklDDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBQZXJpcGhlcmFscyBKVFZJQw0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfanR2aWMuaCINCjMzOiAgICAgICAgICAgICAgICAgIA0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICB2b2lkIGp0dmljX2luaXQoY29uc3QgSlRWSUNfQ0ZHICppaF90YWJsZSwgdWludDMyX3QgZGlzYWdnX2JpdG1hcCwgdWludDMyX3QgY2ZsYWdzKQ0KMzY6ICAgICAgICAgICAgICAgICAgew0KQkZEMDM2NDQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYKQkZEMDM2NDYgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwMzY0OCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwMzY0QSAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpCkJGRDAzNjRFICAwMDE0RjhCRSAgIFNXIEExLCAyMChTOCkKQkZEMDM2NTIgIDAwMThGOERFICAgU1cgQTIsIDI0KFM4KQozNzogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZDsNCjM4OiAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGksIGosIHBpZHg7DQozOTogICAgICAgICAgICAgICAgICANCjQwOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19DVFJMLT53ID0gKDF1bCA8PCAwKTsgIC8vIFNvZnQtUmVzZXQNCkJGRDAzNjU2ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDAzNjU4ICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkKQkZEMDM2NUEgIEM1MDA1MDQyICAgT1JJIFYwLCBWMCwgLTE1MTA0CkJGRDAzNjVFICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDAzNjYwICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0MTogICAgICAgICAgICAgICAgICAgICAgZCA9IDB1bDsNCkJGRDAzNjYyICAwMDAwRjgxRSAgIFNXIFpFUk8sIDAoUzgpCjQyOiAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNmbGFncyAmICgxdWwgPDwgMCkgKSANCkJGRDAzNjY2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDM2NkEgICAgICAyRDIxICAgQU5ESSBWMCwgVjAsIDB4MQpCRkQwMzY2QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwMzY2RSAgMDAwNDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzY3QQpCRkQwMzY3MCAgMzA0MDAwMDQgICBTUkwgWkVSTywgQTAsIDYKNDM6ICAgICAgICAgICAgICAgICAgICAgIHsNCjQ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICgxdWwgPDwgOCk7DQpCRkQwMzY3MiAgMDEwMDMwNDAgICBBRERJVSBWMCwgWkVSTywgMjU2CkJGRDAzNjc2ICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQo0NTogICAgICAgICAgICAgICAgICAgICAgfQ0KNDY6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0NUUkwtPncgPSBkOyAgLy8gSFcgZG9lcyBub3QgYXV0b21hdGljYWxseSBjbGVhciBTb2Z0LVJlc2V0DQpCRkQwMzY3QSAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwMzY3QyAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDAzNjdFICBDNTAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTEwNApCRkQwMzY4MiAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkKQkZEMDM2ODYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjQ3OiAgICAgICAgICAgICAgICAgIA0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDB1OyBpIDwgKE1FQzE0eHhfTlVNX0pUVklDX0lOVFMpOyBpKyspIHsNCkJGRDAzNjg4ICAwMDA0MTgxRSAgIFNCIFpFUk8sIDQoUzgpCkJGRDAzNjhDICAgICAgQ0M1QyAgIEIgMHhCRkQwMzc0NgpCRkQwMzY4RSAgICAgIDBDMDAgICBOT1AKQkZEMDM3M0MgIDAwMDQxNDVFICAgTEJVIFYwLCA0KFM4KQpCRkQwMzc0MCAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDEKQkZEMDM3NDIgIDAwMDQxODVFICAgU0IgVjAsIDQoUzgpCkJGRDAzNzQ2ICAwMDA0MTQ1RSAgIExCVSBWMCwgNChTOCkKQkZEMDM3NEEgIDAwMTNCMDQyICAgU0xUSVUgVjAsIFYwLCAxOQpCRkQwMzc0RSAgRkY5RjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzY5MApCRkQwMzc1MCAgNDFBMkZGOUYgICBMVyBHUCwgMTY4MDIoUkEpCjQ5OiAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkeCA9IGkgPDwgMjsNCkJGRDAzNjkwICAwMDA0MTQ1RSAgIExCVSBWMCwgNChTOCkKQkZEMDM2OTQgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMzY5NiAgMDAwNjE4NUUgICBTQiBWMCwgNihTOCkKNTA6ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwdTsgaiA8IDR1OyBqKyspIHsNCkJGRDAzNjlBICAwMDA1MTgxRSAgIFNCIFpFUk8sIDUoUzgpCkJGRDAzNjlFICAgICAgQ0MxRiAgIEIgMHhCRkQwMzZERQpCRkQwMzZBMCAgICAgIDBDMDAgICBOT1AKQkZEMDM2RDQgIDAwMDUxNDVFICAgTEJVIFYwLCA1KFM4KQpCRkQwMzZEOCAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDEKQkZEMDM2REEgIDAwMDUxODVFICAgU0IgVjAsIDUoUzgpCkJGRDAzNkRFICAwMDA1MTQ1RSAgIExCVSBWMCwgNShTOCkKQkZEMDM2RTIgIDAwMDRCMDQyICAgU0xUSVUgVjAsIFYwLCA0CkJGRDAzNkU2ICBGRkRDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzNkEyCkJGRDAzNkU4ICAxNDVFRkZEQyAgIExXIFM4LCA1MjE0KEdQKQo1MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19QUkktPlJFRzMyW3BpZHgral0gPSAodWludDMyX3QpKGloX3RhYmxlW2ldLnByaVtqXSk7DQpCRkQwMzZBMiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwMzZBNCAgNTA4MkJGRkYgICBMREMxIEYzMSwgMjA2MTAoUkEpCkJGRDAzNkE2ICBDMzAwNTA4MiAgIE9SSSBBMCwgVjAsIC0xNTYxNgpCRkQwMzZBQSAgMDAwNjE0N0UgICBMQlUgVjEsIDYoUzgpCkJGRDAzNkFFICAwMDA1MTQ1RSAgIExCVSBWMCwgNShTOCkKQkZEMDM2QjIgICAgICAwNkE2ICAgQUREVSBBMSwgVjEsIFYwCkJGRDAzNkI0ICAwMDA0MTQ1RSAgIExCVSBWMCwgNChTOCkKQkZEMDM2QjggICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMzZCQSAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDAzNkJDICAgICAgMDUzNCAgIEFERFUgVjAsIFYwLCBWMQpCRkQwMzZCRSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDAzNkMyICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMApCRkQwMzZDNCAgMDAwNTE0NUUgICBMQlUgVjAsIDUoUzgpCkJGRDAzNkM4ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDM2Q0EgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAzNkNDICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQpCRkQwMzZDRSAgICAgIDI1NTQgICBTTEwgVjAsIEExLCAyCkJGRDAzNkQwICAgICAgMDUyOCAgIEFERFUgVjAsIEEwLCBWMApCRkQwMzZEMiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNTI6ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo1MzogICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBpaF90YWJsZVtpXS5pc3JfYWRkciAmIH4oMXVsIDw8IDApOw0KQkZEMDM2RUEgIDAwMDQxNDVFICAgTEJVIFYwLCA0KFM4KQpCRkQwMzZFRSAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyCkJGRDAzNkYwICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDIKQkZEMDM2RjIgICAgICAwNTM0ICAgQUREVSBWMCwgVjAsIFYxCkJGRDAzNkY0ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDM2RjggICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwCkJGRDAzNkZBICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQpCRkQwMzZGQyAgRkZGRTMwNDAgICBBRERJVSBWMCwgWkVSTywgLTIKQkZEMDM2RkUgIDQ0OTNGRkZFICAgTFcgUkEsIDE3NTU1KFM4KQpCRkQwMzcwMCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDM3MDIgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCjU0OiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2FnZ19iaXRtYXAgJiAoMXVsIDw8IGkpKSB7DQpCRkQwMzcwNiAgMDAwNDE0NUUgICBMQlUgVjAsIDQoUzgpCkJGRDAzNzBBICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkKQkZEMDM3MEUgIDEwNTAwMDYyICAgU1JMViBWMCwgVjAsIFYxCkJGRDAzNzEwICAyRDIxMTA1MCAgIEFEREkgVjAsIFMwLCAxMTU1MwpCRkQwMzcxMiAgICAgIDJEMjEgICBBTkRJIFYwLCBWMCwgMHgxCkJGRDAzNzE0ICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDAzNzE2ICAwMDA2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNzI2CjU1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgfD0gKDF1bCA8PCAwKTsgICAgLy8gZGlzLWFnZ3JlZ2F0ZSB0aGlzIEdJUlENCkJGRDAzNzFBICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQpCRkQwMzcxRSAgMDAwMTUwNDIgICBPUkkgVjAsIFYwLCAxCkJGRDAzNzIyICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQo1NjogICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjU3OiAgICAgICAgICAgICAgICAgICAgICAgICAgSlRWSUNfQUNUUkwtPlJFRzMyW2ldID0gZDsNCkJGRDAzNzI2ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDAzNzI4ICA1MDYyQkZGRiAgIExEQzEgRjMxLCAyMDU3OChSQSkKQkZEMDM3MkEgIEMyMDA1MDYyICAgT1JJIFYxLCBWMCwgLTE1ODcyCkJGRDAzNzJFICAwMDA0MTQ1RSAgIExCVSBWMCwgNChTOCkKQkZEMDM3MzIgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMgpCRkQwMzczNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDM3MzYgIDAwMDBGQzdFICAgTFcgVjEsIDAoUzgpCkJGRDAzNzNBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo1ODogICAgICAgICAgICAgICAgICAgICAgfQ0KNTk6ICAgICAgICAgICAgICAgICAgICAgIA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX1NFVC0+dyA9IDB4RkZGRkZGRkZ1bDsgICAvLyBFbmFibGUgR0lSUTA4IC0gR0lSUTE4IChhbGwpDQpCRkQwMzc1MiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwMzc1NCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDAzNzU2ICBDNTA4NTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5NgpCRkQwMzc1QSAgICAgIEVERkYgICBMSSBWMSwgLTEKQkZEMDM3NUMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjYxOiAgICAgICAgICAgICAgICAgICAgICANCjYyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDAzNzVFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDAzNzYwICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDM3NjIgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwMzc2NCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDAzNzY2ICAgICAgMEMwMCAgIE5PUAo2MzogICAgICAgICAgICAgICAgICANCjY0OiAgICAgICAgICAgICAgICAgIC8qIENsZWFyIEpUVklDIEdJUlFuIHNvdXJjZSBiaXQNCjY1OiAgICAgICAgICAgICAgICAgICAqDQo2NjogICAgICAgICAgICAgICAgICAgKi8NCjY3OiAgICAgICAgICAgICAgICAgIHZvaWQganR2aWNfY2xyX3NvdXJjZSh1aW50OF90IGdpcnFfbnVtLCB1aW50OF90IGJpdF9udW0pDQo2ODogICAgICAgICAgICAgICAgICB7DQpCRkQwODlGNCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA4OUY2ICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwODlGOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODlGQSAgICAgIDBDNjQgICBNT1ZFIFYxLCBBMApCRkQwODlGQyAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQpCRkQwODlGRSAgMDAwODE4N0UgICBTQiBWMSwgOChTOCkKQkZEMDhBMDIgIDAwMEMxODVFICAgU0IgVjAsIDEyKFM4KQo2OTogICAgICAgICAgICAgICAgICAgICAgaWYgKGdpcnFfbnVtIDwgKE1FQzE0eHhfTlVNX0pUVklDX0lOVFMpKQ0KQkZEMDhBMDYgIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQpCRkQwOEEwQSAgMDAxM0IwNDIgICBTTFRJVSBWMCwgVjAsIDE5CkJGRDA4QTBFICAwMDEzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4QTM4CjcwOiAgICAgICAgICAgICAgICAgICAgICB7DQo3MTogICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9udW0gJj0gMHgxRnU7DQpCRkQwOEExMiAgMDAwQzE0NUUgICBMQlUgVjAsIDEyKFM4KQpCRkQwOEExNiAgICAgIDJEMjkgICBBTkRJIFYwLCBWMCwgMHgxRgpCRkQwOEExOCAgMDAwQzE4NUUgICBTQiBWMCwgMTIoUzgpCjcyOiAgICAgICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tnaXJxX251bV0uU09VUkNFID0gKDF1bCA8PCBiaXRfbnVtKTsNCkJGRDA4QTFDICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA4QTFFICA1MDgyQkZGRiAgIExEQzEgRjMxLCAyMDYxMChSQSkKQkZEMDhBMjAgIEMwMDA1MDgyICAgT1JJIEEwLCBWMCwgLTE2Mzg0CkJGRDA4QTI0ICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkKQkZEMDhBMjggIDAwMEMxNDdFICAgTEJVIFYxLCAxMihTOCkKQkZEMDhBMkMgICAgICBFRTgxICAgTEkgQTEsIDEKQkZEMDhBMkUgIDE4MTAwMEEzICAgU0xMViBWMSwgVjEsIEExCkJGRDA4QTMwICAyNTI4MTgxMCAgIFNCIFpFUk8sIDk1MTIoUzApCkJGRDA4QTMyICAgICAgMjUyOCAgIFNMTCBWMCwgVjAsIDQKQkZEMDhBMzQgICAgICAwNTI4ICAgQUREVSBWMCwgQTAsIFYwCkJGRDA4QTM2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo3MzogICAgICAgICAgICAgICAgICAgICAgfQ0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDhBMzggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDhBM0EgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA4QTNDICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOEEzRSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4QTQwICAgICAgMEMwMCAgIE5PUAo3NTogICAgICAgICAgICAgICAgICANCjc2OiAgICAgICAgICAgICAgICAgIA0KNzc6ICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBHSVJRbiBzb3VyY2Ugd2l0aCBvcHRpb25hbCBjbGVhcmluZyBvZiBzb3VyY2UuDQo3ODogICAgICAgICAgICAgICAgICAgKiBnaXJxX251bSA9IFswLCAxOF0sIDA9R0lSUTA4LCAxPUdJUlEwOSwgLi4uLCAxOD1HSVJRMjYNCjc5OiAgICAgICAgICAgICAgICAgICAqIGJpdF9udW0gPSBbMCwgMzFdDQo4MDogICAgICAgICAgICAgICAgICAgKi8NCjgxOiAgICAgICAgICAgICAgICAgIHZvaWQganR2aWNfZGlzX2Nscl9zb3VyY2UodWludDhfdCBnaXJxX251bSwgdWludDhfdCBiaXRfbnVtLCB1aW50OF90IGNscl9zcmMpDQo4MjogICAgICAgICAgICAgICAgICB7DQpCRkQwNzQ4MCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA3NDgyICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwNzQ4NCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNzQ4NiAgICAgIDBDNjUgICBNT1ZFIFYxLCBBMQpCRkQwNzQ4OCAgICAgIDBDNDYgICBNT1ZFIFYwLCBBMgpCRkQwNzQ4QSAgMDAwODE4OUUgICBTQiBBMCwgOChTOCkKQkZEMDc0OEUgIDAwMEMxODdFICAgU0IgVjEsIDEyKFM4KQpCRkQwNzQ5MiAgMDAxMDE4NUUgICBTQiBWMCwgMTYoUzgpCjgzOiAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2lycV9udW0gPCAoTUVDMTR4eF9OVU1fSlRWSUNfSU5UUykpDQpCRkQwNzQ5NiAgMDAwODE0NUUgICBMQlUgVjAsIDgoUzgpCkJGRDA3NDlBICAwMDEzQjA0MiAgIFNMVElVIFYwLCBWMCwgMTkKQkZEMDc0OUUgIDAwMjU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDc0RUMKODQ6ICAgICAgICAgICAgICAgICAgICAgIHsNCjg1OiAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X251bSAmPSAweDFGdTsNCkJGRDA3NEEyICAwMDBDMTQ1RSAgIExCVSBWMCwgMTIoUzgpCkJGRDA3NEE2ICAgICAgMkQyOSAgIEFOREkgVjAsIFYwLCAweDFGCkJGRDA3NEE4ICAwMDBDMTg1RSAgIFNCIFYwLCAxMihTOCkKODY6ICAgICAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW2dpcnFfbnVtXS5FTl9DTFIgPSAoMXVsIDw8IGJpdF9udW0pOw0KQkZEMDc0QUMgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDc0QUUgIDUwODJCRkZGICAgTERDMSBGMzEsIDIwNjEwKFJBKQpCRkQwNzRCMCAgQzAwMDUwODIgICBPUkkgQTAsIFYwLCAtMTYzODQKQkZEMDc0QjQgIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQpCRkQwNzRCOCAgMDAwQzE0N0UgICBMQlUgVjEsIDEyKFM4KQpCRkQwNzRCQyAgICAgIEVFODEgICBMSSBBMSwgMQpCRkQwNzRCRSAgMTgxMDAwQTMgICBTTExWIFYxLCBWMSwgQTEKQkZEMDc0QzAgIDI1MjgxODEwICAgU0IgWkVSTywgOTUxMihTMCkKQkZEMDc0QzIgICAgICAyNTI4ICAgU0xMIFYwLCBWMCwgNApCRkQwNzRDNCAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjAKQkZEMDc0QzYgICAgICBFOUEyICAgU1cgVjEsIDgoVjApCjg3OiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAwICE9IGNscl9zcmMgKQ0KQkZEMDc0QzggIDAwMTAxNDVFICAgTEJVIFYwLCAxNihTOCkKQkZEMDc0Q0MgIDAwMEU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDc0RUMKODg6ICAgICAgICAgICAgICAgICAgICAgICAgICB7DQo4OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW2dpcnFfbnVtXS5TT1VSQ0UgPSAoMXVsIDw8IGJpdF9udW0pOw0KQkZEMDc0RDAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDc0RDIgIDUwODJCRkZGICAgTERDMSBGMzEsIDIwNjEwKFJBKQpCRkQwNzRENCAgQzAwMDUwODIgICBPUkkgQTAsIFYwLCAtMTYzODQKQkZEMDc0RDggIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQpCRkQwNzREQyAgMDAwQzE0N0UgICBMQlUgVjEsIDEyKFM4KQpCRkQwNzRFMCAgICAgIEVFODEgICBMSSBBMSwgMQpCRkQwNzRFMiAgMTgxMDAwQTMgICBTTExWIFYxLCBWMSwgQTEKQkZEMDc0RTQgIDI1MjgxODEwICAgU0IgWkVSTywgOTUxMihTMCkKQkZEMDc0RTYgICAgICAyNTI4ICAgU0xMIFYwLCBWMCwgNApCRkQwNzRFOCAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjAKQkZEMDc0RUEgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjkwOiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KOTE6ICAgICAgICAgICAgICAgICAgICAgIH0NCjkyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3NEVDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3NEVFICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwNzRGMCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDc0RjIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNzRGNCAgICAgIDBDMDAgICBOT1AKOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICANCjk1OiAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSB3aXRoIG9wdGlvbmFsIHNvdXJjZSBjbGVhciBiZWZvcmUgZW5hYmxlLg0KOTY6ICAgICAgICAgICAgICAgICAgICogZ2lycV9udW0gPSBbMCwgMThdLCAwPUdJUlEwOCwgMT1HSVJRMDksIC4uLiwgMTg9R0lSUTI2DQo5NzogICAgICAgICAgICAgICAgICAgKiBiaXRfbnVtID0gWzAsIDMxXQ0KOTg6ICAgICAgICAgICAgICAgICAgICovDQo5OTogICAgICAgICAgICAgICAgICB2b2lkIGp0dmljX2VuX3NvdXJjZSh1aW50OF90IGdpcnFfbnVtLCB1aW50OF90IGJpdF9udW0sIHVpbnQ4X3QgY2xyX3NyYykNCjEwMDogICAgICAgICAgICAgICAgIHsNCkJGRDA3NEY4ICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDc0RkEgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA3NEZDICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA3NEZFICAgICAgMEM2NSAgIE1PVkUgVjEsIEExCkJGRDA3NTAwICAgICAgMEM0NiAgIE1PVkUgVjAsIEEyCkJGRDA3NTAyICAwMDA4MTg5RSAgIFNCIEEwLCA4KFM4KQpCRkQwNzUwNiAgMDAwQzE4N0UgICBTQiBWMSwgMTIoUzgpCkJGRDA3NTBBICAwMDEwMTg1RSAgIFNCIFYwLCAxNihTOCkKMTAxOiAgICAgICAgICAgICAgICAgICAgIGlmIChnaXJxX251bSA8IChNRUMxNHh4X05VTV9KVFZJQ19JTlRTKSkNCkJGRDA3NTBFICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkKQkZEMDc1MTIgIDAwMTNCMDQyICAgU0xUSVUgVjAsIFYwLCAxOQpCRkQwNzUxNiAgMDAyNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNzU2NAoxMDI6ICAgICAgICAgICAgICAgICAgICAgew0KMTAzOiAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfbnVtICY9IDB4MUZ1Ow0KQkZEMDc1MUEgIDAwMEMxNDVFICAgTEJVIFYwLCAxMihTOCkKQkZEMDc1MUUgICAgICAyRDI5ICAgQU5ESSBWMCwgVjAsIDB4MUYKQkZEMDc1MjAgIDAwMEMxODVFICAgU0IgVjAsIDEyKFM4KQoxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggMCAhPSBjbHJfc3JjICkNCkJGRDA3NTI0ICAwMDEwMTQ1RSAgIExCVSBWMCwgMTYoUzgpCkJGRDA3NTI4ICAwMDBFNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3NTQ4CjEwNTogICAgICAgICAgICAgICAgICAgICAgICAgew0KMTA2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tnaXJxX251bV0uU09VUkNFID0gKDF1bCA8PCBiaXRfbnVtKTsNCkJGRDA3NTJDICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA3NTJFICA1MDgyQkZGRiAgIExEQzEgRjMxLCAyMDYxMChSQSkKQkZEMDc1MzAgIEMwMDA1MDgyICAgT1JJIEEwLCBWMCwgLTE2Mzg0CkJGRDA3NTM0ICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkKQkZEMDc1MzggIDAwMEMxNDdFICAgTEJVIFYxLCAxMihTOCkKQkZEMDc1M0MgICAgICBFRTgxICAgTEkgQTEsIDEKQkZEMDc1M0UgIDE4MTAwMEEzICAgU0xMViBWMSwgVjEsIEExCkJGRDA3NTQwICAyNTI4MTgxMCAgIFNCIFpFUk8sIDk1MTIoUzApCkJGRDA3NTQyICAgICAgMjUyOCAgIFNMTCBWMCwgVjAsIDQKQkZEMDc1NDQgICAgICAwNTI4ICAgQUREVSBWMCwgQTAsIFYwCkJGRDA3NTQ2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoxMDc6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjEwODogICAgICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tnaXJxX251bV0uRU5fU0VUID0gKDF1bCA8PCBiaXRfbnVtKTsNCkJGRDA3NTQ4ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA3NTRBICA1MDgyQkZGRiAgIExEQzEgRjMxLCAyMDYxMChSQSkKQkZEMDc1NEMgIEMwMDA1MDgyICAgT1JJIEEwLCBWMCwgLTE2Mzg0CkJGRDA3NTUwICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkKQkZEMDc1NTQgIDAwMEMxNDdFICAgTEJVIFYxLCAxMihTOCkKQkZEMDc1NTggICAgICBFRTgxICAgTEkgQTEsIDEKQkZEMDc1NUEgIDE4MTAwMEEzICAgU0xMViBWMSwgVjEsIEExCkJGRDA3NTVDICAyNTI4MTgxMCAgIFNCIFpFUk8sIDk1MTIoUzApCkJGRDA3NTVFICAgICAgMjUyOCAgIFNMTCBWMCwgVjAsIDQKQkZEMDc1NjAgICAgICAwNTI4ICAgQUREVSBWMCwgQTAsIFYwCkJGRDA3NTYyICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQoxMDk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTEwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDc1NjQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc1NjYgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA3NTY4ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwNzU2QSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA3NTZDICAgICAgMEMwMCAgIE5PUAoxMTE6ICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgIA0KMTEzOiAgICAgICAgICAgICAgICAgLyogZW5kIG1lYzE0eHhfanR2aWMuYyAqLw0KMTE0OiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjExNTogICAgICAgICAgICAgICAgICAqLw0KMTE2OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L21lYzE0eHhfZ3Bpby5jICAtLS0tLS0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIKkgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICANCjIyOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBtZWMxNHh4X2dwaW8uYw0KMjM6ICAgICAgICAgICAgICAgICAgICpNRUMxNHh4IEdQSU8gaGFyZHdhcmUgYWNjZXNzDQoyNDogICAgICAgICAgICAgICAgICAgKi8NCjI1OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBQZXJpcGhlcmFscyBHUElPDQoyNjogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI3OiAgICAgICAgICAgICAgICAgICAqLw0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICANCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgDQozNzogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDMyX3QgZ3Bpb19oYXNfZHJ2X3N0ciAoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQgKTsNCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgDQo0MDogICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX0dQSU9fUElOX1ZBTElEQVRJT04NCjQxOiAgICAgICAgICAgICAgICAgIA0KNDI6ICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdwaW9fcG9ydF9iaXRtYXBzW05VTV9HUElPX1BPUlRTXSA9IA0KNDM6ICAgICAgICAgICAgICAgICAgew0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQV9CSVRNQVApLA0KNDU6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQl9CSVRNQVApLA0KNDY6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQ19CSVRNQVApLA0KNDc6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfRF9CSVRNQVApDQo0ODogICAgICAgICAgICAgICAgICB9Ow0KNDk6ICAgICAgICAgICAgICAgICAgDQo1MDogICAgICAgICAgICAgICAgICAjZW5kaWYNCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgLy8gDQo1MzogICAgICAgICAgICAgICAgICAvLyBEcml2ZSBTdHJlbmd0aCBSZWdpc3RlciBiaXRtYXANCjU0OiAgICAgICAgICAgICAgICAgIC8vDQo1NTogICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgZ3Bpb19kcnZfc3RyX2JpdG1hcFtOVU1fR1BJT19QT1JUU10gPSANCjU2OiAgICAgICAgICAgICAgICAgIHsNCjU3OiAgICAgICAgICAgICAgICAgICAgICAoR1BJT19QT1JUX0FfRFJWU1RSX0JJVE1BUCksDQo1ODogICAgICAgICAgICAgICAgICAgICAgKEdQSU9fUE9SVF9CX0RSVlNUUl9CSVRNQVApLA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQ19EUlZTVFJfQklUTUFQKSwNCjYwOiAgICAgICAgICAgICAgICAgICAgICAoR1BJT19QT1JUX0RfRFJWU1RSX0JJVE1BUCkNCjYxOiAgICAgICAgICAgICAgICAgIH07DQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgc3RydWN0IGdwaW9fY2ZnIA0KNjU6ICAgICAgICAgICAgICAgICAgew0KNjY6ICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYml0X21hc2s7DQo2NzogICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJpdF9wb3M7DQo2ODogICAgICAgICAgICAgICAgICB9Ow0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fY2ZnIGdwaW9fY2ZnX3RibFtHUElPX1BST1BfTUFYXSA9IA0KNzE6ICAgICAgICAgICAgICAgICAgew0KNzI6ICAgICAgICAgICAgICAgICAgICAgeyAweDAwMDN1LCAweDAwdSB9LA0KNzM6ICAgICAgICAgICAgICAgICAgICAgeyAweDAwMEN1LCAweDAydSB9LA0KNzQ6ICAgICAgICAgICAgICAgICAgICAgeyAweDAwRjB1LCAweDA0dSB9LA0KNzU6ICAgICAgICAgICAgICAgICAgICAgeyAweDAxMDB1LCAweDA4dSB9LA0KNzY6ICAgICAgICAgICAgICAgICAgICAgeyAweDAyMDB1LCAweDA5dSB9LA0KNzc6ICAgICAgICAgICAgICAgICAgICAgeyAweDA0MDB1LCAweDBBdSB9LA0KNzg6ICAgICAgICAgICAgICAgICAgICAgeyAweDA4MDB1LCAweDBCdSB9LA0KNzk6ICAgICAgICAgICAgICAgICAgICAgeyAweDMwMDB1LCAweDBDdSB9LA0KODA6ICAgICAgICAgICAgICAgICAgICAgeyAweDNGRkZ1LCAweDAwdSB9DQo4MTogICAgICAgICAgICAgICAgICB9Ow0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDMyX3QgZ3Bpb19waW5fY3RybF9hZGRyKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQpCRkQwOUIyOCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5QjJBICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUIyQyAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUIyRSAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkKODU6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKHVpbnQzMl90KShHUElPX0JBU0UpICsgKHVpbnQzMl90KShncGlvX2lkIDw8IDIpKTsNCkJGRDA5QjMyICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQpCRkQwOUIzNiAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDA5QjM4ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDA5QjNDICAxMDAwNTA0MiAgIE9SSSBWMCwgVjAsIDQwOTYKQkZEMDlCM0UgIDA1MjYxMDAwICAgQURESSBaRVJPLCBaRVJPLCAxMzE4CkJGRDA5QjQwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMAo4NjogICAgICAgICAgICAgICAgICB9DQpCRkQwOUI0MiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUI0NCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDlCNDYgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4CkJGRDA5QjQ4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlCNEEgICAgICAwQzAwICAgTk9QCjg3OiAgICAgICAgICAgICAgICAgIA0KODg6ICAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9HUElPX1BJTl9WQUxJREFUSU9ODQo4OTogICAgICAgICAgICAgICAgICANCjkwOiAgICAgICAgICAgICAgICAgIC8qKg0KOTE6ICAgICAgICAgICAgICAgICAgICogZ3Bpb19pc192YWxpZCAtIGxvY2FsIGhlbHBlciBjaGVja3MgaWYgR1BJTyBwaW4gaXMgDQo5MjogICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRlZCBpbiB0aGlzIGhhcmR3YXJlLiANCjkzOiAgICAgICAgICAgICAgICAgICAqIA0KOTQ6ICAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KOTU6ICAgICAgICAgICAgICAgICAgICogDQo5NjogICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjk3OiAgICAgICAgICAgICAgICAgICAqIA0KOTg6ICAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IE5vbi16ZXJvKEdQSU8gUGluIGltcGxlbWVudGVkKSwgMChub3QgDQo5OTogICAgICAgICAgICAgICAgICAgKiAgICAgICAgIGltcGxlbWVudGVkKS4NCjEwMDogICAgICAgICAgICAgICAgICAqLw0KMTAxOiAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgZ3Bpb19pc192YWxpZCAoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQgKQ0KMTAyOiAgICAgICAgICAgICAgICAgew0KQkZEMDgxQjQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYKQkZEMDgxQjYgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwODFCOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODFCQSAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpCjEwMzogICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGdwX2Jhbms7DQoxMDQ6ICAgICAgICAgICAgICAgICANCjEwNTogICAgICAgICAgICAgICAgICAgIGdwX2JhbmsgPSAwOw0KQkZEMDgxQkUgIDAwMDAzODFFICAgU0ggWkVSTywgMChTOCkKMTA2OiAgICAgICAgICAgICAgICAgDQoxMDc6ICAgICAgICAgICAgICAgICAgICBpZiAoICh1aW50MTZfdClncGlvX2lkIDwgKHVpbnQxNl90KShNQVhfR1BJT19JRCkgKQ0KQkZEMDgxQzIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODFDNiAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGCkJGRDA4MUM4ICAwMDc4QjA0MiAgIFNMVElVIFYwLCBWMCwgMTIwCkJGRDA4MUNDICAwMDFCNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4MjA2CjEwODogICAgICAgICAgICAgICAgICAgIHsNCjEwOTogICAgICAgICAgICAgICAgICAgICAgIGdwX2JhbmsgPSAodWludDE2X3QpZ3Bpb19pZCA+PiA1Ow0KQkZEMDgxRDAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODFENCAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGCkJGRDA4MUQ2ICAgICAgMjUyQiAgIFNSTCBWMCwgVjAsIDUKQkZEMDgxRDggIDAwMDAzODVFICAgU0ggVjAsIDAoUzgpCjExMDogICAgICAgICAgICAgICAgICAgICAgIGlmICggZ3Bpb19wb3J0X2JpdG1hcHNbZ3BfYmFua10gJiAoMSA8PCAoZ3Bpb19pZCAmIDB4MDAxRnUpKSApDQpCRkQwODFEQyAgMDAwMDM0N0UgICBMSFUgVjEsIDAoUzgpCkJGRDA4MUUwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA4MUUyICAyNUI0QkZEMSAgIExEQzEgRjMwLCA5NjUyKFMxKQpCRkQwODFFNCAgICAgIDI1QjQgICBTTEwgVjEsIFYxLCAyCkJGRDA4MUU2ICA5MjU0MzA0MiAgIEFERElVIFYwLCBWMCwgLTI4MDc2CkJGRDA4MUU4ICAwNTI2OTI1NCAgIFNMVEkgUzIsIFM0LCAxMzE4CkJGRDA4MUVBICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwODFFQyAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkKQkZEMDgxRUUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODFGMiAgICAgIDJEMjkgICBBTkRJIFYwLCBWMCwgMHgxRgpCRkQwODFGNCAgICAgIEVFMDEgICBMSSBBMCwgMQpCRkQwODFGNiAgMTAxMDAwODIgICBTTExWIFYwLCBWMCwgQTAKQkZEMDgxRjggIDQ0OTMxMDEwICAgQURESSBaRVJPLCBTMCwgMTc1NTUKQkZEMDgxRkEgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA4MUZDICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4MjA2CjExMTogICAgICAgICAgICAgICAgICAgICAgIHsgDQoxMTI6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCkJGRDA4MjAwICAgICAgRUQwMSAgIExJIFYwLCAxCkJGRDA4MjAyICAgICAgQ0MwMiAgIEIgMHhCRkQwODIwOApCRkQwODIwNCAgICAgIDBDMDAgICBOT1AKMTEzOiAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTE0OiAgICAgICAgICAgICAgICAgICAgfQ0KMTE1OiAgICAgICAgICAgICAgICAgDQoxMTY6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQpCRkQwODIwNiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjExNzogICAgICAgICAgICAgICAgIH0NCkJGRDA4MjA4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4MjBBICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDgyMEMgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgpCRkQwODIwRSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4MjEwICAgICAgMEMwMCAgIE5PUAoxMTg6ICAgICAgICAgICAgICAgICANCjExOTogICAgICAgICAgICAgICAgICNlbHNlDQoxMjA6ICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDMyX3QgZ3Bpb19pc192YWxpZChlbnVtIGdwaW9faWRfdCBncGlvX2lkKSB7IHJldHVybiB0cnVlOyB9DQoxMjE6ICAgICAgICAgICAgICAgICANCjEyMjogICAgICAgICAgICAgICAgICNlbmRpZg0KMTIzOiAgICAgICAgICAgICAgICAgDQoxMjQ6ICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBncGlvX2JhbmtfbnVtKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQoxMjU6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUQyQyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5RDJFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUQzMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOUQzMiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkKMTI2OiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodWludDhfdCkoZ3Bpb19pZCkgPj4gNTsNCkJGRDA5RDM2ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQpCRkQwOUQzQSAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwOUQzQyAgICAgIDI1MkIgICBTUkwgVjAsIFYwLCA1CkJGRDA5RDNFICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCjEyNzogICAgICAgICAgICAgICAgIH0NCkJGRDA5RDQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RDQyICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUQ0NCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlENDYgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUQ0OCAgICAgIDBDMDAgICBOT1AKMTI4OiAgICAgICAgICAgICAgICAgDQoxMjk6ICAgICAgICAgICAgICAgICANCjEzMDogICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50OF90IGdwaW9fcGluX251bShlbnVtIGdwaW9faWRfdCBncGlvX2lkKQ0KMTMxOiAgICAgICAgICAgICAgICAgew0KQkZEMDlENEMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUQ0RSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlENTAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDlENTIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpCjEzMjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVpbnQ4X3QpKGdwaW9faWQpICYgMHgxRnU7DQpCRkQwOUQ1NiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkKQkZEMDlENUEgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYKQkZEMDlENUMgICAgICAyRDI5ICAgQU5ESSBWMCwgVjAsIDB4MUYKQkZEMDlENUUgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYKMTMzOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlENjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlENjIgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5RDY0ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUQ2NiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5RDY4ICAgICAgMEMwMCAgIE5PUAoxMzQ6ICAgICAgICAgICAgICAgICANCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgLyoqDQoxMzc6ICAgICAgICAgICAgICAgICAgKiBncGlvX2hhc19kcnZfc3RyIC0gTG9jYWwgaGVscGVyIHRvIGNoZWNrIGlmIEdQSU8gcGluIGhhcyANCjEzODogICAgICAgICAgICAgICAgICAqIGFzc29jaWF0ZWQgZHJpdmUgc3RyZW5ndGggcmVnaXN0ZXIuIA0KMTM5OiAgICAgICAgICAgICAgICAgICogDQoxNDA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxNDE6ICAgICAgICAgICAgICAgICAgKiANCjE0MjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRA0KMTQzOiAgICAgICAgICAgICAgICAgICogDQoxNDQ6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQzMl90IDAoTm8gRHJpdmUgU3RyZW5ndGgpLCBOb24temVybyhQaHlzaWNhbCANCjE0NTogICAgICAgICAgICAgICAgICAqICAgICAgICAgYWRkcmVzcyBvZiBEcml2ZSBTdHJlbmd0aCBSZWdpc3RlcikuDQoxNDY6ICAgICAgICAgICAgICAgICAgKi8NCjE0NzogICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50MzJfdCBncGlvX2hhc19kcnZfc3RyICggZW51bSBncGlvX2lkX3QgZ3Bpb19pZCApDQoxNDg6ICAgICAgICAgICAgICAgICB7DQpCRkQwNjY0NCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MApCRkQwNjY0NiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApCkJGRDA2NjQ4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkKQkZEMDY2NEEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDY2NEMgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQoxNDk6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmFuaywgYml0cG9zLCBhZGRyOw0KMTUwOiAgICAgICAgICAgICAgICAgICAgIA0KMTUxOiAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSAwdWw7DQpCRkQwNjY1MCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMTUyOiAgICAgICAgICAgICAgICAgICAgIGlmICggZ3Bpb19pZCA8IE1BWF9HUElPX0lEICkNCkJGRDA2NjU0ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDY2NTggIDAwNzhCMDQyICAgU0xUSVUgVjAsIFYwLCAxMjAKQkZEMDY2NUMgIDAwMzU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY2Q0EKMTUzOiAgICAgICAgICAgICAgICAgICAgIHsNCjE1NDogICAgICAgICAgICAgICAgICAgICAgICAgYmFuayA9IGdwaW9fYmFua19udW0oZ3Bpb19pZCk7DQpCRkQwNjY2MCAgMDAyOEZDOUUgICBMVyBBMCwgNDAoUzgpCkJGRDA2NjY0ICA0RTk2NzdFOCAgIEpBTFMgZ3Bpb19iYW5rX251bQpCRkQwNjY2NiAgICAgIDRFOTYgICBBRERJVSBTNCwgUzQsIC01CkJGRDA2NjY4ICAgICAgMEMwMCAgIE5PUApCRkQwNjY2QSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpCjE1NTogICAgICAgICAgICAgICAgICAgICAgICAgYml0cG9zID0gZ3Bpb19waW5fbnVtKGdwaW9faWQpOw0KQkZEMDY2NkUgIDAwMjhGQzlFICAgTFcgQTAsIDQwKFM4KQpCRkQwNjY3MiAgNEVBNjc3RTggICBKQUxTIGdwaW9fcGluX251bQpCRkQwNjY3NCAgICAgIDRFQTYgICBBRERJVSBTNSwgUzUsIDMKQkZEMDY2NzYgICAgICAwQzAwICAgTk9QCkJGRDA2Njc4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkKMTU2OiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdwaW9fZHJ2X3N0cl9iaXRtYXBbYmFua10gJiAoMXVsIDw8IGJpdHBvcykgKQ0KQkZEMDY2N0MgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDY2N0UgIEZDN0VCRkQxICAgTERDMSBGMzAsIC04OTgoUzEpCkJGRDA2NjgwICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkKQkZEMDY2ODQgICAgICAyNUI0ICAgU0xMIFYxLCBWMSwgMgpCRkQwNjY4NiAgOTI2NDMwNDIgICBBRERJVSBWMCwgVjAsIC0yODA2MApCRkQwNjY4OCAgMDUyNjkyNjQgICBTTFRJIFMzLCBBMCwgMTMxOApCRkQwNjY4QSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDY2OEMgICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDA2NjhFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkKQkZEMDY2OTIgIDEwNTAwMDYyICAgU1JMViBWMCwgVjAsIFYxCkJGRDA2Njk0ICAyRDIxMTA1MCAgIEFEREkgVjAsIFMwLCAxMTU1MwpCRkQwNjY5NiAgICAgIDJEMjEgICBBTkRJIFYwLCBWMCwgMHgxCkJGRDA2Njk4ICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDA2NjlBICAwMDE2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2NkNBCjE1NzogICAgICAgICAgICAgICAgICAgICAgICAgew0KMTU4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IChHUElPX1BDVFJMMl9CQVNFKSArICgodWludDMyX3QpKGdwaW9faWQpIDw8IDIpOw0KQkZEMDY2OUUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQpCRkQwNjZBMiAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyCkJGRDA2NkE0ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4CkJGRDA2NkE4ICAxNTAwNTA0MiAgIE9SSSBWMCwgVjAsIDUzNzYKQkZEMDY2QUEgIDA1MjYxNTAwICAgTEJVIFQwLCAxMzE4KFpFUk8pCkJGRDA2NkFDICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNjZBRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE1OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZ3Bpb19pZCA+IEdQSU9fMDA3N19JRCApDQpCRkQwNjZCMiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpCkJGRDA2NkI2ICAwMDQwQjA0MiAgIFNMVElVIFYwLCBWMCwgNjQKQkZEMDY2QkEgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDY2Q0EKMTYwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KMTYxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgLT0gMHgyMHVsOw0KQkZEMDY2QkUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNjZDMiAgRkZFMDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMgpCRkQwNjZDNCAgRjg1RUZGRTAgICBMVyBSQSwgLTE5NTQoWkVSTykKQkZEMDY2QzYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxNjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxNjM6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjE2NDogICAgICAgICAgICAgICAgICAgICB9DQoxNjU6ICAgICAgICAgICAgICAgICAgICAgDQoxNjY6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZHI7DQpCRkQwNjZDQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCjE2NzogICAgICAgICAgICAgICAgIH0NCkJGRDA2NkNFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA2NkQwICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkKQkZEMDY2RDIgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQpCRkQwNjZENCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwCkJGRDA2NkQ2ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDY2RDggICAgICAwQzAwICAgTk9QCjE2ODogICAgICAgICAgICAgICAgIA0KMTY5OiAgICAgICAgICAgICAgICAgDQoxNzA6ICAgICAgICAgICAgICAgICB1aW50MTZfdCBHUElPR2V0Q29uZmlnKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQoxNzE6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTU1OCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwOTU1QSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA5NTVDICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDk1NUUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk1NjAgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQoxNzI6ICAgICAgICAgICAgICAgICAgICAgaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkpIHsNCkJGRDA5NTY0ICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkKQkZEMDk1NjggIDQwREE3N0U4ICAgSkFMUyBncGlvX2lzX3ZhbGlkCkJGRDA5NTZBICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMEFENkUKQkZEMDk1NkMgICAgICAwQzAwICAgTk9QCkJGRDA5NTZFICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5NTg0CjE3MzogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKWdwaW9fcGluX2N0cmxfYWRkcihncGlvX2lkKSk7DQpCRkQwOTU3MiAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA5NTc2ICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyCkJGRDA5NTc4ICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYKQkZEMDk1N0EgICAgICAwQzAwICAgTk9QCkJGRDA5NTdDICAgICAgMjkyMCAgIExIVSBWMCwgMChWMCkKQkZEMDk1N0UgICAgICAyRDJGICAgQU5ESSBWMCwgVjAsIDB4RkZGRgpCRkQwOTU4MCAgICAgIENDMDIgICBCIDB4QkZEMDk1ODYKQkZEMDk1ODIgICAgICAwQzAwICAgTk9QCjE3NDogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMTc1OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHU7DQpCRkQwOTU4NCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjE3NjogICAgICAgICAgICAgICAgICAgICB9DQoxNzc6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTU4NiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTU4OCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA5NThBICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDk1OEMgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwOTU4RSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5NTkwICAgICAgMEMwMCAgIE5PUAoxNzg6ICAgICAgICAgICAgICAgICANCjE3OTogICAgICAgICAgICAgICAgIA0KMTgwOiAgICAgICAgICAgICAgICAgdm9pZCBHUElPU2V0Q29uZmlnKGVudW0gZ3Bpb19pZF90IGdwaW9faWQsIHVpbnQxNl90IGNvbmZpZykNCjE4MTogICAgICAgICAgICAgICAgIHsNCkJGRDA5Mjk4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA5MjlBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDkyOUMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOTI5RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTJBMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA5MkEyICAwQzQ1MDAyMCAgIENNUC5MVC5QSCBBVCwgWkVSTwpCRkQwOTJBNCAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQpCRkQwOTJBNiAgMDAyNDM4NUUgICBTSCBWMCwgMzYoUzgpCjE4MjogICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MTZfdCAqIHA7DQoxODM6ICAgICAgICAgICAgICAgICAgICAgDQoxODQ6ICAgICAgICAgICAgICAgICAgICAgaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkpIHsNCkJGRDA5MkFBICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDkyQUUgIDQwREE3N0U4ICAgSkFMUyBncGlvX2lzX3ZhbGlkCkJGRDA5MkIwICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMEFBQjQKQkZEMDkyQjIgICAgICAwQzAwICAgTk9QCkJGRDA5MkI0ICAwMDBDNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5MkQwCjE4NTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICh2b2xhdGlsZSB1aW50MTZfdCAqKWdwaW9fcGluX2N0cmxfYWRkcihncGlvX2lkKTsNCkJGRDA5MkI4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDkyQkMgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHIKQkZEMDkyQkUgICAgICA0RDk0ICAgQURESVUgVDQsIFQ0LCAtNgpCRkQwOTJDMCAgICAgIDBDMDAgICBOT1AKQkZEMDkyQzIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxODY6ICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gY29uZmlnOw0KQkZEMDkyQzYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOTJDQSAgMDAyNDM0N0UgICBMSFUgVjEsIDM2KFM4KQpCRkQwOTJDRSAgICAgIEE5QTAgICBTSCBWMSwgMChWMCkKMTg3OiAgICAgICAgICAgICAgICAgICAgIH0NCjE4ODogICAgICAgICAgICAgICAgIH0NCkJGRDA5MkQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5MkQyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDkyRDQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwOTJENiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA5MkQ4ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDkyREEgICAgICAwQzAwICAgTk9QCjE4OTogICAgICAgICAgICAgICAgIA0KMTkwOiAgICAgICAgICAgICAgICAgDQoxOTE6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9Db25maWdBbmRPcihlbnVtIGdwaW9faWRfdCBncGlvX2lkLCB1aW50MTZfdCBhbmRfbWFzaywgdWludDE2X3Qgb3JfbWFzaykNCjE5MjogICAgICAgICAgICAgICAgIHsNCkJGRDA4MjE0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4MjE2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDgyMTggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODIxQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODIxQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA4MjFFICAwQzY1MDAyMCAgIE1VTEVRX1MuVy5QSFIgQVQsIFpFUk8sIEFUCkJGRDA4MjIwICAgICAgMEM2NSAgIE1PVkUgVjEsIEExCkJGRDA4MjIyICAgICAgMEM0NiAgIE1PVkUgVjAsIEEyCkJGRDA4MjI0ICAwMDI0Mzg3RSAgIFNIIFYxLCAzNihTOCkKQkZEMDgyMjggIDAwMjgzODVFICAgU0ggVjAsIDQwKFM4KQoxOTM6ICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDE2X3QgKiBwOw0KMTk0OiAgICAgICAgICAgICAgICAgDQoxOTU6ICAgICAgICAgICAgICAgICANCjE5NjogICAgICAgICAgICAgICAgICAgICBpZiAoZ3Bpb19pc192YWxpZChncGlvX2lkKSkgew0KQkZEMDgyMkMgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwODIzMCAgNDBEQTc3RTggICBKQUxTIGdwaW9faXNfdmFsaWQKQkZEMDgyMzIgIDBDMDA0MERBICAgQkdUWiBLMCwgMHhCRkQwOUEzNgpCRkQwODIzNCAgICAgIDBDMDAgICBOT1AKQkZEMDgyMzYgIDAwMTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDgyNjYKMTk3OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHVpbnQxNl90ICopZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpOw0KQkZEMDgyM0EgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwODIzRSAgNEQ5NDc3RTggICBKQUxTIGdwaW9fcGluX2N0cmxfYWRkcgpCRkQwODI0MCAgICAgIDREOTQgICBBRERJVSBUNCwgVDQsIC02CkJGRDA4MjQyICAgICAgMEMwMCAgIE5PUApCRkQwODI0NCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE5ODogICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAoKnAgJiBhbmRfbWFzaykgfCBvcl9tYXNrOw0KQkZEMDgyNDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODI0QyAgICAgIDI5MjAgICBMSFUgVjAsIDAoVjApCkJGRDA4MjRFICAgICAgMkRBRiAgIEFOREkgVjEsIFYwLCAweEZGRkYKQkZEMDgyNTAgIDAwMjQzNDVFICAgTEhVIFYwLCAzNihTOCkKQkZEMDgyNTQgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA4MjU2ICAgICAgMkRBRiAgIEFOREkgVjEsIFYwLCAweEZGRkYKQkZEMDgyNTggIDAwMjgzNDVFICAgTEhVIFYwLCA0MChTOCkKQkZEMDgyNUMgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDgyNUUgICAgICAyREFGICAgQU5ESSBWMSwgVjAsIDB4RkZGRgpCRkQwODI2MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4MjY0ICAgICAgQTlBMCAgIFNIIFYxLCAwKFYwKQoxOTk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjAwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDgyNjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDgyNjggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwODI2QSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4MjZDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDgyNkUgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODI3MCAgICAgIDBDMDAgICBOT1AKMjAxOiAgICAgICAgICAgICAgICAgDQoyMDI6ICAgICAgICAgICAgICAgICANCjIwMzogICAgICAgICAgICAgICAgIHVpbnQzMl90IEdQSU9HZXRDb250cm9sKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQoyMDQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTc3MCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNApCRkQwOTc3MiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApCkJGRDA5Nzc0ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkKQkZEMDk3NzYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk3NzggIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQoyMDU6ICAgICAgICAgICAgICAgICAgICAgaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkpIHsNCkJGRDA5NzdDICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkKQkZEMDk3ODAgIDQwREE3N0U4ICAgSkFMUyBncGlvX2lzX3ZhbGlkCkJGRDA5NzgyICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMEFGODYKQkZEMDk3ODQgICAgICAwQzAwICAgTk9QCkJGRDA5Nzg2ICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5NzlBCjIwNjogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICooKHZvbGF0aWxlIHVpbnQzMl90ICopZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpKTsNCkJGRDA5NzhBICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkKQkZEMDk3OEUgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHIKQkZEMDk3OTAgICAgICA0RDk0ICAgQURESVUgVDQsIFQ0LCAtNgpCRkQwOTc5MiAgICAgIDBDMDAgICBOT1AKQkZEMDk3OTQgICAgICA2OTIwICAgTFcgVjAsIDAoVjApCkJGRDA5Nzk2ICAgICAgQ0MwMiAgIEIgMHhCRkQwOTc5QwpCRkQwOTc5OCAgICAgIDBDMDAgICBOT1AKMjA3OiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoyMDg6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAweEZGRkZGRkZGdWw7DQpCRkQwOTc5QSAgICAgIEVEN0YgICBMSSBWMCwgLTEKMjA5OiAgICAgICAgICAgICAgICAgICAgIH0NCjIxMDogICAgICAgICAgICAgICAgIH0NCkJGRDA5NzlDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5NzlFICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkKQkZEMDk3QTAgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQpCRkQwOTdBMiAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0CkJGRDA5N0E0ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDk3QTYgICAgICAwQzAwICAgTk9QCjIxMTogICAgICAgICAgICAgICAgIA0KMjEyOiAgICAgICAgICAgICAgICAgDQoyMTM6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9TZXRDb250cm9sKGVudW0gZ3Bpb19pZF90IGdwaW9faWQsIHVpbnQzMl90IGN0cmxfdmFsKQ0KMjE0OiAgICAgICAgICAgICAgICAgew0KQkZEMDkyREMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDkyREUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwOTJFMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA5MkUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5MkU0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDkyRTggIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQoyMTU6ICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKiBwOw0KMjE2OiAgICAgICAgICAgICAgICAgICAgIA0KMjE3OiAgICAgICAgICAgICAgICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGdwaW9faWQpKSB7DQpCRkQwOTJFQyAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA5MkYwICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZApCRkQwOTJGMiAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDBBQUY2CkJGRDA5MkY0ICAgICAgMEMwMCAgIE5PUApCRkQwOTJGNiAgMDAwQzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTMxMgoyMTg6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAodm9sYXRpbGUgdWludDMyX3QgKilncGlvX3Bpbl9jdHJsX2FkZHIoZ3Bpb19pZCk7DQpCRkQwOTJGQSAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA5MkZFICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyCkJGRDA5MzAwICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYKQkZEMDkzMDIgICAgICAwQzAwICAgTk9QCkJGRDA5MzA0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMjE5OiAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9IGN0cmxfdmFsOw0KQkZEMDkzMDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOTMwQyAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpCkJGRDA5MzEwICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyMjA6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjIxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDkzMTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDkzMTQgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTMxNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5MzE4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDkzMUEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTMxQyAgICAgIDBDMDAgICBOT1AKMjIyOiAgICAgICAgICAgICAgICAgDQoyMjM6ICAgICAgICAgICAgICAgICANCjIyNDogICAgICAgICAgICAgICAgIHZvaWQgR1BJT0NvbnRyb2xBbmRPcihlbnVtIGdwaW9faWRfdCBncGlvX2lkLCB1aW50MzJfdCBhbmRfbWFzaywgdWludDMyX3Qgb3JfbWFzaykNCjIyNTogICAgICAgICAgICAgICAgIHsNCkJGRDA4ODA0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4ODA2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDg4MDggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODgwQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODgwQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA4ODEwICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKQkZEMDg4MTQgIDAwMjhGOERFICAgU1cgQTIsIDQwKFM4KQoyMjY6ICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKiBwOw0KMjI3OiAgICAgICAgICAgICAgICAgDQoyMjg6ICAgICAgICAgICAgICAgICAgICAgaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkpIHsNCkJGRDA4ODE4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDg4MUMgIDQwREE3N0U4ICAgSkFMUyBncGlvX2lzX3ZhbGlkCkJGRDA4ODFFICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMEEwMjIKQkZEMDg4MjAgICAgICAwQzAwICAgTk9QCkJGRDA4ODIyICAwMDEzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4ODRDCjIyOTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICh2b2xhdGlsZSB1aW50MzJfdCAqKWdwaW9fcGluX2N0cmxfYWRkcihncGlvX2lkKTsNCkJGRDA4ODI2ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDg4MkEgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHIKQkZEMDg4MkMgICAgICA0RDk0ICAgQURESVUgVDQsIFQ0LCAtNgpCRkQwODgyRSAgICAgIDBDMDAgICBOT1AKQkZEMDg4MzAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyMzA6ICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gKCpwICYgYW5kX21hc2spIHwgb3JfbWFzazsNCkJGRDA4ODM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDg4MzggICAgICA2OUEwICAgTFcgVjEsIDAoVjApCkJGRDA4ODNBICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkKQkZEMDg4M0UgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwCkJGRDA4ODQwICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkKQkZEMDg4NDQgICAgICA0NERBICAgT1IxNiBWMSwgVjAKQkZEMDg4NDYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODg0QSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjMxOiAgICAgICAgICAgICAgICAgICAgIH0NCjIzMjogICAgICAgICAgICAgICAgIH0NCkJGRDA4ODRDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4ODRFICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDg4NTAgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwODg1MiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4ODU0ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDg4NTYgICAgICAwQzAwICAgTk9QCjIzMzogICAgICAgICAgICAgICAgIA0KMjM0OiAgICAgICAgICAgICAgICAgDQoyMzU6ICAgICAgICAgICAgICAgICAvKioNCjIzNjogICAgICAgICAgICAgICAgICAqIEdQSU9Qcm9wZXJ0eVNldCAtIFByb2dyYW0gc3BlY2lmaWVkIEdQSU8gUGluIGNvbmZpZ3VyYXRpb24gDQoyMzc6ICAgICAgICAgICAgICAgICAgKiBpdGVtLiANCjIzODogICAgICAgICAgICAgICAgICAqIA0KMjM5OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjQwOiAgICAgICAgICAgICAgICAgICogDQoyNDE6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjI0MjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX3Byb3AgZW51bWVyYXRlZCBHUElPIFByb3BlcnR5KGNvbmZpZ3VyYXRpb24gaXRlbSkNCjI0MzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBwcm9wX3ZhbCBuZXcgcHJvcGVydHkgdmFsdWUNCjI0NDogICAgICAgICAgICAgICAgICAqLw0KMjQ1OiAgICAgICAgICAgICAgICAgdm9pZCBHUElPUHJvcGVydHlTZXQgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkLCANCjI0NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBncGlvX3Byb3BfdCBncGlvX3Byb3AsDQoyNDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHByb3BfdmFsDQoyNDg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoyNDk6ICAgICAgICAgICAgICAgICB7DQpCRkQwNEI5OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNEI5QSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA0QjlDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDRCOUUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDRCQTAgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwNEJBNCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpCkJGRDA0QkE4ICAgICAgMEM0NiAgIE1PVkUgVjAsIEEyCkJGRDA0QkFBICAwMDI4Mzg1RSAgIFNIIFYwLCA0MChTOCkKMjUwOiAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQxNl90ICogcDsNCjI1MTogICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBncF9jZmc7DQoyNTI6ICAgICAgICAgICAgICAgICAgIA0KMjUzOiAgICAgICAgICAgICAgICAgICAgIGdwX2NmZyA9IDB1Ow0KQkZEMDRCQUUgIDAwMTAzODFFICAgU0ggWkVSTywgMTYoUzgpCjI1NDogICAgICAgICAgICAgICAgIA0KMjU1OiAgICAgICAgICAgICAgICAgICAgIGlmICggZ3Bpb19pc192YWxpZChncGlvX2lkKSAmJiAoKHVpbnQxNl90KWdwaW9fcHJvcCA8ICh1aW50MTZfdClHUElPX1BST1BfTUFYKSApDQpCRkQwNEJCMiAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA0QkI2ICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZApCRkQwNEJCOCAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDA2M0JDCkJGRDA0QkJBICAgICAgMEMwMCAgIE5PUApCRkQwNEJCQyAgMDA1MTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNEM2MgpCRkQwNEJDMCAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpCkJGRDA0QkM0ICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYKQkZEMDRCQzYgIDAwMDlCMDQyICAgU0xUSVUgVjAsIFYwLCA5CkJGRDA0QkNBICAwMDRBNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0QzYyCjI1NjogICAgICAgICAgICAgICAgICAgICB7DQoyNTc6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAodm9sYXRpbGUgdWludDE2X3QgKilncGlvX3Bpbl9jdHJsX2FkZHIoZ3Bpb19pZCk7DQpCRkQwNEJDRSAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA0QkQyICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyCkJGRDA0QkQ0ICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYKQkZEMDRCRDYgICAgICAwQzAwICAgTk9QCkJGRDA0QkQ4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMjU4OiAgICAgICAgICAgICAgICAgICAgICAgICBncF9jZmcgPSAqcDsNCkJGRDA0QkRDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDRCRTAgICAgICAyOTIwICAgTEhVIFYwLCAwKFYwKQpCRkQwNEJFMiAgMDAxMDM4NUUgICBTSCBWMCwgMTYoUzgpCjI1OTogICAgICAgICAgICAgICAgICAgICAgICAgZ3BfY2ZnICY9IH4oZ3Bpb19jZmdfdGJsW2dwaW9fcHJvcF0uYml0X21hc2spOw0KQkZEMDRCRTYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDRCRTggIEZDN0VCRkQxICAgTERDMSBGMzAsIC04OTgoUzEpCkJGRDA0QkVBICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkKQkZEMDRCRUUgICAgICAyNUI0ICAgU0xMIFYxLCBWMSwgMgpCRkQwNEJGMCAgOTI3NDMwNDIgICBBRERJVSBWMCwgVjAsIC0yODA0NApCRkQwNEJGMiAgMDUyNjkyNzQgICBTTFRJIFMzLCBTNCwgMTMxOApCRkQwNEJGNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDRCRjYgICAgICAyOTIwICAgTEhVIFYwLCAwKFYwKQpCRkQwNEJGOCAgM0IzQzAwNDIgICBTRUggVjAsIFYwCkJGRDA0QkZBICA0NDEyM0IzQyAgIFNIIFQ5LCAxNzQyNihHUCkKQkZEMDRCRkMgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwCkJGRDA0QkZFICAzQjNDMDA2MiAgIFNFSCBWMSwgVjAKQkZEMDRDMDAgIDNDNUUzQjNDICAgU0ggVDksIDE1NDU0KEdQKQpCRkQwNEMwMiAgMDAxMDNDNUUgICBMSCBWMCwgMTYoUzgpCkJGRDA0QzA2ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwNEMwOCAgM0IzQzAwNDIgICBTRUggVjAsIFYwCkJGRDA0QzBBICAzODVFM0IzQyAgIFNIIFQ5LCAxNDQzMChHUCkKQkZEMDRDMEMgIDAwMTAzODVFICAgU0ggVjAsIDE2KFM4KQoyNjA6ICAgICAgICAgICAgICAgICAgICAgICAgIGdwX2NmZyB8PSAocHJvcF92YWwgPDwgZ3Bpb19jZmdfdGJsW2dwaW9fcHJvcF0uYml0X3BvcykgJiANCkJGRDA0QzEwICAwMDI4MzQ3RSAgIExIVSBWMSwgNDAoUzgpCkJGRDA0QzE0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0QzE2ICBGQzlFQkZEMSAgIExEQzEgRjMwLCAtODY2KFMxKQpCRkQwNEMxOCAgMDAyNEZDOUUgICBMVyBBMCwgMzYoUzgpCkJGRDA0QzFDICAgICAgMjY0NCAgIFNMTCBBMCwgQTAsIDIKQkZEMDRDMUUgIDkyNzQzMDQyICAgQURESVUgVjAsIFYwLCAtMjgwNDQKQkZEMDRDMjAgIDA1Mjg5Mjc0ICAgU0xUSSBTMywgUzQsIDEzMjAKQkZEMDRDMjIgICAgICAwNTI4ICAgQUREVSBWMCwgQTAsIFYwCkJGRDA0QzI0ICAgICAgMDkyMiAgIExCVSBWMCwgMihWMCkKQkZEMDRDMjYgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxCkJGRDA0QzI4ICAwMDYyMTAxMCAgIEFEREkgWkVSTywgUzAsIDk4CkJGRDA0QzJBICAzQjNDMDA2MiAgIFNFSCBWMSwgVjAKQkZEMDRDMkMgIDQxQTIzQjNDICAgU0ggVDksIDE2ODAyKEdQKQpCRkQwNEM0MCAgM0IzQzAwNDIgICBTRUggVjAsIFYwCkJGRDA0QzQyICA0NDkzM0IzQyAgIFNIIFQ5LCAxNzU1NShHUCkKQkZEMDRDNDQgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA0QzQ2ICAzQjNDMDA2MiAgIFNFSCBWMSwgVjAKQkZEMDRDNDggIDNDNUUzQjNDICAgU0ggVDksIDE1NDU0KEdQKQpCRkQwNEM0QSAgMDAxMDNDNUUgICBMSCBWMCwgMTYoUzgpCkJGRDA0QzRFICAgICAgNDREMyAgIE9SMTYgVjAsIFYxCkJGRDA0QzUwICAzQjNDMDA0MiAgIFNFSCBWMCwgVjAKQkZEMDRDNTIgIDM4NUUzQjNDICAgU0ggVDksIDE0NDMwKEdQKQpCRkQwNEM1NCAgMDAxMDM4NUUgICBTSCBWMCwgMTYoUzgpCjI2MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwaW9fY2ZnX3RibFtncGlvX3Byb3BdLmJpdF9tYXNrOyANCkJGRDA0QzJFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxCkJGRDA0QzMwICBGQzlFQkZEMSAgIExEQzEgRjMwLCAtODY2KFMxKQpCRkQwNEMzMiAgMDAyNEZDOUUgICBMVyBBMCwgMzYoUzgpCkJGRDA0QzM2ICAgICAgMjY0NCAgIFNMTCBBMCwgQTAsIDIKQkZEMDRDMzggIDkyNzQzMDQyICAgQURESVUgVjAsIFYwLCAtMjgwNDQKQkZEMDRDM0EgIDA1Mjg5Mjc0ICAgU0xUSSBTMywgUzQsIDEzMjAKQkZEMDRDM0MgICAgICAwNTI4ICAgQUREVSBWMCwgQTAsIFYwCkJGRDA0QzNFICAgICAgMjkyMCAgIExIVSBWMCwgMChWMCkKMjYyOiAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9IGdwX2NmZzsNCkJGRDA0QzU4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDRDNUMgIDAwMTAzNDdFICAgTEhVIFYxLCAxNihTOCkKQkZEMDRDNjAgICAgICBBOUEwICAgU0ggVjEsIDAoVjApCjI2MzogICAgICAgICAgICAgICAgICAgICB9DQoyNjQ6ICAgICAgICAgICAgICAgICB9DQpCRkQwNEM2MiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNEM2NCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA0QzY2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDRDNjggICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNEM2QSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA0QzZDICAgICAgMEMwMCAgIE5PUAoyNjU6ICAgICAgICAgICAgICAgICANCjI2NjogICAgICAgICAgICAgICAgIA0KMjY3OiAgICAgICAgICAgICAgICAgLyoqDQoyNjg6ICAgICAgICAgICAgICAgICAgKiBHUElPR2V0U2xld1JhdGUgLSBSZXR1cm4gR1BJTyBQaW4gU2xldyBSYXRlDQoyNjk6ICAgICAgICAgICAgICAgICAgKiANCjI3MDogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjI3MTogICAgICAgICAgICAgICAgICAqIA0KMjcyOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGdwaW9faWQgMC1iYXNlZCBHUElPIElEDQoyNzM6ICAgICAgICAgICAgICAgICAgKiANCjI3NDogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCBHUElPIFBpbiBTbGV3IFJhdGU6IDAoU2xvdykgb3IgMShGYXN0KQ0KMjc1OiAgICAgICAgICAgICAgICAgICovDQoyNzY6ICAgICAgICAgICAgICAgICB1aW50OF90IEdQSU9HZXRTbGV3UmF0ZSggZW51bSBncGlvX2lkX3QgZ3Bpb19pZCApDQoyNzc6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTAyNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOTAyNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA5MDI4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDkwMkEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDkwMkMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQoyNzg6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjI3OTogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNsZXc7DQoyODA6ICAgICAgICAgICAgICAgICAgICAgDQoyODE6ICAgICAgICAgICAgICAgICAgICAgYWRkciA9IGdwaW9faGFzX2Rydl9zdHIoZ3Bpb19pZCk7DQpCRkQwOTAzMCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA5MDM0ICAzMzIyNzdFOCAgIEpBTFMgZ3Bpb19oYXNfZHJ2X3N0cgpCRkQwOTAzNiAgMEMwMDMzMjIgICBBRERJVSBUOSwgVjAsIDMwNzIKQkZEMDkwMzggICAgICAwQzAwICAgTk9QCkJGRDA5MDNBICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMjgyOiAgICAgICAgICAgICAgICAgICAgIGlmICggMHVsICE9IGFkZHIgKQ0KQkZEMDkwM0UgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwOTA0MiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTA1OAoyODM6ICAgICAgICAgICAgICAgICAgICAgew0KMjg0OiAgICAgICAgICAgICAgICAgICAgICAgICBzbGV3ID0gKCgqKHZvbGF0aWxlIHVpbnQ4X3QgKilhZGRyKSA+PiBHUElPX0RSVl9TTEVXX0JJVFBPUykgJiAweDAxdTsNCkJGRDA5MDQ2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDkwNEEgICAgICAwOTIwICAgTEJVIFYwLCAwKFYwKQpCRkQwOTA0QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwOTA0RSAgICAgIDJEMjEgICBBTkRJIFYwLCBWMCwgMHgxCkJGRDA5MDUwICAwMDEwMTg1RSAgIFNCIFYwLCAxNihTOCkKQkZEMDkwNTQgICAgICBDQzAzICAgQiAweEJGRDA5MDVDCkJGRDA5MDU2ICAgICAgMEMwMCAgIE5PUAoyODU6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjg2OiAgICAgICAgICAgICAgICAgICAgIGVsc2UNCjI4NzogICAgICAgICAgICAgICAgICAgICB7DQoyODg6ICAgICAgICAgICAgICAgICAgICAgICAgIHNsZXcgPSAwdTsNCkJGRDA5MDU4ICAwMDEwMTgxRSAgIFNCIFpFUk8sIDE2KFM4KQoyODk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjkwOiAgICAgICAgICAgICAgICAgICAgIA0KMjkxOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzbGV3Ow0KQkZEMDkwNUMgIDAwMTAxNDVFICAgTEJVIFYwLCAxNihTOCkKMjkyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDkwNjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDkwNjIgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTA2NCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5MDY2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDkwNjggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTA2QSAgICAgIDBDMDAgICBOT1AKMjkzOiAgICAgICAgICAgICAgICAgDQoyOTQ6ICAgICAgICAgICAgICAgICANCjI5NTogICAgICAgICAgICAgICAgIC8qKg0KMjk2OiAgICAgICAgICAgICAgICAgICogR1BJT1NldFNsZXdSYXRlIC0gUHJvZ3JhbSBHUElPIFBpbidzIFNsZXcgUmF0ZQ0KMjk3OiAgICAgICAgICAgICAgICAgICogDQoyOTg6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoyOTk6ICAgICAgICAgICAgICAgICAgKiANCjMwMDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRA0KMzAxOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHNsZXdfcmF0ZSBuZXcgc2xldyByYXRlOiAwKFNsb3cpLCBOb24temVybyhGYXN0KQ0KMzAyOiAgICAgICAgICAgICAgICAgICovDQozMDM6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9TZXRTbGV3UmF0ZSAoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQsDQozMDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3Bpb19zbGV3X3JhdGVfdCBzbGV3X3JhdGUgKQ0KMzA1OiAgICAgICAgICAgICAgICAgew0KQkZEMDg2MDAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDg2MDIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwODYwNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4NjA2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4NjA4ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDg2MEMgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQozMDY6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjMwNzogICAgICAgICAgICAgICAgICAgICANCjMwODogICAgICAgICAgICAgICAgICAgICBhZGRyID0gZ3Bpb19oYXNfZHJ2X3N0cihncGlvX2lkICk7DQpCRkQwODYxMCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA4NjE0ICAzMzIyNzdFOCAgIEpBTFMgZ3Bpb19oYXNfZHJ2X3N0cgpCRkQwODYxNiAgMEMwMDMzMjIgICBBRERJVSBUOSwgVjAsIDMwNzIKQkZEMDg2MTggICAgICAwQzAwICAgTk9QCkJGRDA4NjFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzA5OiAgICAgICAgICAgICAgICAgICAgIGlmICggYWRkciApDQpCRkQwODYxRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4NjIyICAwMDEyNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4NjRBCjMxMDogICAgICAgICAgICAgICAgICAgICB7DQozMTE6ICAgICAgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdWludDhfdCAqKWFkZHIgPSAoKih2b2xhdGlsZSB1aW50OF90ICopYWRkciAmIA0KQkZEMDg2MjYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODYyQSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA4NjJFICAgICAgMDlCMCAgIExCVSBWMSwgMChWMSkKQkZEMDg2MzAgICAgICAyRTNEICAgQU5ESSBBMCwgVjEsIDB4RkYKQkZEMDg2MzIgIEZGRkUzMDYwICAgQURESVUgVjEsIFpFUk8sIC0yCkJGRDA4NjM0ICA0NDlDRkZGRSAgIExXIFJBLCAxNzU2NChTOCkKQkZEMDg2MzYgICAgICA0NDlDICAgQU5EMTYgVjEsIEEwCkJGRDA4NjM4ICAgICAgMkUzRCAgIEFOREkgQTAsIFYxLCAweEZGCkJGRDA4NjNBICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkKQkZEMDg2M0UgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDg2NDAgICAgICAyREIxICAgQU5ESSBWMSwgVjEsIDB4MQpCRkQwODY0MiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwODY0NCAgICAgIDQ0REMgICBPUjE2IFYxLCBBMApCRkQwODY0NiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwODY0OCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKMzEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihHUElPX0RSVl9TTEVXX01BU0spKSB8IA0KMzEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzbGV3X3JhdGUgPDwgKEdQSU9fRFJWX1NMRVdfQklUUE9TKSkgJiAoR1BJT19EUlZfU0xFV19NQVNLKSk7DQozMTQ6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzE1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDg2NEEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDg2NEMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwODY0RSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4NjUwICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDg2NTIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODY1NCAgICAgIDBDMDAgICBOT1AKMzE2OiAgICAgICAgICAgICAgICAgDQozMTc6ICAgICAgICAgICAgICAgICANCjMxODogICAgICAgICAgICAgICAgIC8qKg0KMzE5OiAgICAgICAgICAgICAgICAgICogR1BJT0dldERyaXZlU3RyIC0gR2V0IEdQSU8gUGluJ3MgRHJpdmUgU3RyZW5ndGggDQozMjA6ICAgICAgICAgICAgICAgICAgKiANCjMyMTogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjMyMjogICAgICAgICAgICAgICAgICAqIA0KMzIzOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGdwaW9faWQgMC1iYXNlZCBHUElPIElEDQozMjQ6ICAgICAgICAgICAgICAgICAgKiANCjMyNTogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCBQaW4gRHJpdmUgU3RyZW5ndGg6IDA9Mm1BLCAxPTRtQSwgMj04bUEsIA0KMzI2OiAgICAgICAgICAgICAgICAgICogICAgICAgICAzPTEybUEuDQozMjc6ICAgICAgICAgICAgICAgICAgKi8NCjMyODogICAgICAgICAgICAgICAgIHVpbnQ4X3QgR1BJT0dldERyaXZlU3RyICggZW51bSBncGlvX2lkX3QgZ3Bpb19pZCApDQozMjk6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTU5NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOTU5NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA5NTk4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDk1OUEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk1OUMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQozMzA6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjMzMTogICAgICAgICAgICAgICAgICAgICANCjMzMjogICAgICAgICAgICAgICAgICAgICBhZGRyID0gZ3Bpb19oYXNfZHJ2X3N0cihncGlvX2lkICk7DQpCRkQwOTVBMCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA5NUE0ICAzMzIyNzdFOCAgIEpBTFMgZ3Bpb19oYXNfZHJ2X3N0cgpCRkQwOTVBNiAgMEMwMDMzMjIgICBBRERJVSBUOSwgVjAsIDMwNzIKQkZEMDk1QTggICAgICAwQzAwICAgTk9QCkJGRDA5NUFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzMzOiAgICAgICAgICAgICAgICAgICAgIGlmICggYWRkciApDQpCRkQwOTVBRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA5NUIyICAwMDA2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5NUMyCjMzNDogICAgICAgICAgICAgICAgICAgICB7DQozMzU6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKCoodm9sYXRpbGUgdWludDhfdCAqKWFkZHIpID4+IEdQSU9fRFJWX1NUUl9CSVRQT1MpICYgKEdQSU9fRFJWX1NUUl9NQVNLKTsNCkJGRDA5NUI2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDk1QkEgICAgICAwOTIwICAgTEJVIFYwLCAwKFYwKQpCRkQwOTVCQyAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCkJGRDA5NUJFICAgICAgQ0MwMiAgIEIgMHhCRkQwOTVDNApCRkQwOTVDMCAgICAgIDBDMDAgICBOT1AKMzM2OiAgICAgICAgICAgICAgICAgICAgIH0NCjMzNzogICAgICAgICAgICAgICAgICAgICBlbHNlDQozMzg6ICAgICAgICAgICAgICAgICAgICAgew0KMzM5OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHU7DQpCRkQwOTVDMiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPCjM0MDogICAgICAgICAgICAgICAgICAgICB9DQozNDE6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTVDNCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTVDNiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA5NUM4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDk1Q0EgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOTVDQyAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5NUNFICAgICAgMEMwMCAgIE5PUAozNDI6ICAgICAgICAgICAgICAgICANCjM0MzogICAgICAgICAgICAgICAgIA0KMzQ0OiAgICAgICAgICAgICAgICAgLyoqDQozNDU6ICAgICAgICAgICAgICAgICAgKiBHUElPU2V0RHJpdmVTdHIgLSBQcm9ncmFtIEdQSU8gUGluJ3MgRHJpdmUgU3RyZW5ndGgNCjM0NjogICAgICAgICAgICAgICAgICAqIA0KMzQ3OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMzQ4OiAgICAgICAgICAgICAgICAgICogDQozNDk6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjM1MDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBkcnZfc3RyIGVudW1lcmF0ZWQgZHJpdmUgc3RyZW5ndGg6IDA9Mm1BLCAxPTRtQSwgDQozNTE6ICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAyPThtQSwgMz0xMm1BDQozNTI6ICAgICAgICAgICAgICAgICAgKi8NCjM1MzogICAgICAgICAgICAgICAgIHZvaWQgR1BJT1NldERyaXZlU3RyICggZW51bSBncGlvX2lkX3QgZ3Bpb19pZCwNCjM1NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBncGlvX2Rydl9zdHJfdCBkcnZfc3RyICkNCjM1NTogICAgICAgICAgICAgICAgIHsNCkJGRDA3RDY0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA3RDY2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDdENjggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwN0Q2QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwN0Q2QyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCkJGRDA3RDcwICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkKMzU2OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHI7DQozNTc6ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCByODsNCjM1ODogICAgICAgICAgICAgICAgICAgICANCjM1OTogICAgICAgICAgICAgICAgICAgICBhZGRyID0gZ3Bpb19oYXNfZHJ2X3N0cihncGlvX2lkKTsNCkJGRDA3RDc0ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDdENzggIDMzMjI3N0U4ICAgSkFMUyBncGlvX2hhc19kcnZfc3RyCkJGRDA3RDdBICAwQzAwMzMyMiAgIEFERElVIFQ5LCBWMCwgMzA3MgpCRkQwN0Q3QyAgICAgIDBDMDAgICBOT1AKQkZEMDdEN0UgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozNjA6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBhZGRyICkNCkJGRDA3RDgyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDdEODYgIDAwMUI0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdEQzAKMzYxOiAgICAgICAgICAgICAgICAgICAgIHsNCjM2MjogICAgICAgICAgICAgICAgICAgICAgICAgcjggPSAqKHZvbGF0aWxlIHVpbnQ4X3QgKilhZGRyICYgfihHUElPX0RSVl9TVFJfTUFTSyk7DQpCRkQwN0Q4QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA3RDhFICAgICAgMDkyMCAgIExCVSBWMCwgMChWMCkKQkZEMDdEOTAgICAgICAyREFEICAgQU5ESSBWMSwgVjAsIDB4RkYKQkZEMDdEOTIgIEZGQ0YzMDQwICAgQURESVUgVjAsIFpFUk8sIC00OQpCRkQwN0Q5NCAgNDQ5M0ZGQ0YgICBMVyBTOCwgMTc1NTUoVDcpCkJGRDA3RDk2ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwN0Q5OCAgMDAxNDE4NUUgICBTQiBWMCwgMjAoUzgpCjM2MzogICAgICAgICAgICAgICAgICAgICAgICAgcjggKz0gKChkcnZfc3RyIDw8IEdQSU9fRFJWX1NUUl9CSVRQT1MpICYgR1BJT19EUlZfU1RSX01BU0spOw0KQkZEMDdEOUMgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQpCRkQwN0RBMCAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwN0RBMiAgICAgIDI1MjggICBTTEwgVjAsIFYwLCA0CkJGRDA3REE0ICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDA3REE2ICAwMDMwRDA0MiAgIEFOREkgVjAsIFYwLCA0OApCRkQwN0RBQSAgICAgIDJEQUQgICBBTkRJIFYxLCBWMCwgMHhGRgpCRkQwN0RBQyAgMDAxNDE0NUUgICBMQlUgVjAsIDIwKFM4KQpCRkQwN0RCMCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDdEQjIgIDAwMTQxODVFICAgU0IgVjAsIDIwKFM4KQozNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdWludDhfdCAqKWFkZHIgPSByODsNCkJGRDA3REI2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDdEQkEgIDAwMTQxNDdFICAgTEJVIFYxLCAyMChTOCkKQkZEMDdEQkUgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCjM2NTogICAgICAgICAgICAgICAgICAgICB9DQozNjY6ICAgICAgICAgICAgICAgICB9DQpCRkQwN0RDMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwN0RDMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA3REM0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDdEQzYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwN0RDOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA3RENBICAgICAgMEMwMCAgIE5PUAozNjc6ICAgICAgICAgICAgICAgICANCjM2ODogICAgICAgICAgICAgICAgIA0KMzY5OiAgICAgICAgICAgICAgICAgLyoqDQozNzA6ICAgICAgICAgICAgICAgICAgKiBHUElPR2V0RHJpdmVTdHJBbmRTbGV3IC0gUmV0dXJuIGNvbWJpbmVkIHZhbHVlIHJlcHJlc2VudGluZyANCjM3MTogICAgICAgICAgICAgICAgICAqIERyaXZlIFN0cmVuZ3RoIGFuZCBTbGV3IFJhdGUuIA0KMzcyOiAgICAgICAgICAgICAgICAgICogDQozNzM6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQozNzQ6ICAgICAgICAgICAgICAgICAgKiANCjM3NTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRA0KMzc2OiAgICAgICAgICAgICAgICAgICogDQozNzc6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgYml0WzBdID0gU2xldyBSYXRlLCBiaXRzWzM6MV09MChSZXNlcnZlZCksIA0KMzc4OiAgICAgICAgICAgICAgICAgICogICAgICAgICBiaXRzWzU6NF09RHJpdmUgU3RyZW5ndGgsIGJpdHNbNzo2XT0wKFJlc2VydmVkKQ0KMzc5OiAgICAgICAgICAgICAgICAgICovDQozODA6ICAgICAgICAgICAgICAgICB1aW50OF90IEdQSU9HZXREcml2ZVN0ckFuZFNsZXcgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkICkNCjM4MTogICAgICAgICAgICAgICAgIHsNCkJGRDA5NUQwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA5NUQyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDk1RDQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOTVENiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTVEOCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjM4MjogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyOw0KMzgzOiAgICAgICAgICAgICAgICAgICAgIA0KMzg0OiAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSBncGlvX2hhc19kcnZfc3RyKGdwaW9faWQgKTsNCkJGRDA5NURDICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDk1RTAgIDMzMjI3N0U4ICAgSkFMUyBncGlvX2hhc19kcnZfc3RyCkJGRDA5NUUyICAwQzAwMzMyMiAgIEFERElVIFQ5LCBWMCwgMzA3MgpCRkQwOTVFNCAgICAgIDBDMDAgICBOT1AKQkZEMDk1RTYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQozODU6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBhZGRyICkNCkJGRDA5NUVBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDk1RUUgIDAwMDY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDk1RkUKMzg2OiAgICAgICAgICAgICAgICAgICAgIHsNCjM4NzogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVpbnQ4X3QgKilhZGRyKTsNCkJGRDA5NUYyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDk1RjYgICAgICAwOTIwICAgTEJVIFYwLCAwKFYwKQpCRkQwOTVGOCAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwOTVGQSAgICAgIENDMDIgICBCIDB4QkZEMDk2MDAKQkZEMDk1RkMgICAgICAwQzAwICAgTk9QCjM4ODogICAgICAgICAgICAgICAgICAgICB9DQozODk6ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KMzkwOiAgICAgICAgICAgICAgICAgICAgIHsNCjM5MTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB1Ow0KQkZEMDk1RkUgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTwozOTI6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzkzOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk2MDAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk2MDIgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTYwNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5NjA2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDk2MDggICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTYwQSAgICAgIDBDMDAgICBOT1AKMzk0OiAgICAgICAgICAgICAgICAgDQozOTU6ICAgICAgICAgICAgICAgICANCjM5NjogICAgICAgICAgICAgICAgIC8qKg0KMzk3OiAgICAgICAgICAgICAgICAgICogR1BJT1NldERyaXZlU3RyQW5kU2xldyAtIFByb2dyYW0gR1BJTyBQaW4ncyBkcml2ZSBzdHJlbmd0aCANCjM5ODogICAgICAgICAgICAgICAgICAqIGFuZCBzbGV3IHJhdGUuIA0KMzk5OiAgICAgICAgICAgICAgICAgICogDQo0MDA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQo0MDE6ICAgICAgICAgICAgICAgICAgKiANCjQwMjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRA0KNDAzOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGRydl9hbmRfc2xldyBiaXRbMF0gPSBTbGV3IFJhdGUsIGJpdHNbMzoxXT0wKFJlc2VydmVkKSwgDQo0MDQ6ICAgICAgICAgICAgICAgICAgKiAgICAgICAgIGJpdHNbNTo0XT1Ecml2ZSBTdHJlbmd0aCwgYml0c1s3OjZdPTAoUmVzZXJ2ZWQpDQo0MDU6ICAgICAgICAgICAgICAgICAgKi8NCjQwNjogICAgICAgICAgICAgICAgIHZvaWQgR1BJT1NldERyaXZlU3RyQW5kU2xldyAoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQsDQo0MDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGRydl9hbmRfc2xldyApDQo0MDg6ICAgICAgICAgICAgICAgICB7DQpCRkQwODAyQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODAyRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4MDMwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDgwMzIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDgwMzQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwODAzNiAgMEM0NTAwMjAgICBDTVAuTFQuUEggQVQsIFpFUk8KQkZEMDgwMzggICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDgwM0EgIDAwMjQxODVFICAgU0IgVjAsIDM2KFM4KQo0MDk6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjQxMDogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHI4Ow0KNDExOiAgICAgICAgICAgICAgICAgICAgIA0KNDEyOiAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSBncGlvX2hhc19kcnZfc3RyKGdwaW9faWQpOw0KQkZEMDgwM0UgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwODA0MiAgMzMyMjc3RTggICBKQUxTIGdwaW9faGFzX2Rydl9zdHIKQkZEMDgwNDQgIDBDMDAzMzIyICAgQURESVUgVDksIFYwLCAzMDcyCkJGRDA4MDQ2ICAgICAgMEMwMCAgIE5PUApCRkQwODA0OCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjQxMzogICAgICAgICAgICAgICAgICAgICBpZiAoIGFkZHIgKQ0KQkZEMDgwNEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODA1MCAgMDAxODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODA4NAo0MTQ6ICAgICAgICAgICAgICAgICAgICAgew0KNDE1OiAgICAgICAgICAgICAgICAgICAgICAgICByOCA9ICoodm9sYXRpbGUgdWludDhfdCAqKWFkZHIgJiB+KEdQSU9fRFJWX1NMRVdfTUFTSyArIEdQSU9fRFJWX1NUUl9NQVNLKTsNCkJGRDA4MDU0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDgwNTggICAgICAwOTIwICAgTEJVIFYwLCAwKFYwKQpCRkQwODA1QSAgICAgIDJEQUQgICBBTkRJIFYxLCBWMCwgMHhGRgpCRkQwODA1QyAgRkZDRTMwNDAgICBBRERJVSBWMCwgWkVSTywgLTUwCkJGRDA4MDVFICA0NDkzRkZDRSAgIExXIFM4LCAxNzU1NShUNikKQkZEMDgwNjAgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA4MDYyICAwMDE0MTg1RSAgIFNCIFYwLCAyMChTOCkKNDE2OiAgICAgICAgICAgICAgICAgICAgICAgICByOCB8PSAoZHJ2X2FuZF9zbGV3ICYgKEdQSU9fRFJWX1NMRVdfTUFTSyArIEdQSU9fRFJWX1NUUl9NQVNLKSk7DQpCRkQwODA2NiAgMDAyNDE0NUUgICBMQlUgVjAsIDM2KFM4KQpCRkQwODA2QSAgMDAzMUQwNDIgICBBTkRJIFYwLCBWMCwgNDkKQkZEMDgwNkUgICAgICAyREFEICAgQU5ESSBWMSwgVjAsIDB4RkYKQkZEMDgwNzAgIDAwMTQxNDVFICAgTEJVIFYwLCAyMChTOCkKQkZEMDgwNzQgICAgICA0NEQzICAgT1IxNiBWMCwgVjEKQkZEMDgwNzYgIDAwMTQxODVFICAgU0IgVjAsIDIwKFM4KQo0MTc6ICAgICAgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdWludDhfdCAqKWFkZHIgPSByODsNCkJGRDA4MDdBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDgwN0UgIDAwMTQxNDdFICAgTEJVIFYxLCAyMChTOCkKQkZEMDgwODIgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCjQxODogICAgICAgICAgICAgICAgICAgICB9DQo0MTk6ICAgICAgICAgICAgICAgICB9DQpCRkQwODA4NCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODA4NiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4MDg4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDgwOEEgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwODA4QyAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4MDhFICAgICAgMEMwMCAgIE5PUAo0MjA6ICAgICAgICAgICAgICAgICANCjQyMTogICAgICAgICAgICAgICAgIA0KNDIyOiAgICAgICAgICAgICAgICAgLyoqDQo0MjM6ICAgICAgICAgICAgICAgICAgKiBHUElPU2V0T3V0cHV0IC0gUHJvZ3JhbSBHUElPIFBpbidzIG91dHB1dCBzdGF0ZSB1c2luZyBQaW4gDQo0MjQ6ICAgICAgICAgICAgICAgICAgKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIChub3QgcGFyYWxsZWwgb3V0cHV0IHJlZ2lzdGVyKS4gDQo0MjU6ICAgICAgICAgICAgICAgICAgKiANCjQyNjogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjQyNzogICAgICAgICAgICAgICAgICAqIA0KNDI4OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGdwaW9faWQgMC1iYXNlZCBHUElPIElEDQo0Mjk6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19zdGF0ZSBwaW4gc3RhdGU6IGFjdHVhbCBwaW4gc3RhdGUgYXQgcGFkIHdpbGwgDQo0MzA6ICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICBkZXBlbmQgdXBvbiBHUElPIE91dHB1dCBpbnZlcnQNCjQzMTogICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uDQo0MzI6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBwZWZvcm1zIGEgYnl0ZSB3aWRlIHdyaXRlIHRvIGJ5dGUgb2Zmc2V0IDIgb2YgdGhlIEdQSU8gDQo0MzM6ICAgICAgICAgICAgICAgICAgKiAgICAgICBQaW4ncyAzMi1iaXQgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gTm8NCjQzNDogICAgICAgICAgICAgICAgICAqICAgICAgIHJlYWQtbW9kaWZ5LXdyaXRlLg0KNDM1OiAgICAgICAgICAgICAgICAgICovDQo0MzY6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9TZXRPdXRwdXQgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkLCANCjQzNzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZ3Bpb19zdGF0ZQ0KNDM4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KNDM5OiAgICAgICAgICAgICAgICAgew0KQkZEMDg2NTggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDg2NUEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwODY1QyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA4NjVFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA4NjYwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkKQkZEMDg2NjIgIDBDNDUwMDIwICAgQ01QLkxULlBIIEFULCBaRVJPCkJGRDA4NjY0ICAgICAgMEM0NSAgIE1PVkUgVjAsIEExCkJGRDA4NjY2ICAwMDI0MTg1RSAgIFNCIFYwLCAzNihTOCkKNDQwOiAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQ4X3QgKiBwOw0KNDQxOiAgICAgICAgICAgICAgICAgICAgIA0KNDQyOiAgICAgICAgICAgICAgICAgICAgIGlmICggZ3Bpb19pc192YWxpZChncGlvX2lkKSApDQpCRkQwODY2QSAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA4NjZFICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZApCRkQwODY3MCAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDA5RTc0CkJGRDA4NjcyICAgICAgMEMwMCAgIE5PUApCRkQwODY3NCAgMDAxNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODZBMgo0NDM6ICAgICAgICAgICAgICAgICAgICAgew0KNDQ0OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikoZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpICsgMnVsKTsNCkJGRDA4Njc4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDg2N0MgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHIKQkZEMDg2N0UgICAgICA0RDk0ICAgQURESVUgVDQsIFQ0LCAtNgpCRkQwODY4MCAgICAgIDBDMDAgICBOT1AKQkZEMDg2ODIgICAgICA0QzQ0ICAgQURESVUgVjAsIFYwLCAyCkJGRDA4Njg0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNDQ1OiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3Bpb19zdGF0ZSkgew0KQkZEMDg2ODggIDAwMjQxNDVFICAgTEJVIFYwLCAzNihTOCkKQkZEMDg2OEMgIDAwMDY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg2OUMKNDQ2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAweDAxdTsNCkJGRDA4NjkwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDg2OTQgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDg2OTYgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDA4Njk4ICAgICAgQ0MwNCAgIEIgMHhCRkQwODZBMgpCRkQwODY5QSAgICAgIDBDMDAgICBOT1AKNDQ3OiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KNDQ4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAwdTsNCkJGRDA4NjlDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDg2QTAgICAgICA4ODIwICAgU0IgUzAsIDAoVjApCjQ0OTogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KNDUwOiAgICAgICAgICAgICAgICAgICAgIH0NCjQ1MTogICAgICAgICAgICAgICAgIH0NCkJGRDA4NkEyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA4NkE0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDg2QTYgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwODZBOCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA4NkFBICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDg2QUMgICAgICAwQzAwICAgTk9QCjQ1MjogICAgICAgICAgICAgICAgIA0KNDUzOiAgICAgICAgICAgICAgICAgDQo0NTQ6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9Ub2dnbGVPdXRwdXQgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkICkNCjQ1NTogICAgICAgICAgICAgICAgIHsNCkJGRDA4QzVDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4QzVFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDhDNjAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOEM2MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOEM2NCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjQ1NjogICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50OF90ICogcDsNCjQ1NzogICAgICAgICAgICAgICAgIA0KNDU4OiAgICAgICAgICAgICAgICAgICAgIGlmICggZ3Bpb19pc192YWxpZChncGlvX2lkKSApDQpCRkQwOEM2OCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA4QzZDICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZApCRkQwOEM2RSAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDBBNDcyCkJGRDA4QzcwICAgICAgMEMwMCAgIE5PUApCRkQwOEM3MiAgMDAxMjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEM5QQo0NTk6ICAgICAgICAgICAgICAgICAgICAgew0KNDYwOiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikoZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpICsgMnVsKTsNCkJGRDA4Qzc2ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDhDN0EgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHIKQkZEMDhDN0MgICAgICA0RDk0ICAgQURESVUgVDQsIFQ0LCAtNgpCRkQwOEM3RSAgICAgIDBDMDAgICBOT1AKQkZEMDhDODAgICAgICA0QzQ0ICAgQURESVUgVjAsIFYwLCAyCkJGRDA4QzgyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKNDYxOiAgICAgICAgICAgICAgICAgICAgICAgICAqcCBePSAweDAxdTsNCkJGRDA4Qzg2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDhDOEEgICAgICAwOTIwICAgTEJVIFYwLCAwKFYwKQpCRkQwOEM4QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRgpCRkQwOEM4RSAgMDAwMTcwNDIgICBYT1JJIFYwLCBWMCwgMQpCRkQwOEM5MiAgICAgIDJEQUQgICBBTkRJIFYxLCBWMCwgMHhGRgpCRkQwOEM5NCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4Qzk4ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQo0NjI6ICAgICAgICAgICAgICAgICAgICAgfQ0KNDYzOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhDOUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDhDOUMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOEM5RSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4Q0EwICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDhDQTIgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOENBNCAgICAgIDBDMDAgICBOT1AKNDY0OiAgICAgICAgICAgICAgICAgDQo0NjU6ICAgICAgICAgICAgICAgICANCjQ2NjogICAgICAgICAgICAgICAgIC8qKg0KNDY3OiAgICAgICAgICAgICAgICAgICogR1BJT1JlYWRQaW4gLSBSZWFkIEdQSU8gUGluJ3MgUGFkIElucHV0IGZyb20gY29uZmlndXJhdGlvbiANCjQ2ODogICAgICAgICAgICAgICAgICAqIHJlZ2lzdGVyLiANCjQ2OTogICAgICAgICAgICAgICAgICAqIA0KNDcwOiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KNDcxOiAgICAgICAgICAgICAgICAgICogDQo0NzI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQuDQo0NzM6ICAgICAgICAgICAgICAgICAgKiANCjQ3NDogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCAwIG9yIDEgZGVwZW5kaW5nIHVwb24gdGhlIHN0YXRlIG9mIHRoZSBHUElPIA0KNDc1OiAgICAgICAgICAgICAgICAgICogICAgICAgICBwYWQuDQo0NzY6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBwZXJmb3JtcyBhIGJ5dGUgcmVhZCBvZiBvZmZzZXQgMyBvZiB0aGUgR1BJTyBQaW4ncyANCjQ3NzogICAgICAgICAgICAgICAgICAqICAgICAgIDMyLWJpdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KNDc4OiAgICAgICAgICAgICAgICAgICovDQo0Nzk6ICAgICAgICAgICAgICAgICB1aW50OF90IEdQSU9SZWFkUGluKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkICkNCjQ4MDogICAgICAgICAgICAgICAgIHsNCkJGRDA5NjBDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5NjBFICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDk2MTAgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOTYxMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTYxNCAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpCjQ4MTogICAgICAgICAgICAgICAgICAgICBpZiAoIGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkgKQ0KQkZEMDk2MTggIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQpCRkQwOTYxQyAgNDBEQTc3RTggICBKQUxTIGdwaW9faXNfdmFsaWQKQkZEMDk2MUUgIDBDMDA0MERBICAgQkdUWiBLMCwgMHhCRkQwQUUyMgpCRkQwOTYyMCAgICAgIDBDMDAgICBOT1AKQkZEMDk2MjIgIDAwMEE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDk2M0EKNDgyOiAgICAgICAgICAgICAgICAgICAgIHsNCjQ4MzogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICooKHZvbGF0aWxlIHVpbnQ4X3QgKikoZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpICsgM3VsKSk7DQpCRkQwOTYyNiAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpCkJGRDA5NjJBICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyCkJGRDA5NjJDICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYKQkZEMDk2MkUgICAgICAwQzAwICAgTk9QCkJGRDA5NjMwICAgICAgNEM0NiAgIEFERElVIFYwLCBWMCwgMwpCRkQwOTYzMiAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApCkJGRDA5NjM0ICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDA5NjM2ICAgICAgQ0MwMiAgIEIgMHhCRkQwOTYzQwpCRkQwOTYzOCAgICAgIDBDMDAgICBOT1AKNDg0OiAgICAgICAgICAgICAgICAgICAgIH0gDQo0ODU6ICAgICAgICAgICAgICAgICAgICAgZWxzZSANCjQ4NjogICAgICAgICAgICAgICAgICAgICB7DQo0ODc6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwdTsNCkJGRDA5NjNBICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8KNDg4OiAgICAgICAgICAgICAgICAgICAgIH0NCjQ4OTogICAgICAgICAgICAgICAgIH0NCkJGRDA5NjNDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5NjNFICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkKQkZEMDk2NDAgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQpCRkQwOTY0MiAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0CkJGRDA5NjQ0ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDk2NDYgICAgICAwQzAwICAgTk9QCjQ5MDogICAgICAgICAgICAgICAgIA0KNDkxOiAgICAgICAgICAgICAgICAgDQo0OTI6ICAgICAgICAgICAgICAgICAvKiogR1BJT1BpbkxvY2sgLSBMb2NrIHNwZWNpZmllZCBHUElPJ3MgY29udHJvbCByZWdpc3Rlci4NCjQ5MzogICAgICAgICAgICAgICAgICAqICBAcGFyYW0gZW51bSBncGlvX2lkX3QgemVybyBiYXNlZCBHUElPIElEDQo0OTQ6ICAgICAgICAgICAgICAgICAgKiAgQG5vdGUgTG9jayBiaXQgaXMgb25seSBjbGVhcmVkIG9uIFBPUi4gTG9jayByZWdpc3RlcnMNCjQ5NTogICAgICAgICAgICAgICAgICAqICBhcmUgaW4gcmV2ZXJzZSBvcmRlciwgZmlyc3QgcmVnaXN0ZXIgaXMgYXQgdG9wIGFkZHJlc3MuDQo0OTY6ICAgICAgICAgICAgICAgICAgKiAgR1BJT19MT0NLX0JBU0UgZGVmaW5lZCB0byB0b3AoZmlyc3QpIHJlZ2lzdGVyIGFkZHJlc3MuDQo0OTc6ICAgICAgICAgICAgICAgICAgKiAgKi8gDQo0OTg6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9QaW5Mb2NrKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQo0OTk6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0FEQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwN0FERSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA3QUUwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDdBRTIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDdBRTQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQo1MDA6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjUwMTogICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJhbmssIGJpdHBvczsNCjUwMjogICAgICAgICAgICAgICAgIA0KNTAzOiAgICAgICAgICAgICAgICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGdwaW9faWQpKSB7DQpCRkQwN0FFOCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpCkJGRDA3QUVDICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZApCRkQwN0FFRSAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDA5MkYyCkJGRDA3QUYwICAgICAgMEMwMCAgIE5PUApCRkQwN0FGMiAgMDAyNDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0IzRQo1MDQ6ICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmsgPSBncGlvX2JhbmtfbnVtKGdwaW9faWQpOyAgLy8gMCAtIDQNCkJGRDA3QUY2ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkKQkZEMDdBRkEgIDRFOTY3N0U4ICAgSkFMUyBncGlvX2JhbmtfbnVtCkJGRDA3QUZDICAgICAgNEU5NiAgIEFERElVIFM0LCBTNCwgLTUKQkZEMDdBRkUgICAgICAwQzAwICAgTk9QCkJGRDA3QjAwICAwMDEwMTg1RSAgIFNCIFYwLCAxNihTOCkKNTA1OiAgICAgICAgICAgICAgICAgICAgICAgICBiaXRwb3MgPSBncGlvX3Bpbl9udW0oZ3Bpb19pZCk7IC8vIDAgLSAzMQ0KQkZEMDdCMDQgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQpCRkQwN0IwOCAgNEVBNjc3RTggICBKQUxTIGdwaW9fcGluX251bQpCRkQwN0IwQSAgICAgIDRFQTYgICBBRERJVSBTNSwgUzUsIDMKQkZEMDdCMEMgICAgICAwQzAwICAgTk9QCkJGRDA3QjBFICAwMDExMTg1RSAgIFNCIFYwLCAxNyhTOCkKNTA2OiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gKHVpbnQzMl90KShHUElPX0xPQ0tfQkFTRSkgLSAoYmFuayA8PCAyKTsNCkJGRDA3QjEyICAwMDEwMTQ1RSAgIExCVSBWMCwgMTYoUzgpCkJGRDA3QjE2ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDIKQkZEMDdCMTggIEEwMDg0MUEzICAgTFVJIFYxLCAweEEwMDgKQkZEMDdCMUMgIDEzRjA1MDYzICAgT1JJIFYxLCBWMSwgNTEwNApCRkQwN0IxRSAgMDUyNzEzRjAgICBBRERJIFJBLCBTMCwgMTMxOQpCRkQwN0IyMCAgICAgIDA1MjcgICBTVUJVIFYwLCBWMSwgVjAKQkZEMDdCMjIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQo1MDc6ICAgICAgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdWludDMyX3QgKilhZGRyIHw9ICgxdWwgPDwgYml0cG9zKTsNCkJGRDA3QjI2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkKQkZEMDdCMkEgIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQpCRkQwN0IyRSAgICAgIDZBMzAgICBMVyBBMCwgMChWMSkKQkZEMDdCMzAgIDAwMTExNDdFICAgTEJVIFYxLCAxNyhTOCkKQkZEMDdCMzQgICAgICBFRTgxICAgTEkgQTEsIDEKQkZEMDdCMzYgIDE4MTAwMEEzICAgU0xMViBWMSwgVjEsIEExCkJGRDA3QjM4ICA0NERDMTgxMCAgIFNCIFpFUk8sIDE3NjI4KFMwKQpCRkQwN0IzQSAgICAgIDQ0REMgICBPUjE2IFYxLCBBMApCRkQwN0IzQyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNTA4OiAgICAgICAgICAgICAgICAgICAgIH0gDQo1MDk6ICAgICAgICAgICAgICAgICB9DQpCRkQwN0IzRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwN0I0MCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA3QjQyICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDdCNDQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwN0I0NiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA3QjQ4ICAgICAgMEMwMCAgIE5PUAo1MTA6ICAgICAgICAgICAgICAgICANCjUxMTogICAgICAgICAgICAgICAgIA0KNTEyOiAgICAgICAgICAgICAgICAgLyogZW5kIG1lYzE0eHhfZ3Bpby5jICovDQo1MTM6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KNTE0OiAgICAgICAgICAgICAgICAgICovDQo1MTU6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvbWVjMTR4eF9iYmxlZC5jICAtLS0tLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogQ29weXJpZ2h0IDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIG1lYzE0eHhfYmJsZWQuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpNRUMxNHh4IEJyZWF0aW5nLUJsaW5raW5nIExFRCBkZWZpbml0aW9ucw0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggUGVyaXBoZXJhbHMgQkJMRUQNCjI1OiAgICAgICAgICAgICAgICAgICAqLw0KMjY6ICAgICAgICAgICAgICAgICAgDQoyNzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfcGNyLmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2JibGVkLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfYmJsZWQuaCINCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgI2lmZGVmIF9fY3BsdXNwbHVzDQozNjogICAgICAgICAgICAgICAgICBleHRlcm4gIkMiIHsNCjM3OiAgICAgICAgICAgICAgICAgICNlbmRpZg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICANCjQwOiAgICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50MzJfdCBsZWRfYWRkcih1aW50OF90IGxlZF9pZCkgDQo0MTogICAgICAgICAgICAgICAgICB7DQpCRkQwOTQyMCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5NDIyICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOTQyNCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTQyNiAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMApCRkQwOTQyOCAgMDAwODE4NUUgICBTQiBWMCwgOChTOCkKNDI6ICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWRfaWQgPCAoTEVEX0lEX01BWCkgKQ0KQkZEMDk0MkMgIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQpCRkQwOTQzMCAgMDAwM0IwNDIgICBTTFRJVSBWMCwgVjAsIDMKQkZEMDk0MzQgIDAwMEI0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDk0NEUKNDM6ICAgICAgICAgICAgICAgICAgICAgIHsNCjQ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoTEVEMF9CQVNFKSArIChsZWRfaWQgPDwgOCkpOw0KQkZEMDk0MzggIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQpCRkQwOTQzQyAgICAgIDI1MjAgICBTTEwgVjAsIFYwLCA4CkJGRDA5NDNFICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwCkJGRDA5NDQwICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDA5NDQ0ICBCODAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xODQzMgpCRkQwOTQ0NiAgMDUyNkI4MDAgICBTREMxIEYwLCAxMzE4KFpFUk8pCkJGRDA5NDQ4ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwOTQ0QSAgICAgIENDMDUgICBCIDB4QkZEMDk0NTYKQkZEMDk0NEMgICAgICAwQzAwICAgTk9QCjQ1OiAgICAgICAgICAgICAgICAgICAgICB9DQo0NjogICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KNDc6ICAgICAgICAgICAgICAgICAgICAgIHsNCjQ4OiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChMRUQwX0JBU0UpOw0KQkZEMDk0NEUgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDk0NTIgIEI4MDA1MDQyICAgT1JJIFYwLCBWMCwgLTE4NDMyCkJGRDA5NDU0ICAwRkJFQjgwMCAgIFNEQzEgRjAsIDQwMzAoWkVSTykKNDk6ICAgICAgICAgICAgICAgICAgICAgIH0NCjUwOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5NDU2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5NDU4ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOTQ1QSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDk0NUMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTQ1RSAgICAgIDBDMDAgICBOT1AKNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAjaWZkZWYgTEVEX0VOQUJMRV9WQUxJRF9DSEVDSw0KNTM6ICAgICAgICAgICAgICAgICAgDQo1NDogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBsZWRfaXNfdmFsaWQodWludDhfdCBsZWRfaWQpDQo1NTogICAgICAgICAgICAgICAgICB7DQo1NjogICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZF9pZCA8IChMRURfSURfTUFYKSkgew0KNTc6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCjU4OiAgICAgICAgICAgICAgICAgICAgICB9DQo1OTogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KNjA6ICAgICAgICAgICAgICAgICAgfQ0KNjE6ICAgICAgICAgICAgICAgICAgDQo2MjogICAgICAgICAgICAgICAgICAjZWxzZQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBsZWRfaXNfdmFsaWQodWludDhfdCBsZWRfaWQpIHsgKCB2b2lkICkgbGVkX2lkOyByZXR1cm4gKE1FQzE0WFhfVFJVRSk7IH0NCkJGRDA5RTZDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgKQkZEMDlFNkUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApCkJGRDA5RTcwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA5RTcyICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA5RTc0ICAwMDA4MTg1RSAgIFNCIFYwLCA4KFM4KQpCRkQwOUU3OCAgICAgIEVEMDEgICBMSSBWMCwgMQpCRkQwOUU3QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOUU3QyAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkKQkZEMDlFN0UgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4CkJGRDA5RTgwICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDlFODIgICAgICAwQzAwICAgTk9QCjY1OiAgICAgICAgICAgICAgICAgIA0KNjY6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo2NzogICAgICAgICAgICAgICAgICANCjY4OiAgICAgICAgICAgICAgICAgIA0KNjk6ICAgICAgICAgICAgICAgICAgLyoqIA0KNzA6ICAgICAgICAgICAgICAgICAgICAgIEBicmllZiBNRUMxNDA0IExFRCBhcmUgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBvZiBHUElPIHBpbnMuIA0KNzE6ICAgICAgICAgICAgICAgICAgICAgIEBub3RlIC0gDQo3MjogICAgICAgICAgICAgICAgICAgICAgICAgIExFRDAgaXMgR1BJTzE1NyBGdW5jdGlvbiAxDQo3MzogICAgICAgICAgICAgICAgICAgICAgICAgIExFRDEgaXMgR1BJTzE1NiBGdW5jdGlvbiAxDQo3NDogICAgICAgICAgICAgICAgICAgICAgICAgIExFRDIgaXMgR1BJTzEwNCBGdW5jdGlvbiAxDQo3NTogICAgICAgICAgICAgICAgICAqLw0KNzY6ICAgICAgICAgICAgICAgICAgDQo3NzogICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBsZWRfcGNyX3NscDJfYml0cG9zW0xFRF9JRF9NQVhdID0gew0KNzg6ICAgICAgICAgICAgICAgICAgICAgIChQQ1JfRUMyX0xFRDBfU0xQX0JJVFBPUyksDQo3OTogICAgICAgICAgICAgICAgICAgICAgKFBDUl9FQzJfTEVEMV9TTFBfQklUUE9TKSwNCjgwOiAgICAgICAgICAgICAgICAgICAgICAoUENSX0VDMl9MRUQyX1NMUF9CSVRQT1MpDQo4MTogICAgICAgICAgICAgICAgICB9Ow0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICANCjg0OiAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBsZWRfZ3Bpb190YmxbTEVEX0lEX01BWF0gPSB7DQo4NTogICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKEdQSU9fRlVOQ18xKTw8OCkgKyAodWludDE2X3QpR1BJT18wMTU3X0lEKSwNCjg2OiAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoR1BJT19GVU5DXzEpPDw4KSArICh1aW50MTZfdClHUElPXzAxNTZfSUQpLA0KODc6ICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KShHUElPX0ZVTkNfMSk8PDgpICsgKHVpbnQxNl90KUdQSU9fMDEwNF9JRCkNCjg4OiAgICAgICAgICAgICAgICAgIH07DQo4OTogICAgICAgICAgICAgICAgICANCjkwOiAgICAgICAgICAgICAgICAgIA0KOTE6ICAgICAgICAgICAgICAgICAgDQo5MjogICAgICAgICAgICAgICAgICAvKioNCjkzOiAgICAgICAgICAgICAgICAgICAqIGxlZF9zbGVlcF9lbiAtIEVuYWJsZS9EaXNhYmxlIGdhdGluZyBvZiBjbG9ja3Mgb24gaWRsZSB0byB0aGUNCjk0OiAgICAgICAgICAgICAgICAgICAqIEJCTEVEIGJsb2NrIA0KOTU6ICAgICAgICAgICAgICAgICAgICogIA0KOTY6ICAgICAgICAgICAgICAgICAgICoNCjk3OiAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50OF90IHNsZWVwX2VuICgxPUVuYWJsZSBzbGVlcCBvbiBpZGxlKSwgKDA9Tm8gc2xlZXANCjk4OiAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIG9uIGlkbGUpLg0KOTk6ICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHVpbnQ4X3QgTEVEIElEICgwLTMpDQoxMDA6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBpZiBMRUQgSUQgPiAzIG5vIGFjdGlvbiB0YWtlbi4NCjEwMTogICAgICAgICAgICAgICAgICAqLw0KMTAyOiAgICAgICAgICAgICAgICAgdm9pZCBsZWRfc2xlZXBfZW4odWludDhfdCBsZWRfaWQsIHVpbnQ4X3Qgc2xlZXBfZW4pDQoxMDM6ICAgICAgICAgICAgICAgICB7DQpCRkQwNUQwQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNUQwRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA1RDEwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDVEMTIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDVEMTQgICAgICAwQzY0ICAgTU9WRSBWMSwgQTAKQkZEMDVEMTYgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTEKQkZEMDVEMTggIDAwMjAxODdFICAgU0IgVjEsIDMyKFM4KQpCRkQwNUQxQyAgMDAyNDE4NUUgICBTQiBWMCwgMzYoUzgpCjEwNDogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzbHBfbWFzazsNCjEwNTogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsYWRkcjsNCjEwNjogICAgICAgICAgICAgICAgICAgICANCjEwNzogICAgICAgICAgICAgICAgICAgICBzbHBfbWFzayA9IDB1bDsNCkJGRDA1RDIwICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQoxMDg6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZWRfaXNfdmFsaWQobGVkX2lkKSApIHsNCkJGRDA1RDI0ICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA1RDI4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA1RDJBICA0RjM2NzdFOCAgIEpBTFMgbGVkX2lzX3ZhbGlkCkJGRDA1RDJDICAgICAgNEYzNiAgIEFERElVIFQ5LCBUOSwgLTUKQkZEMDVEMkUgICAgICAwQzAwICAgTk9QCkJGRDA1RDMwICAwMDNGNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1REIyCjEwOTogICAgICAgICAgICAgICAgICAgICAgICAgc2xwX21hc2sgPSAoMXVsIDw8IGxlZF9wY3Jfc2xwMl9iaXRwb3NbbGVkX2lkXSk7DQpCRkQwNUQzNCAgMDAyMDE0N0UgICBMQlUgVjEsIDMyKFM4KQpCRkQwNUQzOCAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMApCRkQwNUQzQSAgMzA0MkJGRDAgICBMREMxIEYzMCwgMTIzNTQoUzApCkJGRDA1RDNDICAwMTc0MzA0MiAgIEFERElVIFYwLCBWMCwgMzcyCkJGRDA1RDQwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNUQ0MiAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApCkJGRDA1RDQ0ICAgICAgRUQ4MSAgIExJIFYxLCAxCkJGRDA1RDQ2ICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQpCRkQwNUQ0OCAgRjg1RTEwMTAgICBBRERJIFpFUk8sIFMwLCAtMTk1NApCRkQwNUQ0QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjExMDogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzbGVlcF9lbiApIHsNCkJGRDA1RDRFICAwMDI0MTQ1RSAgIExCVSBWMCwgMzYoUzgpCkJGRDA1RDUyICAwMDIwNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1RDk2CjExMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUi0+RUNfU0xFRVBfRU4yIHw9IHNscF9tYXNrOw0KQkZEMDVENTYgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgKQkZEMDVENUEgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2CkJGRDA1RDVFICBBMDA4NDFBMyAgIExVSSBWMSwgMHhBMDA4CkJGRDA1RDYyICAwMTAwNTA2MyAgIE9SSSBWMSwgVjEsIDI1NgpCRkQwNUQ2NiAgICAgIDZBMzkgICBMVyBBMCwgMzYoVjEpCkJGRDA1RDY4ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDVENkMgICAgICA0NERDICAgT1IxNiBWMSwgQTAKQkZEMDVENkUgICAgICBFOUE5ICAgU1cgVjEsIDM2KFYwKQoxMTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWRkciA9IGxlZF9hZGRyKGxlZF9pZCk7DQpCRkQwNUQ3MCAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwNUQ3NCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNUQ3NiAgNEExMDc3RTggICBKQUxTIGxlZF9hZGRyCkJGRDA1RDc4ICAgICAgNEExMCAgIExXIFMwLCA2NChTUCkKQkZEMDVEN0EgICAgICAwQzAwICAgTk9QCkJGRDA1RDdDICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopbGFkZHIpLT5DT05GSUcgJj0gfigweDAzdWwpOw0KQkZEMDVEODAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQpCRkQwNUQ4NCAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpCkJGRDA1RDg4ICAgICAgNkEzMCAgIExXIEEwLCAwKFYxKQpCRkQwNUQ4QSAgRkZGQzMwNjAgICBBRERJVSBWMSwgWkVSTywgLTQKQkZEMDVEOEMgIDQ0OUNGRkZDICAgTFcgUkEsIDE3NTY0KEdQKQpCRkQwNUQ4RSAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTAKQkZEMDVEOTAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCkJGRDA1RDkyICAgICAgQ0MwRiAgIEIgMHhCRkQwNURCMgpCRkQwNUQ5NCAgICAgIDBDMDAgICBOT1AKMTE0OiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMTE1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSLT5FQ19TTEVFUF9FTjIgJj0gfihzbHBfbWFzayk7DQpCRkQwNUQ5NiAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOApCRkQwNUQ5QSAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYKQkZEMDVEOUUgIEEwMDg0MUEzICAgTFVJIFYxLCAweEEwMDgKQkZEMDVEQTIgIDAxMDA1MDYzICAgT1JJIFYxLCBWMSwgMjU2CkJGRDA1REE2ICAgICAgNkEzOSAgIExXIEEwLCAzNihWMSkKQkZEMDVEQTggIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwNURBQyAgICAgIDQ0MUIgICBOT1QxNiBWMSwgVjEKQkZEMDVEQUUgICAgICA0NDlDICAgQU5EMTYgVjEsIEEwCkJGRDA1REIwICAgICAgRTlBOSAgIFNXIFYxLCAzNihWMCkKMTE2OiAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxMTc6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTE4OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDVEQjIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDVEQjQgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNURCNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA1REI4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDVEQkEgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNURCQyAgICAgIDBDMDAgICBOT1AKMTE5OiAgICAgICAgICAgICAgICAgDQoxMjA6ICAgICAgICAgICAgICAgICANCjEyMTogICAgICAgICAgICAgICAgIC8qKg0KMTIyOiAgICAgICAgICAgICAgICAgICogbGVkX3Jlc2V0IC0gUmVzZXQgdGhlIHNwZWNpZmllZCBMRUQgaGFyZHdhcmUgYmxvY2suDQoxMjM6ICAgICAgICAgICAgICAgICAgKiANCjEyNDogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjEyNTogICAgICAgICAgICAgICAgICAqIA0KMTI2OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGxlZF9pZCAwLWJhc2VkIExFRCBJRCANCjEyNzogICAgICAgICAgICAgICAgICAqIEBub3RlIFNldHMgdGhlIExFRCdzIHNvZnQgcmVzZXQgYml0IGFuZCB3YWl0cyBmb3IgaGFyZHdhcmUgdG8gDQoxMjg6ICAgICAgICAgICAgICAgICAgKiAgICAgICBjbGVhciBpdC4gV2lsbCB3YWl0IHVwIHRvIDB4MTAwMDAgdGltZXMuDQoxMjk6ICAgICAgICAgICAgICAgICAgKi8NCjEzMDogICAgICAgICAgICAgICAgIHZvaWQgbGVkX3Jlc2V0KHVpbnQ4X3QgbGVkX2lkKQ0KMTMxOiAgICAgICAgICAgICAgICAgew0KQkZEMDdGQzggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDdGQ0EgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQpCRkQwN0ZDQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApCkJGRDA3RkNFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCkJGRDA3RkQwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwCkJGRDA3RkQyICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkKMTMyOiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHA7DQoxMzM6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY250Ow0KMTM0OiAgICAgICAgICAgICAgICAgDQoxMzU6ICAgICAgICAgICAgICAgICAgICAgcCA9IGxlZF9hZGRyKGxlZF9pZCk7DQpCRkQwN0ZENiAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwN0ZEQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwN0ZEQyAgNEExMDc3RTggICBKQUxTIGxlZF9hZGRyCkJGRDA3RkRFICAgICAgNEExMCAgIExXIFMwLCA2NChTUCkKQkZEMDdGRTAgICAgICAwQzAwICAgTk9QCkJGRDA3RkUyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkKMTM2OiAgICAgICAgICAgICAgICAgICAgICgoQkJMRURfVHlwZURlZiAqKXApLT5DT05GSUcgPSAoTEVEX0NGR19SRVNFVCk7DQpCRkQwN0ZFNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA3RkVBICAwMDgwMzA2MCAgIEFERElVIFYxLCBaRVJPLCAxMjgKQkZEMDdGRUUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjEzNzogICAgICAgICAgICAgICAgIA0KMTM4OiAgICAgICAgICAgICAgICAgICAgIGNudCA9IDB4MTAwMDAwVUw7DQpCRkQwN0ZGMCAgMDAxMDQxQTIgICBMVUkgVjAsIDB4MTAKQkZEMDdGRjQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoxMzk6ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoKEJCTEVEX1R5cGVEZWYgKilwKS0+Q09ORklHICYgKExFRF9DRkdfUkVTRVQpICkgew0KQkZEMDdGRjggICAgICBDQzBBICAgQiAweEJGRDA4MDBFCkJGRDA3RkZBICAgICAgMEMwMCAgIE5PUApCRkQwODAwRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA4MDEyICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQpCRkQwODAxNCAgICAgIDJEMjAgICBBTkRJIFYwLCBWMCwgMHg4MApCRkQwODAxNiAgRkZGMTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwN0ZGQwpCRkQwODAxOCAgQ0MwMkZGRjEgICBMVyBSQSwgLTEzMzEwKFMxKQpCRkQwODAxQSAgICAgIENDMDIgICBCIDB4QkZEMDgwMjAKQkZEMDgwMUMgICAgICAwQzAwICAgTk9QCjE0MDogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjbnQgIT0gMFVMICkgew0KQkZEMDdGRkMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODAwMCAgMDAwRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODAxRQoxNDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQtLTsNCkJGRDA4MDA0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDgwMDggICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQpCRkQwODAwQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE0MjogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCjE0MzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KQkZEMDgwMUUgICAgICAwQzAwICAgTk9QCjE0NDogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTQ1OiAgICAgICAgICAgICAgICAgICAgIH0NCjE0NjogICAgICAgICAgICAgICAgIH0gDQpCRkQwODAyMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwODAyMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA4MDI0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDgwMjYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwODAyOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA4MDJBICAgICAgMEMwMCAgIE5PUAoxNDc6ICAgICAgICAgICAgICAgICANCjE0ODogICAgICAgICAgICAgICAgIA0KMTQ5OiAgICAgICAgICAgICAgICAgdWludDhfdCBsZWRfZ2V0X2dwaW9fbnVtKHVpbnQ4X3QgbGVkX2lkKQ0KMTUwOiAgICAgICAgICAgICAgICAgew0KQkZEMDk5RUMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOTlFRSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDk5RjAgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk5RjIgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDk5RjQgIDAwMDgxODVFICAgU0IgVjAsIDgoUzgpCjE1MTogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVkX2dwaW9fdGJsWyhsZWRfaWQgJiAoKExFRF9JRF9NQVgpLTF1KSldOw0KQkZEMDk5RjggIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQpCRkQwOTlGQyAgICAgIDJEQTIgICBBTkRJIFYxLCBWMCwgMHgyCkJGRDA5OUZFICBCRkQwNDFBMiAgIExVSSBWMCwgMHhCRkQwCkJGRDA5QTAwICAyNUIyQkZEMCAgIExEQzEgRjMwLCA5NjUwKFMwKQpCRkQwOUEwMiAgICAgIDI1QjIgICBTTEwgVjEsIFYxLCAxCkJGRDA5QTA0ICAwMTc4MzA0MiAgIEFERElVIFYwLCBWMCwgMzc2CkJGRDA5QTA4ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwOUEwQSAgICAgIDI5MjAgICBMSFUgVjAsIDAoVjApCkJGRDA5QTBDICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCjE1MjogICAgICAgICAgICAgICAgIH0NCkJGRDA5QTBFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5QTEwICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUExMiAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlBMTQgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUExNiAgICAgIDBDMDAgICBOT1AKMTUzOiAgICAgICAgICAgICAgICAgDQoxNTQ6ICAgICAgICAgICAgICAgICANCjE1NTogICAgICAgICAgICAgICAgIC8qKg0KMTU2OiAgICAgICAgICAgICAgICAgICogbGVkX2luaXQgLSBJbml0aWFsaXplIHRoZSBzcGVjaWZpZWQgTEVEIA0KMTU3OiAgICAgICAgICAgICAgICAgICogDQoxNTg6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxNTk6ICAgICAgICAgICAgICAgICAgKiANCjE2MDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBsZWRfaWQgMC1iYXNlZCBMRUQgSUQgDQoxNjE6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBDb25maWd1cmVzIHRoZSBMRUQncyBHUElPIHBpbiBmb3IgTEVEIGZ1bmN0aW9uIGFuZCB0aGVuIA0KMTYyOiAgICAgICAgICAgICAgICAgICogICAgICAgcGVmb3JtcyBhIHNvZnQgcmVzZXQgb2YgdGhlIExFRCBoYXJkd2FyZS4NCjE2MzogICAgICAgICAgICAgICAgICAqLw0KMTY0OiAgICAgICAgICAgICAgICAgdm9pZCBsZWRfaW5pdCh1aW50OF90IGxlZF9pZCkNCjE2NTogICAgICAgICAgICAgICAgIHsNCkJGRDA3Q0ZDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA3Q0ZFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDdEMDAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwN0QwMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwN0QwNCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMApCRkQwN0QwNiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpCjE2NjogICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZWRpOw0KMTY3OiAgICAgICAgICAgICAgICAgDQoxNjg6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZWRfaWQgPCBMRURfSURfTUFYICkNCkJGRDA3RDBBICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA3RDBFICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMwpCRkQwN0QxMiAgMDAyMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0Q1NgoxNjk6ICAgICAgICAgICAgICAgICAgICAgew0KMTcwOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXRzWzc6MF0gPSBHUElPX0lELCBiaXRzWzE1OjhdID0gR1BJTyBGdW5jdGlvbiAqLw0KMTcxOiAgICAgICAgICAgICAgICAgICAgICAgICBsZWRpID0gbGVkX2dwaW9fdGJsW2xlZF9pZF07DQpCRkQwN0QxNiAgMDAyMDE0N0UgICBMQlUgVjEsIDMyKFM4KQpCRkQwN0QxQSAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMApCRkQwN0QxQyAgMjVCMkJGRDAgICBMREMxIEYzMCwgOTY1MChTMCkKQkZEMDdEMUUgICAgICAyNUIyICAgU0xMIFYxLCBWMSwgMQpCRkQwN0QyMCAgMDE3ODMwNDIgICBBRERJVSBWMCwgVjAsIDM3NgpCRkQwN0QyNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjAKQkZEMDdEMjYgICAgICAyOTIwICAgTEhVIFYwLCAwKFYwKQpCRkQwN0QyOCAgMDAxMDM4NUUgICBTSCBWMCwgMTYoUzgpCjE3MjogICAgICAgICAgICAgICAgICAgICAgICAgR1BJT1Byb3BlcnR5U2V0KChsZWRpICYgMHhGRiksIEdQSU9fUFJPUF9NVVhfU0VMLCAobGVkaSA+PiA4KSAmIDB4RkYpOw0KQkZEMDdEMkMgIDAwMTAzNDVFICAgTEhVIFYwLCAxNihTOCkKQkZEMDdEMzAgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYKQkZEMDdEMzIgICAgICAwQzYyICAgTU9WRSBWMSwgVjAKQkZEMDdEMzQgIDAwMTAzNDVFICAgTEhVIFYwLCAxNihTOCkKQkZEMDdEMzggICAgICAyNTIxICAgU1JMIFYwLCBWMCwgOApCRkQwN0QzQSAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGCkJGRDA3RDNDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxCkJGRDA3RDNFICAgICAgRUU4NyAgIExJIEExLCA3CkJGRDA3RDQwICAgICAgMENDMiAgIE1PVkUgQTIsIFYwCkJGRDA3RDQyICAyNUNDNzdFOCAgIEpBTFMgR1BJT1Byb3BlcnR5U2V0CkJGRDA3RDQ0ICAgICAgMjVDQyAgIFNMTCBWMSwgQTAsIDYKQkZEMDdENDYgICAgICAwQzAwICAgTk9QCjE3MzogICAgICAgICAgICAgICAgICAgICAgICAgbGVkX3Jlc2V0KGxlZGkgJiAweEZGKTsNCkJGRDA3RDQ4ICAwMDEwMzQ1RSAgIExIVSBWMCwgMTYoUzgpCkJGRDA3RDRDICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDA3RDRFICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA3RDUwICAzRkU0NzdFOCAgIEpBTFMgbGVkX3Jlc2V0CkJGRDA3RDUyICAwQzAwM0ZFNCAgIExIIFJBLCAzMDcyKEEwKQpCRkQwN0Q1NCAgICAgIDBDMDAgICBOT1AKMTc0OiAgICAgICAgICAgICAgICAgICAgIH0NCjE3NTogICAgICAgICAgICAgICAgIH0NCkJGRDA3RDU2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3RDU4ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkKQkZEMDdENUEgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQpCRkQwN0Q1QyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3RDVFICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDdENjAgICAgICAwQzAwICAgTk9QCjE3NjogICAgICAgICAgICAgICAgIA0KMTc3OiAgICAgICAgICAgICAgICAgDQoxNzg6ICAgICAgICAgICAgICAgICAvKioNCjE3OTogICAgICAgICAgICAgICAgICAqIGxlZF9tb2RlX2JsaW5rIC0gRW5hYmxlIExFRCBoYXJkd2FyZSBibGluaw0KMTgwOiAgICAgICAgICAgICAgICAgICogDQoxODE6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxODI6ICAgICAgICAgICAgICAgICAgKiANCjE4MzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBsZWRfaWQgMC1iYXNlZCBMRUQgSUQNCjE4NDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBkdXR5X2N5Y2xlIGR1dHkgY3ljbGUgKDB4ODAgPSA1MCUpDQoxODU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gcHJlc2NhbGUgc2V0cyB0aGUgYmxpbmsgZnJlcXVlbmN5IA0KMTg2OiAgICAgICAgICAgICAgICAgICogQG5vdGUgQmxpbmsgZnJlcXVlbmN5IGlzICgzMjc2OCAqIDI1NSkvKHByZXNjYWxlICsgMSkgSHoNCjE4NzogICAgICAgICAgICAgICAgICAqLw0KMTg4OiAgICAgICAgICAgICAgICAgdm9pZCBsZWRfbW9kZV9ibGluayh1aW50OF90IGxlZF9pZCwNCjE4OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkdXR5X2N5Y2xlLA0KMTkwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwcmVzY2FsZSkNCjE5MTogICAgICAgICAgICAgICAgIHsNCkJGRDA3OTE0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA3OTE2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDc5MTggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwNzkxQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwNzkxQyAgICAgIDBDNjUgICBNT1ZFIFYxLCBBMQpCRkQwNzkxRSAgICAgIDBDNDYgICBNT1ZFIFYwLCBBMgpCRkQwNzkyMCAgMDAyMDE4OUUgICBTQiBBMCwgMzIoUzgpCkJGRDA3OTI0ICAwMDI0MTg3RSAgIFNCIFYxLCAzNihTOCkKQkZEMDc5MjggIDAwMjgzODVFICAgU0ggVjAsIDQwKFM4KQoxOTI6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcExlZDsNCjE5MzogICAgICAgICAgICAgICAgIA0KMTk0OiAgICAgICAgICAgICAgICAgICAgIHBMZWQgPSAwVUw7DQpCRkQwNzkyQyAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZF9pc192YWxpZChsZWRfaWQpKSB7DQpCRkQwNzkzMCAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwNzkzNCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwNzkzNiAgNEYzNjc3RTggICBKQUxTIGxlZF9pc192YWxpZApCRkQwNzkzOCAgICAgIDRGMzYgICBBRERJVSBUOSwgVDksIC01CkJGRDA3OTNBICAgICAgMEMwMCAgIE5PUApCRkQwNzkzQyAgMDAxRTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNzk3QwoxOTc6ICAgICAgICAgICAgICAgICAgICAgICAgIHBMZWQgPSBsZWRfYWRkcihsZWRfaWQpOw0KQkZEMDc5NDAgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDc5NDQgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDc5NDYgIDRBMTA3N0U4ICAgSkFMUyBsZWRfYWRkcgpCRkQwNzk0OCAgICAgIDRBMTAgICBMVyBTMCwgNjQoU1ApCkJGRDA3OTRBICAgICAgMEMwMCAgIE5PUApCRkQwNzk0QyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjE5ODogICAgICAgICAgICAgICAgIA0KMTk5OiAgICAgICAgICAgICAgICAgICAgICAgICAoKEJCTEVEX1R5cGVEZWYgKilwTGVkKS0+Q09ORklHID0gTEVEX0NGR19DTlRMX0JMSU5LOw0KQkZEMDc5NTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNzk1NCAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwNzk1NiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjAwOiAgICAgICAgICAgICAgICAgICAgICAgICAoKEJCTEVEX1R5cGVEZWYgKilwTGVkKS0+TElNSVQgPSAodWludDMyX3QpZHV0eV9jeWNsZTsNCkJGRDA3OTU4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDc5NUMgIDAwMjQxNDdFICAgTEJVIFYxLCAzNihTOCkKQkZEMDc5NjAgICAgICBFOUExICAgU1cgVjEsIDQoVjApCjIwMTogICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopcExlZCktPkRFTEFZID0gKHVpbnQzMl90KXByZXNjYWxlOw0KQkZEMDc5NjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNzk2NiAgMDAyODM0N0UgICBMSFUgVjEsIDQwKFM4KQpCRkQwNzk2QSAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKMjAyOiAgICAgICAgICAgICAgICAgICAgICAgICAoKEJCTEVEX1R5cGVEZWYgKilwTGVkKS0+Q09ORklHIHw9IChMRURfQ0ZHX0VOX1VQREFURSk7DQpCRkQwNzk2QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA3OTcwICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDc5NzQgICAgICA2OUIwICAgTFcgVjEsIDAoVjEpCkJGRDA3OTc2ICAwMDQwNTA2MyAgIE9SSSBWMSwgVjEsIDY0CkJGRDA3OTdBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQoyMDM6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjA0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDc5N0MgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc5N0UgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNzk4MCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA3OTgyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDc5ODQgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwNzk4NiAgICAgIDBDMDAgICBOT1AKMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICANCjIwNzogICAgICAgICAgICAgICAgIC8qKg0KMjA4OiAgICAgICAgICAgICAgICAgICogbGVkX291dF90b2dnbGUgLSBUb2dnbGUgdGhlIExFRCBvdXRwdXQgcGluLg0KMjA5OiAgICAgICAgICAgICAgICAgICogDQoyMTA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoyMTE6ICAgICAgICAgICAgICAgICAgKiANCjIxMjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBsZWRfaWQgMC1iYXNlZCBMRUQgSUQuDQoyMTM6ICAgICAgICAgICAgICAgICAgKi8NCjIxNDogICAgICAgICAgICAgICAgIHZvaWQgbGVkX291dF90b2dnbGUodWludDhfdCBsZWRfaWQpDQoyMTU6ICAgICAgICAgICAgICAgICB7DQpCRkQwODVBOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODVBQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4NUFDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDg1QUUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDg1QjAgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDg1QjIgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQoyMTY6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcDsNCjIxNzogICAgICAgICAgICAgICAgIA0KMjE4OiAgICAgICAgICAgICAgICAgICAgIGlmIChsZWRfaXNfdmFsaWQobGVkX2lkKSkgew0KQkZEMDg1QjYgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDg1QkEgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDg1QkMgIDRGMzY3N0U4ICAgSkFMUyBsZWRfaXNfdmFsaWQKQkZEMDg1QkUgICAgICA0RjM2ICAgQURESVUgVDksIFQ5LCAtNQpCRkQwODVDMCAgICAgIDBDMDAgICBOT1AKQkZEMDg1QzIgIDAwMTc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg1RjQKMjE5OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gbGVkX2FkZHIobGVkX2lkKTsNCkJGRDA4NUM2ICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA4NUNBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4NUNDICA0QTEwNzdFOCAgIEpBTFMgbGVkX2FkZHIKQkZEMDg1Q0UgICAgICA0QTEwICAgTFcgUzAsIDY0KFNQKQpCRkQwODVEMCAgICAgIDBDMDAgICBOT1AKQkZEMDg1RDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyMjA6ICAgICAgICAgICAgICAgICANCjIyMTogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoQkJMRURfVHlwZURlZiAqKXApLT5DT05GSUcgJiBMRURfQ0ZHX0NOVExfTUFTSykgew0KQkZEMDg1RDYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODVEQSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkKQkZEMDg1REMgICAgICAyRDIzICAgQU5ESSBWMCwgVjAsIDB4MwpCRkQwODVERSAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODVFQwoyMjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJCTEVEX1R5cGVEZWYgKilwKS0+Q09ORklHID0gTEVEX0NGR19DTlRMX0xPOw0KQkZEMDg1RTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODVFNiAgICAgIEU4MjAgICBTVyBTMCwgMChWMCkKQkZEMDg1RTggICAgICBDQzA1ICAgQiAweEJGRDA4NUY0CkJGRDA4NUVBICAgICAgMEMwMCAgIE5PUAoyMjM6ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoyMjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJCTEVEX1R5cGVEZWYgKilwKS0+Q09ORklHID0gTEVEX0NGR19DTlRMX0hJOw0KQkZEMDg1RUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODVGMCAgICAgIEVEODMgICBMSSBWMSwgMwpCRkQwODVGMiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKMjI1OiAgICAgICAgICAgICAgICAgICAgICAgICB9DQoyMjY6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjI3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDg1RjQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDg1RjYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwODVGOCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA4NUZBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDg1RkMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwODVGRSAgICAgIDBDMDAgICBOT1AKMjI4OiAgICAgICAgICAgICAgICAgDQoyMjk6ICAgICAgICAgICAgICAgICANCjIzMDogICAgICAgICAgICAgICAgIC8qKg0KMjMxOiAgICAgICAgICAgICAgICAgICogbGVkX291dF9oaWdoIC0gU2V0IHRoZSBMRUQgYmxvY2sgdG8gZHJpdmUgdGhlIHBpbiBIaWdoDQoyMzI6ICAgICAgICAgICAgICAgICAgKiANCjIzMzogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjIzNDogICAgICAgICAgICAgICAgICAqIA0KMjM1OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGxlZF9pZCAwLWJhc2VkIExFRCBJRCANCjIzNjogICAgICAgICAgICAgICAgICAqIEBub3RlIFRoZSBMRUQgY29udHJvbGxlciB3aWxsIGRyaXZlIHRoZSBwaW4gSGlnaC4gRGVwZW5kaW5nIA0KMjM3OiAgICAgICAgICAgICAgICAgICogICAgICAgdXBvbiB0aGUgZXh0ZXJuYWwgY2lyY3VpdCB0aGUgTEVEIG1heSBiZSBpbiBPTiBvciBPRkYNCjIzODogICAgICAgICAgICAgICAgICAqICAgICAgIHN0YXRlLg0KMjM5OiAgICAgICAgICAgICAgICAgICovDQoyNDA6ICAgICAgICAgICAgICAgICB2b2lkIGxlZF9vdXRfaGlnaCh1aW50OF90IGxlZF9pZCkNCjI0MTogICAgICAgICAgICAgICAgIHsNCkJGRDA5MjEwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA5MjEyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDkyMTQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOTIxNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTIxOCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMApCRkQwOTIxQSAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpCjI0MjogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwOw0KMjQzOiAgICAgICAgICAgICAgICAgDQoyNDQ6ICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZF9pc192YWxpZChsZWRfaWQpKSB7DQpCRkQwOTIxRSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQpCRkQwOTIyMiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOTIyNCAgNEYzNjc3RTggICBKQUxTIGxlZF9pc192YWxpZApCRkQwOTIyNiAgICAgIDRGMzYgICBBRERJVSBUOSwgVDksIC01CkJGRDA5MjI4ICAgICAgMEMwMCAgIE5PUApCRkQwOTIyQSAgMDAwQzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTI0NgoyNDU6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBsZWRfYWRkcihsZWRfaWQpOw0KQkZEMDkyMkUgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDkyMzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDkyMzQgIDRBMTA3N0U4ICAgSkFMUyBsZWRfYWRkcgpCRkQwOTIzNiAgICAgIDRBMTAgICBMVyBTMCwgNjQoU1ApCkJGRDA5MjM4ICAgICAgMEMwMCAgIE5PUApCRkQwOTIzQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjI0NjogICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopcCktPkNPTkZJRyA9IExFRF9DRkdfQ05UTF9ISTsNCkJGRDA5MjNFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDkyNDIgICAgICBFRDgzICAgTEkgVjEsIDMKQkZEMDkyNDQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjI0NzogICAgICAgICAgICAgICAgICAgICB9DQoyNDg6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTI0NiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTI0OCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApCkJGRDA5MjRBICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkKQkZEMDkyNEMgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwOTI0RSAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5MjUwICAgICAgMEMwMCAgIE5PUAoyNDk6ICAgICAgICAgICAgICAgICANCjI1MDogICAgICAgICAgICAgICAgIA0KMjUxOiAgICAgICAgICAgICAgICAgLyoqDQoyNTI6ICAgICAgICAgICAgICAgICAgKiBsZWRfb3V0X2xvdyAtIFNldCB0aGUgTEVEIGJsb2NrIHRvIGRyaXZlIHRoZSBwaW4gTG93DQoyNTM6ICAgICAgICAgICAgICAgICAgKiANCjI1NDogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjI1NTogICAgICAgICAgICAgICAgICAqIA0KMjU2OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGxlZF9pZCAwLWJhc2VkIExFRCBJRCANCjI1NzogICAgICAgICAgICAgICAgICAqIEBub3RlIFRoZSBMRUQgY29udHJvbGxlciB3aWxsIGRyaXZlIHRoZSBwaW4gTG93LiBEZXBlbmRpbmcgDQoyNTg6ICAgICAgICAgICAgICAgICAgKiAgICAgICB1cG9uIHRoZSBleHRlcm5hbCBjaXJjdWl0IHRoZSBMRUQgbWF5IGJlIGluIE9OIG9yIE9GRg0KMjU5OiAgICAgICAgICAgICAgICAgICogICAgICAgc3RhdGUuDQoyNjA6ICAgICAgICAgICAgICAgICAgKi8NCjI2MTogICAgICAgICAgICAgICAgIHZvaWQgbGVkX291dF9sb3codWludDhfdCBsZWRfaWQpDQoyNjI6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTQ2MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwOTQ2MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA5NDY0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDk0NjYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDk0NjggICAgICAwQzQ0ICAgTU9WRSBWMCwgQTAKQkZEMDk0NkEgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQoyNjM6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcDsNCjI2NDogICAgICAgICAgICAgICAgIA0KMjY1OiAgICAgICAgICAgICAgICAgICAgIGlmIChsZWRfaXNfdmFsaWQobGVkX2lkKSkgew0KQkZEMDk0NkUgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkKQkZEMDk0NzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjAKQkZEMDk0NzQgIDRGMzY3N0U4ICAgSkFMUyBsZWRfaXNfdmFsaWQKQkZEMDk0NzYgICAgICA0RjM2ICAgQURESVUgVDksIFQ5LCAtNQpCRkQwOTQ3OCAgICAgIDBDMDAgICBOT1AKQkZEMDk0N0EgIDAwMEI0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDk0OTQKMjY2OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gbGVkX2FkZHIobGVkX2lkKTsNCkJGRDA5NDdFICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpCkJGRDA5NDgyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA5NDg0ICA0QTEwNzdFOCAgIEpBTFMgbGVkX2FkZHIKQkZEMDk0ODYgICAgICA0QTEwICAgTFcgUzAsIDY0KFNQKQpCRkQwOTQ4OCAgICAgIDBDMDAgICBOT1AKQkZEMDk0OEEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyNjc6ICAgICAgICAgICAgICAgICAgICAgICAgICgoQkJMRURfVHlwZURlZiAqKXApLT5DT05GSUcgPSBMRURfQ0ZHX0NOVExfTE87DQpCRkQwOTQ4RSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA5NDkyICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQoyNjg6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjY5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk0OTQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDk0OTYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwOTQ5OCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA5NDlBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDk0OUMgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOTQ5RSAgICAgIDBDMDAgICBOT1AKMjcwOiAgICAgICAgICAgICAgICAgDQoyNzE6ICAgICAgICAgICAgICAgICANCjI3MjogICAgICAgICAgICAgICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KMjczOiAgICAgICAgICAgICAgICAgfQ0KMjc0OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyNzU6ICAgICAgICAgICAgICAgICANCjI3NjogICAgICAgICAgICAgICAgIC8qIGVuZCBtZWMxNHh4X2JibGVkLmggKi8NCjI3NzogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoyNzg6ICAgICAgICAgICAgICAgICAgKi8NCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMjYuYyAgLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTMgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEyNi5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEyNl9ESVNBR0cgPT0gMA0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjQwOiAgICAgICAgICAgICAgICAgIGdpcnEyNl9pc3Iodm9pZCkNCjQxOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3NDA4ICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDc0MEMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA3NDBFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDc0MTAgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA3NDEyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQpCRkQwNzQxNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNzQxNiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA3NDE4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNzQxQyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApCkJGRDA3NDFFICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA3NDIyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkKQkZEMDc0MjQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDc0MjYgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDc0MjggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDc0MkEgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA3NDJDICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNzQyRSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA3NDMwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzQzNCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkKQkZEMDc0MzYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApCkJGRDA3NDM4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkKQkZEMDc0M0EgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNzQzQyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA3NDNFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjQyOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxNik7DQpCRkQwNzQ0MCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzQ0MiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3NDQ0ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzQ0OCAgMDAwMTQxQTMgICBMVUkgVjEsIDB4MQpCRkQwNzQ0QyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc0NEUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc0NTAgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzQ1MiAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3NDU0ICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDc0NTYgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3NDU4ICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzQ1QSAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3NDVFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3NDYwICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3NDYyICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDc0NjQgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzQ2NiAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDc0NkEgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzQ2QyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3NDZFICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzQ3MCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3NDcyICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDc0NzQgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3NDc2ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzQ3OCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3NDdBICBGMzdDMDAwMCAgIEVSRVQKQkZEMDc0N0MgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwCjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ4OiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iMCh2b2lkKQ0KNDk6ICAgICAgICAgICAgICAgICAgew0KNTA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCAwKTsNCjUxOiAgICAgICAgICAgICAgICAgIH0NCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU0OiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iMSh2b2lkKQ0KNTU6ICAgICAgICAgICAgICAgICAgew0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCAxKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjYwOiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iMih2b2lkKQ0KNjE6ICAgICAgICAgICAgICAgICAgew0KNjI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCAyKTsNCjYzOiAgICAgICAgICAgICAgICAgIH0NCjY0OiAgICAgICAgICAgICAgICAgIA0KNjU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY2OiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iMyh2b2lkKQ0KNjc6ICAgICAgICAgICAgICAgICAgew0KNjg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCAzKTsNCjY5OiAgICAgICAgICAgICAgICAgIH0NCjcwOiAgICAgICAgICAgICAgICAgIA0KNzE6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcyOiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iNCh2b2lkKQ0KNzM6ICAgICAgICAgICAgICAgICAgew0KNzQ6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCA0KTsNCjc1OiAgICAgICAgICAgICAgICAgIH0NCjc2OiAgICAgICAgICAgICAgICAgIA0KNzc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc4OiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iNSh2b2lkKQ0KNzk6ICAgICAgICAgICAgICAgICAgew0KODA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCA1KTsNCjgxOiAgICAgICAgICAgICAgICAgIH0NCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg0OiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iNih2b2lkKQ0KODU6ICAgICAgICAgICAgICAgICAgew0KODY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCA2KTsNCjg3OiAgICAgICAgICAgICAgICAgIH0NCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjkwOiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iNyh2b2lkKQ0KOTE6ICAgICAgICAgICAgICAgICAgew0KOTI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCA3KTsNCjkzOiAgICAgICAgICAgICAgICAgIH0NCjk0OiAgICAgICAgICAgICAgICAgIA0KOTU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk2OiAgICAgICAgICAgICAgICAgIGdpcnEyNl9iOCh2b2lkKQ0KOTc6ICAgICAgICAgICAgICAgICAgew0KOTg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCA4KTsNCjk5OiAgICAgICAgICAgICAgICAgIH0NCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMjogICAgICAgICAgICAgICAgIGdpcnEyNl9iOSh2b2lkKQ0KMTAzOiAgICAgICAgICAgICAgICAgew0KMTA0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCA5KTsNCjEwNTogICAgICAgICAgICAgICAgIH0NCjEwNjogICAgICAgICAgICAgICAgIA0KMTA3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwODogICAgICAgICAgICAgICAgIGdpcnEyNl9iMTAodm9pZCkNCjEwOTogICAgICAgICAgICAgICAgIHsNCjExMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNl9JRCwgMTApOw0KMTExOiAgICAgICAgICAgICAgICAgfQ0KMTEyOiAgICAgICAgICAgICAgICAgDQoxMTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTE0OiAgICAgICAgICAgICAgICAgZ2lycTI2X2IxMSh2b2lkKQ0KMTE1OiAgICAgICAgICAgICAgICAgew0KMTE2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCAxMSk7DQoxMTc6ICAgICAgICAgICAgICAgICB9DQoxMTg6ICAgICAgICAgICAgICAgICANCjExOTogICAgICAgICAgICAgICAgIA0KMTIwOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMjE6ICAgICAgICAgICAgICAgICANCjEyMjogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMjYuYyAqLw0KMTIzOiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjEyNDogICAgICAgICAgICAgICAgICAqLw0KMTI1OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTI1LmMgIC0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDEzIE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMjUuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICAjaWYgR0lSUTI1X0RJU0FHRyA9PSAwDQozNzogICAgICAgICAgICAgICAgICANCjM4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KMzk6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2lzcih2b2lkKQ0KNDA6ICAgICAgICAgICAgICAgICAgew0KQkZEMDczOTAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUApCRkQwNzM5NCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMKQkZEMDczOTYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMgpCRkQwNzM5OCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwKQkZEMDczOUEgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1CkJGRDA3MzlDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA3MzlFICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkKQkZEMDczQTAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzCkJGRDA3M0E0ICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkKQkZEMDczQTYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UKQkZEMDczQUEgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQpCRkQwNzNBQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNzNBRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNzNCMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNzNCMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDczQjQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA3M0I2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDczQjggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA3M0JDICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQpCRkQwNzNCRSAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkKQkZEMDczQzAgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQpCRkQwNzNDMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA3M0M0ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDczQzYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKNDE6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDE1KTsNCkJGRDA3M0M4ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA3M0NBICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkKQkZEMDczQ0MgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyCkJGRDA3M0QwICA4MDAwNTA2MCAgIE9SSSBWMSwgWkVSTywgLTMyNzY4CkJGRDA3M0Q0ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0MjogICAgICAgICAgICAgICAgICB9DQpCRkQwNzNENiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNzNEOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA3M0RBICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDczREMgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwNzNERSAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkKQkZEMDczRTAgICAgICA0ODQxICAgTFcgVjAsIDQoU1ApCkJGRDA3M0UyICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDczRTYgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDczRTggIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykKQkZEMDczRUEgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQpCRkQwNzNFQyAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApCkJGRDA3M0VFICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQwpCRkQwNzNGMiAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApCkJGRDA3M0Y0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDczRjYgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA3M0Y4ICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDczRkEgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNzNGQyAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDczRkUgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA3NDAwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDc0MDIgIEYzN0MwMDAwICAgRVJFVApCRkQwNzQwNCAgMEMwMEYzN0MgICBKQUxYIDB4QkRGMDMwMDAKNDM6ICAgICAgICAgICAgICAgICAgDQo0NDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDc6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IwKHZvaWQpDQo0ODogICAgICAgICAgICAgICAgICB7DQo0OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDApOw0KNTA6ICAgICAgICAgICAgICAgICAgfQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IxKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDEpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KNTc6ICAgICAgICAgICAgICAgICAgDQo1ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTk6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IyKHZvaWQpDQo2MDogICAgICAgICAgICAgICAgICB7DQo2MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDIpOw0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjU6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IzKHZvaWQpDQo2NjogICAgICAgICAgICAgICAgICB7DQo2NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDMpOw0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzE6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I0KHZvaWQpDQo3MjogICAgICAgICAgICAgICAgICB7DQo3MzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDQpOw0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KNzU6ICAgICAgICAgICAgICAgICAgDQo3NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzc6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I1KHZvaWQpDQo3ODogICAgICAgICAgICAgICAgICB7DQo3OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDUpOw0KODA6ICAgICAgICAgICAgICAgICAgfQ0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODM6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I2KHZvaWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQo4NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDYpOw0KODY6ICAgICAgICAgICAgICAgICAgfQ0KODc6ICAgICAgICAgICAgICAgICAgDQo4ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODk6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I3KHZvaWQpDQo5MDogICAgICAgICAgICAgICAgICB7DQo5MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDcpOw0KOTI6ICAgICAgICAgICAgICAgICAgfQ0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTU6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I4KHZvaWQpDQo5NjogICAgICAgICAgICAgICAgICB7DQo5NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDgpOw0KOTg6ICAgICAgICAgICAgICAgICAgfQ0KOTk6ICAgICAgICAgICAgICAgICAgDQoxMDA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTAxOiAgICAgICAgICAgICAgICAgZ2lycTI1X2I5KHZvaWQpDQoxMDI6ICAgICAgICAgICAgICAgICB7DQoxMDM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDkpOw0KMTA0OiAgICAgICAgICAgICAgICAgfQ0KMTA1OiAgICAgICAgICAgICAgICAgDQoxMDY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTA3OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxMCh2b2lkKQ0KMTA4OiAgICAgICAgICAgICAgICAgew0KMTA5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxMCk7DQoxMTA6ICAgICAgICAgICAgICAgICB9DQoxMTE6ICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTM6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjExKHZvaWQpDQoxMTQ6ICAgICAgICAgICAgICAgICB7DQoxMTU6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDExKTsNCjExNjogICAgICAgICAgICAgICAgIH0NCjExNzogICAgICAgICAgICAgICAgIA0KMTE4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjExOTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMTIodm9pZCkNCjEyMDogICAgICAgICAgICAgICAgIHsNCjEyMTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMTIpOw0KMTIyOiAgICAgICAgICAgICAgICAgfQ0KMTIzOiAgICAgICAgICAgICAgICAgDQoxMjQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTI1OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxMyh2b2lkKQ0KMTI2OiAgICAgICAgICAgICAgICAgew0KMTI3OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxMyk7DQoxMjg6ICAgICAgICAgICAgICAgICB9DQoxMjk6ICAgICAgICAgICAgICAgICANCjEzMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzE6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjE0KHZvaWQpDQoxMzI6ICAgICAgICAgICAgICAgICB7DQoxMzM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDE0KTsNCjEzNDogICAgICAgICAgICAgICAgIH0NCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEzNzogICAgICAgICAgICAgICAgIGdpcnEyNV9iMTUodm9pZCkNCjEzODogICAgICAgICAgICAgICAgIHsNCjEzOTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMTUpOw0KMTQwOiAgICAgICAgICAgICAgICAgfQ0KMTQxOiAgICAgICAgICAgICAgICAgDQoxNDI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQzOiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxNih2b2lkKQ0KMTQ0OiAgICAgICAgICAgICAgICAgew0KMTQ1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxNik7DQoxNDY6ICAgICAgICAgICAgICAgICB9DQoxNDc6ICAgICAgICAgICAgICAgICANCjE0ODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNDk6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjE3KHZvaWQpDQoxNTA6ICAgICAgICAgICAgICAgICB7DQoxNTE6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDE3KTsNCjE1MjogICAgICAgICAgICAgICAgIH0NCjE1MzogICAgICAgICAgICAgICAgIA0KMTU0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1NTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMTgodm9pZCkNCjE1NjogICAgICAgICAgICAgICAgIHsNCjE1NzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMTgpOw0KMTU4OiAgICAgICAgICAgICAgICAgfQ0KMTU5OiAgICAgICAgICAgICAgICAgDQoxNjA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTYxOiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxOSh2b2lkKQ0KMTYyOiAgICAgICAgICAgICAgICAgew0KMTYzOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxOSk7DQoxNjQ6ICAgICAgICAgICAgICAgICB9DQoxNjU6ICAgICAgICAgICAgICAgICANCjE2NjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNjc6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjIwKHZvaWQpDQoxNjg6ICAgICAgICAgICAgICAgICB7DQoxNjk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDIwKTsNCjE3MDogICAgICAgICAgICAgICAgIH0NCjE3MTogICAgICAgICAgICAgICAgIA0KMTcyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3MzogICAgICAgICAgICAgICAgIGdpcnEyNV9iMjEodm9pZCkNCjE3NDogICAgICAgICAgICAgICAgIHsNCjE3NTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMjEpOw0KMTc2OiAgICAgICAgICAgICAgICAgfQ0KMTc3OiAgICAgICAgICAgICAgICAgDQoxNzg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTc5OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IyMih2b2lkKQ0KMTgwOiAgICAgICAgICAgICAgICAgew0KMTgxOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAyMik7DQoxODI6ICAgICAgICAgICAgICAgICB9DQoxODM6ICAgICAgICAgICAgICAgICANCjE4NDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxODU6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjIzKHZvaWQpDQoxODY6ICAgICAgICAgICAgICAgICB7DQoxODc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDIzKTsNCjE4ODogICAgICAgICAgICAgICAgIH0NCjE4OTogICAgICAgICAgICAgICAgIA0KMTkwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5MTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMjQodm9pZCkNCjE5MjogICAgICAgICAgICAgICAgIHsNCjE5MzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMjQpOw0KMTk0OiAgICAgICAgICAgICAgICAgfQ0KMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTk3OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IyNSh2b2lkKQ0KMTk4OiAgICAgICAgICAgICAgICAgew0KMTk5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAyNSk7DQoyMDA6ICAgICAgICAgICAgICAgICB9DQoyMDE6ICAgICAgICAgICAgICAgICANCjIwMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMDM6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjI2KHZvaWQpDQoyMDQ6ICAgICAgICAgICAgICAgICB7DQoyMDU6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDI2KTsNCjIwNjogICAgICAgICAgICAgICAgIH0NCjIwNzogICAgICAgICAgICAgICAgIA0KMjA4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIwOTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMjcodm9pZCkNCjIxMDogICAgICAgICAgICAgICAgIHsNCjIxMTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMjcpOw0KMjEyOiAgICAgICAgICAgICAgICAgfQ0KMjEzOiAgICAgICAgICAgICAgICAgDQoyMTQ6ICAgICAgICAgICAgICAgICANCjIxNTogICAgICAgICAgICAgICAgICNlbmRpZg0KMjE2OiAgICAgICAgICAgICAgICAgDQoyMTc6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTI1LmMgKi8NCjIxODogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoyMTk6ICAgICAgICAgICAgICAgICAgKi8NCjIyMDogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnEyNC5jICAtLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTI0LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9iYmxlZC5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgdHlwZWRlZiB2b2lkICgqIEdJUlEyNF9GUFZVOCkodWludDhfdCk7DQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgIA0KNDA6ICAgICAgICAgICAgICAgICAgLyogTUlQUyBNMTRLIGludGVybmFsIGNvdW50ZXIgaXMgY29ubmVjdGVkIHRvIEdJUlEyNCBiaXRbMF0NCjQxOiAgICAgICAgICAgICAgICAgICAqIEl0IGlzIGEgc2ltcGxlIGNvdW50ZXIgd2hpY2ggZmlyZXMgYW4gaW50ZXJydXB0IHdoZW4gaXRzIA0KNDI6ICAgICAgICAgICAgICAgICAgICogY291bnQgdmFsdWUgaXMgZXF1YWwgdG8gYSBtYXRjaCB2YWx1ZS4NCjQzOiAgICAgICAgICAgICAgICAgICAqIA0KNDQ6ICAgICAgICAgICAgICAgICAgICovDQo0NTogICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICAjaWYgR0lSUTI0X0RJU0FHRyA9PSAwDQo0NzogICAgICAgICAgICAgICAgICANCjQ4OiAgICAgICAgICAgICAgICAgIA0KNDk6ICAgICAgICAgICAgICAgICAgdm9pZCBnaXJxMjRfZGZsdF9oYW5kbGVyKHVpbnQ4X3QgaW51bSkNCjUwOiAgICAgICAgICAgICAgICAgIHsNCjUxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTI0X0lEXS5FTl9DTFIgPSAoMXVsIDw8IGludW0pOw0KNTI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjRfSURdLlNPVVJDRSA9ICgxdWwgPDwgaW51bSk7DQo1MzogICAgICAgICAgICAgICAgICB9DQo1NDogICAgICAgICAgICAgICAgICANCjU1OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIG0xNGtfY291bnRlcl9oYW5kbGVyKHVpbnQ4X3QgaW51bSkNCjU2OiAgICAgICAgICAgICAgICAgIHsNCjU3OiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByOw0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGludW07DQo2MDogICAgICAgICAgICAgICAgICANCjYxOiAgICAgICAgICAgICAgICAgICAgICByID0gX0NQMF9HRVRfQ09VTlQoKTsNCjYyOiAgICAgICAgICAgICAgICAgICAgICByICs9IChNMTRLX1RJTUVSX0NPTVBBUkUpOw0KNjM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIG9mIENQMC5Db21wYXJlIGNsZWFycyBzdGF0dXMgaW4gTTE0SyAqLw0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIF9DUDBfU0VUX0NPVU5UKHIpOw0KNjU6ICAgICAgICAgICAgICAgICAgDQo2NjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyNF9JRF0uU09VUkNFID0gKDF1bCA8PCAwKTsNCjY3OiAgICAgICAgICAgICAgICAgIA0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICAvKg0KNzE6ICAgICAgICAgICAgICAgICAgICogVE9ETyAtIEZyZWVSVE9TIE0xNEsgU29mdHdhcmUgSW50ZXJydXB0IDAgaGFuZGxlcg0KNzI6ICAgICAgICAgICAgICAgICAgICogaXMgdlBvcnRZaWVsZElTUiBpbiBwb3J0X2FzbS5TDQo3MzogICAgICAgICAgICAgICAgICAgKiB2UG9ydFlpZWxkSVNSIHdhcyBkZXNpZ25lZCB0byBiZSBlbnRlcmVkIGRpcmVjdGx5IGJ5IHRoZQ0KNzQ6ICAgICAgICAgICAgICAgICAgICogQ1BVIG5vdCB2aWEgYSBoaWdoZXIgbGV2ZWwgSVNSIGhhbmRsZXIuDQo3NTogICAgICAgICAgICAgICAgICAgKiBPbmUgd29yay1hcm91bmQgaXMgdG8gbW9kaWZ5IHZQb3J0WWllbGRJU1IgdG8gZG8gdGhlIHdvcmsNCjc2OiAgICAgICAgICAgICAgICAgICAqIG9mIGdpcnEyNF9oYW5kbGVyIGJlbG93LiBJdCBtdXN0IGRldGVybWluZSB3aGljaCBHSVJRMjQgc291cmNlDQo3NzogICAgICAgICAgICAgICAgICAgKiB3YXMgYWN0aXZlOiBNMTRLIGNvdW50ZXIsIFNvZnRJUlEwLCBvciBTb2Z0SVJRMS4NCjc4OiAgICAgICAgICAgICAgICAgICAqLw0KNzk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgbTE0a19zb2Z0X2lycTAodWludDhfdCBpbnVtKQ0KODA6ICAgICAgICAgICAgICAgICAgew0KODE6ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBpbnVtOw0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyNF9JRF0uU09VUkNFID0gKDF1bCA8PCAxKTsNCjg0OiAgICAgICAgICAgICAgICAgIA0KODU6ICAgICAgICAgICAgICAgICAgfQ0KODY6ICAgICAgICAgICAgICAgICAgDQo4NzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBtMTRrX3NvZnRfaXJxMSh1aW50OF90IGludW0pDQo4ODogICAgICAgICAgICAgICAgICB7DQo4OTogICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGludW07DQo5MDogICAgICAgICAgICAgICAgICANCjkxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTI0X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDIpOw0KOTI6ICAgICAgICAgICAgICAgICAgICAgIA0KOTM6ICAgICAgICAgICAgICAgICAgfQ0KOTQ6ICAgICAgICAgICAgICAgICAgDQo5NTogICAgICAgICAgICAgICAgICB2b2lkIGdpcnEyNF9iXzBfMiggdm9pZCApDQo5NjogICAgICAgICAgICAgICAgICB7DQo5NzogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZDsNCjk4OiAgICAgICAgICAgICAgICAgIA0KOTk6ICAgICAgICAgICAgICAgICAgICAgIGQgPSBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTI0X0lEXS5SRVNVTFQgJiAoR0lSUTI0X1NSQ19NQVNLKTsNCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgICAgIGlmICggZCAmICgxdWwgPDwgMCkgKQ0KMTAyOiAgICAgICAgICAgICAgICAgICAgIHsNCjEwMzogICAgICAgICAgICAgICAgICAgICAgICAgbTE0a19jb3VudGVyX2hhbmRsZXIoMCk7DQoxMDQ6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTA1OiAgICAgICAgICAgICAgICAgDQoxMDY6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBkICYgKDF1bCA8PCAyKSApDQoxMDc6ICAgICAgICAgICAgICAgICAgICAgew0KMTA4OiAgICAgICAgICAgICAgICAgICAgICAgICBtMTRrX3NvZnRfaXJxMSgyKTsNCjEwOTogICAgICAgICAgICAgICAgICAgICB9DQoxMTA6ICAgICAgICAgICAgICAgICB9DQoxMTE6ICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgIA0KMTEzOiAgICAgICAgICAgICAgICAgY29uc3QgR0lSUTI0X0ZQVlU4IGdpcnEyNF9odGFibGVbR0lSUTI0X05VTV9TT1VSQ0VTXSA9DQoxMTQ6ICAgICAgICAgICAgICAgICB7DQoxMTU6ICAgICAgICAgICAgICAgICAgICAgbTE0a19jb3VudGVyX2hhbmRsZXIsICAgLyogbTE0a19jb3VudGVyX2hhbmRsZXIsICovDQoxMTY6ICAgICAgICAgICAgICAgICAgICAgbTE0a19zb2Z0X2lycTAsICAgICAgICAgLyogbTE0a19zb2Z0X2lycTAsICovDQoxMTc6ICAgICAgICAgICAgICAgICAgICAgbTE0a19zb2Z0X2lycTEsICAgICAgICAgLyogbTE0a19zb2Z0X2lycTEgKi8NCjExODogICAgICAgICAgICAgICAgIH07DQoxMTk6ICAgICAgICAgICAgICAgICANCjEyMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KMTIxOiAgICAgICAgICAgICAgICAgZ2lycTI0X2lzcih2b2lkKQ0KMTIyOiAgICAgICAgICAgICAgICAgew0KMTIzOiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGQ7DQoxMjQ6ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiaXRwb3M7DQoxMjU6ICAgICAgICAgICAgICAgICANCjEyNjogICAgICAgICAgICAgICAgICAgICBkID0gSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyNF9JRF0uUkVTVUxUICYgKEdJUlEyNF9TUkNfTUFTSyk7DQoxMjc6ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAwICE9IGQgKQ0KMTI4OiAgICAgICAgICAgICAgICAgICAgIHsNCjEyOTogICAgICAgICAgICAgICAgICAgICAgICAgYml0cG9zID0gMzEgLSAoKHVpbnQ4X3QpX19idWlsdGluX2NseihkKSAmIDB4MUYpOw0KMTMwOiAgICAgICAgICAgICAgICAgICAgICAgICAoZ2lycTI0X2h0YWJsZVtiaXRwb3NdKShiaXRwb3MpOw0KMTMxOiAgICAgICAgICAgICAgICAgICAgICAgICBkICY9IH4oMXVsIDw8IGJpdHBvcyk7DQoxMzI6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTMzOiAgICAgICAgICAgICAgICAgfQ0KMTM0OiAgICAgICAgICAgICAgICAgDQoxMzU6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTM2OiAgICAgICAgICAgICAgICAgDQoxMzc6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTM4OiAgICAgICAgICAgICAgICAgZ2lycTI0X2IwKHZvaWQpDQoxMzk6ICAgICAgICAgICAgICAgICB7DQpCRkQwNjVBOCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA2NUFDICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNjVBRSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA2NUIwICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNjVCMiAgNEZFRDEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjEKQkZEMDY1QjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDAKQkZEMDY1QjYgICAgICBDQjY5ICAgU1cgSzEsIDM2KFNQKQpCRkQwNjVCOCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDY1QkMgICAgICBDQjQ4ICAgU1cgSzAsIDMyKFNQKQpCRkQwNjVCRSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNjVDMiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA2NUM0ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA2NUM2ICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA2NUM4ICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA2NUNBICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNjVDQyAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDY1Q0UgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNjVEMCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDY1RDQgICAgICBDODY0ICAgU1cgVjEsIDE2KFNQKQpCRkQwNjVENiAgICAgIEM4NDMgICBTVyBWMCwgMTIoU1ApCkJGRDA2NUQ4ICAgICAgNDg2OCAgIExXIFYxLCAzMihTUCkKQkZEMDY1REEgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNjVEQyAgICAgIENCQzUgICBTVyBTOCwgMjAoU1ApCkJGRDA2NURFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjE0MDogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByOw0KMTQxOiAgICAgICAgICAgICAgICAgICAgIA0KMTQyOiAgICAgICAgICAgICAgICAgICAgIHIgPSBfQ1AwX0dFVF9DT1VOVCgpOw0KQkZEMDY1RTAgIDAwRkMwMDQ5ICAgTUZDMCBWMCwgQ291bnQKQkZEMDY1RTQgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpCjE0MzogICAgICAgICAgICAgICAgICAgICByICs9IChNMTRLX1RJTUVSX0NPTVBBUkUpOw0KQkZEMDY1RTggIDAwMDBGQzdFICAgTFcgVjEsIDAoUzgpCkJGRDA2NUVDICAwMEI3NDFBMiAgIExVSSBWMCwgMHhCNwpCRkQwNjVGMCAgMUIwMDUwNDIgICBPUkkgVjAsIFYwLCA2OTEyCkJGRDA2NUYyICAwNTI2MUIwMCAgIFNCIFQ4LCAxMzE4KFpFUk8pCkJGRDA2NUY0ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMApCRkQwNjVGNiAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkKMTQ0OiAgICAgICAgICAgICAgICAgICAgIF9DUDBfU0VUX0NPVU5UKHIpOw0KQkZEMDY1RkEgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpCkJGRDA2NUZFICAwMkZDMDA0OSAgIE1UQzAgVjAsIENvdW50CkJGRDA2NjAwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDY2MDIgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDY2MDQgIDQxQTIxODAwICAgU0IgWkVSTywgMTY4MDIoWkVSTykKMTQ1OiAgICAgICAgICAgICAgICAgDQoxNDY6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyNF9JRF0uU09VUkNFID0gKDF1bCA8PCAwKTsgICAgDQpCRkQwNjYwNiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNjYwOCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA2NjBBICBDMDAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xNjM4NApCRkQwNjYwRSAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNjYxMCAgMDEwMEY4NjIgICBTVyBWMSwgMjU2KFYwKQoxNDc6ICAgICAgICAgICAgICAgICB9DQpCRkQwNjYxNCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNjYxNiAgICAgIDQ4NDggICBMVyBWMCwgMzIoU1ApCkJGRDA2NjE4ICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDY2MUEgICAgICA0QkM1ICAgTFcgUzgsIDIwKFNQKQpCRkQwNjYxQyAgICAgIDQ4NjQgICBMVyBWMSwgMTYoU1ApCkJGRDA2NjFFICAgICAgNDg0MyAgIExXIFYwLCAxMihTUCkKQkZEMDY2MjAgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNjYyNCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNjYyNiAgNEI0OTE4MDAgICBTQiBaRVJPLCAxOTI3MyhaRVJPKQpCRkQwNjYyOCAgICAgIDRCNDkgICBMVyBLMCwgMzYoU1ApCkJGRDA2NjJBICAgICAgNEI2NyAgIExXIEsxLCAyOChTUCkKQkZEMDY2MkMgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA2NjMwICAgICAgNEI0OCAgIExXIEswLCAzMihTUCkKQkZEMDY2MzIgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MApCRkQwNjYzNCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDY2MzYgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNjYzOCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA2NjNBICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNjYzQyAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDY2M0UgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNjY0MCAgRjM3QzAwMDAgICBFUkVUCkJGRDA2NjQyICA0RkVERjM3QyAgIEpBTFggMHhCREYxM0ZCNAoxNDg6ICAgICAgICAgICAgICAgICANCjE0OTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTA6ICAgICAgICAgICAgICAgICBnaXJxMjRfYjEodm9pZCkNCjE1MTogICAgICAgICAgICAgICAgIHsNCkJGRDA0NjVDICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDQ2NjAgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA0NjYyICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDQ2NjQgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA0NjY2ICA0RkM1MTBGQyAgIEFEREkgQTMsIEdQLCAyMDQyMQpCRkQwNDY2OCAgICAgIDRGQzUgICBBRERJVSBTUCwgU1AsIC0xMjAKQkZEMDQ2NkEgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkKQkZEMDQ2NkMgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzCkJGRDA0NjcwICAgICAgQ0I1QyAgIFNXIEswLCAxMTIoU1ApCkJGRDA0NjcyICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA0Njc2ICAgICAgQ0I3QiAgIFNXIEsxLCAxMDgoU1ApCkJGRDA0Njc4ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA0NjdBICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA0NjdDICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA0NjdFICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNDY4MCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDQ2ODIgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNDY4NCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDQ2ODggICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQpCRkQwNDY4QSAgICAgIEM4NDYgICBTVyBWMCwgMjQoU1ApCkJGRDA0NjhDICAgICAgNDg3QyAgIExXIFYxLCAxMTIoU1ApCkJGRDA0NjhFICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDQ2OTAgIDAwMTE0MEEzICAgQk5FWkMgVjEsIDB4QkZEMDQ2QjYKQkZEMDQ2OTQgICAgICBDQkY3ICAgU1cgUkEsIDkyKFNQKQpCRkQwNDY5NiAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApCkJGRDA0Njk4ICAgICAgQ0IzNSAgIFNXIFQ5LCA4NChTUCkKQkZEMDQ2OUEgICAgICBDQjE0ICAgU1cgVDgsIDgwKFNQKQpCRkQwNDY5QyAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApCkJGRDA0NjlFICAgICAgQzlEMiAgIFNXIFQ2LCA3MihTUCkKQkZEMDQ2QTAgICAgICBDOUIxICAgU1cgVDUsIDY4KFNQKQpCRkQwNDZBMiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApCkJGRDA0NkE0ICAgICAgQzk2RiAgIFNXIFQzLCA2MChTUCkKQkZEMDQ2QTYgICAgICBDOTRFICAgU1cgVDIsIDU2KFNQKQpCRkQwNDZBOCAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApCkJGRDA0NkFBICAgICAgQzkwQyAgIFNXIFQwLCA0OChTUCkKQkZEMDQ2QUMgICAgICBDOEVCICAgU1cgQTMsIDQ0KFNQKQpCRkQwNDZBRSAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApCkJGRDA0NkIwICAgICAgQzhBOSAgIFNXIEExLCAzNihTUCkKQkZEMDQ2QjIgICAgICBDODg4ICAgU1cgQTAsIDMyKFNQKQpCRkQwNDZCNCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApCkJGRDA0NkI2ICAgICAgNDY0MiAgIE1GTE8gVjAKQkZEMDQ2QjggICAgICBDODU5ICAgU1cgVjAsIDEwMChTUCkKQkZEMDQ2QkEgICAgICA0NjAzICAgTUZISSBWMQpCRkQwNDZCQyAgICAgIEM4NzggICBTVyBWMSwgOTYoU1ApCkJGRDA0NkJFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjE1MjogICAgICAgICAgICAgICAgIA0KMTUzOiAgICAgICAgICAgICAgICAgICAgIF9DUDBfQklDX0NBVVNFKDB4MTAwdWwpOw0KQkZEMDQ2QzAgIDAxMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDI1NgpCRkQwNDZDMiAgMDA2RDAxMDAgICBQUkVDUi5RQi5QSCBaRVJPLCBaRVJPLCBUMApCRkQwNDZDNCAgMDBGQzAwNkQgICBNRkMwIFYxLCBDYXVzZQpCRkQwNDZDNiAgMEMwMDAwRkMgICBTTEwgQTMsIEdQLCAxCkJGRDA0NkM4ICAgICAgMEMwMCAgIE5PUApCRkQwNDZDQSAgICAgIDQ0MTIgICBOT1QxNiBWMCwgVjAKQkZEMDQ2Q0MgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA0NkNFICAwMkZDMDA0RCAgIE1UQzAgVjAsIENhdXNlCkJGRDA0NkQwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDQ2RDIgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDQ2RDQgIEVFMTAxODAwICAgU0IgWkVSTywgLTQ1OTIoWkVSTykKMTU0OiAgICAgICAgICAgICAgICAgIA0KMTU1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjRfSUQsIDEpOw0KQkZEMDQ2RDYgICAgICBFRTEwICAgTEkgQTAsIDE2CkJGRDA0NkQ4ICAgICAgRUU4MSAgIExJIEExLCAxCkJGRDA0NkRBICA0NEZBNzdFOCAgIEpBTFMganR2aWNfY2xyX3NvdXJjZQpCRkQwNDZEQyAgICAgIDQ0RkEgICBPUjE2IEEzLCBWMApCRkQwNDZERSAgICAgIDBDMDAgICBOT1AKMTU2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDQ2RTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDQ2RTIgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkKQkZEMDQ2RTQgIDNEN0MwMDAyICAgTVRMTyBWMApCRkQwNDZFNiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApCkJGRDA0NkU4ICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkKQkZEMDQ2RUEgIDJEN0MwMDAzICAgTVRISSBWMQpCRkQwNDZFQyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MApCRkQwNDZFRSAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQpCRkQwNDZGMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA0NkYyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA0NzFDCkJGRDA0NkY2ICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkKQkZEMDQ2RjggICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQpCRkQwNDZGQSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApCkJGRDA0NkZDICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkKQkZEMDQ2RkUgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQpCRkQwNDcwMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApCkJGRDA0NzAyICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkKQkZEMDQ3MDQgICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQpCRkQwNDcwNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApCkJGRDA0NzA4ICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkKQkZEMDQ3MEEgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQpCRkQwNDcwQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApCkJGRDA0NzBFICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkKQkZEMDQ3MTAgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQpCRkQwNDcxMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApCkJGRDA0NzE0ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkKQkZEMDQ3MTYgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQpCRkQwNDcxOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA0NzFBICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkKQkZEMDQ3MUMgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNDcyMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNDcyMiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQpCRkQwNDcyNCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQpCRkQwNDcyNiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQpCRkQwNDcyOCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDQ3MkMgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkKQkZEMDQ3MkUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjAKQkZEMDQ3MzAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA0NzMyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDQ3MzQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNDczNiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDQ3MzggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA0NzNBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDQ3M0MgIEYzN0MwMDAwICAgRVJFVApCRkQwNDczRSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQKMTU3OiAgICAgICAgICAgICAgICAgDQoxNTg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTU5OiAgICAgICAgICAgICAgICAgZ2lycTI0X2IyKHZvaWQpDQoxNjA6ICAgICAgICAgICAgICAgICB7DQpCRkQwNDc0MCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA0NzQ0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNDc0NiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA0NzQ4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNDc0QSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDQ3NEMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA0NzRFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA0NzUwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNDc1NCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNDc1NiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNDc1QSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNDc1QyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNDc1RSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNDc2MCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNDc2MiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDQ3NjQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA0NzY2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDQ3NjggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA0NzZDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDQ3NkUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNDc3MCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNDc3MiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA0Nzc0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA0NzlBCkJGRDA0Nzc4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDQ3N0EgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNDc3QyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA0NzdFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDQ3ODAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNDc4MiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA0Nzg0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDQ3ODYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNDc4OCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA0NzhBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDQ3OEMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNDc4RSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA0NzkwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDQ3OTIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNDc5NCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA0Nzk2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDQ3OTggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNDc5QSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA0NzlDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA0NzlFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDQ3QTAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNDdBMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxNjE6ICAgICAgICAgICAgICAgICANCjE2MjogICAgICAgICAgICAgICAgICAgICBfQ1AwX0JJQ19DQVVTRSgweDIwMHVsKTsNCkJGRDA0N0E0ICAwMjAwMzA0MCAgIEFERElVIFYwLCBaRVJPLCA1MTIKQkZEMDQ3QTYgIDAwNkQwMjAwICAgUFJFQ1IuUUIuUEggWkVSTywgWkVSTywgUzAKQkZEMDQ3QTggIDAwRkMwMDZEICAgTUZDMCBWMSwgQ2F1c2UKQkZEMDQ3QUEgIDBDMDAwMEZDICAgU0xMIEEzLCBHUCwgMQpCRkQwNDdBQyAgICAgIDBDMDAgICBOT1AKQkZEMDQ3QUUgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwCkJGRDA0N0IwICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwNDdCMiAgMDJGQzAwNEQgICBNVEMwIFYwLCBDYXVzZQpCRkQwNDdCNCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA0N0I2ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA0N0I4ICBFRTEwMTgwMCAgIFNCIFpFUk8sIC00NTkyKFpFUk8pCjE2MzogICAgICAgICAgICAgICAgIA0KMTY0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjRfSUQsIDIpOw0KQkZEMDQ3QkEgICAgICBFRTEwICAgTEkgQTAsIDE2CkJGRDA0N0JDICAgICAgRUU4MiAgIExJIEExLCAyCkJGRDA0N0JFICA0NEZBNzdFOCAgIEpBTFMganR2aWNfY2xyX3NvdXJjZQpCRkQwNDdDMCAgICAgIDQ0RkEgICBPUjE2IEEzLCBWMApCRkQwNDdDMiAgICAgIDBDMDAgICBOT1AKMTY1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDQ3QzQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDQ3QzYgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkKQkZEMDQ3QzggIDNEN0MwMDAyICAgTVRMTyBWMApCRkQwNDdDQSAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApCkJGRDA0N0NDICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkKQkZEMDQ3Q0UgIDJEN0MwMDAzICAgTVRISSBWMQpCRkQwNDdEMCAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MApCRkQwNDdEMiAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQpCRkQwNDdENCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA0N0Q2ICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA0ODAwCkJGRDA0N0RBICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkKQkZEMDQ3REMgICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQpCRkQwNDdERSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApCkJGRDA0N0UwICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkKQkZEMDQ3RTIgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQpCRkQwNDdFNCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApCkJGRDA0N0U2ICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkKQkZEMDQ3RTggICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQpCRkQwNDdFQSAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApCkJGRDA0N0VDICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkKQkZEMDQ3RUUgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQpCRkQwNDdGMCAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApCkJGRDA0N0YyICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkKQkZEMDQ3RjQgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQpCRkQwNDdGNiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApCkJGRDA0N0Y4ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkKQkZEMDQ3RkEgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQpCRkQwNDdGQyAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA0N0ZFICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkKQkZEMDQ4MDAgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNDgwNCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNDgwNiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQpCRkQwNDgwOCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQpCRkQwNDgwQSAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQpCRkQwNDgwQyAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDQ4MTAgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkKQkZEMDQ4MTIgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjAKQkZEMDQ4MTQgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA0ODE2ICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDQ4MTggIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNDgxQSAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDQ4MUMgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA0ODFFICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDQ4MjAgIEYzN0MwMDAwICAgRVJFVApCRkQwNDgyMiAgNEZFREYzN0MgICBKQUxYIDB4QkRGMTNGQjQKMTY2OiAgICAgICAgICAgICAgICAgDQoxNjc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE2ODogICAgICAgICAgICAgICAgIA0KMTY5OiAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnEyNC5jICovDQoxNzA6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMTcxOiAgICAgICAgICAgICAgICAgICovDQoxNzI6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMjMuYyAgLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEyMy5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfYmJsZWQuaCINCjM0OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgIHR5cGVkZWYgdm9pZCAoKiBHSVJRMjNfRlBWVTgpKHVpbnQ4X3QpOw0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAjaWYgR0lSUTIzX0RJU0FHRyA9PSAwDQo0MDogICAgICAgICAgICAgICAgICANCjQxOiAgICAgICAgICAgICAgICAgIC8qDQo0MjogICAgICAgICAgICAgICAgICAgKiBGcmVlUlRPUyBJU1IgZm9yIEhXIHRpbWVyIHVzZWQgYXMgUlRPUyB0aWNrLg0KNDM6ICAgICAgICAgICAgICAgICAgICogSW1wbGVtZW50ZWQgaW4gTUVDMTR4eCBGcmVlUlRPUyBwb3J0aW5nIGxheWVyLCBwb3J0X2FzbS5TDQo0NDogICAgICAgICAgICAgICAgICAgKiBJdCBzYXZlL3Jlc3RvcmVzIENQVSBjb250ZXh0IGFuZCBjbGVhcnMgSFcgdGltZXIgaW50ZXJydXB0IA0KNDU6ICAgICAgICAgICAgICAgICAgICogc3RhdHVzIGluIEpUVklDLiBPbiBlYWNoIHRpbWVyIHRpY2sgaXQgY2hlY2tzIGlmIGFueSB0YXNrIA0KNDY6ICAgICAgICAgICAgICAgICAgICogcmVxdWlyZXMgc2VydmljZS4gSWYgeWVzIHRoZW4gaXQgdHJpZ2dlcnMgdGhlIFBlbmRTViBsb3cgDQo0NzogICAgICAgICAgICAgICAgICAgKiBwcmlvcml0eSBzb2Z0d2FyZSBpbnRlcnJ1cHQuDQo0ODogICAgICAgICAgICAgICAgICAgKiBJc3N1ZToNCjQ5OiAgICAgICAgICAgICAgICAgICAqIFdoZW4gYWdncmVnYXRlZCBnaXJxMjNfaXNyIHNhdmUgQ1BVIGNvbnRleHQgYnV0IHRoaXMgY29udGV4dCANCjUwOiAgICAgICAgICAgICAgICAgICAqIGlzIG5vdCB0aGUgc2FtZSBhcyBhIEZyZWVSVE9TIGNvbnRleHQgc2F2ZS4gSWYgdGhlIFJUT1MgdGltZXIgDQo1MTogICAgICAgICAgICAgICAgICAgKiBpcyBhY3RpdmUgdGhlbiBnaXJxMjNfaXNyIHdvdWxkIGNhbGwgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlciANCjUyOiAgICAgICAgICAgICAgICAgICAqIHdoaWNoIHVzZXMgRnJlZVJUT1MgcG9ydFNBVkVfQ09OVEVYVCBtYWNybyB0byBzYXZlIFJUT1MgKyBDUFUgDQo1MzogICAgICAgICAgICAgICAgICAgKiBjb250ZXh0LiBBdCB0aGlzIHBvaW50IHlvdSBoYXZlIHR3byBjb250ZXh0IHNhdmVzIG9uIHRoZSBzdGFjay4NCjU0OiAgICAgICAgICAgICAgICAgICAqIFRoZXJlIGlzIGEgcHJvYmxlbToNCjU1OiAgICAgICAgICAgICAgICAgICAqIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXIgZG9lcyBub3QgcmV0dXJuIGJ1dCBleGl0cyB1c2luZyANCjU2OiAgICAgICAgICAgICAgICAgICAqIHBvcnRSRVNUT1JFX0NPTlRFWFQuIFRoaXMgbWVhbnMgdGhlIGNvbnRleHQgc2F2ZSBwZXJmb3JtZWQgDQo1NzogICAgICAgICAgICAgICAgICAgKiBieSBhZ2dyZWdhdGVkIGdpcnEyM19pc3IgaXMgbGVmdCBvbiB0aGUgc3RhY2suIEV2ZW50dWFsbHkgDQo1ODogICAgICAgICAgICAgICAgICAgKiBhIHN0YWNrIG92ZXJmbG93IHdpbGwgb2NjdXIuDQo1OTogICAgICAgICAgICAgICAgICAgKiANCjYwOiAgICAgICAgICAgICAgICAgICAqIFNvbHV0aW9uczoNCjYxOiAgICAgICAgICAgICAgICAgICAqIDEuIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXIgbXVzdCBiZSBtb2RpZmllZCB0byBoYW5kbGUgc2NhbiANCjYyOiAgICAgICAgICAgICAgICAgICAqICAgIEdJUlEyMyBSZXN1bHQgYml0cyBhbmQgYWxsIHRoZSByZXNwZWN0aXZlIGhhbmRsZXIuIEFsbCANCjYzOiAgICAgICAgICAgICAgICAgICAqICAgIG90aGVyIEdJUlEyMyBzb3VyY2UgYXJlIGNhbGxlZCBhcyBob29rIGZ1bmN0aW9ucy4NCjY0OiAgICAgICAgICAgICAgICAgICAqICANCjY1OiAgICAgICAgICAgICAgICAgICAqIDIuIERvIG5vdCB1c2UgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlci4NCjY2OiAgICAgICAgICAgICAgICAgICAqICAgIE1vZGlmeSBnaXJxMjNfaXNyIGhlcmUgdG8gdXNlIEZyZWVSVE9TIHBvcnRTQVZFX0NPTlRFWFQgDQo2NzogICAgICAgICAgICAgICAgICAgKiAgICBhbmQgcG9ydFJFU1RPUkVfQ09OVEVYVCBtYWNyb3MuIA0KNjg6ICAgICAgICAgICAgICAgICAgICogICAgSWYgUlRPUyB0aW1lciBpcyBhY3RpdmUgaW50ZXJydXB0IHRoZW4gY2FsbCB2UG9ydEluY3JlbWVudFRpY2sgDQo2OTogICAgICAgICAgICAgICAgICAgKiAgICBhcyB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyIGRvZXMuDQo3MDogICAgICAgICAgICAgICAgICAgKiAgICBGb3IgYWxsIG90aGVyIEdJUlEyMyBzb3VyY2VzIGNhbGwgdGhlIHJlc3BlY3RpdmUgaGFuZGxlcnMuDQo3MTogICAgICAgICAgICAgICAgICAgKiAgDQo3MjogICAgICAgICAgICAgICAgICAgKiAgTk9URTogZm9yIGJvdGggb2YgdGhlIGFib3ZlIHNvbHV0aW9ucyBhIHdlIG11c3QgZWl0aGVyOg0KNzM6ICAgICAgICAgICAgICAgICAgICogIEEuIFNlcnZpY2Ugb25lIHNvdXJjZSBvbmx5IHJlc3VsdGluZyBpbiBHSVJRMjMgZmlyaW5nIG11bHRpcGxlIA0KNzQ6ICAgICAgICAgICAgICAgICAgICogICAgIHRpbWVzIGlmIG1vcmUgdGhhbiBvbmUgc291cmNlIGlzIGFjdGl2ZS4NCjc1OiAgICAgICAgICAgICAgICAgICAqICBCLiBTZXJ2aWNlIGFsbCBhY3RpdmUgc291cmNlcyB3aXRoIFJUT1MgVGltZXIgY2hlY2tlZCBmaXJzdC4NCjc2OiAgICAgICAgICAgICAgICAgICAqICANCjc3OiAgICAgICAgICAgICAgICAgICAqICBXZSB3aWxsIGltcGxlbWVudCAxQSB3aXRoIGEgc2luZ2xlIGhvb2sgZm9yIGFsbCBvdGhlciBzb3VyY2VzLg0KNzg6ICAgICAgICAgICAgICAgICAgICogIA0KNzk6ICAgICAgICAgICAgICAgICAgICovDQo4MDogICAgICAgICAgICAgICAgICANCjgxOiAgICAgICAgICAgICAgICAgIGV4dGVybiB2b2lkIHZQb3J0SW5jcmVtZW50VGljayh2b2lkKTsNCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgdm9pZCBnaXJxMjNfZGZsdF9oYW5kbGVyKHVpbnQ4X3QgaW51bSkNCjg0OiAgICAgICAgICAgICAgICAgIHsNCjg1OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTIzX0lEXS5FTl9DTFIgPSAoMXVsIDw8IGludW0pOw0KODY6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjNfSURdLlNPVVJDRSA9ICgxdWwgPDwgaW51bSk7DQo4NzogICAgICAgICAgICAgICAgICB9DQo4ODogICAgICAgICAgICAgICAgICANCjg5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIHJ0b3NfdG1yX2hhbmRsZXIodWludDhfdCBpbnVtKQ0KOTA6ICAgICAgICAgICAgICAgICAgew0KOTE6ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBpbnVtOw0KOTI6ICAgICAgICAgICAgICAgICAgDQo5MzogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyM19JRF0uU09VUkNFID0gKDF1bCA8PCA0KTsNCjk0OiAgICAgICAgICAgICAgICAgIH0NCjk1OiAgICAgICAgICAgICAgICAgIA0KOTY6ICAgICAgICAgICAgICAgICAgY29uc3QgR0lSUTIzX0ZQVlU4IGdpcnEyM19odGFibGVbR0lSUTIzX05VTV9TT1VSQ0VTXSA9DQo5NzogICAgICAgICAgICAgICAgICB7DQo5ODogICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogYnRtcjBfaGFuZGxlciwgKi8NCjk5OiAgICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiBidG1yMV9oYW5kbGVyLCAqLw0KMTAwOiAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIGJ0bXIyX2hhbmRsZXIsICovDQoxMDE6ICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogYnRtcjNfaGFuZGxlciwgKi8NCjEwMjogICAgICAgICAgICAgICAgICAgICB2UG9ydEluY3JlbWVudFRpY2ssDQoxMDM6ICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogaGliX3Rtcl9oYW5kbGVyLCAqLw0KMTA0OiAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIHdlZWtfdG1yX2hhbmRsZXIsICovDQoxMDU6ICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogd2Vla190bXJfaGFuZGxlciwgKi8NCjEwNjogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiB3ZWVrX3Rtcl9oYW5kbGVyLCAqLw0KMTA3OiAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIHdlZWtfdG1yX2hhbmRsZXIsICovDQoxMDg6ICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogd2Vla190bXJfaGFuZGxlciwgKi8NCjEwOTogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiB2Y2lfaGFuZGxlciwgKi8NCjExMDogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiB2Y2lfaGFuZGxlciwgKi8NCjExMTogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiB2Y2lfaGFuZGxlciwgKi8NCjExMjogICAgICAgICAgICAgICAgIH07DQoxMTM6ICAgICAgICAgICAgICAgICANCjExNDogICAgICAgICAgICAgICAgIC8qIENhbGxlZCBieSBGcmVlUlRPUyB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyKGdpcnEyM19pc3IpIA0KMTE1OiAgICAgICAgICAgICAgICAgICogYWZ0ZXIgc2F2aW5nIEZyZWVSVE9TIGNvbnRleHQgDQoxMTY6ICAgICAgICAgICAgICAgICAgKi8NCjExNzogICAgICAgICAgICAgICAgIHZvaWQgZ2lycTIzX2hhbmRsZXIodm9pZCkNCjExODogICAgICAgICAgICAgICAgIHsNCjExOTogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkOw0KMTIwOiAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYml0cG9zOw0KMTIxOiAgICAgICAgICAgICAgICAgDQoxMjI6ICAgICAgICAgICAgICAgICAgICAgZCA9IEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjNfSURdLlJFU1VMVCAmIChHSVJRMjNfU1JDX01BU0spOw0KMTIzOiAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggMCAhPSBkICkNCjEyNDogICAgICAgICAgICAgICAgICAgICB7DQoxMjU6ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHBvcyA9IDMxIC0gKCh1aW50OF90KV9fYnVpbHRpbl9jbHooZCkgJiAweDFGKTsNCjEyNjogICAgICAgICAgICAgICAgICAgICAgICAgKGdpcnEyM19odGFibGVbYml0cG9zXSkoYml0cG9zKTsNCjEyNzogICAgICAgICAgICAgICAgICAgICAgICAgZCAmPSB+KDF1bCA8PCBiaXRwb3MpOw0KMTI4OiAgICAgICAgICAgICAgICAgICAgIH0NCjEyOTogICAgICAgICAgICAgICAgIH0NCjEzMDogICAgICAgICAgICAgICAgIA0KMTMxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQoxMzI6ICAgICAgICAgICAgICAgICBnaXJxMjNfaXNyKHZvaWQpDQoxMzM6ICAgICAgICAgICAgICAgICB7DQoxMzQ6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZDsNCjEzNTogICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJpdHBvczsNCjEzNjogICAgICAgICAgICAgICAgIA0KMTM3OiAgICAgICAgICAgICAgICAgICAgIGQgPSBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTIzX0lEXS5SRVNVTFQgJiAoR0lSUTIzX1NSQ19NQVNLKTsNCjEzODogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIDAgIT0gZCApDQoxMzk6ICAgICAgICAgICAgICAgICAgICAgew0KMTQwOiAgICAgICAgICAgICAgICAgICAgICAgICBiaXRwb3MgPSAzMSAtICgodWludDhfdClfX2J1aWx0aW5fY2x6KGQpICYgMHgxRik7DQoxNDE6ICAgICAgICAgICAgICAgICAgICAgICAgIChnaXJxMjNfaHRhYmxlW2JpdHBvc10pKGJpdHBvcyk7DQoxNDI6ICAgICAgICAgICAgICAgICAgICAgICAgIGQgJj0gfigxdWwgPDwgYml0cG9zKTsNCjE0MzogICAgICAgICAgICAgICAgICAgICB9ICAgIA0KMTQ0OiAgICAgICAgICAgICAgICAgfQ0KMTQ1OiAgICAgICAgICAgICAgICAgDQoxNDY6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTQ3OiAgICAgICAgICAgICAgICAgDQoxNDg6ICAgICAgICAgICAgICAgICANCjE0OTogICAgICAgICAgICAgICAgIC8qIDE2LWJpdCBCYXNpYyBUaW1lciAwICovDQoxNTA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTUxOiAgICAgICAgICAgICAgICAgZ2lycTIzX2IwKHZvaWQpDQoxNTI6ICAgICAgICAgICAgICAgICB7DQpCRkQwNzJBMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3MkE0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzJBNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3MkE4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzJBQSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDcyQUMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDcyQUUgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzJCMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDcyQjQgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzJCNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzJCQSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3MkJDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3MkJFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3MkMwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3MkMyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzJDNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDcyQzYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzJDOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDcyQ0MgICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3MkNFICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzJEMCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3MkQyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDcyRDQgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzJENiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxNTM6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyM19JRF0uU09VUkNFID0gKDF1bCA8PCAwKTsgIA0KQkZEMDcyRDggIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDcyREEgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNzJEQyAgQzAwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTYzODQKQkZEMDcyRTAgICAgICBFRDgxICAgTEkgVjEsIDEKQkZEMDcyRTIgIDAwRjBGODYyICAgU1cgVjEsIDI0MChWMCkKMTU0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDcyRTYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDcyRTggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzJFQSAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3MkVDICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDcyRUUgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3MkYwICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzJGMiAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3MkY2ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3MkY4ICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3MkZBICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDcyRkMgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzJGRSAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDczMDIgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzMwNCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3MzA2ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzMwOCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3MzBBICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDczMEMgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3MzBFICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzMxMCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3MzEyICBGMzdDMDAwMCAgIEVSRVQKQkZEMDczMTQgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwCjE1NTogICAgICAgICAgICAgICAgIA0KMTU2OiAgICAgICAgICAgICAgICAgLyogMTYtYml0IEJhc2ljIFRpbWVyIDEgKi8NCjE1NzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTg6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjEodm9pZCkNCjE1OTogICAgICAgICAgICAgICAgIHsNCkJGRDA0QzcwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDRDNzQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA0Qzc2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDRDNzggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA0QzdBICA0RkM1MTBGQyAgIEFEREkgQTMsIEdQLCAyMDQyMQpCRkQwNEM3QyAgICAgIDRGQzUgICBBRERJVSBTUCwgU1AsIC0xMjAKQkZEMDRDN0UgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkKQkZEMDRDODAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzCkJGRDA0Qzg0ICAgICAgQ0I1QyAgIFNXIEswLCAxMTIoU1ApCkJGRDA0Qzg2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA0QzhBICAgICAgQ0I3QiAgIFNXIEsxLCAxMDgoU1ApCkJGRDA0QzhDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA0QzhFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA0QzkwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA0QzkyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNEM5NCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDRDOTYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNEM5OCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDRDOUMgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQpCRkQwNEM5RSAgICAgIEM4NDYgICBTVyBWMCwgMjQoU1ApCkJGRDA0Q0EwICAgICAgNDg3QyAgIExXIFYxLCAxMTIoU1ApCkJGRDA0Q0EyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDRDQTQgIDAwMTE0MEEzICAgQk5FWkMgVjEsIDB4QkZEMDRDQ0EKQkZEMDRDQTggICAgICBDQkY3ICAgU1cgUkEsIDkyKFNQKQpCRkQwNENBQSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApCkJGRDA0Q0FDICAgICAgQ0IzNSAgIFNXIFQ5LCA4NChTUCkKQkZEMDRDQUUgICAgICBDQjE0ICAgU1cgVDgsIDgwKFNQKQpCRkQwNENCMCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApCkJGRDA0Q0IyICAgICAgQzlEMiAgIFNXIFQ2LCA3MihTUCkKQkZEMDRDQjQgICAgICBDOUIxICAgU1cgVDUsIDY4KFNQKQpCRkQwNENCNiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApCkJGRDA0Q0I4ICAgICAgQzk2RiAgIFNXIFQzLCA2MChTUCkKQkZEMDRDQkEgICAgICBDOTRFICAgU1cgVDIsIDU2KFNQKQpCRkQwNENCQyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApCkJGRDA0Q0JFICAgICAgQzkwQyAgIFNXIFQwLCA0OChTUCkKQkZEMDRDQzAgICAgICBDOEVCICAgU1cgQTMsIDQ0KFNQKQpCRkQwNENDMiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApCkJGRDA0Q0M0ICAgICAgQzhBOSAgIFNXIEExLCAzNihTUCkKQkZEMDRDQzYgICAgICBDODg4ICAgU1cgQTAsIDMyKFNQKQpCRkQwNENDOCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApCkJGRDA0Q0NBICAgICAgNDY0MiAgIE1GTE8gVjAKQkZEMDRDQ0MgICAgICBDODU5ICAgU1cgVjAsIDEwMChTUCkKQkZEMDRDQ0UgICAgICA0NjAzICAgTUZISSBWMQpCRkQwNENEMCAgICAgIEM4NzggICBTVyBWMSwgOTYoU1ApCkJGRDA0Q0QyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjE2MDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgMSwgVFJVRSk7DQpCRkQwNENENCAgICAgIEVFMEYgICBMSSBBMCwgMTUKQkZEMDRDRDYgICAgICBFRTgxICAgTEkgQTEsIDEKQkZEMDRDRDggICAgICBFRjAxICAgTEkgQTIsIDEKQkZEMDRDREEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQpCRkQwNENEQyAgMEMwMDNBNDAgICBTSCBTMiwgMzA3MihaRVJPKQpCRkQwNENERSAgICAgIDBDMDAgICBOT1AKMTYxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDRDRTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDRDRTIgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkKQkZEMDRDRTQgIDNEN0MwMDAyICAgTVRMTyBWMApCRkQwNENFNiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApCkJGRDA0Q0U4ICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkKQkZEMDRDRUEgIDJEN0MwMDAzICAgTVRISSBWMQpCRkQwNENFQyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MApCRkQwNENFRSAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQpCRkQwNENGMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA0Q0YyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA0RDFDCkJGRDA0Q0Y2ICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkKQkZEMDRDRjggICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQpCRkQwNENGQSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApCkJGRDA0Q0ZDICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkKQkZEMDRDRkUgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQpCRkQwNEQwMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApCkJGRDA0RDAyICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkKQkZEMDREMDQgICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQpCRkQwNEQwNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApCkJGRDA0RDA4ICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkKQkZEMDREMEEgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQpCRkQwNEQwQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApCkJGRDA0RDBFICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkKQkZEMDREMTAgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQpCRkQwNEQxMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApCkJGRDA0RDE0ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkKQkZEMDREMTYgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQpCRkQwNEQxOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA0RDFBICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkKQkZEMDREMUMgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNEQyMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNEQyMiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQpCRkQwNEQyNCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQpCRkQwNEQyNiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQpCRkQwNEQyOCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDREMkMgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkKQkZEMDREMkUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjAKQkZEMDREMzAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA0RDMyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDREMzQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNEQzNiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDREMzggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA0RDNBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDREM0MgIEYzN0MwMDAwICAgRVJFVApCRkQwNEQzRSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQKMTYyOiAgICAgICAgICAgICAgICAgDQoxNjM6ICAgICAgICAgICAgICAgICAvKiAxNi1iaXQgQmFzaWMgVGltZXIgMiAqLw0KMTY0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE2NTogICAgICAgICAgICAgICAgIGdpcnEyM19iMih2b2lkKQ0KMTY2OiAgICAgICAgICAgICAgICAgew0KQkZEMDRENDAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUApCRkQwNEQ0NCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMKQkZEMDRENDYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMgpCRkQwNEQ0OCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwKQkZEMDRENEEgIDRGQzUxMEZDICAgQURESSBBMywgR1AsIDIwNDIxCkJGRDA0RDRDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMApCRkQwNEQ0RSAgICAgIENCN0QgICBTVyBLMSwgMTE2KFNQKQpCRkQwNEQ1MCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDRENTQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkKQkZEMDRENTYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UKQkZEMDRENUEgICAgICBDQjdCICAgU1cgSzEsIDEwOChTUCkKQkZEMDRENUMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDRENUUgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDRENjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDRENjIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA0RDY0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNEQ2NiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA0RDY4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNEQ2QyAgICAgIEM4NjcgICBTVyBWMSwgMjgoU1ApCkJGRDA0RDZFICAgICAgQzg0NiAgIFNXIFYwLCAyNChTUCkKQkZEMDRENzAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkKQkZEMDRENzIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNEQ3NCAgMDAxMTQwQTMgICBCTkVaQyBWMSwgMHhCRkQwNEQ5QQpCRkQwNEQ3OCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApCkJGRDA0RDdBICAgICAgQ0JENiAgIFNXIFM4LCA4OChTUCkKQkZEMDREN0MgICAgICBDQjM1ICAgU1cgVDksIDg0KFNQKQpCRkQwNEQ3RSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApCkJGRDA0RDgwICAgICAgQzlGMyAgIFNXIFQ3LCA3NihTUCkKQkZEMDREODIgICAgICBDOUQyICAgU1cgVDYsIDcyKFNQKQpCRkQwNEQ4NCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApCkJGRDA0RDg2ICAgICAgQzk5MCAgIFNXIFQ0LCA2NChTUCkKQkZEMDREODggICAgICBDOTZGICAgU1cgVDMsIDYwKFNQKQpCRkQwNEQ4QSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApCkJGRDA0RDhDICAgICAgQzkyRCAgIFNXIFQxLCA1MihTUCkKQkZEMDREOEUgICAgICBDOTBDICAgU1cgVDAsIDQ4KFNQKQpCRkQwNEQ5MCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApCkJGRDA0RDkyICAgICAgQzhDQSAgIFNXIEEyLCA0MChTUCkKQkZEMDREOTQgICAgICBDOEE5ICAgU1cgQTEsIDM2KFNQKQpCRkQwNEQ5NiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApCkJGRDA0RDk4ICAgICAgQzgyNSAgIFNXIEFULCAyMChTUCkKQkZEMDREOUEgICAgICA0NjQyICAgTUZMTyBWMApCRkQwNEQ5QyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQpCRkQwNEQ5RSAgICAgIDQ2MDMgICBNRkhJIFYxCkJGRDA0REEwICAgICAgQzg3OCAgIFNXIFYxLCA5NihTUCkKQkZEMDREQTIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMTY3OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIzX0lELCAyLCBUUlVFKTsNCkJGRDA0REE0ICAgICAgRUUwRiAgIExJIEEwLCAxNQpCRkQwNERBNiAgICAgIEVFODIgICBMSSBBMSwgMgpCRkQwNERBOCAgICAgIEVGMDEgICBMSSBBMiwgMQpCRkQwNERBQSAgM0E0MDc3RTggICBKQUxTIGp0dmljX2Rpc19jbHJfc291cmNlCkJGRDA0REFDICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pCkJGRDA0REFFICAgICAgMEMwMCAgIE5PUAoxNjg6ICAgICAgICAgICAgICAgICB9DQpCRkQwNERCMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNERCMiAgICAgIDQ4NTkgICBMVyBWMCwgMTAwKFNQKQpCRkQwNERCNCAgM0Q3QzAwMDIgICBNVExPIFYwCkJGRDA0REI2ICA0ODc4M0Q3QyAgIExIIFQzLCAxODU1MihHUCkKQkZEMDREQjggICAgICA0ODc4ICAgTFcgVjEsIDk2KFNQKQpCRkQwNERCQSAgMkQ3QzAwMDMgICBNVEhJIFYxCkJGRDA0REJDICAgICAgMkQ3QyAgIEFOREkgVjAsIEEzLCAweDQwCkJGRDA0REJFICAgICAgNDg1QyAgIExXIFYwLCAxMTIoU1ApCkJGRDA0REMwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDREQzIgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDRERUMKQkZEMDREQzYgICAgICA0QkY3ICAgTFcgUkEsIDkyKFNQKQpCRkQwNERDOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApCkJGRDA0RENBICAgICAgNEIzNSAgIExXIFQ5LCA4NChTUCkKQkZEMDREQ0MgICAgICA0QjE0ICAgTFcgVDgsIDgwKFNQKQpCRkQwNERDRSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApCkJGRDA0REQwICAgICAgNDlEMiAgIExXIFQ2LCA3MihTUCkKQkZEMDRERDIgICAgICA0OUIxICAgTFcgVDUsIDY4KFNQKQpCRkQwNERENCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApCkJGRDA0REQ2ICAgICAgNDk2RiAgIExXIFQzLCA2MChTUCkKQkZEMDRERDggICAgICA0OTRFICAgTFcgVDIsIDU2KFNQKQpCRkQwNEREQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApCkJGRDA0RERDICAgICAgNDkwQyAgIExXIFQwLCA0OChTUCkKQkZEMDREREUgICAgICA0OEVCICAgTFcgQTMsIDQ0KFNQKQpCRkQwNERFMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApCkJGRDA0REUyICAgICAgNDhBOSAgIExXIEExLCAzNihTUCkKQkZEMDRERTQgICAgICA0ODg4ICAgTFcgQTAsIDMyKFNQKQpCRkQwNERFNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApCkJGRDA0REU4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDRERUEgICAgICA0ODI1ICAgTFcgQVQsIDIwKFNQKQpCRkQwNERFQyAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA0REYwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA0REYyICA0QjVEMTgwMCAgIFNCIFpFUk8sIDE5MjkzKFpFUk8pCkJGRDA0REY0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApCkJGRDA0REY2ICAgICAgNEI3QiAgIExXIEsxLCAxMDgoU1ApCkJGRDA0REY4ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQwpCRkQwNERGQyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQpCRkQwNERGRSAgICAgIDRDM0QgICBBRERJVSBTUCwgU1AsIDEyMApCRkQwNEUwMCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDRFMDIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNEUwNCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA0RTA2ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNEUwOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDRFMEEgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNEUwQyAgRjM3QzAwMDAgICBFUkVUCkJGRDA0RTBFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNAoxNjk6ICAgICAgICAgICAgICAgICANCjE3MDogICAgICAgICAgICAgICAgIC8qIDE2LWJpdCBCYXNpYyBUaW1lciAzICovDQoxNzE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTcyOiAgICAgICAgICAgICAgICAgZ2lycTIzX2IzKHZvaWQpDQoxNzM6ICAgICAgICAgICAgICAgICB7DQpCRkQwNEUxMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA0RTE0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNEUxNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA0RTE4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNEUxQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDRFMUMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA0RTFFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA0RTIwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNEUyNCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNEUyNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNEUyQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNEUyQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNEUyRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNEUzMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNEUzMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDRFMzQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA0RTM2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDRFMzggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA0RTNDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDRFM0UgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNEU0MCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNEU0MiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA0RTQ0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA0RTZBCkJGRDA0RTQ4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDRFNEEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNEU0QyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA0RTRFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDRFNTAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNEU1MiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA0RTU0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDRFNTYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNEU1OCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA0RTVBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDRFNUMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNEU1RSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA0RTYwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDRFNjIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNEU2NCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA0RTY2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDRFNjggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNEU2QSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA0RTZDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA0RTZFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDRFNzAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNEU3MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxNzQ6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDMsIFRSVUUpOw0KQkZEMDRFNzQgICAgICBFRTBGICAgTEkgQTAsIDE1CkJGRDA0RTc2ICAgICAgRUU4MyAgIExJIEExLCAzCkJGRDA0RTc4ICAgICAgRUYwMSAgIExJIEEyLCAxCkJGRDA0RTdBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UKQkZEMDRFN0MgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykKQkZEMDRFN0UgICAgICAwQzAwICAgTk9QCjE3NTogICAgICAgICAgICAgICAgIH0NCkJGRDA0RTgwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA0RTgyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApCkJGRDA0RTg0ICAzRDdDMDAwMiAgIE1UTE8gVjAKQkZEMDRFODYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQpCRkQwNEU4OCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApCkJGRDA0RThBICAyRDdDMDAwMyAgIE1USEkgVjEKQkZEMDRFOEMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDAKQkZEMDRFOEUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkKQkZEMDRFOTAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNEU5MiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNEVCQwpCRkQwNEU5NiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApCkJGRDA0RTk4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkKQkZEMDRFOUEgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQpCRkQwNEU5QyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApCkJGRDA0RTlFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkKQkZEMDRFQTAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQpCRkQwNEVBMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApCkJGRDA0RUE0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkKQkZEMDRFQTYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQpCRkQwNEVBOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApCkJGRDA0RUFBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkKQkZEMDRFQUMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQpCRkQwNEVBRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApCkJGRDA0RUIwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkKQkZEMDRFQjIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQpCRkQwNEVCNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApCkJGRDA0RUI2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkKQkZEMDRFQjggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNEVCQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApCkJGRDA0RUJDICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDRFQzAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDRFQzIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykKQkZEMDRFQzQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkKQkZEMDRFQzYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkKQkZEMDRFQzggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA0RUNDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApCkJGRDA0RUNFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwCkJGRDA0RUQwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNEVEMiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA0RUQ0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDRFRDYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA0RUQ4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNEVEQSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA0RURDICBGMzdDMDAwMCAgIEVSRVQKQkZEMDRFREUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjE3NjogICAgICAgICAgICAgICAgIA0KMTc3OiAgICAgICAgICAgICAgICAgLyogUlRPUyBUaW1lciAgKi8NCjE3ODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNzk6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjQodm9pZCkNCjE4MDogICAgICAgICAgICAgICAgIHsNCkJGRDA3MzE4ICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDczMUMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA3MzFFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDczMjAgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA3MzIyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQpCRkQwNzMyNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNzMyNiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA3MzI4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNzMyQyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApCkJGRDA3MzJFICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA3MzMyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkKQkZEMDczMzQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDczMzYgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDczMzggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDczM0EgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA3MzNDICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNzMzRSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA3MzQwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzM0NCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkKQkZEMDczNDYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApCkJGRDA3MzQ4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkKQkZEMDczNEEgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNzM0QyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA3MzRFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjE4MTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTIzX0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDQpOw0KQkZEMDczNTAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDczNTIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNzM1NCAgQzAwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTYzODQKQkZEMDczNTggICAgICBFRDkwICAgTEkgVjEsIDE2CkJGRDA3MzVBICAwMEYwRjg2MiAgIFNXIFYxLCAyNDAoVjApCjE4MjogICAgICAgICAgICAgICAgICAgICANCjE4MzogICAgICAgICAgICAgICAgIH0NCkJGRDA3MzVFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3MzYwICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDczNjIgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNzM2NCAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA3MzY2ICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQpCRkQwNzM2OCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkKQkZEMDczNkEgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNzM2RSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNzM3MCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQpCRkQwNzM3MiAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApCkJGRDA3Mzc0ICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkKQkZEMDczNzYgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA3MzdBICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkKQkZEMDczN0MgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNzM3RSAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDczODAgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNzM4MiAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA3Mzg0ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNzM4NiAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDczODggIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNzM4QSAgRjM3QzAwMDAgICBFUkVUCkJGRDA3MzhDICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMAoxODQ6ICAgICAgICAgICAgICAgICANCjE4NTogICAgICAgICAgICAgICAgIC8qIEhpYmVybmF0aW9uIFRpbWVyICovDQoxODY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTg3OiAgICAgICAgICAgICAgICAgZ2lycTIzX2I1KHZvaWQpDQoxODg6ICAgICAgICAgICAgICAgICB7DQpCRkQwNEVFMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA0RUU0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNEVFNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA0RUU4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNEVFQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDRFRUMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA0RUVFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA0RUYwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNEVGNCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNEVGNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNEVGQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNEVGQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNEVGRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNEYwMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNEYwMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDRGMDQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA0RjA2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDRGMDggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA0RjBDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDRGMEUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNEYxMCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNEYxMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA0RjE0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA0RjNBCkJGRDA0RjE4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDRGMUEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNEYxQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA0RjFFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDRGMjAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNEYyMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA0RjI0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDRGMjYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNEYyOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA0RjJBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDRGMkMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNEYyRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA0RjMwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDRGMzIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNEYzNCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA0RjM2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDRGMzggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNEYzQSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA0RjNDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA0RjNFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDRGNDAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNEY0MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxODk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDUsIFRSVUUpOw0KQkZEMDRGNDQgICAgICBFRTBGICAgTEkgQTAsIDE1CkJGRDA0RjQ2ICAgICAgRUU4NSAgIExJIEExLCA1CkJGRDA0RjQ4ICAgICAgRUYwMSAgIExJIEEyLCAxCkJGRDA0RjRBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UKQkZEMDRGNEMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykKQkZEMDRGNEUgICAgICAwQzAwICAgTk9QCjE5MDogICAgICAgICAgICAgICAgIH0NCkJGRDA0RjUwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA0RjUyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApCkJGRDA0RjU0ICAzRDdDMDAwMiAgIE1UTE8gVjAKQkZEMDRGNTYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQpCRkQwNEY1OCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApCkJGRDA0RjVBICAyRDdDMDAwMyAgIE1USEkgVjEKQkZEMDRGNUMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDAKQkZEMDRGNUUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkKQkZEMDRGNjAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNEY2MiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNEY4QwpCRkQwNEY2NiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApCkJGRDA0RjY4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkKQkZEMDRGNkEgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQpCRkQwNEY2QyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApCkJGRDA0RjZFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkKQkZEMDRGNzAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQpCRkQwNEY3MiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApCkJGRDA0Rjc0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkKQkZEMDRGNzYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQpCRkQwNEY3OCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApCkJGRDA0RjdBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkKQkZEMDRGN0MgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQpCRkQwNEY3RSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApCkJGRDA0RjgwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkKQkZEMDRGODIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQpCRkQwNEY4NCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApCkJGRDA0Rjg2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkKQkZEMDRGODggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNEY4QSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApCkJGRDA0RjhDICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDRGOTAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDRGOTIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykKQkZEMDRGOTQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkKQkZEMDRGOTYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkKQkZEMDRGOTggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA0RjlDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApCkJGRDA0RjlFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwCkJGRDA0RkEwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNEZBMiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA0RkE0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDRGQTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA0RkE4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNEZBQSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA0RkFDICBGMzdDMDAwMCAgIEVSRVQKQkZEMDRGQUUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjE5MTogICAgICAgICAgICAgICAgIA0KMTkyOiAgICAgICAgICAgICAgICAgLyogV2VlayBBbGFybSAqLw0KMTkzOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5NDogICAgICAgICAgICAgICAgIGdpcnEyM19iNih2b2lkKQ0KMTk1OiAgICAgICAgICAgICAgICAgew0KQkZEMDRGQjAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUApCRkQwNEZCNCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMKQkZEMDRGQjYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMgpCRkQwNEZCOCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwKQkZEMDRGQkEgIDRGQzUxMEZDICAgQURESSBBMywgR1AsIDIwNDIxCkJGRDA0RkJDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMApCRkQwNEZCRSAgICAgIENCN0QgICBTVyBLMSwgMTE2KFNQKQpCRkQwNEZDMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDRGQzQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkKQkZEMDRGQzYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UKQkZEMDRGQ0EgICAgICBDQjdCICAgU1cgSzEsIDEwOChTUCkKQkZEMDRGQ0MgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDRGQ0UgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDRGRDAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDRGRDIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA0RkQ0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNEZENiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA0RkQ4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNEZEQyAgICAgIEM4NjcgICBTVyBWMSwgMjgoU1ApCkJGRDA0RkRFICAgICAgQzg0NiAgIFNXIFYwLCAyNChTUCkKQkZEMDRGRTAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkKQkZEMDRGRTIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNEZFNCAgMDAxMTQwQTMgICBCTkVaQyBWMSwgMHhCRkQwNTAwQQpCRkQwNEZFOCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApCkJGRDA0RkVBICAgICAgQ0JENiAgIFNXIFM4LCA4OChTUCkKQkZEMDRGRUMgICAgICBDQjM1ICAgU1cgVDksIDg0KFNQKQpCRkQwNEZFRSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApCkJGRDA0RkYwICAgICAgQzlGMyAgIFNXIFQ3LCA3NihTUCkKQkZEMDRGRjIgICAgICBDOUQyICAgU1cgVDYsIDcyKFNQKQpCRkQwNEZGNCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApCkJGRDA0RkY2ICAgICAgQzk5MCAgIFNXIFQ0LCA2NChTUCkKQkZEMDRGRjggICAgICBDOTZGICAgU1cgVDMsIDYwKFNQKQpCRkQwNEZGQSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApCkJGRDA0RkZDICAgICAgQzkyRCAgIFNXIFQxLCA1MihTUCkKQkZEMDRGRkUgICAgICBDOTBDICAgU1cgVDAsIDQ4KFNQKQpCRkQwNTAwMCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApCkJGRDA1MDAyICAgICAgQzhDQSAgIFNXIEEyLCA0MChTUCkKQkZEMDUwMDQgICAgICBDOEE5ICAgU1cgQTEsIDM2KFNQKQpCRkQwNTAwNiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApCkJGRDA1MDA4ICAgICAgQzgyNSAgIFNXIEFULCAyMChTUCkKQkZEMDUwMEEgICAgICA0NjQyICAgTUZMTyBWMApCRkQwNTAwQyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQpCRkQwNTAwRSAgICAgIDQ2MDMgICBNRkhJIFYxCkJGRDA1MDEwICAgICAgQzg3OCAgIFNXIFYxLCA5NihTUCkKQkZEMDUwMTIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMTk2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIzX0lELCA2LCBUUlVFKTsNCkJGRDA1MDE0ICAgICAgRUUwRiAgIExJIEEwLCAxNQpCRkQwNTAxNiAgICAgIEVFODYgICBMSSBBMSwgNgpCRkQwNTAxOCAgICAgIEVGMDEgICBMSSBBMiwgMQpCRkQwNTAxQSAgM0E0MDc3RTggICBKQUxTIGp0dmljX2Rpc19jbHJfc291cmNlCkJGRDA1MDFDICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pCkJGRDA1MDFFICAgICAgMEMwMCAgIE5PUAoxOTc6ICAgICAgICAgICAgICAgICB9DQpCRkQwNTAyMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNTAyMiAgICAgIDQ4NTkgICBMVyBWMCwgMTAwKFNQKQpCRkQwNTAyNCAgM0Q3QzAwMDIgICBNVExPIFYwCkJGRDA1MDI2ICA0ODc4M0Q3QyAgIExIIFQzLCAxODU1MihHUCkKQkZEMDUwMjggICAgICA0ODc4ICAgTFcgVjEsIDk2KFNQKQpCRkQwNTAyQSAgMkQ3QzAwMDMgICBNVEhJIFYxCkJGRDA1MDJDICAgICAgMkQ3QyAgIEFOREkgVjAsIEEzLCAweDQwCkJGRDA1MDJFICAgICAgNDg1QyAgIExXIFYwLCAxMTIoU1ApCkJGRDA1MDMwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDUwMzIgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDUwNUMKQkZEMDUwMzYgICAgICA0QkY3ICAgTFcgUkEsIDkyKFNQKQpCRkQwNTAzOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApCkJGRDA1MDNBICAgICAgNEIzNSAgIExXIFQ5LCA4NChTUCkKQkZEMDUwM0MgICAgICA0QjE0ICAgTFcgVDgsIDgwKFNQKQpCRkQwNTAzRSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApCkJGRDA1MDQwICAgICAgNDlEMiAgIExXIFQ2LCA3MihTUCkKQkZEMDUwNDIgICAgICA0OUIxICAgTFcgVDUsIDY4KFNQKQpCRkQwNTA0NCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApCkJGRDA1MDQ2ICAgICAgNDk2RiAgIExXIFQzLCA2MChTUCkKQkZEMDUwNDggICAgICA0OTRFICAgTFcgVDIsIDU2KFNQKQpCRkQwNTA0QSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApCkJGRDA1MDRDICAgICAgNDkwQyAgIExXIFQwLCA0OChTUCkKQkZEMDUwNEUgICAgICA0OEVCICAgTFcgQTMsIDQ0KFNQKQpCRkQwNTA1MCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApCkJGRDA1MDUyICAgICAgNDhBOSAgIExXIEExLCAzNihTUCkKQkZEMDUwNTQgICAgICA0ODg4ICAgTFcgQTAsIDMyKFNQKQpCRkQwNTA1NiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApCkJGRDA1MDU4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDUwNUEgICAgICA0ODI1ICAgTFcgQVQsIDIwKFNQKQpCRkQwNTA1QyAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA1MDYwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA1MDYyICA0QjVEMTgwMCAgIFNCIFpFUk8sIDE5MjkzKFpFUk8pCkJGRDA1MDY0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApCkJGRDA1MDY2ICAgICAgNEI3QiAgIExXIEsxLCAxMDgoU1ApCkJGRDA1MDY4ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQwpCRkQwNTA2QyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQpCRkQwNTA2RSAgICAgIDRDM0QgICBBRERJVSBTUCwgU1AsIDEyMApCRkQwNTA3MCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDUwNzIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNTA3NCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA1MDc2ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNTA3OCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDUwN0EgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNTA3QyAgRjM3QzAwMDAgICBFUkVUCkJGRDA1MDdFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNAoxOTg6ICAgICAgICAgICAgICAgICANCjE5OTogICAgICAgICAgICAgICAgIC8qIFN1Yi1XZWVrIEFsYXJtICovDQoyMDA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjAxOiAgICAgICAgICAgICAgICAgZ2lycTIzX2I3KHZvaWQpDQoyMDI6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTA4MCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA1MDg0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNTA4NiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA1MDg4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNTA4QSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDUwOEMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA1MDhFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA1MDkwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNTA5NCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNTA5NiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNTA5QSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNTA5QyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNTA5RSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNTBBMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNTBBMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDUwQTQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA1MEE2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDUwQTggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA1MEFDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDUwQUUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNTBCMCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNTBCMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA1MEI0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MERBCkJGRDA1MEI4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDUwQkEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNTBCQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA1MEJFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDUwQzAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNTBDMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA1MEM0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDUwQzYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNTBDOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA1MENBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDUwQ0MgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNTBDRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA1MEQwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDUwRDIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNTBENCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA1MEQ2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDUwRDggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNTBEQSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA1MERDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA1MERFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDUwRTAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNTBFMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoyMDM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDcsIFRSVUUpOw0KQkZEMDUwRTQgICAgICBFRTBGICAgTEkgQTAsIDE1CkJGRDA1MEU2ICAgICAgRUU4NyAgIExJIEExLCA3CkJGRDA1MEU4ICAgICAgRUYwMSAgIExJIEEyLCAxCkJGRDA1MEVBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UKQkZEMDUwRUMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykKQkZEMDUwRUUgICAgICAwQzAwICAgTk9QCjIwNDogICAgICAgICAgICAgICAgIH0NCkJGRDA1MEYwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA1MEYyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApCkJGRDA1MEY0ICAzRDdDMDAwMiAgIE1UTE8gVjAKQkZEMDUwRjYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQpCRkQwNTBGOCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApCkJGRDA1MEZBICAyRDdDMDAwMyAgIE1USEkgVjEKQkZEMDUwRkMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDAKQkZEMDUwRkUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkKQkZEMDUxMDAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNTEwMiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTEyQwpCRkQwNTEwNiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApCkJGRDA1MTA4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkKQkZEMDUxMEEgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQpCRkQwNTEwQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApCkJGRDA1MTBFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkKQkZEMDUxMTAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQpCRkQwNTExMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApCkJGRDA1MTE0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkKQkZEMDUxMTYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQpCRkQwNTExOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApCkJGRDA1MTFBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkKQkZEMDUxMUMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQpCRkQwNTExRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApCkJGRDA1MTIwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkKQkZEMDUxMjIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQpCRkQwNTEyNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApCkJGRDA1MTI2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkKQkZEMDUxMjggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNTEyQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApCkJGRDA1MTJDICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDUxMzAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDUxMzIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykKQkZEMDUxMzQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkKQkZEMDUxMzYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkKQkZEMDUxMzggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA1MTNDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApCkJGRDA1MTNFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwCkJGRDA1MTQwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNTE0MiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA1MTQ0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDUxNDYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA1MTQ4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNTE0QSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA1MTRDICBGMzdDMDAwMCAgIEVSRVQKQkZEMDUxNEUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjIwNTogICAgICAgICAgICAgICAgIA0KMjA2OiAgICAgICAgICAgICAgICAgLyogV2VlayBBbGFybSBPbmUgU2Vjb25kICovDQoyMDc6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjA4OiAgICAgICAgICAgICAgICAgZ2lycTIzX2I4KHZvaWQpDQoyMDk6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTE1MCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA1MTU0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNTE1NiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA1MTU4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNTE1QSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDUxNUMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA1MTVFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA1MTYwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNTE2NCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNTE2NiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNTE2QSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNTE2QyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNTE2RSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNTE3MCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNTE3MiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDUxNzQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA1MTc2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDUxNzggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA1MTdDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDUxN0UgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNTE4MCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNTE4MiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA1MTg0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MUFBCkJGRDA1MTg4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDUxOEEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNTE4QyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA1MThFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDUxOTAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNTE5MiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA1MTk0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDUxOTYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNTE5OCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA1MTlBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDUxOUMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNTE5RSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA1MUEwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDUxQTIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNTFBNCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA1MUE2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDUxQTggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNTFBQSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA1MUFDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA1MUFFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDUxQjAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNTFCMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoyMTA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDgsIFRSVUUpOw0KQkZEMDUxQjQgICAgICBFRTBGICAgTEkgQTAsIDE1CkJGRDA1MUI2ICAgICAgRUU4OCAgIExJIEExLCA4CkJGRDA1MUI4ICAgICAgRUYwMSAgIExJIEEyLCAxCkJGRDA1MUJBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UKQkZEMDUxQkMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykKQkZEMDUxQkUgICAgICAwQzAwICAgTk9QCjIxMTogICAgICAgICAgICAgICAgIH0NCkJGRDA1MUMwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA1MUMyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApCkJGRDA1MUM0ICAzRDdDMDAwMiAgIE1UTE8gVjAKQkZEMDUxQzYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQpCRkQwNTFDOCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApCkJGRDA1MUNBICAyRDdDMDAwMyAgIE1USEkgVjEKQkZEMDUxQ0MgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDAKQkZEMDUxQ0UgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkKQkZEMDUxRDAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNTFEMiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTFGQwpCRkQwNTFENiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApCkJGRDA1MUQ4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkKQkZEMDUxREEgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQpCRkQwNTFEQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApCkJGRDA1MURFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkKQkZEMDUxRTAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQpCRkQwNTFFMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApCkJGRDA1MUU0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkKQkZEMDUxRTYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQpCRkQwNTFFOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApCkJGRDA1MUVBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkKQkZEMDUxRUMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQpCRkQwNTFFRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApCkJGRDA1MUYwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkKQkZEMDUxRjIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQpCRkQwNTFGNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApCkJGRDA1MUY2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkKQkZEMDUxRjggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNTFGQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApCkJGRDA1MUZDICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDUyMDAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDUyMDIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykKQkZEMDUyMDQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkKQkZEMDUyMDYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkKQkZEMDUyMDggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA1MjBDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApCkJGRDA1MjBFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwCkJGRDA1MjEwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNTIxMiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA1MjE0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDUyMTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA1MjE4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNTIxQSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA1MjFDICBGMzdDMDAwMCAgIEVSRVQKQkZEMDUyMUUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjIxMjogICAgICAgICAgICAgICAgIA0KMjEzOiAgICAgICAgICAgICAgICAgLyogV2VlayBBbGFybSBTdWIgU2Vjb25kICovDQoyMTQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjE1OiAgICAgICAgICAgICAgICAgZ2lycTIzX2I5KHZvaWQpDQoyMTY6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTIyMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA1MjI0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNTIyNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA1MjI4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNTIyQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDUyMkMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA1MjJFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA1MjMwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNTIzNCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNTIzNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNTIzQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNTIzQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNTIzRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNTI0MCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNTI0MiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDUyNDQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA1MjQ2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDUyNDggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA1MjRDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDUyNEUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNTI1MCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNTI1MiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA1MjU0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MjdBCkJGRDA1MjU4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDUyNUEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNTI1QyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA1MjVFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDUyNjAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNTI2MiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA1MjY0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDUyNjYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNTI2OCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA1MjZBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDUyNkMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNTI2RSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA1MjcwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDUyNzIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNTI3NCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA1Mjc2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDUyNzggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNTI3QSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA1MjdDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA1MjdFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDUyODAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNTI4MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoyMTc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDksIFRSVUUpOw0KQkZEMDUyODQgICAgICBFRTBGICAgTEkgQTAsIDE1CkJGRDA1Mjg2ICAgICAgRUU4OSAgIExJIEExLCA5CkJGRDA1Mjg4ICAgICAgRUYwMSAgIExJIEEyLCAxCkJGRDA1MjhBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UKQkZEMDUyOEMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykKQkZEMDUyOEUgICAgICAwQzAwICAgTk9QCjIxODogICAgICAgICAgICAgICAgIH0NCkJGRDA1MjkwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA1MjkyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApCkJGRDA1Mjk0ICAzRDdDMDAwMiAgIE1UTE8gVjAKQkZEMDUyOTYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQpCRkQwNTI5OCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApCkJGRDA1MjlBICAyRDdDMDAwMyAgIE1USEkgVjEKQkZEMDUyOUMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDAKQkZEMDUyOUUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkKQkZEMDUyQTAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNTJBMiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTJDQwpCRkQwNTJBNiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApCkJGRDA1MkE4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkKQkZEMDUyQUEgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQpCRkQwNTJBQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApCkJGRDA1MkFFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkKQkZEMDUyQjAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQpCRkQwNTJCMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApCkJGRDA1MkI0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkKQkZEMDUyQjYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQpCRkQwNTJCOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApCkJGRDA1MkJBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkKQkZEMDUyQkMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQpCRkQwNTJCRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApCkJGRDA1MkMwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkKQkZEMDUyQzIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQpCRkQwNTJDNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApCkJGRDA1MkM2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkKQkZEMDUyQzggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNTJDQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApCkJGRDA1MkNDICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDUyRDAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDUyRDIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykKQkZEMDUyRDQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkKQkZEMDUyRDYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkKQkZEMDUyRDggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA1MkRDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApCkJGRDA1MkRFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwCkJGRDA1MkUwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNTJFMiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA1MkU0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDUyRTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA1MkU4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNTJFQSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA1MkVDICBGMzdDMDAwMCAgIEVSRVQKQkZEMDUyRUUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjIxOTogICAgICAgICAgICAgICAgIA0KMjIwOiAgICAgICAgICAgICAgICAgLyogV2VlayBBbGFybSBTeXN0ZW0gUG93ZXIgUHJlc2VudCBQaW4gKi8NCjIyMTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMjI6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjEwKHZvaWQpDQoyMjM6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTJGMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA1MkY0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNTJGNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA1MkY4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNTJGQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDUyRkMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA1MkZFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA1MzAwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNTMwNCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNTMwNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNTMwQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNTMwQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNTMwRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNTMxMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNTMxMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDUzMTQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA1MzE2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDUzMTggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA1MzFDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDUzMUUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNTMyMCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNTMyMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA1MzI0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MzRBCkJGRDA1MzI4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDUzMkEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNTMyQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA1MzJFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDUzMzAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNTMzMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA1MzM0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDUzMzYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNTMzOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA1MzNBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDUzM0MgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNTMzRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA1MzQwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDUzNDIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNTM0NCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA1MzQ2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDUzNDggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNTM0QSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA1MzRDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA1MzRFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDUzNTAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNTM1MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoyMjQ6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDEwLCBUUlVFKTsNCkJGRDA1MzU0ICAgICAgRUUwRiAgIExJIEEwLCAxNQpCRkQwNTM1NiAgICAgIEVFOEEgICBMSSBBMSwgMTAKQkZEMDUzNTggICAgICBFRjAxICAgTEkgQTIsIDEKQkZEMDUzNUEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQpCRkQwNTM1QyAgMEMwMDNBNDAgICBTSCBTMiwgMzA3MihaRVJPKQpCRkQwNTM1RSAgICAgIDBDMDAgICBOT1AKMjI1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDUzNjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDUzNjIgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkKQkZEMDUzNjQgIDNEN0MwMDAyICAgTVRMTyBWMApCRkQwNTM2NiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApCkJGRDA1MzY4ICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkKQkZEMDUzNkEgIDJEN0MwMDAzICAgTVRISSBWMQpCRkQwNTM2QyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MApCRkQwNTM2RSAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQpCRkQwNTM3MCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA1MzcyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1MzlDCkJGRDA1Mzc2ICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkKQkZEMDUzNzggICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQpCRkQwNTM3QSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApCkJGRDA1MzdDICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkKQkZEMDUzN0UgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQpCRkQwNTM4MCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApCkJGRDA1MzgyICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkKQkZEMDUzODQgICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQpCRkQwNTM4NiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApCkJGRDA1Mzg4ICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkKQkZEMDUzOEEgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQpCRkQwNTM4QyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApCkJGRDA1MzhFICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkKQkZEMDUzOTAgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQpCRkQwNTM5MiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApCkJGRDA1Mzk0ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkKQkZEMDUzOTYgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQpCRkQwNTM5OCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA1MzlBICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkKQkZEMDUzOUMgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNTNBMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNTNBMiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQpCRkQwNTNBNCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQpCRkQwNTNBNiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQpCRkQwNTNBOCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDUzQUMgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkKQkZEMDUzQUUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjAKQkZEMDUzQjAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA1M0IyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDUzQjQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNTNCNiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDUzQjggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA1M0JBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDUzQkMgIEYzN0MwMDAwICAgRVJFVApCRkQwNTNCRSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQKMjI2OiAgICAgICAgICAgICAgICAgDQoyMjc6ICAgICAgICAgICAgICAgICAvKiBWQ0kgT1ZSRCBJbnB1dCAgKi8NCjIyODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMjk6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjExKHZvaWQpDQoyMzA6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTNDMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA1M0M0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNTNDNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA1M0M4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNTNDQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjEKQkZEMDUzQ0MgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwCkJGRDA1M0NFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApCkJGRDA1M0QwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNTNENCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQpCRkQwNTNENiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNTNEQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQpCRkQwNTNEQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNTNERSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNTNFMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNTNFMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDUzRTQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA1M0U2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDUzRTggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA1M0VDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkKQkZEMDUzRUUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQpCRkQwNTNGMCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQpCRkQwNTNGMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA1M0Y0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1NDFBCkJGRDA1M0Y4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkKQkZEMDUzRkEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQpCRkQwNTNGQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApCkJGRDA1M0ZFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkKQkZEMDU0MDAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQpCRkQwNTQwMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApCkJGRDA1NDA0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkKQkZEMDU0MDYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQpCRkQwNTQwOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApCkJGRDA1NDBBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkKQkZEMDU0MEMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQpCRkQwNTQwRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApCkJGRDA1NDEwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkKQkZEMDU0MTIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQpCRkQwNTQxNCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApCkJGRDA1NDE2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkKQkZEMDU0MTggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQpCRkQwNTQxQSAgICAgIDQ2NDIgICBNRkxPIFYwCkJGRDA1NDFDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApCkJGRDA1NDFFICAgICAgNDYwMyAgIE1GSEkgVjEKQkZEMDU0MjAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQpCRkQwNTQyMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoyMzE6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDExLCBUUlVFKTsNCkJGRDA1NDI0ICAgICAgRUUwRiAgIExJIEEwLCAxNQpCRkQwNTQyNiAgICAgIEVFOEIgICBMSSBBMSwgMTEKQkZEMDU0MjggICAgICBFRjAxICAgTEkgQTIsIDEKQkZEMDU0MkEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQpCRkQwNTQyQyAgMEMwMDNBNDAgICBTSCBTMiwgMzA3MihaRVJPKQpCRkQwNTQyRSAgICAgIDBDMDAgICBOT1AKMjMyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDU0MzAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDU0MzIgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkKQkZEMDU0MzQgIDNEN0MwMDAyICAgTVRMTyBWMApCRkQwNTQzNiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApCkJGRDA1NDM4ICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkKQkZEMDU0M0EgIDJEN0MwMDAzICAgTVRISSBWMQpCRkQwNTQzQyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MApCRkQwNTQzRSAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQpCRkQwNTQ0MCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA1NDQyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1NDZDCkJGRDA1NDQ2ICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkKQkZEMDU0NDggICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQpCRkQwNTQ0QSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApCkJGRDA1NDRDICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkKQkZEMDU0NEUgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQpCRkQwNTQ1MCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApCkJGRDA1NDUyICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkKQkZEMDU0NTQgICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQpCRkQwNTQ1NiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApCkJGRDA1NDU4ICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkKQkZEMDU0NUEgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQpCRkQwNTQ1QyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApCkJGRDA1NDVFICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkKQkZEMDU0NjAgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQpCRkQwNTQ2MiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApCkJGRDA1NDY0ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkKQkZEMDU0NjYgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQpCRkQwNTQ2OCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA1NDZBICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkKQkZEMDU0NkMgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNTQ3MCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNTQ3MiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQpCRkQwNTQ3NCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQpCRkQwNTQ3NiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQpCRkQwNTQ3OCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDU0N0MgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkKQkZEMDU0N0UgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjAKQkZEMDU0ODAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA1NDgyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDU0ODQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNTQ4NiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDU0ODggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA1NDhBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDU0OEMgIEYzN0MwMDAwICAgRVJFVApCRkQwNTQ4RSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQKMjMzOiAgICAgICAgICAgICAgICAgDQoyMzQ6ICAgICAgICAgICAgICAgICAvKiBWQ0kgSU4wICovDQoyMzU6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjM2OiAgICAgICAgICAgICAgICAgZ2lycTIzX2IxMih2b2lkKQ0KMjM3OiAgICAgICAgICAgICAgICAgew0KQkZEMDU0OTAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUApCRkQwNTQ5NCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMKQkZEMDU0OTYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMgpCRkQwNTQ5OCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwKQkZEMDU0OUEgIDRGQzUxMEZDICAgQURESSBBMywgR1AsIDIwNDIxCkJGRDA1NDlDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMApCRkQwNTQ5RSAgICAgIENCN0QgICBTVyBLMSwgMTE2KFNQKQpCRkQwNTRBMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDU0QTQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkKQkZEMDU0QTYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UKQkZEMDU0QUEgICAgICBDQjdCICAgU1cgSzEsIDEwOChTUCkKQkZEMDU0QUMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDU0QUUgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDU0QjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDU0QjIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA1NEI0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNTRCNiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA1NEI4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNTRCQyAgICAgIEM4NjcgICBTVyBWMSwgMjgoU1ApCkJGRDA1NEJFICAgICAgQzg0NiAgIFNXIFYwLCAyNChTUCkKQkZEMDU0QzAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkKQkZEMDU0QzIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNTRDNCAgMDAxMTQwQTMgICBCTkVaQyBWMSwgMHhCRkQwNTRFQQpCRkQwNTRDOCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApCkJGRDA1NENBICAgICAgQ0JENiAgIFNXIFM4LCA4OChTUCkKQkZEMDU0Q0MgICAgICBDQjM1ICAgU1cgVDksIDg0KFNQKQpCRkQwNTRDRSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApCkJGRDA1NEQwICAgICAgQzlGMyAgIFNXIFQ3LCA3NihTUCkKQkZEMDU0RDIgICAgICBDOUQyICAgU1cgVDYsIDcyKFNQKQpCRkQwNTRENCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApCkJGRDA1NEQ2ICAgICAgQzk5MCAgIFNXIFQ0LCA2NChTUCkKQkZEMDU0RDggICAgICBDOTZGICAgU1cgVDMsIDYwKFNQKQpCRkQwNTREQSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApCkJGRDA1NERDICAgICAgQzkyRCAgIFNXIFQxLCA1MihTUCkKQkZEMDU0REUgICAgICBDOTBDICAgU1cgVDAsIDQ4KFNQKQpCRkQwNTRFMCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApCkJGRDA1NEUyICAgICAgQzhDQSAgIFNXIEEyLCA0MChTUCkKQkZEMDU0RTQgICAgICBDOEE5ICAgU1cgQTEsIDM2KFNQKQpCRkQwNTRFNiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApCkJGRDA1NEU4ICAgICAgQzgyNSAgIFNXIEFULCAyMChTUCkKQkZEMDU0RUEgICAgICA0NjQyICAgTUZMTyBWMApCRkQwNTRFQyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQpCRkQwNTRFRSAgICAgIDQ2MDMgICBNRkhJIFYxCkJGRDA1NEYwICAgICAgQzg3OCAgIFNXIFYxLCA5NihTUCkKQkZEMDU0RjIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMjM4OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIzX0lELCAxMiwgVFJVRSk7DQpCRkQwNTRGNCAgICAgIEVFMEYgICBMSSBBMCwgMTUKQkZEMDU0RjYgICAgICBFRThDICAgTEkgQTEsIDEyCkJGRDA1NEY4ICAgICAgRUYwMSAgIExJIEEyLCAxCkJGRDA1NEZBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UKQkZEMDU0RkMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykKQkZEMDU0RkUgICAgICAwQzAwICAgTk9QCjIzOTogICAgICAgICAgICAgICAgIH0NCkJGRDA1NTAwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA1NTAyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApCkJGRDA1NTA0ICAzRDdDMDAwMiAgIE1UTE8gVjAKQkZEMDU1MDYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQpCRkQwNTUwOCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApCkJGRDA1NTBBICAyRDdDMDAwMyAgIE1USEkgVjEKQkZEMDU1MEMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDAKQkZEMDU1MEUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkKQkZEMDU1MTAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNTUxMiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTUzQwpCRkQwNTUxNiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApCkJGRDA1NTE4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkKQkZEMDU1MUEgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQpCRkQwNTUxQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApCkJGRDA1NTFFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkKQkZEMDU1MjAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQpCRkQwNTUyMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApCkJGRDA1NTI0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkKQkZEMDU1MjYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQpCRkQwNTUyOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApCkJGRDA1NTJBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkKQkZEMDU1MkMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQpCRkQwNTUyRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApCkJGRDA1NTMwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkKQkZEMDU1MzIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQpCRkQwNTUzNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApCkJGRDA1NTM2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkKQkZEMDU1MzggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNTUzQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApCkJGRDA1NTNDICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDU1NDAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDU1NDIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykKQkZEMDU1NDQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkKQkZEMDU1NDYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkKQkZEMDU1NDggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA1NTRDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApCkJGRDA1NTRFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwCkJGRDA1NTUwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNTU1MiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA1NTU0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDU1NTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA1NTU4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNTU1QSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA1NTVDICBGMzdDMDAwMCAgIEVSRVQKQkZEMDU1NUUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjI0MDogICAgICAgICAgICAgICAgIA0KMjQxOiAgICAgICAgICAgICAgICAgLyogVkNJIElOMSAqLw0KMjQyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjI0MzogICAgICAgICAgICAgICAgIGdpcnEyM19iMTModm9pZCkNCjI0NDogICAgICAgICAgICAgICAgIHsNCkJGRDA1NTYwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDU1NjQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA1NTY2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDU1NjggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA1NTZBICA0RkM1MTBGQyAgIEFEREkgQTMsIEdQLCAyMDQyMQpCRkQwNTU2QyAgICAgIDRGQzUgICBBRERJVSBTUCwgU1AsIC0xMjAKQkZEMDU1NkUgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkKQkZEMDU1NzAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzCkJGRDA1NTc0ICAgICAgQ0I1QyAgIFNXIEswLCAxMTIoU1ApCkJGRDA1NTc2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA1NTdBICAgICAgQ0I3QiAgIFNXIEsxLCAxMDgoU1ApCkJGRDA1NTdDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA1NTdFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA1NTgwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA1NTgyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNTU4NCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDU1ODYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNTU4OCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDU1OEMgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQpCRkQwNTU4RSAgICAgIEM4NDYgICBTVyBWMCwgMjQoU1ApCkJGRDA1NTkwICAgICAgNDg3QyAgIExXIFYxLCAxMTIoU1ApCkJGRDA1NTkyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDU1OTQgIDAwMTE0MEEzICAgQk5FWkMgVjEsIDB4QkZEMDU1QkEKQkZEMDU1OTggICAgICBDQkY3ICAgU1cgUkEsIDkyKFNQKQpCRkQwNTU5QSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApCkJGRDA1NTlDICAgICAgQ0IzNSAgIFNXIFQ5LCA4NChTUCkKQkZEMDU1OUUgICAgICBDQjE0ICAgU1cgVDgsIDgwKFNQKQpCRkQwNTVBMCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApCkJGRDA1NUEyICAgICAgQzlEMiAgIFNXIFQ2LCA3MihTUCkKQkZEMDU1QTQgICAgICBDOUIxICAgU1cgVDUsIDY4KFNQKQpCRkQwNTVBNiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApCkJGRDA1NUE4ICAgICAgQzk2RiAgIFNXIFQzLCA2MChTUCkKQkZEMDU1QUEgICAgICBDOTRFICAgU1cgVDIsIDU2KFNQKQpCRkQwNTVBQyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApCkJGRDA1NUFFICAgICAgQzkwQyAgIFNXIFQwLCA0OChTUCkKQkZEMDU1QjAgICAgICBDOEVCICAgU1cgQTMsIDQ0KFNQKQpCRkQwNTVCMiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApCkJGRDA1NUI0ICAgICAgQzhBOSAgIFNXIEExLCAzNihTUCkKQkZEMDU1QjYgICAgICBDODg4ICAgU1cgQTAsIDMyKFNQKQpCRkQwNTVCOCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApCkJGRDA1NUJBICAgICAgNDY0MiAgIE1GTE8gVjAKQkZEMDU1QkMgICAgICBDODU5ICAgU1cgVjAsIDEwMChTUCkKQkZEMDU1QkUgICAgICA0NjAzICAgTUZISSBWMQpCRkQwNTVDMCAgICAgIEM4NzggICBTVyBWMSwgOTYoU1ApCkJGRDA1NUMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjI0NTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgMTMsIFRSVUUpOw0KQkZEMDU1QzQgICAgICBFRTBGICAgTEkgQTAsIDE1CkJGRDA1NUM2ICAgICAgRUU4RCAgIExJIEExLCAxMwpCRkQwNTVDOCAgICAgIEVGMDEgICBMSSBBMiwgMQpCRkQwNTVDQSAgM0E0MDc3RTggICBKQUxTIGp0dmljX2Rpc19jbHJfc291cmNlCkJGRDA1NUNDICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pCkJGRDA1NUNFICAgICAgMEMwMCAgIE5PUAoyNDY6ICAgICAgICAgICAgICAgICB9DQpCRkQwNTVEMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNTVEMiAgICAgIDQ4NTkgICBMVyBWMCwgMTAwKFNQKQpCRkQwNTVENCAgM0Q3QzAwMDIgICBNVExPIFYwCkJGRDA1NUQ2ICA0ODc4M0Q3QyAgIExIIFQzLCAxODU1MihHUCkKQkZEMDU1RDggICAgICA0ODc4ICAgTFcgVjEsIDk2KFNQKQpCRkQwNTVEQSAgMkQ3QzAwMDMgICBNVEhJIFYxCkJGRDA1NURDICAgICAgMkQ3QyAgIEFOREkgVjAsIEEzLCAweDQwCkJGRDA1NURFICAgICAgNDg1QyAgIExXIFYwLCAxMTIoU1ApCkJGRDA1NUUwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDU1RTIgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDU2MEMKQkZEMDU1RTYgICAgICA0QkY3ICAgTFcgUkEsIDkyKFNQKQpCRkQwNTVFOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApCkJGRDA1NUVBICAgICAgNEIzNSAgIExXIFQ5LCA4NChTUCkKQkZEMDU1RUMgICAgICA0QjE0ICAgTFcgVDgsIDgwKFNQKQpCRkQwNTVFRSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApCkJGRDA1NUYwICAgICAgNDlEMiAgIExXIFQ2LCA3MihTUCkKQkZEMDU1RjIgICAgICA0OUIxICAgTFcgVDUsIDY4KFNQKQpCRkQwNTVGNCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApCkJGRDA1NUY2ICAgICAgNDk2RiAgIExXIFQzLCA2MChTUCkKQkZEMDU1RjggICAgICA0OTRFICAgTFcgVDIsIDU2KFNQKQpCRkQwNTVGQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApCkJGRDA1NUZDICAgICAgNDkwQyAgIExXIFQwLCA0OChTUCkKQkZEMDU1RkUgICAgICA0OEVCICAgTFcgQTMsIDQ0KFNQKQpCRkQwNTYwMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApCkJGRDA1NjAyICAgICAgNDhBOSAgIExXIEExLCAzNihTUCkKQkZEMDU2MDQgICAgICA0ODg4ICAgTFcgQTAsIDMyKFNQKQpCRkQwNTYwNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApCkJGRDA1NjA4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDU2MEEgICAgICA0ODI1ICAgTFcgQVQsIDIwKFNQKQpCRkQwNTYwQyAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA1NjEwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA1NjEyICA0QjVEMTgwMCAgIFNCIFpFUk8sIDE5MjkzKFpFUk8pCkJGRDA1NjE0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApCkJGRDA1NjE2ICAgICAgNEI3QiAgIExXIEsxLCAxMDgoU1ApCkJGRDA1NjE4ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQwpCRkQwNTYxQyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQpCRkQwNTYxRSAgICAgIDRDM0QgICBBRERJVSBTUCwgU1AsIDEyMApCRkQwNTYyMCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDU2MjIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNTYyNCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA1NjI2ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNTYyOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDU2MkEgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNTYyQyAgRjM3QzAwMDAgICBFUkVUCkJGRDA1NjJFICA0RkY1RjM3QyAgIEpBTFggMHhCREYxM0ZENAoyNDc6ICAgICAgICAgICAgICAgICANCjI0ODogICAgICAgICAgICAgICAgIA0KMjQ5OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyNTA6ICAgICAgICAgICAgICAgICANCjI1MTogICAgICAgICAgICAgICAgIA0KMjUyOiAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnEyMy5jICovDQoyNTM6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMjU0OiAgICAgICAgICAgICAgICAgICovDQoyNTU6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMjIuYyAgLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEyMi5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMjJfRElTQUdHID09IDANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQozOTogICAgICAgICAgICAgICAgICBnaXJxMjJfaXNyKHZvaWQpDQo0MDogICAgICAgICAgICAgICAgICB7DQpCRkQwNzIyOCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3MjJDICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzIyRSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3MjMwICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzIzMiAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDcyMzQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDcyMzYgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzIzOCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDcyM0MgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzIzRSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzI0MiAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3MjQ0ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3MjQ2ICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3MjQ4ICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3MjRBICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzI0QyAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDcyNEUgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzI1MCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDcyNTQgICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3MjU2ICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzI1OCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3MjVBICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDcyNUMgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzI1RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8MTQpOw0KQkZEMDcyNjAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDcyNjIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNzI2NCAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTIKQkZEMDcyNjggIDQwMDAzMDYwICAgQURESVUgVjEsIFpFUk8sIDE2Mzg0CkJGRDA3MjZBICBFOUEwNDAwMCAgIEJMVFogWkVSTywgMHhCRkQwNDVBRQpCRkQwNzI2QyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDcyNkUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDcyNzAgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzI3MiAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3Mjc0ICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDcyNzYgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3Mjc4ICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzI3QSAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3MjdFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3MjgwICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3MjgyICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDcyODQgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzI4NiAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDcyOEEgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzI4QyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3MjhFICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzI5MCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3MjkyICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDcyOTQgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3Mjk2ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzI5OCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3MjlBICBGMzdDMDAwMCAgIEVSRVQKQkZEMDcyOUMgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwCjQzOiAgICAgICAgICAgICAgICAgIA0KNDQ6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ1OiAgICAgICAgICAgICAgICAgIA0KNDY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ3OiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iMCh2b2lkKQ0KNDg6ICAgICAgICAgICAgICAgICAgew0KNDk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCAwKTsNCjUwOiAgICAgICAgICAgICAgICAgIH0NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjUzOiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iMSh2b2lkKQ0KNTQ6ICAgICAgICAgICAgICAgICAgew0KNTU6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCAxKTsNCjU2OiAgICAgICAgICAgICAgICAgIH0NCjU3OiAgICAgICAgICAgICAgICAgIA0KNTg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU5OiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iMih2b2lkKQ0KNjA6ICAgICAgICAgICAgICAgICAgew0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCAyKTsNCjYyOiAgICAgICAgICAgICAgICAgIH0NCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY1OiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iMyh2b2lkKQ0KNjY6ICAgICAgICAgICAgICAgICAgew0KNjc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCAzKTsNCjY4OiAgICAgICAgICAgICAgICAgIH0NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcxOiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iNCh2b2lkKQ0KNzI6ICAgICAgICAgICAgICAgICAgew0KNzM6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCA0KTsNCjc0OiAgICAgICAgICAgICAgICAgIH0NCjc1OiAgICAgICAgICAgICAgICAgIA0KNzY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc3OiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iNSh2b2lkKQ0KNzg6ICAgICAgICAgICAgICAgICAgew0KNzk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCA1KTsNCjgwOiAgICAgICAgICAgICAgICAgIH0NCjgxOiAgICAgICAgICAgICAgICAgIA0KODI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjgzOiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iNih2b2lkKQ0KODQ6ICAgICAgICAgICAgICAgICAgew0KODU6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCA2KTsNCjg2OiAgICAgICAgICAgICAgICAgIH0NCjg3OiAgICAgICAgICAgICAgICAgIA0KODg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg5OiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iNyh2b2lkKQ0KOTA6ICAgICAgICAgICAgICAgICAgew0KOTE6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCA3KTsNCjkyOiAgICAgICAgICAgICAgICAgIH0NCjkzOiAgICAgICAgICAgICAgICAgIA0KOTQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk1OiAgICAgICAgICAgICAgICAgIGdpcnEyMl9iOCh2b2lkKQ0KOTY6ICAgICAgICAgICAgICAgICAgew0KOTc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCA4KTsNCjk4OiAgICAgICAgICAgICAgICAgIH0NCjk5OiAgICAgICAgICAgICAgICAgIA0KMTAwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMTogICAgICAgICAgICAgICAgIGdpcnEyMl9iOSh2b2lkKQ0KMTAyOiAgICAgICAgICAgICAgICAgew0KMTAzOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIyX0lELCA5KTsNCjEwNDogICAgICAgICAgICAgICAgIH0NCjEwNTogICAgICAgICAgICAgICAgIA0KMTA2OiAgICAgICAgICAgICAgICAgDQoxMDc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjEwODogICAgICAgICAgICAgICAgIA0KMTA5OiAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnEyMi5jICovDQoxMTA6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMTExOiAgICAgICAgICAgICAgICAgICovDQoxMTI6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMjEuYyAgLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEyMS5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMjFfRElTQUdHID09IDANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgLyoNCjM5OiAgICAgICAgICAgICAgICAgICAqIEdJUlEyMSBpcyBhIHdha2UgcGVyaXBoZXJhbCBsb2dpYyBvbmx5IGludGVycnVwdC4NCjQwOiAgICAgICAgICAgICAgICAgICAqIEl0J3MgcHVycG9zZSBpcyB0byBhbGxvdyB0aGUgcGVyaXBoZXJhbCBsb2dpYyBzdWNoIGFzIFNNQnVzIG9yIExQQyB0byANCjQxOiAgICAgICAgICAgICAgICAgICAqIHdha2UgYW4gc2VydmljZSBIVyBldmVudCB3aXRob3V0IHdha2luZyB0aGUgRUMuDQo0MjogICAgICAgICAgICAgICAgICAgKiBUaGlzIGhhbmRsZXIgaXMgc3VwZXJmbHVvdXMuDQo0MzogICAgICAgICAgICAgICAgICAgKi8NCjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQo0NjogICAgICAgICAgICAgICAgICBnaXJxMjFfaXNyKHZvaWQpDQo0NzogICAgICAgICAgICAgICAgICB7DQpCRkQwNzFCMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3MUI0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzFCNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3MUI4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzFCQSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDcxQkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDcxQkUgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzFDMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDcxQzQgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzFDNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzFDQSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3MUNDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3MUNFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3MUQwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3MUQyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzFENCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDcxRDYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzFEOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDcxREMgICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3MURFICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzFFMCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3MUUyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDcxRTQgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzFFNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0ODogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8MTMpOw0KQkZEMDcxRTggIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDcxRUEgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNzFFQyAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTIKQkZEMDcxRjAgIDIwMDAzMDYwICAgQURESVUgVjEsIFpFUk8sIDgxOTIKQkZEMDcxRjQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjQ5OiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3MUY2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3MUY4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDcxRkEgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNzFGQyAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA3MUZFICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQpCRkQwNzIwMCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkKQkZEMDcyMDIgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNzIwNiAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNzIwOCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQpCRkQwNzIwQSAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApCkJGRDA3MjBDICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkKQkZEMDcyMEUgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA3MjEyICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkKQkZEMDcyMTQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNzIxNiAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDcyMTggIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNzIxQSAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA3MjFDICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNzIxRSAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDcyMjAgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNzIyMiAgRjM3QzAwMDAgICBFUkVUCkJGRDA3MjI0ICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMAo1MDogICAgICAgICAgICAgICAgICANCjUxOiAgICAgICAgICAgICAgICAgICNlbHNlDQo1MjogICAgICAgICAgICAgICAgICANCjUzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1NDogICAgICAgICAgICAgICAgICBnaXJxMjFfYjAodm9pZCkNCjU1OiAgICAgICAgICAgICAgICAgIHsNCjU2OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxMyk7DQo1NzogICAgICAgICAgICAgICAgICB9DQo1ODogICAgICAgICAgICAgICAgICANCjU5OiAgICAgICAgICAgICAgICAgICNlbmRpZg0KNjA6ICAgICAgICAgICAgICAgICAgDQo2MTogICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTIxLmMgKi8NCjYyOiAgICAgICAgICAgICAgICAgIC8qKiAgIEB9DQo2MzogICAgICAgICAgICAgICAgICAgKi8NCjY0OiAgICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnEyMC5jICAtLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTIwLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEyMF9ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjM5OiAgICAgICAgICAgICAgICAgIGdpcnEyMF9pc3Iodm9pZCkNCjQwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3MTM4ICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDcxM0MgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA3MTNFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDcxNDAgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA3MTQyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQpCRkQwNzE0NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNzE0NiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA3MTQ4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNzE0QyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApCkJGRDA3MTRFICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA3MTUyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkKQkZEMDcxNTQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDcxNTYgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDcxNTggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDcxNUEgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA3MTVDICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNzE1RSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA3MTYwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzE2NCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkKQkZEMDcxNjYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApCkJGRDA3MTY4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkKQkZEMDcxNkEgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNzE2QyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA3MTZFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjQxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxMik7DQpCRkQwNzE3MCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzE3MiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3MTc0ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzE3OCAgMTAwMDMwNjAgICBBRERJVSBWMSwgWkVSTywgNDA5NgpCRkQwNzE3QSAgRTlBMDEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC01NzI4CkJGRDA3MTdDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0MjogICAgICAgICAgICAgICAgICB9DQpCRkQwNzE3RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNzE4MCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA3MTgyICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDcxODQgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwNzE4NiAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkKQkZEMDcxODggICAgICA0ODQxICAgTFcgVjAsIDQoU1ApCkJGRDA3MThBICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDcxOEUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDcxOTAgIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykKQkZEMDcxOTIgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQpCRkQwNzE5NCAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApCkJGRDA3MTk2ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQwpCRkQwNzE5QSAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApCkJGRDA3MTlDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDcxOUUgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA3MUEwICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDcxQTIgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNzFBNCAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDcxQTYgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA3MUE4ICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDcxQUEgIEYzN0MwMDAwICAgRVJFVApCRkQwNzFBQyAgMEMwMEYzN0MgICBKQUxYIDB4QkRGMDMwMDAKNDM6ICAgICAgICAgICAgICAgICAgDQo0NDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDc6ICAgICAgICAgICAgICAgICAgZ2lycTIwX2IwKHZvaWQpDQo0ODogICAgICAgICAgICAgICAgICB7DQo0OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjBfSUQsIDApOw0KNTA6ICAgICAgICAgICAgICAgICAgfQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTIwX2IxKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjBfSUQsIDEpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KNTc6ICAgICAgICAgICAgICAgICAgDQo1ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTk6ICAgICAgICAgICAgICAgICAgZ2lycTIwX2IyKHZvaWQpDQo2MDogICAgICAgICAgICAgICAgICB7DQo2MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjBfSUQsIDIpOw0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjU6ICAgICAgICAgICAgICAgICAgZ2lycTIwX2IzKHZvaWQpDQo2NjogICAgICAgICAgICAgICAgICB7DQo2NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjBfSUQsIDMpOw0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzE6ICAgICAgICAgICAgICAgICAgZ2lycTIwX2I0KHZvaWQpDQo3MjogICAgICAgICAgICAgICAgICB7DQo3MzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjBfSUQsIDQpOw0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KNzU6ICAgICAgICAgICAgICAgICAgDQo3NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzc6ICAgICAgICAgICAgICAgICAgZ2lycTIwX2I1KHZvaWQpDQo3ODogICAgICAgICAgICAgICAgICB7DQo3OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjBfSUQsIDUpOw0KODA6ICAgICAgICAgICAgICAgICAgfQ0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICANCjgzOiAgICAgICAgICAgICAgICAgICNlbmRpZg0KODQ6ICAgICAgICAgICAgICAgICAgDQo4NTogICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTIwLmMgKi8NCjg2OiAgICAgICAgICAgICAgICAgIC8qKiAgIEB9DQo4NzogICAgICAgICAgICAgICAgICAgKi8NCjg4OiAgICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExOS5jICAtLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTE5LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlExOV9ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjM5OiAgICAgICAgICAgICAgICAgIGdpcnExOV9pc3Iodm9pZCkNCjQwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3MEMwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDcwQzQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA3MEM2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDcwQzggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA3MENBICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQpCRkQwNzBDQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNzBDRSAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA3MEQwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNzBENCAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApCkJGRDA3MEQ2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA3MERBICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkKQkZEMDcwREMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDcwREUgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDcwRTAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDcwRTIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA3MEU0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNzBFNiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA3MEU4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzBFQyAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkKQkZEMDcwRUUgICAgICBDODQxICAgU1cgVjAsIDQoU1ApCkJGRDA3MEYwICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkKQkZEMDcwRjIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNzBGNCAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA3MEY2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjQxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxMSk7DQpCRkQwNzBGOCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzBGQSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3MEZDICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzEwMCAgMDgwMDMwNjAgICBBRERJVSBWMSwgWkVSTywgMjA0OApCRkQwNzEwMiAgICAgIDA4MDAgICBMQlUgUzAsIDAoUzApCkJGRDA3MTA0ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0MjogICAgICAgICAgICAgICAgICB9DQpCRkQwNzEwNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNzEwOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA3MTBBICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDcxMEMgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwNzEwRSAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkKQkZEMDcxMTAgICAgICA0ODQxICAgTFcgVjAsIDQoU1ApCkJGRDA3MTEyICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDcxMTYgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDcxMTggIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykKQkZEMDcxMUEgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQpCRkQwNzExQyAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApCkJGRDA3MTFFICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQwpCRkQwNzEyMiAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApCkJGRDA3MTI0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDcxMjYgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA3MTI4ICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDcxMkEgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNzEyQyAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDcxMkUgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA3MTMwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDcxMzIgIEYzN0MwMDAwICAgRVJFVApCRkQwNzEzNCAgMEMwMEYzN0MgICBKQUxYIDB4QkRGMDMwMDAKNDM6ICAgICAgICAgICAgICAgICAgDQo0NDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDc6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IwKHZvaWQpDQo0ODogICAgICAgICAgICAgICAgICB7DQo0OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDApOw0KNTA6ICAgICAgICAgICAgICAgICAgfQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IxKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDEpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KNTc6ICAgICAgICAgICAgICAgICAgDQo1ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTk6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IyKHZvaWQpDQo2MDogICAgICAgICAgICAgICAgICB7DQo2MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDIpOw0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjU6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IzKHZvaWQpDQo2NjogICAgICAgICAgICAgICAgICB7DQo2NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDMpOw0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzE6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I0KHZvaWQpDQo3MjogICAgICAgICAgICAgICAgICB7DQo3MzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDQpOw0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KNzU6ICAgICAgICAgICAgICAgICAgDQo3NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzc6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I1KHZvaWQpDQo3ODogICAgICAgICAgICAgICAgICB7DQo3OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDUpOw0KODA6ICAgICAgICAgICAgICAgICAgfQ0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODM6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I2KHZvaWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQo4NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDYpOw0KODY6ICAgICAgICAgICAgICAgICAgfQ0KODc6ICAgICAgICAgICAgICAgICAgDQo4ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODk6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I3KHZvaWQpDQo5MDogICAgICAgICAgICAgICAgICB7DQo5MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDcpOw0KOTI6ICAgICAgICAgICAgICAgICAgfQ0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTU6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I4KHZvaWQpDQo5NjogICAgICAgICAgICAgICAgICB7DQo5NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDgpOw0KOTg6ICAgICAgICAgICAgICAgICAgfQ0KOTk6ICAgICAgICAgICAgICAgICAgDQoxMDA6ICAgICAgICAgICAgICAgICANCjEwMTogICAgICAgICAgICAgICAgICNlbmRpZg0KMTAyOiAgICAgICAgICAgICAgICAgDQoxMDM6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTE5LmMgKi8NCjEwNDogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxMDU6ICAgICAgICAgICAgICAgICAgKi8NCjEwNjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExOC5jICAtLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTE4LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlExOF9ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjM5OiAgICAgICAgICAgICAgICAgIGdpcnExOF9pc3Iodm9pZCkNCjQwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3MDQ4ICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDcwNEMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA3MDRFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDcwNTAgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA3MDUyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQpCRkQwNzA1NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNzA1NiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA3MDU4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNzA1QyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApCkJGRDA3MDVFICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA3MDYyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkKQkZEMDcwNjQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDcwNjYgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDcwNjggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDcwNkEgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA3MDZDICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNzA2RSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA3MDcwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzA3NCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkKQkZEMDcwNzYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApCkJGRDA3MDc4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkKQkZEMDcwN0EgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNzA3QyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA3MDdFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjQxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxMCk7DQpCRkQwNzA4MCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzA4MiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3MDg0ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzA4OCAgMDQwMDMwNjAgICBBRERJVSBWMSwgWkVSTywgMTAyNApCRkQwNzA4QSAgICAgIDA0MDAgICBBRERVIFMwLCBTMCwgUzAKQkZEMDcwOEMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjQyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3MDhFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3MDkwICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDcwOTIgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNzA5NCAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA3MDk2ICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQpCRkQwNzA5OCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkKQkZEMDcwOUEgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNzA5RSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNzBBMCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQpCRkQwNzBBMiAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApCkJGRDA3MEE0ICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkKQkZEMDcwQTYgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA3MEFBICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkKQkZEMDcwQUMgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNzBBRSAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDcwQjAgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNzBCMiAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA3MEI0ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNzBCNiAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDcwQjggIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNzBCQSAgRjM3QzAwMDAgICBFUkVUCkJGRDA3MEJDICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMAo0MzogICAgICAgICAgICAgICAgICANCjQ0OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NTogICAgICAgICAgICAgICAgICANCjQ2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0NzogICAgICAgICAgICAgICAgICBnaXJxMThfYjAodm9pZCkNCjQ4OiAgICAgICAgICAgICAgICAgIHsNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExOF9JRCwgMCk7DQo1MDogICAgICAgICAgICAgICAgICB9DQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgICNlbmRpZg0KNTM6ICAgICAgICAgICAgICAgICAgDQo1NDogICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTE4LmMgKi8NCjU1OiAgICAgICAgICAgICAgICAgIC8qKiAgIEB9DQo1NjogICAgICAgICAgICAgICAgICAgKi8NCjU3OiAgICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExNy5jICAtLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTE3LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlExN19ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjM5OiAgICAgICAgICAgICAgICAgIGdpcnExN19pc3Iodm9pZCkNCjQwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA2RkQwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDZGRDQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA2RkQ2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDZGRDggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA2RkRBICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQpCRkQwNkZEQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNkZERSAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA2RkUwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNkZFNCAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApCkJGRDA2RkU2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA2RkVBICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkKQkZEMDZGRUMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDZGRUUgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDZGRjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDZGRjIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA2RkY0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNkZGNiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA2RkY4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNkZGQyAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkKQkZEMDZGRkUgICAgICBDODQxICAgU1cgVjAsIDQoU1ApCkJGRDA3MDAwICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkKQkZEMDcwMDIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNzAwNCAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA3MDA2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjQxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDw5KTsNCkJGRDA3MDA4ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA3MDBBICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkKQkZEMDcwMEMgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyCkJGRDA3MDEwICAwMjAwMzA2MCAgIEFERElVIFYxLCBaRVJPLCA1MTIKQkZEMDcwMTQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjQyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3MDE2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3MDE4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDcwMUEgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNzAxQyAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA3MDFFICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQpCRkQwNzAyMCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkKQkZEMDcwMjIgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNzAyNiAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNzAyOCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQpCRkQwNzAyQSAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApCkJGRDA3MDJDICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkKQkZEMDcwMkUgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA3MDMyICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkKQkZEMDcwMzQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNzAzNiAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDcwMzggIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNzAzQSAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA3MDNDICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNzAzRSAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDcwNDAgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNzA0MiAgRjM3QzAwMDAgICBFUkVUCkJGRDA3MDQ0ICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMAo0MzogICAgICAgICAgICAgICAgICANCjQ0OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NTogICAgICAgICAgICAgICAgICANCjQ2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0NzogICAgICAgICAgICAgICAgICBnaXJxMTdfYjAodm9pZCkNCjQ4OiAgICAgICAgICAgICAgICAgIHsNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDApOw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMCk7DQo1MTogICAgICAgICAgICAgICAgICB9DQo1MjogICAgICAgICAgICAgICAgICANCjUzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1NDogICAgICAgICAgICAgICAgICBnaXJxMTdfYjEodm9pZCkNCjU1OiAgICAgICAgICAgICAgICAgIHsNCjU2OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDEpOw0KNTc6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMSk7DQo1ODogICAgICAgICAgICAgICAgICB9DQo1OTogICAgICAgICAgICAgICAgICANCjYwOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2MTogICAgICAgICAgICAgICAgICBnaXJxMTdfYjIodm9pZCkNCjYyOiAgICAgICAgICAgICAgICAgIHsNCjYzOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDIpOw0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMik7DQo2NTogICAgICAgICAgICAgICAgICB9DQo2NjogICAgICAgICAgICAgICAgICANCjY3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2ODogICAgICAgICAgICAgICAgICBnaXJxMTdfYjModm9pZCkNCjY5OiAgICAgICAgICAgICAgICAgIHsNCjcwOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDMpOw0KNzE6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMyk7DQo3MjogICAgICAgICAgICAgICAgICB9DQo3MzogICAgICAgICAgICAgICAgICANCjc0OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3NTogICAgICAgICAgICAgICAgICBnaXJxMTdfYjQodm9pZCkNCjc2OiAgICAgICAgICAgICAgICAgIHsNCjc3OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDQpOw0KNzg6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNCk7DQo3OTogICAgICAgICAgICAgICAgICB9DQo4MDogICAgICAgICAgICAgICAgICANCjgxOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4MjogICAgICAgICAgICAgICAgICBnaXJxMTdfYjUodm9pZCkNCjgzOiAgICAgICAgICAgICAgICAgIHsNCjg0OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDUpOw0KODU6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNSk7DQo4NjogICAgICAgICAgICAgICAgICB9DQo4NzogICAgICAgICAgICAgICAgICANCjg4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4OTogICAgICAgICAgICAgICAgICBnaXJxMTdfYjYodm9pZCkNCjkwOiAgICAgICAgICAgICAgICAgIHsNCjkxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDYpOw0KOTI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNik7DQo5MzogICAgICAgICAgICAgICAgICB9DQo5NDogICAgICAgICAgICAgICAgICANCjk1OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo5NjogICAgICAgICAgICAgICAgICBnaXJxMTdfYjcodm9pZCkNCjk3OiAgICAgICAgICAgICAgICAgIHsNCjk4OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDcpOw0KOTk6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNyk7DQoxMDA6ICAgICAgICAgICAgICAgICB9DQoxMDE6ICAgICAgICAgICAgICAgICANCjEwMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDM6ICAgICAgICAgICAgICAgICBnaXJxMTdfYjgodm9pZCkNCjEwNDogICAgICAgICAgICAgICAgIHsNCjEwNTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDgpOw0KMTA2OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgOCk7DQoxMDc6ICAgICAgICAgICAgICAgICB9DQoxMDg6ICAgICAgICAgICAgICAgICANCjEwOTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTA6ICAgICAgICAgICAgICAgICBnaXJxMTdfYjkodm9pZCkNCjExMTogICAgICAgICAgICAgICAgIHsNCjExMjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDkpOw0KMTEzOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgOSk7DQoxMTQ6ICAgICAgICAgICAgICAgICB9DQoxMTU6ICAgICAgICAgICAgICAgICANCjExNjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTc6ICAgICAgICAgICAgICAgICBnaXJxMTdfYjEwKHZvaWQpDQoxMTg6ICAgICAgICAgICAgICAgICB7DQoxMTk6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlExN19JRF0uRU5fQ0xSID0gKDF1bCA8PCAxMCk7DQoxMjA6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlExN19JRF0uU09VUkNFID0gKDF1bCA8PCAxMCk7DQoxMjE6ICAgICAgICAgICAgICAgICB9DQoxMjI6ICAgICAgICAgICAgICAgICANCjEyMzogICAgICAgICAgICAgICAgICNlbmRpZg0KMTI0OiAgICAgICAgICAgICAgICAgDQoxMjU6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTE3LmMgKi8NCjEyNjogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxMjc6ICAgICAgICAgICAgICAgICAgKi8NCjEyODogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExNi5jICAtLS0tCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTE2LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozNDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgDQozNzogICAgICAgICAgICAgICAgICAjaWYgR0lSUTE2X0RJU0FHRyA9PSAwDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KNDA6ICAgICAgICAgICAgICAgICAgZ2lycTE2X2lzcih2b2lkKQ0KNDE6ICAgICAgICAgICAgICAgICAgew0KQkZEMDZGNTggIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUApCRkQwNkY1QyAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMKQkZEMDZGNUUgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMgpCRkQwNkY2MCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwKQkZEMDZGNjIgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1CkJGRDA2RjY0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA2RjY2ICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkKQkZEMDZGNjggIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzCkJGRDA2RjZDICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkKQkZEMDZGNkUgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UKQkZEMDZGNzIgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQpCRkQwNkY3NCAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNkY3NiAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNkY3OCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNkY3QSAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDZGN0MgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA2RjdFICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDZGODAgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA2Rjg0ICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQpCRkQwNkY4NiAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkKQkZEMDZGODggICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQpCRkQwNkY4QSAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA2RjhDICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDZGOEUgICAgICAwRkREICAgTU9WRSBTOCwgU1AKNDI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDgpOw0KQkZEMDZGOTAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDZGOTIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNkY5NCAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTIKQkZEMDZGOTggIDAxMDAzMDYwICAgQURESVUgVjEsIFpFUk8sIDI1NgpCRkQwNkY5QyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDZGOUUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDZGQTAgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNkZBMiAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA2RkE0ICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDZGQTYgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA2RkE4ICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNkZBQSAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA2RkFFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA2RkIwICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA2RkIyICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDZGQjQgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNkZCNiAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDZGQkEgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNkZCQyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA2RkJFICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNkZDMCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA2RkMyICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDZGQzQgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA2RkM2ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNkZDOCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA2RkNBICBGMzdDMDAwMCAgIEVSRVQKQkZEMDZGQ0MgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwCjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ4OiAgICAgICAgICAgICAgICAgIGdpcnExNl9iMCh2b2lkKQ0KNDk6ICAgICAgICAgICAgICAgICAgew0KNTA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCAwKTsNCjUxOiAgICAgICAgICAgICAgICAgIH0NCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU0OiAgICAgICAgICAgICAgICAgIGdpcnExNl9iMSh2b2lkKQ0KNTU6ICAgICAgICAgICAgICAgICAgew0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCAxKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjYwOiAgICAgICAgICAgICAgICAgIGdpcnExNl9iMih2b2lkKQ0KNjE6ICAgICAgICAgICAgICAgICAgew0KNjI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCAyKTsNCjYzOiAgICAgICAgICAgICAgICAgIH0NCjY0OiAgICAgICAgICAgICAgICAgIA0KNjU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY2OiAgICAgICAgICAgICAgICAgIGdpcnExNl9iMyh2b2lkKQ0KNjc6ICAgICAgICAgICAgICAgICAgew0KNjg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCAzKTsNCjY5OiAgICAgICAgICAgICAgICAgIH0NCjcwOiAgICAgICAgICAgICAgICAgIA0KNzE6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcyOiAgICAgICAgICAgICAgICAgIGdpcnExNl9iNCh2b2lkKQ0KNzM6ICAgICAgICAgICAgICAgICAgew0KNzQ6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCA0KTsNCjc1OiAgICAgICAgICAgICAgICAgIH0NCjc2OiAgICAgICAgICAgICAgICAgIA0KNzc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc4OiAgICAgICAgICAgICAgICAgIGdpcnExNl9iNSh2b2lkKQ0KNzk6ICAgICAgICAgICAgICAgICAgew0KODA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCA1KTsNCjgxOiAgICAgICAgICAgICAgICAgIH0NCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg0OiAgICAgICAgICAgICAgICAgIGdpcnExNl9iNih2b2lkKQ0KODU6ICAgICAgICAgICAgICAgICAgew0KODY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCA2KTsNCjg3OiAgICAgICAgICAgICAgICAgIH0NCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjkwOiAgICAgICAgICAgICAgICAgIGdpcnExNl9iNyh2b2lkKQ0KOTE6ICAgICAgICAgICAgICAgICAgew0KOTI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCA3KTsNCjkzOiAgICAgICAgICAgICAgICAgIH0NCjk0OiAgICAgICAgICAgICAgICAgIA0KOTU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk2OiAgICAgICAgICAgICAgICAgIGdpcnExNl9iOCh2b2lkKQ0KOTc6ICAgICAgICAgICAgICAgICAgew0KOTg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCA4KTsNCjk5OiAgICAgICAgICAgICAgICAgIH0NCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMjogICAgICAgICAgICAgICAgIGdpcnExNl9iOSh2b2lkKQ0KMTAzOiAgICAgICAgICAgICAgICAgew0KMTA0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE2X0lELCA5KTsNCjEwNTogICAgICAgICAgICAgICAgIH0NCjEwNjogICAgICAgICAgICAgICAgIA0KMTA3OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMDg6ICAgICAgICAgICAgICAgICANCjEwOTogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTYuYyAqLw0KMTEwOiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjExMTogICAgICAgICAgICAgICAgICAqLw0KMTEyOiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTE1LmMgIC0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMTUuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICAjaWYgR0lSUTE1X0RJU0FHRyA9PSAwDQozNzogICAgICAgICAgICAgICAgICANCjM4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KMzk6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2lzcih2b2lkKQ0KNDA6ICAgICAgICAgICAgICAgICAgew0KQkZEMDZFRTAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUApCRkQwNkVFNCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMKQkZEMDZFRTYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMgpCRkQwNkVFOCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwKQkZEMDZFRUEgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1CkJGRDA2RUVDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA2RUVFICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkKQkZEMDZFRjAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzCkJGRDA2RUY0ICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkKQkZEMDZFRjYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UKQkZEMDZFRkEgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQpCRkQwNkVGQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNkVGRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNkYwMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNkYwMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDZGMDQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA2RjA2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDZGMDggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA2RjBDICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQpCRkQwNkYwRSAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkKQkZEMDZGMTAgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQpCRkQwNkYxMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA2RjE0ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDZGMTYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKNDE6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDcpOw0KQkZEMDZGMTggIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDZGMUEgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNkYxQyAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTIKQkZEMDZGMjAgIDAwODAzMDYwICAgQURESVUgVjEsIFpFUk8sIDEyOApCRkQwNkYyNCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDZGMjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDZGMjggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNkYyQSAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA2RjJDICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDZGMkUgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA2RjMwICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNkYzMiAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA2RjM2ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA2RjM4ICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA2RjNBICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDZGM0MgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNkYzRSAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDZGNDIgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNkY0NCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA2RjQ2ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNkY0OCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA2RjRBICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDZGNEMgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA2RjRFICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNkY1MCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA2RjUyICBGMzdDMDAwMCAgIEVSRVQKQkZEMDZGNTQgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwCjQzOiAgICAgICAgICAgICAgICAgIA0KNDQ6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ1OiAgICAgICAgICAgICAgICAgIA0KNDY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ3OiAgICAgICAgICAgICAgICAgIGdpcnExNV9iMCh2b2lkKQ0KNDg6ICAgICAgICAgICAgICAgICAgew0KNDk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAwKTsNCjUwOiAgICAgICAgICAgICAgICAgIH0NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjUzOiAgICAgICAgICAgICAgICAgIGdpcnExNV9iMSh2b2lkKQ0KNTQ6ICAgICAgICAgICAgICAgICAgew0KNTU6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAxKTsNCjU2OiAgICAgICAgICAgICAgICAgIH0NCjU3OiAgICAgICAgICAgICAgICAgIA0KNTg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU5OiAgICAgICAgICAgICAgICAgIGdpcnExNV9iMih2b2lkKQ0KNjA6ICAgICAgICAgICAgICAgICAgew0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAyKTsNCjYyOiAgICAgICAgICAgICAgICAgIH0NCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY1OiAgICAgICAgICAgICAgICAgIGdpcnExNV9iMyh2b2lkKQ0KNjY6ICAgICAgICAgICAgICAgICAgew0KNjc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAzKTsNCjY4OiAgICAgICAgICAgICAgICAgIH0NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcxOiAgICAgICAgICAgICAgICAgIGdpcnExNV9iNCh2b2lkKQ0KNzI6ICAgICAgICAgICAgICAgICAgew0KNzM6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCA0KTsNCjc0OiAgICAgICAgICAgICAgICAgIH0NCjc1OiAgICAgICAgICAgICAgICAgIA0KNzY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc3OiAgICAgICAgICAgICAgICAgIGdpcnExNV9iNSh2b2lkKQ0KNzg6ICAgICAgICAgICAgICAgICAgew0KNzk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCA1KTsNCjgwOiAgICAgICAgICAgICAgICAgIH0NCjgxOiAgICAgICAgICAgICAgICAgIA0KODI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjgzOiAgICAgICAgICAgICAgICAgIGdpcnExNV9iNih2b2lkKQ0KODQ6ICAgICAgICAgICAgICAgICAgew0KODU6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCA2KTsNCjg2OiAgICAgICAgICAgICAgICAgIH0NCjg3OiAgICAgICAgICAgICAgICAgIA0KODg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg5OiAgICAgICAgICAgICAgICAgIGdpcnExNV9iNyh2b2lkKQ0KOTA6ICAgICAgICAgICAgICAgICAgew0KOTE6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCA3KTsNCjkyOiAgICAgICAgICAgICAgICAgIH0NCjkzOiAgICAgICAgICAgICAgICAgIA0KOTQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk1OiAgICAgICAgICAgICAgICAgIGdpcnExNV9iOCh2b2lkKQ0KOTY6ICAgICAgICAgICAgICAgICAgew0KOTc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCA4KTsNCjk4OiAgICAgICAgICAgICAgICAgIH0NCjk5OiAgICAgICAgICAgICAgICAgIA0KMTAwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMTogICAgICAgICAgICAgICAgIGdpcnExNV9iOSh2b2lkKQ0KMTAyOiAgICAgICAgICAgICAgICAgew0KMTAzOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCA5KTsNCjEwNDogICAgICAgICAgICAgICAgIH0NCjEwNTogICAgICAgICAgICAgICAgIA0KMTA2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwNzogICAgICAgICAgICAgICAgIGdpcnExNV9iMTAodm9pZCkNCjEwODogICAgICAgICAgICAgICAgIHsNCjEwOTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNV9JRCwgMTApOw0KMTEwOiAgICAgICAgICAgICAgICAgfQ0KMTExOiAgICAgICAgICAgICAgICAgDQoxMTI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTEzOiAgICAgICAgICAgICAgICAgZ2lycTE1X2IxMSh2b2lkKQ0KMTE0OiAgICAgICAgICAgICAgICAgew0KMTE1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAxMSk7DQoxMTY6ICAgICAgICAgICAgICAgICB9DQoxMTc6ICAgICAgICAgICAgICAgICANCjExODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTk6ICAgICAgICAgICAgICAgICBnaXJxMTVfYjEyKHZvaWQpDQoxMjA6ICAgICAgICAgICAgICAgICB7DQoxMjE6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDEyKTsNCjEyMjogICAgICAgICAgICAgICAgIH0NCjEyMzogICAgICAgICAgICAgICAgIA0KMTI0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyNTogICAgICAgICAgICAgICAgIGdpcnExNV9iMTModm9pZCkNCjEyNjogICAgICAgICAgICAgICAgIHsNCjEyNzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNV9JRCwgMTMpOw0KMTI4OiAgICAgICAgICAgICAgICAgfQ0KMTI5OiAgICAgICAgICAgICAgICAgDQoxMzA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTMxOiAgICAgICAgICAgICAgICAgZ2lycTE1X2IxNCh2b2lkKQ0KMTMyOiAgICAgICAgICAgICAgICAgew0KMTMzOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAxNCk7DQoxMzQ6ICAgICAgICAgICAgICAgICB9DQoxMzU6ICAgICAgICAgICAgICAgICANCjEzNjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzc6ICAgICAgICAgICAgICAgICBnaXJxMTVfYjE1KHZvaWQpDQoxMzg6ICAgICAgICAgICAgICAgICB7DQoxMzk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDE1KTsNCjE0MDogICAgICAgICAgICAgICAgIH0NCjE0MTogICAgICAgICAgICAgICAgIA0KMTQyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE0MzogICAgICAgICAgICAgICAgIGdpcnExNV9iMTYodm9pZCkNCjE0NDogICAgICAgICAgICAgICAgIHsNCjE0NTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNV9JRCwgMTYpOw0KMTQ2OiAgICAgICAgICAgICAgICAgfQ0KMTQ3OiAgICAgICAgICAgICAgICAgDQoxNDg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQ5OiAgICAgICAgICAgICAgICAgZ2lycTE1X2IxNyh2b2lkKQ0KMTUwOiAgICAgICAgICAgICAgICAgew0KMTUxOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAxNyk7DQoxNTI6ICAgICAgICAgICAgICAgICB9DQoxNTM6ICAgICAgICAgICAgICAgICANCjE1NDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTU6ICAgICAgICAgICAgICAgICBnaXJxMTVfYjE4KHZvaWQpDQoxNTY6ICAgICAgICAgICAgICAgICB7DQoxNTc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDE4KTsNCjE1ODogICAgICAgICAgICAgICAgIH0NCjE1OTogICAgICAgICAgICAgICAgIA0KMTYwOiAgICAgICAgICAgICAgICAgDQoxNjE6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE2MjogICAgICAgICAgICAgICAgIA0KMTYzOiAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnExNS5jICovDQoxNjQ6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMTY1OiAgICAgICAgICAgICAgICAgICovDQoxNjY6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMTQuYyAgLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnExNC5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMTRfRElTQUdHID09IDANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQozOTogICAgICAgICAgICAgICAgICBnaXJxMTRfaXNyKHZvaWQpDQo0MDogICAgICAgICAgICAgICAgICB7DQpCRkQwNzhBMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3OEE0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzhBNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3OEE4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzhBQSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDc4QUMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDc4QUUgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzhCMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDc4QjQgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzhCNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzhCQSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3OEJDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3OEJFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3OEMwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3OEMyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzhDNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDc4QzYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzhDOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDc4Q0MgICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3OENFICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzhEMCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3OEQyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDc4RDQgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzhENiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8Nik7DQpCRkQwNzhEOCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzhEQSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3OERDICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzhFMCAgICAgIEVEQzAgICBMSSBWMSwgNjQKQkZEMDc4RTIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApCjQyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3OEU0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA3OEU2ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkKQkZEMDc4RTggICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4RgpCRkQwNzhFQSAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA3OEVDICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQpCRkQwNzhFRSAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkKQkZEMDc4RjAgIDQ3N0MwMDAwICAgREkgWkVSTwpCRkQwNzhGNCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMwpCRkQwNzhGNiAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQpCRkQwNzhGOCAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApCkJGRDA3OEZBICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkKQkZEMDc4RkMgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDCkJGRDA3OTAwICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkKQkZEMDc5MDIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgpCRkQwNzkwNCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwKQkZEMDc5MDYgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1NwpCRkQwNzkwOCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQCkJGRDA3OTBBICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMApCRkQwNzkwQyAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDc5MEUgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMApCRkQwNzkxMCAgRjM3QzAwMDAgICBFUkVUCkJGRDA3OTEyICA0RkYxRjM3QyAgIEpBTFggMHhCREYxM0ZDNAo0MzogICAgICAgICAgICAgICAgICANCjQ0OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NTogICAgICAgICAgICAgICAgICANCjQ2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0NzogICAgICAgICAgICAgICAgICBnaXJxMTRfYjAodm9pZCkNCjQ4OiAgICAgICAgICAgICAgICAgIHsNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMCk7DQo1MDogICAgICAgICAgICAgICAgICB9DQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1MzogICAgICAgICAgICAgICAgICBnaXJxMTRfYjEodm9pZCkNCjU0OiAgICAgICAgICAgICAgICAgIHsNCjU1OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMSk7DQo1NjogICAgICAgICAgICAgICAgICB9DQo1NzogICAgICAgICAgICAgICAgICANCjU4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1OTogICAgICAgICAgICAgICAgICBnaXJxMTRfYjIodm9pZCkNCjYwOiAgICAgICAgICAgICAgICAgIHsNCjYxOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMik7DQo2MjogICAgICAgICAgICAgICAgICB9DQo2MzogICAgICAgICAgICAgICAgICANCjY0OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2NTogICAgICAgICAgICAgICAgICBnaXJxMTRfYjModm9pZCkNCjY2OiAgICAgICAgICAgICAgICAgIHsNCjY3OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMyk7DQo2ODogICAgICAgICAgICAgICAgICB9DQo2OTogICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3MTogICAgICAgICAgICAgICAgICBnaXJxMTRfYjQodm9pZCkNCjcyOiAgICAgICAgICAgICAgICAgIHsNCjczOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgNCk7DQo3NDogICAgICAgICAgICAgICAgICB9DQo3NTogICAgICAgICAgICAgICAgICANCjc2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3NzogICAgICAgICAgICAgICAgICBnaXJxMTRfYjUodm9pZCkNCjc4OiAgICAgICAgICAgICAgICAgIHsNCjc5OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgNSk7DQo4MDogICAgICAgICAgICAgICAgICB9DQo4MTogICAgICAgICAgICAgICAgICANCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4NDogICAgICAgICAgICAgICAgICANCjg1OiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTQuYyAqLw0KODY6ICAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjg3OiAgICAgICAgICAgICAgICAgICAqLw0KODg6ICAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTEzLmMgIC0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMTMuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICAjaWYgR0lSUTEzX0RJU0FHRyA9PSAwDQozNzogICAgICAgICAgICAgICAgICANCjM4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KMzk6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2lzcih2b2lkKQ0KNDA6ICAgICAgICAgICAgICAgICAgew0KQkZEMDc4MkMgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUApCRkQwNzgzMCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMKQkZEMDc4MzIgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMgpCRkQwNzgzNCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwKQkZEMDc4MzYgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1CkJGRDA3ODM4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA3ODNBICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkKQkZEMDc4M0MgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzCkJGRDA3ODQwICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkKQkZEMDc4NDIgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UKQkZEMDc4NDYgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQpCRkQwNzg0OCAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMApCRkQwNzg0QSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MApCRkQwNzg0QyAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNgpCRkQwNzg0RSAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYKQkZEMDc4NTAgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0CkJGRDA3ODUyICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkKQkZEMDc4NTQgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA3ODU4ICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQpCRkQwNzg1QSAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkKQkZEMDc4NUMgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQpCRkQwNzg1RSAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGCkJGRDA3ODYwICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkKQkZEMDc4NjIgICAgICAwRkREICAgTU9WRSBTOCwgU1AKNDE6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDUpOw0KQkZEMDc4NjQgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYKQkZEMDc4NjYgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQpCRkQwNzg2OCAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTIKQkZEMDc4NkMgICAgICBFREEwICAgTEkgVjEsIDMyCkJGRDA3ODZFICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQo0MjogICAgICAgICAgICAgICAgICB9DQpCRkQwNzg3MCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwNzg3MiAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApCkJGRDA3ODc0ICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYKQkZEMDc4NzYgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQpCRkQwNzg3OCAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkKQkZEMDc4N0EgICAgICA0ODQxICAgTFcgVjAsIDQoU1ApCkJGRDA3ODdDICA0NzdDMDAwMCAgIERJIFpFUk8KQkZEMDc4ODAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDc4ODIgIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykKQkZEMDc4ODQgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQpCRkQwNzg4NiAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApCkJGRDA3ODg4ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQwpCRkQwNzg4QyAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApCkJGRDA3ODhFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzIKQkZEMDc4OTAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsCkJGRDA3ODkyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcKQkZEMDc4OTQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUApCRkQwNzg5NiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjAKQkZEMDc4OTggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzCkJGRDA3ODlBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDAKQkZEMDc4OUMgIEYzN0MwMDAwICAgRVJFVApCRkQwNzg5RSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQKNDM6ICAgICAgICAgICAgICAgICAgDQo0NDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDc6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2IwKHZvaWQpDQo0ODogICAgICAgICAgICAgICAgICB7DQo0OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTNfSUQsIDApOw0KNTA6ICAgICAgICAgICAgICAgICAgfQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2IxKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTNfSUQsIDEpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KNTc6ICAgICAgICAgICAgICAgICAgDQo1ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTk6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2IyKHZvaWQpDQo2MDogICAgICAgICAgICAgICAgICB7DQo2MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTNfSUQsIDIpOw0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjU6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2IzKHZvaWQpDQo2NjogICAgICAgICAgICAgICAgICB7DQo2NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTNfSUQsIDMpOw0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzE6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2I0KHZvaWQpDQo3MjogICAgICAgICAgICAgICAgICB7DQo3MzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTNfSUQsIDQpOw0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KNzU6ICAgICAgICAgICAgICAgICAgDQo3NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzc6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2I1KHZvaWQpDQo3ODogICAgICAgICAgICAgICAgICB7DQo3OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTNfSUQsIDUpOw0KODA6ICAgICAgICAgICAgICAgICAgfQ0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODM6ICAgICAgICAgICAgICAgICAgZ2lycTEzX2I2KHZvaWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQo4NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTNfSUQsIDYpOw0KODY6ICAgICAgICAgICAgICAgICAgfQ0KODc6ICAgICAgICAgICAgICAgICAgDQo4ODogICAgICAgICAgICAgICAgICAjZW5kaWYNCjg5OiAgICAgICAgICAgICAgICAgIA0KOTA6ICAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnExMy5jICovDQo5MTogICAgICAgICAgICAgICAgICAvKiogICBAfQ0KOTI6ICAgICAgICAgICAgICAgICAgICovDQo5MzogICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMTIuYyAgLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnExMi5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlExMl9ESVNBR0cgPT0gMA0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjQwOiAgICAgICAgICAgICAgICAgIGdpcnExMl9pc3Iodm9pZCkNCjQxOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3N0I4ICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1AKQkZEMDc3QkMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDCkJGRDA3N0JFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTIKQkZEMDc3QzAgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsCkJGRDA3N0MyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQpCRkQwNzdDNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNzdDNiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApCkJGRDA3N0M4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cwpCRkQwNzdDQyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApCkJGRDA3N0NFICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlCkJGRDA3N0QyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkKQkZEMDc3RDQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTAKQkZEMDc3RDYgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTAKQkZEMDc3RDggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYKQkZEMDc3REEgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2CkJGRDA3N0RDICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNApCRkQwNzdERSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpCkJGRDA3N0UwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzdFNCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkKQkZEMDc3RTYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApCkJGRDA3N0U4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkKQkZEMDc3RUEgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4RgpCRkQwNzdFQyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApCkJGRDA3N0VFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjQyOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDw0KTsNCkJGRDA3N0YwICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGCkJGRDA3N0YyICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkKQkZEMDc3RjQgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyCkJGRDA3N0Y4ICAgICAgRUQ5MCAgIExJIFYxLCAxNgpCRkQwNzdGQSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc3RkMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc3RkUgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzgwMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3ODAyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDc4MDQgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3ODA2ICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzgwOCAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3ODBDICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3ODBFICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3ODEwICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDc4MTIgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzgxNCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDc4MTggICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzgxQSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3ODFDICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzgxRSAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3ODIwICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDc4MjIgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3ODI0ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzgyNiAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3ODI4ICBGMzdDMDAwMCAgIEVSRVQKQkZEMDc4MkEgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ4OiAgICAgICAgICAgICAgICAgIGdpcnExMl9iMCh2b2lkKQ0KNDk6ICAgICAgICAgICAgICAgICAgew0KNTA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEyX0lELCAwKTsNCjUxOiAgICAgICAgICAgICAgICAgIH0NCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU0OiAgICAgICAgICAgICAgICAgIGdpcnExMl9iMSh2b2lkKQ0KNTU6ICAgICAgICAgICAgICAgICAgew0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEyX0lELCAxKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjYwOiAgICAgICAgICAgICAgICAgIGdpcnExMl9iMih2b2lkKQ0KNjE6ICAgICAgICAgICAgICAgICAgew0KNjI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEyX0lELCAyKTsNCjYzOiAgICAgICAgICAgICAgICAgIH0NCjY0OiAgICAgICAgICAgICAgICAgIA0KNjU6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo2NjogICAgICAgICAgICAgICAgICANCjY3OiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTIuYyAqLw0KNjg6ICAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjY5OiAgICAgICAgICAgICAgICAgICAqLw0KNzA6ICAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTExLmMgIC0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMTEuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgIA0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjM0OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMTFfRElTQUdHID09IDANCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQo0MDogICAgICAgICAgICAgICAgICBnaXJxMTFfaXNyKHZvaWQpDQo0MTogICAgICAgICAgICAgICAgICB7DQpCRkQwNzc0NCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3NzQ4ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzc0QSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3NzRDICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzc0RSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDc3NTAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDc3NTIgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzc1NCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDc3NTggICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzc1QSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzc1RSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3NzYwICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3NzYyICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3NzY0ICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3NzY2ICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzc2OCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDc3NkEgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzc2QyAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDc3NzAgICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3NzcyICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzc3NCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3Nzc2ICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDc3NzggICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzc3QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0MjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8Myk7DQpCRkQwNzc3QyAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzc3RSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3NzgwICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzc4NCAgICAgIEVEODggICBMSSBWMSwgOApCRkQwNzc4NiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc3ODggICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc3OEEgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzc4QyAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3NzhFICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDc3OTAgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3NzkyICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzc5NCAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3Nzk4ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3NzlBICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3NzlDICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDc3OUUgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzdBMCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDc3QTQgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzdBNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3N0E4ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzdBQSAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3N0FDICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDc3QUUgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3N0IwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzdCMiAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3N0I0ICBGMzdDMDAwMCAgIEVSRVQKQkZEMDc3QjYgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ4OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMCh2b2lkKQ0KNDk6ICAgICAgICAgICAgICAgICAgew0KNTA6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCjUxOiAgICAgICAgICAgICAgICAgIH0NCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU0OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMSh2b2lkKQ0KNTU6ICAgICAgICAgICAgICAgICAgew0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxLCBKVFZJQ19DTFJfU1JDKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjYwOiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMih2b2lkKQ0KNjE6ICAgICAgICAgICAgICAgICAgew0KNjI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyLCBKVFZJQ19DTFJfU1JDKTsNCjYzOiAgICAgICAgICAgICAgICAgIH0NCjY0OiAgICAgICAgICAgICAgICAgIA0KNjU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY2OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMyh2b2lkKQ0KNjc6ICAgICAgICAgICAgICAgICAgew0KNjg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAzLCBKVFZJQ19DTFJfU1JDKTsNCjY5OiAgICAgICAgICAgICAgICAgIH0NCjcwOiAgICAgICAgICAgICAgICAgIA0KNzE6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcyOiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNCh2b2lkKQ0KNzM6ICAgICAgICAgICAgICAgICAgew0KNzQ6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA0LCBKVFZJQ19DTFJfU1JDKTsNCjc1OiAgICAgICAgICAgICAgICAgIH0NCjc2OiAgICAgICAgICAgICAgICAgIA0KNzc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc4OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNSh2b2lkKQ0KNzk6ICAgICAgICAgICAgICAgICAgew0KODA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA1LCBKVFZJQ19DTFJfU1JDKTsNCjgxOiAgICAgICAgICAgICAgICAgIH0NCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg0OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNih2b2lkKQ0KODU6ICAgICAgICAgICAgICAgICAgew0KODY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA2LCBKVFZJQ19DTFJfU1JDKTsNCjg3OiAgICAgICAgICAgICAgICAgIH0NCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjkwOiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNyh2b2lkKQ0KOTE6ICAgICAgICAgICAgICAgICAgew0KOTI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA3LCBKVFZJQ19DTFJfU1JDKTsNCjkzOiAgICAgICAgICAgICAgICAgIH0NCjk0OiAgICAgICAgICAgICAgICAgIA0KOTU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk2OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iOCh2b2lkKQ0KOTc6ICAgICAgICAgICAgICAgICAgew0KOTg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA4LCBKVFZJQ19DTFJfU1JDKTsNCjk5OiAgICAgICAgICAgICAgICAgIH0NCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMjogICAgICAgICAgICAgICAgIGdpcnExMV9iOSh2b2lkKQ0KMTAzOiAgICAgICAgICAgICAgICAgew0KMTA0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA5LCBKVFZJQ19DTFJfU1JDKTsNCjEwNTogICAgICAgICAgICAgICAgIH0NCjEwNjogICAgICAgICAgICAgICAgIA0KMTA3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwODogICAgICAgICAgICAgICAgIGdpcnExMV9iMTAodm9pZCkNCjEwOTogICAgICAgICAgICAgICAgIHsNCjExMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTAsIEpUVklDX0NMUl9TUkMpOw0KMTExOiAgICAgICAgICAgICAgICAgfQ0KMTEyOiAgICAgICAgICAgICAgICAgDQoxMTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTE0OiAgICAgICAgICAgICAgICAgZ2lycTExX2IxMSh2b2lkKQ0KMTE1OiAgICAgICAgICAgICAgICAgew0KMTE2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxMSwgSlRWSUNfQ0xSX1NSQyk7DQoxMTc6ICAgICAgICAgICAgICAgICB9DQoxMTg6ICAgICAgICAgICAgICAgICANCjExOTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMjA6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjEyKHZvaWQpDQoxMjE6ICAgICAgICAgICAgICAgICB7DQoxMjI6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDEyLCBKVFZJQ19DTFJfU1JDKTsNCjEyMzogICAgICAgICAgICAgICAgIH0NCjEyNDogICAgICAgICAgICAgICAgIA0KMTI1OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyNjogICAgICAgICAgICAgICAgIGdpcnExMV9iMTModm9pZCkNCjEyNzogICAgICAgICAgICAgICAgIHsNCjEyODogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTMsIEpUVklDX0NMUl9TUkMpOw0KMTI5OiAgICAgICAgICAgICAgICAgfQ0KMTMwOiAgICAgICAgICAgICAgICAgDQoxMzE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTMyOiAgICAgICAgICAgICAgICAgZ2lycTExX2IxNCh2b2lkKQ0KMTMzOiAgICAgICAgICAgICAgICAgew0KMTM0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxNCwgSlRWSUNfQ0xSX1NSQyk7DQoxMzU6ICAgICAgICAgICAgICAgICB9DQoxMzY6ICAgICAgICAgICAgICAgICANCjEzNzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzg6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjE1KHZvaWQpDQoxMzk6ICAgICAgICAgICAgICAgICB7DQoxNDA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDE1LCBKVFZJQ19DTFJfU1JDKTsNCjE0MTogICAgICAgICAgICAgICAgIH0NCjE0MjogICAgICAgICAgICAgICAgIA0KMTQzOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE0NDogICAgICAgICAgICAgICAgIGdpcnExMV9iMTYodm9pZCkNCjE0NTogICAgICAgICAgICAgICAgIHsNCjE0NjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTYsIEpUVklDX0NMUl9TUkMpOw0KMTQ3OiAgICAgICAgICAgICAgICAgfQ0KMTQ4OiAgICAgICAgICAgICAgICAgDQoxNDk6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTUwOiAgICAgICAgICAgICAgICAgZ2lycTExX2IxNyh2b2lkKQ0KMTUxOiAgICAgICAgICAgICAgICAgew0KMTUyOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxNywgSlRWSUNfQ0xSX1NSQyk7DQoxNTM6ICAgICAgICAgICAgICAgICB9DQoxNTQ6ICAgICAgICAgICAgICAgICANCjE1NTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTY6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjE4KHZvaWQpDQoxNTc6ICAgICAgICAgICAgICAgICB7DQoxNTg6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDE4LCBKVFZJQ19DTFJfU1JDKTsNCjE1OTogICAgICAgICAgICAgICAgIH0NCjE2MDogICAgICAgICAgICAgICAgIA0KMTYxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE2MjogICAgICAgICAgICAgICAgIGdpcnExMV9iMTkodm9pZCkNCjE2MzogICAgICAgICAgICAgICAgIHsNCjE2NDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTksIEpUVklDX0NMUl9TUkMpOw0KMTY1OiAgICAgICAgICAgICAgICAgfQ0KMTY2OiAgICAgICAgICAgICAgICAgDQoxNjc6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTY4OiAgICAgICAgICAgICAgICAgZ2lycTExX2IyMCh2b2lkKQ0KMTY5OiAgICAgICAgICAgICAgICAgew0KMTcwOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyMCwgSlRWSUNfQ0xSX1NSQyk7DQoxNzE6ICAgICAgICAgICAgICAgICB9DQoxNzI6ICAgICAgICAgICAgICAgICANCjE3MzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNzQ6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjIxKHZvaWQpDQoxNzU6ICAgICAgICAgICAgICAgICB7DQoxNzY6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDIxLCBKVFZJQ19DTFJfU1JDKTsNCjE3NzogICAgICAgICAgICAgICAgIH0NCjE3ODogICAgICAgICAgICAgICAgIA0KMTc5OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE4MDogICAgICAgICAgICAgICAgIGdpcnExMV9iMjIodm9pZCkNCjE4MTogICAgICAgICAgICAgICAgIHsNCjE4MjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMjIsIEpUVklDX0NMUl9TUkMpOw0KMTgzOiAgICAgICAgICAgICAgICAgfQ0KMTg0OiAgICAgICAgICAgICAgICAgDQoxODU6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTg2OiAgICAgICAgICAgICAgICAgZ2lycTExX2IyMyh2b2lkKQ0KMTg3OiAgICAgICAgICAgICAgICAgew0KMTg4OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyMywgSlRWSUNfQ0xSX1NSQyk7DQoxODk6ICAgICAgICAgICAgICAgICB9DQoxOTA6ICAgICAgICAgICAgICAgICANCjE5MTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxOTI6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjI0KHZvaWQpDQoxOTM6ICAgICAgICAgICAgICAgICB7DQoxOTQ6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDI0LCBKVFZJQ19DTFJfU1JDKTsNCjE5NTogICAgICAgICAgICAgICAgIH0NCjE5NjogICAgICAgICAgICAgICAgIA0KMTk3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5ODogICAgICAgICAgICAgICAgIGdpcnExMV9iMjUodm9pZCkNCjE5OTogICAgICAgICAgICAgICAgIHsNCjIwMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMjUsIEpUVklDX0NMUl9TUkMpOw0KMjAxOiAgICAgICAgICAgICAgICAgfQ0KMjAyOiAgICAgICAgICAgICAgICAgDQoyMDM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjA0OiAgICAgICAgICAgICAgICAgZ2lycTExX2IyNih2b2lkKQ0KMjA1OiAgICAgICAgICAgICAgICAgew0KMjA2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyNiwgSlRWSUNfQ0xSX1NSQyk7DQoyMDc6ICAgICAgICAgICAgICAgICB9DQoyMDg6ICAgICAgICAgICAgICAgICANCjIwOTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMTA6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjI3KHZvaWQpDQoyMTE6ICAgICAgICAgICAgICAgICB7DQoyMTI6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDI3LCBKVFZJQ19DTFJfU1JDKTsNCjIxMzogICAgICAgICAgICAgICAgIH0NCjIxNDogICAgICAgICAgICAgICAgIA0KMjE1OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIxNjogICAgICAgICAgICAgICAgIGdpcnExMV9iMjgodm9pZCkNCjIxNzogICAgICAgICAgICAgICAgIHsNCjIxODogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMjgsIEpUVklDX0NMUl9TUkMpOw0KMjE5OiAgICAgICAgICAgICAgICAgfQ0KMjIwOiAgICAgICAgICAgICAgICAgDQoyMjE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjIyOiAgICAgICAgICAgICAgICAgZ2lycTExX2IyOSh2b2lkKQ0KMjIzOiAgICAgICAgICAgICAgICAgew0KMjI0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyOSwgSlRWSUNfQ0xSX1NSQyk7DQoyMjU6ICAgICAgICAgICAgICAgICB9DQoyMjY6ICAgICAgICAgICAgICAgICANCjIyNzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMjg6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjMwKHZvaWQpDQoyMjk6ICAgICAgICAgICAgICAgICB7DQoyMzA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDMwLCBKVFZJQ19DTFJfU1JDKTsNCjIzMTogICAgICAgICAgICAgICAgIH0NCjIzMjogICAgICAgICAgICAgICAgIA0KMjMzOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyMzQ6ICAgICAgICAgICAgICAgICANCjIzNTogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTEuYyAqLw0KMjM2OiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjIzNzogICAgICAgICAgICAgICAgICAqLw0KMjM4OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTEwLmMgIC0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMTAuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgIA0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjM0OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMTBfRElTQUdHID09IDANCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQo0MDogICAgICAgICAgICAgICAgICBnaXJxMTBfaXNyKHZvaWQpDQo0MTogICAgICAgICAgICAgICAgICB7DQpCRkQwNzZEMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3NkQ0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzZENiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3NkQ4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzZEQSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDc2REMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDc2REUgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzZFMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDc2RTQgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzZFNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzZFQSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3NkVDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3NkVFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3NkYwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3NkYyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzZGNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDc2RjYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzZGOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDc2RkMgICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3NkZFICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzcwMCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3NzAyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDc3MDQgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzcwNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0MjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8Mik7DQpCRkQwNzcwOCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzcwQSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3NzBDICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzcxMCAgICAgIEVEODQgICBMSSBWMSwgNApCRkQwNzcxMiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc3MTQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc3MTYgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzcxOCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3NzFBICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDc3MUMgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3NzFFICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzcyMCAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3NzI0ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3NzI2ICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3NzI4ICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDc3MkEgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzcyQyAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDc3MzAgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzczMiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3NzM0ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzczNiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3NzM4ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDc3M0EgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3NzNDICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzczRSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3NzQwICBGMzdDMDAwMCAgIEVSRVQKQkZEMDc3NDIgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ4OiAgICAgICAgICAgICAgICAgIGdpcnExMF9iMCh2b2lkKQ0KNDk6ICAgICAgICAgICAgICAgICAgew0KNTA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAwLCBKVFZJQ19DTFJfU1JDKTsNCjUxOiAgICAgICAgICAgICAgICAgIH0NCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU0OiAgICAgICAgICAgICAgICAgIGdpcnExMF9iMSh2b2lkKQ0KNTU6ICAgICAgICAgICAgICAgICAgew0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAxLCBKVFZJQ19DTFJfU1JDKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjYwOiAgICAgICAgICAgICAgICAgIGdpcnExMF9iMih2b2lkKQ0KNjE6ICAgICAgICAgICAgICAgICAgew0KNjI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAyLCBKVFZJQ19DTFJfU1JDKTsNCjYzOiAgICAgICAgICAgICAgICAgIH0NCjY0OiAgICAgICAgICAgICAgICAgIA0KNjU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY2OiAgICAgICAgICAgICAgICAgIGdpcnExMF9iMyh2b2lkKQ0KNjc6ICAgICAgICAgICAgICAgICAgew0KNjg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAzLCBKVFZJQ19DTFJfU1JDKTsNCjY5OiAgICAgICAgICAgICAgICAgIH0NCjcwOiAgICAgICAgICAgICAgICAgIA0KNzE6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcyOiAgICAgICAgICAgICAgICAgIGdpcnExMF9iNCh2b2lkKQ0KNzM6ICAgICAgICAgICAgICAgICAgew0KNzQ6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCA0LCBKVFZJQ19DTFJfU1JDKTsNCjc1OiAgICAgICAgICAgICAgICAgIH0NCjc2OiAgICAgICAgICAgICAgICAgIA0KNzc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc4OiAgICAgICAgICAgICAgICAgIGdpcnExMF9iNSh2b2lkKQ0KNzk6ICAgICAgICAgICAgICAgICAgew0KODA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCA1LCBKVFZJQ19DTFJfU1JDKTsNCjgxOiAgICAgICAgICAgICAgICAgIH0NCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg0OiAgICAgICAgICAgICAgICAgIGdpcnExMF9iNih2b2lkKQ0KODU6ICAgICAgICAgICAgICAgICAgew0KODY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCA2LCBKVFZJQ19DTFJfU1JDKTsNCjg3OiAgICAgICAgICAgICAgICAgIH0NCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjkwOiAgICAgICAgICAgICAgICAgIGdpcnExMF9iNyh2b2lkKQ0KOTE6ICAgICAgICAgICAgICAgICAgew0KOTI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCA3LCBKVFZJQ19DTFJfU1JDKTsNCjkzOiAgICAgICAgICAgICAgICAgIH0NCjk0OiAgICAgICAgICAgICAgICAgIA0KOTU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk2OiAgICAgICAgICAgICAgICAgIGdpcnExMF9iOCh2b2lkKQ0KOTc6ICAgICAgICAgICAgICAgICAgew0KOTg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCA4LCBKVFZJQ19DTFJfU1JDKTsNCjk5OiAgICAgICAgICAgICAgICAgIH0NCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMjogICAgICAgICAgICAgICAgIGdpcnExMF9iOSh2b2lkKQ0KMTAzOiAgICAgICAgICAgICAgICAgew0KMTA0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCA5LCBKVFZJQ19DTFJfU1JDKTsNCjEwNTogICAgICAgICAgICAgICAgIH0NCjEwNjogICAgICAgICAgICAgICAgIA0KMTA3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwODogICAgICAgICAgICAgICAgIGdpcnExMF9iMTAodm9pZCkNCjEwOTogICAgICAgICAgICAgICAgIHsNCjExMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTAsIEpUVklDX0NMUl9TUkMpOw0KMTExOiAgICAgICAgICAgICAgICAgfQ0KMTEyOiAgICAgICAgICAgICAgICAgDQoxMTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTE0OiAgICAgICAgICAgICAgICAgZ2lycTEwX2IxMSh2b2lkKQ0KMTE1OiAgICAgICAgICAgICAgICAgew0KMTE2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAxMSwgSlRWSUNfQ0xSX1NSQyk7DQoxMTc6ICAgICAgICAgICAgICAgICB9DQoxMTg6ICAgICAgICAgICAgICAgICANCjExOTogICAgICAgICAgICAgICAgIA0KMTIwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyMTogICAgICAgICAgICAgICAgIGdpcnExMF9iMTIodm9pZCkNCjEyMjogICAgICAgICAgICAgICAgIHsNCjEyMzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTIsIEpUVklDX0NMUl9TUkMpOw0KMTI0OiAgICAgICAgICAgICAgICAgfQ0KMTI1OiAgICAgICAgICAgICAgICAgDQoxMjY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTI3OiAgICAgICAgICAgICAgICAgZ2lycTEwX2IxMyh2b2lkKQ0KMTI4OiAgICAgICAgICAgICAgICAgew0KMTI5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAxMywgSlRWSUNfQ0xSX1NSQyk7DQoxMzA6ICAgICAgICAgICAgICAgICB9DQoxMzE6ICAgICAgICAgICAgICAgICANCjEzMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzM6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjE0KHZvaWQpDQoxMzQ6ICAgICAgICAgICAgICAgICB7DQoxMzU6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDE0LCBKVFZJQ19DTFJfU1JDKTsNCjEzNjogICAgICAgICAgICAgICAgIH0NCjEzNzogICAgICAgICAgICAgICAgIA0KMTM4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEzOTogICAgICAgICAgICAgICAgIGdpcnExMF9iMTUodm9pZCkNCjE0MDogICAgICAgICAgICAgICAgIHsNCjE0MTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTUsIEpUVklDX0NMUl9TUkMpOw0KMTQyOiAgICAgICAgICAgICAgICAgfQ0KMTQzOiAgICAgICAgICAgICAgICAgDQoxNDQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQ1OiAgICAgICAgICAgICAgICAgZ2lycTEwX2IxNih2b2lkKQ0KMTQ2OiAgICAgICAgICAgICAgICAgew0KMTQ3OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAxNiwgSlRWSUNfQ0xSX1NSQyk7DQoxNDg6ICAgICAgICAgICAgICAgICB9DQoxNDk6ICAgICAgICAgICAgICAgICANCjE1MDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTE6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjE3KHZvaWQpDQoxNTI6ICAgICAgICAgICAgICAgICB7DQoxNTM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDE3LCBKVFZJQ19DTFJfU1JDKTsNCjE1NDogICAgICAgICAgICAgICAgIH0NCjE1NTogICAgICAgICAgICAgICAgIA0KMTU2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1NzogICAgICAgICAgICAgICAgIGdpcnExMF9iMTgodm9pZCkNCjE1ODogICAgICAgICAgICAgICAgIHsNCjE1OTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTgsIEpUVklDX0NMUl9TUkMpOw0KMTYwOiAgICAgICAgICAgICAgICAgfQ0KMTYxOiAgICAgICAgICAgICAgICAgDQoxNjI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTYzOiAgICAgICAgICAgICAgICAgZ2lycTEwX2IxOSh2b2lkKQ0KMTY0OiAgICAgICAgICAgICAgICAgew0KMTY1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAxOSwgSlRWSUNfQ0xSX1NSQyk7DQoxNjY6ICAgICAgICAgICAgICAgICB9DQoxNjc6ICAgICAgICAgICAgICAgICANCjE2ODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNjk6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjIwKHZvaWQpDQoxNzA6ICAgICAgICAgICAgICAgICB7DQoxNzE6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDIwLCBKVFZJQ19DTFJfU1JDKTsNCjE3MjogICAgICAgICAgICAgICAgIH0NCjE3MzogICAgICAgICAgICAgICAgIA0KMTc0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3NTogICAgICAgICAgICAgICAgIGdpcnExMF9iMjEodm9pZCkNCjE3NjogICAgICAgICAgICAgICAgIHsNCjE3NzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMjEsIEpUVklDX0NMUl9TUkMpOw0KMTc4OiAgICAgICAgICAgICAgICAgfQ0KMTc5OiAgICAgICAgICAgICAgICAgDQoxODA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTgxOiAgICAgICAgICAgICAgICAgZ2lycTEwX2IyMih2b2lkKQ0KMTgyOiAgICAgICAgICAgICAgICAgew0KMTgzOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAyMiwgSlRWSUNfQ0xSX1NSQyk7DQoxODQ6ICAgICAgICAgICAgICAgICB9DQoxODU6ICAgICAgICAgICAgICAgICANCjE4NjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxODc6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjIzKHZvaWQpDQoxODg6ICAgICAgICAgICAgICAgICB7DQoxODk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDIzLCBKVFZJQ19DTFJfU1JDKTsNCjE5MDogICAgICAgICAgICAgICAgIH0NCjE5MTogICAgICAgICAgICAgICAgIA0KMTkyOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxOTM6ICAgICAgICAgICAgICAgICANCjE5NDogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTAuYyAqLw0KMTk1OiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjE5NjogICAgICAgICAgICAgICAgICAqLw0KMTk3OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTA5LmMgIC0tLS0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMDkuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgIA0KMjk6ICAgICAgICAgICAgICAgICAgDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjM0OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzU6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEwOV9ESVNBR0cgPT0gMA0KMzk6ICAgICAgICAgICAgICAgICAgDQo0MDogICAgICAgICAgICAgICAgICAvKg0KNDE6ICAgICAgICAgICAgICAgICAgICogQWdncmVnYXRlZCBtb2RlIGhhbmRsZXIsIG11c3QgaGFuZGxlIGFsbCBlbmFibGVkIA0KNDI6ICAgICAgICAgICAgICAgICAgICogR0lSUTA4IHNvdXJjZXMuIA0KNDM6ICAgICAgICAgICAgICAgICAgKi8NCjQ0OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KNDU6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2lzciggdm9pZCApDQo0NjogICAgICAgICAgICAgICAgICB7DQpCRkQwNzY1QyAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3NjYwICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzY2MiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3NjY0ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzY2NiAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDc2NjggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDc2NkEgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzY2QyAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDc2NzAgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzY3MiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzY3NiAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3Njc4ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3NjdBICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3NjdDICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3NjdFICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzY4MCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDc2ODIgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzY4NCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDc2ODggICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3NjhBICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzY4QyAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3NjhFICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDc2OTAgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzY5MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0NzogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8MSk7DQpCRkQwNzY5NCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzY5NiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3Njk4ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzY5QyAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwNzY5RSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDg6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc2QTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc2QTIgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzZBNCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3NkE2ICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDc2QTggICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3NkFBICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzZBQyAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3NkIwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3NkIyICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3NkI0ICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDc2QjYgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzZCOCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDc2QkMgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzZCRSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3NkMwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzZDMiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3NkM0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDc2QzYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3NkM4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzZDQSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3NkNDICBGMzdDMDAwMCAgIEVSRVQKQkZEMDc2Q0UgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjQ5OiAgICAgICAgICAgICAgICAgIA0KNTA6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjUzOiAgICAgICAgICAgICAgICAgIGdpcnEwOV9iMCh2b2lkKQ0KNTQ6ICAgICAgICAgICAgICAgICAgew0KNTU6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMCk7DQo1NjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCAwKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjYwOiAgICAgICAgICAgICAgICAgIGdpcnEwOV9iMSh2b2lkKQ0KNjE6ICAgICAgICAgICAgICAgICAgew0KNjI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMSk7DQo2MzogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCAxKTsNCjY0OiAgICAgICAgICAgICAgICAgIH0NCjY1OiAgICAgICAgICAgICAgICAgIA0KNjY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY3OiAgICAgICAgICAgICAgICAgIGdpcnEwOV9iMih2b2lkKQ0KNjg6ICAgICAgICAgICAgICAgICAgew0KNjk6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMik7DQo3MDogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCAyKTsNCjcxOiAgICAgICAgICAgICAgICAgIH0NCjcyOiAgICAgICAgICAgICAgICAgIA0KNzM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc0OiAgICAgICAgICAgICAgICAgIGdpcnEwOV9iMyh2b2lkKQ0KNzU6ICAgICAgICAgICAgICAgICAgew0KNzY6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMyk7DQo3NzogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCAzKTsNCjc4OiAgICAgICAgICAgICAgICAgIH0NCjc5OiAgICAgICAgICAgICAgICAgIA0KODA6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjgxOiAgICAgICAgICAgICAgICAgIGdpcnEwOV9iNCh2b2lkKQ0KODI6ICAgICAgICAgICAgICAgICAgew0KODM6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgNCk7DQo4NDogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCA0KTsNCjg1OiAgICAgICAgICAgICAgICAgIH0NCjg2OiAgICAgICAgICAgICAgICAgIA0KODc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg4OiAgICAgICAgICAgICAgICAgIGdpcnEwOV9iNSh2b2lkKQ0KODk6ICAgICAgICAgICAgICAgICAgew0KOTA6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgNSk7DQo5MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCA1KTsNCjkyOiAgICAgICAgICAgICAgICAgIH0NCjkzOiAgICAgICAgICAgICAgICAgIA0KOTQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk1OiAgICAgICAgICAgICAgICAgIGdpcnEwOV9iNih2b2lkKQ0KOTY6ICAgICAgICAgICAgICAgICAgew0KOTc6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgNik7DQo5ODogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCA2KTsNCjk5OiAgICAgICAgICAgICAgICAgIH0NCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMjogICAgICAgICAgICAgICAgIGdpcnEwOV9iNyh2b2lkKQ0KMTAzOiAgICAgICAgICAgICAgICAgew0KMTA0OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgNyk7DQoxMDU6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCA3KTsNCjEwNjogICAgICAgICAgICAgICAgIH0NCjEwNzogICAgICAgICAgICAgICAgIA0KMTA4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwOTogICAgICAgICAgICAgICAgIGdpcnEwOV9iOCh2b2lkKQ0KMTEwOiAgICAgICAgICAgICAgICAgew0KMTExOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgOCk7DQoxMTI6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCA4KTsNCjExMzogICAgICAgICAgICAgICAgIH0NCjExNDogICAgICAgICAgICAgICAgIA0KMTE1OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjExNjogICAgICAgICAgICAgICAgIGdpcnEwOV9iOSh2b2lkKQ0KMTE3OiAgICAgICAgICAgICAgICAgew0KMTE4OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgOSk7DQoxMTk6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uU09VUkNFID0gKDF1bCA8PCA5KTsNCjEyMDogICAgICAgICAgICAgICAgIH0NCjEyMTogICAgICAgICAgICAgICAgIA0KMTIyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyMzogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTAodm9pZCkNCjEyNDogICAgICAgICAgICAgICAgIHsNCjEyNTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDEwKTsNCjEyNjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDEwKTsNCjEyNzogICAgICAgICAgICAgICAgIH0NCjEyODogICAgICAgICAgICAgICAgIA0KMTI5OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEzMDogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTEodm9pZCkNCjEzMTogICAgICAgICAgICAgICAgIHsNCjEzMjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDExKTsNCjEzMzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDExKTsNCjEzNDogICAgICAgICAgICAgICAgIH0NCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEzNzogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTIodm9pZCkNCjEzODogICAgICAgICAgICAgICAgIHsNCjEzOTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDEyKTsNCjE0MDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDEyKTsNCjE0MTogICAgICAgICAgICAgICAgIH0NCjE0MjogICAgICAgICAgICAgICAgIA0KMTQzOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE0NDogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTModm9pZCkNCjE0NTogICAgICAgICAgICAgICAgIHsNCjE0NjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDEzKTsNCjE0NzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDEzKTsNCjE0ODogICAgICAgICAgICAgICAgIH0NCjE0OTogICAgICAgICAgICAgICAgIA0KMTUwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1MTogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTQodm9pZCkNCjE1MjogICAgICAgICAgICAgICAgIHsNCjE1MzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDE0KTsNCjE1NDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDE0KTsNCjE1NTogICAgICAgICAgICAgICAgIH0NCjE1NjogICAgICAgICAgICAgICAgIA0KMTU3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1ODogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTUodm9pZCkNCjE1OTogICAgICAgICAgICAgICAgIHsNCjE2MDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDE1KTsNCjE2MTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDE1KTsNCjE2MjogICAgICAgICAgICAgICAgIH0NCjE2MzogICAgICAgICAgICAgICAgIA0KMTY0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE2NTogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTYodm9pZCkNCjE2NjogICAgICAgICAgICAgICAgIHsNCjE2NzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDE2KTsNCjE2ODogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDE2KTsNCjE2OTogICAgICAgICAgICAgICAgIH0NCjE3MDogICAgICAgICAgICAgICAgIA0KMTcxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3MjogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTcodm9pZCkNCjE3MzogICAgICAgICAgICAgICAgIHsNCjE3NDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDE3KTsNCjE3NTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDE3KTsNCjE3NjogICAgICAgICAgICAgICAgIH0NCjE3NzogICAgICAgICAgICAgICAgIA0KMTc4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3OTogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTgodm9pZCkNCjE4MDogICAgICAgICAgICAgICAgIHsNCjE4MTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDE4KTsNCjE4MjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDE4KTsNCjE4MzogICAgICAgICAgICAgICAgIH0NCjE4NDogICAgICAgICAgICAgICAgIA0KMTg1OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE4NjogICAgICAgICAgICAgICAgIGdpcnEwOV9iMTkodm9pZCkNCjE4NzogICAgICAgICAgICAgICAgIHsNCjE4ODogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDE5KTsNCjE4OTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDE5KTsNCjE5MDogICAgICAgICAgICAgICAgIH0NCjE5MTogICAgICAgICAgICAgICAgIA0KMTkyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5MzogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjAodm9pZCkNCjE5NDogICAgICAgICAgICAgICAgIHsNCjE5NTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDIwKTsNCjE5NjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDIwKTsNCjE5NzogICAgICAgICAgICAgICAgIH0NCjE5ODogICAgICAgICAgICAgICAgIA0KMTk5OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIwMDogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjEodm9pZCkNCjIwMTogICAgICAgICAgICAgICAgIHsNCjIwMjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDIxKTsNCjIwMzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDIxKTsNCjIwNDogICAgICAgICAgICAgICAgIH0NCjIwNTogICAgICAgICAgICAgICAgIA0KMjA2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIwNzogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjIodm9pZCkNCjIwODogICAgICAgICAgICAgICAgIHsNCjIwOTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDIyKTsNCjIxMDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDIyKTsNCjIxMTogICAgICAgICAgICAgICAgIH0NCjIxMjogICAgICAgICAgICAgICAgIA0KMjEzOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIxNDogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjModm9pZCkNCjIxNTogICAgICAgICAgICAgICAgIHsNCjIxNjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDIzKTsNCjIxNzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDIzKTsNCjIxODogICAgICAgICAgICAgICAgIH0NCjIxOTogICAgICAgICAgICAgICAgIA0KMjIwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIyMTogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjQodm9pZCkNCjIyMjogICAgICAgICAgICAgICAgIHsNCjIyMzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDI0KTsNCjIyNDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDI0KTsNCjIyNTogICAgICAgICAgICAgICAgIH0NCjIyNjogICAgICAgICAgICAgICAgIA0KMjI3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIyODogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjUodm9pZCkNCjIyOTogICAgICAgICAgICAgICAgIHsNCjIzMDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDI1KTsNCjIzMTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDI1KTsNCjIzMjogICAgICAgICAgICAgICAgIH0NCjIzMzogICAgICAgICAgICAgICAgIA0KMjM0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIzNTogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjYodm9pZCkNCjIzNjogICAgICAgICAgICAgICAgIHsNCjIzNzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDI2KTsNCjIzODogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDI2KTsNCjIzOTogICAgICAgICAgICAgICAgIH0NCjI0MDogICAgICAgICAgICAgICAgIA0KMjQxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjI0MjogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjcodm9pZCkNCjI0MzogICAgICAgICAgICAgICAgIHsNCjI0NDogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDI3KTsNCjI0NTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDI3KTsNCjI0NjogICAgICAgICAgICAgICAgIH0NCjI0NzogICAgICAgICAgICAgICAgIA0KMjQ4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjI0OTogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjgodm9pZCkNCjI1MDogICAgICAgICAgICAgICAgIHsNCjI1MTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDI4KTsNCjI1MjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDI4KTsNCjI1MzogICAgICAgICAgICAgICAgIH0NCjI1NDogICAgICAgICAgICAgICAgIA0KMjU1OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjI1NjogICAgICAgICAgICAgICAgIGdpcnEwOV9iMjkodm9pZCkNCjI1NzogICAgICAgICAgICAgICAgIHsNCjI1ODogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDI5KTsNCjI1OTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDI5KTsNCjI2MDogICAgICAgICAgICAgICAgIH0NCjI2MTogICAgICAgICAgICAgICAgIA0KMjYyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjI2MzogICAgICAgICAgICAgICAgIGdpcnEwOV9iMzAodm9pZCkNCjI2NDogICAgICAgICAgICAgICAgIHsNCjI2NTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDMwKTsNCjI2NjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDMwKTsNCjI2NzogICAgICAgICAgICAgICAgIH0NCjI2ODogICAgICAgICAgICAgICAgIA0KMjY5OiAgICAgICAgICAgICAgICAgDQoyNzA6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjI3MTogICAgICAgICAgICAgICAgIA0KMjcyOiAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnEwOS5jICovDQoyNzM6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMjc0OiAgICAgICAgICAgICAgICAgICovDQoyNzU6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMDguYyAgLS0tLQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogQ29weXJpZ2h0IDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEwOC5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEwOF9ESVNBR0cgPT0gMA0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAvKg0KNDA6ICAgICAgICAgICAgICAgICAgICogQWdncmVnYXRlZCBtb2RlIGhhbmRsZXIsIG11c3QgaGFuZGxlIGFsbCBlbmFibGVkIA0KNDE6ICAgICAgICAgICAgICAgICAgICogR0lSUTA4IHNvdXJjZXMuIA0KNDI6ICAgICAgICAgICAgICAgICAgKi8NCjQzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KNDQ6ICAgICAgICAgICAgICAgICAgZ2lycTA4X2lzciggdm9pZCApDQo0NTogICAgICAgICAgICAgICAgICB7DQpCRkQwNzVFOCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQCkJGRDA3NUVDICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQwpCRkQwNzVFRSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyCkJGRDA3NUYwICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bApCRkQwNzVGMiAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUKQkZEMDc1RjQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzIKQkZEMDc1RjYgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQpCRkQwNzVGOCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMKQkZEMDc1RkMgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQpCRkQwNzVGRSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQpCRkQwNzYwMiAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApCkJGRDA3NjA0ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwCkJGRDA3NjA2ICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwCkJGRDA3NjA4ICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2CkJGRDA3NjBBICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5NgpCRkQwNzYwQyAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQKQkZEMDc2MEUgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQpCRkQwNzYxMCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMKQkZEMDc2MTQgICAgICBDODYyICAgU1cgVjEsIDgoU1ApCkJGRDA3NjE2ICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQpCRkQwNzYxOCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApCkJGRDA3NjFBICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYKQkZEMDc2MUMgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwNzYxRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0NjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8MCk7DQpCRkQwNzYyMCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRgpCRkQwNzYyMiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpCkJGRDA3NjI0ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5MgpCRkQwNzYyOCAgICAgIEVEODEgICBMSSBWMSwgMQpCRkQwNzYyQSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkKNDc6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc2MkMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDc2MkUgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQpCRkQwNzYzMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGCkJGRDA3NjMyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkKQkZEMDc2MzQgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApCkJGRDA3NjM2ICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQpCRkQwNzYzOCAgNDc3QzAwMDAgICBESSBaRVJPCkJGRDA3NjNDICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzCkJGRDA3NjNFICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pCkJGRDA3NjQwICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkKQkZEMDc2NDIgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQpCRkQwNzY0NCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMKQkZEMDc2NDggICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQpCRkQwNzY0QSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyCkJGRDA3NjRDICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bApCRkQwNzY0RSAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3CkJGRDA3NjUwICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1AKQkZEMDc2NTIgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwCkJGRDA3NjU0ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cwpCRkQwNzY1NiAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwCkJGRDA3NjU4ICBGMzdDMDAwMCAgIEVSRVQKQkZEMDc2NUEgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0CjQ4OiAgICAgICAgICAgICAgICAgIA0KNDk6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjUwOiAgICAgICAgICAgICAgICAgIA0KNTE6ICAgICAgICAgICAgICAgICAgLyoNCjUyOiAgICAgICAgICAgICAgICAgICAqIERpc2FnZ3JlZ2F0ZWQgR0lSUTA4IHN1YmhhbmRsZXJzLCBvbmUgZm9yIGVhY2ggDQo1MzogICAgICAgICAgICAgICAgICAgKiBzb3VyY2UuICBDYWxsZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2Ugd3JhcHBlci4gDQo1NDogICAgICAgICAgICAgICAgICAqLw0KNTU6ICAgICAgICAgICAgICAgICAgDQo1NjogICAgICAgICAgICAgICAgICANCjU3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1ODogICAgICAgICAgICAgICAgICBnaXJxMDhfYjAodm9pZCkNCjU5OiAgICAgICAgICAgICAgICAgIHsNCjYwOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMCk7DQo2MTogICAgICAgICAgICAgICAgICB9DQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY1OiAgICAgICAgICAgICAgICAgIGdpcnEwOF9iMSh2b2lkKQ0KNjY6ICAgICAgICAgICAgICAgICAgew0KNjc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxKTsNCjY4OiAgICAgICAgICAgICAgICAgIH0NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgDQo3MTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzI6ICAgICAgICAgICAgICAgICAgZ2lycTA4X2IyKHZvaWQpDQo3MzogICAgICAgICAgICAgICAgICB7DQo3NDogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDIpOw0KNzU6ICAgICAgICAgICAgICAgICAgfQ0KNzY6ICAgICAgICAgICAgICAgICAgDQo3NzogICAgICAgICAgICAgICAgICANCjc4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3OTogICAgICAgICAgICAgICAgICBnaXJxMDhfYjModm9pZCkNCjgwOiAgICAgICAgICAgICAgICAgIHsNCjgxOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMyk7DQo4MjogICAgICAgICAgICAgICAgICB9DQo4MzogICAgICAgICAgICAgICAgICANCjg0OiAgICAgICAgICAgICAgICAgIA0KODU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg2OiAgICAgICAgICAgICAgICAgIGdpcnEwOF9iNCh2b2lkKQ0KODc6ICAgICAgICAgICAgICAgICAgew0KODg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCA0KTsNCjg5OiAgICAgICAgICAgICAgICAgIH0NCjkwOiAgICAgICAgICAgICAgICAgIA0KOTE6ICAgICAgICAgICAgICAgICAgDQo5MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTM6ICAgICAgICAgICAgICAgICAgZ2lycTA4X2I1KHZvaWQpDQo5NDogICAgICAgICAgICAgICAgICB7DQo5NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDUpOw0KOTY6ICAgICAgICAgICAgICAgICAgfQ0KOTc6ICAgICAgICAgICAgICAgICAgDQo5ODogICAgICAgICAgICAgICAgICANCjk5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDA6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjYodm9pZCkNCjEwMTogICAgICAgICAgICAgICAgIHsNCjEwMjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgNik7DQoxMDM6ICAgICAgICAgICAgICAgICB9DQoxMDQ6ICAgICAgICAgICAgICAgICANCjEwNTogICAgICAgICAgICAgICAgIA0KMTA2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwNzogICAgICAgICAgICAgICAgIGdpcnEwOF9iNyh2b2lkKQ0KMTA4OiAgICAgICAgICAgICAgICAgew0KMTA5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCA3KTsNCjExMDogICAgICAgICAgICAgICAgIH0NCjExMTogICAgICAgICAgICAgICAgIA0KMTEyOiAgICAgICAgICAgICAgICAgDQoxMTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTE0OiAgICAgICAgICAgICAgICAgZ2lycTA4X2I4KHZvaWQpDQoxMTU6ICAgICAgICAgICAgICAgICB7DQoxMTY6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDgpOw0KMTE3OiAgICAgICAgICAgICAgICAgfQ0KMTE4OiAgICAgICAgICAgICAgICAgDQoxMTk6ICAgICAgICAgICAgICAgICANCjEyMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMjE6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjkodm9pZCkNCjEyMjogICAgICAgICAgICAgICAgIHsNCjEyMzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgOSk7DQoxMjQ6ICAgICAgICAgICAgICAgICB9DQoxMjU6ICAgICAgICAgICAgICAgICANCjEyNjogICAgICAgICAgICAgICAgIA0KMTI3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyODogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTAodm9pZCkNCjEyOTogICAgICAgICAgICAgICAgIHsNCjEzMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTApOw0KMTMxOiAgICAgICAgICAgICAgICAgfQ0KMTMyOiAgICAgICAgICAgICAgICAgDQoxMzM6ICAgICAgICAgICAgICAgICANCjEzNDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzU6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjExKHZvaWQpDQoxMzY6ICAgICAgICAgICAgICAgICB7DQoxMzc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDExKTsNCjEzODogICAgICAgICAgICAgICAgIH0NCjEzOTogICAgICAgICAgICAgICAgIA0KMTQwOiAgICAgICAgICAgICAgICAgDQoxNDE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQyOiAgICAgICAgICAgICAgICAgZ2lycTA4X2IxMih2b2lkKQ0KMTQzOiAgICAgICAgICAgICAgICAgew0KMTQ0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxMik7DQoxNDU6ICAgICAgICAgICAgICAgICB9DQoxNDY6ICAgICAgICAgICAgICAgICANCjE0NzogICAgICAgICAgICAgICAgIA0KMTQ4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE0OTogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTModm9pZCkNCjE1MDogICAgICAgICAgICAgICAgIHsNCjE1MTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTMpOw0KMTUyOiAgICAgICAgICAgICAgICAgfQ0KMTUzOiAgICAgICAgICAgICAgICAgDQoxNTQ6ICAgICAgICAgICAgICAgICANCjE1NTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTY6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjE0KHZvaWQpDQoxNTc6ICAgICAgICAgICAgICAgICB7DQoxNTg6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDE0KTsNCjE1OTogICAgICAgICAgICAgICAgIH0NCjE2MDogICAgICAgICAgICAgICAgIA0KMTYxOiAgICAgICAgICAgICAgICAgDQoxNjI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTYzOiAgICAgICAgICAgICAgICAgZ2lycTA4X2IxNSh2b2lkKQ0KMTY0OiAgICAgICAgICAgICAgICAgew0KMTY1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxNSk7DQoxNjY6ICAgICAgICAgICAgICAgICB9DQoxNjc6ICAgICAgICAgICAgICAgICANCjE2ODogICAgICAgICAgICAgICAgIA0KMTY5OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3MDogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTYodm9pZCkNCjE3MTogICAgICAgICAgICAgICAgIHsNCjE3MjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTYpOw0KMTczOiAgICAgICAgICAgICAgICAgfQ0KMTc0OiAgICAgICAgICAgICAgICAgDQoxNzU6ICAgICAgICAgICAgICAgICANCjE3NjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNzc6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjE3KHZvaWQpDQoxNzg6ICAgICAgICAgICAgICAgICB7DQoxNzk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDE3KTsNCjE4MDogICAgICAgICAgICAgICAgIH0NCjE4MTogICAgICAgICAgICAgICAgIA0KMTgyOiAgICAgICAgICAgICAgICAgDQoxODM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTg0OiAgICAgICAgICAgICAgICAgZ2lycTA4X2IxOCh2b2lkKQ0KMTg1OiAgICAgICAgICAgICAgICAgew0KMTg2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxOCk7DQoxODc6ICAgICAgICAgICAgICAgICB9DQoxODg6ICAgICAgICAgICAgICAgICANCjE4OTogICAgICAgICAgICAgICAgIA0KMTkwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5MTogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTkodm9pZCkNCjE5MjogICAgICAgICAgICAgICAgIHsNCjE5MzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTkpOw0KMTk0OiAgICAgICAgICAgICAgICAgfQ0KMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICANCjE5NzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxOTg6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjIwKHZvaWQpDQoxOTk6ICAgICAgICAgICAgICAgICB7DQoyMDA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDIwKTsNCjIwMTogICAgICAgICAgICAgICAgIH0NCjIwMjogICAgICAgICAgICAgICAgIA0KMjAzOiAgICAgICAgICAgICAgICAgDQoyMDQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjA1OiAgICAgICAgICAgICAgICAgZ2lycTA4X2IyMSh2b2lkKQ0KMjA2OiAgICAgICAgICAgICAgICAgew0KMjA3OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAyMSk7DQoyMDg6ICAgICAgICAgICAgICAgICB9DQoyMDk6ICAgICAgICAgICAgICAgICANCjIxMDogICAgICAgICAgICAgICAgIA0KMjExOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIxMjogICAgICAgICAgICAgICAgIGdpcnEwOF9iMjIodm9pZCkNCjIxMzogICAgICAgICAgICAgICAgIHsNCjIxNDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMjIpOw0KMjE1OiAgICAgICAgICAgICAgICAgfQ0KMjE2OiAgICAgICAgICAgICAgICAgDQoyMTc6ICAgICAgICAgICAgICAgICANCjIxODogICAgICAgICAgICAgICAgICNlbmRpZg0KMjE5OiAgICAgICAgICAgICAgICAgDQoyMjA6ICAgICAgICAgICAgICAgICANCjIyMTogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMDguYyAqLw0KMjIyOiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjIyMzogICAgICAgICAgICAgICAgICAqLw0KMjI0OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2V4Y2VwdGlvbnMvbXBsYWIvZ2VuZXJhbF9leGNlcHRpb24uYwoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdlbmVyYWxfZXhjZXB0aW9uLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqTUVDMTR4eCBHZW5lcmFsIEV4Y2VwdGlvbiBIYW5kbGVyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBFeGNlcHRpb25zDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9pbmxpbmUuaCINCjMzOiAgICAgICAgICAgICAgICAgIA0KMzQ6ICAgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgZ2VuX2V4Y2VwdF9jYXB0dXJlDQozNTogICAgICAgICAgICAgICAgICB7DQozNjogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhY2tfcHRyOw0KMzc6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNwMF9zdGF0dXM7DQozODogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY3AwX2NhdXNlOw0KMzk6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNwMF9lcGM7DQo0MDogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY3AwX2Vycm9yX2VwYzsNCjQxOiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjcDBfbmV4YzsNCjQyOiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjcDBfbmVwYzsNCjQzOiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjcDBfYmFkdmFkZHI7DQo0NDogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWhiX2VycjsNCjQ1OiAgICAgICAgICAgICAgICAgIH0gR0VOX0VYQ0VQVF9DQVBUVVJFOw0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICBHRU5fRVhDRVBUX0NBUFRVUkUgZ2V4Y19jYXA7DQo0ODogICAgICAgICAgICAgICAgICANCjQ5OiAgICAgICAgICAgICAgICAgIHZvaWQgDQo1MDogICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChub21pcHMxNiwgbm9yZXR1cm4pKSBfZ2VuZXJhbF9leGNlcHRpb25faGFuZGxlciAodm9pZCkNCjUxOiAgICAgICAgICAgICAgICAgIHsNCkJGRDAwNDYwICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2CkJGRDAwNDYyICAgICAgQ0JFMyAgIFNXIFJBLCAxMihTUCkKQkZEMDA0NjQgICAgICBDQkMyICAgU1cgUzgsIDgoU1ApCkJGRDAwNDY2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQCjUyOiAgICAgICAgICAgICAgICAgICAgICAvKiANCjUzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgTUVDMTR4eCBBcHBsaWNhdGlvbiBHZW5lcmFsIEV4Y2VwdGlvbiBoYW5kbGVyDQo1NDogICAgICAgICAgICAgICAgICAgICAgICovDQo1NTogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZTsNCjU2OiAgICAgICAgICAgICAgICAgIA0KNTc6ICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBjdXJyZW50IFN0YWNrIFBvaW50ZXIuIE5vdGU6IHRoaXMgaXMgbm90IFNQIGF0DQo1ODogICAgICAgICAgICAgICAgICAgICAgICogZXhjZXB0aW9uLiBYQzMyIHdyYXBzIF9nZW5lcmFsX2V4Y2VwdGlvbl9oYW5kbGVyIGluDQo1OTogICAgICAgICAgICAgICAgICAgICAgICogYXNzZW1ibHkgY29kZSB3aGljaCBzYXZlcyBzdGF0ZSByZXN1bHRpbmcgaXMgYQ0KNjA6ICAgICAgICAgICAgICAgICAgICAgICAqIG1vZGlmaWVkIFNQLiBXcmFwcGVyIGFsbG9jYXRlcyA4OCBieXRlcyBmb3IgY29udGV4dA0KNjE6ICAgICAgICAgICAgICAgICAgICAgICAqIHNhdmUuIE9yaWdpbmFsIFNQID0gU1BjdXJyZW50ICsgODguDQo2MjogICAgICAgICAgICAgICAgICAgICAgICovDQo2MzogICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlICgNCkJGRDAwNDY4ICAgICAgMEZGRCAgIE1PVkUgUkEsIFNQCkJGRDAwNDZBICAgICAgMEMwMCAgIE5PUApCRkQwMDQ2QyAgMDAwMEZCRkUgICBTVyBSQSwgMChTOCkKNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmUgJTAsJHNwIFxuXHQiDQo2NTogICAgICAgICAgICAgICAgICAgICAgICAibm9wICAgICAgICBcblx0IiANCjY2OiAgICAgICAgICAgICAgICAgICAgICAgIDoiPXIiIChlKSANCjY3OiAgICAgICAgICAgICAgICAgICAgICAgIDo6KTsNCjY4OiAgICAgICAgICAgICAgICAgICAgICBnZXhjX2NhcC5zdGFja19wdHIgPSBlOw0KQkZEMDA0NzAgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDA0NzIgIEZDN0VCRkQyICAgTERDMSBGMzAsIC04OTgoUzIpCkJGRDAwNDc0ICAwMDAwRkM3RSAgIExXIFYxLCAwKFM4KQpCRkQwMDQ3OCAgODEzNEY4NjIgICBTVyBWMSwgLTMyNDYwKFYwKQo2OTogICAgICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICAgICAgZ2V4Y19jYXAuY3AwX3N0YXR1cyA9IF9DUDBfR0VUX1NUQVRVUygpOw0KQkZEMDA0N0MgIDAwRkMwMDZDICAgTUZDMCBWMSwgU3RhdHVzCkJGRDAwNDgwICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyCkJGRDAwNDgyICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikKQkZEMDA0ODQgIDgxMzQzMDQyICAgQURESVUgVjAsIFYwLCAtMzI0NjAKQkZEMDA0ODggICAgICBFOUExICAgU1cgVjEsIDQoVjApCjcxOiAgICAgICAgICAgICAgICAgICAgICBnZXhjX2NhcC5jcDBfY2F1c2UgPSBfQ1AwX0dFVF9DQVVTRSgpOw0KQkZEMDA0OEEgIDAwRkMwMDZEICAgTUZDMCBWMSwgQ2F1c2UKQkZEMDA0OEUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDA0OTAgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMDQ5MiAgODEzNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ2MApCRkQwMDQ5NiAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKNzI6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLmNwMF9lcGMgPSBfQ1AwX0dFVF9FUEMoKTsNCkJGRDAwNDk4ICAwMEZDMDA2RSAgIE1GQzAgVjEsIEVQQwpCRkQwMDQ5QyAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMDQ5RSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAwNEEwICA4MTM0MzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNDYwCkJGRDAwNEE0ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkKNzM6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLmNwMF9lcnJvcl9lcGMgPSBfQ1AwX0dFVF9FUlJPUkVQQygpOw0KQkZEMDA0QTYgIDAwRkMwMDdFICAgTUZDMCBWMSwgRXJyb3JFUEMKQkZEMDA0QUEgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDA0QUMgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMDRBRSAgODEzNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ2MApCRkQwMDRCMiAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApCjc0OiAgICAgICAgICAgICAgICAgICAgICBnZXhjX2NhcC5jcDBfbmV4YyA9IF9DUDBfR0VUX05FU1RFREVYQygpOw0KQkZEMDA0QjQgIDEwRkMwMDZEICAgTUZDMCBWMSwgJDEzLCAyCkJGRDAwNEI2ICA0MUEyMTBGQyAgIEFEREkgQTMsIEdQLCAxNjgwMgpCRkQwMDRCOCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMgpCRkQwMDRCQSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpCkJGRDAwNEJDICA4MTM0MzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNDYwCkJGRDAwNEMwICAgICAgRTlBNSAgIFNXIFYxLCAyMChWMCkKNzU6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLmNwMF9uZXBjID0gX0NQMF9HRVRfTkVTVEVERVBDKCk7DQpCRkQwMDRDMiAgMDhGQzAwNkUgICBNRkMwIFYxLCAkMTQsIDEKQkZEMDA0QzQgICAgICAwOEZDICAgTEJVIFMxLCAxMihBMykKQkZEMDA0QzYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDA0QzggIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMDRDQSAgODEzNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ2MApCRkQwMDRDRSAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApCjc2OiAgICAgICAgICAgICAgICAgICAgICBnZXhjX2NhcC5jcDBfYmFkdmFkZHIgPSBfQ1AwX0dFVF9CQURWQUREUigpOw0KQkZEMDA0RDAgIDAwRkMwMDY4ICAgTUZDMCBWMSwgQmFkVkFkZHIKQkZEMDA0RDQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDIKQkZEMDA0RDYgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQpCRkQwMDREOCAgODEzNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ2MApCRkQwMDREQyAgICAgIEU5QTcgICBTVyBWMSwgMjgoVjApCjc3OiAgICAgICAgICAgICAgICAgIA0KNzg6ICAgICAgICAgICAgICAgICAgICAgIHRyYWNlMCgwLCBBUDNHRU5FWENFUFQsIDAsICJBcHBsaWNhdGlvbiBHZW5lcmFsIEV4Y2VwdGlvbiBIYW5kbGVyIChCRVY9MCkiKTsNCjc5OiAgICAgICAgICAgICAgICAgICAgICBUUkFDRTExKDYwMSwgQVAzR0VORVhDRVBULCAwLCAiQ3VycmVudCBTUCAgID0gMHglMDh4IixnZXhjX2NhcC5zdGFja19wdHIpOw0KQkZEMDA0REUgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA0RTIgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNEU0ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA0RTYKQkZEMDA0RTYgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zCkJGRDAwNEU4ICA4OUEwRkZGRCAgIExXIFJBLCAtMzAzMDQoU1ApCkJGRDAwNEVBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDRFQyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDRGMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA0RjIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDRGNApCRkQwMDRGNCAgICAgIEVERDkgICBMSSBWMSwgODkKQkZEMDA0RjYgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNEY4ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNEZDICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDRGRSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNTAwCkJGRDAwNTAwICAgICAgRUQ4MiAgIExJIFYxLCAyCkJGRDAwNTAyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDUwNCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDUwOCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA1MEEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDUwQwpCRkQwMDUwQyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDUwRSAgRkM2M0JGRDIgICBMREMxIEYzMCwgLTkyNShTMikKQkZEMDA1MTAgIDgxMzRGQzYzICAgTFcgVjEsIC0zMjQ2MChWMSkKQkZEMDA1MTQgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA1MTYgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNTE4ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNTFDICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDUxRSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNTIwCkJGRDAwNTIwICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNTIyICBGQzYzQkZEMiAgIExEQzEgRjMwLCAtOTI1KFMyKQpCRkQwMDUyNCAgODEzNEZDNjMgICBMVyBWMSwgLTMyNDYwKFYxKQpCRkQwMDUyOCAgICAgIDI1QjEgICBTUkwgVjEsIFYxLCA4CkJGRDAwNTJBICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwNTJDICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDUyRSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDUzMiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA1MzQgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDUzNgpCRkQwMDUzNiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDUzOCAgRkM2M0JGRDIgICBMREMxIEYzMCwgLTkyNShTMikKQkZEMDA1M0EgIDgxMzRGQzYzICAgTFcgVjEsIC0zMjQ2MChWMSkKQkZEMDA1M0UgIDgwNDAwMDYzICAgU1JMIFYxLCBWMSwgMTYKQkZEMDA1NDIgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA1NDQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNTQ2ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNTRBICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDU0QyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNTRFCkJGRDAwNTRFICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNTUwICBGQzYzQkZEMiAgIExEQzEgRjMwLCAtOTI1KFMyKQpCRkQwMDU1MiAgODEzNEZDNjMgICBMVyBWMSwgLTMyNDYwKFYxKQpCRkQwMDU1NiAgQzA0MDAwNjMgICBTUkwgVjEsIFYxLCAyNApCRkQwMDU1QSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDU1QyAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKODA6ICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMTEoNjAyLCBBUDNHRU5FWENFUFQsIDAsICJDUDAgU1RBVFVTICAgPSAweCUwOHgiLGdleGNfY2FwLmNwMF9zdGF0dXMpOw0KQkZEMDA1NUUgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA1NjIgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNTY0ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1NjYKQkZEMDA1NjYgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zCkJGRDAwNTY4ICA4OUEwRkZGRCAgIExXIFJBLCAtMzAzMDQoU1ApCkJGRDAwNTZBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDU2QyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDU3MCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA1NzIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDU3NApCRkQwMDU3NCAgICAgIEVEREEgICBMSSBWMSwgOTAKQkZEMDA1NzYgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNTc4ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNTdDICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDU3RSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNTgwCkJGRDAwNTgwICAgICAgRUQ4MiAgIExJIFYxLCAyCkJGRDAwNTgyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDU4NCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDU4OCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA1OEEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDU4QwpCRkQwMDU4QyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDU4RSAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwNTkwICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwNTk0ICAgICAgNjlCMSAgIExXIFYxLCA0KFYxKQpCRkQwMDU5NiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDU5OCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA1OUEgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA1OUUgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNUEwICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1QTIKQkZEMDA1QTIgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA1QTQgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDVBNiAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDVBQSAgICAgIDY5QjEgICBMVyBWMSwgNChWMSkKQkZEMDA1QUMgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOApCRkQwMDVBRSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDVCMCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA1QjIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA1QjYgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNUI4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1QkEKQkZEMDA1QkEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA1QkMgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDVCRSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDVDMiAgICAgIDY5QjEgICBMVyBWMSwgNChWMSkKQkZEMDA1QzQgIDgwNDAwMDYzICAgU1JMIFYxLCBWMSwgMTYKQkZEMDA1QzggICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA1Q0EgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNUNDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNUQwICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDVEMiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNUQ0CkJGRDAwNUQ0ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNUQ2ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA1RDggIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA1REMgICAgICA2OUIxICAgTFcgVjEsIDQoVjEpCkJGRDAwNURFICBDMDQwMDA2MyAgIFNSTCBWMSwgVjEsIDI0CkJGRDAwNUUyICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwNUU0ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQo4MTogICAgICAgICAgICAgICAgICAgICAgVFJBQ0UxMSg2MDMsIEFQM0dFTkVYQ0VQVCwgMCwgIkNQMCBDQVVTRSAgICA9IDB4JTA4eCIsZ2V4Y19jYXAuY3AwX2NhdXNlKTsNCkJGRDAwNUU2ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNUVBICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDVFQyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNUVFCkJGRDAwNUVFICBGRkZEMzA2MCAgIEFERElVIFYxLCBaRVJPLCAtMwpCRkQwMDVGMCAgODlBMEZGRkQgICBMVyBSQSwgLTMwMzA0KFNQKQpCRkQwMDVGMiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA1RjQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA1RjggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNUZBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1RkMKQkZEMDA1RkMgICAgICBFRERCICAgTEkgVjEsIDkxCkJGRDAwNUZFICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDYwMCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDYwNCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA2MDYgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDYwOApCRkQwMDYwOCAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwMDYwQSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA2MEMgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA2MTAgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNjEyICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2MTQKQkZEMDA2MTQgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA2MTYgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDYxOCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDYxQyAgICAgIDY5QjIgICBMVyBWMSwgOChWMSkKQkZEMDA2MUUgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA2MjAgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNjIyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNjI2ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDYyOCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNjJBCkJGRDAwNjJBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNjJDICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA2MkUgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA2MzIgICAgICA2OUIyICAgTFcgVjEsIDgoVjEpCkJGRDAwNjM0ICAgICAgMjVCMSAgIFNSTCBWMSwgVjEsIDgKQkZEMDA2MzYgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA2MzggICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNjNBICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNjNFICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDY0MCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNjQyCkJGRDAwNjQyICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNjQ0ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA2NDYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA2NEEgICAgICA2OUIyICAgTFcgVjEsIDgoVjEpCkJGRDAwNjRDICA4MDQwMDA2MyAgIFNSTCBWMSwgVjEsIDE2CkJGRDAwNjUwICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwNjUyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDY1NCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDY1OCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA2NUEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDY1QwpCRkQwMDY1QyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDY1RSAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwNjYwICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwNjY0ICAgICAgNjlCMiAgIExXIFYxLCA4KFYxKQpCRkQwMDY2NiAgQzA0MDAwNjMgICBTUkwgVjEsIFYxLCAyNApCRkQwMDY2QSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDY2QyAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKODI6ICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMTEoNjA0LCBBUDNHRU5FWENFUFQsIDAsICJDUDAgRVBDICAgICAgPSAweCUwOHgiLGdleGNfY2FwLmNwMF9lcGMpOw0KQkZEMDA2NkUgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA2NzIgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNjc0ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2NzYKQkZEMDA2NzYgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zCkJGRDAwNjc4ICA4OUEwRkZGRCAgIExXIFJBLCAtMzAzMDQoU1ApCkJGRDAwNjdBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDY3QyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDY4MCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA2ODIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDY4NApCRkQwMDY4NCAgICAgIEVEREMgICBMSSBWMSwgOTIKQkZEMDA2ODYgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNjg4ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNjhDICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDY4RSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNjkwCkJGRDAwNjkwICAgICAgRUQ4MiAgIExJIFYxLCAyCkJGRDAwNjkyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDY5NCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDY5OCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA2OUEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDY5QwpCRkQwMDY5QyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDY5RSAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwNkEwICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwNkE0ICAgICAgNjlCMyAgIExXIFYxLCAxMihWMSkKQkZEMDA2QTYgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA2QTggICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNkFBICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNkFFICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDZCMCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNkIyCkJGRDAwNkIyICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNkI0ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA2QjYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA2QkEgICAgICA2OUIzICAgTFcgVjEsIDEyKFYxKQpCRkQwMDZCQyAgICAgIDI1QjEgICBTUkwgVjEsIFYxLCA4CkJGRDAwNkJFICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwNkMwICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDZDMiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDZDNiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA2QzggICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDZDQQpCRkQwMDZDQSAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDZDQyAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwNkNFICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwNkQyICAgICAgNjlCMyAgIExXIFYxLCAxMihWMSkKQkZEMDA2RDQgIDgwNDAwMDYzICAgU1JMIFYxLCBWMSwgMTYKQkZEMDA2RDggICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA2REEgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNkRDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNkUwICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDZFMiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNkU0CkJGRDAwNkU0ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNkU2ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA2RTggIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA2RUMgICAgICA2OUIzICAgTFcgVjEsIDEyKFYxKQpCRkQwMDZFRSAgQzA0MDAwNjMgICBTUkwgVjEsIFYxLCAyNApCRkQwMDZGMiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDZGNCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKODM6ICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMTEoNjA1LCBBUDNHRU5FWENFUFQsIDAsICJDUDAgRVJST1JFUEMgPSAweCUwOHgiLGdleGNfY2FwLmNwMF9lcnJvcl9lcGMpOw0KQkZEMDA2RjYgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA2RkEgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNkZDICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2RkUKQkZEMDA2RkUgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zCkJGRDAwNzAwICA4OUEwRkZGRCAgIExXIFJBLCAtMzAzMDQoU1ApCkJGRDAwNzAyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDcwNCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDcwOCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA3MEEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDcwQwpCRkQwMDcwQyAgICAgIEVEREQgICBMSSBWMSwgOTMKQkZEMDA3MEUgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNzEwICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNzE0ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDcxNiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNzE4CkJGRDAwNzE4ICAgICAgRUQ4MiAgIExJIFYxLCAyCkJGRDAwNzFBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDcxQyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDcyMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA3MjIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDcyNApCRkQwMDcyNCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDcyNiAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwNzI4ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwNzJDICAgICAgNjlCNCAgIExXIFYxLCAxNihWMSkKQkZEMDA3MkUgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA3MzAgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNzMyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNzM2ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDczOCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNzNBCkJGRDAwNzNBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNzNDICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA3M0UgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA3NDIgICAgICA2OUI0ICAgTFcgVjEsIDE2KFYxKQpCRkQwMDc0NCAgICAgIDI1QjEgICBTUkwgVjEsIFYxLCA4CkJGRDAwNzQ2ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwNzQ4ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDc0QSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDc0RSAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA3NTAgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDc1MgpCRkQwMDc1MiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDc1NCAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwNzU2ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwNzVBICAgICAgNjlCNCAgIExXIFYxLCAxNihWMSkKQkZEMDA3NUMgIDgwNDAwMDYzICAgU1JMIFYxLCBWMSwgMTYKQkZEMDA3NjAgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA3NjIgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwNzY0ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNzY4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDc2QSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNzZDCkJGRDAwNzZDICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwNzZFICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA3NzAgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA3NzQgICAgICA2OUI0ICAgTFcgVjEsIDE2KFYxKQpCRkQwMDc3NiAgQzA0MDAwNjMgICBTUkwgVjEsIFYxLCAyNApCRkQwMDc3QSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDc3QyAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKODQ6ICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMTEoNjA2LCBBUDNHRU5FWENFUFQsIDAsICJDUDAgTkVYQyAgICAgPSAweCUwOHgiLGdleGNfY2FwLmNwMF9uZXhjKTsNCkJGRDAwNzdFICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwNzgyICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDc4NCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNzg2CkJGRDAwNzg2ICBGRkZEMzA2MCAgIEFERElVIFYxLCBaRVJPLCAtMwpCRkQwMDc4OCAgODlBMEZGRkQgICBMVyBSQSwgLTMwMzA0KFNQKQpCRkQwMDc4QSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA3OEMgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA3OTAgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwNzkyICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA3OTQKQkZEMDA3OTQgICAgICBFRERFICAgTEkgVjEsIDk0CkJGRDAwNzk2ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDc5OCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDc5QyAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA3OUUgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDdBMApCRkQwMDdBMCAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwMDdBMiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA3QTQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA3QTggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwN0FBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA3QUMKQkZEMDA3QUMgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA3QUUgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDdCMCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDdCNCAgICAgIDY5QjUgICBMVyBWMSwgMjAoVjEpCkJGRDAwN0I2ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwN0I4ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDdCQSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDdCRSAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA3QzAgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDdDMgpCRkQwMDdDMiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDdDNCAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwN0M2ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwN0NBICAgICAgNjlCNSAgIExXIFYxLCAyMChWMSkKQkZEMDA3Q0MgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOApCRkQwMDdDRSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDdEMCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA3RDIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA3RDYgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwN0Q4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA3REEKQkZEMDA3REEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA3REMgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDdERSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDdFMiAgICAgIDY5QjUgICBMVyBWMSwgMjAoVjEpCkJGRDAwN0U0ICA4MDQwMDA2MyAgIFNSTCBWMSwgVjEsIDE2CkJGRDAwN0U4ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwN0VBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDdFQyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDdGMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA3RjIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDdGNApCRkQwMDdGNCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDdGNiAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwN0Y4ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwN0ZDICAgICAgNjlCNSAgIExXIFYxLCAyMChWMSkKQkZEMDA3RkUgIEMwNDAwMDYzICAgU1JMIFYxLCBWMSwgMjQKQkZEMDA4MDIgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA4MDQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCjg1OiAgICAgICAgICAgICAgICAgICAgICBUUkFDRTExKDYwNywgQVAzR0VORVhDRVBULCAwLCAiQ1AwIE5FUEMgICAgID0gMHglMDh4IixnZXhjX2NhcC5jcDBfbmVwYyk7DQpCRkQwMDgwNiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDgwQSAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA4MEMgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDgwRQpCRkQwMDgwRSAgRkZGRDMwNjAgICBBRERJVSBWMSwgWkVSTywgLTMKQkZEMDA4MTAgIDg5QTBGRkZEICAgTFcgUkEsIC0zMDMwNChTUCkKQkZEMDA4MTIgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwODE0ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwODE4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDgxQSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODFDCkJGRDAwODFDICAgICAgRURERiAgIExJIFYxLCA5NQpCRkQwMDgxRSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA4MjAgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA4MjQgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwODI2ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4MjgKQkZEMDA4MjggICAgICBFRDgyICAgTEkgVjEsIDIKQkZEMDA4MkEgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwODJDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwODMwICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDgzMiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODM0CkJGRDAwODM0ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwODM2ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA4MzggIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA4M0MgICAgICA2OUI2ICAgTFcgVjEsIDI0KFYxKQpCRkQwMDgzRSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDg0MCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA4NDIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA4NDYgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwODQ4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4NEEKQkZEMDA4NEEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA4NEMgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDg0RSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDg1MiAgICAgIDY5QjYgICBMVyBWMSwgMjQoVjEpCkJGRDAwODU0ICAgICAgMjVCMSAgIFNSTCBWMSwgVjEsIDgKQkZEMDA4NTYgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA4NTggICAgICA4OUEwICAgU0IgVjEsIDAoVjApCkJGRDAwODVBICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwODVFICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDg2MCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODYyCkJGRDAwODYyICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyCkJGRDAwODY0ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikKQkZEMDA4NjYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjAKQkZEMDA4NkEgICAgICA2OUI2ICAgTFcgVjEsIDI0KFYxKQpCRkQwMDg2QyAgODA0MDAwNjMgICBTUkwgVjEsIFYxLCAxNgpCRkQwMDg3MCAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDg3MiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA4NzQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA4NzggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwODdBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4N0MKQkZEMDA4N0MgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA4N0UgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDg4MCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDg4NCAgICAgIDY5QjYgICBMVyBWMSwgMjQoVjEpCkJGRDAwODg2ICBDMDQwMDA2MyAgIFNSTCBWMSwgVjEsIDI0CkJGRDAwODhBICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwODhDICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQo4NjogICAgICAgICAgICAgICAgICAgICAgVFJBQ0UxMSg2MDgsIEFQM0dFTkVYQ0VQVCwgMCwgIkNQMCBCQURWQUREUiA9IDB4JTA4eCIsZ2V4Y19jYXAuY3AwX2JhZHZhZGRyKTsNCkJGRDAwODhFICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDAwODkyICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5NgpCRkQwMDg5NCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODk2CkJGRDAwODk2ICBGRkZEMzA2MCAgIEFERElVIFYxLCBaRVJPLCAtMwpCRkQwMDg5OCAgODlBMEZGRkQgICBMVyBSQSwgLTMwMzA0KFNQKQpCRkQwMDg5QSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA4OUMgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA4QTAgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwOEEyICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4QTQKQkZEMDA4QTQgICAgICBFREUwICAgTEkgVjEsIDk2CkJGRDAwOEE2ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDhBOCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDhBQyAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA4QUUgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDhCMApCRkQwMDhCMCAgICAgIEVEODIgICBMSSBWMSwgMgpCRkQwMDhCMiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA4QjQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA4QjggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwOEJBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4QkMKQkZEMDA4QkMgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA4QkUgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDhDMCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDhDNCAgICAgIDY5QjcgICBMVyBWMSwgMjgoVjEpCkJGRDAwOEM2ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwOEM4ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDhDQSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDhDRSAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA4RDAgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDhEMgpCRkQwMDhEMiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDhENCAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwOEQ2ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwOERBICAgICAgNjlCNyAgIExXIFYxLCAyOChWMSkKQkZEMDA4REMgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOApCRkQwMDhERSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRgpCRkQwMDhFMCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkKQkZEMDA4RTIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDAKQkZEMDA4RTYgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2CkJGRDAwOEU4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4RUEKQkZEMDA4RUEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDIKQkZEMDA4RUMgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQpCRkQwMDhFRSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MApCRkQwMDhGMiAgICAgIDY5QjcgICBMVyBWMSwgMjgoVjEpCkJGRDAwOEY0ICA4MDQwMDA2MyAgIFNSTCBWMSwgVjEsIDE2CkJGRDAwOEY4ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGCkJGRDAwOEZBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQpCRkQwMDhGQyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMApCRkQwMDkwMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYKQkZEMDA5MDIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDkwNApCRkQwMDkwNCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMgpCRkQwMDkwNiAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpCkJGRDAwOTA4ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwCkJGRDAwOTBDICAgICAgNjlCNyAgIExXIFYxLCAyOChWMSkKQkZEMDA5MEUgIEMwNDAwMDYzICAgU1JMIFYxLCBWMSwgMjQKQkZEMDA5MTIgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDA5MTQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApCjg3OiAgICAgICAgICAgICAgICAgIA0KODg6ICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsNCjg5OiAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlICgiJShzc25vcCUpIiA6IDopOw0KQkZEMDA5MTYgIDA4MDAwMDAwICAgU1NOT1AKQkZEMDA5MTggICAgICAwODAwICAgTEJVIFMwLCAwKFMwKQo5MDogICAgICAgICAgICAgICAgICAgICAgfSANCkJGRDAwOTFBICAgICAgQ0ZGRCAgIEIgMHhCRkQwMDkxNgpCRkQwMDkxQyAgICAgIDBDMDAgICBOT1AKOTE6ICAgICAgICAgICAgICAgICAgfQ0KOTI6ICAgICAgICAgICAgICAgICAgDQo5MzogICAgICAgICAgICAgICAgICANCjk0OiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnZW5lcmFsX2V4Y2VwdGlvbi5jICovDQo5NTogICAgICAgICAgICAgICAgICAvKiogICBAfQ0KOTY6ICAgICAgICAgICAgICAgICAgICovDQo5NzogICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21haW4uYyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxOiAgICAgICAgICAgICAgICAgICAjd2FybmluZyBjb25maWdUSU1FUlNfRElTQUdHUkVHQVRFRF9JU1JTIGFuZCBjb25maWdDUFVfRElTQUdHUkVHQVRFRF9JU1JTIG5lZWQgZG9jdW1lbnRpbmcuDQoyOiAgICAgICAgICAgICAgICAgICANCjM6ICAgICAgICAgICAgICAgICAgIC8qDQo0OiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgVjguMi4xIC0gQ29weXJpZ2h0IChDKSAyMDE1IFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KNTogICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQNCjY6ICAgICAgICAgICAgICAgICAgIA0KNzogICAgICAgICAgICAgICAgICAgICAgIFZJU0lUIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIFRPIEVOU1VSRSBZT1UgQVJFIFVTSU5HIFRIRSBMQVRFU1QgVkVSU0lPTi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQoxMDogICAgICAgICAgICAgICAgICANCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQoxMjogICAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQoxMzogICAgICAgICAgICAgICAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uID4+IUFORCBNT0RJRklFRCBCWSE8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTQ6ICAgICAgICAgICAgICAgICAgDQoxNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxOTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoyMDogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyMTogICAgICAgICAgICAgICAgICANCjIyOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIzOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyNDogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjI1OiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjY6ICAgICAgICAgICAgICAgICAgDQoyNzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyODogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI5OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMzA6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQozMTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMyOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzM6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNDogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjM1OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNzogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM4OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzk6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KNDA6ICAgICAgICAgICAgICAgICAgDQo0MTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQyOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQzOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDQ6ICAgICAgICAgICAgICAgICAgDQo0NTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ2OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ3OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDg6ICAgICAgICAgICAgICAgICAgDQo0OTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo1MTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTI6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUzOiAgICAgICAgICAgICAgICAgIA0KNTQ6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1NTogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU2OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NzogICAgICAgICAgICAgICAgICANCjU4OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTk6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjYwOiAgICAgICAgICAgICAgICAgIA0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjI6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjM6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjQ6ICAgICAgICAgICAgICAgICAgDQo2NTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjY6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY3OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY4OiAgICAgICAgICAgICAgICAgIA0KNjk6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNzA6ICAgICAgICAgICAgICAgICAgKi8NCjcxOiAgICAgICAgICAgICAgICAgIA0KNzI6ICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KNzM6ICAgICAgICAgICAgICAgICAgICogVGhpcyBwcm9qZWN0IG9ubHkgcHJvdmlkZXMgYSBzaW1wbGUgYmxpbmt5IGRlbW9uc3RyYXRpb24uDQo3NDogICAgICAgICAgICAgICAgICAgKg0KNzU6ICAgICAgICAgICAgICAgICAgICogbWFpbigpIGNyZWF0ZXMgb25lIHF1ZXVlLCB0d28gdGFza3MsIGFuZCBvbmUgc29mdHdhcmUgdGltZXIuICBJdCB0aGVuIHN0YXJ0cw0KNzY6ICAgICAgICAgICAgICAgICAgICogdGhlIHNjaGVkdWxlci4NCjc3OiAgICAgICAgICAgICAgICAgICAqDQo3ODogICAgICAgICAgICAgICAgICAgKiBUaGUgQmxpbmt5IFNvZnR3YXJlIFRpbWVyOg0KNzk6ICAgICAgICAgICAgICAgICAgICogVGhpcyBkZW1vbnN0cmF0ZXMgYW4gYXV0by1yZWxvYWQgc29mdHdhcmUgdGltZXIuICBUaGUgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb24NCjgwOiAgICAgICAgICAgICAgICAgICAqIGRvZXMgbm90aGluZyBidXQgdG9nZ2xlIGFuIExFRC4NCjgxOiAgICAgICAgICAgICAgICAgICAqDQo4MjogICAgICAgICAgICAgICAgICAgKiBUaGUgUXVldWUgU2VuZCBUYXNrOg0KODM6ICAgICAgICAgICAgICAgICAgICogVGhlIHF1ZXVlIHNlbmQgdGFzayBpcyBpbXBsZW1lbnRlZCBieSBwcnZRdWV1ZVNlbmRUYXNrKCkuICBJdCBzZW5kcyB0aGUgdmFsdWUNCjg0OiAgICAgICAgICAgICAgICAgICAqIDEwMCB0byB0aGUgcXVldWUgZXZlcnkgMjAwIG1pbGxpc2Vjb25kcy4NCjg1OiAgICAgICAgICAgICAgICAgICAqDQo4NjogICAgICAgICAgICAgICAgICAgKiBUaGUgUXVldWUgUmVjZWl2ZSBUYXNrOg0KODc6ICAgICAgICAgICAgICAgICAgICogVGhlIHF1ZXVlIHJlY2VpdmUgdGFzayBpcyBpbXBsZW1lbnRlZCBieSBwcnZRdWV1ZVJlY2VpdmVUYXNrKCkuDQo4ODogICAgICAgICAgICAgICAgICAgKiBwcnZRdWV1ZVJlY2VpdmVUYXNrKCkgcmVwZWF0ZWRseSBibG9ja3Mgb24gYXR0ZW1wdHMgdG8gcmVhZCBmcm9tIHRoZSBxdWV1ZSwNCjg5OiAgICAgICAgICAgICAgICAgICAqIHRvZ2dsaW5nIGFuIExFRCBlYWNoIHRpbWUgZGF0YSBpcyByZWNlaXZlZC4gIFRoZSBxdWV1ZSBzZW5kIHRhc2sgc2VuZHMgZGF0YQ0KOTA6ICAgICAgICAgICAgICAgICAgICogdG8gdGhlIHF1ZXVlIGV2ZXJ5IDIwMCBtaWxsaXNlY29uZHMsIHNvIHRoZSBMRUQgd2lsbCB0b2dnbGUgZXZlcnkgMjAwDQo5MTogICAgICAgICAgICAgICAgICAgKiBtaWxsaXNlY29uZHMuDQo5MjogICAgICAgICAgICAgICAgICAgKi8NCjkzOiAgICAgICAgICAgICAgICAgIA0KOTQ6ICAgICAgICAgICAgICAgICAgLyogS2VybmVsIGluY2x1ZGVzLiAqLw0KOTU6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQo5NjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGFzay5oIg0KOTc6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInF1ZXVlLmgiDQo5ODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGltZXJzLmgiDQo5OTogICAgICAgICAgICAgICAgICANCjEwMDogICAgICAgICAgICAgICAgIC8qIFRhcmdldCBpbmNsdWRlcy4gKi8NCjEwMTogICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjEwMjogICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjEwMzogICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfanR2aWMuaCINCjEwNDogICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfYmJsZWQuaCINCjEwNTogICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjEwNjogICAgICAgICAgICAgICAgIA0KMTA3OiAgICAgICAgICAgICAgICAgLyogUHJpb3JpdGllcyBhdCB3aGljaCB0aGUgdGFza3MgYXJlIGNyZWF0ZWQuICovDQoxMDg6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5RVUVVRV9TRU5EX1RBU0tfUFJJT1JJVFkJKCB0c2tJRExFX1BSSU9SSVRZICsgMSApDQoxMDk6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5RVUVVRV9SRUNFSVZFX1RBU0tfUFJJT1JJVFkJKCB0c2tJRExFX1BSSU9SSVRZICsgMiApDQoxMTA6ICAgICAgICAgICAgICAgICANCjExMTogICAgICAgICAgICAgICAgIC8qIFRoZSByYXRlIGF0IHdoaWNoIGRhdGEgaXMgc2VudCB0byB0aGUgcXVldWUuICBUaGUgMjAwbXMgdmFsdWUgaXMgY29udmVydGVkDQoxMTI6ICAgICAgICAgICAgICAgICB0byB0aWNrcyB1c2luZyB0aGUgcGRNU19UT19USUNLUygpIG1hY3JvLiAqLw0KMTEzOiAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWluUVVFVUVfU0VORF9GUkVRVUVOQ1lfTVMJCSggcGRNU19UT19USUNLUyggMjAwVUwgKSApDQoxMTQ6ICAgICAgICAgICAgICAgICANCjExNTogICAgICAgICAgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgaXRlbXMgdGhlIHF1ZXVlIGNhbiBob2xkLiAgVGhpcyBpcyAxIGFzIHRoZSByZWNlaXZlIHRhc2sNCjExNjogICAgICAgICAgICAgICAgIHdpbGwgcmVtb3ZlIGl0ZW1zIGFzIHRoZXkgYXJlIGFkZGVkLCBtZWFuaW5nIHRoZSBzZW5kIHRhc2sgc2hvdWxkIGFsd2F5cyBmaW5kDQoxMTc6ICAgICAgICAgICAgICAgICB0aGUgcXVldWUgZW1wdHkuICovDQoxMTg6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5RVUVVRV9MRU5HVEgJCQkJKCAxICkNCjExOTogICAgICAgICAgICAgICAgIA0KMTIwOiAgICAgICAgICAgICAgICAgLyogVmFsdWVzIHBhc3NlZCB0byB0aGUgdHdvIHRhc2tzIGp1c3QgdG8gY2hlY2sgdGhlIHRhc2sgcGFyYW1ldGVyDQoxMjE6ICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LiAqLw0KMTIyOiAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWluUVVFVUVfU0VORF9QQVJBTUVURVIJCSggMHgxMTExVUwgKQ0KMTIzOiAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWluUVVFVUVfUkVDRUlWRV9QQVJBTUVURVIJCSggMHgyMlVMICkNCjEyNDogICAgICAgICAgICAgICAgIA0KMTI1OiAgICAgICAgICAgICAgICAgLyogVGhlIHBlcmlvZCBvZiB0aGUgc29mdHdhcmUgdGltZXIuICBUaGUgcGVyaW9kIGlzIHNwZWNpZmllZCBpbiBtcyBhbmQNCjEyNjogICAgICAgICAgICAgICAgIGNvbnZlcnRlZCB0byB0aWNrcyB1c2luZyB0aGUgcGRNU19UT19USUNLUygpIG1hY3JvLiAqLw0KMTI3OiAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWluQkxJTktZX1RJTUVSX1BFUklPRAkJCSggcGRNU19UT19USUNLUyggNTBVTCApICkNCjEyODogICAgICAgICAgICAgICAgIA0KMTI5OiAgICAgICAgICAgICAgICAgLyogVGhlIExFRCB1c2VkIGJ5IHRoZSBjb21tdW5pY2F0aW5nIHRhc2tzIGFuZCB0aGUgdGltZXIgcmVzcGVjdGl2ZWx5LiAqLw0KMTMwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWluVEFTS1NfTEVECQkJCQkoIExFRDBfSUQgKQ0KMTMxOiAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWluVElNRVJfTEVECQkJCQkoIExFRDFfSUQgKQ0KMTMyOiAgICAgICAgICAgICAgICAgDQoxMzM6ICAgICAgICAgICAgICAgICAvKiBNaXNjLiAqLw0KMTM0OiAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWluRE9OVF9CTE9DSwkJCQkJKCAwICkNCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgDQoxMzc6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEzODogICAgICAgICAgICAgICAgIA0KMTM5OiAgICAgICAgICAgICAgICAgLyoNCjE0MDogICAgICAgICAgICAgICAgICAqIFRoZSB0YXNrcyBhcyBkZXNjcmliZWQgaW4gdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLg0KMTQxOiAgICAgICAgICAgICAgICAgICovDQoxNDI6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZRdWV1ZVJlY2VpdmVUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKTsNCjE0MzogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlF1ZXVlU2VuZFRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApOw0KMTQ0OiAgICAgICAgICAgICAgICAgDQoxNDU6ICAgICAgICAgICAgICAgICAvKg0KMTQ2OiAgICAgICAgICAgICAgICAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgc29mdHdhcmUgdGltZXIsIGFzIGRlc2NyaWJlZCBhdCB0aGUgdG9wIG9mIHRoaXMNCjE0NzogICAgICAgICAgICAgICAgICAqIGZpbGUuDQoxNDg6ICAgICAgICAgICAgICAgICAgKi8NCjE0OTogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkJsaW5reVRpbWVyQ2FsbGJhY2soIFRpbWVySGFuZGxlX3QgeFRpbWVyICk7DQoxNTA6ICAgICAgICAgICAgICAgICANCjE1MTogICAgICAgICAgICAgICAgIC8qDQoxNTI6ICAgICAgICAgICAgICAgICAgKiBQZXJmb3JtcyBhbnkgaGFyZHdhcmUgc2V0dXAgbmVjZXNzYXJ5Lg0KMTUzOiAgICAgICAgICAgICAgICAgICovDQoxNTQ6ICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2U2V0dXBIYXJkd2FyZSggdm9pZCApOw0KMTU1OiAgICAgICAgICAgICAgICAgDQoxNTY6ICAgICAgICAgICAgICAgICAvKg0KMTU3OiAgICAgICAgICAgICAgICAgICogQWRkIHNvbWUgdGhyZWFkIHNhZmV0eSB0byB0aGUgTEVEIHRvZ2dsZSBmdW5jdGlvbi4NCjE1ODogICAgICAgICAgICAgICAgICAqLw0KMTU5OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2VG9nZ2xlTEVEKCB1aW50OF90IHVjTEVEICk7DQoxNjA6ICAgICAgICAgICAgICAgICANCjE2MTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTYyOiAgICAgICAgICAgICAgICAgDQoxNjM6ICAgICAgICAgICAgICAgICAvKiBUaGUgcXVldWUgdXNlZCBieSBib3RoIHRhc2tzLiAqLw0KMTY0OiAgICAgICAgICAgICAgICAgc3RhdGljIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlID0gTlVMTDsNCjE2NTogICAgICAgICAgICAgICAgIA0KMTY2OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNjc6ICAgICAgICAgICAgICAgICANCjE2ODogICAgICAgICAgICAgICAgIGludCBtYWluKCB2b2lkICkNCjE2OTogICAgICAgICAgICAgICAgIHsNCkJGRDA5NkMwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA5NkMyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDk2QzQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwOTZDNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAoxNzA6ICAgICAgICAgICAgICAgICBUaW1lckhhbmRsZV90IHhUaW1lcjsNCjE3MTogICAgICAgICAgICAgICAgIA0KMTcyOiAgICAgICAgICAgICAgICAgCS8qIFBlcmZvcm0gYW55IGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uIG5lY2Vzc2FyeS4gKi8NCjE3MzogICAgICAgICAgICAgICAgIAkvL3BydlNldHVwSGFyZHdhcmUoKTsNCjE3NDogICAgICAgICAgICAgICAgIA0KMTc1OiAgICAgICAgICAgICAgICAgICAgCV9fYXNtIHZvbGF0aWxlKCAiZGkiICk7DQpCRkQwOTZDOCAgNDc3QzAwMDAgICBESSBaRVJPCjE3NjogICAgICAgICAgICAgICAgIA0KMTc3OiAgICAgICAgICAgICAgICAgDQoxNzg6ICAgICAgICAgICAgICAgICAgICAgew0KMTc5OiAgICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bHggPSAwOw0KQkZEMDk2Q0MgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpCjE4MDogICAgICAgICAgICAgICAgICAgICAgICAgDQoxODE6ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggOzsgKQ0KMTgyOiAgICAgICAgICAgICAgICAgICAgICAgICB7DQoxODM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIHVseCA9IDA7IHVseCA8IDB4MWZmZjsgdWx4KysgKQ0KQkZEMDk2RDAgICAgICBDQzBBICAgQiAweEJGRDA5NkU2CkJGRDA5NkQyICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQpCRkQwOTZENCAgMEMwMDAwMTAgICBTTEwgWkVSTywgUzAsIDEKQkZEMDk2REMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwOTZFMCAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDEKQkZEMDk2RTIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwOTZFNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA5NkVBICAxRkZGQjA0MiAgIFNMVElVIFYwLCBWMCwgODE5MQpCRkQwOTZFQyAgNDBBMjFGRkYgICBMQiBSQSwgMTY1NDYoUkEpCkJGRDA5NkVFICBGRkYyNDBBMiAgIEJORVpDIFYwLCAweEJGRDA5NkQ2CkJGRDA5NkYwICA3N0U4RkZGMiAgIExXIFJBLCAzMDY5NihTMikKMTg0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KMTg1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlKCAiTk9QIiApOw0KQkZEMDk2RDYgICAgICAwQzAwICAgTk9QCjE4NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NkQ4ICAgICAgMEMwMCAgIE5PUAoxODc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUoICJOT1AiICk7ICAgIA0KQkZEMDk2REEgICAgICAwQzAwICAgTk9QCjE4ODogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjE4OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KMTkwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVkX291dF90b2dnbGUoIDAgKTsNCkJGRDA5NkYyICA0MkQ0NzdFOCAgIEpBTFMgbGVkX291dF90b2dnbGUKQkZEMDk2RjYgICAgICAwQzgwICAgTU9WRSBBMCwgWkVSTwoxOTE6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCkJGRDA5NkY4ICAgICAgQ0ZFQiAgIEIgMHhCRkQwOTZEMApCRkQwOTZGQSAgICAgIDBDMDAgICBOT1AKMTkyOiAgICAgICAgICAgICAgICAgICAgIH0NCjE5MzogICAgICAgICAgICAgICAgICAgICANCjE5NDogICAgICAgICAgICAgICAgICAgICANCjE5NTogICAgICAgICAgICAgICAgICAgICANCjE5NjogICAgICAgICAgICAgICAgIAkvKiBDcmVhdGUgdGhlIHF1ZXVlLiAqLw0KMTk3OiAgICAgICAgICAgICAgICAgCXhRdWV1ZSA9IHhRdWV1ZUNyZWF0ZSggbWFpblFVRVVFX0xFTkdUSCwgc2l6ZW9mKCB1bnNpZ25lZCBsb25nICkgKTsNCjE5ODogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHhRdWV1ZSApOw0KMTk5OiAgICAgICAgICAgICAgICAgDQoyMDA6ICAgICAgICAgICAgICAgICAJaWYoIHhRdWV1ZSAhPSBOVUxMICkNCjIwMTogICAgICAgICAgICAgICAgIAl7DQoyMDI6ICAgICAgICAgICAgICAgICAJCS8qIENyZWF0ZSB0aGUgdHdvIHRhc2tzIGFzIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGlzDQoyMDM6ICAgICAgICAgICAgICAgICAJCWZpbGUuICovDQoyMDQ6ICAgICAgICAgICAgICAgICAJCXhUYXNrQ3JlYXRlKAlwcnZRdWV1ZVJlY2VpdmVUYXNrLAkJCQkJLyogVGhlIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgdGFzay4gKi8NCjIwNTogICAgICAgICAgICAgICAgIAkJCQkJCSJSeCIsIAkJCQkJCQkJCS8qIFRoZSB0ZXh0IG5hbWUgYXNzaWduZWQgdG8gdGhlIHRhc2sgLSBmb3IgZGVidWcgb25seSBhcyBpdCBpcyBub3QgdXNlZCBieSB0aGUga2VybmVsLiAqLw0KMjA2OiAgICAgICAgICAgICAgICAgCQkJCQkJY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFLCAJCQkJLyogVGhlIHNpemUgb2YgdGhlIHN0YWNrIHRvIGFsbG9jYXRlIHRvIHRoZSB0YXNrLiAqLw0KMjA3OiAgICAgICAgICAgICAgICAgCQkJCQkJKCB2b2lkICogKSBtYWluUVVFVUVfUkVDRUlWRV9QQVJBTUVURVIsCS8qIFRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSB0YXNrIC0ganVzdCB0byBjaGVjayB0aGUgZnVuY3Rpb25hbGl0eS4gKi8NCjIwODogICAgICAgICAgICAgICAgIAkJCQkJCW1haW5RVUVVRV9SRUNFSVZFX1RBU0tfUFJJT1JJVFksCQkvKiBUaGUgcHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIHRhc2suICovDQoyMDk6ICAgICAgICAgICAgICAgICAJCQkJCQlOVUxMICk7CQkJCQkJCQkJLyogVGhlIHRhc2sgaGFuZGxlIGlzIG5vdCByZXF1aXJlZCwgc28gTlVMTCBpcyBwYXNzZWQuICovDQoyMTA6ICAgICAgICAgICAgICAgICANCjIxMTogICAgICAgICAgICAgICAgIAkJeFRhc2tDcmVhdGUoIHBydlF1ZXVlU2VuZFRhc2ssICJUWCIsIGNvbmZpZ01JTklNQUxfU1RBQ0tfU0laRSwgKCB2b2lkICogKSBtYWluUVVFVUVfU0VORF9QQVJBTUVURVIsIG1haW5RVUVVRV9TRU5EX1RBU0tfUFJJT1JJVFksIE5VTEwgKTsNCjIxMjogICAgICAgICAgICAgICAgIA0KMjEzOiAgICAgICAgICAgICAgICAgDQoyMTQ6ICAgICAgICAgICAgICAgICAJCS8qIENyZWF0ZSB0aGUgYmxpbmt5IHNvZnR3YXJlIHRpbWVyIGFzIGRlc2NyaWJlZCBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4gKi8NCjIxNTogICAgICAgICAgICAgICAgIAkJeFRpbWVyID0geFRpbWVyQ3JlYXRlKAkiQmxpbmt5IiwJCQkJCS8qIEEgdGV4dCBuYW1lLCBwdXJlbHkgdG8gaGVscCBkZWJ1Z2dpbmcuICovDQoyMTY6ICAgICAgICAgICAgICAgICAJCQkJCQkJCSggbWFpbkJMSU5LWV9USU1FUl9QRVJJT0QgKSwvKiBUaGUgdGltZXIgcGVyaW9kLiAqLw0KMjE3OiAgICAgICAgICAgICAgICAgCQkJCQkJCQlwZFRSVUUsCQkJCQkJLyogVGhpcyBpcyBhbiBhdXRvLXJlbG9hZCB0aW1lciwgc28geEF1dG9SZWxvYWQgaXMgc2V0IHRvIHBkVFJVRS4gKi8NCjIxODogICAgICAgICAgICAgICAgIAkJCQkJCQkJKCB2b2lkICogKSAwLAkJCQkvKiBUaGUgSUQgaXMgbm90IHVzZWQsIHNvIGNhbiBiZSBzZXQgdG8gYW55dGhpbmcuICovDQoyMTk6ICAgICAgICAgICAgICAgICAJCQkJCQkJCXBydkJsaW5reVRpbWVyQ2FsbGJhY2sgKTsJLyogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaW5zcGVjdHMgdGhlIHN0YXR1cyBvZiBhbGwgdGhlIG90aGVyIHRhc2tzLiAqLw0KMjIwOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHhUaW1lciApOw0KMjIxOiAgICAgICAgICAgICAgICAgDQoyMjI6ICAgICAgICAgICAgICAgICAJCWlmKCB4VGltZXIgIT0gTlVMTCApDQoyMjM6ICAgICAgICAgICAgICAgICAJCXsNCjIyNDogICAgICAgICAgICAgICAgIAkJCXhUaW1lclN0YXJ0KCB4VGltZXIsIG1haW5ET05UX0JMT0NLICk7DQoyMjU6ICAgICAgICAgICAgICAgICAJCX0NCjIyNjogICAgICAgICAgICAgICAgIA0KMjI3OiAgICAgICAgICAgICAgICAgCQkvKiBTdGFydCB0aGUgdGFza3MgYW5kIHRpbWVyIHJ1bm5pbmcuICovDQoyMjg6ICAgICAgICAgICAgICAgICAJCXZUYXNrU3RhcnRTY2hlZHVsZXIoKTsNCjIyOTogICAgICAgICAgICAgICAgIAl9DQoyMzA6ICAgICAgICAgICAgICAgICANCjIzMTogICAgICAgICAgICAgICAgIAkvKiBJZiBhbGwgaXMgd2VsbCwgdGhlIHNjaGVkdWxlciB3aWxsIG5vdyBiZSBydW5uaW5nLCBhbmQgdGhlIGZvbGxvd2luZw0KMjMyOiAgICAgICAgICAgICAgICAgCWxpbmUgd2lsbCBuZXZlciBiZSByZWFjaGVkLiAgSWYgdGhlIGZvbGxvd2luZyBsaW5lIGRvZXMgZXhlY3V0ZSwgdGhlbg0KMjMzOiAgICAgICAgICAgICAgICAgCXRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgRnJlZVJUT1MgaGVhcCBtZW1vcnkgYXZhaWxhYmxlIGZvciB0aGUgaWRsZSBhbmQvb3INCjIzNDogICAgICAgICAgICAgICAgIAl0aW1lciB0YXNrcwl0byBiZSBjcmVhdGVkLiAgU2VlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzZWN0aW9uIG9uIHRoZQ0KMjM1OiAgICAgICAgICAgICAgICAgCUZyZWVSVE9TIHdlYiBzaXRlIGZvciBtb3JlIGRldGFpbHMuIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExMS5odG1sICovDQoyMzY6ICAgICAgICAgICAgICAgICAJZm9yKCA7OyApOw0KMjM3OiAgICAgICAgICAgICAgICAgfQ0KMjM4OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMzk6ICAgICAgICAgICAgICAgICANCjI0MDogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlF1ZXVlU2VuZFRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQoyNDE6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0UzNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwN0UzNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA3RTM4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDdFM0EgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDdFM0MgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQoyNDI6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhOZXh0V2FrZVRpbWU7DQoyNDM6ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIHVsVmFsdWVUb1NlbmQgPSAxMDBVTDsNCkJGRDA3RTQwICAgICAgRUQ2NCAgIExJIFYwLCAxMDAKQkZEMDdFNDIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQoyNDQ6ICAgICAgICAgICAgICAgICANCjI0NTogICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgY29tcGlsZXIgd2FybmlnbnMgaW4gdGhlIGNhc2UgdGhhdCBjb25maWdBU1NFUlQoKSBpcyBub3QgZGZpbmVkLiAqLw0KMjQ2OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHB2UGFyYW1ldGVyczsNCjI0NzogICAgICAgICAgICAgICAgIA0KMjQ4OiAgICAgICAgICAgICAgICAgCS8qIENoZWNrIHRoZSB0YXNrIHBhcmFtZXRlciBpcyBhcyBleHBlY3RlZC4gKi8NCjI0OTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggKCB1bnNpZ25lZCBsb25nICkgcHZQYXJhbWV0ZXJzICkgPT0gbWFpblFVRVVFX1NFTkRfUEFSQU1FVEVSICk7DQpCRkQwN0U0NiAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDA3RTQ4ICAzMDQwMDAyMCAgIFNSTCBBVCwgWkVSTywgNgpCRkQwN0U0QSAgMTExMTMwNDAgICBBRERJVSBWMCwgWkVSTywgNDM2OQpCRkQwN0U0QyAgOTQ0MzExMTEgICBBRERJIFQwLCBTMSwgLTI3NTgxCkJGRDA3RTRFICAwMDBBOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDdFNjYKQkZEMDdFNTAgIDBDMDAwMDBBICAgU0xMIFpFUk8sIFQyLCAxCkJGRDA3RTUyICAgICAgMEMwMCAgIE5PUApCRkQwN0U1NCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQpCRkQwN0U1NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpCkJGRDA3RTU4ICA5RUY0MzA4MiAgIEFERElVIEEwLCBWMCwgLTI0ODQ0CkJGRDA3RTVBICAzMEEwOUVGNCAgIExXQzEgRjIzLCAxMjQ0OChTNCkKQkZEMDdFNUMgIDAwRjkzMEEwICAgQURESVUgQTEsIFpFUk8sIDI0OQpCRkQwN0U2MCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQKQkZEMDdFNjIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkKQkZEMDdFNjQgICAgICAwQzAwICAgTk9QCjI1MDogICAgICAgICAgICAgICAgIA0KMjUxOiAgICAgICAgICAgICAgICAgCS8qIEluaXRpYWxpc2UgeE5leHRXYWtlVGltZSAtIHRoaXMgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UuICovDQoyNTI6ICAgICAgICAgICAgICAgICAJeE5leHRXYWtlVGltZSA9IHhUYXNrR2V0VGlja0NvdW50KCk7DQpCRkQwN0U2NiAgNENDQTc3RTggICBKQUxTIHhUYXNrR2V0VGlja0NvdW50CkJGRDA3RTY4ICAgICAgNENDQSAgIEFERElVIEEyLCBBMiwgNQpCRkQwN0U2QSAgICAgIDBDMDAgICBOT1AKQkZEMDdFNkMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQoyNTM6ICAgICAgICAgICAgICAgICANCjI1NDogICAgICAgICAgICAgICAgIAlmb3IoIDs7ICkNCjI1NTogICAgICAgICAgICAgICAgIAl7DQoyNTY6ICAgICAgICAgICAgICAgICAJCS8qIFBsYWNlIHRoaXMgdGFzayBpbiB0aGUgYmxvY2tlZCBzdGF0ZSB1bnRpbCBpdCBpcyB0aW1lIHRvIHJ1biBhZ2Fpbi4NCjI1NzogICAgICAgICAgICAgICAgIAkJVGhlIGJsb2NrIHRpbWUgaXMgc3BlY2lmaWVkIGluIHRpY2tzLCB0aGUgY29uc3RhbnQgdXNlZCBjb252ZXJ0cyB0aWNrcw0KMjU4OiAgICAgICAgICAgICAgICAgCQl0byBtcy4gIFdoaWxlIGluIHRoZSBCbG9ja2VkIHN0YXRlIHRoaXMgdGFzayB3aWxsIG5vdCBjb25zdW1lIGFueSBDUFUNCjI1OTogICAgICAgICAgICAgICAgIAkJdGltZS4gKi8NCjI2MDogICAgICAgICAgICAgICAgIAkJdlRhc2tEZWxheVVudGlsKCAmeE5leHRXYWtlVGltZSwgbWFpblFVRVVFX1NFTkRfRlJFUVVFTkNZX01TICk7DQpCRkQwN0U3MCAgMDAxMDMwNUUgICBBRERJVSBWMCwgUzgsIDE2CkJGRDA3RTc0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA3RTc2ICAwMEM4MzBBMCAgIEFERElVIEExLCBaRVJPLCAyMDAKQkZEMDdFN0EgIDAwMDQ3N0U4ICAgSkFMUyB2VGFza0RlbGF5VW50aWwKQkZEMDdFN0MgIDBDMDAwMDA0ICAgU0xMIFpFUk8sIEEwLCAxCkJGRDA3RTdFICAgICAgMEMwMCAgIE5PUAoyNjE6ICAgICAgICAgICAgICAgICANCjI2MjogICAgICAgICAgICAgICAgIAkJLyogU2VuZCB0byB0aGUgcXVldWUgLSBjYXVzaW5nIHRoZSBxdWV1ZSByZWNlaXZlIHRhc2sgdG8gdW5ibG9jayBhbmQNCjI2MzogICAgICAgICAgICAgICAgIAkJdG9nZ2xlIHRoZSBMRUQuICAwIGlzIHVzZWQgYXMgdGhlIGJsb2NrIHRpbWUgc28gdGhlIHNlbmRpbmcgb3BlcmF0aW9uDQoyNjQ6ICAgICAgICAgICAgICAgICAJCXdpbGwgbm90IGJsb2NrIC0gaXQgc2hvdWxkbid0IG5lZWQgdG8gYmxvY2sgYXMgdGhlIHF1ZXVlIHNob3VsZCBhbHdheXMNCjI2NTogICAgICAgICAgICAgICAgIAkJYmUgZW1wdHkgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29kZS4gKi8NCjI2NjogICAgICAgICAgICAgICAgIAkJeFF1ZXVlU2VuZCggeFF1ZXVlLCAmdWxWYWx1ZVRvU2VuZCwgMFUgKTsNCkJGRDA3RTgwICA4MDcwRkM3QyAgIExXIFYxLCAtMzI2NTYoR1ApCkJGRDA3RTg0ICAwMDE0MzA1RSAgIEFERElVIFYwLCBTOCwgMjAKQkZEMDdFODggICAgICAwQzgzICAgTU9WRSBBMCwgVjEKQkZEMDdFOEEgICAgICAwQ0EyICAgTU9WRSBBMSwgVjAKQkZEMDdFOEMgICAgICAwQ0MwICAgTU9WRSBBMiwgWkVSTwpCRkQwN0U4RSAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPCkJGRDA3RTkwICAwNkEyNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1NlbmQKQkZEMDdFOTIgICAgICAwNkEyICAgQUREVSBBMSwgUzEsIFYwCkJGRDA3RTk0ICAgICAgMEMwMCAgIE5PUAoyNjc6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDdFOTYgICAgICBDRkVDICAgQiAweEJGRDA3RTcwCkJGRDA3RTk4ICAgICAgMEMwMCAgIE5PUAoyNjg6ICAgICAgICAgICAgICAgICB9DQoyNjk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI3MDogICAgICAgICAgICAgICAgIA0KMjcxOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UXVldWVSZWNlaXZlVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCjI3MjogICAgICAgICAgICAgICAgIHsNCkJGRDA4MDkwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4MDkyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDgwOTQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODA5NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwODA5OCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpCjI3MzogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdWxSZWNlaXZlZFZhbHVlOw0KMjc0OiAgICAgICAgICAgICAgICAgDQoyNzU6ICAgICAgICAgICAgICAgICAJLyogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzIGluIHRoZSBjYXNlIHdoZXJlIGNvbmZpZ0FTU0VSVCgpIGlzIG5vdCBkZWZpbmVkLiAqLw0KMjc2OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHB2UGFyYW1ldGVyczsNCjI3NzogICAgICAgICAgICAgICAgIA0KMjc4OiAgICAgICAgICAgICAgICAgCS8qIENoZWNrIHRoZSB0YXNrIHBhcmFtZXRlciBpcyBhcyBleHBlY3RlZC4gKi8NCjI3OTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggKCB1bnNpZ25lZCBsb25nICkgcHZQYXJhbWV0ZXJzICkgPT0gbWFpblFVRVVFX1JFQ0VJVkVfUEFSQU1FVEVSICk7DQpCRkQwODA5QyAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpCkJGRDA4MEEwICAgICAgRUQyMiAgIExJIFYwLCAzNApCRkQwODBBMiAgMDAwRDk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA4MEMwCkJGRDA4MEE0ICAwQzAwMDAwRCAgIFNMTCBaRVJPLCBUNSwgMQpCRkQwODBBNiAgICAgIDBDMDAgICBOT1AKQkZEMDgwQTggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDEKQkZEMDgwQUEgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQpCRkQwODBBQyAgOUVGNDMwODIgICBBRERJVSBBMCwgVjAsIC0yNDg0NApCRkQwODBBRSAgMzBBMDlFRjQgICBMV0MxIEYyMywgMTI0NDgoUzQpCkJGRDA4MEIwICAwMTE3MzBBMCAgIEFERElVIEExLCBaRVJPLCAyNzkKQkZEMDgwQjQgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkCkJGRDA4MEI2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApCkJGRDA4MEI4ICAgICAgMEMwMCAgIE5PUApCRkQwODBCQSAgICAgIENDMDIgICBCIDB4QkZEMDgwQzAKQkZEMDgwQkMgICAgICAwQzAwICAgTk9QCjI4MDogICAgICAgICAgICAgICAgIA0KMjgxOiAgICAgICAgICAgICAgICAgCWZvciggOzsgKQ0KMjgyOiAgICAgICAgICAgICAgICAgCXsNCjI4MzogICAgICAgICAgICAgICAgIAkJLyogV2FpdCB1bnRpbCBzb21ldGhpbmcgYXJyaXZlcyBpbiB0aGUgcXVldWUgLSB0aGlzIHRhc2sgd2lsbCBibG9jaw0KMjg0OiAgICAgICAgICAgICAgICAgCQlpbmRlZmluaXRlbHkgcHJvdmlkZWQgSU5DTFVERV92VGFza1N1c3BlbmQgaXMgc2V0IHRvIDEgaW4NCjI4NTogICAgICAgICAgICAgICAgIAkJRnJlZVJUT1NDb25maWcuaC4gKi8NCjI4NjogICAgICAgICAgICAgICAgIAkJeFF1ZXVlUmVjZWl2ZSggeFF1ZXVlLCAmdWxSZWNlaXZlZFZhbHVlLCBwb3J0TUFYX0RFTEFZICk7DQpCRkQwODBDMCAgODA3MEZDNUMgICBMVyBWMCwgLTMyNjU2KEdQKQpCRkQwODBDNCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwODBDNiAgMDAxMDMwNUUgICBBRERJVSBWMCwgUzgsIDE2CkJGRDA4MENBICAgICAgMENBMiAgIE1PVkUgQTEsIFYwCkJGRDA4MENDICAgICAgRUY3RiAgIExJIEEyLCAtMQpCRkQwODBDRSAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPCkJGRDA4MEQwICAwODFFNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1JlY2VpdmUKQkZEMDgwRDIgICAgICAwODFFICAgTEJVIFMwLCAxNChTMSkKQkZEMDgwRDQgICAgICAwQzAwICAgTk9QCjI4NzogICAgICAgICAgICAgICAgIA0KMjg4OiAgICAgICAgICAgICAgICAgCQkvKiAgVG8gZ2V0IGhlcmUgc29tZXRoaW5nIG11c3QgaGF2ZSBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlLCBidXQNCjI4OTogICAgICAgICAgICAgICAgIAkJaXMgaXQgdGhlIGV4cGVjdGVkIHZhbHVlPyAgSWYgaXQgaXMsIHRvZ2dsZSB0aGUgTEVELiAqLw0KMjkwOiAgICAgICAgICAgICAgICAgCQlpZiggdWxSZWNlaXZlZFZhbHVlID09IDEwMFVMICkNCkJGRDA4MEQ2ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDgwREEgICAgICBFRDY0ICAgTEkgVjAsIDEwMApCRkQwODBEQyAgRkZFRkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA4MEJFCkJGRDA4MERFICAwQzAwRkZFRiAgIExXIFJBLCAzMDcyKFQ3KQpCRkQwODBFMCAgICAgIDBDMDAgICBOT1AKMjkxOiAgICAgICAgICAgICAgICAgCQl7DQoyOTI6ICAgICAgICAgICAgICAgICAJCQlwcnZUb2dnbGVMRUQoIG1haW5UQVNLU19MRUQgKTsNCkJGRDA4MEUyICAgICAgMEM4MCAgIE1PVkUgQTAsIFpFUk8KQkZEMDgwRTQgIDRDM0M3N0U4ICAgSkFMUyBwcnZUb2dnbGVMRUQKQkZEMDgwRTYgICAgICA0QzNDICAgQURESVUgQVQsIEFULCAtMgpCRkQwODBFOCAgICAgIDBDMDAgICBOT1AKMjkzOiAgICAgICAgICAgICAgICAgCQkJdWxSZWNlaXZlZFZhbHVlID0gMFU7DQpCRkQwODBFQSAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKMjk0OiAgICAgICAgICAgICAgICAgCQl9DQoyOTU6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDgwQkUgICAgICAwQzAwICAgTk9QCkJGRDA4MEVFICAgICAgQ0ZFOCAgIEIgMHhCRkQwODBDMApCRkQwODBGMCAgICAgIDBDMDAgICBOT1AKMjk2OiAgICAgICAgICAgICAgICAgfQ0KMjk3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyOTg6ICAgICAgICAgICAgICAgICANCjI5OTogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkJsaW5reVRpbWVyQ2FsbGJhY2soIFRpbWVySGFuZGxlX3QgeFRpbWVyICkNCjMwMDogICAgICAgICAgICAgICAgIHsNCkJGRDA5REFDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5REFFICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDlEQjAgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOURCMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOURCNCAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpCjMwMTogICAgICAgICAgICAgICAgIAkvKiBBdm9pZCBjb21waWxlciB3YXJuaW5ncy4gKi8NCjMwMjogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB4VGltZXI7DQozMDM6ICAgICAgICAgICAgICAgICANCjMwNDogICAgICAgICAgICAgICAgIAkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBibGlua3kgc29mdHdhcmUgdGltZSBleHBpcmVzLiAgQWxsIHRoZQ0KMzA1OiAgICAgICAgICAgICAgICAgCWZ1bmN0aW9uIGRvZXMgaXMgdG9nZ2xlIHRoZSBMRUQuICBMRUQgbWFpblRJTUVSX0xFRCBzaG91bGQgdGhlcmVmb3JlIHRvZ2dsZQ0KMzA2OiAgICAgICAgICAgICAgICAgCXdpdGggdGhlIHBlcmlvZCBzZXQgYnkgbWFpbkJMSU5LWV9USU1FUl9QRVJJT0QuICovDQozMDc6ICAgICAgICAgICAgICAgICAJcHJ2VG9nZ2xlTEVEKCBtYWluVElNRVJfTEVEICk7DQpCRkQwOURCOCAgICAgIEVFMDEgICBMSSBBMCwgMQpCRkQwOURCQSAgNEMzQzc3RTggICBKQUxTIHBydlRvZ2dsZUxFRApCRkQwOURCQyAgICAgIDRDM0MgICBBRERJVSBBVCwgQVQsIC0yCkJGRDA5REJFICAgICAgMEMwMCAgIE5PUAozMDg6ICAgICAgICAgICAgICAgICB9DQpCRkQwOURDMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOURDMiAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA5REM0ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDlEQzYgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwOURDOCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5RENBICAgICAgMEMwMCAgIE5PUAozMDk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxMDogICAgICAgICAgICAgICAgIA0KMzExOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2VG9nZ2xlTEVEKCB1aW50OF90IHVjTEVEICkNCjMxMjogICAgICAgICAgICAgICAgIHsNCkJGRDA5ODc4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0CkJGRDA5ODdBICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkKQkZEMDk4N0MgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQpCRkQwOTg3RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTg4MCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMApCRkQwOTg4MiAgMDAxODE4NUUgICBTQiBWMCwgMjQoUzgpCjMxMzogICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA5ODg2ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsCkJGRDA5ODg4ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3MgpCRkQwOTg4QSAgICAgIDBDMDAgICBOT1AKMzE0OiAgICAgICAgICAgICAgICAgCXsNCjMxNTogICAgICAgICAgICAgICAgIAkJbGVkX291dF90b2dnbGUoIHVjTEVEICk7DQpCRkQwOTg4QyAgMDAxODE0NUUgICBMQlUgVjAsIDI0KFM4KQpCRkQwOTg5MCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwOTg5MiAgNDJENDc3RTggICBKQUxTIGxlZF9vdXRfdG9nZ2xlCkJGRDA5ODk2ICAgICAgMEMwMCAgIE5PUAozMTY6ICAgICAgICAgICAgICAgICAJfQ0KMzE3OiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwOTg5OCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsCkJGRDA5ODlBICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDBCMDlFCkJGRDA5ODlDICAgICAgMEMwMCAgIE5PUAozMTg6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTg5RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOThBMCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApCkJGRDA5OEEyICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkKQkZEMDk4QTQgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNApCRkQwOThBNiAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5OEE4ICAgICAgMEMwMCAgIE5PUAozMTk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMyMDogICAgICAgICAgICAgICAgIA0KMzIxOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2U2V0dXBIYXJkd2FyZSggdm9pZCApDQozMjI6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTg5MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwNTg5MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA1ODk0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDU4OTYgICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzIzOiAgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgdWxUZW1wOw0KMzI0OiAgICAgICAgICAgICAgICAgDQozMjU6ICAgICAgICAgICAgICAgICAJLyogSW50ZXJydXB0cyBhcmUgYXV0b21hdGljYWxseSByZS1lbmFibGVkIHdoZW4gdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLiAqLw0KMzI2OiAgICAgICAgICAgICAgICAgCV9fYXNtIHZvbGF0aWxlKCAiZGkiICk7DQpCRkQwNTg5OCAgNDc3QzAwMDAgICBESSBaRVJPCjMyNzogICAgICAgICAgICAgICAgIA0KMzI4OiAgICAgICAgICAgICAgICAgCS8qIEVuYWJsZSBNMTRLIFZlY3RvciBQcmUtZmV0Y2g6IENQMC5JbnRDdGwgYlsyMl09MQ0KMzI5OiAgICAgICAgICAgICAgICAgCSAgIElSRVQgKGludGVycnVwdCBjaGFpbmluZyk6IGJbMjFdPTENCjMzMDogICAgICAgICAgICAgICAgIAkgICBFbmFibGUgQXV0by1Qcm9sb2c6IGJbMTRdPTEgKi8NCjMzMTogICAgICAgICAgICAgICAgIAl1bFRlbXAgPSBfQ1AwX0dFVF9JTlRDVEwoKTsNCkJGRDA1ODlDICAwOEZDMDA0QyAgIE1GQzAgVjAsIEludEN0bApCRkQwNTg5RSAgICAgIDA4RkMgICBMQlUgUzEsIDEyKEEzKQpCRkQwNThBMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCjMzMjogICAgICAgICAgICAgICAgIAl1bFRlbXAgfD0gKCAxdWwgPDwgMjIgKSArICggMXVsIDw8IDIxICkgKyAoIDF1bCA8PCAxNCApOw0KQkZEMDU4QTQgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwNThBOCAgMDA2MDQxQTIgICBMVUkgVjAsIDB4NjAKQkZEMDU4QUMgIDQwMDA1MDQyICAgT1JJIFYwLCBWMCwgMTYzODQKQkZEMDU4QUUgIDQ0RDM0MDAwICAgQkxUWiBaRVJPLCAweEJGRDBFMjU4CkJGRDA1OEIwICAgICAgNDREMyAgIE9SMTYgVjAsIFYxCkJGRDA1OEIyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKMzMzOiAgICAgICAgICAgICAgICAgCV9DUDBfU0VUX0lOVENUTCggdWxUZW1wICk7DQpCRkQwNThCNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OEI4ICAwMDRDMDAxMCAgIElOUyBaRVJPLCBTMCwgMSwgMApCRkQwNThCQSAgMEFGQzAwNEMgICBNVEMwIFYwLCBJbnRDdGwKQkZEMDU4QkMgICAgICAwQUZDICAgTEJVIEExLCAxMihBMykKQkZEMDU4QkUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMKQkZEMDU4QzAgIDQxQTIxODAwICAgU0IgWkVSTywgMTY4MDIoWkVSTykKMzM0OiAgICAgICAgICAgICAgICAgDQozMzU6ICAgICAgICAgICAgICAgICAJLyogQ29uZmlndXJlIDMyS0h6IGZvciBTd2l0Y2hlZCBDbG9jayBTb3VyY2UgYWx3YXlzIE9ODQozMzY6ICAgICAgICAgICAgICAgICAJICAgYlsgMCBdID0gWE9TRUwgICAgICAgICAgICAgICAgICAgICA9IDENCjMzNzogICAgICAgICAgICAgICAgIAkgICBiWyAxIF0gPSBFWFRfMzJLX09TQ19FTiAgICAgICAgICAgID0gMQ0KMzM4OiAgICAgICAgICAgICAgICAgCSAgIGJbIDIgXSA9IElOVF8zMktfT1NDX0VOICAgICAgICAgICAgPSAxDQozMzk6ICAgICAgICAgICAgICAgICAJICAgYlsgMyBdID0gSU5UXzMyS19WVFJfUFdSX1dFTExfRU1VTCA9IDANCjM0MDogICAgICAgICAgICAgICAgIAkgICBiWyA0IF0gPSAzMktfU1dJVENIRVJfQ1RSTCAgICAgICAgID0gMCAqLw0KMzQxOiAgICAgICAgICAgICAgICAgCVZCQVRfUkVHUy0+Q0xPQ0tfRU5BQkxFID0gMHgwNzsNCkJGRDA1OEMyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwCkJGRDA1OEM2ICBBNDAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yMzU1MgpCRkQwNThDQSAgICAgIEVEODcgICBMSSBWMSwgNwpCRkQwNThDQyAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkKMzQyOiAgICAgICAgICAgICAgICAgDQozNDM6ICAgICAgICAgICAgICAgICAJdWxUZW1wID0gMjU2Ow0KQkZEMDU4Q0UgIDAxMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDI1NgozNDQ6ICAgICAgICAgICAgICAgICAJd2hpbGUgKHVsVGVtcC0tKQ0KQkZEMDU4RDIgICAgICBDQzA2ICAgQiAweEJGRDA1OEUwCkJGRDA1OEQ0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDU4RDYgIDBDMDAwMDEwICAgU0xMIFpFUk8sIFMwLCAxCkJGRDA1OEUwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDU4RTIgIDAwNDAwMDEwICAgU1JMIFpFUk8sIFMwLCAwCkJGRDA1OEU0ICAxQjkwMDA0MCAgIFNMVFUgVjEsIFpFUk8sIFYwCkJGRDA1OEU2ICAyREJEMUI5MCAgIFNCIEdQLCAxMTcwOShTMCkKQkZEMDU4RTggICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYKQkZEMDU4RUEgICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQpCRkQwNThFQyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA1OEYwICBGRkYyNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1OEQ4CkJGRDA1OEYyICA0MUEyRkZGMiAgIExXIFJBLCAxNjgwMihTMikKMzQ1OiAgICAgICAgICAgICAgICAgCXsNCjM0NjogICAgICAgICAgICAgICAgIAkJX19hc20gdm9sYXRpbGUoICJOT1AiICk7DQpCRkQwNThEOCAgICAgIDBDMDAgICBOT1AKMzQ3OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA1OERBICAgICAgMEMwMCAgIE5PUAozNDg6ICAgICAgICAgICAgICAgICAJCV9fYXNtIHZvbGF0aWxlKCAiTk9QIiApOw0KQkZEMDU4REMgICAgICAwQzAwICAgTk9QCjM0OTogICAgICAgICAgICAgICAgIAkJX19hc20gdm9sYXRpbGUoICJOT1AiICk7DQpCRkQwNThERSAgICAgIDBDMDAgICBOT1AKMzUwOiAgICAgICAgICAgICAgICAgCX0NCjM1MTogICAgICAgICAgICAgICAgIA0KMzUyOiAgICAgICAgICAgICAgICAgCS8qIERpc2FnZ3JlZ2F0ZSBHSVJRMjMgJiBHSVJRMjQgZm9yIEZyZWVSVE9TLiAgU2Vjb25kIHBhcmFtZXRlciBpcyBhIGJpdC1tYXANCjM1MzogICAgICAgICAgICAgICAgIAlmb3IgZWFjaCBHSVJRIHdoZXJlDQozNTQ6ICAgICAgICAgICAgICAgICAJICAwID0gQWdncmVnYXRlZCwgMSA9IERpcy1hZ2dyZWdhdGUNCjM1NTogICAgICAgICAgICAgICAgIAkgIEJpdCBwb3NpdGlvbiA9IEdJUlFfTnVtYmVyIC0gOA0KMzU2OiAgICAgICAgICAgICAgICAgCSAgRXhhbXBsZTogR0lSUTIzICggMjMgLSA4ICkgPSAxNQ0KMzU3OiAgICAgICAgICAgICAgICAgCSAgRGlzLWFnZ3JlZ2F0ZSBHSVJRMjMgJiBHSVJRMjQNCjM1ODogICAgICAgICAgICAgICAgIAkgIFRoZSBzeW1ib2xzIEpUVklDX0RJU0FHUl9CSVRNQVAgaXMgZ2VuZXJhdGVkIGluIGhlYWRlciBmaWxlIG1lYzE0eHhfZ2lycW0uaA0KMzU5OiAgICAgICAgICAgICAgICAgDQozNjA6ICAgICAgICAgICAgICAgICAJICBFYWNoIGRpc2FnZ3JlZ2F0ZWQgaW50ZXJydXB0IGhhbmRsZXIgaXMgc3BhY2VkIDgtYnl0ZXMgYXBhcnQgc3RhcnRpbmcgYXQNCjM2MTogICAgICAgICAgICAgICAgIAkgIGJhc2UgYWRkcmVzcyBmb3IgdGhhdCBHSVJRLiAqLw0KMzYyOiAgICAgICAgICAgICAgICAgCWp0dmljX2luaXQoIGRmbHRfaWhfdGFibGUsICggSlRWSUNfRElTQUdSX0JJVE1BUCApLCAoIEpUVklDX0ZMQUdfRElTQUdSX1NQQUNJTkdfOCApICk7DQpCRkQwNThGNCAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMApCRkQwNThGNiAgMzA4MkJGRDAgICBMREMxIEYzMCwgMTI0MTgoUzApCkJGRDA1OEY4ICAyNkYwMzA4MiAgIEFERElVIEEwLCBWMCwgOTk2OApCRkQwNThGQSAgICAgIDI2RjAgICBTTEwgQTEsIEEzLCA4CkJGRDA1OEZDICAwMDAxNDFBMiAgIExVSSBWMCwgMHgxCkJGRDA1OTAwICA4MDAwNTBBMiAgIE9SSSBBMSwgVjAsIC0zMjc2OApCRkQwNTkwNCAgMUIyMjc3RTggICBKQUxTIGp0dmljX2luaXQKQkZEMDU5MDYgIDBDQzAxQjIyICAgU0IgVDksIDMyNjQoVjApCkJGRDA1OTA4ICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8KMzYzOiAgICAgICAgICAgICAgICAgDQozNjQ6ICAgICAgICAgICAgICAgICAJLyogSW5pdGlhbGlzZSB0aGUgTEVEcy4gKi8NCjM2NTogICAgICAgICAgICAgICAgIAlmb3IoIHVsVGVtcCA9IDA7IHVsVGVtcCA8IExFRF9JRF9NQVg7IHVsVGVtcCsrICkNCkJGRDA1OTBBICAgICAgQ0MxQSAgIEIgMHhCRkQwNTk0MApCRkQwNTkwQyAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkKQkZEMDU5MzYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwNTkzQSAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDEKQkZEMDU5M0MgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwNTk0MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OTQ0ICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMwpCRkQwNTk0OCAgRkZFMjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTkxMApCRkQwNTk0QSAgMEZCRUZGRTIgICBMVyBSQSwgNDAzMChWMCkKMzY2OiAgICAgICAgICAgICAgICAgCXsNCjM2NzogICAgICAgICAgICAgICAgIAkJbGVkX3NsZWVwX2VuKCB1bFRlbXAsIEFESVNBQkxFICk7DQpCRkQwNTkxMCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OTE0ICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDA1OTE2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA1OTE4ICAyRTg2NzdFOCAgIEpBTFMgbGVkX3NsZWVwX2VuCkJGRDA1OTFBICAgICAgMkU4NiAgIEFOREkgQTEsIFMwLCAweDgKQkZEMDU5MUMgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTwozNjg6ICAgICAgICAgICAgICAgICAJCWxlZF9pbml0KCB1bFRlbXAgKTsNCkJGRDA1OTFFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkKQkZEMDU5MjIgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYKQkZEMDU5MjQgIDNFN0U3N0U4ICAgSkFMUyBsZWRfaW5pdApCRkQwNTkyNiAgMEM4MjNFN0UgICBMSCBTMywgMzIwMihTOCkKQkZEMDU5MjggICAgICAwQzgyICAgTU9WRSBBMCwgVjAKMzY5OiAgICAgICAgICAgICAgICAgCQlsZWRfb3V0X2xvdyggdWxUZW1wICk7DQpCRkQwNTkyQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA1OTJFICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGCkJGRDA1OTMwICA0QTMwNzdFOCAgIEpBTFMgbGVkX291dF9sb3cKQkZEMDU5MzIgICAgICA0QTMwICAgTFcgUzEsIDY0KFNQKQpCRkQwNTkzNCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMAozNzA6ICAgICAgICAgICAgICAgICAJfQ0KMzcxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDU5NEMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDU5NEUgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQpCRkQwNTk1MCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApCkJGRDA1OTUyICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDU5NTQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMgozNzI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM3MzogICAgICAgICAgICAgICAgIA0KMzc0OiAgICAgICAgICAgICAgICAgdm9pZCB2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCB2b2lkICkNCjM3NTogICAgICAgICAgICAgICAgIHsNCkJGRDA4OTAwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyCkJGRDA4OTAyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkKQkZEMDg5MDQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQpCRkQwODkwNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAozNzY6ICAgICAgICAgICAgICAgICAJLyogdkFwcGxpY2F0aW9uTWFsbG9jRmFpbGVkSG9vaygpIHdpbGwgb25seSBiZSBjYWxsZWQgaWYNCjM3NzogICAgICAgICAgICAgICAgIAljb25maWdVU0VfTUFMTE9DX0ZBSUxFRF9IT09LIGlzIHNldCB0byAxIGluIEZyZWVSVE9TQ29uZmlnLmguICBJdCBpcyBhIGhvb2sNCjM3ODogICAgICAgICAgICAgICAgIAlmdW5jdGlvbiB0aGF0IHdpbGwgZ2V0IGNhbGxlZCBpZiBhIGNhbGwgdG8gcHZQb3J0TWFsbG9jKCkgZmFpbHMuDQozNzk6ICAgICAgICAgICAgICAgICAJcHZQb3J0TWFsbG9jKCkgaXMgY2FsbGVkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCB3aGVuZXZlciBhIHRhc2ssIHF1ZXVlLA0KMzgwOiAgICAgICAgICAgICAgICAgCXRpbWVyIG9yIHNlbWFwaG9yZSBpcyBjcmVhdGVkLiAgSXQgaXMgYWxzbyBjYWxsZWQgYnkgdmFyaW91cyBwYXJ0cyBvZiB0aGUNCjM4MTogICAgICAgICAgICAgICAgIAlkZW1vIGFwcGxpY2F0aW9uLiAgSWYgaGVhcF8xLmMgb3IgaGVhcF8yLmMgYXJlIHVzZWQsIHRoZW4gdGhlIHNpemUgb2YgdGhlDQozODI6ICAgICAgICAgICAgICAgICAJaGVhcCBhdmFpbGFibGUgdG8gcHZQb3J0TWFsbG9jKCkgaXMgZGVmaW5lZCBieSBjb25maWdUT1RBTF9IRUFQX1NJWkUgaW4NCjM4MzogICAgICAgICAgICAgICAgIAlGcmVlUlRPU0NvbmZpZy5oLCBhbmQgdGhlIHhQb3J0R2V0RnJlZUhlYXBTaXplKCkgQVBJIGZ1bmN0aW9uIGNhbiBiZSB1c2VkDQozODQ6ICAgICAgICAgICAgICAgICAJdG8gcXVlcnkgdGhlIHNpemUgb2YgZnJlZSBoZWFwIHNwYWNlIHRoYXQgcmVtYWlucyAoYWx0aG91Z2ggaXQgZG9lcyBub3QNCjM4NTogICAgICAgICAgICAgICAgIAlwcm92aWRlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgcmVtYWluaW5nIGhlYXAgbWlnaHQgYmUgZnJhZ21lbnRlZCkuICovDQozODY6ICAgICAgICAgICAgICAgICAJdGFza0RJU0FCTEVfSU5URVJSVVBUUygpOw0KQkZEMDg5MDggIDRFQjY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBTdGF0dXMKQkZEMDg5MEEgICAgICA0RUI2ICAgQURESVUgUzUsIFM1LCAtNQpCRkQwODkwQyAgICAgIDBDMDAgICBOT1AKQkZEMDg5MEUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwODkxMiAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA4OTE2ICAwMDAxNDFBMiAgIExVSSBWMCwgMHgxCkJGRDA4OTFBICBGQzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xMDI0CkJGRDA4OTFDICA0NDkzRkMwMCAgIExXIFpFUk8sIDE3NTU1KFpFUk8pCkJGRDA4OTFFICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQpCRkQwODkyMCAgNTA0MDAwNDIgICBTUkwgVjAsIFYwLCAxMApCRkQwODkyMiAgQjA0MjUwNDAgICBPUkkgVjAsIFpFUk8sIC0yMDQxNApCRkQwODkyNCAgMDAwM0IwNDIgICBTTFRJVSBWMCwgVjAsIDMKQkZEMDg5MjggIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg5NEUKQkZEMDg5MkMgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQpCRkQwODkzMCAgRkZGRTQxQTIgICBMVUkgVjAsIDB4RkZGRQpCRkQwODkzMiAgNTA0MkZGRkUgICBMVyBSQSwgMjA1NDYoUzgpCkJGRDA4OTM0ICAwM0ZGNTA0MiAgIE9SSSBWMCwgVjAsIDEwMjMKQkZEMDg5MzggICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA4OTNBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkKQkZEMDg5M0UgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQpCRkQwODk0MiAgMEMwMDUwNDIgICBPUkkgVjAsIFYwLCAzMDcyCkJGRDA4OTQ0ICAgICAgMEMwMCAgIE5PUApCRkQwODk0NiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMApCRkQwODk0OCAgNEVDNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwU3RhdHVzCkJGRDA4OTRBICAgICAgNEVDNiAgIEFERElVIFM2LCBTNiwgMwpCRkQwODk0QyAgICAgIDBDMDAgICBOT1AKMzg3OiAgICAgICAgICAgICAgICAgCWZvciggOzsgKTsNCkJGRDA4OTRFICAgICAgQ0ZGRiAgIEIgMHhCRkQwODk0RQpCRkQwODk1MCAgICAgIDBDMDAgICBOT1AKMzg4OiAgICAgICAgICAgICAgICAgfQ0KMzg5OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozOTA6ICAgICAgICAgICAgICAgICANCjM5MTogICAgICAgICAgICAgICAgIHZvaWQgdkFwcGxpY2F0aW9uSWRsZUhvb2soIHZvaWQgKQ0KMzkyOiAgICAgICAgICAgICAgICAgew0KQkZEMDlGMDQgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOApCRkQwOUYwNiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkKQkZEMDlGMDggICAgICAwRkREICAgTU9WRSBTOCwgU1AKMzkzOiAgICAgICAgICAgICAgICAgCS8qIHZBcHBsaWNhdGlvbklkbGVIb29rKCkgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBjb25maWdVU0VfSURMRV9IT09LIGlzIHNldA0KMzk0OiAgICAgICAgICAgICAgICAgCXRvIDEgaW4gRnJlZVJUT1NDb25maWcuaC4gIEl0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBpZGxlDQozOTU6ICAgICAgICAgICAgICAgICAJdGFzay4gIEl0IGlzIGVzc2VudGlhbCB0aGF0IGNvZGUgYWRkZWQgdG8gdGhpcyBob29rIGZ1bmN0aW9uIG5ldmVyIGF0dGVtcHRzDQozOTY6ICAgICAgICAgICAgICAgICAJdG8gYmxvY2sgaW4gYW55IHdheSAoZm9yIGV4YW1wbGUsIGNhbGwgeFF1ZXVlUmVjZWl2ZSgpIHdpdGggYSBibG9jayB0aW1lDQozOTc6ICAgICAgICAgICAgICAgICAJc3BlY2lmaWVkLCBvciBjYWxsIHZUYXNrRGVsYXkoKSkuICBJZiB0aGUgYXBwbGljYXRpb24gbWFrZXMgdXNlIG9mIHRoZQ0KMzk4OiAgICAgICAgICAgICAgICAgCXZUYXNrRGVsZXRlKCkgQVBJIGZ1bmN0aW9uIChhcyB0aGlzIGRlbW8gYXBwbGljYXRpb24gZG9lcykgdGhlbiBpdCBpcyBhbHNvDQozOTk6ICAgICAgICAgICAgICAgICAJaW1wb3J0YW50IHRoYXQgdkFwcGxpY2F0aW9uSWRsZUhvb2soKSBpcyBwZXJtaXR0ZWQgdG8gcmV0dXJuIHRvIGl0cyBjYWxsaW5nDQo0MDA6ICAgICAgICAgICAgICAgICAJZnVuY3Rpb24sIGJlY2F1c2UgaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBpZGxlIHRhc2sgdG8gY2xlYW4gdXANCjQwMTogICAgICAgICAgICAgICAgIAltZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBrZXJuZWwgdG8gYW55IHRhc2sgdGhhdCBoYXMgc2luY2UgYmVlbiBkZWxldGVkLiAqLw0KNDAyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlGMEEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgKQkZEMDlGMEMgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApCkJGRDA5RjBFICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOApCRkQwOUYxMCAgICAgIDQ1OUYgICBKUjE2IFJBCkJGRDA5RjEyICAgICAgMEMwMCAgIE5PUAo0MDM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQwNDogICAgICAgICAgICAgICAgIA0KNDA1OiAgICAgICAgICAgICAgICAgdm9pZCB2QXBwbGljYXRpb25TdGFja092ZXJmbG93SG9vayggVGFza0hhbmRsZV90IHB4VGFzaywgY2hhciAqcGNUYXNrTmFtZSApDQo0MDY6ICAgICAgICAgICAgICAgICB7DQpCRkQwODQ0NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMgpCRkQwODQ0NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApCkJGRDA4NDQ4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkKQkZEMDg0NEEgICAgICAwRkREICAgTU9WRSBTOCwgU1AKQkZEMDg0NEMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQpCRkQwODQ1MCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpCjQwNzogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSBwY1Rhc2tOYW1lOw0KNDA4OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHB4VGFzazsNCjQwOTogICAgICAgICAgICAgICAgIA0KNDEwOiAgICAgICAgICAgICAgICAgCS8qIFJ1biB0aW1lIHRhc2sgc3RhY2sgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgcGVyZm9ybWVkIGlmDQo0MTE6ICAgICAgICAgICAgICAgICAJY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIGlzIGRlZmluZWQgdG8gMSBvciAyLiAgVGhpcyBob29rCWZ1bmN0aW9uIGlzDQo0MTI6ICAgICAgICAgICAgICAgICAJY2FsbGVkIGlmIGEgdGFzayBzdGFjayBvdmVyZmxvdyBpcyBkZXRlY3RlZC4gIE5vdGUgdGhlIHN5c3RlbS9pbnRlcnJ1cHQNCjQxMzogICAgICAgICAgICAgICAgIAlzdGFjayBpcyBub3QgY2hlY2tlZC4gKi8NCjQxNDogICAgICAgICAgICAgICAgIAl0YXNrRElTQUJMRV9JTlRFUlJVUFRTKCk7DQpCRkQwODQ1NCAgNEVCNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cwpCRkQwODQ1NiAgICAgIDRFQjYgICBBRERJVSBTNSwgUzUsIC01CkJGRDA4NDU4ICAgICAgMEMwMCAgIE5PUApCRkQwODQ1QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpCkJGRDA4NDVFICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkKQkZEMDg0NjIgIDAwMDE0MUEyICAgTFVJIFYwLCAweDEKQkZEMDg0NjYgIEZDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTEwMjQKQkZEMDg0NjggIDQ0OTNGQzAwICAgTFcgWkVSTywgMTc1NTUoWkVSTykKQkZEMDg0NkEgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxCkJGRDA4NDZDICA1MDQwMDA0MiAgIFNSTCBWMCwgVjAsIDEwCkJGRDA4NDZFICBCMDQyNTA0MCAgIE9SSSBWMCwgWkVSTywgLTIwNDE0CkJGRDA4NDcwICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMwpCRkQwODQ3NCAgMDAxMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODQ5QQpCRkQwODQ3OCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpCkJGRDA4NDdDICBGRkZFNDFBMiAgIExVSSBWMCwgMHhGRkZFCkJGRDA4NDdFICA1MDQyRkZGRSAgIExXIFJBLCAyMDU0NihTOCkKQkZEMDg0ODAgIDAzRkY1MDQyICAgT1JJIFYwLCBWMCwgMTAyMwpCRkQwODQ4NCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjEKQkZEMDg0ODYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQpCRkQwODQ4QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA4NDhFICAwQzAwNTA0MiAgIE9SSSBWMCwgVjAsIDMwNzIKQkZEMDg0OTAgICAgICAwQzAwICAgTk9QCkJGRDA4NDkyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwCkJGRDA4NDk0ICA0RUM2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMKQkZEMDg0OTYgICAgICA0RUM2ICAgQURESVUgUzYsIFM2LCAzCkJGRDA4NDk4ICAgICAgMEMwMCAgIE5PUAo0MTU6ICAgICAgICAgICAgICAgICAJZm9yKCA7OyApOw0KQkZEMDg0OUEgICAgICBDRkZGICAgQiAweEJGRDA4NDlBCkJGRDA4NDlDICAgICAgMEMwMCAgIE5PUAo0MTY6ICAgICAgICAgICAgICAgICB9DQo0MTc6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQxODogICAgICAgICAgICAgICAgIA0KNDE5OiAgICAgICAgICAgICAgICAgdm9pZCB2QXBwbGljYXRpb25UaWNrSG9vayggdm9pZCApDQo0MjA6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUYxNCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04CkJGRDA5RjE2ICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQpCRkQwOUYxOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUAo0MjE6ICAgICAgICAgICAgICAgICAJLyogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBlYWNoIHRpY2sgaW50ZXJydXB0IGlmDQo0MjI6ICAgICAgICAgICAgICAgICAJY29uZmlnVVNFX1RJQ0tfSE9PSyBpcyBzZXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oLiAgVXNlciBjb2RlIGNhbiBiZQ0KNDIzOiAgICAgICAgICAgICAgICAgCWFkZGVkIGhlcmUsIGJ1dCB0aGUgdGljayBob29rIGlzIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LCBzbw0KNDI0OiAgICAgICAgICAgICAgICAgCWNvZGUgbXVzdCBub3QgYXR0ZW1wdCB0byBibG9jaywgYW5kIG9ubHkgdGhlIGludGVycnVwdCBzYWZlIEZyZWVSVE9TIEFQSQ0KNDI1OiAgICAgICAgICAgICAgICAgCWZ1bmN0aW9ucyBjYW4gYmUgdXNlZCAodGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUigpKS4gKi8NCjQyNjogICAgICAgICAgICAgICAgIH0NCkJGRDA5RjFBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4CkJGRDA5RjFDICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQpCRkQwOUYxRSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgKQkZEMDlGMjAgICAgICA0NTlGICAgSlIxNiBSQQpCRkQwOUYyMiAgICAgIDBDMDAgICBOT1AKNDI3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0Mjg6ICAgICAgICAgICAgICAgICANCjQyOTogICAgICAgICAgICAgICAgIHZvaWQgdkFzc2VydENhbGxlZCggY29uc3QgY2hhciAqIHBjRmlsZSwgdW5zaWduZWQgbG9uZyB1bExpbmUgKQ0KNDMwOiAgICAgICAgICAgICAgICAgew0KQkZEMDk2RkMgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYKQkZEMDk2RkUgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQpCRkQwOTcwMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUApCRkQwOTcwMiAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpCkJGRDA5NzA2ICAwMDE0RjhCRSAgIFNXIEExLCAyMChTOCkKNDMxOiAgICAgICAgICAgICAgICAgdm9sYXRpbGUgY2hhciAqcGNGaWxlTmFtZTsNCjQzMjogICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxMaW5lTnVtYmVyOw0KNDMzOiAgICAgICAgICAgICAgICAgDQo0MzQ6ICAgICAgICAgICAgICAgICAJLyogUHJldmVudCB0aGluZ3MgdGhhdCBhcmUgdXNlZnVsIHRvIHZpZXcgaW4gdGhlIGRlYnVnZ2VyIGZyb20gYmVpbmcNCjQzNTogICAgICAgICAgICAgICAgIAlvcHRpbWlzZWQgYXdheS4gKi8NCjQzNjogICAgICAgICAgICAgICAgIAlwY0ZpbGVOYW1lID0gKCBjaGFyICogKSBwY0ZpbGU7DQpCRkQwOTcwQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpCkJGRDA5NzBFICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQo0Mzc6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgcGNGaWxlTmFtZTsNCjQzODogICAgICAgICAgICAgICAgIAl1bExpbmVOdW1iZXIgPSB1bExpbmU7DQpCRkQwOTcxMiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpCkJGRDA5NzE2ICAwMDA0Rjg1RSAgIFNXIFYwLCA0KFM4KQo0Mzk6ICAgICAgICAgICAgICAgICANCjQ0MDogICAgICAgICAgICAgICAgIAkvKiBTZXQgdWxMaW5lTnVtYmVyIHRvIDAgaW4gdGhlIGRlYnVnZ2VyIHRvIGJyZWFrIG91dCBvZiB0aGlzIGxvb3AgYW5kDQo0NDE6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHRvIHRoZSBsaW5lIHRoYXQgdHJpZ2dlcmVkIHRoZSBhc3NlcnQuICovDQo0NDI6ICAgICAgICAgICAgICAgICAJd2hpbGUoIHVsTGluZU51bWJlciAhPSAwICkNCkJGRDA5NzFBICAgICAgQ0MwNiAgIEIgMHhCRkQwOTcyOApCRkQwOTcxQyAgICAgIDBDMDAgICBOT1AKQkZEMDk3MjggIDAwMDRGQzVFICAgTFcgVjAsIDQoUzgpCkJGRDA5NzJDICBGRkY3NDBBMiAgIEJORVpDIFYwLCAweEJGRDA5NzFFCkJGRDA5NzJFICAwRkJFRkZGNyAgIExXIFJBLCA0MDMwKFM3KQo0NDM6ICAgICAgICAgICAgICAgICAJew0KNDQ0OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NzFFICAgICAgMEMwMCAgIE5PUAo0NDU6ICAgICAgICAgICAgICAgICAJCV9fYXNtIHZvbGF0aWxlKCAiTk9QIiApOw0KQkZEMDk3MjAgICAgICAwQzAwICAgTk9QCjQ0NjogICAgICAgICAgICAgICAgIAkJX19hc20gdm9sYXRpbGUoICJOT1AiICk7DQpCRkQwOTcyMiAgICAgIDBDMDAgICBOT1AKNDQ3OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NzI0ICAgICAgMEMwMCAgIE5PUAo0NDg6ICAgICAgICAgICAgICAgICAJCV9fYXNtIHZvbGF0aWxlKCAiTk9QIiApOw0KQkZEMDk3MjYgICAgICAwQzAwICAgTk9QCjQ0OTogICAgICAgICAgICAgICAgIAl9DQo0NTA6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTczMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOApCRkQwOTczMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApCkJGRDA5NzM0ICAgICAgNDU5RiAgIEpSMTYgUkEKQkZEMDk3MzYgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNgo0NTE6ICAgICAgICAgICAgICAgICANCi0tLSAgQzovRS9EZXYvRnJlZVJUT1MvV29ya2luZ0NvcHkvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzMyTUVDMTR4eC9wb3J0X2FzbS5TICAtLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6ICAgICAvKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOiAgICAgICAgIEZyZWVSVE9TIFY4LjIuMSAtIENvcHlyaWdodCAoQykgMjAxNSBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzogICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogICAgICAgICBWSVNJVCBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBUTyBFTlNVUkUgWU9VIEFSRSBVU0lORyBUSEUgTEFURVNUIFZFUlNJT04uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6ICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzogICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6ICAgICAgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDogICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA+PiFBTkQgTU9ESUZJRUQgQlkhPDwgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzogICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgICAgID4+ISAgIE5PVEU6IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8gICAgICE8PA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogICAgICAgID4+ISAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyAgICE8PA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjogICAgICAgID4+ISAgIG9ibGlnZWQgdG8gcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgICAgICE8PA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzogICAgICAgID4+ISAgIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TIGtlcm5lbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE8PA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAgICAgICAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgICAgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEZ1bGwgbGljZW5zZSB0ZXh0IGlzIGF2YWlsYWJsZSBvbiB0aGUgZm9sbG93aW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzOiAgICAgICAgbGluazogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTogICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjogICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OiAgICAgICAgICogICAgRnJlZVJUT1MgcHJvdmlkZXMgY29tcGxldGVseSBmcmVlIHlldCBwcm9mZXNzaW9uYWxseSBkZXZlbG9wZWQsICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg6ICAgICAgICAgKiAgICByb2J1c3QsIHN0cmljdGx5IHF1YWxpdHkgY29udHJvbGxlZCwgc3VwcG9ydGVkLCBhbmQgY3Jvc3MgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTogICAgICAgICAqICAgIHBsYXRmb3JtIHNvZnR3YXJlIHRoYXQgaXMgbW9yZSB0aGFuIGp1c3QgdGhlIG1hcmtldCBsZWFkZXIsIGl0ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwOiAgICAgICAgICogICAgaXMgdGhlIGluZHVzdHJ5J3MgZGUgZmFjdG8gc3RhbmRhcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjogICAgICAgICAqICAgIEhlbHAgeW91cnNlbGYgZ2V0IHN0YXJ0ZWQgcXVpY2tseSB3aGlsZSBzaW11bHRhbmVvdXNseSBoZWxwaW5nICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzOiAgICAgICAgICogICAgdG8gc3VwcG9ydCB0aGUgRnJlZVJUT1MgcHJvamVjdCBieSBwdXJjaGFzaW5nIGEgRnJlZVJUT1MgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQ6ICAgICAgICAgKiAgICB0dXRvcmlhbCBib29rLCByZWZlcmVuY2UgbWFudWFsLCBvciBib3RoOiAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc6ICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTogICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAtIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwOiAgICAgICAgdGhlIEZBUSBwYWdlICJNeSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/Ii4gIEhhdmUgeW91DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxOiAgICAgICAgZGVmaW5lZCBjb25maWdBU1NFUlQoKT8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzogICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3N1cHBvcnQgLSBJbiByZXR1cm4gZm9yIHJlY2VpdmluZyB0aGlzIHRvcCBxdWFsaXR5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0OiAgICAgICAgZW1iZWRkZWQgc29mdHdhcmUgZm9yIGZyZWUgd2UgcmVxdWVzdCB5b3UgYXNzaXN0IG91ciBnbG9iYWwgY29tbXVuaXR5IGJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1OiAgICAgICAgcGFydGljaXBhdGluZyBpbiB0aGUgc3VwcG9ydCBmb3J1bS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDY6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzogICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3RyYWluaW5nIC0gSW52ZXN0aW5nIGluIHRyYWluaW5nIGFsbG93cyB5b3VyIHRlYW0gdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg6ICAgICAgICBiZSBhcyBwcm9kdWN0aXZlIGFzIHBvc3NpYmxlIGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAgTm93IHlvdSBjYW4gcmVjZWl2ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTogICAgICAgIEZyZWVSVE9TIHRyYWluaW5nIGRpcmVjdGx5IGZyb20gUmljaGFyZCBCYXJyeSwgQ0VPIG9mIFJlYWwgVGltZSBFbmdpbmVlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA6ICAgICAgICBMdGQsIGFuZCB0aGUgd29ybGQncyBsZWFkaW5nIGF1dGhvcml0eSBvbiB0aGUgd29ybGQncyBsZWFkaW5nIFJUT1MuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI6ICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzogICAgICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wsIGEgRE9TDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0OiAgICAgICAgY29tcGF0aWJsZSBGQVQgZmlsZSBzeXN0ZW0sIGFuZCBvdXIgdGlueSB0aHJlYWQgYXdhcmUgVURQL0lQIHN0YWNrLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2OiAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvbGFicyAtIFdoZXJlIG5ldyBGcmVlUlRPUyBwcm9kdWN0cyBnbyB0byBpbmN1YmF0ZS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc6ICAgICAgICBDb21lIGFuZCB0cnkgRnJlZVJUT1MrVENQLCBvdXIgbmV3IG9wZW4gc291cmNlIFRDUC9JUCBzdGFjayBmb3IgRnJlZVJUT1MuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTk6ICAgICAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkLiBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2gNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA6ICAgICAgICBJbnRlZ3JpdHkgU3lzdGVtcyBsdGQuIHRvIHNlbGwgdW5kZXIgdGhlIE9wZW5SVE9TIGJyYW5kLiAgTG93IGNvc3QgT3BlblJUT1MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjE6ICAgICAgICBsaWNlbnNlcyBvZmZlciB0aWNrZXRlZCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24gYW5kIGNvbW1lcmNpYWwgbWlkZGxld2FyZS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MzogICAgICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvIHByb3ZpZGUgYSBzYWZldHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQ6ICAgICAgICBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gZm9yIHVzZSBpbiBzYWZldHkgYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1OiAgICAgICAgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIHByb3ZhYmxlIGRlcGVuZGFiaWxpdHkuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY2OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjc6ICAgICAgICAxIHRhYiA9PSA0IHNwYWNlcyENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjg6ICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzA6ICAgICNpbmNsdWRlIDx4Yy5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MTogICAgI2luY2x1ZGUgPHN5cy9hc20uaD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzI6ICAgICNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MzogICAgI2luY2x1ZGUgIklTUl9TdXBwb3J0LmgiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzU6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NjogICAgCS5leHRlcm4gcHhDdXJyZW50VENCDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc3OiAgICAJLmV4dGVybiB2VGFza1N3aXRjaENvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzg6ICAgIAkuZXh0ZXJuIHZQb3J0SW5jcmVtZW50VGljaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OTogICAgCS5leHRlcm4geElTUlN0YWNrVG9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODE6ICAgIAlQT1JUX0NQUF9KVFZJQ19CQVNFID0gMHhCRkZGQzAwMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MjogICAgCVBPUlRfQ0NQX0pUVklDX0dJUlEyNF9TUkMgPSAweEJGRkZDMTAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgzOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQ6ICAgIAkuZ2xvYmFsIHZQb3J0U3RhcnRGaXJzdFRhc2sgLnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODU6ICAgIAkuZ2xvYmFsIHZQb3J0WWllbGRJU1IgLnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODY6ICAgIAkuZ2xvYmFsIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXIgLnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODc6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ODogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5OiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkxOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTI6ICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTM6ICAgICogIFRoZSBmb2xsb3dpbmcgaXMgbmVlZGVkIHRvIGxvY2F0ZSB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTQ6ICAgICogIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXIgZnVuY3Rpb24gaW50byB0aGUgY29ycmVjdCB2ZWN0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTU6ICAgICogIE1FQzE0eHggLSBUaGlzIElTUiB3aWxsIG9ubHkgYmUgdXNlZCBpZiBIVyB0aW1lcnMnIGludGVycnVwdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTY6ICAgICogIGluIEdJUlEyMyBhcmUgZGlzYWdncmVnYXRlZC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTc6ICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTg6ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDA6ICAgCS5zZXQgIG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDE6ICAgCS5zZXQgIG5vYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyOiAgIAkuc2V0ICBtaWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQ6ICAgCS5zZWN0aW9uIC50ZXh0LCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNTogICAJLmVudCAgICB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3OiAgICNpZiBjb25maWdUSU1FUlNfRElTQUdHUkVHQVRFRF9JU1JTID09IDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDk6ICAgCS5nbG9ibCBnaXJxMjNfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExOiAgIGdpcnEyM19pc3I6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMjogICB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNDogICAJcG9ydFNBVkVfQ09OVEVYVDIgdnB0aQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTU6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNjogICAJamFsCQlnaXJxMjNfaGFuZGxlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTc6ICAgCW5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOTogICAJcG9ydFJFU1RPUkVfQ09OVEVYVA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMTogICAuZW5kIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjM6ICAgI2Vsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjU6ICAgCS5nbG9ibCBnaXJxMjNfYjQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjc6ICAgZ2lycTIzX2I0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjg6ICAgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI5OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzA6ICAgCS8qICAgIHBvcnRTQVZFX0NPTlRFWFQgICAqLw0KQkZEMDA5MjAgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UgICAgICAgICAgICAgICAxMzE6ICAgCXBvcnRTQVZFX0NPTlRFWFQyIHZwdGkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMyOiAgIA0KQkZEMDA5RjAgIDM0RENGN0U4ICAgSkFMIDB4QkZEMDY5QjggICAgICAgICAgICAgICAxMzM6ICAgCWphbAkJdlBvcnRJbmNyZW1lbnRUaWNrDQpCRkQwMDlGNCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNDogICAJbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNTogICANCkJGRDAwOUY4ICBCRkQyNDFCNiAgIExVSSBTNiwgMHhCRkQyICAgICAgICAgICAgICAgMTM2OiAgIAlwb3J0UkVTVE9SRV9DT05URVhUDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM4OiAgIC5lbmQgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzk6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MDogICAjZW5kaWYgLyogI2lmIGNvbmZpZ1RJTUVSU19ESVNBR0dSRUdBVEVEX0lTUlMgPT0gMCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDE6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MjogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NDogICAJLnNldAltaWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ1OiAgIAkuc2V0CW5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDY6ICAgCS5zZXQJbm9hdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0ODogICAJLnNlY3Rpb24gLnRleHQsIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ5OiAgIAkuZW50CXZQb3J0U3RhcnRGaXJzdFRhc2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTE6ICAgdlBvcnRTdGFydEZpcnN0VGFzazoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTM6ICAgCS8qIFNpbXBseSByZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBoYXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU0OiAgIAliZWVuIGNyZWF0ZWQgc28gZmFyLiAqLw0KQkZEMDBBQjQgIEJGRDI0MUI2ICAgTFVJIFM2LCAweEJGRDIgICAgICAgICAgICAgICAxNTU6ICAgCXBvcnRSRVNUT1JFX0NPTlRFWFQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTc6ICAgLmVuZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1ODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU5OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MTogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjM6ICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjQ6ICAgKiAgVGhlIGZvbGxvd2luZyBpcyBuZWVkZWQgdG8gbG9jYXRlIHRoZSB2UG9ydFlpZWxkSVNSIGZ1bmN0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NTogICAqICBpbnRvIHRoZSBjb3JyZWN0IHZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjY6ICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ODogICAJLnNldCBtaWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY5OiAgIAkuc2V0IG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzA6ICAgCS5zZXQgbm9hdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzE6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MjogICAJLnNlY3Rpb24gLnRleHQsIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTczOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzQ6ICAgCS5nbG9iYWwgdlBvcnRZaWVsZElTUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzU6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc3OiAgICNpZiBjb25maWdDUFVfRElTQUdHUkVHQVRFRF9JU1JTID09IDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc4OiAgIAkuZ2xvYmFsIGdpcnEyNF9pc3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc5OiAgIAkuZW50IGdpcnEyNF9pc3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgwOiAgIGdpcnEyNF9pc3I6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4MTogICAJbGEJCWswLCBQT1JUX0NQUF9KVFZJQ19CQVNFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4MjogICAJbHcJCWswLCAweDEwQyhrMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgzOiAgIAlhbmRpCWsxLCBrMCwgMHgyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NDogICAJYmd0eglrMSwgdlBvcnRZaWVsZElTUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODU6ICAgCW5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NzogICAJcG9ydFNBVkVfQ09OVEVYVA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OTogICAJamFsCQlnaXJxMjRfYl8wXzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTE6ICAgCXBvcnRSRVNUT1JFX0NPTlRFWFQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTM6ICAgCS5lbmQgZ2lycTI0X2lzcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NTogICAjZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTY6ICAgCS5nbG9iYWwgZ2lycTI0X2IxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NzogICBnaXJxMjRfYjE6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5ODogICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk5OiAgIAkJLmVudCAgdlBvcnRZaWVsZElTUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA6ICAgdlBvcnRZaWVsZElTUjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAxOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDI6ICAgCS8qIE1ha2Ugcm9vbSBmb3IgdGhlIGNvbnRleHQuIEZpcnN0IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIHNvIGl0IGNhbiBiZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDM6ICAgCW1hbmlwdWxhdGVkLCBhbmQgdGhlIGNhdXNlIGFuZCBFUEMgcmVnaXN0ZXJzIHNvIHRoaWVyIG9yaWdpbmFsIHZhbHVlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDQ6ICAgCWFyZSBjYXB0dXJlZC4gKi8NCkJGRDAwQjcwICAgICAgNEZCRiAgIEFERElVIFNQLCBTUCwgLTEzMiAgICAgICAgICAgMjA1OiAgIAlhZGRpdSAgIHNwLCBzcCwgLXBvcnRDT05URVhUX1NJWkUNCkJGRDAwQjcyICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cyAgICAgICAgICAgICAgMjA2OiAgIAltZmMwCWsxLCBfQ1AwX1NUQVRVUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwODogICAJLyogQWxzbyBzYXZlIHM2IGFuZCBzNSBzbyB0aGV5IGNhbiBiZSB1c2VkLiAgQW55IG5lc3RpbmcgaW50ZXJydXB0cyBzaG91bGQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA5OiAgIAltYWludGFpbiB0aGUgdmFsdWVzIG9mIHRoZXNlIHJlZ2lzdGVycyBhY3Jvc3MgdGhlIElTUi4gKi8NCkJGRDAwQjc2ICAgICAgQ0FDQiAgIFNXIFM2LCA0NChTUCkgICAgICAgICAgICAgICAgMjEwOiAgIAlzdwkJczYsIDQ0KHNwKQ0KQkZEMDBCNzggICAgICBDQUFBICAgU1cgUzUsIDQwKFNQKSAgICAgICAgICAgICAgICAyMTE6ICAgCXN3CQlzNSwgNDAoc3ApDQpCRkQwMEI3QSAgMDA4MEZCN0QgICBTVyBLMSwgMTI4KFNQKSAgICAgICAgICAgICAgIDIxMjogICAJc3cJCWsxLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNDogICAJLyogUHJlcGFyZSB0byByZS1lbmFibGVkIGludGVycnVwdHMgYWJvdmUgdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCkJGRDAwQjdFICA4MjhDMDM2MCAgIElOUyBLMSwgWkVSTywgMTAsIDcgICAgICAgICAgMjE1OiAgIAlpbnMJCWsxLCB6ZXJvLCAxMCwgNwkJIC8qIENsZWFyIElQTCBiaXRzIDA6Ni4gKi8NCkJGRDAwQjgyICA5NDhDMDM2MCAgIElOUyBLMSwgWkVSTywgMTgsIDEgICAgICAgICAgMjE2OiAgIAlpbnMJCWsxLCB6ZXJvLCAxOCwgMQkJIC8qIENsZWFyIElQTCBiaXQgNyAgKi8NCkJGRDAwQjg2ICAwQzAwNTM3QiAgIE9SSSBLMSwgSzEsIDMwNzIgICAgICAgICAgICAgMjE3OiAgIAlvcmkJCWsxLCBrMSwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgMTAgKQ0KQkZEMDBCOEEgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0ICAgICAgICAgICAyMTg6ICAgCWlucwkJazEsIHplcm8sIDEsIDQJCSAgLyogQ2xlYXIgRVhMLCBFUkwgYW5kIFVNLiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTk6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyMDogICAJLyogczUgaXMgdXNlZCBhcyB0aGUgZnJhbWUgcG9pbnRlci4gKi8NCkJGRDAwQjhFICBBOTEwMDNBMCAgIEFERCBTNSwgWkVSTywgU1AgICAgICAgICAgICAgMjIxOiAgIAlhZGQJCXM1LCB6ZXJvLCBzcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyMzogICAJLyogU3dhcCB0byB0aGUgc3lzdGVtIHN0YWNrLiAgVGhpcyBpcyBub3QgY29uZGl0aW9uYWwgb24gdGhlIG5lc3RpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI0OiAgIAljb3VudCBhcyB0aGlzIGludGVycnVwdCBpcyBhbHdheXMgdGhlIGxvd2VzdCBwcmlvcml0eSBhbmQgdGhlcmVmb3JlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyNTogICAJdGhlIG5lc3RpbmcgaXMgYWx3YXlzIDAuICovDQpCRkQwMEI5MiAgQkZEMTQxQkQgICBMVUkgU1AsIDB4QkZEMSAgICAgICAgICAgICAgIDIyNjogICAJbGEJCXNwLCB4SVNSU3RhY2tUb3ANCkJGRDAwQjlBICAgICAgNEJBMCAgIExXIFNQLCAwKFNQKSAgICAgICAgICAgICAgICAgMjI3OiAgIAlsdwkJc3AsIChzcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI4OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjk6ICAgCS8qIFNldCB0aGUgbmVzdGluZyBjb3VudC4gKi8NCkJGRDAwQjlDICBCRkQyNDFCQSAgIExVSSBLMCwgMHhCRkQyICAgICAgICAgICAgICAgMjMwOiAgIAlsYQkJazAsIHV4SW50ZXJydXB0TmVzdGluZw0KQkZEMDBCQTQgIDAwMDEzMkMwICAgQURESVUgUzYsIFpFUk8sIDEgICAgICAgICAgICAyMzE6ICAgCWFkZGl1ICAgczYsIHplcm8sIDENCkJGRDAwQkE4ICAwMDAwRkFEQSAgIFNXIFM2LCAwKEswKSAgICAgICAgICAgICAgICAgMjMyOiAgIAlzdwkJczYsIDAoazApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzMzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM0OiAgIAkvKiBzNiBob2xkcyB0aGUgRVBDIHZhbHVlLCB0aGlzIGlzIHNhdmVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM1OiAgIAlhZnRlciBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLiAqLw0KQkZEMDBCQUMgIDAwRkMwMkNFICAgTUZDMCBTNiwgRVBDICAgICAgICAgICAgICAgICAyMzY6ICAgCW1mYzAJczYsIF9DUDBfRVBDDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzNzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM4OiAgIAkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyBhYm92ZSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICovDQpCRkQwMEJCMCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMgICAgICAgICAgICAgIDIzOTogICAJbXRjMAlrMSwgX0NQMF9TVEFUVVMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDE6ICAgCS8qIFNhdmUgdGhlIGNvbnRleHQgaW50byB0aGUgc3BhY2UganVzdCBjcmVhdGVkLiAgczYgaXMgc2F2ZWQgYWdhaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQyOiAgIAloZXJlIGFzIGl0IG5vdyBjb250YWlucyB0aGUgRVBDIHZhbHVlLiAqLw0KQkZEMDBCQjQgIDAwNzhGQkY1ICAgU1cgUkEsIDEyMChTNSkgICAgICAgICAgICAgICAyNDM6ICAgCXN3CQlyYSwgMTIwKHM1KQ0KQkZEMDBCQjggIDAwNzRGQkQ1ICAgU1cgUzgsIDExNihTNSkgICAgICAgICAgICAgICAyNDQ6ICAgCXN3CQlzOCwgMTE2KHM1KQ0KQkZEMDBCQkMgIDAwNzBGQjM1ICAgU1cgVDksIDExMihTNSkgICAgICAgICAgICAgICAyNDU6ICAgCXN3CQl0OSwgMTEyKHM1KQ0KQkZEMDBCQzAgIDAwNkNGQjE1ICAgU1cgVDgsIDEwOChTNSkgICAgICAgICAgICAgICAyNDY6ICAgCXN3CQl0OCwgMTA4KHM1KQ0KQkZEMDBCQzQgIDAwNjhGOUY1ICAgU1cgVDcsIDEwNChTNSkgICAgICAgICAgICAgICAyNDc6ICAgCXN3CQl0NywgMTA0KHM1KQ0KQkZEMDBCQzggIDAwNjRGOUQ1ICAgU1cgVDYsIDEwMChTNSkgICAgICAgICAgICAgICAyNDg6ICAgCXN3CQl0NiwgMTAwKHM1KQ0KQkZEMDBCQ0MgIDAwNjBGOUI1ICAgU1cgVDUsIDk2KFM1KSAgICAgICAgICAgICAgICAyNDk6ICAgCXN3CQl0NSwgOTYoczUpDQpCRkQwMEJEMCAgMDA1Q0Y5OTUgICBTVyBUNCwgOTIoUzUpICAgICAgICAgICAgICAgIDI1MDogICAJc3cJCXQ0LCA5MihzNSkNCkJGRDAwQkQ0ICAwMDU4Rjk3NSAgIFNXIFQzLCA4OChTNSkgICAgICAgICAgICAgICAgMjUxOiAgIAlzdwkJdDMsIDg4KHM1KQ0KQkZEMDBCRDggIDAwNTRGOTU1ICAgU1cgVDIsIDg0KFM1KSAgICAgICAgICAgICAgICAyNTI6ICAgCXN3CQl0MiwgODQoczUpDQpCRkQwMEJEQyAgMDA1MEY5MzUgICBTVyBUMSwgODAoUzUpICAgICAgICAgICAgICAgIDI1MzogICAJc3cJCXQxLCA4MChzNSkNCkJGRDAwQkUwICAwMDRDRjkxNSAgIFNXIFQwLCA3NihTNSkgICAgICAgICAgICAgICAgMjU0OiAgIAlzdwkJdDAsIDc2KHM1KQ0KQkZEMDBCRTQgIDAwNDhGOEY1ICAgU1cgQTMsIDcyKFM1KSAgICAgICAgICAgICAgICAyNTU6ICAgCXN3CQlhMywgNzIoczUpDQpCRkQwMEJFOCAgMDA0NEY4RDUgICBTVyBBMiwgNjgoUzUpICAgICAgICAgICAgICAgIDI1NjogICAJc3cJCWEyLCA2OChzNSkNCkJGRDAwQkVDICAwMDQwRjhCNSAgIFNXIEExLCA2NChTNSkgICAgICAgICAgICAgICAgMjU3OiAgIAlzdwkJYTEsIDY0KHM1KQ0KQkZEMDBCRjAgIDAwM0NGODk1ICAgU1cgQTAsIDYwKFM1KSAgICAgICAgICAgICAgICAyNTg6ICAgCXN3CQlhMCwgNjAoczUpDQpCRkQwMEJGNCAgMDAzOEY4NzUgICBTVyBWMSwgNTYoUzUpICAgICAgICAgICAgICAgIDI1OTogICAJc3cJCXYxLCA1NihzNSkNCkJGRDAwQkY4ICAwMDM0Rjg1NSAgIFNXIFYwLCA1MihTNSkgICAgICAgICAgICAgICAgMjYwOiAgIAlzdwkJdjAsIDUyKHM1KQ0KQkZEMDBCRkMgIDAwMzBGQUY1ICAgU1cgUzcsIDQ4KFM1KSAgICAgICAgICAgICAgICAyNjE6ICAgCXN3CQlzNywgNDgoczUpDQpCRkQwMEMwMCAgMDA3Q0ZBRDUgICBTVyBTNiwgMTI0KFM1KSAgICAgICAgICAgICAgIDI2MjogICAJc3cJCXM2LCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjM6ICAgCS8qIHM1IGFuZCBzNiBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkLiAqLw0KQkZEMDBDMDQgIDAwMjRGQTk1ICAgU1cgUzQsIDM2KFM1KSAgICAgICAgICAgICAgICAyNjQ6ICAgCXN3CQlzNCwgMzYoczUpDQpCRkQwMEMwOCAgMDAyMEZBNzUgICBTVyBTMywgMzIoUzUpICAgICAgICAgICAgICAgIDI2NTogICAJc3cJCXMzLCAzMihzNSkNCkJGRDAwQzBDICAwMDFDRkE1NSAgIFNXIFMyLCAyOChTNSkgICAgICAgICAgICAgICAgMjY2OiAgIAlzdwkJczIsIDI4KHM1KQ0KQkZEMDBDMTAgIDAwMThGQTM1ICAgU1cgUzEsIDI0KFM1KSAgICAgICAgICAgICAgICAyNjc6ICAgCXN3CQlzMSwgMjQoczUpDQpCRkQwMEMxNCAgMDAxNEZBMTUgICBTVyBTMCwgMjAoUzUpICAgICAgICAgICAgICAgIDI2ODogICAJc3cJCXMwLCAyMChzNSkNCkJGRDAwQzE4ICAwMDEwRjgzNSAgIFNXIEFULCAxNihTNSkgICAgICAgICAgICAgICAgMjY5OiAgIAlzdwkJJDEsIDE2KHM1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3MTogICAJLyogczcgaXMgdXNlZCBhcyBhIHNjcmF0Y2ggcmVnaXN0ZXIgYXMgdGhpcyBzaG91bGQgYWx3YXlzIGJlIHNhdmVkIGFjcm8gc3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcyOiAgIAluZXN0aW5nIGludGVycnVwdHMuICovDQpCRkQwMEMxQyAgICAgIDQ2MTcgICBNRkhJIFM3ICAgICAgICAgICAgICAgICAgICAgIDI3MzogICAJbWZoaQlzNw0KQkZEMDBDMUUgIDAwMENGQUY1ICAgU1cgUzcsIDEyKFM1KSAgICAgICAgICAgICAgICAyNzQ6ICAgCXN3CQlzNywgMTIoczUpDQpCRkQwMEMyMiAgICAgIDQ2NTcgICBNRkxPIFM3ICAgICAgICAgICAgICAgICAgICAgIDI3NTogICAJbWZsbwlzNw0KQkZEMDBDMjQgIDAwMDhGQUY1ICAgU1cgUzcsIDgoUzUpICAgICAgICAgICAgICAgICAyNzY6ICAgCXN3CQlzNywgOChzNSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzg6ICAgCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIHRhc2suICovDQpCRkQwMEMyOCAgQkZEMjQxQjcgICBMVUkgUzcsIDB4QkZEMiAgICAgICAgICAgICAgIDI3OTogICAJbGEJCXM3LCBweEN1cnJlbnRUQ0INCkJGRDAwQzMwICAwMDAwRkVGNyAgIExXIFM3LCAwKFM3KSAgICAgICAgICAgICAgICAgMjgwOiAgIAlsdwkJczcsIChzNykNCkJGRDAwQzM0ICAwMDAwRkFCNyAgIFNXIFM1LCAwKFM3KSAgICAgICAgICAgICAgICAgMjgxOiAgIAlzdwkJczUsIChzNykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODM6ICAgCS8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2sgdG8gdGhlIG1heCBwcmlvcml0eSB0aGF0IGNhbiB1c2UgdGhlIEFQSS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg0OiAgIAlUaGUgeWllbGQgaGFuZGxlciB3aWxsIG9ubHkgYmUgY2FsbGVkIGF0IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg1OiAgIAl3aGljaCBpcyBiZWxvdyBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgLSBzbyB0aGlzIGNhbiBvbmx5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4NjogICAJZXZlciByYWlzZSB0aGUgSVBMIHZhbHVlIGFuZCBuZXZlciBsb3dlciBpdC4gKi8NCkJGRDAwQzM4ICA0NzdDMDAwMCAgIERJIFpFUk8gICAgICAgICAgICAgICAgICAgICAgMjg3OiAgIAlkaQ0KQkZEMDBDM0MgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMgICAgICAgICAgICAyODg6ICAgCWVoYg0KQkZEMDBDNDAgIDAwRkMwMkVDICAgTUZDMCBTNywgU3RhdHVzICAgICAgICAgICAgICAyODk6ICAgCW1mYzAJczcsIF9DUDBfU1RBVFVTDQpCRkQwMEM0NCAgODI4QzAyRTAgICBJTlMgUzcsIFpFUk8sIDEwLCA3ICAgICAgICAgIDI5MDogICAJaW5zCQlzNywgemVybywgMTAsIDcNCkJGRDAwQzQ4ICA5NDhDMDJFMCAgIElOUyBTNywgWkVSTywgMTgsIDEgICAgICAgICAgMjkxOiAgIAlpbnMJCXM3LCB6ZXJvLCAxOCwgMQ0KQkZEMDBDNEMgIDBDMDE1MkQ3ICAgT1JJIFM2LCBTNywgMzA3MyAgICAgICAgICAgICAyOTI6ICAgCW9yaQkJczYsIHM3LCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCAxMCApIHwgMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5NDogICAJLyogVGhpcyBtdGMwIHJlLWVuYWJsZXMgaW50ZXJydXB0cywgYnV0IG9ubHkgYWJvdmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk1OiAgIAljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICovDQpCRkQwMEM1MCAgMDJGQzAyQ0MgICBNVEMwIFM2LCBTdGF0dXMgICAgICAgICAgICAgIDI5NjogICAJbXRjMAlzNiwgX0NQMF9TVEFUVVMNCkJGRDAwQzU0ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzICAgICAgICAgICAgMjk3OiAgIAllaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk4OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTk6ICAgCS8qIENsZWFyIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaW4gdGhlIGNvcmUuICovDQpCRkQwMEM1OCAgMDBGQzAyQ0QgICBNRkMwIFM2LCBDYXVzZSAgICAgICAgICAgICAgIDMwMDogICAJbWZjMAlzNiwgX0NQMF9DQVVTRQ0KQkZEMDBDNUMgIDQyMEMwMkMwICAgSU5TIFM2LCBaRVJPLCA4LCAxICAgICAgICAgICAzMDE6ICAgCWlucwkJczYsIHplcm8sIDgsIDENCkJGRDAwQzYwICAwMkZDMDJDRCAgIE1UQzAgUzYsIENhdXNlICAgICAgICAgICAgICAgMzAyOiAgIAltdGMwCXM2LCBfQ1AwX0NBVVNFDQpCRkQwMEM2NCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMyAgICAgICAgICAgIDMwMzogICAJZWhiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwNDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA1OiAgIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA2OiAgIAlNRUMxNHh4IEdJUlEyNCBTb3VyY2UgYml0WzFdID0gMSB0byBjbGVhciAqLw0KQkZEMDBDNjggIEJGRkY0MUI2ICAgTFVJIFM2LCAweEJGRkYgICAgICAgICAgICAgICAzMDc6ICAgCWxhCQlzNiwgUE9SVF9DQ1BfSlRWSUNfR0lSUTI0X1NSQw0KQkZEMDBDNzAgIDAwMDIzMjgwICAgQURESVUgUzQsIFpFUk8sIDIgICAgICAgICAgICAzMDg6ICAgCWFkZGl1ICAgczQsIHplcm8sIDINCkJGRDAwQzc0ICAwMDAwRkE5NiAgIFNXIFM0LCAwKFM2KSAgICAgICAgICAgICAgICAgMzA5OiAgIAlzdwkJczQsIChzNikNCkJGRDAwQzc4ICAxNkRFRjdFOCAgIEpBTCAweEJGRDAyREJDICAgICAgICAgICAgICAgMzEwOiAgIAlqYWwJCXZUYXNrU3dpdGNoQ29udGV4dA0KQkZEMDBDN0MgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAzMTE6ICAgCW5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxMzogICAJLyogQ2xlYXIgdGhlIGludGVycnVwdCBtYXNrIGFnYWluLiBUaGUgc2F2ZWQgc3RhdHVzIHZhbHVlIGlzIHN0aWxsIGluIHM3ICovDQpCRkQwMEM4MCAgMDJGQzAyRUMgICBNVEMwIFM3LCBTdGF0dXMgICAgICAgICAgICAgIDMxNDogICAJbXRjMAlzNywgX0NQMF9TVEFUVVMNCkJGRDAwQzg0ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzICAgICAgICAgICAgMzE1OiAgIAllaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTc6ICAgCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAqLw0KQkZEMDBDODggIEJGRDI0MUIwICAgTFVJIFMwLCAweEJGRDIgICAgICAgICAgICAgICAzMTg6ICAgCWxhCQlzMCwgcHhDdXJyZW50VENCDQpCRkQwMEM5MCAgICAgIDY4MDAgICBMVyBTMCwgMChTMCkgICAgICAgICAgICAgICAgIDMxOTogICAJbHcJCXMwLCAoczApDQpCRkQwMEM5MiAgMDAwMEZFQjAgICBMVyBTNSwgMChTMCkgICAgICAgICAgICAgICAgIDMyMDogICAJbHcJCXM1LCAoczApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyMTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIyOiAgIAkvKiBSZXN0b3JlIHRoZSByZXN0IG9mIHRoZSBjb250ZXh0LiAqLw0KQkZEMDBDOTYgIDAwMDhGRTE1ICAgTFcgUzAsIDgoUzUpICAgICAgICAgICAgICAgICAzMjM6ICAgCWx3CQlzMCwgOChzNSkNCkJGRDAwQzlBICAzRDdDMDAxMCAgIE1UTE8gUzAgICAgICAgICAgICAgICAgICAgICAgMzI0OiAgIAltdGxvCXMwDQpCRkQwMEM5RSAgMDAwQ0ZFMTUgICBMVyBTMCwgMTIoUzUpICAgICAgICAgICAgICAgIDMyNTogICAJbHcJCXMwLCAxMihzNSkNCkJGRDAwQ0EyICAyRDdDMDAxMCAgIE1USEkgUzAgICAgICAgICAgICAgICAgICAgICAgMzI2OiAgIAltdGhpCXMwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyNzogICANCkJGRDAwQ0E2ICAwMDEwRkMzNSAgIExXIEFULCAxNihTNSkgICAgICAgICAgICAgICAgMzI4OiAgIAlsdwkJJDEsIDE2KHM1KQ0KQkZEMDBDQUEgIDAwMTRGRTE1ICAgTFcgUzAsIDIwKFM1KSAgICAgICAgICAgICAgICAzMjk6ICAgCWx3CQlzMCwgMjAoczUpDQpCRkQwMENBRSAgMDAxOEZFMzUgICBMVyBTMSwgMjQoUzUpICAgICAgICAgICAgICAgIDMzMDogICAJbHcJCXMxLCAyNChzNSkNCkJGRDAwQ0IyICAwMDFDRkU1NSAgIExXIFMyLCAyOChTNSkgICAgICAgICAgICAgICAgMzMxOiAgIAlsdwkJczIsIDI4KHM1KQ0KQkZEMDBDQjYgIDAwMjBGRTc1ICAgTFcgUzMsIDMyKFM1KSAgICAgICAgICAgICAgICAzMzI6ICAgCWx3CQlzMywgMzIoczUpDQpCRkQwMENCQSAgMDAyNEZFOTUgICBMVyBTNCwgMzYoUzUpICAgICAgICAgICAgICAgIDMzMzogICAJbHcJCXM0LCAzNihzNSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzU6ICAgCS8qIHM1IGlzIGxvYWRlZCBsYXRlci4gKi8NCkJGRDAwQ0JFICAwMDJDRkVENSAgIExXIFM2LCA0NChTNSkgICAgICAgICAgICAgICAgMzM2OiAgIAlsdwkJczYsIDQ0KHM1KQ0KQkZEMDBDQzIgIDAwMzBGRUY1ICAgTFcgUzcsIDQ4KFM1KSAgICAgICAgICAgICAgICAzMzc6ICAgCWx3CQlzNywgNDgoczUpDQpCRkQwMENDNiAgMDAzNEZDNTUgICBMVyBWMCwgNTIoUzUpICAgICAgICAgICAgICAgIDMzODogICAJbHcJCXYwLCA1MihzNSkNCkJGRDAwQ0NBICAwMDM4RkM3NSAgIExXIFYxLCA1NihTNSkgICAgICAgICAgICAgICAgMzM5OiAgIAlsdwkJdjEsIDU2KHM1KQ0KQkZEMDBDQ0UgIDAwM0NGQzk1ICAgTFcgQTAsIDYwKFM1KSAgICAgICAgICAgICAgICAzNDA6ICAgCWx3CQlhMCwgNjAoczUpDQpCRkQwMENEMiAgMDA0MEZDQjUgICBMVyBBMSwgNjQoUzUpICAgICAgICAgICAgICAgIDM0MTogICAJbHcJCWExLCA2NChzNSkNCkJGRDAwQ0Q2ICAwMDQ0RkNENSAgIExXIEEyLCA2OChTNSkgICAgICAgICAgICAgICAgMzQyOiAgIAlsdwkJYTIsIDY4KHM1KQ0KQkZEMDBDREEgIDAwNDhGQ0Y1ICAgTFcgQTMsIDcyKFM1KSAgICAgICAgICAgICAgICAzNDM6ICAgCWx3CQlhMywgNzIoczUpDQpCRkQwMENERSAgMDA0Q0ZEMTUgICBMVyBUMCwgNzYoUzUpICAgICAgICAgICAgICAgIDM0NDogICAJbHcJCXQwLCA3NihzNSkNCkJGRDAwQ0UyICAwMDUwRkQzNSAgIExXIFQxLCA4MChTNSkgICAgICAgICAgICAgICAgMzQ1OiAgIAlsdwkJdDEsIDgwKHM1KQ0KQkZEMDBDRTYgIDAwNTRGRDU1ICAgTFcgVDIsIDg0KFM1KSAgICAgICAgICAgICAgICAzNDY6ICAgCWx3CQl0MiwgODQoczUpDQpCRkQwMENFQSAgMDA1OEZENzUgICBMVyBUMywgODgoUzUpICAgICAgICAgICAgICAgIDM0NzogICAJbHcJCXQzLCA4OChzNSkNCkJGRDAwQ0VFICAwMDVDRkQ5NSAgIExXIFQ0LCA5MihTNSkgICAgICAgICAgICAgICAgMzQ4OiAgIAlsdwkJdDQsIDkyKHM1KQ0KQkZEMDBDRjIgIDAwNjBGREI1ICAgTFcgVDUsIDk2KFM1KSAgICAgICAgICAgICAgICAzNDk6ICAgCWx3CQl0NSwgOTYoczUpDQpCRkQwMENGNiAgMDA2NEZERDUgICBMVyBUNiwgMTAwKFM1KSAgICAgICAgICAgICAgIDM1MDogICAJbHcJCXQ2LCAxMDAoczUpDQpCRkQwMENGQSAgMDA2OEZERjUgICBMVyBUNywgMTA0KFM1KSAgICAgICAgICAgICAgIDM1MTogICAJbHcJCXQ3LCAxMDQoczUpDQpCRkQwMENGRSAgMDA2Q0ZGMTUgICBMVyBUOCwgMTA4KFM1KSAgICAgICAgICAgICAgIDM1MjogICAJbHcJCXQ4LCAxMDgoczUpDQpCRkQwMEQwMiAgMDA3MEZGMzUgICBMVyBUOSwgMTEyKFM1KSAgICAgICAgICAgICAgIDM1MzogICAJbHcJCXQ5LCAxMTIoczUpDQpCRkQwMEQwNiAgMDA3NEZGRDUgICBMVyBTOCwgMTE2KFM1KSAgICAgICAgICAgICAgIDM1NDogICAJbHcJCXM4LCAxMTYoczUpDQpCRkQwMEQwQSAgMDA3OEZGRjUgICBMVyBSQSwgMTIwKFM1KSAgICAgICAgICAgICAgIDM1NTogICAJbHcJCXJhLCAxMjAoczUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU3OiAgIAkvKiBQcm90ZWN0IGFjY2VzcyB0byB0aGUgayByZWdpc3RlcnMsIGFuZCBvdGhlcnMuICovDQpCRkQwMEQwRSAgNDc3QzAwMDAgICBESSBaRVJPICAgICAgICAgICAgICAgICAgICAgIDM1ODogICAJZGkNCkJGRDAwRDEyICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzICAgICAgICAgICAgMzU5OiAgIAllaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjE6ICAgCS8qIFNldCBuZXN0aW5nIGJhY2sgdG8gemVyby4gIEFzIHRoZSBsb3dlc3QgcHJpb3JpdHkgaW50ZXJydXB0IHRoaXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYyOiAgIAlpbnRlcnJ1cHQgY2Fubm90IGhhdmUgbmVzdGVkLiAqLw0KQkZEMDBEMTYgIEJGRDI0MUJBICAgTFVJIEswLCAweEJGRDIgICAgICAgICAgICAgICAzNjM6ICAgCWxhCQlrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQpCRkQwMEQxRSAgMDAwMEY4MUEgICBTVyBaRVJPLCAwKEswKSAgICAgICAgICAgICAgIDM2NDogICAJc3cJCXplcm8sIDAoazApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2NTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY2OiAgIAkvKiBTd2l0Y2ggYmFjayB0byB1c2UgdGhlIHJlYWwgc3RhY2sgcG9pbnRlci4gKi8NCkJGRDAwRDIyICBFOTEwMDJBMCAgIEFERCBTUCwgWkVSTywgUzUgICAgICAgICAgICAgMzY3OiAgIAlhZGQJCXNwLCB6ZXJvLCBzNQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OTogICAJLyogUmVzdG9yZSB0aGUgcmVhbCBzNSB2YWx1ZS4gKi8NCkJGRDAwRDI2ICAgICAgNEFBQSAgIExXIFM1LCA0MChTUCkgICAgICAgICAgICAgICAgMzcwOiAgIAlsdwkJczUsIDQwKHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzE6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3MjogICAJLyogUG9wIHRoZSBzdGF0dXMgYW5kIGVwYyB2YWx1ZXMuICovDQpCRkQwMEQyOCAgMDA4MEZGN0QgICBMVyBLMSwgMTI4KFNQKSAgICAgICAgICAgICAgIDM3MzogICAJbHcJCWsxLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHNwKQ0KQkZEMDBEMkMgICAgICA0QjVGICAgTFcgSzAsIDEyNChTUCkgICAgICAgICAgICAgICAzNzQ6ICAgCWx3CQlrMCwgcG9ydEVQQ19TVEFDS19MT0NBVElPTihzcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc1OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzY6ICAgCS8qIFJlbW92ZSBzdGFjayBmcmFtZS4gKi8NCkJGRDAwRDJFICAgICAgNEM0MyAgIEFERElVIFNQLCBTUCwgMTMyICAgICAgICAgICAgMzc3OiAgIAlhZGRpdSAgIHNwLCBzcCwgcG9ydENPTlRFWFRfU0laRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzg6ICAgDQpCRkQwMEQzMCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMgICAgICAgICAgICAgIDM3OTogICAJbXRjMAlrMSwgX0NQMF9TVEFUVVMNCkJGRDAwRDM0ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQyAgICAgICAgICAgICAgICAgMzgwOiAgIAltdGMwCWswLCBfQ1AwX0VQQw0KQkZEMDBEMzggIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMgICAgICAgICAgICAzODE6ICAgCWVoYg0KQkZEMDBEM0MgIEYzN0MwMDAwICAgRVJFVCAgICAgICAgICAgICAgICAgICAgICAgICAzODI6ICAgCWVyZXQNCkJGRDAwRDQwICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMzgzOiAgIAlub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODU6ICAgLmVuZAl2UG9ydFlpZWxkSVNSDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4OTogICANCi0tLSAgQzovRS9EZXYvRnJlZVJUT1MvV29ya2luZ0NvcHkvRnJlZVJUT1MvRGVtby9QSUMzMk1FQzE0eHhfTVBMQUIvc3JjL01FQzE0eHgvc3RhcnR1cC9NUExBQi9jcnRuLlMgIC0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6ICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiAgICAgICogICAgICAgICAgICAgICAgICBDIFJ1bnRpbWUgU3RhcnR1cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogICAgICAqIEZpbGVuYW1lOiAgICAgICAgY3J0bi5zDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiAgICAgICogUHJvY2Vzc29yOiAgICAgICBQSUMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICAqIENvbXBpbGVyOiAgICAgICAgTVBMQUIgWEMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogICAgICogICAgICAgICAgICAgICAgICBNUExBQiBYIElERQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgICogQ29tcGFueTogICAgICAgICBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgICogU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICAgKiBUaGlzIHNvZnR3YXJlIGlzIGRldmVsb3BlZCBieSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6ICAgICAqIHN1YnNpZGlhcmllcyAoIk1pY3JvY2hpcCIpLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk6ICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDogICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgICogMS4gICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzogICAgICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU6ICAgICAqIDIuICAgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY6ICAgICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc6ICAgICAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTogICAgICogMy4gICAgICBNaWNyb2NoaXAncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgICAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI6ICAgICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTUlDUk9DSElQICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0OiAgICAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgICogTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OiAgICAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ICAgICAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XU09FVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICAgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDogICAgICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTogICAgICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1OiAgICAjaWZkZWYgX19MSUJCVUlMRF9fDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OiAgICAJIyBSZXBsYWNlIHRoZSBzdGFuZGFyZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gd2l0aCBhIHNpbXBsZSBmaWxlbmFtZS4gVGhpcyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc6ICAgIAkjIHByZXZlbnRzIHRoZSBsaWJyYXJ5IGJ1aWxkIGRpcmVjdG9yeSBmcm9tIHNob3dpbmcgdXAgaW4gTVBMQUIgSURFLiBJdCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg6ICAgIAkjIGFsc28gZWZmZWN0aXZlbHkgZGlzYWJsZXMgc291cmNlLWxpbmUgZGVidWdnaW5nLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTogICAgCS5maWxlIDEgImxpYnBpYzMyL3N0YXJ0dXAvY3J0bi5zIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDogICAgCS5sb2MgMSAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxOiAgICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzogICAgCS5zZWN0aW9uIC5pbml0LCBjb2RlDQpCRkQwMDQ0MCAgOEZCRjAwMTQgICBMVyBSQSwgMjAoU1ApICAgICAgICAgICAgICAgIDU0OiAgICAJbHcJJDMxLDIwKCRzcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTU6ICAgIAlhZGR1CSRzcCwkc3AsMzINCkJGRDAwNDQ0ICAwM0UwMDAwOCAgIEpSIFJBICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgIAlqCSQzMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4OiAgICAJLnNlY3Rpb24gLmZpbmksIGNvZGUNCkJGRDAwNDU0ICA4RkJGMDAxNCAgIExXIFJBLCAyMChTUCkgICAgICAgICAgICAgICAgNTk6ICAgIAlsdwkkMzEsMjAoJHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDogICAgCWFkZHUJJHNwLCRzcCwzMg0KQkZEMDA0NTggIDAzRTAwMDA4ICAgSlIgUkEgICAgICAgICAgICAgICAgICAgICAgICA2MTogICAgCWoJJDMxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYyOiAgICANCi0tLSAgQzovRS9EZXYvRnJlZVJUT1MvV29ya2luZ0NvcHkvRnJlZVJUT1MvRGVtby9QSUMzMk1FQzE0eHhfTVBMQUIvc3JjL01FQzE0eHgvc3RhcnR1cC9NUExBQi9jcnRpLlMgIC0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6ICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiAgICAgICogICAgICAgICAgICAgICAgICBDIFJ1bnRpbWUgU3RhcnR1cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogICAgICAqIEZpbGVuYW1lOiAgICAgICAgY3J0aS5zDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiAgICAgICogUHJvY2Vzc29yOiAgICAgICBQSUMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICAqIENvbXBpbGVyOiAgICAgICAgTVBMQUIgWEMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogICAgICogICAgICAgICAgICAgICAgICBNUExBQiBYIElERQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgICogQ29tcGFueTogICAgICAgICBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgICogU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICAgKiBUaGlzIHNvZnR3YXJlIGlzIGRldmVsb3BlZCBieSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6ICAgICAqIHN1YnNpZGlhcmllcyAoIk1pY3JvY2hpcCIpLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk6ICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDogICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgICogMS4gICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzogICAgICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU6ICAgICAqIDIuICAgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY6ICAgICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc6ICAgICAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTogICAgICogMy4gICAgICBNaWNyb2NoaXAncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgICAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI6ICAgICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTUlDUk9DSElQICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0OiAgICAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgICogTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OiAgICAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ICAgICAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XU09FVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICAgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDogICAgICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTogICAgICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDogICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTogICAgI2lmZGVmIF9fTElCQlVJTERfXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NjogICAgCSMgUmVwbGFjZSB0aGUgc3RhbmRhcmQgZGVidWdnaW5nIGluZm9ybWF0aW9uIHdpdGggYSBzaW1wbGUgZmlsZW5hbWUuIFRoaXMgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OiAgICAJIyBwcmV2ZW50cyB0aGUgbGlicmFyeSBidWlsZCBkaXJlY3RvcnkgZnJvbSBzaG93aW5nIHVwIGluIE1QTEFCIElERS4gSXQgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4OiAgICAJIyBhbHNvIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHNvdXJjZS1saW5lIGRlYnVnZ2luZy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk6ICAgIAkuZmlsZSAxICJsaWJwaWMzMi9zdGFydHVwL2NydGkucyINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA6ICAgIAkubG9jIDEgMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM6ICAgIC8qIDQgc2xvdHMgZm9yIGFyZ3VtZW50IHNwaWxsIGFyZWEuICAxIGZvciBjcHJldHVybiwgMSBmb3Igc3RhY2suDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0OiAgICAgICBSZXR1cm4gc3BpbGwgb2Zmc2V0IG9mIDQwIGFuZCAyMC4gIEFsaWduZWQgdG8gMTYgYnl0ZXMgZm9yIG4zMi4gICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgIAkuc2VjdGlvbiAuaW5pdCwgY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzogICAgCS5nbG9ibAlfaW5pdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ODogICAgCS50eXBlCV9pbml0LEBmdW5jdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTogICAgX2luaXQ6DQpCRkQwMDQzOCAgMjdCREZGRTAgICBBRERJVSBTUCwgU1AsIC0zMiAgICAgICAgICAgIDYwOiAgICAJYWRkdQkkc3AsJHNwLC0zMg0KQkZEMDA0M0MgIEFGQkYwMDE0ICAgU1cgUkEsIDIwKFNQKSAgICAgICAgICAgICAgICA2MTogICAgCXN3CSQzMSwyMCgkc3ApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYyOiAgICAJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzOiAgICAJLnNlY3Rpb24gLmZpbmksIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQ6ICAgIAkuZ2xvYmwJX2ZpbmkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU6ICAgIAkudHlwZQlfZmluaSxAZnVuY3Rpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjY6ICAgIF9maW5pOg0KQkZEMDA0NEMgIDI3QkRGRkUwICAgQURESVUgU1AsIFNQLCAtMzIgICAgICAgICAgICA2NzogICAgCWFkZHUJJHNwLCRzcCwtMzINCkJGRDAwNDUwICBBRkJGMDAxNCAgIFNXIFJBLCAyMChTUCkgICAgICAgICAgICAgICAgNjg6ICAgIAlzdwkkMzEsMjAoJHNwKQ0KLS0tICBDOi9FL0Rldi9GcmVlUlRPUy9Xb3JraW5nQ29weS9GcmVlUlRPUy9EZW1vL1BJQzMyTUVDMTR4eF9NUExBQi9zcmMvTUVDMTR4eC9zdGFydHVwL01QTEFCL2NydDAuUyAgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6ICAgICAgKiAgICAgICAgICAgICAgICAgIEMgUnVudGltZSBTdGFydHVwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OiAgICAgICogRmlsZW5hbWU6ICAgICAgICBjcnQwLlMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6ICAgICAgKiBQcm9jZXNzb3I6ICAgICAgIFBJQzMyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDogICAgICogQ29tcGlsZXI6ICAgICAgICBNUExBQiBYQzMyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOiAgICAgKiAgICAgICAgICAgICAgICAgIE1QTEFCIFggSURFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOiAgICAgKiBDb21wYW55OiAgICAgICAgIE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OiAgICAgKiBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY6ICAgICAqIFRoaXMgc29mdHdhcmUgaXMgZGV2ZWxvcGVkIGJ5IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzogICAgICogc3Vic2lkaWFyaWVzICgiTWljcm9jaGlwIikuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTogICAgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAgICAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyOiAgICAgKiAxLiAgICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzOiAgICAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTogICAgICogMi4gICAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjogICAgICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzogICAgICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OiAgICAgKiAzLiAgICAgIE1pY3JvY2hpcCdzIG5hbWUgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDogICAgICogZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjogICAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNSUNST0NISVAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzogICAgICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQ6ICAgICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1OiAgICAgKiBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY6ICAgICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3OiAgICAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODogICAgICogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dTT0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzk6ICAgICAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwOiAgICAgKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxOiAgICAgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDI6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzOiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU6ICAgICNpbmNsdWRlIDx4Yy5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NjogICAgI2luY2x1ZGUgPGNwMGRlZnMuaD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODogICAgLyogTUVDMTR4eCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTogICAgI2RlZmluZSBQSUMzMl9TUlNfU0VUX0NPVU5UIDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA6ICAgICNkZWZpbmUgSU5JVF9TU1gNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE6ICAgICN1bmRlZiBJTklUX01NVV9NWl9GSVhFRA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjogICAgI3VuZGVmIElOSVRfTDFfQ0FDSEUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDogICAgLyogTUVDMTR4eCBmaWxsIHN0YWNrIHdpdGggc2VudGluZWwgdmFsdWUgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTU6ICAgICNkZWZpbmUgRU5fU1RBQ0tfRklMTCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3OiAgICAjaWYgKF9fWEMzMl9WRVJTSU9OID4gMTAwMCkgJiYgIWRlZmluZWQoQ1BQX0lOSVQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4OiAgICAjZGVmaW5lIENQUF9JTklUDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5OiAgICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTogICAgI2lmICFkZWZpbmVkKFBJQzMyX1NSU19TRVRfQ09VTlQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYyOiAgICAjIHdhcm5pbmcgUElDMzJfU1JTX1NFVF9DT1VOVCBub3QgZGVmaW5lZCBvbiBidWlsZCBsaW5lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzOiAgICAjIGRlZmluZSBQSUMzMl9TUlNfU0VUX0NPVU5UIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQ6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY2OiAgICAjaWYgIWRlZmluZWQoU1RBQ0tfRklMTF9WQUxVRSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjc6ICAgICMgZGVmaW5lIFNUQUNLX0ZJTExfVkFMVUUgMHhERUFEQkVFRnVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4OiAgICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjk6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MDogICAgLyogVGhpcyBmaWxlIGNvbnRhaW5zIDMyLWJpdCBhc3NlbWJseSBjb2RlICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcxOiAgICAgICAgICAgLnNldCBub21pcHMxNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDczOiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NDogICAgICAgICAgICAjIEVudHJ5IHBvaW50IG9mIHRoZSBlbnRpcmUgYXBwbGljYXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzU6ICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc2OiAgICAgICAgICAgIC5zZWN0aW9uIC5yZXNldCxjb2RlLGtlZXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzc6ICAgICAgICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzg6ICAgICAgICAgICAgLnNldCBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzk6ICAgICAgICAgICAgLmVudCBfcmVzZXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODA6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MTogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MjogICAgIyBCZWdpbiBJU0Egc3dpdGNoaW5nIGNvZGUgIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MzogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg1OiAgICAjaWYgZGVmaW5lZChfX1BJQzMyX0hBU19NSUNST01JUFMpIHx8IGRlZmluZWQoX19taXBzX21pY3JvbWlwcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODY6ICAgICNpZiBkZWZpbmVkIChfX21pcHNfbWljcm9taXBzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NzogICAgICAgICAgICAuc2V0IG1pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ODogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5OiAgICBfcmVzZXQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwOiAgICAgICAgICAgIC53b3JkIDB4MTAwMDAwMDMgICAgIC8qIE1JUFMzMjogICAgYnJhbmNoIHRvIDB4QkZDMDAwMTAgZnJvbSBoZXJlICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNaWNyb01JUFM6IEFEREkzMiAkMCwgJDAsIDB4MDAwNyAobm9wKSAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE8gTk9UIGNoYW5nZSB0aGUgcmVsYXRpdmUgYnJhbmNoICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkzOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTQ6ICAgICAgICAgICAgLndvcmQgMHgwMDAwMDAwMCAgICAgLyogTk9QICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk1OiAgICBfX3Jlc2V0X21pY3JvbWlwc19pc2E6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk2OiAgICAgICAgICAgIC5zZXQgICAgbWljcm9taXBzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk3OiAgICAgICAgICAgIGphbCAgICAgX3N0YXJ0dXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTg6ICAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwOiAgICAgICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxOiAgICAgICAgICAgLyogRGV2aWNlIG5vdCBpbiBwcm9wZXIgSVNBIG1vZGUgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyOiAgICAgICAgICAgLnNldCBub21pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDM6ICAgX19yZXNldF9zd2l0Y2hfaXNhOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQ6ICAgICAgICAgICBqYWwgX3N0YXJ0dXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA1OiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3OiAgICNlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA5OiAgIF9yZXNldDoNCkJGRDAwMDAwICAwRkY0MDBBMiAgIEpBTCAweEJGRDAwMjg4ICAgICAgICAgICAgICAgMTEwOiAgICAgICAgICAgamFsIF9zdGFydHVwDQpCRkQwMDAwNCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDExMTogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMzogICAjZW5kaWYgIC8qIF9fUElDMzJfSEFTX01JQ1JPTUlQUyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNTogICAgICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNjogICAgICAgICAgIC5lbmQgX3Jlc2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNzogICAgICAgICAgIC5nbG9ibCBfcmVzZXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE4OiAgICAgICAgICAgLnNpemUgX3Jlc2V0LCAuLV9yZXNldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTk6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMDogICAgICAgICAgIC5zZWN0aW9uIC5yZXNldC5zdGFydHVwLGNvZGUsa2VlcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjE6ICAgICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjI6ICAgICAgICAgICAuc2V0IG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNDogICAjaWYgZGVmaW5lZCAoX19taXBzX21pY3JvbWlwcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1OiAgICAgICAgICAgLnNldCBtaWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI2OiAgICNlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNzogICAgICAgICAgIC5zZXQgbm9taWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4OiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjk6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMDogICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMTogICAjIEVuZCBJU0Egc3dpdGNoaW5nIGNvZGUgICAjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMjogICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzU6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM2OiAgICAgICAgICAgIyBTdGFydHVwIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM3OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzODogICAgICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOTogICAgICAgICAgIC5zZXQgbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MDogICAgICAgICAgIC5lbnQgX3N0YXJ0dXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQxOiAgIF9zdGFydHVwOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDQ6ICAgICAgICAgICAjIE5ldyAtIFNldCBCRVY9MSBmb3IgdGhlIGNhc2VzIHdoZXJlIE0xNEsgaW5zdHJ1Y3Rpb24gcG9pbnRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ1OiAgICAgICAgICAgIyBpcyBjaGFuZ2VkIHRvIGZvcmNlIFJPTSB0byBydW4gYWdhaW4uIENQMC5CRVYgbXVzdCBiZSAxIHRvIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDY6ICAgICAgICAgICAjIHNhZmVseSB3cml0ZSBDUDAuRUJBU0UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ3OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDI4OCAgNDAxQTYwMDAgICBNRkMwIEswLCBTdGF0dXMgICAgICAgICAgICAgIDE0ODogICAgICAgICAgIG1mYzAgICAgazAsIF9DUDBfU1RBVFVTDQpCRkQwMDI4QyAgM0MxQjAwNDAgICBMVUkgSzEsIDY0ICAgICAgICAgICAgICAgICAgIDE0OTogICAgICAgICAgIGx1aSAgICAgazEsIDB4MDA0MA0KQkZEMDAyOTAgIDAzNUJEMDI1ICAgT1IgSzAsIEswLCBLMSAgICAgICAgICAgICAgICAxNTA6ICAgICAgICAgICBvciAgICAgIGswLCBrMCwgazEgICAgICAgICMgQ1AwLlNUQVRVUy5CRVYoYml0WzIyXSkgPSAxDQpCRkQwMDI5NCAgNDA5QTYwMDAgICBNVEMwIEswLCBTdGF0dXMgICAgICAgICAgICAgIDE1MTogICAgICAgICAgIG10YzAgICAgazAsIF9DUDBfU1RBVFVTDQpCRkQwMDI5OCAgMDAwMDAwQzAgICBFSEIgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MjogICAgICAgICAgIGVoYg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTU6ICAgICAgICAgICAjIEluaXRpYWxpemUgU3RhY2sgUG9pbnRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTY6ICAgICAgICAgICAjICAgX3N0YWNrIGlzIGluaXRpYWxpemVkIGJ5IHRoZSBsaW5rZXIgc2NyaXB0IHRvIHBvaW50IHRvIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTc6ICAgICAgICAgICAjICAgIHN0YXJ0aW5nIGxvY2F0aW9uIG9mIHRoZSBzdGFjayBpbiBEUk0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU4OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDI5QyAgM0MxREJGRDIgICBMVUkgU1AsIC0xNjQzMCAgICAgICAgICAgICAgIDE1OTogICAgICAgICAgIGxhICAgICAgc3AsX3N0YWNrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYxOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MjogICAgICAgICAgICMgSW5pdGlhbGl6ZSBHbG9iYWwgUG9pbnRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjM6ICAgICAgICAgICAjICAgX2dwIGlzIGluaXRpYWxpemVkIGJ5IHRoZSBsaW5rZXIgc2NyaXB0IHRvIHBvaW50IHRvICJtaWRkbGUiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NDogICAgICAgICAgICMgICBvZiB0aGUgc21hbGwgdmFyaWFibGVzIHJlZ2lvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjU6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwMkE0ICAzQzFDQkZEMiAgIExVSSBHUCwgLTE2NDMwICAgICAgICAgICAgICAgMTY2OiAgICAgICAgICAgbGEgICAgICBncCxfZ3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjg6ICAgI2lmIChQSUMzMl9TUlNfU0VUX0NPVU5UID09IDIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzA6ICAgICAgICAgICAjIEluaXRpYWxpemUgR2xvYmFsIFBvaW50ZXIgaW4gU2hhZG93IFNldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzE6ICAgICAgICAgICAjICAgVGhlIFNSU0N0bCdzIFBTUyBmaWVsZCBtdXN0IGJlIHNldCB0byB0aGUgc2hhZG93IHNldCBpbiB3aGljaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzI6ICAgICAgICAgICAjICAgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFsIHBvaW50ZXIuICBTaW5jZSB3ZSBoYXZlIG9ubHkgYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzM6ICAgICAgICAgICAjICAgc2luZ2xlIHNoYWRvdyBzZXQgKGJlc2lkZXMgdGhlIG5vcm1hbCksIHdlIHdpbGwgaW5pdGlhbGl6ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzQ6ICAgICAgICAgICAjICAgU1JTQ3RsPFBTUz4gdG8gU1JTQ3RsPEhTUz4uICBXZSB0aGVuIHdyaXRlIHRoZSBnbG9iYWwgcG9pbnRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzU6ICAgICAgICAgICAjICAgdG8gdGhlIHByZXZpb3VzIHNoYWRvdyBzZXQgdG8gZW5zdXJlIHRoYXQgb24gaW50ZXJydXB0LCB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc2OiAgICAgICAgICAgIyAgIGdsb2JhbCBwb2ludGVyIGhhcyBiZWVuIGluaXRpYWxpemVkLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzc6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc4OiAgICAgICAgICAgbWZjMCAgICB0MSxfQ1AwX1NSU0NUTCAgICAgICAgICAjIFJlYWQgU1JTQ3RsIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OTogICAgICAgICAgIGFkZCAgICAgdDMsdDEsemVybyAgICAgICAgICAgICAgIyBTYXZlIG9mZiBjdXJyZW50IFNSU0N0bA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODA6ICAgICAgICAgICBleHQgICAgIHQyLHQxLDI2LDQgICAgICAgICAgICAgICMgdG8gb2J0YWluIEhTUyBmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODE6ICAgICAgICAgICBpbnMgICAgIHQxLHQyLDYsNCAgICAgICAgICAgICAgICMgUHV0IEhTUyBmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODI6ICAgICAgICAgICBtdGMwICAgIHQxLF9DUDBfU1JTQ1RMICAgICAgICAgICMgaW50byBTUlNDdGw8UFNTPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODM6ICAgICAgICAgICBlaGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2xlYXIgaGF6YXJkIGJlZm9yZSB1c2luZyBuZXcgU1JTQ1RMDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NDogICAgICAgICAgIHdycGdwciAgZ3AsZ3AgICAgICAgICAgICAgICAgICAgIyBTZXQgZ2xvYmFsIHBvaW50ZXIgaW4gUFNTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NTogICAgICAgICAgIG10YzAgICAgdDMsX0NQMF9TUlNDVEwgICAgICAgICAgIyBSZXN0b3JlIFNSU0N0bA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODY6ICAgICAgICAgICBlaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODg6ICAgI2VsaWYgKFBJQzMyX1NSU19TRVRfQ09VTlQgPiAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODk6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkwOiAgICAgICAgICAgIyBJbml0aWFsaXplIEdsb2JhbCBQb2ludGVyIGluIFNoYWRvdyBTZXQocykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkxOiAgICAgICAgICAgIyAgIFRoZSBTUlNDdGwgUFNTIGZpZWxkIG11c3QgYmUgc2V0IHRvIHRoZSBzaGFkb3cgc2V0IGluIHdoaWNoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MjogICAgICAgICAgICMgICB0byBpbml0aWFsaXplIHRoZSBnbG9iYWwgcG9pbnRlci4gIFdlIHdpbGwgaW5pdGlhbGl6ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTM6ICAgICAgICAgICAjICAgU1JTQ3RsPFBTUz4gdG8gdGhlIG51bWJlciBvZiByZWcgc2V0cyBhbmQgd29yayBkb3duIHRvIHNldCB6ZXJvLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTQ6ICAgICAgICAgICAjICAgV2Ugd3JpdGUgdGhlIGdsb2JhbCBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBzaGFkb3cgc2V0IHRvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NTogICAgICAgICAgICMgICBlbnN1cmUgdGhhdCBvbiBpbnRlcnJ1cHQsIHRoZSBnbG9iYWwgcG9pbnRlciBoYXMgYmVlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTY6ICAgICAgICAgICAjICAgaW5pdGlhbGl6ZWQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTg6ICAgICAgICAgICBtZmMwICAgIHQxLF9DUDBfU1JTQ1RMICAgICAgICAgICMgUmVhZCBTUlNDdGwgcmVnaXN0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk5OiAgICAgICAgICAgYWRkICAgICB0Myx0MSx6ZXJvICAgICAgICAgICAgICAjIFNhdmUgb2ZmIGN1cnJlbnQgU1JTQ3RsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAxOiAgICAgICAgICAgbGkgICAgICB0MiwoUElDMzJfU1JTX1NFVF9DT1VOVC0xKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMzogICAxOiAgICAgIGlucyAgICAgdDEsdDIsNiw0ICAgICAgICAgICAgICAgIyBQdXQgbmV4dCBzaGFkb3cgc2V0IGZpZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDogICAgICAgICAgIG10YzAgICAgdDEsX0NQMF9TUlNDVEwgICAgICAgICAgIyBpbnRvIFNSU0N0bDxQU1M+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNTogICAgICAgICAgIGVoYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbGVhciBoYXphcmQgYmVmb3JlIHVzaW5nIG5ldyBTUlNDVEwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA2OiAgICAgICAgICAgd3JwZ3ByICBncCxncCAgICAgICAgICAgICAgICAgICAjIFNldCBnbG9iYWwgcG9pbnRlciBpbiBQU1MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDg6ICAgICAgICAgICBhZGRpdSAgIHQyLHQyLC0xICAgICAgICAgICAgICAgICMgTmV4dCBsb3dlciBzaGFkb3cgc2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMb29wIGZvciBhbGwgc2V0cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTA6ICAgICAgICAgICBibmUgICAgIHQyLCQwLDFiICAgICAgICAgICAgICAgICMgRG93biB0byB6ZXJvIChub3JtYWwgR1BSIHNldCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjExOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxMjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEzOiAgICAgICAgICAgbXRjMCAgICB0MyxfQ1AwX1NSU0NUTCAgICAgICAgICAjIFJlc3RvcmUgU1JTQ3RsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNDogICAgICAgICAgIGVoYg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTU6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNjogICAjZW5kaWYgLyogKFBJQzMyX1NSU19TRVRfQ09VTlQgPiAyKSAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxODogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTk6ICAgICAgICAgICAjIENhbGwgdGhlICJvbiByZXNldCIgcHJvY2VkdXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyMDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAyQUMgIDNDMDhCRkQxICAgTFVJIFQwLCAtMTY0MzEgICAgICAgICAgICAgICAyMjE6ICAgICAgICAgICBsYSAgICAgIHQwLF9vbl9yZXNldA0KQkZEMDAyQjQgIDAxMDBGODA5ICAgSkFMUiBUMCAgICAgICAgICAgICAgICAgICAgICAyMjI6ICAgICAgICAgICBqYWxyICAgIHQwDQpCRkQwMDJCOCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDIyMzogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyNTogICAjaWYgZGVmaW5lZChJTklUX01NVV9NWl9GSVhFRCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI2OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyNzogICAgICAgICAgICMgSW5pdGlhbGl6ZSBUTEIgZm9yIGZpeGVkIG1hcHBpbmcgdG8gRUJJIGFuZCBTUUkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI4OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyOTogICAgICAgICAgIC5leHRlcm4gX19waWMzMl90bGJfaW5pdF9lYmlfc3FpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzMDogICAgICAgICAgIGxhICAgICAgdDAsX19waWMzMl90bGJfaW5pdF9lYmlfc3FpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzMTogICAgICAgICAgIGphbHIgICAgdDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMyOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzMzogICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzU6ICAgI2lmIGRlZmluZWQoSU5JVF9MMV9DQUNIRSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM2OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzNzogICAgICAgICAgICMgSW5pdGlhbGl6ZSBMMSBjYWNoZSByZWdpc3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzg6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM5OiAgICAgICAgICAgLmV4dGVybiBfX3BpYzMyX2luaXRfY2FjaGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQwOiAgICAgICAgICAgbGEgICAgICB0MCxfX3BpYzMyX2luaXRfY2FjaGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQxOiAgICAgICAgICAgamFsciAgICB0MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDI6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQzOiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0NTogICAjaWYgZGVmaW5lZChFTl9TVEFDS19GSUxMKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDY6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ3OiAgICAgICAgICAgIyBGaWxsIHN0YWNrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0ODogICAgICAgICAgICMgVE9ETyAtIGhhbmRsZSBkaWZmZXJlbnQgc3RhY2sgbGVuZ3RoczoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ5OiAgICAgICAgICAgIyBtdWxpdHBsZSBvZiA0LCA4LCAxNiwgb3IgMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUwOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDJCQyAgM0MwOEJGRDIgICBMVUkgVDAsIC0xNjQzMCAgICAgICAgICAgICAgIDI1MTogICAgICAgICAgIGxhICAgICAgdDAsX3N0YWNrX3N0YXJ0DQpCRkQwMDJDNCAgM0MwOUJGRDIgICBMVUkgVDEsIC0xNjQzMCAgICAgICAgICAgICAgIDI1MjogICAgICAgICAgIGxhICAgICAgdDEsX3N0YWNrDQpCRkQwMDJDQyAgMTAwMDAwMDUgICBCRVEgWkVSTywgWkVSTywgMHhCRkQwMDJFNCAgIDI1MzogICAgICAgICAgIGIgICAgICAgX3N0YWNrX2NoZWNrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1OiAgIF9zdGFja19pbml0Og0KQkZEMDAyRDAgIEFEMDAwMDAwICAgU1cgWkVSTywgMChUMCkgICAgICAgICAgICAgICAyNTY6ICAgICAgICAgICBzdyAgICAgIHplcm8sMHgwKHQwKQ0KQkZEMDAyRDQgIEFEMDAwMDA0ICAgU1cgWkVSTywgNChUMCkgICAgICAgICAgICAgICAyNTc6ICAgICAgICAgICBzdyAgICAgIHplcm8sMHg0KHQwKQ0KQkZEMDAyRDggIEFEMDAwMDA4ICAgU1cgWkVSTywgOChUMCkgICAgICAgICAgICAgICAyNTg6ICAgICAgICAgICBzdyAgICAgIHplcm8sMHg4KHQwKQ0KQkZEMDAyREMgIEFEMDAwMDBDICAgU1cgWkVSTywgMTIoVDApICAgICAgICAgICAgICAyNTk6ICAgICAgICAgICBzdyAgICAgIHplcm8sMHhjKHQwKQ0KQkZEMDAyRTAgIDI1MDgwMDEwICAgQURESVUgVDAsIFQwLCAxNiAgICAgICAgICAgICAyNjA6ICAgICAgICAgICBhZGR1ICAgIHQwLDE2DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2MTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYyOiAgIF9zdGFja19jaGVjazoNCkJGRDAwMkU0ICAwMTA5MDgyQiAgIFNMVFUgQVQsIFQwLCBUMSAgICAgICAgICAgICAgMjYzOiAgICAgICAgICAgYmx0dSAgICB0MCx0MSxfc3RhY2tfaW5pdA0KQkZEMDAyRUMgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAyNjQ6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY1OiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2NzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjg6ICAgICAgICAgICAjIENsZWFyIHVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9ucw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjk6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwMkYwICAzQzA4QkZEMiAgIExVSSBUMCwgLTE2NDMwICAgICAgICAgICAgICAgMjcwOiAgICAgICAgICAgbGEgICAgICB0MCxfYnNzX2JlZ2luDQpCRkQwMDJGOCAgM0MwOUJGRDIgICBMVUkgVDEsIC0xNjQzMCAgICAgICAgICAgICAgIDI3MTogICAgICAgICAgIGxhICAgICAgdDEsX2Jzc19lbmQNCkJGRDAwMzAwICAxMDAwMDAwNiAgIEJFUSBaRVJPLCBaRVJPLCAweEJGRDAwMzFDICAgMjcyOiAgICAgICAgICAgYiAgICAgICBfYnNzX2NoZWNrDQpCRkQwMDMwNCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDI3MzogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3NTogICBfYnNzX2luaXQ6DQpCRkQwMDMwOCAgQUQwMDAwMDAgICBTVyBaRVJPLCAwKFQwKSAgICAgICAgICAgICAgIDI3NjogICAgICAgICAgIHN3ICAgICAgemVybywweDAodDApDQpCRkQwMDMwQyAgQUQwMDAwMDQgICBTVyBaRVJPLCA0KFQwKSAgICAgICAgICAgICAgIDI3NzogICAgICAgICAgIHN3ICAgICAgemVybywweDQodDApDQpCRkQwMDMxMCAgQUQwMDAwMDggICBTVyBaRVJPLCA4KFQwKSAgICAgICAgICAgICAgIDI3ODogICAgICAgICAgIHN3ICAgICAgemVybywweDgodDApDQpCRkQwMDMxNCAgQUQwMDAwMEMgICBTVyBaRVJPLCAxMihUMCkgICAgICAgICAgICAgIDI3OTogICAgICAgICAgIHN3ICAgICAgemVybywweGModDApDQpCRkQwMDMxOCAgMjUwODAwMTAgICBBRERJVSBUMCwgVDAsIDE2ICAgICAgICAgICAgIDI4MDogICAgICAgICAgIGFkZHUgICAgdDAsMTYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgxOiAgIF9ic3NfY2hlY2s6DQpCRkQwMDMxQyAgMDEwOTA4MkIgICBTTFRVIEFULCBUMCwgVDEgICAgICAgICAgICAgIDI4MjogICAgICAgICAgIGJsdHUgICAgdDAsdDEsX2Jzc19pbml0DQpCRkQwMDMyNCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDI4MzogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4NTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODY6ICAgICAgICAgICAjIEluaXRpYWxpemUgZGF0YSB1c2luZyB0aGUgbGlua2VyLWdlbmVyYXRlZCAuZGluaXQgdGFibGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg3OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ODogICAgICAgICAgIC5lcXVpdiBGTVRfQ0xFQVIsMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODk6ICAgICAgICAgICAuZXF1aXYgRk1UX0NPUFksMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTA6ICAgX2Rpbml0X2luaXQ6DQpCRkQwMDMyOCAgM0MwOEJGRDAgICBMVUkgVDAsIC0xNjQzMiAgICAgICAgICAgICAgIDI5MTogICAgICAgICAgIGxhICAgICAgdDAsX2Rpbml0X2FkZHINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTM6ICAgI2RlZmluZSBTUkMgdDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk0OiAgICNkZWZpbmUgRFNUIHQxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5NTogICAjZGVmaW5lIExFTiB0Mg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTY6ICAgI2RlZmluZSBGTVQgdDMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk3OiAgIA0KQkZEMDAzMzAgIDhEMDkwMDAwICAgTFcgVDEsIDAoVDApICAgICAgICAgICAgICAgICAyOTg6ICAgMDogICAgICBsdyAgICAgIERTVCwwKFNSQykNCkJGRDAwMzM0ICAxMTIwMDAxOCAgIEJFUSBUMSwgWkVSTywgMHhCRkQwMDM5OCAgICAgMjk5OiAgICAgICAgICAgYmVxeiAgICBEU1QsOWYNCkJGRDAwMzM4ICAyNTA4MDAwNCAgIEFERElVIFQwLCBUMCwgNCAgICAgICAgICAgICAgMzAwOiAgICAgICAgICAgYWRkdSAgICBTUkMsNA0KQkZEMDAzM0MgIDhEMEEwMDAwICAgTFcgVDIsIDAoVDApICAgICAgICAgICAgICAgICAzMDE6ICAgICAgICAgICBsdyAgICAgIExFTiwwKFNSQykNCkJGRDAwMzQwICAyNTA4MDAwNCAgIEFERElVIFQwLCBUMCwgNCAgICAgICAgICAgICAgMzAyOiAgICAgICAgICAgYWRkdSAgICBTUkMsNA0KQkZEMDAzNDQgIDhEMEIwMDAwICAgTFcgVDMsIDAoVDApICAgICAgICAgICAgICAgICAzMDM6ICAgICAgICAgICBsdyAgICAgIEZNVCwwKFNSQykNCkJGRDAwMzQ4ICAxMTYwMDAwOSAgIEJFUSBUMywgWkVSTywgMHhCRkQwMDM3MCAgICAgMzA0OiAgICAgICAgICAgYmVxICAgICBGTVQsJDAsX2Rpbml0X2NsZWFyDQpCRkQwMDM0QyAgMjUwODAwMDQgICBBRERJVSBUMCwgVDAsIDQgICAgICAgICAgICAgIDMwNTogICAgICAgICAgIGFkZHUgICAgU1JDLDQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDc6ICAgX2Rpbml0X2NvcHk6DQpCRkQwMDM1MCAgOTEwQzAwMDAgICBMQlUgVDQsIDAoVDApICAgICAgICAgICAgICAgIDMwODogICAgICAgICAgIGxidSAgICAgdDQsMChTUkMpDQpCRkQwMDM1NCAgMjU0QUZGRkYgICBBRERJVSBUMiwgVDIsIC0xICAgICAgICAgICAgIDMwOTogICAgICAgICAgIHN1YnUgICAgTEVOLDENCkJGRDAwMzU4ICAyNTA4MDAwMSAgIEFERElVIFQwLCBUMCwgMSAgICAgICAgICAgICAgMzEwOiAgICAgICAgICAgYWRkdSAgICBTUkMsMQ0KQkZEMDAzNUMgIEExMkMwMDAwICAgU0IgVDQsIDAoVDEpICAgICAgICAgICAgICAgICAzMTE6ICAgICAgICAgICBzYiAgICAgIHQ0LDAoRFNUKQ0KQkZEMDAzNjAgIDE1NDBGRkZCICAgQk5FIFQyLCBaRVJPLCAweEJGRDAwMzUwICAgICAzMTI6ICAgICAgICAgICBibmUgICAgIExFTiwkMCxfZGluaXRfY29weQ0KQkZEMDAzNjQgIDI1MjkwMDAxICAgQURESVUgVDEsIFQxLCAxICAgICAgICAgICAgICAzMTM6ICAgICAgICAgICBhZGR1ICAgIERTVCwxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxNDogICANCkJGRDAwMzY4ICAxMDAwMDAwNSAgIEJFUSBaRVJPLCBaRVJPLCAweEJGRDAwMzgwICAgMzE1OiAgICAgICAgICAgYiAgICAgICBfZGluaXRfZW5kDQpCRkQwMDM2QyAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDMxNjogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxODogICBfZGluaXRfY2xlYXI6DQpCRkQwMDM3MCAgQTEyMDAwMDAgICBTQiBaRVJPLCAwKFQxKSAgICAgICAgICAgICAgIDMxOTogICAgICAgICAgIHNiICAgICAgJDAsKERTVCkNCkJGRDAwMzc0ICAyNTRBRkZGRiAgIEFERElVIFQyLCBUMiwgLTEgICAgICAgICAgICAgMzIwOiAgICAgICAgICAgc3VidSAgICBMRU4sMQ0KQkZEMDAzNzggIDE1NDBGRkZEICAgQk5FIFQyLCBaRVJPLCAweEJGRDAwMzcwICAgICAzMjE6ICAgICAgICAgICBibmUgICAgIExFTiwkMCxfZGluaXRfY2xlYXINCkJGRDAwMzdDICAyNTI5MDAwMSAgIEFERElVIFQxLCBUMSwgMSAgICAgICAgICAgICAgMzIyOiAgICAgICAgICAgYWRkdSAgICBEU1QsMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyNDogICBfZGluaXRfZW5kOg0KQkZEMDAzODAgIDI1MDgwMDAzICAgQURESVUgVDAsIFQwLCAzICAgICAgICAgICAgICAzMjU6ICAgICAgICAgICBhZGR1ICAgIFNSQywzDQpCRkQwMDM4NCAgMjQwQUZGRkMgICBBRERJVSBUMiwgWkVSTywgLTQgICAgICAgICAgIDMyNjogICAgICAgICAgIGFkZGl1ICAgTEVOLCQwLDB4RkZGRkZGRkMNCkJGRDAwMzg4ICAwMTQ4NDAyNCAgIEFORCBUMCwgVDIsIFQwICAgICAgICAgICAgICAgMzI3OiAgICAgICAgICAgYW5kICAgICBTUkMsTEVOLFNSQw0KQkZEMDAzOEMgIDhEMDkwMDAwICAgTFcgVDEsIDAoVDApICAgICAgICAgICAgICAgICAzMjg6ICAgICAgICAgICBsdyAgICAgIERTVCwwKFNSQykNCkJGRDAwMzkwICAxNTIwRkZFNyAgIEJORSBUMSwgWkVSTywgMHhCRkQwMDMzMCAgICAgMzI5OiAgICAgICAgICAgYm5lICAgICBEU1QsJDAsMGINCkJGRDAwMzk0ICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMzMwOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzMTogICA5Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzMzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzQ6ICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBubyBSQU0gZnVuY3Rpb25zLCBza2lwIHRoZSBuZXh0IHNlY3Rpb24gLS0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM1OiAgICAgICAgICAgIyBpbml0aWFsaXppbmcgYnVzIG1hdHJpeCByZWdpc3RlcnMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzNjogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAzOTggIDNDMDkwMDAwICAgTFVJIFQxLCAwICAgICAgICAgICAgICAgICAgICAzMzc6ICAgICAgICAgICBsYSAgICAgIHQxLF9yYW1mdW5jX2JlZ2luDQpCRkQwMDNBMCAgMTEyMDAwMDEgICBCRVEgVDEsIFpFUk8sIDB4QkZEMDAzQTggICAgIDMzODogICAgICAgICAgIGJlcXogICAgdDEsX3JhbWZ1bmNfZG9uZQ0KQkZEMDAzQTQgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAzMzk6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDE6ICAgI2lmIGRlZmluZWQoSU5JVF9TU1gpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0MjogICAgIC8qIE5vIGluaXRpYWxpemF0aW9uIHJlcXVpcmVkICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0MzogICAjZWxzZSAvKiBVc2UgQk1YICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0NDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDU6ICAgICAgICAgICAjIEluaXRpYWxpemUgYnVzIG1hdHJpeCByZWdpc3RlcnMgaWYgUkFNIGZ1bmN0aW9ucyBleGlzdCBpbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQ2OiAgICAgICAgICAgIyBhcHBsaWNhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDc6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQ4OiAgICAgICAgICAgbGEgICAgICB0MSxfYm14ZGtwYmFfYWRkcmVzcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDk6ICAgICAgICAgICBsYSAgICAgIHQyLEJNWERLUEJBDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1MDogICAgICAgICAgIHN3ICAgICAgdDEsMCh0MikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzUxOiAgICAgICAgICAgbGEgICAgICB0MSxfYm14ZHVkYmFfYWRkcmVzcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTI6ICAgICAgICAgICBsYSAgICAgIHQyLEJNWERVREJBDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1MzogICAgICAgICAgIHN3ICAgICAgdDEsMCh0MikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU0OiAgICAgICAgICAgbGEgICAgICB0MSxfYm14ZHVwYmFfYWRkcmVzcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTU6ICAgICAgICAgICBsYSAgICAgIHQyLEJNWERVUEJBDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1NjogICAgICAgICAgIHN3ICAgICAgdDEsMCh0MikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU3OiAgICNlbmRpZiAvKiBJTklUX1NTWCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1OTogICBfcmFtZnVuY19kb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjI6ICAgICAgICAgICAjIEluaXRpYWxpemUgQ1AwIHJlZ2lzdGVycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjM6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY0OiAgICAgICAgICAgIyBJbml0aWFsaXplIENvdW50IHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2NTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAzQTggIDQwODA0ODAwICAgTVRDMCBaRVJPLCBDb3VudCAgICAgICAgICAgICAzNjY6ICAgICAgICAgICBtdGMwICAgIHplcm8sX0NQMF9DT1VOVA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2ODogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjk6ICAgICAgICAgICAjIEluaXRpYWxpemUgQ29tcGFyZSByZWdpc3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzA6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwM0FDICAyNDBBRkZGRiAgIEFERElVIFQyLCBaRVJPLCAtMSAgICAgICAgICAgMzcxOiAgICAgICAgICAgbGkgICAgICB0MiwtMQ0KQkZEMDAzQjAgIDQwOEE1ODAwICAgTVRDMCBUMiwgQ29tcGFyZSAgICAgICAgICAgICAzNzI6ICAgICAgICAgICBtdGMwICAgIHQyLF9DUDBfQ09NUEFSRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3NDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzU6ICAgICAgICAgICAjIEluaXRpYWxpemUgRUJhc2UgcmVnaXN0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc2OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDNCNCAgM0MwOUJGRDAgICBMVUkgVDEsIC0xNjQzMiAgICAgICAgICAgICAgIDM3NzogICAgICAgICAgIGxhICAgICAgdDEsX2ViYXNlX2FkZHJlc3MNCkJGRDAwM0JDICA0MDg5NzgwMSAgIE1UQzAgVDEsIEVCYXNlICAgICAgICAgICAgICAgMzc4OiAgICAgICAgICAgbXRjMCAgICB0MSxfQ1AwX0VCQVNFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3OTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzgwOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4MTogICAgICAgICAgICMgSW5pdGlhbGl6ZSBJbnRDdGwgcmVnaXN0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzgyOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDNDMCAgM0MwOTAwMDAgICBMVUkgVDEsIDAgICAgICAgICAgICAgICAgICAgIDM4MzogICAgICAgICAgIGxhICAgICAgdDEsX3ZlY3Rvcl9zcGFjaW5nDQpCRkQwMDNDOCAgMjQwQTAwMDAgICBBRERJVSBUMiwgWkVSTywgMCAgICAgICAgICAgIDM4NDogICAgICAgICAgIGxpICAgICAgdDIsMCAgICAgICAgICAgICAgICAgICAgIyBDbGVhciB0MiBhbmQNCkJGRDAwM0NDICA3RDJBNDk0NCAgIElOUyBUMiwgVDEsIDUsIDUgICAgICAgICAgICAgMzg1OiAgICAgICAgICAgaW5zICAgICB0Mix0MSw1LDUgICAgICAgICAgICAgICAjIHNoaWZ0IHZhbHVlIHRvIFZTIGZpZWxkDQpCRkQwMDNEMCAgNDA4QTYwMDEgICBNVEMwIFQyLCBJbnRDdGwgICAgICAgICAgICAgIDM4NjogICAgICAgICAgIG10YzAgICAgdDIsX0NQMF9JTlRDVEwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODg6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg5OiAgICAgICAgICAgIyBJbml0aWFsaXplIENBVVNFIHJlZ2lzdGVycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTA6ICAgICAgICAgICAjIC0gRW5hYmxlIGNvdW50aW5nIG9mIENvdW50IHJlZ2lzdGVyIDxEQyA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5MTogICAgICAgICAgICMgLSBVc2Ugc3BlY2lhbCBleGNlcHRpb24gdmVjdG9yIDxJViA9IDE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5MjogICAgICAgICAgICMgLSBDbGVhciBwZW5kaW5nIHNvZnR3YXJlIGludGVycnVwdHMgPElQMTpJUDAgPSAwPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTM6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwM0Q0ICAzQzA5MDA4MCAgIExVSSBUMSwgMTI4ICAgICAgICAgICAgICAgICAgMzk0OiAgICAgICAgICAgbGkgICAgICB0MSwweDAwODAwMDAwDQpCRkQwMDNEOCAgNDA4OTY4MDAgICBNVEMwIFQxLCBDYXVzZSAgICAgICAgICAgICAgIDM5NTogICAgICAgICAgIG10YzAgICAgdDEsX0NQMF9DQVVTRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5NzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTg6ICAgICAgICAgICAjIEluaXRpYWxpemUgU1RBVFVTIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OTogICAgICAgICAgICMgLSBBY2Nlc3MgdG8gQ29wcm9jZXNzb3IgMCBub3QgYWxsb3dlZCBpbiB1c2VyIG1vZGUgPENVMCA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwMDogICAgICAgICAgICMgLSBVc2VyIG1vZGUgdXNlcyBjb25maWd1cmVkIGVuZGlhbm5lc3MgPFJFID0gMD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAxOiAgICAgICAgICAgIyAtIFByZXNlcnZlIEJvb3RzdHJhcCBFeGNlcHRpb24gdmVjdG9ycyA8QkVWPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDI6ICAgICAgICAgICAjIC0gUHJlc2VydmUgc29mdCByZXNldCA8U1I+IGFuZCBub24tbWFza2FibGUgaW50ZXJydXB0IDxOTUk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwMzogICAgICAgICAgICMgLSBDb3JFeHRlbmQgZW5hYmxlZCBiYXNlZCBvbiB3aGV0aGVyIENvckV4dGVuZCBVc2VyIERlZmluZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA0OiAgICAgICAgICAgIyAgIEluc3RydWN0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgPENFRSA9IENvbmZpZzxVREk+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDU6ICAgICAgICAgICAjIC0gRGlzYWJsZSBhbnkgcGVuZGluZyBpbnRlcnJ1cHMgPElNNy4uSU0yID0gMCwgSU0xLi5JTTAgPSAwPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDY6ICAgICAgICAgICAjIC0gRGlzYWJsZSBoYXJkd2FyZSBpbnRlcnJ1cHRzIDxJUEw3OklQTDIgPSAwPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDc6ICAgICAgICAgICAjIC0gQmFzZSBtb2RlIGlzIEtlcm5lbCBtb2RlIDxVTSA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwODogICAgICAgICAgICMgLSBFcnJvciBsZXZlbCBpcyBub3JtYWwgPEVSTCA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwOTogICAgICAgICAgICMgLSBFeGNlcHRpb24gbGV2ZWwgaXMgbm9ybWFsIDxFWEwgPSAwPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTA6ICAgICAgICAgICAjIC0gSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgPElFID0gMD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDExOiAgICAgICAgICAgIyAtIERTUHIyIEFTRSBpcyBlbmFibGVkIGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBpdCA8TVggPSAxPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTI6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwM0RDICA0MDA4ODAwMCAgIE1GQzAgVDAsIENvbmZpZyAgICAgICAgICAgICAgNDEzOiAgICAgICAgICAgbWZjMCAgICB0MCxfQ1AwX0NPTkZJRw0KQkZEMDAzRTAgIDdEMDkwNTgwICAgRVhUIFQxLCBUMCwgMjIsIDEgICAgICAgICAgICA0MTQ6ICAgICAgICAgICBleHQgICAgIHQxLHQwLDIyLDEgICAgICAgICAgICAgICMgRXh0cmFjdCBVREkgZnJvbSBDb25maWcgcmVnaXN0ZXINCkJGRDAwM0U0ICAwMDA5NEM0MCAgIFNMTCBUMSwgVDEsIDE3ICAgICAgICAgICAgICAgNDE1OiAgICAgICAgICAgc2xsICAgICB0MSx0MSwxNyAgICAgICAgICAgICAgICAjIE1vdmUgVURJIHRvIFN0YXR1cy5DRUUgbG9jYXRpb24NCkJGRDAwM0U4ICA0MDA4NjAwMCAgIE1GQzAgVDAsIFN0YXR1cyAgICAgICAgICAgICAgNDE2OiAgICAgICAgICAgbWZjMCAgICB0MCxfQ1AwX1NUQVRVUw0KQkZEMDAzRUMgIDNDMDEwMDU4ICAgTFVJIEFULCA4OCAgICAgICAgICAgICAgICAgICA0MTc6ICAgICAgICAgICBhbmQgICAgIHQwLHQwLDB4MDA1ODAwMDAgICAgICAgICMgUHJlc2VydmUgU1IsIE5NSSwgYW5kIEJFVg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTg6ICAgI2lmIGRlZmluZWQoSU5JVF9EU1BSMikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDE5OiAgICAgICAgICAgbGkgICAgICB0MiwgMHgwMTAwMDAwMCAgICAgICAgICAjIFNldCB0aGUgU3RhdHVzLk1YIGJpdCB0byBlbmFibGUgRFNQDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyMDogICAgICAgICAgIG9yICAgICAgdDAsdDIsdDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIxOiAgICNlbmRpZg0KQkZEMDAzRjQgIDAxMjg0MDI1ICAgT1IgVDAsIFQxLCBUMCAgICAgICAgICAgICAgICA0MjI6ICAgICAgICAgICBvciAgICAgIHQwLHQxLHQwICAgICAgICAgICAgICAgICMgSW5jbHVkZSBTdGF0dXMuQ0VFIChmcm9tIFVESSkNCkJGRDAwM0Y4ICA0MDg4NjAwMCAgIE1UQzAgVDAsIFN0YXR1cyAgICAgICAgICAgICAgNDIzOiAgICAgICAgICAgbXRjMCAgICB0MCxfQ1AwX1NUQVRVUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyNTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjY6ICAgICAgICAgICAjIENhbGwgdGhlICJvbiBib290c3RyYXAiIHByb2NlZHVyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Mjc6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwM0ZDICAzQzA4QkZEMSAgIExVSSBUMCwgLTE2NDMxICAgICAgICAgICAgICAgNDI4OiAgICAgICAgICAgbGEgICAgICB0MCxfb25fYm9vdHN0cmFwDQpCRkQwMDQwNCAgMDEwMEY4MDkgICBKQUxSIFQwICAgICAgICAgICAgICAgICAgICAgIDQyOTogICAgICAgICAgIGphbHIgICAgdDANCkJGRDAwNDA4ICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNDMwOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzMTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDMyOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzMzogICAgICAgICAgICMgSW5pdGlhbGl6ZSBTdGF0dXM8QkVWPiBmb3Igbm9ybWFsIGV4Y2VwdGlvbiB2ZWN0b3JzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzNDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDA0MEMgIDQwMDg2MDAwICAgTUZDMCBUMCwgU3RhdHVzICAgICAgICAgICAgICA0MzU6ICAgICAgICAgICBtZmMwICAgIHQwLF9DUDBfU1RBVFVTDQpCRkQwMDQxMCAgM0MwMUZGQkYgICBMVUkgQVQsIC02NSAgICAgICAgICAgICAgICAgIDQzNjogICAgICAgICAgIGFuZCAgICAgdDAsdDAsMHhmZmJmZmZmZiAgICAgICAgIyBDbGVhciBCRVYNCkJGRDAwNDFDICA0MDg4NjAwMCAgIE1UQzAgVDAsIFN0YXR1cyAgICAgICAgICAgICAgNDM3OiAgICAgICAgICAgbXRjMCAgICB0MCxfQ1AwX1NUQVRVUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Mzg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzOTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDA6ICAgICAgICAgICAjIENhbGwgbWFpbi4gV2UgZG8gdGhpcyB2aWEgYSB0aHVuayBpbiB0aGUgdGV4dCBzZWN0aW9uIHNvIHRoYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQxOiAgICAgICAgICAgIyBhIG5vcm1hbCBqdW1wIGFuZCBsaW5rIGNhbiBiZSB1c2VkLCBlbmFibGluZyB0aGUgc3RhcnR1cCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0MjogICAgICAgICAgICMgdG8gd29yayBwcm9wZXJseSB3aGV0aGVyIG1haW4gaXMgd3JpdHRlbiBpbiBNSVBTMTYgb3IgTUlQUzMyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0MzogICAgICAgICAgICMgY29kZS4gSS5lLiwgdGhlIGxpbmtlciB3aWxsIGNvcnJlY3RseSBhZGp1c3QgdGhlIEpBTCB0byBKQUxYIGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0NDogICAgICAgICAgICMgbmVjZXNzYXJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0NTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDA0MjAgIDMwODQwMDAwICAgQU5ESSBBMCwgQTAsIDAgICAgICAgICAgICAgICA0NDY6ICAgICAgICAgICBhbmQgICAgIGEwLGEwLDANCkJGRDAwNDI0ICAzMEE1MDAwMCAgIEFOREkgQTEsIEExLCAwICAgICAgICAgICAgICAgNDQ3OiAgICAgICAgICAgYW5kICAgICBhMSxhMSwwDQpCRkQwMDQyOCAgM0MwOEJGRDAgICBMVUkgVDAsIC0xNjQzMiAgICAgICAgICAgICAgIDQ0ODogICAgICAgICAgIGxhICAgICAgdDAsX21haW5fZW50cnkNCkJGRDAwNDMwICAwMTAwMDAwOCAgIEpSIFQwICAgICAgICAgICAgICAgICAgICAgICAgNDQ5OiAgICAgICAgICAganIgICAgICB0MA0KQkZEMDA0MzQgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA0NTA6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDUxOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTI6ICAgICAgICAgICAuZW5kIF9zdGFydHVwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1MzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTU6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU2OiAgICAgICAgICAgIyBHZW5lcmFsIEV4Y2VwdGlvbiBWZWN0b3IgSGFuZGxlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTc6ICAgICAgICAgICAjIEp1bXBzIHRvIF9nZW5lcmFsX2V4Y2VwdGlvbl9jb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1ODogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTk6ICAgICAgICAgICAuc2VjdGlvbiAuZ2VuX2hhbmRsZXIsY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NjA6ICAgICAgICAgICAuc2V0IG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NjE6ICAgICAgICAgICAuZW50IF9nZW5fZXhjZXB0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2MjogICBfZ2VuX2V4Y2VwdGlvbjoNCkJGRDAwMTgwICAzQzFBQkZEMCAgIExVSSBLMCwgLTE2NDMyICAgICAgICAgICAgICAgNDYzOiAgIDA6ICAgICAgbGEgICAgICBrMCxfZ2VuZXJhbF9leGNlcHRpb25fY29udGV4dA0KQkZEMDAxODggIDAzNDAwMDA4ICAgSlIgSzAgICAgICAgICAgICAgICAgICAgICAgICA0NjQ6ICAgICAgICAgICBqciAgICAgIGswDQpCRkQwMDE4QyAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2NTogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NjY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2NzogICAgICAgICAgIC5lbmQgX2dlbl9leGNlcHRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDY4OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Njk6ICAgI2lmIGRlZmluZWQoSU5JVF9NTVVfTVpfRklYRUQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3MDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzE6ICAgICAgICAgICAjIFNpbXBsZSBUTEItUmVmaWxsIEV4Y2VwdGlvbiBWZWN0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDcyOiAgICAgICAgICAgIyBKdW1wcyB0byBfc2ltcGxlX3RsYl9yZWZpbGxfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDczOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3NDogICAgICAgICAgIC5zZWN0aW9uIC5zaW1wbGVfdGxiX3JlZmlsbF92ZWN0b3IsY29kZSxrZWVwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3NTogICAgICAgICAgIC5zZXQgbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3NjogICAgICAgICAgIC5lbnQgc2ltcGxlX3RsYl9yZWZpbGxfdmVjdG9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3NzogICBzaW1wbGVfdGxiX3JlZmlsbF92ZWN0b3I6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3ODogICAgICAgICAgIGxhICAgICAgazAsX3NpbXBsZV90bGJfcmVmaWxsX2V4Y2VwdGlvbl9jb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTogICAgICAgICAgIGpyICAgICAgazANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgwOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4MTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgyOiAgICAgICAgICAgLmVuZCBzaW1wbGVfdGxiX3JlZmlsbF92ZWN0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgzOiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4NTogICAjaWYgZGVmaW5lZChJTklUX0wxX0NBQ0hFKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODY6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg3OiAgICAgICAgICAgIyBDYWNoZS1FcnJvciBFeGNlcHRpb24gVmVjdG9yIEhhbmRsZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg4OiAgICAgICAgICAgIyBKdW1wcyB0byBfY2FjaGVfZXJyX2V4Y2VwdGlvbl9jb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4OTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTA6ICAgICAgICAgICAuc2VjdGlvbiAuY2FjaGVfZXJyX3ZlY3Rvcixjb2RlLGtlZXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDkxOiAgICAgICAgICAgLnNldCBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDkyOiAgICAgICAgICAgLmVudCBfY2FjaGVfZXJyX3ZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTM6ICAgX2NhY2hlX2Vycl92ZWN0b3I6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5NDogICAgICAgICAgIGxhICAgICAgazAsX2NhY2hlX2Vycl9leGNlcHRpb25fY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTU6ICAgICAgICAgICBqciAgICAgIGswDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5NjogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5ODogICAgICAgICAgIC5lbmQgX2NhY2hlX2Vycl92ZWN0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk5OiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMTogICAgICAgICAgIC5zZWN0aW9uIC50ZXh0Lm1haW5fZW50cnksY29kZSxrZWVwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMjogICAgICAgICAgIC5lbnQgX21haW5fZW50cnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAzOiAgIF9tYWluX2VudHJ5Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwNTogICAjaWYgZGVmaW5lZChDUFBfSU5JVCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA2OiAgICAgICAgICAgLndlYWsgX2luaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA3OiAgICAgICAgICAgIyBjYWxsIC5pbml0IHNlY3Rpb24gdG8gcnVuIGNvbnN0cnVjdG9ycyBldGMNCkJGRDA2ODA0ICAzQzA0QkZEMCAgIExVSSBBMCwgLTE2NDMyICAgICAgICAgICAgICAgNTA4OiAgICAgICAgICAgbHVpCWEwLCVoaShfaW5pdCkNCkJGRDA2ODA4ICAyN0JERkZFOCAgIEFERElVIFNQLCBTUCwgLTI0ICAgICAgICAgICAgNTA5OiAgICAgICAgICAgYWRkaXUJc3Asc3AsLTI0DQpCRkQwNjgwQyAgMjQ4NDA0MzggICBBRERJVSBBMCwgQTAsIDEwODAgICAgICAgICAgIDUxMDogICAgICAgICAgIGFkZGl1CWEwLGEwLCVsbyhfaW5pdCkNCkJGRDA2ODEwICAxMDgwMDAwMyAgIEJFUSBBMCwgWkVSTywgMHhCRkQwNjgyMCAgICAgNTExOiAgICAgICAgICAgYmVxCWEwLCQwLDJmDQpCRkQwNjgxNCAgQUZCRjAwMTQgICBTVyBSQSwgMjAoU1ApICAgICAgICAgICAgICAgIDUxMjogICAgICAgICAgIHN3CSQzMSwyMChzcCkJICMsDQpCRkQwNjgxOCAgMDA4MEY4MDkgICBKQUxSIEEwICAgICAgICAgICAgICAgICAgICAgIDUxMzogICAgICAgICAgIGphbHIJYTANCkJGRDA2ODFDICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNTE0OiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxNTogICAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTY6ICAgI2VuZGlmDQpCRkQwNjgyMCAgMzA4NDAwMDAgICBBTkRJIEEwLCBBMCwgMCAgICAgICAgICAgICAgIDUxNzogICAgICAgICAgIGFuZCAgICAgYTAsYTAsMA0KQkZEMDY4MjQgIDMwQTUwMDAwICAgQU5ESSBBMSwgQTEsIDAgICAgICAgICAgICAgICA1MTg6ICAgICAgICAgICBhbmQgICAgIGExLGExLDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE5OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjA6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTIxOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjI6ICAgICAgICAgICAjIENhbGwgbWFpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjM6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDA2ODI4ICA3N0Y0MjVCMCAgIEpBTFggMHhCRkQwOTZDMCAgICAgICAgICAgICAgNTI0OiAgICAgICAgICAgamFsIG1haW4NCkJGRDA2ODJDICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNTI1OiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyNjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI3OiAgICNpZiBkZWZpbmVkKENBTExfRVhJVCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI4OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyOTogICAgICAgICAgICMgQ2FsbCBleGl0KCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTMwOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzMTogICAgICAgICAgIGphbCBleGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzMjogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzM6ICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzNDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM1OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzNjogICAgICAgICAgICMgSnVzdCBpbiBjYXNlLCBnbyBpbnRvIGluZmluaXRlIGxvb3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM3OiAgICAgICAgICAgIyBDYWxsIGEgc29mdHdhcmUgYnJlYWtwb2ludCBvbmx5IHdpdGggLW1kZWJ1Z2dlciBjb21waWxlciBvcHRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM4OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzOTogICAgICAgICAgIC53ZWFrIF9fZXhjZXB0aW9uX2hhbmRsZXJfYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQwOiAgIF9fY3J0MF9leGl0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDE6ICAgMToNCkJGRDA2ODMwICAzQzAyMDAwMCAgIExVSSBWMCwgMCAgICAgICAgICAgICAgICAgICAgNTQyOiAgICAgICAgICAgbGEgICAgICB2MCxfX2V4Y2VwdGlvbl9oYW5kbGVyX2JyZWFrDQpCRkQwNjgzOCAgMTA0MDAwMDMgICBCRVEgVjAsIFpFUk8sIDB4QkZEMDY4NDggICAgIDU0MzogICAgICAgICAgIGJlcSAgICAgdjAsMCwwZg0KQkZEMDY4M0MgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA1NDQ6ICAgICAgICAgICBub3ANCkJGRDA2ODQwICAwMDQwRjgwOSAgIEpBTFIgVjAgICAgICAgICAgICAgICAgICAgICAgNTQ1OiAgICAgICAgICAgamFsciAgICB2MA0KQkZEMDY4NDQgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA1NDY6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQ3OiAgIA0KQkZEMDY4NDggIDEwMDBGRkY5ICAgQkVRIFpFUk8sIFpFUk8sIDB4QkZEMDY4MzAgICA1NDg6ICAgMDogICAgICBiICAgICAgIDFiDQpCRkQwNjg0QyAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDU0OTogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1MTogICAgICAgICAgIC5nbG9ibCBfX2NydDBfZXhpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTI6ICAgICAgICAgICAuZW5kIF9tYWluX2VudHJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1MzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTU0OiAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTU1OiAgICAgICAjIGxhdW5jaF9mdw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTY6ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTc6ICAgICAgIC5nbG9ibCAgcm9tX2xhdW5jaF9mdw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTg6ICAgICAgIC5zZXQgICAgbm9taXBzMTYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTU5OiAgICAgICAuc2V0ICAgIG1pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjA6ICAgICAgIC5lbnQgICByb21fbGF1bmNoX2Z3DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2MTogICAgICAgLnR5cGUgIHJvbV9sYXVuY2hfZncsIEBmdW5jdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2MzogICByb21fbGF1bmNoX2Z3Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2NTogICAgICAgLnNldCAgICBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY2OiAgICAgICAuc2V0ICAgIG5vbWFjcm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Njg6ICAgbGZ3MToNCkJGRDA2ODUwICA0NzdDMDAwMCAgIERJIFpFUk8gICAgICAgICAgICAgICAgICAgICAgNTY5OiAgICAgICBkaQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzA6ICAgbGZ3MjoNCkJGRDA2ODU0ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzICAgICAgICAgICAgNTcxOiAgICAgICBlaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTcyOiAgIGxmdzM6DQpCRkQwNjg1OCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDU3MzogICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3NDogICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3NTogICAgICAgIyB0dXJuIG9mZiBjb3JlIHRpbWVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3NjogICBsZnc0Og0KQkZEMDY4NUEgIDAwRkMwMTBEICAgTUZDMCBUMCwgQ2F1c2UgICAgICAgICAgICAgICA1Nzc6ICAgICAgIG1mYzAgICAgdDAsIF9DUDBfQ0FVU0UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc4OiAgIGxmdzU6DQpCRkQwNjg1RSAgRjdGRjQxQTkgICBMVUkgVDEsIDB4RjdGRiAgICAgICAgICAgICAgIDU3OTogICAgICAgbHVpICAgICB0MSwgMHhmN2ZmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4MDogICBsZnc2Og0KQkZEMDY4NjIgIEZGRkY1MTI5ICAgT1JJIFQxLCBUMSwgLTEgICAgICAgICAgICAgICA1ODE6ICAgICAgIG9yaSAgICAgdDEsIHQxLCAweGZmZmYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTgyOiAgIGxmdzc6DQpCRkQwNjg2NiAgNDI1MDAxMjggICBBTkQgVDAsIFQwLCBUMSAgICAgICAgICAgICAgIDU4MzogICAgICAgYW5kICAgICB0MCwgdDAsIHQxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4NDogICBsZnc4Og0KQkZEMDY4NkEgIDAyRkMwMTBEICAgTVRDMCBUMCwgQ2F1c2UgICAgICAgICAgICAgICA1ODU6ICAgICAgIG10YzAgICAgdDAsIF9DUDBfQ0FVU0UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg2OiAgIGxmdzk6DQpCRkQwNjg2RSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMyAgICAgICAgICAgIDU4NzogICAgICAgZWhiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4ODogICBsZncxMDoNCkJGRDA2ODcyICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNTg5OiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTkwOiAgIGxmdzExOg0KQkZEMDY4NzQgIDAwRkMwMTBDICAgTUZDMCBUMCwgU3RhdHVzICAgICAgICAgICAgICA1OTE6ICAgICAgIG1mYzAgICAgdDAsIF9DUDBfU1RBVFVTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5MjogICBsZncxMjoNCkJGRDA2ODc4ICAwMDQwNDFBOSAgIExVSSBUMSwgMHg0MCAgICAgICAgICAgICAgICAgNTkzOiAgICAgICBsdWkgICAgIHQxLCAweDAwNDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTk0OiAgIGxmdzEzOg0KQkZEMDY4N0MgIDQyOTAwMTI4ICAgT1IgVDAsIFQwLCBUMSAgICAgICAgICAgICAgICA1OTU6ICAgICAgIG9yICAgICAgdDAsIHQwLCB0MSAgICAgICAgIyBCRVYoYml0WzIyXSkgPSAxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5NjogICBsZncxNDoNCkJGRDA2ODgwICAwMkZDMDEwQyAgIE1UQzAgVDAsIFN0YXR1cyAgICAgICAgICAgICAgNTk3OiAgICAgICBtdGMwICAgIHQwLCBfQ1AwX1NUQVRVUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTg6ICAgbGZ3MTU6DQpCRkQwNjg4NCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMyAgICAgICAgICAgIDU5OTogICAgICAgZWhiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwMDogICBsZncxNjoNCkJGRDA2ODg4ICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNjAxOiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAyOiAgIGxmdzE3OiAgICANCkJGRDA2ODhBICAxRjNDMDAwNCAgIEpBTFIuSEIgWkVSTywgQTAgICAgICAgICAgICAgNjAzOiAgICAgICBKUi5IQiAgIGEwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwNDogICBsZncxODoNCkJGRDA2ODhFICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNjA1OiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA2OiAgIDA6DQpCRkQwNjg5MiAgMzQ0OUQ3RTggICBKIDB4QkZEMDY4OTIgICAgICAgICAgICAgICAgIDYwNzogICAgICAgaiAgICAgICAwYiAgICAgICAgICAgICAgICAgICMgc2hvdWxkIG5vdCBnZXQgaGVyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDg6ICAgbGZ3MTk6DQpCRkQwNjg5NiAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDYwOTogICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxMDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjExOiAgICAgICAuc2V0ICAgIG1hY3JvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxMjogICAgICAgLnNldCAgICByZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxMzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjE0OiAgICAgICAuZW5kICAgIHJvbV9sYXVuY2hfZncNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjE1OiAgICAgICAuc2l6ZSAgIHJvbV9sYXVuY2hfZncsIC4tcm9tX2xhdW5jaF9mdw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTY6ICAgICAgIAotLS0gIEM6L0UvRGV2L0ZyZWVSVE9TL1dvcmtpbmdDb3B5L0ZyZWVSVE9TL0RlbW8vUElDMzJNRUMxNHh4X01QTEFCL3NyYy9NRUMxNHh4L2ludGVycnVwdHMvZ2lycTI0ZC5TICAtLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTQgTWljcm9jaGlwIEluYy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzogICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogICAgICAgICAxIHRhYiA9PSA0IHNwYWNlcyENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODogICAgICNpZmRlZiBfX1hDMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTogICAgICNpbmNsdWRlIDx4Yy5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDogICAgI2luY2x1ZGUgPHN5cy9hc20uaD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6ICAgICNlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOiAgICAjaW5jbHVkZSAiUmVncy5TIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6ICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycW0uaCINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDogICAgICogIE1FQzE0eHggR0lSUTI0IERpc2FnZ3JlZ2F0ZWQgVmVjdG9yIEp1bXAgdGFibGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyOiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0OiAgICAgICAgLmV4dGVybiBnaXJxMjRfYjANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU6ICAgICAgICAuZXh0ZXJuIGdpcnEyNF9iMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjogICAgICAgIC5leHRlcm4gZ2lycTI0X2IyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg6ICAgICNpZiBHSVJRMjRfRElTQUdHICE9IDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDogICAgLyogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOiAgICAgKiBGcmVlUlRPUyBIYW5kbGVyIGZvciBNSVBTIE0xNEsgU29mdHdhcmUgSW50ZXJydXB0IDAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyOiAgICAgKiBpbXBsZW1lbnRlZCBpbiB0aGUgcG9ydGluZyBsYXllci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDogICAgICAgIC5leHRlcm4gdlBvcnRZaWVsZElTUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OiAgICAvKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgICogRGlzYWdncmVnYXRlZCBnaXJxMjRfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4OiAgICAgKiBQcm9ncmFtIGFkZHJlc3Mgb2YgdGhpcyB2ZXJzaW9uIG9mIGdpcnEyNF9pc3IgaW50byBKVFZJQyBHSVJRMjQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzk6ICAgICAqIEFnZ3JlZ2F0b3IgQ29udHJvbCByZWdpc3RlciB3aXRoIGJpdFswXSA9IDEuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwOiAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDE6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjogICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM6ICAgICAqIE5PVEU6IEFsbCB0aGUgYWRkaXRpb25hbCBsYWJlbHMgc3Vycm91bmRpbmcgZXZlcnkgaW5zdHJ1Y3Rpb24gYXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0OiAgICAgKiB0aGVyZSB0byBmb3JjZSBHQ0MgT0JKRFVNUCB0byBkaXNhc3NlbWJsZSBtaWNyb01JUFMgY29ycmVjdGx5Lg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTogICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc6ICAgICAgICAuaW5zbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODogICAgI2lmZGVmIF9fWEMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTogICAgICAgIC5zZWN0aW9uIC5naXJxcy5naXJxMjRfaXNyLCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwOiAgICAjZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTogICAgICAgIC5zZWN0aW9uIC5naXJxcy5naXJxMjRfaXNyLCJ4Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzOiAgICAgICAgLnNldCAgbm9taXBzMTYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQ6ICAgICAgICAuc2V0ICBtaWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTU6ICAgICAgICAuc2V0ICBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgICAgICAuc2V0ICBub2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3OiAgICAgICAgLmVudCBnaXJxMjRfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4OiAgICAgICAgLmdsb2JhbCBnaXJxMjRfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5OiAgICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTogICAgZ2lycTI0X2lzcjoNCkJGRDAwMjcwICAzMkQ0RDdFOCAgIEogMHhCRkQwNjVBOCAgICAgICAgICAgICAgICAgNjI6ICAgICAgICBKICAgICAgIGdpcnEyNF9iMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MzogICAgZzI0YjBiOg0KQkZEMDAyNzQgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA2NDogICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY2OiAgICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjc6ICAgIGcyNGIxYToNCkJGRDAwMjc4ICAwNUI4RDdFOCAgIEogMHhCRkQwMEI3MCAgICAgICAgICAgICAgICAgNjg6ICAgICAgICBKICAgICAgIHZQb3J0WWllbGRJU1IgICAvKiBnaXJxMjRfYjEgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjk6ICAgIGcyNGIxYjoNCkJGRDAwMjdDICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNzA6ICAgICAgICBOT1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzE6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MjogICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDczOiAgICBnMjRiMmE6DQpCRkQwMDI4MCAgMjNBMEQ3RTggICBKIDB4QkZEMDQ3NDAgICAgICAgICAgICAgICAgIDc0OiAgICAgICAgSiAgICAgICBnaXJxMjRfYjINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzU6ICAgIGcyNGIyYjoNCkJGRDAwMjg0ICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNzY6ICAgICAgICBOT1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzc6ICAgIGcyNGVuZDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzg6ICAgICAgICAuZW5kIGdpcnEyNF9pc3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzk6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MDogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgxOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODI6ICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgzOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQ6ICAgIA0KLS0tICBDOi9FL0Rldi9GcmVlUlRPUy9Xb3JraW5nQ29weS9GcmVlUlRPUy9EZW1vL1BJQzMyTUVDMTR4eF9NUExBQi9zcmMvTUVDMTR4eC9pbnRlcnJ1cHRzL2dpcnEyM2QuUyAgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogICAgIC8qDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6ICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDE0IE1pY3JvY2hpcCBJbmMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6ICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OiAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6ICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6ICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OiAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6ICAgICAjaWZkZWYgX19YQzMyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6ICAgICAjaW5jbHVkZSA8eGMuaD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICNpbmNsdWRlIDxzeXMvYXNtLmg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOiAgICAjZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgI2luY2x1ZGUgIlJlZ3MuUyINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OiAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFtLmgiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTogICAgICogIE1FQzE0eHggR0lSUTIzIERpc2FnZ3JlZ2F0ZWQgVmVjdG9yIEp1bXAgdGFibGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzOiAgICAgICAgLmV4dGVybiBnaXJxMjNfYjANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTogICAgICAgIC5leHRlcm4gZ2lycTIzX2IyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAgICAgICAgLmV4dGVybiBnaXJxMjNfYjMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iNA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODogICAgICAgIC5leHRlcm4gZ2lycTIzX2I1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OiAgICAgICAgLmV4dGVybiBnaXJxMjNfYjYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iNw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICAgIC5leHRlcm4gZ2lycTIzX2I4DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyOiAgICAgICAgLmV4dGVybiBnaXJxMjNfYjkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iMTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQ6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iMTENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iMTINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iMTMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODogICAgI2lmIEdJUlEyM19ESVNBR0cgIT0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwOiAgICAvKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTogICAgICogRnJlZVJUT1MgSGFuZGxlciBmb3IgTUVDMTR4eCBSVE9TIFRpbWVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyOiAgICAgKiBpbXBsZW1lbnRlZCBpbiB0aGUgcG9ydGluZyBsYXllci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM6ICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDogICAgICAgIC5leHRlcm4gdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OiAgICAvKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzogICAgICogRGlzYWdncmVnYXRlZCBnaXJxMjNfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4OiAgICAgKiBQcm9ncmFtIGFkZHJlc3Mgb2YgdGhpcyB2ZXJzaW9uIG9mIGdpcnEyM19pc3IgaW50byBKVFZJQyBHSVJRMjMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk6ICAgICAqIEFnZ3JlZ2F0b3IgQ29udHJvbCByZWdpc3RlciB3aXRoIGJpdFswXSA9IDEuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwOiAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjogICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM6ICAgICAqIE5PVEU6IEFsbCB0aGUgYWRkaXRpb25hbCBsYWJlbHMgc3Vycm91bmRpbmcgZXZlcnkgaW5zdHJ1Y3Rpb24gYXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0OiAgICAgKiB0aGVyZSB0byBmb3JjZSBHQ0MgT0JKRFVNUCB0byBkaXNhc3NlbWJsZSBtaWNyb01JUFMgY29ycmVjdGx5Lg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTogICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc6ICAgICAgICAuaW5zbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ODogICAgI2lmZGVmIF9fWEMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTogICAgICAgIC5zZWN0aW9uIC5naXJxcy5naXJxMjNfaXNyLCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwOiAgICAjZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTogICAgICAgIC5zZWN0aW9uIC5naXJxcy5naXJxMjNfaXNyLCJ4Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MjogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzOiAgICAgICAgLnNldCAgbm9taXBzMTYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQ6ICAgICAgICAuc2V0ICBtaWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU6ICAgICAgICAuc2V0ICBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjY6ICAgICAgICAuc2V0ICBub2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY3OiAgICAgICAgLmVudCBnaXJxMjNfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4OiAgICAgICAgLmdsb2JhbCBnaXJxMjNfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5OiAgICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzA6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MTogICAgZ2lycTIzX2lzcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzI6ICAgIA0KQkZEMDAyMDAgIDM5NTBEN0U4ICAgSiAweEJGRDA3MkEwICAgICAgICAgICAgICAgICA3MzogICAgICAgIEogICAgICAgZ2lycTIzX2IwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc0OiAgICBnMjNiMGI6DQpCRkQwMDIwNCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDc1OiAgICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc2OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzc6ICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ODogICAgZzIzYjFhOg0KQkZEMDAyMDggIDI2MzhEN0U4ICAgSiAweEJGRDA0QzcwICAgICAgICAgICAgICAgICA3OTogICAgICAgIEogICAgICAgZ2lycTIzX2IxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwOiAgICBnMjNiMWI6DQpCRkQwMDIwQyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDgxOiAgICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODM6ICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NDogICAgZzIzYjJhOg0KQkZEMDAyMTAgIDI2QTBEN0U4ICAgSiAweEJGRDA0RDQwICAgICAgICAgICAgICAgICA4NTogICAgICAgIEogICAgICAgZ2lycTIzX2IyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg2OiAgICBnMjNiMmI6DQpCRkQwMDIxNCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDg3OiAgICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg4OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODk6ICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDogICAgZzIzYjNhOg0KQkZEMDAyMTggIDI3MDhEN0U4ICAgSiAweEJGRDA0RTEwICAgICAgICAgICAgICAgICA5MTogICAgICAgIEogICAgICAgZ2lycTIzX2IzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkyOiAgICBnMjNiM2I6DQpCRkQwMDIxQyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDkzOiAgICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTU6ICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NjogICAgZzIzYjRhOg0KQkZEMDAyMjAgIDA0OTBEN0U4ICAgSiAweEJGRDAwOTIwICAgICAgICAgICAgICAgICA5NzogICAgICAgIEogICAgICAgZ2lycTIzX2I0IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ODogICAgZzIzYjRiOg0KQkZEMDAyMjQgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA5OTogICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMTogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyOiAgIGcyM2I1YToNCkJGRDAwMjI4ICAyNzcwRDdFOCAgIEogMHhCRkQwNEVFMCAgICAgICAgICAgICAgICAgMTAzOiAgICAgICBKICAgICAgIGdpcnEyM19iNQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQ6ICAgZzIzYjViOg0KQkZEMDAyMkMgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxMDU6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNzogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4OiAgIGcyM2I2YToNCkJGRDAwMjMwICAyN0Q4RDdFOCAgIEogMHhCRkQwNEZCMCAgICAgICAgICAgICAgICAgMTA5OiAgICAgICBKICAgICAgIGdpcnEyM19iNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTA6ICAgZzIzYjZiOg0KQkZEMDAyMzQgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxMTE6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMzogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0OiAgIGcyM2I3YToNCkJGRDAwMjM4ICAyODQwRDdFOCAgIEogMHhCRkQwNTA4MCAgICAgICAgICAgICAgICAgMTE1OiAgICAgICBKICAgICAgIGdpcnEyM19iNw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTY6ICAgZzIzYjdiOg0KQkZEMDAyM0MgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxMTc6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOTogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIwOiAgIGcyM2I4YToNCkJGRDAwMjQwICAyOEE4RDdFOCAgIEogMHhCRkQwNTE1MCAgICAgICAgICAgICAgICAgMTIxOiAgICAgICBKICAgICAgIGdpcnEyM19iOA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjI6ICAgZzIzYjhiOg0KQkZEMDAyNDQgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxMjM6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNTogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI2OiAgIGcyM2I5YToNCkJGRDAwMjQ4ICAyOTEwRDdFOCAgIEogMHhCRkQwNTIyMCAgICAgICAgICAgICAgICAgMTI3OiAgICAgICBKICAgICAgIGdpcnEyM19iOQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjg6ICAgZzIzYjliOg0KQkZEMDAyNEMgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxMjk6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMTogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMyOiAgIGcyM2IxMGE6DQpCRkQwMDI1MCAgMjk3OEQ3RTggICBKIDB4QkZEMDUyRjAgICAgICAgICAgICAgICAgIDEzMzogICAgICAgSiAgICAgICBnaXJxMjNfYjEwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNDogICBnMjNiMTBiOg0KQkZEMDAyNTQgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxMzU6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNzogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM4OiAgIGcyM2IxMWE6DQpCRkQwMDI1OCAgMjlFMEQ3RTggICBKIDB4QkZEMDUzQzAgICAgICAgICAgICAgICAgIDEzOTogICAgICAgSiAgICAgICBnaXJxMjNfYjExDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MDogICBnMjNiMTFiOg0KQkZEMDAyNUMgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxNDE6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MzogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ0OiAgIGcyM2IxMmE6DQpCRkQwMDI2MCAgMkE0OEQ3RTggICBKIDB4QkZEMDU0OTAgICAgICAgICAgICAgICAgIDE0NTogICAgICAgSiAgICAgICBnaXJxMjNfYjEyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NjogICBnMjNiMTJiOg0KQkZEMDAyNjQgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxNDc6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OTogICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUwOiAgIGcyM2IxM2E6DQpCRkQwMDI2OCAgMkFCMEQ3RTggICBKIDB4QkZEMDU1NjAgICAgICAgICAgICAgICAgIDE1MTogICAgICAgSiAgICAgICBnaXJxMjNfYjEzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MjogICBnMjNiMTNiOg0KQkZEMDAyNkMgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAxNTM6ICAgICAgIE5PUA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTQ6ICAgZzIzZW5kOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTU6ICAgICAgIC5lbmQgZ2lycTIzX2lzcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NzogICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU4OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTk6ICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjE6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYzOiAgIA0KLS0tICBDOi9FL0Rldi9GcmVlUlRPUy9Xb3JraW5nQ29weS9GcmVlUlRPUy9EZW1vL1BJQzMyTUVDMTR4eF9NUExBQi9zcmMvTUVDMTR4eC9leGNlcHRpb25zL01QTEFCL2dlbmVyYWxfZXhjZXB0aW9uX2N0eC5TCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6ICAgICAgKiAgICAgICAgICAgICAgICAgIEdlbmVyYWwgRXhjZXB0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OiAgICAgICogRmlsZW5hbWU6ICAgICAgICBnZW5lcmFsLWV4Y2VwdGlvbi5TDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiAgICAgICogUHJvY2Vzc29yOiAgICAgICBQSUMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICAqIENvbXBpbGVyOiAgICAgICAgTVBMQUIgWEMzMiB2MS4wMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogICAgICogICAgICAgICAgICAgICAgICBNUExBQiBYIElERQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgICogQ29tcGFueTogICAgICAgICBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgICogU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICAgKiBUaGlzIHNvZnR3YXJlIGlzIGRldmVsb3BlZCBieSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6ICAgICAqIHN1YnNpZGlhcmllcyAoIk1pY3JvY2hpcCIpLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk6ICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDogICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgICogMS4gICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzogICAgICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU6ICAgICAqIDIuICAgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY6ICAgICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc6ICAgICAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTogICAgICogMy4gICAgICBNaWNyb2NoaXAncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgICAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI6ICAgICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTUlDUk9DSElQICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0OiAgICAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgICogTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OiAgICAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ICAgICAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XU09FVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICAgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDogICAgICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTogICAgICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDogICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTogICAgI2luY2x1ZGUgPHhjLmg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OiAgICAjaWZkZWYgX19MSUJCVUlMRF9fDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OiAgICAgICAuZmlsZSAxICJnZW5lcmFsLWV4Y2VwdGlvbi5TIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODogICAgICAgLmxvYyAxIDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDogICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxOiAgICAgICMgRGVmYXVsdCBnZW5lcmFsIGV4Y2VwdGlvbiBoYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyOiAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDogICAgICAuZXh0ZXJuIF9nZW5lcmFsX2V4Y2VwdGlvbl9oYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgICAgLnNlY3Rpb24gLnRleHQuZ2VuZXJhbF9leGNlcHRpb24sIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc6ICAgICAgLnNldCBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg6ICAgICAgLnNldCBub2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5OiAgICAgIC5zZXQgbm9taXBzMTYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA6ICAgICAgLmdsb2JsIF9nZW5lcmFsX2V4Y2VwdGlvbl9jb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxOiAgICAgIC5lbnQgX2dlbmVyYWxfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MzogICAgX2dlbmVyYWxfZXhjZXB0aW9uX2NvbnRleHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU6ICAgICAgIyBTYXZlIG9mZiB0aGUgbm9uLWNhbGxlZSBzYXZlZCByZWdpc3RlcnMgdGhhdCBtYXkgZ2V0IG11Y2tlZCB3aXRoDQpCRkQwNDlFNCAgMjdCREZGQTggICBBRERJVSBTUCwgU1AsIC04OCAgICAgICAgICAgIDY2OiAgICAgICBhZGRpdSBzcCwgc3AsIC04OA0KQkZEMDQ5RTggIEFGQTEwMDA0ICAgU1cgQVQsIDQoU1ApICAgICAgICAgICAgICAgICA2NzogICAgICAgc3cgJDEsICA0KHNwKQ0KQkZEMDQ5RUMgIEFGQTIwMDA4ICAgU1cgVjAsIDgoU1ApICAgICAgICAgICAgICAgICA2ODogICAgICAgc3cgdjAsICA4KHNwKQ0KQkZEMDQ5RjAgIEFGQTMwMDBDICAgU1cgVjEsIDEyKFNQKSAgICAgICAgICAgICAgICA2OTogICAgICAgc3cgdjEsIDEyKHNwKQ0KQkZEMDQ5RjQgIEFGQTQwMDEwICAgU1cgQTAsIDE2KFNQKSAgICAgICAgICAgICAgICA3MDogICAgICAgc3cgYTAsIDE2KHNwKQ0KQkZEMDQ5RjggIEFGQTUwMDE0ICAgU1cgQTEsIDIwKFNQKSAgICAgICAgICAgICAgICA3MTogICAgICAgc3cgYTEsIDIwKHNwKQ0KQkZEMDQ5RkMgIEFGQTYwMDE4ICAgU1cgQTIsIDI0KFNQKSAgICAgICAgICAgICAgICA3MjogICAgICAgc3cgYTIsIDI0KHNwKQ0KQkZEMDRBMDAgIEFGQTcwMDFDICAgU1cgQTMsIDI4KFNQKSAgICAgICAgICAgICAgICA3MzogICAgICAgc3cgYTMsIDI4KHNwKQ0KQkZEMDRBMDQgIEFGQTgwMDIwICAgU1cgVDAsIDMyKFNQKSAgICAgICAgICAgICAgICA3NDogICAgICAgc3cgdDAsIDMyKHNwKQ0KQkZEMDRBMDggIEFGQTkwMDI0ICAgU1cgVDEsIDM2KFNQKSAgICAgICAgICAgICAgICA3NTogICAgICAgc3cgdDEsIDM2KHNwKQ0KQkZEMDRBMEMgIEFGQUEwMDI4ICAgU1cgVDIsIDQwKFNQKSAgICAgICAgICAgICAgICA3NjogICAgICAgc3cgdDIsIDQwKHNwKQ0KQkZEMDRBMTAgIEFGQUIwMDJDICAgU1cgVDMsIDQ0KFNQKSAgICAgICAgICAgICAgICA3NzogICAgICAgc3cgdDMsIDQ0KHNwKQ0KQkZEMDRBMTQgIEFGQUMwMDMwICAgU1cgVDQsIDQ4KFNQKSAgICAgICAgICAgICAgICA3ODogICAgICAgc3cgdDQsIDQ4KHNwKQ0KQkZEMDRBMTggIEFGQUQwMDM0ICAgU1cgVDUsIDUyKFNQKSAgICAgICAgICAgICAgICA3OTogICAgICAgc3cgdDUsIDUyKHNwKQ0KQkZEMDRBMUMgIEFGQUUwMDM4ICAgU1cgVDYsIDU2KFNQKSAgICAgICAgICAgICAgICA4MDogICAgICAgc3cgdDYsIDU2KHNwKQ0KQkZEMDRBMjAgIEFGQUYwMDNDICAgU1cgVDcsIDYwKFNQKSAgICAgICAgICAgICAgICA4MTogICAgICAgc3cgdDcsIDYwKHNwKQ0KQkZEMDRBMjQgIEFGQjgwMDQwICAgU1cgVDgsIDY0KFNQKSAgICAgICAgICAgICAgICA4MjogICAgICAgc3cgdDgsIDY0KHNwKQ0KQkZEMDRBMjggIEFGQjkwMDQ0ICAgU1cgVDksIDY4KFNQKSAgICAgICAgICAgICAgICA4MzogICAgICAgc3cgdDksIDY4KHNwKQ0KQkZEMDRBMkMgIEFGQkYwMDQ4ICAgU1cgUkEsIDcyKFNQKSAgICAgICAgICAgICAgICA4NDogICAgICAgc3cgcmEsIDcyKHNwKQ0KQkZEMDRBMzAgIDAwMDA0MDEyICAgTUZMTyBUMCwgMCAgICAgICAgICAgICAgICAgICA4NTogICAgICAgbWZsbyB0MA0KQkZEMDRBMzQgIEFGQTgwMDRDICAgU1cgVDAsIDc2KFNQKSAgICAgICAgICAgICAgICA4NjogICAgICAgc3cgdDAsIDc2KHNwKQ0KQkZEMDRBMzggIDAwMDA0MDEwICAgTUZISSBUMCwgMCAgICAgICAgICAgICAgICAgICA4NzogICAgICAgbWZoaSB0MA0KQkZEMDRBM0MgIEFGQTgwMDUwICAgU1cgVDAsIDgwKFNQKSAgICAgICAgICAgICAgICA4ODogICAgICAgc3cgdDAsIDgwKHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OTogICAgDQpCRkQwNEE0MCAgM0MxQUJGRDAgICBMVUkgSzAsIC0xNjQzMiAgICAgICAgICAgICAgIDkwOiAgICAgICBsYSAgICAgIGswLF9nZW5lcmFsX2V4Y2VwdGlvbl9oYW5kbGVyDQpCRkQwNEE0OCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDkxOiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTI6ICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MzogICAgICAgIyBQYXNzIENhdXNlIGFuZCBTdGF0dXMgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb24NCkJGRDA0QTRDICA0MDA0NjgwMCAgIE1GQzAgQTAsIENhdXNlICAgICAgICAgICAgICAgOTQ6ICAgICAgIG1mYzAgYTAsIF9DUDBfQ0FVU0UNCkJGRDA0QTUwICA0MDA1NjAwMCAgIE1GQzAgQTEsIFN0YXR1cyAgICAgICAgICAgICAgOTU6ICAgICAgIG1mYzAgYTEsIF9DUDBfU1RBVFVTDQpCRkQwNEE1NCAgMDM0MEY4MDkgICBKQUxSIEswICAgICAgICAgICAgICAgICAgICAgIDk2OiAgICAgICBqYWxyICAgIGswDQpCRkQwNEE1OCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDk3OiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTg6ICAgIA0KQkZEMDRBNUMgIDhGQTgwMDUwICAgTFcgVDAsIDgwKFNQKSAgICAgICAgICAgICAgICA5OTogICAgICAgbHcgdDAsIDgwKHNwKQ0KQkZEMDRBNjAgIDAxMDAwMDExICAgTVRISSBUMCwgMCAgICAgICAgICAgICAgICAgICAxMDA6ICAgICAgbXRoaSB0MA0KQkZEMDRBNjQgIDhGQTgwMDRDICAgTFcgVDAsIDc2KFNQKSAgICAgICAgICAgICAgICAxMDE6ICAgICAgbHcgdDAsIDc2KHNwKQ0KQkZEMDRBNjggIDAxMDAwMDEzICAgTVRMTyBUMCwgMCAgICAgICAgICAgICAgICAgICAxMDI6ICAgICAgbXRsbyB0MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDM6ICAgDQpCRkQwNEE2QyAgOEZBMTAwMDQgICBMVyBBVCwgNChTUCkgICAgICAgICAgICAgICAgIDEwNDogICAgICBsdyAkMSwgIDQoc3ApDQpCRkQwNEE3MCAgOEZBMjAwMDggICBMVyBWMCwgOChTUCkgICAgICAgICAgICAgICAgIDEwNTogICAgICBsdyB2MCwgIDgoc3ApDQpCRkQwNEE3NCAgOEZBMzAwMEMgICBMVyBWMSwgMTIoU1ApICAgICAgICAgICAgICAgIDEwNjogICAgICBsdyB2MSwgMTIoc3ApDQpCRkQwNEE3OCAgOEZBNDAwMTAgICBMVyBBMCwgMTYoU1ApICAgICAgICAgICAgICAgIDEwNzogICAgICBsdyBhMCwgMTYoc3ApDQpCRkQwNEE3QyAgOEZBNTAwMTQgICBMVyBBMSwgMjAoU1ApICAgICAgICAgICAgICAgIDEwODogICAgICBsdyBhMSwgMjAoc3ApDQpCRkQwNEE4MCAgOEZBNjAwMTggICBMVyBBMiwgMjQoU1ApICAgICAgICAgICAgICAgIDEwOTogICAgICBsdyBhMiwgMjQoc3ApDQpCRkQwNEE4NCAgOEZBNzAwMUMgICBMVyBBMywgMjgoU1ApICAgICAgICAgICAgICAgIDExMDogICAgICBsdyBhMywgMjgoc3ApDQpCRkQwNEE4OCAgOEZBODAwMjAgICBMVyBUMCwgMzIoU1ApICAgICAgICAgICAgICAgIDExMTogICAgICBsdyB0MCwgMzIoc3ApDQpCRkQwNEE4QyAgOEZBOTAwMjQgICBMVyBUMSwgMzYoU1ApICAgICAgICAgICAgICAgIDExMjogICAgICBsdyB0MSwgMzYoc3ApDQpCRkQwNEE5MCAgOEZBQTAwMjggICBMVyBUMiwgNDAoU1ApICAgICAgICAgICAgICAgIDExMzogICAgICBsdyB0MiwgNDAoc3ApDQpCRkQwNEE5NCAgOEZBQjAwMkMgICBMVyBUMywgNDQoU1ApICAgICAgICAgICAgICAgIDExNDogICAgICBsdyB0MywgNDQoc3ApDQpCRkQwNEE5OCAgOEZBQzAwMzAgICBMVyBUNCwgNDgoU1ApICAgICAgICAgICAgICAgIDExNTogICAgICBsdyB0NCwgNDgoc3ApDQpCRkQwNEE5QyAgOEZBRDAwMzQgICBMVyBUNSwgNTIoU1ApICAgICAgICAgICAgICAgIDExNjogICAgICBsdyB0NSwgNTIoc3ApDQpCRkQwNEFBMCAgOEZBRTAwMzggICBMVyBUNiwgNTYoU1ApICAgICAgICAgICAgICAgIDExNzogICAgICBsdyB0NiwgNTYoc3ApDQpCRkQwNEFBNCAgOEZBRjAwM0MgICBMVyBUNywgNjAoU1ApICAgICAgICAgICAgICAgIDExODogICAgICBsdyB0NywgNjAoc3ApDQpCRkQwNEFBOCAgOEZCODAwNDAgICBMVyBUOCwgNjQoU1ApICAgICAgICAgICAgICAgIDExOTogICAgICBsdyB0OCwgNjQoc3ApDQpCRkQwNEFBQyAgOEZCOTAwNDQgICBMVyBUOSwgNjgoU1ApICAgICAgICAgICAgICAgIDEyMDogICAgICBsdyB0OSwgNjgoc3ApDQpCRkQwNEFCMCAgOEZCRjAwNDggICBMVyBSQSwgNzIoU1ApICAgICAgICAgICAgICAgIDEyMTogICAgICBsdyByYSwgNzIoc3ApDQpCRkQwNEFCNCAgMjdCRDAwNTggICBBRERJVSBTUCwgU1AsIDg4ICAgICAgICAgICAgIDEyMjogICAgICBhZGRpdSBzcCwgc3AsIDg4DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzogICANCkJGRDA0QUI4ICAwMDAwMDBDMCAgIEVIQiAgICAgICAgICAgICAgICAgICAgICAgICAgMTI0OiAgICAgIGVoYg0KQkZEMDRBQkMgIDQyMDAwMDE4ICAgRVJFVCAgICAgICAgICAgICAgICAgICAgICAgICAxMjU6ICAgICAgZXJldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNzogICAgIC5lbmQgX2dlbmVyYWxfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4OiAgIA0K