From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Liu, Monk" Subject: RE: TDR and VRAM lost handling in KMD: Date: Wed, 11 Oct 2017 09:41:26 +0000 Message-ID: References: <28d64011-fd90-07fb-d95d-48286ecbdcc5@amd.com> <6876e153-7e98-66ac-7338-5601cf83c633@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <6876e153-7e98-66ac-7338-5601cf83c633-5C7GfCeVMHo@public.gmane.org> Content-Language: zh-CN List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Haehnle, Nicolai" , "Koenig, Christian" , "Olsak, Marek" , "Deucher, Alexander" Cc: "Ramirez, Alejandro" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "Filipas, Mario" , "Ding, Pixel" , "Li, Bingley" , "Jiang, Jerry (SW)" T2theSwgbGV0IG1lIHN1bW1hcnkgb3VyIHdob2xlIGlkZWEgdG9nZXRoZXIgYW5kIHNlZSBpZiBp dCB3b3JrczoNCg0KMSwgRm9yIGNzX3N1Ym1pdCwgYWx3YXlzIGNoZWNrIHZyYW0tbG9zdF9jb3Vu dGVyIGZpcnN0IGFuZCByZWplY3QgdGhlIHN1Ym1pdCAocmV0dXJuIC1FQ0FOQ0xFRCB0byBVTUQp IGlmIGN0eC0+dnJhbV9sb3N0X2NvdW50ZXIgIT0gYWRldi0+dnJhbV9sb3N0X2NvdW50ZXIuIFRo YXQgd2F5IHRoZSB2cmFtIGxvc3QgaXNzdWUgY2FuIGJlIGhhbmRsZWQgDQoNCjIsIGZvciBjc19z dWJtaXQgd2Ugc3RpbGwgbmVlZCB0byBjaGVjayBpZiB0aGUgaW5jb21pbmcgY29udGV4dCBpcyAi QU1ER1BVX0NUWF9HVUlMVFlfUkVTRVQiIG9yIG5vdCBldmVuIGlmIHdlIGZvdW5kIGN0eC0+dnJh bV9sb3N0X2NvdW50ZXIgPT0gYWRldi0+dnJhbV9sb3N0X2NvdW50ZXIsIGFuZCB3ZSBjYW4gcmVq ZWN0IHRoZSBzdWJtaXQNCklmIGl0IGlzICJBTURHUFVfQ1RYX0dVSUxUWV9SRVNFVCIsIGNvcnJl Y3QgPw0KDQozLCBpbiBncHVfcmVzZXQoKSByb3V0aW5lLCB3ZSBvbmx5IG1hcmsgdGhlIGhhbmcg am9iJ3MgZW50aXR5IGFzIGd1aWx0eSAoc28gd2UgbmVlZCB0byBhZGQgbmV3IG1lbWJlciBpbiBl bnRpdHkgc3RydWN0dXJlKSwgYW5kIG5vdCBraWNrIGl0IG91dCBpbiBncHVfcmVzZXQoKSBzdGFn ZSwgYnV0IHdlIG5lZWQgdG8gc2V0IHRoZSBjb250ZXh0IGJlaGluZCB0aGlzIGVudGl0eSBhcyAi IEFNREdQVV9DVFhfR1VJTFRZX1JFU0VUIg0KICBBbmQgaWYgcmVzZXQgaW50cm9kdWNlcyBWUkFN IExPU1QsIHdlIGp1c3QgdXBkYXRlIGFkZXYtPnZyYW1fbG9zdF9jb3VudGVyLCBidXQgKmRvbid0 KiBjaGFuZ2UgYWxsIGVudGl0eSB0byBndWlsdHksIHNvIHN0aWxsIG9ubHkgdGhlIGhhbmcgam9i J3MgZW50aXR5IGlzICJndWlsdHkiDQogIEFmdGVyIHNvbWUgZW50aXR5IG1hcmtlZCBhcyAiZ3Vp bHR5Iiwgd2UgZmluZCBhIHdheSB0byBzZXQgdGhlIGNvbnRleHQgYmVoaW5kIGl0IGFzIEFNREdQ VV9DVFhfR1VJTFRZX1JFU0VULCBiZWNhdXNlIHRoaXMgaXMgVS9LIGludGVyZmFjZSwgd2UgbmVl ZCBsZXQgVU1EIGNhbiBrbm93IHRoYXQgdGhpcyBjb250ZXh0IGlzIHdyb25nLg0KDQo0LCBpbiBn cHUgc2NoZWR1bGVyJ3MgcnVuX2pvYigpIHJvdXRpbmUsIHNpbmNlIGl0IG9ubHkgcmVhZHMgZW50 aXR5LCBzbyB3ZSBza2lwIGpvYiBzY2hlZHVsaW5nIG9uY2UgZm91bmQgdGhlIGVudGl0eSBpcyAi Z3VpbHR5Ig0KDQoNCkRvZXMgYWJvdmUgc291bmRzIGdvb2QgPw0KDQoNCg0KLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCkZyb206IEhhZWhubGUsIE5pY29sYWkgDQpTZW50OiBXZWRuZXNkYXks IE9jdG9iZXIgMTEsIDIwMTcgNToyNiBQTQ0KVG86IExpdSwgTW9uayA8TW9uay5MaXVAYW1kLmNv bT47IEtvZW5pZywgQ2hyaXN0aWFuIDxDaHJpc3RpYW4uS29lbmlnQGFtZC5jb20+OyBPbHNhaywg TWFyZWsgPE1hcmVrLk9sc2FrQGFtZC5jb20+OyBEZXVjaGVyLCBBbGV4YW5kZXIgPEFsZXhhbmRl ci5EZXVjaGVyQGFtZC5jb20+DQpDYzogYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IERp bmcsIFBpeGVsIDxQaXhlbC5EaW5nQGFtZC5jb20+OyBKaWFuZywgSmVycnkgKFNXKSA8SmVycnku SmlhbmdAYW1kLmNvbT47IExpLCBCaW5nbGV5IDxCaW5nbGV5LkxpQGFtZC5jb20+OyBSYW1pcmV6 LCBBbGVqYW5kcm8gPEFsZWphbmRyby5SYW1pcmV6QGFtZC5jb20+OyBGaWxpcGFzLCBNYXJpbyA8 TWFyaW8uRmlsaXBhc0BhbWQuY29tPg0KU3ViamVjdDogUmU6IFREUiBhbmQgVlJBTSBsb3N0IGhh bmRsaW5nIGluIEtNRDoNCg0KT24gMTEuMTAuMjAxNyAxMToxOCwgTGl1LCBNb25rIHdyb3RlOg0K PiBMZXQncyB0YWxrIGl0IHNpbXBsZSwgV2hlbiB2cmFtIGxvc3QgaGl0LCAgd2hhdCdzIHRoZSBh Y3Rpb24gZm9yIGFtZGdwdV9jdHhfcXVlcnkoKS9BTURHUFVfQ1RYX09QX1FVRVJZX1NUQVRFIG9u IG90aGVyIGNvbnRleHRzIChub3QgdGhlIG9uZSB0cmlnZ2VyIGdwdSBoYW5nKSBhZnRlciB2cmFt IGxvc3QgPyBkbyB5b3UgbWVhbiB3ZSByZXR1cm4gLUVOT0RFViB0byBVTUQgPw0KDQpJdCBzaG91 bGQgc3VjY2Vzc2Z1bGx5IHJldHVybiBBTURHUFVfQ1RYX0lOTk9DRU5UX1JFU0VULg0KDQoNCj4g SW4gY3Nfc3VibWl0LCB3aXRoIHZyYW0gbG9zdCBoaXQsIGlmIHdlIGRvbid0IG1hcmsgYWxsIGNv bnRleHRzIGFzIA0KPiAiZ3VpbHR5IiwgaG93IHdlIGJsb2NrIGl0cyBmcm9tIHN1Ym1pdHRpbmcg PyBjYW4geW91IHNob3cgc29tZSANCj4gaW1wbGVtZW50IHdheQ0KDQppZiAoY3R4LT52cmFtX2xv c3RfY291bnRlciAhPSBhdG9taWNfcmVhZCgmYWRldi0+dnJhbV9sb3N0X2NvdW50ZXIpKQ0KICAg ICByZXR1cm4gLUVDQU5DRUxFRDsNCg0KKHdoZXJlIGN0eC0+dnJhbV9sb3N0X2NvdW50ZXIgaXMg aW5pdGlhbGl6ZWQgYXQgY29udGV4dCBjcmVhdGlvbiB0aW1lIGFuZCBuZXZlciBjaGFuZ2VkIGFm dGVyd2FyZHMpDQoNCg0KPiBCVFc6IHRoZSAiZ3VpbHR5IiBoZXJlIGlzIGEgbmV3IG1lbWJlciBJ IHdhbnQgdG8gYWRkIHRvIGNvbnRleHQsIGl0IGlzIG5vdCByZWxhdGVkIHdpdGggQU1ER1BVX0NU WF9PUF9RVUVSWV9TVEFURSBVSyBpbnRlcmZhY2UsDQo+IExvb2tzIEkgbmVlZCB0byB1bmlmeSB0 aGVtIGFuZCBvbmx5IG9uZSBwbGFjZSB0byBtYXJrIGd1aWx0eSBvciBub3QNCg0KUmlnaHQsIHRo ZSBBTURHUFVfQ1RYX09QX1FVRVJZX1NUQVRFIGhhbmRsaW5nIG5lZWRzIHRvIGJlIG1hZGUgDQpj b25zaXN0ZW50IHdpdGggdGhlIHJlc3QuDQoNCkNoZWVycywNCk5pY29sYWkNCg0KDQo+IA0KPiAN Cj4gQlIgTW9uaw0KPiANCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSGFl aG5sZSwgTmljb2xhaQ0KPiBTZW50OiBXZWRuZXNkYXksIE9jdG9iZXIgMTEsIDIwMTcgNTowMCBQ TQ0KPiBUbzogTGl1LCBNb25rIDxNb25rLkxpdUBhbWQuY29tPjsgS29lbmlnLCBDaHJpc3RpYW4g PENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT47IE9sc2FrLCBNYXJlayA8TWFyZWsuT2xzYWtAYW1k LmNvbT47IERldWNoZXIsIEFsZXhhbmRlciA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbT4NCj4g Q2M6IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBEaW5nLCBQaXhlbCA8UGl4ZWwuRGlu Z0BhbWQuY29tPjsgSmlhbmcsIEplcnJ5IChTVykgPEplcnJ5LkppYW5nQGFtZC5jb20+OyBMaSwg QmluZ2xleSA8QmluZ2xleS5MaUBhbWQuY29tPjsgUmFtaXJleiwgQWxlamFuZHJvIDxBbGVqYW5k cm8uUmFtaXJlekBhbWQuY29tPjsgRmlsaXBhcywgTWFyaW8gPE1hcmlvLkZpbGlwYXNAYW1kLmNv bT4NCj4gU3ViamVjdDogUmU6IFREUiBhbmQgVlJBTSBsb3N0IGhhbmRsaW5nIGluIEtNRDoNCj4g DQo+IE9uIDExLjEwLjIwMTcgMTA6NDgsIExpdSwgTW9uayB3cm90ZToNCj4+IE9uICJndWlsdHki OiAiZ3VpbHR5IiBpcyBhIHRlcm0gdGhhdCdzIHVzZWQgYnkgQVBJcyAoZS5nLiBPcGVuR0wpLCBz bw0KPj4gaXQncyByZWFzb25hYmxlIHRvIHVzZSBpdC4gSG93ZXZlciwgaXQgL2RvZXMgbm90LyBt YWtlIHNlbnNlIHRvIG1hcmsNCj4+IGlkbGUgY29udGV4dHMgYXMgImd1aWx0eSIganVzdCBiZWNh dXNlIFZSQU0gaXMgbG9zdC7CoFZSQU0gbG9zdCBpcyBhDQo+PiBwZXJmZWN0IGV4YW1wbGUgd2hl cmUgdGhlIGRyaXZlciBzaG91bGQgcmVwb3J0IGNvbnRleHQgbG9zdCB0bw0KPj4gYXBwbGljYXRp b25zIHdpdGggdGhlICJpbm5vY2VudCIgZmxhZyBmb3IgY29udGV4dHMgdGhhdCB3ZXJlIGlkbGUg YXQNCj4+IHRoZSB0aW1lIG9mIHJlc2V0LiBUaGUgb25seSBjb250ZXh0KHMpIHRoYXQgc2hvdWxk IGJlIHJlcG9ydGVkIGFzICJndWlsdHkiDQo+PiAob3IgcGVyaGFwcyAidW5rbm93biIgaW4gc29t ZSBjYXNlcykgYXJlIHRoZSBvbmVzIHRoYXQgd2VyZSBleGVjdXRpbmcNCj4+IGF0IHRoZSB0aW1l IG9mIHJlc2V0Lg0KPj4NCj4+IE1MOiBLTUQgbWFyayBhbGwgY29udGV4dHMgYXMgZ3VpbHR5IGlz IGJlY2F1c2UgdGhhdCB3YXkgd2UgY2FuIHVuaWZ5DQo+PiBvdXIgSU9DVEwgYmVoYXZpb3I6IGUu Zy4gZm9yIElPQ1RMIG9ubHkgYmxvY2sg4oCcZ3VpbHR54oCdY29udGV4dCAsIG5vDQo+PiBuZWVk IHRvIHdvcnJ5IGFib3V0IHZyYW0tbG9zdC1jb3VudGVyIGFueW1vcmUsIHRoYXTigJlzIGEgaW1w bGVtZW50YXRpb24NCj4+IHN0eWxlLiBJIGRvbuKAmXQgdGhpbmsgaXQgaXMgcmVsYXRlZCB3aXRo IFVNRCBsYXllciwNCj4+DQo+PiBGb3IgVU1EIHRoZSBnbC1jb250ZXh0IGlzbuKAmXQgYXdhcmUg b2YgYnkgS01ELCBzbyBVTUQgY2FuIGltcGxlbWVudCBpdA0KPj4gb3duIOKAnGd1aWx0eeKAnSBn bC1jb250ZXh0IGlmIHlvdSB3YW50Lg0KPiANCj4gV2VsbCwgdG8gc29tZSBleHRlbnQgdGhpcyBp cyBqdXN0IHNlbWFudGljcywgYnV0IGl0IGhlbHBzIHRvIGtlZXAgdGhlIHRlcm1pbm9sb2d5IGNv bnNpc3RlbnQuDQo+IA0KPiBNb3N0IGltcG9ydGFudGx5LCBwbGVhc2Uga2VlcCB0aGUgQU1ER1BV X0NUWF9PUF9RVUVSWV9TVEFURSB1YXBpIGluDQo+IG1pbmQ6IHRoaXMgcmV0dXJucyBvbmUgb2Yg QU1ER1BVX0NUWF97R1VJTFRZLElOTk9DRU5ULFVOS05PV059X1JFQ0VOVCwNCj4gYW5kIGl0IG11 c3QgcmV0dXJuICJpbm5vY2VudCIgZm9yIGNvbnRleHRzIHRoYXQgYXJlIG9ubHkgbG9zdCBkdWUg dG8gVlJBTSBsb3N0IHdpdGhvdXQgYmVpbmcgb3RoZXJ3aXNlIGludm9sdmVkIGluIHRoZSB0aW1l b3V0IHRoYXQgbGVhZCB0byB0aGUgcmVzZXQuDQo+IA0KPiBUaGUgcG9pbnQgaXMgdGhhdCBpbiB0 aGUgcGxhY2VzIHdoZXJlIHlvdSB1c2VkICJndWlsdHkiIGl0IHdvdWxkIGJlIGJldHRlciB0byB1 c2UgImNvbnRleHQgbG9zdCIsIGFuZCB0aGVuIGZ1cnRoZXIgZGlmZmVyZW50aWF0ZSBiZXR3ZWVu IGd1aWx0eS9pbm5vY2VudCBjb250ZXh0IGxvc3QgYmFzZWQgb24gdGhlIGRldGFpbHMgb2Ygd2hh dCBoYXBwZW5lZC4NCj4gDQo+IA0KPj4gSWYgS01EIGRvZXNu4oCZdCBtYXJrIGFsbCBjdHggYXMg Z3VpbHR5IGFmdGVyIFZSQU0gbG9zdCwgY2FuIHlvdQ0KPj4gaWxsdXN0cmF0ZSB3aGF0IHJ1bGUg S01EIHNob3VsZCBvYmV5IHRvIGNoZWNrIGluIEtNUyBJT0NUTCBsaWtlDQo+PiBjc19zdW1iaXQg Pz8gbGV04oCZcyBzZWUgd2hpY2ggd2F5IGJldHRlcg0KPiANCj4gaWYgKGN0eC0+dnJhbV9sb3N0 X2NvdW50ZXIgIT0gYXRvbWljX3JlYWQoJmFkZXYtPnZyYW1fbG9zdF9jb3VudGVyKSkNCj4gICAg ICAgcmV0dXJuIC1FQ0FOQ0VMRUQ7DQo+IA0KPiBQbHVzIHNpbWlsYXIgbG9naWMgZm9yIEFNREdQ VV9DVFhfT1BfUVVFUllfU1RBVEUuDQo+IA0KPiBZZXMsIGl0J3Mgb25lIGFkZGl0aW9uYWwgY2hl Y2sgaW4gY3Nfc3VibWl0LiBJZiB5b3UncmUgd29ycmllZCBhYm91dCB0aGF0IChhbmQgQ2hyaXN0 aWFuJ3MgY29uY2VybnMgYWJvdXQgcG9zc2libGUgaXNzdWVzIHdpdGggd2Fsa2luZyBvdmVyIGFs bCBjb250ZXh0cyBhcmUgYWRkcmVzc2VkKSwgSSBzdXBwb3NlIHlvdSBjb3VsZCBqdXN0IHN0b3Jl IGEgcGVyLWNvbnRleHQNCj4gDQo+ICAgICB1bnNpZ25lZCBjb250ZXh0X3Jlc2V0X3N0YXR1czsN Cj4gDQo+IGluc3RlYWQgb2YgYSBgYm9vbCBndWlsdHlgLiBJdHMgdmFsdWUgd291bGQgc3RhcnQg b3V0IGFzIDANCj4gKEFNREdQVV9DVFhfTk9fUkVTRVQpIGFuZCB3b3VsZCBiZSBzZXQgdG8gdGhl IGNvcnJlY3QgdmFsdWUgZHVyaW5nIHJlc2V0Lg0KPiANCj4gQ2hlZXJzLA0KPiBOaWNvbGFpDQo+ IA0KPiANCj4+DQo+PiAqRnJvbToqSGFlaG5sZSwgTmljb2xhaQ0KPj4gKlNlbnQ6KiBXZWRuZXNk YXksIE9jdG9iZXIgMTEsIDIwMTcgNDo0MSBQTQ0KPj4gKlRvOiogTGl1LCBNb25rIDxNb25rLkxp dUBhbWQuY29tPjsgS29lbmlnLCBDaHJpc3RpYW4NCj4+IDxDaHJpc3RpYW4uS29lbmlnQGFtZC5j b20+OyBPbHNhaywgTWFyZWsgPE1hcmVrLk9sc2FrQGFtZC5jb20+Ow0KPj4gRGV1Y2hlciwgQWxl eGFuZGVyIDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPg0KPj4gKkNjOiogYW1kLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmc7IERpbmcsIFBpeGVsIDxQaXhlbC5EaW5nQGFtZC5jb20+Ow0KPj4g SmlhbmcsIEplcnJ5IChTVykgPEplcnJ5LkppYW5nQGFtZC5jb20+OyBMaSwgQmluZ2xleQ0KPj4g PEJpbmdsZXkuTGlAYW1kLmNvbT47IFJhbWlyZXosIEFsZWphbmRybyA8QWxlamFuZHJvLlJhbWly ZXpAYW1kLmNvbT47DQo+PiBGaWxpcGFzLCBNYXJpbyA8TWFyaW8uRmlsaXBhc0BhbWQuY29tPg0K Pj4gKlN1YmplY3Q6KiBSZTogVERSIGFuZCBWUkFNIGxvc3QgaGFuZGxpbmcgaW4gS01EOg0KPj4N Cj4+ICAgRnJvbSBhIE1lc2EgcGVyc3BlY3RpdmUsIHRoaXMgYWxtb3N0IGFsbCBzb3VuZHMgcmVh c29uYWJsZSB0byBtZS4NCj4+DQo+PiBPbiAiZ3VpbHR5IjogImd1aWx0eSIgaXMgYSB0ZXJtIHRo YXQncyB1c2VkIGJ5IEFQSXMgKGUuZy4gT3BlbkdMKSwgc28NCj4+IGl0J3MgcmVhc29uYWJsZSB0 byB1c2UgaXQuIEhvd2V2ZXIsIGl0IC9kb2VzIG5vdC8gbWFrZSBzZW5zZSB0byBtYXJrDQo+PiBp ZGxlIGNvbnRleHRzIGFzICJndWlsdHkiIGp1c3QgYmVjYXVzZSBWUkFNIGlzIGxvc3QuwqBWUkFN IGxvc3QgaXMgYQ0KPj4gcGVyZmVjdCBleGFtcGxlIHdoZXJlIHRoZSBkcml2ZXIgc2hvdWxkIHJl cG9ydCBjb250ZXh0IGxvc3QgdG8NCj4+IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSAiaW5ub2NlbnQi IGZsYWcgZm9yIGNvbnRleHRzIHRoYXQgd2VyZSBpZGxlIGF0DQo+PiB0aGUgdGltZSBvZiByZXNl dC4gVGhlIG9ubHkgY29udGV4dChzKSB0aGF0IHNob3VsZCBiZSByZXBvcnRlZCBhcyAiZ3VpbHR5 Ig0KPj4gKG9yIHBlcmhhcHMgInVua25vd24iIGluIHNvbWUgY2FzZXMpIGFyZSB0aGUgb25lcyB0 aGF0IHdlcmUgZXhlY3V0aW5nDQo+PiBhdCB0aGUgdGltZSBvZiByZXNldC4NCj4+DQo+PiBPbiB3 aGV0aGVyIHRoZSB3aG9sZSBjb250ZXh0IGlzIG1hcmtlZCBhcyBndWlsdHkgZnJvbSBhIHVzZXIg c3BhY2UNCj4+IHBlcnNwZWN0aXZlLCBpdCB3b3VsZCBzaW1wbHkgYmUgbmljZSBmb3IgdXNlciBz cGFjZSB0byBnZXQgY29uc2lzdGVudA0KPj4gYW5zd2Vycy4gSXQgd291bGQgYmUgYSBiaXQgb2Rk IGlmIHdlIGNvdWxkIGUuZy4gc3VjY2VlZCBpbiBzdWJtaXR0aW5nDQo+PiBhbiBTRE1BIGpvYiBh ZnRlciBhIEdGWCBqb2Igd2FzIHJlamVjdGVkLiBUaGlzIHdvdWxkIHBvaW50IGluIGZhdm9yIG9m DQo+PiBtYXJraW5nIHRoZSBlbnRpcmUgY29udGV4dCBhcyBndWlsdHkgKGFsdGhvdWdoIHRoYXQg Y291bGQgaGFwcGVuDQo+PiBsYXppbHkgaW5zdGVhZCBvZiBhdCByZXNldCB0aW1lKS4gT24gdGhl IG90aGVyIGhhbmQsIGlmIHRoYXQncyB0b28gYmlnDQo+PiBhIGJ1cmRlbiBmb3IgdGhlIGtlcm5l bCBpbXBsZW1lbnRhdGlvbiBJJ20gc3VyZSB3ZSBjYW4gbGl2ZSB3aXRob3V0IGl0Lg0KPj4NCj4+ IENoZWVycywNCj4+DQo+PiBOaWNvbGFpDQo+Pg0KPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4gLS0NCj4+ DQo+PiAqRnJvbToqTGl1LCBNb25rDQo+PiAqU2VudDoqIFdlZG5lc2RheSwgT2N0b2JlciAxMSwg MjAxNyAxMDoxNTo0MCBBTQ0KPj4gKlRvOiogS29lbmlnLCBDaHJpc3RpYW47IEhhZWhubGUsIE5p Y29sYWk7IE9sc2FrLCBNYXJlazsgRGV1Y2hlciwNCj4+IEFsZXhhbmRlcg0KPj4gKkNjOiogYW1k LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4+IDxtYWlsdG86YW1kLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmc+OyBEaW5nLCBQaXhlbDsgSmlhbmcsIEplcnJ5DQo+PiAoU1cpOyBMaSwgQmlu Z2xleTsgUmFtaXJleiwgQWxlamFuZHJvOyBGaWxpcGFzLCBNYXJpbw0KPj4gKlN1YmplY3Q6KiBS RTogVERSIGFuZCBWUkFNIGxvc3QgaGFuZGxpbmcgaW4gS01EOg0KPj4NCj4+IDEuU2V0IGl0cyBm ZW5jZSBlcnJvciBzdGF0dXMgdG8g4oCcKkVUSU1FKuKAnSwNCj4+DQo+PiBObywgYXMgSSBhbHJl YWR5IGV4cGxhaW5lZCBFVElNRSBpcyBmb3Igc3luY2hyb25vdXMgb3BlcmF0aW9uLg0KPj4NCj4+ IEluIG90aGVyIHdvcmRzIHdoZW4gd2UgcmV0dXJuIEVUSU1FIGZyb20gdGhlIHdhaXQgSU9DVEwg aXQgd291bGQgbWVhbg0KPj4gdGhhdCB0aGUgd2FpdGluZyBoYXMgc29tZWhvdyB0aW1lZCBvdXQs IGJ1dCBub3QgdGhlIGpvYiB3ZSB3YWl0ZWQgZm9yLg0KPj4NCj4+IFBsZWFzZSB1c2UgRUNBTkNF TEVEIGFzIHdlbGwgb3Igc29tZSBvdGhlciBlcnJvciBjb2RlIHdoZW4gd2UgZmluZA0KPj4gdGhh dCB3ZSBuZWVkIHRvIGRpc3RpbmN0IHRoZSB0aW1lZG91dCBqb2IgZnJvbSB0aGUgY2FuY2VsZWQg b25lcw0KPj4gKHByb2JhYmx5IGEgZ29vZCBpZGVhLCBidXQgSSdtIG5vdCBzdXJlKS4NCj4+DQo+ PiBbTUxdIEnigJltIG9rYXkgaWYgeW91IGluc2lzdCBub3QgdG8gdXNlIEVUSU1FDQo+Pg0KPj4g MS5GaW5kIHRoZSBlbnRpdHkvY3R4IGJlaGluZCB0aGlzIGpvYiwgYW5kIHNldCB0aGlzIGN0eCBh cyDigJwqZ3VpbHR5KuKAnQ0KPj4NCj4+IE5vdCBzdXJlLiBEbyB3ZSB3YW50IHRvIHNldCB0aGUg d2hvbGUgY29udGV4dCBhcyBndWlsdHkgb3IganVzdCB0aGUgZW50aXR5Pw0KPj4NCj4+IFNldHRp bmcgdGhlIHdob2xlIGNvbnRleHRzIGFzIGd1aWx0eSBzb3VuZHMgcmFjeSB0byBtZS4NCj4+DQo+ PiBCVFc6IFdlIHNob3VsZCB1c2UgYSBkaWZmZXJlbnQgbmFtZSB0aGFuICJndWlsdHkiLCBtYXli ZSBqdXN0ICJib29sDQo+PiBjYW5jZWxlZDsiID8NCj4+DQo+PiBbTUxdIEkgdGhpbmsgY29udGV4 dCBpcyBiZXR0ZXIgdGhhbiBlbnRpdHksIGJlY2F1c2UgZm9yIGV4YW1wbGUgaWYgeW91DQo+PiBv bmx5IGJsb2NrIGVudGl0eV8wIG9mIGNvbnRleHQgYW5kIGFsbG93IGVudGl0eV9OIHJ1biwgdGhh dCBtZWFucyB0aGUNCj4+IGRlcGVuZGVuY3kgYmV0d2VlbiBlbnRpdGllcyBhcmUgYnJva2VuIChl LmcuIHBhZ2UgdGFibGUgdXBkYXRlcyBpbg0KPj4NCj4+IFNkbWEgZW50aXR5IHBhc3MgYnV0IGdm eCBzdWJtaXQgaW4gR0ZYIGVudGl0eSBibG9ja2VkLCBub3QgbWFrZSBzZW5zZQ0KPj4gdG8gbWUp DQo+Pg0KPj4gV2XigJlkIGJldHRlciBlaXRoZXIgYmxvY2sgdGhlIHdob2xlIGNvbnRleHQgb3Ig bGV0IG5vdOKApg0KPj4NCj4+IDEuS2ljayBvdXQgYWxsIGpvYnMgaW4gdGhpcyDigJxndWlsdHni gJ0gY3R44oCZcyBLRklGTyBxdWV1ZSwgYW5kIHNldCBhbGwNCj4+IHRoZWlyIGZlbmNlIHN0YXR1 cyB0byDigJwqRUNBTkNFTEVEKuKAnQ0KPj4NCj4+IFNldHRpbmcgRUNBTkNFTEVEIHNob3VsZCBi ZSBvay4gQnV0IEkgdGhpbmsgd2Ugc2hvdWxkIGRvIHRoaXMgd2hlbiB3ZQ0KPj4gdHJ5IHRvIHJ1 biB0aGUgam9icyBhbmQgbm90IGR1cmluZyBHUFUgcmVzZXQuDQo+Pg0KPj4gW01MXSB3aXRob3V0 IGRlZXAgdGhvdWdodCBhbmQgZXhwcml0bWVudCwgSeKAmW0gbm90IHN1cmUgdGhlIGRpZmZlcmVu Y2UNCj4+IGJldHdlZW4gdGhlbSwgYnV0IGtpY2sgaXQgb3V0IGluIGdwdV9yZXNldCByb3V0aW5l IGlzIG1vcmUgZWZmaWNpZW50LA0KPj4NCj4+IE90aGVyd2lzZSB5b3UgbmVlZCB0byBjaGVjayBj b250ZXh0L2VudGl0eSBndWlsdHkgZmxhZyBpbiBydW5fam9iDQo+PiByb3V0aW5lIOKApmFuZCB5 b3UgbmVlZCB0byBpdCBmb3IgZXZlcnkgY29udGV4dC9lbnRpdHksIEkgZG9u4oCZdCBzZWUgd2h5 DQo+Pg0KPj4gV2UgZG9u4oCZdCBqdXN0IGtpY2tvdXQgYWxsIG9mIHRoZW0gaW4gZ3B1X3Jlc2V0 IHN0YWdlIOKApi4NCj4+DQo+PiBhKUl0ZXJhdGUgb3ZlciBhbGwgbGl2aW5nIGN0eCwgYW5kIHNl dCBhbGwgY3R4IGFzIOKAnCpndWlsdHkq4oCdIHNpbmNlDQo+PiBWUkFNIGxvc3QgYWN0dWFsbHkg cnVpbnMgYWxsIFZSQU0gY29udGVudHMNCj4+DQo+PiBObywgdGhhdCBzaG91bGRuJ3QgYmUgZG9u ZSBieSBjb21wYXJpbmcgdGhlIGNvdW50ZXJzLiBJdGVyYXRpbmcgb3Zlcg0KPj4gYWxsIGNvbnRl eHRzIGlzIHdheSB0byBtdWNoIG92ZXJoZWFkLg0KPj4NCj4+IFtNTF0gYmVjYXVzZSBJIHdhbnQg dG8gbWFrZSBLTVMgSU9DVEwgcnVsZXMgY2xlYW4sIGxpa2UgdGhleSBkb27igJl0DQo+PiBuZWVk IHRvIGRpZmZlcmVudGlhdGUgVlJBTSBsb3N0IG9yIG5vdCwgdGhleSBvbmx5IGludGVyZXN0ZWQg aW4gaWYgdGhlDQo+PiBjb250ZXh0IGlzIGd1aWx0eSBvciBub3QsIGFuZCBibG9jaw0KPj4NCj4+ IFN1Ym1pdCBmb3IgZ3VpbHR5IG9uZXMuDQo+Pg0KPj4gKkNhbiB5b3UgZ2l2ZSBtb3JlIGRldGFp bHMgb2YgeW91ciBpZGVhPyBBbmQgYmV0dGVyIHRoZSBkZXRhaWwNCj4+IGltcGxlbWVudCBpbiBj c19zdWJtaXQsIEkgd2FudCB0byBzZWUgaG93IHlvdSB3YW50IHRvIGJsb2NrIHN1Ym1pdA0KPj4g d2l0aG91dCBjaGVja2luZyBjb250ZXh0IGd1aWx0eSBmbGFnKg0KPj4NCj4+IGEpS2ljayBvdXQg YWxsIGpvYnMgaW4gYWxsIGN0eOKAmXMgS0ZJRk8gcXVldWUsIGFuZCBzZXQgYWxsIHRoZWlyIGZl bmNlDQo+PiBzdGF0dXMgdG8g4oCcKkVDQU5DRUxERUQq4oCdDQo+Pg0KPj4gWWVzIGFuZCBubywg dGhhdCBzaG91bGQgYmUgZG9uZSB3aGVuIHdlIHRyeSB0byBydW4gdGhlIGpvYnMgYW5kIG5vdA0K Pj4gZHVyaW5nIEdQVSByZXNldC4NCj4+DQo+PiBbTUxdIGFnYWluLCBraWNraW5nIG91dCB0aGVt IGluIGdwdSByZXNldCByb3V0aW5lIGlzIGhpZ2ggZWZmaWNpZW50LA0KPj4gb3RoZXJ3aXNlIHlv dSBuZWVkIGNoZWNrIG9uIGV2ZXJ5IGpvYiBpbiBydW5fam9iKCkNCj4+DQo+PiBCZXNpZGVzLCBj YW4geW91IGlsbHVzdHJhdGUgdGhlIGRldGFpbCBpbXBsZW1lbnRhdGlvbiA/DQo+Pg0KPj4gWWVz IGFuZCBubywgZG1hX2ZlbmNlX2dldF9zdGF0dXMoKSBpcyBzb21lIHNwZWNpZmljIGhhbmRsaW5n IGZvcg0KPj4gc3luY19maWxlIGRlYnVnZ2luZyAobm8gaWRlYSB3aHkgdGhhdCBtYWRlIGl0IGlu dG8gdGhlIGNvbW1vbiBmZW5jZSBjb2RlKS4NCj4+DQo+PiBJdCB3YXMgcmVwbGFjZWQgYnkgcHV0 dGluZyB0aGUgZXJyb3IgY29kZSBkaXJlY3RseSBpbnRvIHRoZSBmZW5jZSwgc28NCj4+IGp1c3Qg cmVhZGluZyB0aGF0IG9uZSBhZnRlciB3YWl0aW5nIHNob3VsZCBiZSBvay4NCj4+DQo+PiBNYXli ZSB3ZSBzaG91bGQgZml4IGRtYV9mZW5jZV9nZXRfc3RhdHVzKCkgdG8gZG8gdGhlIHJpZ2h0IHRo aW5nIGZvciB0aGlzPw0KPj4NCj4+IFtNTF0geWVhaCwgdGhhdOKAmXMgdG9vIGNvbmZ1c2luZywg dGhlIG5hbWUgc291bmQgcmVhbGx5IHRoZSBvbmUgSSB3YW50DQo+PiB0byB1c2UsIHdlIHNob3Vs ZCBjaGFuZ2UgaXTigKYNCj4+DQo+PiAqQnV0IGxvb2sgaW50byB0aGUgaW1wbGVtZW50LCBJIGRv bioq4oCZdCBzZWUgd2h5IHdlIGNhbm5vdCB1c2UgaXQgPyBpdA0KPj4gYWxzbyBmaW5hbGx5IHJl dHVybiB0aGUgZmVuY2UtPmVycm9yICoNCj4+DQo+PiAqRnJvbToqS29lbmlnLCBDaHJpc3RpYW4N Cj4+ICpTZW50OiogV2VkbmVzZGF5LCBPY3RvYmVyIDExLCAyMDE3IDM6MjEgUE0NCj4+ICpUbzoq IExpdSwgTW9uayA8TW9uay5MaXVAYW1kLmNvbSA8bWFpbHRvOk1vbmsuTGl1QGFtZC5jb20+Pjsg SGFlaG5sZSwNCj4+IE5pY29sYWkgPE5pY29sYWkuSGFlaG5sZUBhbWQuY29tIDxtYWlsdG86Tmlj b2xhaS5IYWVobmxlQGFtZC5jb20+PjsNCj4+IE9sc2FrLCBNYXJlayA8TWFyZWsuT2xzYWtAYW1k LmNvbSA8bWFpbHRvOk1hcmVrLk9sc2FrQGFtZC5jb20+PjsNCj4+IERldWNoZXIsIEFsZXhhbmRl ciA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbQ0KPj4gPG1haWx0bzpBbGV4YW5kZXIuRGV1Y2hl ckBhbWQuY29tPj4NCj4+ICpDYzoqIGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+PiA8 bWFpbHRvOmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnPjsgRGluZywgUGl4ZWwNCj4+IDxQ aXhlbC5EaW5nQGFtZC5jb20gPG1haWx0bzpQaXhlbC5EaW5nQGFtZC5jb20+PjsgSmlhbmcsIEpl cnJ5IChTVykNCj4+IDxKZXJyeS5KaWFuZ0BhbWQuY29tIDxtYWlsdG86SmVycnkuSmlhbmdAYW1k LmNvbT4+OyBMaSwgQmluZ2xleQ0KPj4gPEJpbmdsZXkuTGlAYW1kLmNvbSA8bWFpbHRvOkJpbmds ZXkuTGlAYW1kLmNvbT4+OyBSYW1pcmV6LCBBbGVqYW5kcm8NCj4+IDxBbGVqYW5kcm8uUmFtaXJl ekBhbWQuY29tIDxtYWlsdG86QWxlamFuZHJvLlJhbWlyZXpAYW1kLmNvbT4+Ow0KPj4gRmlsaXBh cywgTWFyaW8gPE1hcmlvLkZpbGlwYXNAYW1kLmNvbSA8bWFpbHRvOk1hcmlvLkZpbGlwYXNAYW1k LmNvbT4+DQo+PiAqU3ViamVjdDoqIFJlOiBURFIgYW5kIFZSQU0gbG9zdCBoYW5kbGluZyBpbiBL TUQ6DQo+Pg0KPj4gU2VlIGlubGluZToNCj4+DQo+PiBBbSAxMS4xMC4yMDE3IHVtIDA3OjMzIHNj aHJpZWIgTGl1LCBNb25rOg0KPj4NCj4+ICAgICAgSGkgQ2hyaXN0aWFuICYgTmljb2xhaSwNCj4+ DQo+PiAgICAgIFdlIG5lZWQgdG8gYWNoaWV2ZSBzb21lIGFncmVlbWVudHMgb24gd2hhdCBzaG91 bGQgTUVTQS9VTUQgZG8gYW5kDQo+PiAgICAgIHdoYXQgc2hvdWxkIEtNRCBkbywgKnBsZWFzZSBn aXZlIHlvdXIgY29tbWVudHMgd2l0aCDigJxva2F54oCdIG9yIOKAnE5v4oCdDQo+PiAgICAgIGFu ZCB5b3VyIGlkZWEgb24gYmVsb3cgaXRlbXMsKg0KPj4NCj4+ICAgICAgP1doZW4gYSBqb2IgdGlt ZWQgb3V0IChzZXQgZnJvbSBsb2NrdXBfdGltZW91dCBrZXJuZWwgcGFyYW1ldGVyKSwNCj4+ICAg ICAgV2hhdCBLTUQgc2hvdWxkIGRvIGluIFREUiByb3V0aW5lIDoNCj4+DQo+PiAgICAgIDEuVXBk YXRlIGFkZXYtPipncHVfcmVzZXRfY291bnRlciosIGFuZCBzdG9wIHNjaGVkdWxlciBmaXJzdCwN Cj4+ICAgICAgKCpncHVfcmVzZXRfY291bnRlciogaXMgdXNlZCB0byBmb3JjZSB2bSBmbHVzaCBh ZnRlciBHUFUgcmVzZXQsIG91dA0KPj4gICAgICBvZiB0aGlzIHRocmVhZOKAmXMgc2NvcGUgc28g bm8gbW9yZSBkaXNjdXNzaW9uIG9uIGl0KQ0KPj4NCj4+IE9rYXkuDQo+Pg0KPj4gICAgICAyLlNl dCBpdHMgZmVuY2UgZXJyb3Igc3RhdHVzIHRvIOKAnCpFVElNRSrigJ0sDQo+Pg0KPj4gTm8sIGFz IEkgYWxyZWFkeSBleHBsYWluZWQgRVRJTUUgaXMgZm9yIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4N Cj4+DQo+PiBJbiBvdGhlciB3b3JkcyB3aGVuIHdlIHJldHVybiBFVElNRSBmcm9tIHRoZSB3YWl0 IElPQ1RMIGl0IHdvdWxkIG1lYW4NCj4+IHRoYXQgdGhlIHdhaXRpbmcgaGFzIHNvbWVob3cgdGlt ZWQgb3V0LCBidXQgbm90IHRoZSBqb2Igd2Ugd2FpdGVkIGZvci4NCj4+DQo+PiBQbGVhc2UgdXNl IEVDQU5DRUxFRCBhcyB3ZWxsIG9yIHNvbWUgb3RoZXIgZXJyb3IgY29kZSB3aGVuIHdlIGZpbmQN Cj4+IHRoYXQgd2UgbmVlZCB0byBkaXN0aW5jdCB0aGUgdGltZWRvdXQgam9iIGZyb20gdGhlIGNh bmNlbGVkIG9uZXMNCj4+IChwcm9iYWJseSBhIGdvb2QgaWRlYSwgYnV0IEknbSBub3Qgc3VyZSku DQo+Pg0KPj4gICAgICAzLkZpbmQgdGhlIGVudGl0eS9jdHggYmVoaW5kIHRoaXMgam9iLCBhbmQg c2V0IHRoaXMgY3R4IGFzIOKAnCpndWlsdHkq4oCdDQo+Pg0KPj4gTm90IHN1cmUuIERvIHdlIHdh bnQgdG8gc2V0IHRoZSB3aG9sZSBjb250ZXh0IGFzIGd1aWx0eSBvciBqdXN0IHRoZSBlbnRpdHk/ DQo+Pg0KPj4gU2V0dGluZyB0aGUgd2hvbGUgY29udGV4dHMgYXMgZ3VpbHR5IHNvdW5kcyByYWN5 IHRvIG1lLg0KPj4NCj4+IEJUVzogV2Ugc2hvdWxkIHVzZSBhIGRpZmZlcmVudCBuYW1lIHRoYW4g Imd1aWx0eSIsIG1heWJlIGp1c3QgImJvb2wNCj4+IGNhbmNlbGVkOyIgPw0KPj4NCj4+ICAgICAg NC5LaWNrIG91dCB0aGlzIGpvYiBmcm9tIHNjaGVkdWxlcuKAmXMgbWlycm9yIGxpc3QsIHNvIHRo aXMgam9iIHdvbuKAmXQNCj4+ICAgICAgZ2V0IHJlLXNjaGVkdWxlZCB0byByaW5nIGFueW1vcmUu DQo+Pg0KPj4gT2theS4NCj4+DQo+PiAgICAgIDUuS2ljayBvdXQgYWxsIGpvYnMgaW4gdGhpcyDi gJxndWlsdHnigJ0gY3R44oCZcyBLRklGTyBxdWV1ZSwgYW5kIHNldCBhbGwNCj4+ICAgICAgdGhl aXIgZmVuY2Ugc3RhdHVzIHRvIOKAnCpFQ0FOQ0VMRUQq4oCdDQo+Pg0KPj4gU2V0dGluZyBFQ0FO Q0VMRUQgc2hvdWxkIGJlIG9rLiBCdXQgSSB0aGluayB3ZSBzaG91bGQgZG8gdGhpcyB3aGVuIHdl DQo+PiB0cnkgdG8gcnVuIHRoZSBqb2JzIGFuZCBub3QgZHVyaW5nIEdQVSByZXNldC4NCj4+DQo+ PiAgICAgIDYuRm9yY2Ugc2lnbmFsIGFsbCBmZW5jZXMgdGhhdCBnZXQga2lja2VkIG91dCBieSBh Ym92ZSB0d28NCj4+ICAgICAgc3RlcHMsKm90aGVyd2lzZSBVTUQgd2lsbCBibG9jayBmb3JldmVy IGlmIHdhaXRpbmcgb24gdGhvc2UNCj4+IGZlbmNlcyoNCj4+DQo+PiBPa2F5Lg0KPj4NCj4+ICAg ICAgNy5EbyBncHUgcmVzZXQsIHdoaWNoIGlzIGNhbiBiZSBzb21lIGNhbGxiYWNrcyB0byBsZXQg YmFyZS1tZXRhbCBhbmQNCj4+ICAgICAgU1ItSU9WIGltcGxlbWVudCB3aXRoIHRoZWlyIGZhdm9y IHN0eWxlDQo+Pg0KPj4gT2theS4NCj4+DQo+PiAgICAgIDguQWZ0ZXIgcmVzZXQsIEtNRCBuZWVk IHRvIGF3YXJlIGlmIHRoZSBWUkFNIGxvc3QgaGFwcGVucyBvciBub3QsDQo+PiAgICAgIGJhcmUt bWV0YWwgY2FuIGltcGxlbWVudCBzb21lIGZ1bmN0aW9uIHRvIGp1ZGdlLCB3aGlsZSBmb3IgU1It SU9WIEkNCj4+ICAgICAgcHJlZmVyIHRvIHJlYWQgaXQgZnJvbSBHSU0gc2lkZSAoZm9yIGluaXRp YWwgdmVyc2lvbiB3ZSBjb25zaWRlcg0KPj4gICAgICBpdOKAmXMgYWx3YXlzIFZSQU0gbG9zdCwg dGlsbCBHSU0gc2lkZSBjaGFuZ2UgYWxpZ25lZCkNCj4+DQo+PiBPa2F5Lg0KPj4NCj4+ICAgICAg OS5JZiBWUkFNIGxvc3Qgbm90IGhpdCwgY29udGludWUsIG90aGVyd2lzZToNCj4+DQo+PiAgICAg IGEpVXBkYXRlIGFkZXYtPip2cmFtX2xvc3RfY291bnRlciosDQo+Pg0KPj4gT2theS4NCj4+DQo+ PiAgICAgIGIpSXRlcmF0ZSBvdmVyIGFsbCBsaXZpbmcgY3R4LCBhbmQgc2V0IGFsbCBjdHggYXMg 4oCcKmd1aWx0eSrigJ0gc2luY2UNCj4+ICAgICAgVlJBTSBsb3N0IGFjdHVhbGx5IHJ1aW5zIGFs bCBWUkFNIGNvbnRlbnRzDQo+Pg0KPj4gTm8sIHRoYXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgY29t cGFyaW5nIHRoZSBjb3VudGVycy4gSXRlcmF0aW5nIG92ZXINCj4+IGFsbCBjb250ZXh0cyBpcyB3 YXkgdG8gbXVjaCBvdmVyaGVhZC4NCj4+DQo+PiAgICAgIGMpS2ljayBvdXQgYWxsIGpvYnMgaW4g YWxsIGN0eOKAmXMgS0ZJRk8gcXVldWUsIGFuZCBzZXQgYWxsIHRoZWlyDQo+PiAgICAgIGZlbmNl IHN0YXR1cyB0byDigJwqRUNBTkNFTERFRCrigJ0NCj4+DQo+PiBZZXMgYW5kIG5vLCB0aGF0IHNo b3VsZCBiZSBkb25lIHdoZW4gd2UgdHJ5IHRvIHJ1biB0aGUgam9icyBhbmQgbm90DQo+PiBkdXJp bmcgR1BVIHJlc2V0Lg0KPj4NCj4+ICAgICAgMTAuRG8gR1RUIHJlY292ZXJ5IGFuZCBWUkFNIHBh Z2UgdGFibGVzL2VudHJpZXMgcmVjb3ZlcnkgKG9wdGlvbmFsLA0KPj4gICAgICBkbyB3ZSBuZWVk IGl0ID8/PykNCj4+DQo+PiBZZXMsIHRoYXQgaXMgc3RpbGwgbmVlZGVkLiBBcyBOaWNvbGFpIGV4 cGxhaW5lZCB3ZSBjYW4ndCBiZSBzdXJlIHRoYXQNCj4+IFZSQU0gaXMgc3RpbGwgMTAwJSBjb3Jy ZWN0IGV2ZW4gd2hlbiBpdCBpc24ndCBjbGVhcmVkLg0KPj4NCj4+ICAgICAgMTEuUmUtc2NoZWR1 bGUgYWxsIEpPQnMgcmVtYWlucyBpbiBtaXJyb3IgbGlzdCB0byByaW5nIGFnYWluIGFuZA0KPj4g ICAgICByZXN0YXJ0IHNjaGVkdWxlciAoZm9yIFZSQU0gbG9zdCBjYXNlLCBubyBKT0Igd2lsbCBy ZS1zY2hlZHVsZWQpDQo+Pg0KPj4gT2theS4NCj4+DQo+PiAgICAgID9Gb3IgY3Nfd2FpdCgpIElP Q1RMOg0KPj4NCj4+ICAgICAgQWZ0ZXIgaXQgZm91bmQgZmVuY2Ugc2lnbmFsZWQsIGl0IHNob3Vs ZCBjaGVjayB3aXRoDQo+PiAgICAgICrigJxkbWFfZmVuY2VfZ2V0X3N0YXR1c+KAnSAqdG8gc2Vl IGlmIHRoZXJlIGlzIGVycm9yIHRoZXJlLA0KPj4NCj4+ICAgICAgQW5kIHJldHVybiB0aGUgZXJy b3Igc3RhdHVzIG9mIGZlbmNlDQo+Pg0KPj4gWWVzIGFuZCBubywgZG1hX2ZlbmNlX2dldF9zdGF0 dXMoKSBpcyBzb21lIHNwZWNpZmljIGhhbmRsaW5nIGZvcg0KPj4gc3luY19maWxlIGRlYnVnZ2lu ZyAobm8gaWRlYSB3aHkgdGhhdCBtYWRlIGl0IGludG8gdGhlIGNvbW1vbiBmZW5jZSBjb2RlKS4N Cj4+DQo+PiBJdCB3YXMgcmVwbGFjZWQgYnkgcHV0dGluZyB0aGUgZXJyb3IgY29kZSBkaXJlY3Rs eSBpbnRvIHRoZSBmZW5jZSwgc28NCj4+IGp1c3QgcmVhZGluZyB0aGF0IG9uZSBhZnRlciB3YWl0 aW5nIHNob3VsZCBiZSBvay4NCj4+DQo+PiBNYXliZSB3ZSBzaG91bGQgZml4IGRtYV9mZW5jZV9n ZXRfc3RhdHVzKCkgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciB0aGlzPw0KPj4NCj4+ICAgICAg P0ZvciBjc193YWl0X2ZlbmNlcygpIElPQ1RMOg0KPj4NCj4+ICAgICAgU2ltaWxhciB3aXRoIGFi b3ZlIGFwcHJvYWNoDQo+Pg0KPj4gICAgICA/Rm9yIGNzX3N1Ym1pdCgpIElPQ1RMOg0KPj4NCj4+ ICAgICAgSXQgbmVlZCB0byBjaGVjayBpZiBjdXJyZW50IGN0eCBiZWVuIG1hcmtlZCBhcyDigJwq Z3VpbHR5KuKAnSBhbmQgcmV0dXJuDQo+PiAgICAgIOKAnCpFQ0FOQ0VMRUQq4oCdIGlmIHNvDQo+ Pg0KPj4gICAgICA/SW50cm9kdWNlIGEgbmV3IElPQ1RMIHRvIGxldCBVTUQgcXVlcnkgKnZyYW1f bG9zdF9jb3VudGVyKjoNCj4+DQo+PiAgICAgIFRoaXMgd2F5LCBVTUQgY2FuIGFsc28gYmxvY2sg YXBwIGZyb20gc3VibWl0dGluZywgbGlrZSBATmljb2xhaQ0KPj4gICAgICBtZW50aW9uZWQsIHdl IGNhbiBjYWNoZSBvbmUgY29weSBvZiAqdnJhbV9sb3N0X2NvdW50ZXIqIHdoZW4NCj4+ICAgICAg ZW51bWVyYXRlIHBoeXNpY2FsIGRldmljZSwgYW5kIGRlbnkgYWxsDQo+Pg0KPj4gICAgICBnbC1j b250ZXh0IGZyb20gc3VibWl0dGluZyBpZiB0aGUgY291bnRlciBxdWVyaWVkIGJpZ2dlciB0aGFu IHRoYXQNCj4+ICAgICAgb25lIGNhY2hlZCBpbiBwaHlzaWNhbCBkZXZpY2UuIChsb29rcyBhIGxp dHRsZSBvdmVya2lsbCB0byBtZSwgYnV0DQo+PiAgICAgIGVhc3kgdG8gaW1wbGVtZW50ICkNCj4+ DQo+PiAgICAgIFVNRCBjYW4gYWxzbyByZXR1cm4gZXJyb3IgdG8gQVBQIHdoZW4gY3JlYXRpbmcg Z2wtY29udGV4dCBpZiBmb3VuZA0KPj4gICAgICBjdXJyZW50IHF1ZXJpZWQqdnJhbV9sb3N0X2Nv dW50ZXIgKmJpZ2dlciB0aGFuIHRoYXQgb25lIGNhY2hlZCBpbg0KPj4gICAgICBwaHlzaWNhbCBk ZXZpY2UuDQo+Pg0KPj4gT2theS4gQWxyZWFkeSBoYXZlIGEgcGF0Y2ggZm9yIHRoaXMsIHBsZWFz ZSByZXZpZXcgdGhhdCBvbmUgaWYgeW91DQo+PiBoYXZlbid0IGFscmVhZHkgZG9uZSBzby4NCj4+ DQo+PiBSZWdhcmRzLA0KPj4gQ2hyaXN0aWFuLg0KPj4NCj4+ICAgICAgQlRXOiBJIHJlYWxpemVk IHRoYXQgZ2wtY29udGV4dCBpcyBhIGxpdHRsZSBkaWZmZXJlbnQgd2l0aCBrZXJuZWzigJlzDQo+ PiAgICAgIGNvbnRleHQuIEJlY2F1c2UgZm9yIGtlcm5lbC4gQk8gaXMgbm90IHJlbGF0ZWQgd2l0 aCBjb250ZXh0IGJ1dCBvbmx5DQo+PiAgICAgIHdpdGggRkQsIHdoaWxlIGluIFVNRCwgQk8gaGF2 ZSBhIGJhY2tlbmQNCj4+DQo+PiAgICAgIGdsLWNvbnRleHQsIHNvIGJsb2NrIHN1Ym1pdHRpbmcg aW4gVU1EIGxheWVyIGlzIGFsc28gbmVlZGVkIGFsdGhvdWdoDQo+PiAgICAgIEtNRCB3aWxsIGRv IGl0cyBqb2IgYXMgYm90dG9tIGxpbmUNCj4+DQo+PiAgICAgID9CYXNpY2FsbHkg4oCcdnJhbV9s b3N0X2NvdW50ZXLigJ0gaXMgZXhwb3N1cmUgYnkga2VybmVsIHRvIGxldCBVTUQgdGFrZQ0KPj4g ICAgICB0aGUgY29udHJvbCBvZiByb2J1c3QgZXh0ZW5zaW9uIGZlYXR1cmUsIGl0IHdpbGwgYmUg VU1E4oCZcyBjYWxsIHRvDQo+PiAgICAgIG1vdmUsIEtNRCBvbmx5IGRlbnkg4oCcZ3VpbHR54oCd IGNvbnRleHQgZnJvbSBzdWJtaXR0aW5nDQo+Pg0KPj4gICAgICBOZWVkIHlvdXIgZmVlZGJhY2ss IHRoeA0KPj4NCj4+ICAgICAgV2XigJlkIGJldHRlciBtYWtlIFREUiBmZWF0dXJlIGxhbmRlZCBB U0FQDQo+Pg0KPj4gICAgICBCUiBNb25rDQo+Pg0KPiANCg0KX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9hbWQtZ2Z4Cg==