From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kevan Rehm Subject: Re: bluestore bug#15724: bluefs _replay file with link count 0: Date: Tue, 19 Jul 2016 14:09:59 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from esa2.cray.iphmx.com ([68.232.143.164]:19979 "EHLO esa2.cray.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753600AbcGSOKH (ORCPT ); Tue, 19 Jul 2016 10:10:07 -0400 In-Reply-To: Content-Language: en-US Content-ID: Sender: ceph-devel-owner@vger.kernel.org List-ID: To: Varada Kari , "ceph-devel (ceph-devel@vger.kernel.org)" VmFyYWRhLA0KDQpJIGFkZGVkIHRoZSBmb2xsb3dpbmcgYXNzZXJ0IGluIF90cnVuY2F0ZSgpIGJ1 dCBoYXZlbid0IHlldCBoYWQgaXQgZmlyZSBpbg0Kb3VyIHRlc3QgY2x1c3Rlci4gICBJZiB5b3Ug b3Igb3RoZXJzIGFsc28gd2FudCB0byBnaXZlIGl0IGEgdHJ5LCB0aGF0DQp3b3VsZCBiZSBncmVh dC4gIEl0IHNlZW1zIGxpa2UgYSB1c2VmdWwgYXNzZXJ0Lg0KDQpkaWZmIC0tZ2l0IGEvc3JjL29z L2JsdWVzdG9yZS9CbHVlRlMuY2MgYi9zcmMvb3MvYmx1ZXN0b3JlL0JsdWVGUy5jYw0KaW5kZXgg ZGJmZDU5Yi4uNzU5ZDFhZiAxMDA2NDQNCi0tLSBhL3NyYy9vcy9ibHVlc3RvcmUvQmx1ZUZTLmNj DQorKysgYi9zcmMvb3MvYmx1ZXN0b3JlL0JsdWVGUy5jYw0KQEAgLTEyOTksNiArMTI5OSwxMyBA QCBpbnQgQmx1ZUZTOjpfdHJ1bmNhdGUoRmlsZVdyaXRlciAqaCwgdWludDY0X3QNCm9mZnNldCkN CiAgIGRvdXQoMTApIDw8IF9fZnVuY19fIDw8ICIgMHgiIDw8IHN0ZDo6aGV4IDw8IG9mZnNldCA8 PCBzdGQ6OmRlYw0KICAgICAgICAgICAgPDwgIiBmaWxlICIgPDwgaC0+ZmlsZS0+Zm5vZGUgPDwg ZGVuZGw7DQogDQorICAvLyBJZiBpbm8gaXMgbm90IGluIGZpbGVtYXAsIHdlIGFyZSB0cnVuY2F0 aW5nIGEgZmlsZSB0aGF0IGlzIG5vdA0KYWxsb2NhdGVkLg0KKw0KKyAgYXV0byBwID0gZmlsZV9t YXAuZmluZChoLT5maWxlLT5mbm9kZS5pbm8pOw0KKyAgaWYgKHAgPT0gZmlsZV9tYXAuZW5kKCkp IHsNCisgICAgYXNzZXJ0KDAgPT0gIl90cnVuY2F0ZSgpOiB0cnVuY2F0aW5nIGEgZmlsZSB0aGF0 IGlzIG5vdCBhbGxvY2F0ZWQiKTsNCisgIH0NCisNCiAgIC8vIHRydW5jYXRlIG9mZiB1bmZsdXNo ZWQgZGF0YT8NCiAgIGlmIChoLT5wb3MgPCBvZmZzZXQgJiYNCiAgICAgICBoLT5wb3MgKyBoLT5i dWZmZXIubGVuZ3RoKCkgPiBvZmZzZXQpIHsNCg0KDQpUaGUgdGVzdCBjYXNlIHdoaWNoIHNlZW1l ZCB0byBtYWtlIHRoZSBwcm9ibGVtIG9jY3VyIG1vcmUgZnJlcXVlbnRseSBmb3INCnVzIGNvbnNp c3RzIG9mIG1vdW50aW5nIGEgY2VwaGZzIGZpbGVzeXN0ZW0sIHRoZW4gc3RhcnRpbmcgdXAgMzIg aW5zdGFuY2VzDQpvZiBpb3Igb24gZWFjaCBvZiA0IGNsaWVudCBtYWNoaW5lcy4gIFRoZSBpb3Ig Y29tbWFuZCBsb29rcyBsaWtlIHRoaXM6DQoNCmlvciAtYSBQT1NJWCAtb+KAguKAgi9tbnQvY2Vw aGZzL3Rlc3QgLWIgOG0gLWkgMTANCg0KDQpJbiB0aGUgbWVhbnRpbWUgSSBoYXZlIGJlZW4gbG9v a2luZyBmdXJ0aGVyIGF0IHRoZSBjb2RlLCBhbmQgSSB0aGluayBJIHNlZQ0KdGhlIHByb2JsZW0t Y2F1c2luZyBzZXF1ZW5jZSBvZiBldmVudHMuDQoNCkJsdWVGUyBpbXBsZW1lbnRzIHVubGluaygp IGRpZmZlcmVudGx5IHRoYW4gdGhlIFBPU0lYIG1vZGVsLiAgSW4gUE9TSVgsDQp0aGUgaW5vZGUg YW5kIGRpc2sgZXh0ZW50cyBmb3IgYSBmaWxlIGFyZSBub3QgcmVsZWFzZWQgdW50aWwgYm90aCB0 aGUgbGluaw0KY291bnQgcmVhY2hlcyB6ZXJvIGFuZCB0aGUgaW5vZGUgcmVmZXJlbmNlIGNvdW50 IChmaWxlIG9wZW4gY291bnQpIHJlYWNoZXMNCnplcm8uICBCbHVlRlMgaG93ZXZlciByZWxlYXNl cyB0aGUgaW5vZGUgYW5kIGRpc2sgZXh0ZW50cyB3aGVuIHRoZSBsaW5rDQpjb3VudCAoZmlsZS0+ cmVmcykgcmVhY2hlcyB6ZXJvIGV2ZW4gaWYgdGhlcmUgYXJlIHRocmVhZHMgdGhhdCBzdGlsbCBo YXZlDQp0aGUgZmlsZSBvcGVuLiAgDQoNClJvdXRpbmUgX2Ryb3BfbGluaygpIGRvZXMgdGhlIGlu b2RlIGFuZCBkaXNrIGV4dGVudCByZWxlYXNlcywgYW5kIGl0IHNldHMNCmEgRmlsZSB2YXJpYWJs ZSBjYWxsZWQgJ2RlbGV0ZWQnIHRvIHRydWUsIGJ1dCBub3RlIHRoYXQgaXQgZG9lcyBub3QNCm90 aGVyd2lzZSBjbGVhciB0aGUgcmVsZWFzZWQgaW5vZGUgbnVtYmVyIG9yIGRpc2sgZXh0ZW50IGZp ZWxkcyBpbiB0aGUNCkZpbGUuICBJdCBpcyB0aGVyZWZvcmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9m IGV2ZXJ5IHRocmVhZCB3aXRoIGEgRmlsZVJlZg0KZm9yIHRoYXQgZmlsZSB0byBmaXJzdCBvYnRh aW4gYSBsb2NrICh0byBwcmV2ZW50IHJhY2VzIHdpdGggX2Ryb3BfbGluaygpKQ0KYW5kIHRoZW4g bG9vayBhdCB0aGUgdmFsdWUgb2YgJ2RlbGV0ZWQnLCBhbmQgb25seSBjb250aW51ZSB1c2luZyB0 aGUgRmlsZQ0KaWYgJ2RlbGV0ZWQnIGlzIGZhbHNlLg0KDQpGdW5jdGlvbiBCbHVlUm9ja3NXcml0 YWJsZUZpbGU6OkNsb3NlKCkgZG9lcyBub3QgZG8gdGhpcy4gIFRoZSByb3V0aW5lDQpkb2VzIG5v dCBncmFiIGEgbG9jazsgaXQgY2FsbHMgR2V0UHJlYWxsb2NhdGlvblN0YXR1cygpLCBhbmQgaWYN Cmxhc3RfYWxsb2NhdGVkX2Jsb2NrIGlzID4gMCwgaXQgY2FsbHMgZnMtPnRydW5jYXRlKCkgKHdo aWNoIGRvZXMgZ2V0IGENCmxvY2spIHdoaWNoIGNhbGxzIF90cnVuY2F0ZSgpLiAgUm91dGluZSBf dHJ1bmNhdGUoKSBsb3dlcnMgdGhlIGZpbGUgc2l6ZSwNCmFuZCBjYWxscyBvcF9maWxlX3VwZGF0 ZSgpLCB3aGljaCBwb3N0cyBhbiB1cGRhdGUgdHJhbnNhY3Rpb24gZW50cnkgdG8gdGhlDQpsb2cg Zm9yIGEgZmlsZSB0aGF0IGlzIGFscmVhZHkgdW5saW5rZWQuICAgVGhpcyBpcyBob3cgd2UgZW5k IHVwIHdpdGggYW4NCmlub2RlIGluIHRoZSB0cmFuc2FjdGlvbiBsb2cgdGhhdCBoYXMgZGlzayBl eHRlbnRzIGJ1dCBpdHMgbGluayBjb3VudCBpcw0KemVyby4NCg0KQWRkaW5nIGEgY2hlY2sgb2Yg dGhlICdkZWxldGVkJyB2YXJpYWJsZSBhZnRlciB0aGUgbG9jayBpcyB0YWtlbiBpbg0KX3RydW5j YXRlKCkgd291bGQgd29yaywgYnV0IGl0IGJvdGhlcnMgbWUgYSBiaXQgdG8gc2VlDQpCbHVlUm9j a3NXcml0YWJsZUZpbGU6OkNsb3NlKCkgdXNpbmcgdGhlIEZpbGUgc3RydWN0IGFzIGlmIGl0IGlz IHN0aWxsDQp2YWxpZC4gIEZvbGtzIHdpdGggbW9yZSBCbHVlRlMgZXhwZXJpZW5jZSBjYW4gZGVj aWRlIGlmIHRoYXQgaXMgYSBwcm9ibGVtDQpvciBub3QuICAgVGhleSBtaWdodCBhbHNvIGJlIGFi bGUgdG8gZGVzY3JpYmUgc2l0dWF0aW9ucyB3aGVyZSBhIGZpbGUNCmNvdWxkIGJlIHVubGlua2Vk IHdoaWxlIGl0IGlzIHN0aWxsIG9wZW4sIHRoYXQgbWlnaHQgbGVhZCB0byBiZXR0ZXIgdGVzdA0K Y2FzZXMgd2hpY2ggZmlyZSB0aGUgYXNzZXJ0IG1vcmUgcXVpY2tseS4NCg0KSSdtIGFsc28gYSBi aXQgY29uY2VybmVkIGFib3V0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIEJsdWVGUyBmaWxlc3lzdGVt LA0Kc2hvdWxkIHRoZSBsb2cgaGF2ZSB0byBiZSByZXBsYXllZC4gIFRoaXMgcHJvYmxlbSB3YXMg b25seSBzZWVuIGJlY2F1c2UNCnRoZSBpbm9kZSBudW1iZXIgd2Fzbid0IHJldXNlZCBpbiB0aGUg bG9nIGFmdGVyIGl0IHdhcyByZWxlYXNlZC4gIFdoYXQgaWYNCmEgc3Vic2VxdWVudCBsb2cgdHJh bnNhY3Rpb24gcmVhbGxvY2F0ZXMgdGhlIGlub2RlPyAgVGhlICJmaWxlIHdpdGggbGluaw0KY291 bnQgMCIgYXNzZXJ0IHdvdWxkIG5vdCBjYXRjaCBpdC4gIEkgZ3Vlc3MgdGhhdCBzdWJzZXF1ZW50 IHJlYWxsb2NhdGlvbg0Kc2hvdWxkIG92ZXJsYXkgdGhlIGJhZCBGaWxlUmVmLT5mbm9kZSB3aXRo IGEgbmV3IGZub2RlLCBzbyBtYXliZSBpdCdzDQpoYXJtbGVzcz8NCg0KSXQgd291bGQgYmUgbmlj ZSB0byBoYXZlIG15IGFzc2VydCgpIHRyaWdnZXIgdG8gcHJvdmlkZSB0aGUgInNtb2tpbmcgZ3Vu Ii4NCiBIb3dldmVyLCBpZiBJIGNhbid0IGR1cGxpY2F0ZSB0aGUgcHJvYmxlbSBpbiB0aGUgbmV4 dCBkYXkgb3IgdHdvLCBJIHdpbGwNCnByb2JhYmx5IGp1c3QgcGF0Y2ggX3RydW5jYXRlKCkgdG8g cmV0dXJuIGltbWVkaWF0ZWx5IGlmICdkZWxldGVkJyBpcw0KdHJ1ZSwgYW5kIG1vdmUgb24uIA0K DQpXaGF0IGRvIHlvdSB0aGluaywgc2hvdWxkIEkgcG9zdCB0aGlzIGhpc3RvcnkgdG8gYnVnIDE1 NzI0LCBjcmVhdGUgYQ0Kc2VwYXJhdGUgYnVnLCBhbnl0aGluZyBlbHNlPw0KDQpUaGFua3MsIEtl dmFuDQoNCk9uIDcvMTYvMTYsIDk6MzUgQU0sICJjZXBoLWRldmVsLW93bmVyQHZnZXIua2VybmVs Lm9yZyBvbiBiZWhhbGYgb2YgS2V2YW4NClJlaG0iIDxjZXBoLWRldmVsLW93bmVyQHZnZXIua2Vy bmVsLm9yZyBvbiBiZWhhbGYgb2Yga3JlaG1AY3JheS5jb20+IHdyb3RlOg0KDQo+DQo+DQo+T24g Ny8xNi8xNiwgNzoxNiBBTSwgIlZhcmFkYSBLYXJpIiA8VmFyYWRhLkthcmlAc2FuZGlzay5jb20+ IHdyb3RlOg0KPg0KPj5PbiBTYXR1cmRheSAxNiBKdWx5IDIwMTYgMDQ6NTMgUE0sIEtldmFuIFJl aG0gd3JvdGU6DQo+Pj4gVmFyYWRhLCBzZWUgYmVsb3cuDQo+Pj4NCj4+PiBPbiA3LzE2LzE2LCAy OjIzIEFNLCAiVmFyYWRhIEthcmkiIDxWYXJhZGEuS2FyaUBzYW5kaXNrLmNvbT4gd3JvdGU6DQo+ Pj4NCj4+Pj4gT24gU2F0dXJkYXkgMTYgSnVseSAyMDE2IDAxOjUyIEFNLCBLZXZhbiBSZWhtIHdy b3RlOg0KPj4+Pj4gR3JlZXRpbmdzLA0KPj4+Pj4NCj4+Pj4+IEkgaGF2ZSBtYWRlIGEgYml0IG9m IHByb2dyZXNzLiAgU3RpbGwgbG9va2luZyBmb3IgaWRlYXMvYWR2aXNlIHdoaWxlDQo+Pj4+PkkN Cj4+Pj4+IGtlZXAgZGlnZ2luZy4NCj4+Pj4+DQo+Pj4+PiBGaXJzdCwgdGhlIGNlcGggdmVyc2lv biBJIGZvcmdvdCB0byBtZW50aW9uIGxhc3QgdGltZS4NCj4+Pj4+DQo+Pj4+PiAjIGNlcGggLXYN Cj4+Pj4+IGNlcGggdmVyc2lvbiAxMS4wLjAtMTk2LWc4NWJiNDNlDQo+Pj4+PiAoODViYjQzZTEx MTY5Mjk4OWQyMjk2YTM4OWNlNDUzNzdkMjI5N2Q2ZikNCj4+Pj4+DQo+Pj4+Pg0KPj4+Pj4NCj4+ Pj4+IEFzIGEgcmVmcmVzaGVyLCBoZXJlIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHByb2JsZW0g dHJhbnNhY3Rpb24NCj4+Pj4+d2hpY2gNCj4+Pj4+IHdpbGwgcmVzdWx0IGluIGFuIGlub2RlIHdp dGggMCBsaW5rcy4gICBUaGVyZSBhcmUgYWN0dWFsbHkgdGhyZWUNCj4+Pj4+aW5vZGVzDQo+Pj4+ PiBpbg0KPj4+Pj4gdGhpcyB0cmFuc2FjdGlvbiB3aGljaCB3aWxsIGFsbCBlbmQgdXAgaGF2aW5n IDAgbGlua3MsIGlub2RlcyAxMDksDQo+Pj4+PjEwMiwNCj4+Pj4+IGFuZCAxMTMuDQo+Pj4+Pg0K Pj4+Pj4gMjAxNi0wNy0xMyAxNjowMzowMy45Mjk2NzkgN2ZiNjYxN2MxODAwIDEwIGJsdWVmcyBf cmVwbGF5IDB4NWJlMDAwOg0KPj4+Pj4gdHhuKHNlcSA3Nzc1MiBsZW4gMzUyNjkgY3JjIDE3OTYx NTc4MjYpDQo+Pj4+PiAyMDE2LTA3LTEzIDE2OjAzOjAzLjkyOTY4MSA3ZmI2NjE3YzE4MDAgMjAg Ymx1ZWZzIF9yZXBsYXkgMHg1YmUwMDA6DQo+Pj4+PiBvcF9kaXJfdW5saW5rICBkYi8wMDAxNTQu bG9nDQo+Pj4+PiAyMDE2LTA3LTEzIDE2OjAzOjAzLjkyOTY4MyA3ZmI2NjE3YzE4MDAgMjAgYmx1 ZWZzIF9yZXBsYXkgMHg1YmUwMDA6DQo+Pj4+PiBvcF9maWxlX3JlbW92ZSAxMDkNCj4+Pj4+IDIw MTYtMDctMTMgMTY6MDM6MDMuOTI5Njg0IDdmYjY2MTdjMTgwMCAyMCBibHVlZnMgX3JlcGxheSAw eDViZTAwMDoNCj4+Pj4+IG9wX2Rpcl91bmxpbmsgIGRiLzAwMDE1My5sb2cNCj4+Pj4+IDIwMTYt MDctMTMgMTY6MDM6MDMuOTI5Njg1IDdmYjY2MTdjMTgwMCAyMCBibHVlZnMgX3JlcGxheSAweDVi ZTAwMDoNCj4+Pj4+IG9wX2ZpbGVfcmVtb3ZlIDEwMg0KPj4+Pj4gMjAxNi0wNy0xMyAxNjowMzow My45Mjk2ODYgN2ZiNjYxN2MxODAwIDIwIGJsdWVmcyBfcmVwbGF5IDB4NWJlMDAwOg0KPj4+Pj4g b3BfZGlyX3VubGluayAgZGIvMDAwMTUxLmxvZw0KPj4+Pj4gMjAxNi0wNy0xMyAxNjowMzowMy45 Mjk2ODYgN2ZiNjYxN2MxODAwIDIwIGJsdWVmcyBfcmVwbGF5IDB4NWJlMDAwOg0KPj4+Pj4gb3Bf ZmlsZV9yZW1vdmUgMTEzDQo+Pj4+PiAyMDE2LTA3LTEzIDE2OjAzOjAzLjkyOTY4NyA3ZmI2NjE3 YzE4MDAgMjAgYmx1ZWZzIF9yZXBsYXkgMHg1YmUwMDA6DQo+Pj4+PiBvcF9kaXJfdW5saW5rICBk Yi8wMDAxNTAubG9nDQo+Pj4+PiAyMDE2LTA3LTEzIDE2OjAzOjAzLjkyOTY4OCA3ZmI2NjE3YzE4 MDAgMjAgYmx1ZWZzIF9yZXBsYXkgMHg1YmUwMDA6DQo+Pj4+PiBvcF9maWxlX3JlbW92ZSAxMTEN Cj4+Pj4+IDIwMTYtMDctMTMgMTY6MDM6MDMuOTI5Njg5IDdmYjY2MTdjMTgwMCAyMCBibHVlZnMg X3JlcGxheSAweDViZTAwMDoNCj4+Pj4+IG9wX2ZpbGVfdXBkYXRlICBmaWxlKGlubyAxMTMgc2l6 ZSA3MTM1NDkzOCBtdGltZSAyMDE2LTA3LTEyDQo+Pj4+PiAxNzowNTo1My43Mzg2ODMgYmRldiAx IGV4dGVudHMNCj4+Pj4+DQo+Pj4+PiANCj4+Pj4+WzE6OTA0OTIxMDg4KzEwNDg1NzYsMTo5MTAx NjM5NjgrMjA5NzE1MiwxOjkxNjQ1NTQyNCsyMDk3MTUyLDE6OTMxMTM1NA0KPj4+Pj44DQo+Pj4+ PjgrDQo+Pj4+PiAyMA0KPj4+Pj4NCj4+Pj4+IA0KPj4+Pj45NzE1MiwxOjkzNzQyNjk0NCsyMDk3 MTUyLDE6OTQzNzE4NDAwKzIwOTcxNTIsMTo5NTAwMDk4NTYrMjA5NzE1MiwxOjk2DQo+Pj4+PjAN Cj4+Pj4+NDkNCj4+Pj4+IDU2DQo+Pj4+PiAxNis1ODcyMDI1Nl0pDQo+Pj4+PiAyMDE2LTA3LTEz IDE2OjAzOjAzLjkyOTY5MyA3ZmI2NjE3YzE4MDAgMzAgYmx1ZWZzIF9nZXRfZmlsZSBpbm8gMTEz ID0NCj4+Pj4+IDB4N2ZiNjZhYWZjODgwIChuZXcpDQo+Pj4+IFdoZW4gX2dldF9maWxlKCkgaXMg Y2FsbGVkIHdpdGggYSBpbm9kZSBudW1iZXIsIGlmIHRoZSBmaWxlIGlzIG5vdA0KPj4+PmZvdW5k DQo+Pj4+IGluIGZpbGVfbWFwDQo+Pj4+IGEgbmV3IGZpbGUgaXMgY3JlYXRlZCBhbmQgcmV0dXJu ZWQsIGhlbmNlIHRoYXQgKG5ldykgaW4gdGhlIGxvZyBmaWxlLg0KPj4+PiBUaGVzZSBzZXQgb2Yg ZXZlbnRzDQo+Pj4+IGNhbiBoYXBwZW4gaW4gY2FzZSBvZiByZW5hbWUuIFlvdSBjYW4gc2VlIHRo ZSBzYW1lIEJsdWVGUzo6cmVuYW1lKCkuDQo+Pj4+SW4NCj4+Pj4gdGhhdCBjYXNlLCB3ZSB1c2Ug dGhlDQo+Pj4+IHNhbWUgaW5vZGUgbnVtYmVyLg0KPj4+DQo+Pj4gSSdtIG5vdCBzdXJlIEkgdW5k ZXJzdGFuZCwgSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGlzIGEgcmVuYW1lIGNhc2UuICBGb3INCj4+ PiB0aGlzIHRvIGJlIGEgcmVuYW1lLCB0aGVyZSB3b3VsZCBoYXZlIHRvIGJlIGF0IGxlYXN0IG9u ZSBvcF9kaXJfbGluaygpDQo+Pj4gY2FsbCBmb3IgZWFjaCBvcF9kaXJfdW5saW5rKCkgY2FsbCBp biB0aGUgc2VxdWVuY2UgYWJvdmUuICAgVGhlIG9ubHkNCj4+PmNvZGUNCj4+PiBzZXF1ZW5jZSBJ IGNhbiBmaW5kIHdoZXJlIGFuIG9wX2Rpcl91bmxpbmsoKSBhbmQgYW4gb3BfZmlsZV9yZW1vdmUo KQ0KPj4+IGFwcGVhciB0b2dldGhlciB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBvcF9kaXJfbGlu aygpIGlzIHdoZW4gYSBmaWxlIGlzDQo+Pj4gYmVpbmcgZGVsZXRlZC4NCj4+Pg0KPj4+IFRoZSAo bmV3KSBhYm92ZSBtYWtlcyBteSBwb2ludCBleGFjdGx5LiAgVGhlIG9wX2ZpbGVfcmVtb3ZlKCkg Y2FsbA0KPj4+YWJvdmUNCj4+PiBmcmVlZCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBmb3IgdGhlIGlu b2RlIGFuZCByZWxlYXNlZCB0aGUgaW5vZGUgZnJvbQ0KPj4+dGhlDQo+Pj4gZmlsZW1hcCwgc2hv d2luZyB0aGF0IHRoZSBmaWxlLT5yZWZzIGhhZCB0byBiZSB6ZXJvIGF0IHRoYXQgdGltZQ0KPj4+ KHJvdXRpbmUNCj4+PiBfZHJvcF9saW5rKS4gICBZZXQgdGhlIGZvbGxvd2luZyBvcF9maWxlX3Vw ZGF0ZSgpIGNhbGwgaXMgcGVyZm9ybWluZyBhDQo+Pj4gdHJ1bmNhdGUgb24gdGhhdCBzYW1lIGlu b2RlLCB3aGljaCBpcyBub3QgaW4gdGhlIGZpbGVtYXAuICAgU28gdGhlDQo+Pj5jYWxsZXINCj4+ PiBoYXMgdG8gYmUgaG9sZGluZyBhIGZpbGUgc3RydWN0dXJlIHdob3NlIHJlZnMgZmllbGQgaXMg Z3JlYXRlciB0aGFuDQo+Pj56ZXJvLg0KPj4+IFdoaWNoIGltcGxpZXMgdGhhdCB0aGUgY2FsbGVy J3MgZmlsZSBzdHJ1Y3R1cmUgaGFzIHRvIGJlIHN0YWxlLiAgVGhlDQo+Pj5mYWN0DQo+Pj4gdGhh dCB0aGUgb3BfZmlsZV91cGRhdGUgZmlsZSBjb250ZW50cyBmb3IgaW5vZGUgMTEzIGlzIGV4YWN0 bHkgdGhlIHNhbWUNCj4+PmFzDQo+Pj4gdGhlIHByZXZpb3VzIG9wX2ZpbGVfdXBkYXRlIGNvbnRl bnRzIHByaW9yIHRvIHRoZSBvcF9maWxlX3JlbW92ZSgpLA0KPj4+ZXhjZXB0DQo+Pj4gZm9yIGEg cmVkdWN0aW9uIGluIGZpbGUgc2l6ZSwgcHJvdmVzIEkgYmVsaWV2ZSB0aGF0IHRoZSBmaWxlIHN0 cnVjdA0KPj4+dXNlZA0KPj4+IGJ5IHRoZSBvcF9maWxlX3VwZGF0ZSgpIGNhbGxlciBpcyBzdGFs ZS4NCj4+Pg0KPj4+DQo+Pj4+PiAyMDE2LTA3LTEzIDE2OjAzOjAzLjkyOTY5NSA3ZmI2NjE3YzE4 MDAgMjAgYmx1ZWZzIF9yZXBsYXkgMHg1YmUwMDA6DQo+Pj4+PiBvcF9maWxlX3VwZGF0ZSAgZmls ZShpbm8gMTAyIHNpemUgNjg1NTcwNDMgbXRpbWUgMjAxNi0wNy0xMg0KPj4+Pj4gMTc6MDU6NTQu NjE1MTkwIGJkZXYgMSBleHRlbnRzDQo+Pj4+Pg0KPj4+Pj4gDQo+Pj4+PlsxOjc4NjQzMjAwKzEw NDg1NzYsMToxOTE4ODk0MDgrMTA0ODU3NiwxOjE5NzEzMjI4OCsxMDQ4NTc2LDE6MjAyMzc1MTYN Cj4+Pj4+OA0KPj4+Pj4rMg0KPj4+Pj4gMDkNCj4+Pj4+DQo+Pj4+PiANCj4+Pj4+NzE1MiwxOjIw ODY2NjYyNCsyMDk3MTUyLDE6MjE0OTU4MDgwKzIwOTcxNTIsMToyMjEyNDk1MzYrMjA5NzE1Miwx OjIyNw0KPj4+Pj41DQo+Pj4+PjQwDQo+Pj4+PiA5OQ0KPj4+Pj4NCj4+Pj4+IA0KPj4+Pj4yKzEw NDg1NzYsMToyMzI3ODM4NzIrMjA5NzE1MiwxOjIzOTA3NTMyOCsyMDk3MTUyLDE6MjQ1MzY2Nzg0 KzIwOTcxNTIsDQo+Pj4+PjENCj4+Pj4+OjINCj4+Pj4+IDUxDQo+Pj4+Pg0KPj4+Pj4gDQo+Pj4+ PjY1ODI0MCsyMDk3MTUyLDE6MjU3OTQ5Njk2KzEwNDg1NzYsMToyNjMxOTI1NzYrMjA5NzE1Miwx OjI2OTQ4NDAzMisyMDkNCj4+Pj4+Nw0KPj4+Pj4xNQ0KPj4+Pj4gMiwNCj4+Pj4+DQo+Pj4+PiAN Cj4+Pj4+MToyNzU3NzU0ODgrMjA5NzE1MiwxOjI4MjA2Njk0NCsyMDk3MTUyLDE6Mjg4MzU4NDAw KzIwOTcxNTIsMToyOTQ2NDk4NQ0KPj4+Pj42DQo+Pj4+PisxDQo+Pj4+PiAwNA0KPj4+Pj4NCj4+ Pj4+IA0KPj4+Pj44NTc2LDE6Mjk5ODkyNzM2KzIwOTcxNTIsMTozMDYxODQxOTIrMjA5NzE1Miwx OjMxMjQ3NTY0OCsyMDk3MTUyLDE6MzE4DQo+Pj4+PjcNCj4+Pj4+NjcNCj4+Pj4+IDEwDQo+Pj4+ Pg0KPj4+Pj4gDQo+Pj4+PjQrMTA0ODU3NiwxOjMyNDAwOTk4NCsyMDk3MTUyLDE6MzMwMzAxNDQw KzIwOTcxNTIsMTozMzY1OTI4OTYrMjA5NzE1MiwNCj4+Pj4+MQ0KPj4+Pj46Mw0KPj4+Pj4gNDIN Cj4+Pj4+DQo+Pj4+PiANCj4+Pj4+ODg0MzUyKzIwOTcxNTIsMTozNDkxNzU4MDgrMTA0ODU3Niwx OjM1NDQxODY4OCsyMDk3MTUyLDE6MzYwNzEwMTQ0KzIwOQ0KPj4+Pj43DQo+Pj4+PjE1DQo+Pj4+ PiAyLA0KPj4+Pj4NCj4+Pj4+IA0KPj4+Pj4xOjM2NzAwMTYwMCsxMDQ4NTc2LDE6MzcyMjQ0NDgw KzEwNDg1NzYsMTozNzc0ODczNjArMjA5NzE1MiwxOjM4Mzc3ODgxDQo+Pj4+PjYNCj4+Pj4+KzEN Cj4+Pj4+IDA0DQo+Pj4+Pg0KPj4+Pj4gDQo+Pj4+Pjg1NzYsMTozODkwMjE2OTYrMTA0ODU3Niwx OjM5NDI2NDU3NisyMDk3MTUyLDE6NDAwNTU2MDMyKzEwNDg1NzYsMTo0MDUNCj4+Pj4+Nw0KPj4+ Pj45OA0KPj4+Pj4gOTENCj4+Pj4+IDIrMzE0NTcyOCwxOjUwNzUxMDc4NCs1MjQyODgwXSkNCj4+ Pj4+IDIwMTYtMDctMTMgMTY6MDM6MDMuOTI5NzAyIDdmYjY2MTdjMTgwMCAzMCBibHVlZnMgX2dl dF9maWxlIGlubyAxMDIgPQ0KPj4+Pj4gMHg3ZmI2NmFhZmJiOTAgKG5ldykNCj4+Pj4+IDIwMTYt MDctMTMgMTY6MDM6MDMuOTI5NzAzIDdmYjY2MTdjMTgwMCAyMCBibHVlZnMgX3JlcGxheSAweDVi ZTAwMDoNCj4+Pj4+IG9wX2ZpbGVfdXBkYXRlICBmaWxlKGlubyAxMDkgc2l6ZSA2NDQyMTkxMyBt dGltZSAyMDE2LTA3LTEyDQo+Pj4+PiAyMjo0MTozMy4wMjgwMzAgYmRldiAxIGV4dGVudHMNCj4+ Pj4+IFsxOjUxMjc1MzY2NCszMTQ1NzI4MCwxOjU0NTI1OTUyMCs0MTk0MzA0LDE6NTUwNTAyNDAw KzM2NzAwMTYwXSkNCj4+Pj4+IDIwMTYtMDctMTMgMTY6MDM6MDMuOTI5NzA1IDdmYjY2MTdjMTgw MCAzMCBibHVlZnMgX2dldF9maWxlIGlubyAxMDkgPQ0KPj4+Pj4gMHg3ZmI2NmFhZmJlNjAgKG5l dykNCj4+Pj4+IC4uLg0KPj4+Pj4NCj4+Pj4+DQo+Pj4+PiBUaGUgcHJpb3IgdHJhbnNhY3Rpb24g bG9nIGVudHJ5IGZvciBlYWNoIG9mIHRoZSB0aHJlZSBpbm9kZXMgd2FzDQo+Pj4+PmFub3RoZXIN Cj4+Pj4+IG9wX2ZpbGVfdXBkYXRlKCkgY2FsbC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2Vl biB0aGUgdHdvIHVwZGF0ZXMNCj4+Pj4+Zm9yDQo+Pj4+PiBpbm8gMTMzIHdhcyBmaWxlIHNpemUg d2VudCBmcm9tIDcxMzU5MzYyIC0+IDcxMzU0OTM4LCA0NDI0IGxlc3MNCj4+Pj4+Ynl0ZXMsDQo+ Pj4+PiBhbGwNCj4+Pj4+IG90aGVyIGZpZWxkcyBhcmUgaWRlbnRpY2FsLg0KPj4+PiBBcmUgdGhl IGV4dGVudHMgc2FtZSBmb3IgYm90aCB0aGUgZXZlbnRzPw0KPj4+DQo+Pj4gWWVzLCBwbGVhc2Ug Y29tcGFyZSB0aGlzIGxpbmUgd2l0aCB0aGUgb25lIGhpZ2hlciBhYm92ZSBpbiB0aGlzIGVtYWls LA0KPj4+eW91DQo+Pj4gY2FuIHNlZSB0aGF0IG9ubHkgdGhlIGZpbGUgc2l6ZSBpcyBkaWZmZXJl bnQuICAgVGhhdCBpcyB0cnVlIGZvciBhbGwNCj4+PnRocmVlDQo+Pj4gb2YgdGhlc2UgaW5vZGVz Lg0KPj4+DQo+Pj4+PiAyMDE2LTA3LTEzIDE2OjAzOjAzLjkyNTE4NiA3ZmI2NjE3YzE4MDAgMjAg Ymx1ZWZzIF9yZXBsYXkgMHg1YjQwMDA6DQo+Pj4+PiBvcF9maWxlX3VwZGF0ZSAgZmlsZShpbm8g MTEzIHNpemUgNzEzNTkzNjIgbXRpbWUgMjAxNi0wNy0xMg0KPj4+Pj4gMTc6MDU6NTMuNzM4Njgz IGJkZXYgMSBleHRlbnRzDQo+Pj4+Pg0KPj4+Pj4gDQo+Pj4+PlsxOjkwNDkyMTA4OCsxMDQ4NTc2 LDE6OTEwMTYzOTY4KzIwOTcxNTIsMTo5MTY0NTU0MjQrMjA5NzE1MiwxOjkzMTEzNTQNCj4+Pj4+ OA0KPj4+Pj44Kw0KPj4+Pj4gMjANCj4+Pj4+DQo+Pj4+PiANCj4+Pj4+OTcxNTIsMTo5Mzc0MjY5 NDQrMjA5NzE1MiwxOjk0MzcxODQwMCsyMDk3MTUyLDE6OTUwMDA5ODU2KzIwOTcxNTIsMTo5Ng0K Pj4+Pj4wDQo+Pj4+PjQ5DQo+Pj4+PiA1Ng0KPj4+Pj4gMTYrNTg3MjAyNTZdKQ0KPj4+Pj4gMjAx Ni0wNy0xMyAxNjowMzowMy45MjUxOTcgN2ZiNjYxN2MxODAwIDMwIGJsdWVmcyBfZ2V0X2ZpbGUg aW5vIDExMyA9DQo+Pj4+PiAweDdmYjY2YWFmYmI5MA0KPj4+Pj4NCj4+Pj4+DQo+Pj4+PiBTYW1l IHN0b3J5IGZvciBpbm9kZSAxMDksIHRoZSBmaWxlIHNpemUgY2hhbmdlZCBmcm9tIDcxMzU0OTM5 IC0+DQo+Pj4+PiA2NDQyMTkxMywNCj4+Pj4+IDY5MzMwMjYgbGVzcyBieXRlcywgYWxsIG90aGVy IGZpZWxkcyBhcmUgaWRlbnRpY2FsLg0KPj4+Pj4NCj4+Pj4+IDIwMTYtMDctMTMgMTY6MDM6MDMu OTI2MTAxIDdmYjY2MTdjMTgwMCAyMCBibHVlZnMgX3JlcGxheSAweDViYTAwMDoNCj4+Pj4+IG9w X2ZpbGVfdXBkYXRlICBmaWxlKGlubyAxMDkgc2l6ZSA3MTM1NDkzOSBtdGltZSAyMDE2LTA3LTEy DQo+Pj4+PiAyMjo0MTozMy4wMjgwMzAgYmRldiAxIGV4dGVudHMNCj4+Pj4+IFsxOjUxMjc1MzY2 NCszMTQ1NzI4MCwxOjU0NTI1OTUyMCs0MTk0MzA0LDE6NTUwNTAyNDAwKzM2NzAwMTYwXSkNCj4+ Pj4+IDIwMTYtMDctMTMgMTY6MDM6MDMuOTI2MTAzIDdmYjY2MTdjMTgwMCAzMCBibHVlZnMgX2dl dF9maWxlIGlubyAxMDkgPQ0KPj4+Pj4gMHg3ZmI2NmFhZmM5MTANCj4+Pj4+DQo+Pj4+Pg0KPj4+ Pj4NCj4+Pj4+DQo+Pj4+Pg0KPj4+Pj4gU2FtZSBzdG9yeSBmb3IgaW5vZGUgMTAyLCB0aGUgZmls ZSBzaXplIGNoYW5nZWQgZnJvbSA3MTM1OTQwNSAtPg0KPj4+Pj4gNjg1NTcwNDMsDQo+Pj4+PiAy ODAyMzYyIGxlc3MgYnl0ZXMsIGFsbCBvdGhlciBmaWVsZHMgYXJlIGlkZW50aWNhbC4NCj4+Pj4+ DQo+Pj4+PiAyMDE2LTA3LTEzIDE2OjAzOjAzLjkyNjA0MCA3ZmI2NjE3YzE4MDAgMjAgYmx1ZWZz IF9yZXBsYXkgMHg1YjkwMDA6DQo+Pj4+PiBvcF9maWxlX3VwZGF0ZSAgZmlsZShpbm8gMTAyIHNp emUgNzEzNTk0MDUgbXRpbWUgMjAxNi0wNy0xMg0KPj4+Pj4gMTc6MDU6NTQuNjE1MTkwIGJkZXYg MSBleHRlbnRzDQo+Pj4+Pg0KPj4+Pj4gDQo+Pj4+PlsxOjc4NjQzMjAwKzEwNDg1NzYsMToxOTE4 ODk0MDgrMTA0ODU3NiwxOjE5NzEzMjI4OCsxMDQ4NTc2LDE6MjAyMzc1MTYNCj4+Pj4+OA0KPj4+ Pj4rMg0KPj4+Pj4gMDkNCj4+Pj4+DQo+Pj4+PiANCj4+Pj4+NzE1MiwxOjIwODY2NjYyNCsyMDk3 MTUyLDE6MjE0OTU4MDgwKzIwOTcxNTIsMToyMjEyNDk1MzYrMjA5NzE1MiwxOjIyNw0KPj4+Pj41 DQo+Pj4+PjQwDQo+Pj4+PiA5OQ0KPj4+Pj4NCj4+Pj4+IA0KPj4+Pj4yKzEwNDg1NzYsMToyMzI3 ODM4NzIrMjA5NzE1MiwxOjIzOTA3NTMyOCsyMDk3MTUyLDE6MjQ1MzY2Nzg0KzIwOTcxNTIsDQo+ Pj4+PjENCj4+Pj4+OjINCj4+Pj4+IDUxDQo+Pj4+Pg0KPj4+Pj4gDQo+Pj4+PjY1ODI0MCsyMDk3 MTUyLDE6MjU3OTQ5Njk2KzEwNDg1NzYsMToyNjMxOTI1NzYrMjA5NzE1MiwxOjI2OTQ4NDAzMisy MDkNCj4+Pj4+Nw0KPj4+Pj4xNQ0KPj4+Pj4gMiwNCj4+Pj4+DQo+Pj4+PiANCj4+Pj4+MToyNzU3 NzU0ODgrMjA5NzE1MiwxOjI4MjA2Njk0NCsyMDk3MTUyLDE6Mjg4MzU4NDAwKzIwOTcxNTIsMToy OTQ2NDk4NQ0KPj4+Pj42DQo+Pj4+PisxDQo+Pj4+PiAwNA0KPj4+Pj4NCj4+Pj4+IA0KPj4+Pj44 NTc2LDE6Mjk5ODkyNzM2KzIwOTcxNTIsMTozMDYxODQxOTIrMjA5NzE1MiwxOjMxMjQ3NTY0OCsy MDk3MTUyLDE6MzE4DQo+Pj4+PjcNCj4+Pj4+NjcNCj4+Pj4+IDEwDQo+Pj4+Pg0KPj4+Pj4gDQo+ Pj4+PjQrMTA0ODU3NiwxOjMyNDAwOTk4NCsyMDk3MTUyLDE6MzMwMzAxNDQwKzIwOTcxNTIsMToz MzY1OTI4OTYrMjA5NzE1MiwNCj4+Pj4+MQ0KPj4+Pj46Mw0KPj4+Pj4gNDINCj4+Pj4+DQo+Pj4+ PiANCj4+Pj4+ODg0MzUyKzIwOTcxNTIsMTozNDkxNzU4MDgrMTA0ODU3NiwxOjM1NDQxODY4OCsy MDk3MTUyLDE6MzYwNzEwMTQ0KzIwOQ0KPj4+Pj43DQo+Pj4+PjE1DQo+Pj4+PiAyLA0KPj4+Pj4N Cj4+Pj4+IA0KPj4+Pj4xOjM2NzAwMTYwMCsxMDQ4NTc2LDE6MzcyMjQ0NDgwKzEwNDg1NzYsMToz Nzc0ODczNjArMjA5NzE1MiwxOjM4Mzc3ODgxDQo+Pj4+PjYNCj4+Pj4+KzENCj4+Pj4+IDA0DQo+ Pj4+Pg0KPj4+Pj4gDQo+Pj4+Pjg1NzYsMTozODkwMjE2OTYrMTA0ODU3NiwxOjM5NDI2NDU3Nisy MDk3MTUyLDE6NDAwNTU2MDMyKzEwNDg1NzYsMTo0MDUNCj4+Pj4+Nw0KPj4+Pj45OA0KPj4+Pj4g OTENCj4+Pj4+IDIrMzE0NTcyOCwxOjUwNzUxMDc4NCs1MjQyODgwXSkNCj4+Pj4+IDIwMTYtMDct MTMgMTY6MDM6MDMuOTI2MDQ4IDdmYjY2MTdjMTgwMCAzMCBibHVlZnMgX2dldF9maWxlIGlubyAx MDIgPQ0KPj4+Pj4gMHg3ZmI2NmFhZmJlNjANCj4+Pj4+DQo+Pj4+Pg0KPj4+Pj4NCj4+Pj4+DQo+ Pj4+PiBUaGVyZSBpcyBvbmx5IG9uZSBjYWxsZXIgb2Ygb3BfZmlsZV91cGRhdGUoKSBpbiB3aGlj aCB0aGUgc2l6ZSBvZiB0aGUNCj4+Pj4+IGZpbGUNCj4+Pj4+IGlzIHJlZHVjZWQgYnV0IGFsbCBv dGhlciBmaWVsZHMgc3RheSB0aGUgc2FtZSwgdGhhdCBpcw0KPj4+Pj4gQmx1ZUZTOjpfdHJ1bmNh dGUoKSwgd2hpY2ggaW4gdHVybiBpcyBvbmx5IGNhbGxlZCBieQ0KPj4+Pj5CbHVlRlM6OnRydW5j YXRlKCksDQo+Pj4+PiB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSBCbHVlUm9ja3NXcml0YWJsZUZp bGU6OkNsb3NlKCkuDQo+Pj4+Pg0KPj4+Pj4gVGhlIG9wX2Rpcl91bmxpbmsoKSBhbmQgb3BfZmls ZV9yZW1vdmUoKSBjYWxscyBmb3IgZWFjaCBvZiB0aGUgdGhyZWUNCj4+Pj4+IGlub2RlcyBzZWVt IHRvIGJlIGNvbWluZyBmcm9tIEJsdWVSb2Nrc0Vudjo6RGVsZXRlRmlsZSgpLCBidXQgSSdtDQo+ Pj4+PmhhdmluZw0KPj4+Pj4gZGlmZmljdWx0eSBmaW5kaW5nIHdoZXJlIHRoZSBjYWxsIGlzIGNv bWluZyBmcm9tLg0KPj4+PiBBbnkgc3lzY2FsbCBtYWtpbmcgZGlyIHJlbmFtZSBvciBmaWxlIHJl bW92ZSBvciBkaXJlY3RvcnkgcmVtb3ZlIHdpbGwNCj4+Pj4gcmVzdWx0IGluIEJsdWVGUzo6cmVu YW1lIG9yIHVubGluaw0KPj4+PiBvciBjb3JyZXNwb25kaW5nIGNhbGxzIGFuZCByZXN1bHRzIGlu IG9wX2Rpcl8qIG9yIG9wX2ZpbGVfKg0KPj4+Pm9wZXJhdGlvbnMuDQo+Pj4+IHJvY2tzZGIgd2Fs X21hbmFnZXIgb3IgY29tcGFjdGlvbg0KPj4+PiBjYW4gdHJpZ2dlciB0aGVzZSBjYWxscyBkdXJp bmcgdGhhdCBwcm9jZXNzLiBXaWxsIHRha2UgYSBjbG9zZXIgbG9vaw0KPj4+PmF0DQo+Pj4+IHRo ZSBsb2dzLCBpZiBpIGNhbiBnZXQgc29tZXRoaW5nIGZyb20gdGhlbS4NCj4+Pj4+IFNvIHRoZSBw cm9ibGVtIGFwcGVhcnMgdG8gYmUgdGhhdCB0aGUgZmlsZSBpcyBmaXJzdCBkZWxldGVkLCB0aGVu IGl0DQo+Pj4+PmlzDQo+Pj4+PiBjbG9zZWQsIGFuZCBhIGJ5cHJvZHVjdCBvZiB0aGUgY2xvc2Ug b3BlcmF0aW9uICBvbiBhIHN0YWxlIGZub2RlIGlzDQo+Pj4+PnRoYXQNCj4+Pj4+IGFub3RoZXIg b3BfZmlsZV91cGRhdGUoKSBlbnRyeSBnZXRzIGxvZ2dlZCwgcmVjcmVhdGluZyB0aGUgZGVsZXRl ZA0KPj4+Pj5pbm9kZQ0KPj4+Pj4gd2l0aCBhIHN0YWxlIGZub2RlLCByZXN1bHRpbmcgaW4gdGhl IDAgbGlua3MgZmFpbHVyZS4NCj4+Pj4gT25jZSB0aGUgZmlsZSBpcyBkZWxldGVkLCBhbGwgdGhl IHVuZGVybHlpbmcgZXh0ZW50cyB3aWxsIGJlIGNsZWFyZWQuDQo+Pj4+IFVudGlsIGFuZCB1bmxl c3MgdGhlcmUgaXMgcmFjZSBpbiBoYW5kbGluZyBvbg0KPj4+PiB0aGUgZmlsZXMgZnJvbSBhcHBs aWNhdGlvbiBsZXZlbCwgQmx1ZWZzIGRvZXNuJ3QgaGF2ZSBhbnkgY29udHJvbCBvdmVyDQo+Pj4+ IHRoZW0uIElmIHRoZSBhIGZpbGUoaGFuZGxlKSBpcyBiZWVuIHJldXNlZCBhZnRlcg0KPj4+PiBk ZWxldGlvbiwgdGhhdCBzZWVtcyB0byBiZSBhIGJ1Zy4gV2lsbCB0YWtlIGEgbG9vayBhdCB0aGUg bG9ncyB0bw0KPj4+PiBjb25maXJtIHlvdXIgdGhlb3J5Lg0KPj4+PiBCdXQgaGVyZSwgdGhpcyBz ZWVtcyB0byBiZSBtb3JlIG9mIHJlbmFtZSB1c2UgY2FzZS4gb25lIG1vcmUgdGhpbmcgdG8NCj4+ Pj4gdmVyaWZ5IGlzIHRoZSBleHRlbnRzIG93bmVkIGJ5IHRoZSBpbm9kZXMgbWVudGlvbmVkLg0K Pj4+DQo+Pj4gTm8sIEkgZG9uJ3QgYmVsaWV2ZSB0aGlzIGlzIGEgcmVuYW1lLCBzZWUgYWJvdmUu DQo+Pj4NCj4+PiBJJ2xsIG5vdGUgdGhhdCBldmVyeSBvY2N1cnJlbmNlIG9mIHRoaXMgcHJvYmxl bSBoYXMgYmVlbiBwcmVjZWRlZCBieSBhbg0KPj4+IE9TRCBzZWdmYXVsdC4gIEFuZCB0aGlzIHBy b2JsZW0gaXMgcmFjeSwgaWYgSSBpbmNyZWFzZSBkZWJ1ZyBsb2dnaW5nDQo+Pj5mb3INCj4+PiBi bHVlZnMgb3IgYmx1ZXN0b3JlLCB0aGVuIHRoZSBwcm9ibGVtIGdvZXMgYXdheS4gIEkgaGF2ZSA1 MCsgYmx1ZXN0b3JlDQo+Pj4gc2VnZmF1bHRzIGFuZCBhc3NlcnRzIGluIG15IGNsdXN0ZXIgbG9n czsgSSBzdXNwZWN0IG1hbnkgY291bGQgYmUgZHVlDQo+Pj50bw0KPj4+IHRoaXMgcHJvYmxlbSwg YmVjYXVzZSB0aGUgc2FtZSByYW5nZSBvZiBibG9ja3MgaXMgYmVpbmcgZnJlZWQgbW9yZSB0aGFu DQo+Pj4gb25jZS4gICBJZiBzb21lIG90aGVyIGZpbGUgc2hvdWxkIHBlcmZvcm0gYW4gYWxsb2Nh dGlvbiBiZXR3ZWVuIHRoZQ0KPj4+IGJsb2NrLWZyZWVpbmcgaW4gb3BfZmlsZV9yZW1vdmUoKSBh bmQgdGhlIHNlY29uZCBmcmVlaW5nIGluDQo+Pj4gb3BfZmlsZV91cGRhdGUoKSwgdGhlbiB3ZSBj b3VsZCBlYXNpbHkgaGF2ZSBtdWx0aXBsZSBmaWxlcyB3aXRoIHRoZQ0KPj4+c2FtZQ0KPj4+IGJs b2NrIGFsbG9jYXRpb24gYXQgdGhlIHNhbWUgdGltZS4NCj4+Pg0KPj4+IEkgdGhpbmsgdGhpcyBw cm9ibGVtIGNhbiBiZSBjYXVnaHQgZmFpcmx5IGVhc2lseSwgYW4gYXNzZXJ0IGNvdWxkIGJlDQo+ Pj5hZGRlZA0KPj4+IHRvIF90cnVuY2F0ZSgpLiAgIFRoZSBfdHJ1bmNhdGUoKSByb3V0aW5lIGlz IG9ubHkgY2FsbGVkIGZvciBmaWxlcw0KPj4+d2hpY2gNCj4+PiBhcmUgb3Blbiwgd2hpY2ggbWVh bnMgdGhhdCB0aGUgaW5vZGUgaGFzIHRvIGJlIGluIHRoZSBmaWxlbWFwLiAgIENvZGUNCj4+PiBj b3VsZCBiZSBhZGRlZCBhdCB0aGUgZnJvbnQgb2YgX3RydW5jYXRlKCkgdG8gbG9vayB1cCB0aGUg aW5vZGUgaW4gdGhlDQo+Pj4gZmlsZW1hcCwgYW5kIGlmIGl0IGlzIG5vdCB0aGVyZSwgdGhlbiBh c3NlcnQuICAgVGhhdCB3b3VsZCBwcm92aWRlIGENCj4+PnN0YWNrDQo+Pj4gdHJhY2Ugc2hvd2lu ZyB0aGUgY2FsbGVyIHVzaW5nIHRoZSBmaWxlIHN0cnVjdCB3aXRoIHRoZSBzdGFsZSByZWZlcmVu Y2UNCj4+PiBjb3VudC4gICAoSXQgbWF5IGJlIGEgZmV3IGRheXMgYmVmb3JlIEkgaGF2ZSBhIGNo YW5jZSB0byB0cnkgdGhpcw0KPj4+bXlzZWxmLikNCj4+U3VyZS4gQ291bGQgeW91IHBsZWFzZSBs ZXQgbWUga25vdyB0aGUgc3RlcHMgdG8gaGl0IGlzc3VlPw0KPj5pIGFtIGRvaW5nIG9ubHkgZmV3 IG1pbiBydW5zIHRvIGNoZWNrIHRoZSBwZXJmb3JtYW5jZSBhbmQgc29tZSB1bml0IHRlc3QNCj4+ Y2FzZXMuDQo+Pkkgd2lsbCBhZGQgdGhlIG5lY2Vzc2FyeSBhc3NlcnRzIGlmIGkgY2FuIHJlcHJv ZHVjZSB0aGUgaXNzdWUgYW5kIGZpeCBpdC4NCj4gDQo+VGhhbmtzIGZvciB0aGUgaGVscCEgICBJ IHdpbGwgaGF2ZSB0byBnZXQgYmFjayB0byB5b3Ugb24gTW9uZGF5LCBhcyB0aGVyZQ0KPmlzIGFu b3RoZXIgcGVyc29uIG9uIG91ciB0ZWFtIHdobyBydW5zIHRoZSBiZW5jaG1hcmtzIHRoYXQgdHJp Z2dlciB0aGlzDQo+cHJvYmxlbSwgSSBkb24ndCBrbm93IGhvdyB0byBydW4gaGlzIGJlbmNobWFy a3MgbXlzZWxmLg0KPg0KPktldmFuDQo+IA0KPj4NCj4+VmFyYWRhDQo+Pj4gUmVnYXJkcywgS2V2 YW4NCj4+Pg0KPj4+DQo+Pj4NCj4+DQo+PlBMRUFTRSBOT1RFOiBUaGUgaW5mb3JtYXRpb24gY29u dGFpbmVkIGluIHRoaXMgZWxlY3Ryb25pYyBtYWlsIG1lc3NhZ2UgaXMNCj4+aW50ZW5kZWQgb25s eSBmb3IgdGhlIHVzZSBvZiB0aGUgZGVzaWduYXRlZCByZWNpcGllbnQocykgbmFtZWQgYWJvdmUu IElmDQo+PnRoZSByZWFkZXIgb2YgdGhpcyBtZXNzYWdlIGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVj aXBpZW50LCB5b3UgYXJlIGhlcmVieQ0KPj5ub3RpZmllZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVk IHRoaXMgbWVzc2FnZSBpbiBlcnJvciBhbmQgdGhhdCBhbnkNCj4+cmV2aWV3LCBkaXNzZW1pbmF0 aW9uLCBkaXN0cmlidXRpb24sIG9yIGNvcHlpbmcgb2YgdGhpcyBtZXNzYWdlIGlzDQo+PnN0cmlj dGx5IHByb2hpYml0ZWQuIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgY29tbXVuaWNhdGlvbiBp biBlcnJvciwNCj4+cGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHRlbGVwaG9uZSBvciBlLW1h aWwgKGFzIHNob3duIGFib3ZlKQ0KPj5pbW1lZGlhdGVseSBhbmQgZGVzdHJveSBhbnkgYW5kIGFs bCBjb3BpZXMgb2YgdGhpcyBtZXNzYWdlIGluIHlvdXINCj4+cG9zc2Vzc2lvbiAod2hldGhlciBo YXJkIGNvcGllcyBvciBlbGVjdHJvbmljYWxseSBzdG9yZWQgY29waWVzKS4NCj4NCj4tLQ0KPlRv IHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBj ZXBoLWRldmVsIiBpbg0KPnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5r ZXJuZWwub3JnDQo+TW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9y Zy9tYWpvcmRvbW8taW5mby5odG1sDQoNCg==