From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Koenig, Christian" Subject: Re: [PATCH 6/8] drm/amdgpu: allocate VM PDs/PTs on demand Date: Tue, 5 Feb 2019 16:00:46 +0000 Message-ID: <7bf939a3-cfe6-9559-8479-4c69368d369a@amd.com> References: <20190204124256.1765-1-christian.koenig@amd.com> <20190204124256.1765-6-christian.koenig@amd.com> <2feffc18-277e-b3b9-8991-2afae9558bdf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: <46799647617085499D9BF458819F4EE4-asWib9pRmPqcE4WynfumptQqCkab/8FMAL8bYrjMMd8@public.gmane.org> 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: "Kuehling, Felix" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" QWghIFRoZSBpbml0aWFsIGNsZWFyIG9mIHRoZSBQRHMgaXMgc3luY2luZyB0byBldmVyeXRoaW5n IQ0KDQpPaywgdGhhdCBpcyBlYXN5IHRvIGZpeC4NCg0KQ2hyaXN0aWFuLg0KDQpBbSAwNS4wMi4x OSB1bSAxNjo0OSBzY2hyaWViIEt1ZWhsaW5nLCBGZWxpeDoNCj4gSSBzYXcgYSBiYWNrdHJhY2Ug ZnJvbSB0aGUgR1BVIHNjaGVkdWxlciB3aGVuIEkgd2FzIGRlYnVnZ2luZyB0aGlzIHllc3RlcmRh eSwgYnV0IHRob3NlIGJhY2t0cmFjZXMgbmV2ZXIgdGVsbCB1cyB3aGVyZSB0aGUgY29tbWFuZCBz dWJtaXNzaW9uIGNhbWUgZnJvbS4gSXQgY291bGQgYmUgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBv ciBzb21lIG1pZ3JhdGlvbiBhdCBidWZmZXItdmFsaWRhdGlvbi4gQmFzaWNhbGx5LCBhbnkgY29t bWFuZCBzdWJtaXNzaW9uIHRyaWdnZXJlZCBieSBwYWdlIHRhYmxlIGFsbG9jYXRpb24gdGhhdCBz eW5jaHJvbml6ZXMgd2l0aCB0aGUgUEQgcmVzZXJ2YXRpb24gb2JqZWN0IGlzIGEgcHJvYmxlbS4N Cj4NCj4gUmVnYXJkcywNCj4gICAgRmVsaXgNCj4NCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gRnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2tvZW5pZy5sZWljaHR6dW1lcmtlbkBnbWFp bC5jb20+DQo+IFNlbnQ6IFR1ZXNkYXksIEZlYnJ1YXJ5IDA1LCAyMDE5IDEwOjQwIEFNDQo+IFRv OiBLdWVobGluZywgRmVsaXggPEZlbGl4Lkt1ZWhsaW5nQGFtZC5jb20+OyBLb2VuaWcsIENocmlz dGlhbiA8Q2hyaXN0aWFuLktvZW5pZ0BhbWQuY29tPjsgYW1kLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCA2LzhdIGRybS9hbWRncHU6IGFsbG9jYXRlIFZN IFBEcy9QVHMgb24gZGVtYW5kDQo+DQo+IEFtIDA1LjAyLjE5IHVtIDE2OjIwIHNjaHJpZWIgS3Vl aGxpbmcsIEZlbGl4Og0KPj4+PiBUaGlzIG1heSBjYXVzZSByZWdyZXNzaW9ucyBpbiBLRkQgaWYg UFQgQk8gYWxsb2NhdGlvbiBjYW4gdHJpZ2dlcg0KPj4+PiBldmljdGlvbiBmZW5jZXMuDQo+Pj4g SSBkb24ndCB0aGluayB0aGF0IGNhbiBoYXBwZW4sIGJ1dCBuZWVkIHRvIGRvdWJsZSBjaGVjayBh cyB3ZWxsLg0KPj4+DQo+Pj4gT3RoZXJ3aXNlIGFsbG9jYXRpbmcgcGFnZSB0YWJsZXMgY291bGQg dHJ5IHRvIGV2aWN0IG90aGVyIHBhZ2UgdGFibGVzIGZyb20gdGhlIHNhbWUgcHJvY2VzcyBhbmQg dGhhdCBzZXJpb3VzbHkgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UuDQo+PiBFdmljdGlvbiBmZW5j ZXMgZG9uJ3QgY2F1c2UgYWN0dWFsIG1lbW9yeSBldmljdGlvbnMuIFRoZXkgYXJlIHRoZSByZXN1 bHQgb2YgbWVtb3J5IGV2aWN0aW9ucy4gVGhleSBjYXVzZSBLRkQgcHJvY2Vzc2VzIHRvIGJlIHBy ZWVtcHRlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgZmVuY2UgdG8gc2lnbmFsIHNvIG1lbW9yeSBj YW4gYmUgZXZpY3RlZC4gVGhlIHByb2JsZW0gaXMgdGhhdCBhIHBhZ2UgdGFibGUgYWxsb2NhdGlv biB3YWl0cyBmb3IgdGhlIGZlbmNlcyBvbiB0aGUgUEQgcmVzZXJ2YXRpb24sIHdoaWNoIGxvb2tz IGxpa2UgYW4gZXZpY3Rpb24gdG8gS0ZEIGFuZCB0cmlnZ2VycyBhbiB1bm5lY2Vzc2FyeSBwcmVl bXB0aW9uLiBUaGVyZSBpcyBubyBhY3R1YWwgbWVtb3J5IGV2aWN0aW9uIGhhcHBlbmluZyBoZXJl Lg0KPiBZZWFoLCBidXQgd2hlcmUgaXMgdGhhdCBhY3R1YWxseSBjb21pbmcgZnJvbT8NCj4NCj4g SXQgc291bmRzIGxpa2Ugd2Ugc3RpbGwgdW5uZWNlc3Nhcnkgc3luY2hyb25pemUgcGFnZSB0YWJs ZSB1cGRhdGVzIHNvbWV3aGVyZS4NCj4NCj4gRG8geW91IGhhdmUgYSBjYWxsIGNoYWluPw0KPg0K PiBSZWdhcmRzLA0KPiBDaHJpc3RpYW4uDQo+DQo+PiBSZWdhcmRzLA0KPj4gICAgIEZlbGl4DQo+ Pg0KPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+IEZyb206IENocmlzdGlhbiBLw7Zu aWcgPGNrb2VuaWcubGVpY2h0enVtZXJrZW5AZ21haWwuY29tPg0KPj4gU2VudDogVHVlc2RheSwg RmVicnVhcnkgMDUsIDIwMTkgNjozNyBBTQ0KPj4gVG86IEt1ZWhsaW5nLCBGZWxpeCA8RmVsaXgu S3VlaGxpbmdAYW1kLmNvbT47DQo+PiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPj4g U3ViamVjdDogUmU6IFtQQVRDSCA2LzhdIGRybS9hbWRncHU6IGFsbG9jYXRlIFZNIFBEcy9QVHMg b24gZGVtYW5kDQo+Pg0KPj4+IFRoaXMgbWF5IGNhdXNlIHJlZ3Jlc3Npb25zIGluIEtGRCBpZiBQ VCBCTyBhbGxvY2F0aW9uIGNhbiB0cmlnZ2VyDQo+Pj4gZXZpY3Rpb24gZmVuY2VzLg0KPj4gSSBk b24ndCB0aGluayB0aGF0IGNhbiBoYXBwZW4sIGJ1dCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhcyB3 ZWxsLg0KPj4NCj4+IE90aGVyd2lzZSBhbGxvY2F0aW5nIHBhZ2UgdGFibGVzIGNvdWxkIHRyeSB0 byBldmljdCBvdGhlciBwYWdlIHRhYmxlcyBmcm9tIHRoZSBzYW1lIHByb2Nlc3MgYW5kIHRoYXQg c2VyaW91c2x5IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLg0KPj4NCj4+PiBEbyB5b3Uga25vdyB3 aGV0aGVyIFBUIEJPIGFsbG9jYXRpb24gd291bGQgd2FpdCBvbiB0aGUgcGFnZS1kaXJlY3RvcnkN Cj4+PiByZXNlcnZhdGlvbiBvYmplY3Qgd2l0aG91dCB0aGUgc3luYy1vYmplY3QgQVBJIGFueXdo ZXJlPw0KPj4gRm9yIGluc2lkZSB0aGUga2VybmVsIEkgY2FuJ3QgdGhpbmsgb2YgYW55IHJlbGV2 YW50IHVzZSBjYXNlLCBleGNlcHQgZm9yIHRoZSBldmljdGlvbiBjYWxsIHBhdGggYW5kIHRoZXJl IGl0IGlzIGludGVudGlvbmFsLg0KPj4NCj4+IE9uZSB0aGluZyB3aGljaCB3aWxsIGFsd2F5cyB3 YWl0IGZvciBhbGwgZmVuY2VzIGlzIHRoZSBkaXNwbGF5IGNvZGUgcGF0aCwgYnV0IHRoYXQgaXMg bm90IHJlbGV2YW50IGhlcmUuIChJc24ndCBpdD8pLg0KPj4NCj4+IFdoYXQgbWlnaHQgYmUgcXVl c3Rpb25hYmxlIGlzIGFtZGdwdV9nZW1fd2FpdF9pZGxlX2lvY3RsKCksIGJ1dCBJIHRoaW5rIHRo aXMgaXMgYWxzbyBjb21wbGV0ZWx5IGludGVudGlvbmFsIHRoYXQgd2Ugd2FpdCBvbiBldmVyeXRo aW5nIGhlcmUuDQo+Pg0KPj4gUmVnYXJkcywNCj4+IENocmlzdGlhbi4NCj4+DQo+PiBBbSAwNC4w Mi4xOSB1bSAyMToxNyBzY2hyaWViIEt1ZWhsaW5nLCBGZWxpeDoNCj4+PiBUaGlzIG1heSBjYXVz ZSByZWdyZXNzaW9ucyBpbiBLRkQgaWYgUFQgQk8gYWxsb2NhdGlvbiBjYW4gdHJpZ2dlcg0KPj4+ IGV2aWN0aW9uIGZlbmNlcy4gVGhlIHByZXZpb3VzIGNhbGwgdG8gYW1kZ3B1X3ZtX2FsbG9jX3B0 cyB3YXMgaW4gYQ0KPj4+IGNvbnRleHQgd2hlcmUgd2UgaGFkIHRlbXBvcmFyaWx5IHJlbW92ZWQg dGhlIGV2aWN0aW9uIGZlbmNlLiBQVCBCTw0KPj4+IGFsbG9jYXRpb24gaW4gYW1kZ3B1X3ZtX2Jv X3VwZGF0ZSBpcyBub3QgcHJvdGVjdGVkIGxpa2UgdGhhdC4NCj4+Pg0KPj4+IEkgdmFndWVseSBy ZW1lbWJlciBsb29raW5nIGludG8gdGhpcyBsYXN0IHRpbWUgeW91IHdlcmUgd29ya2luZyBvbg0K Pj4+IG91ciBldmljdGlvbiBmZW5jZSBjb2RlIGFuZCB0aGlua2luZyB0aGF0IG1vc3Qgb2YgdGhl IGNhc2VzIHdoZXJlIHdlDQo+Pj4gcmVtb3ZlIHRoZSBldmljdGlvbiBmZW5jZSB3ZXJlIG5vIGxv bmdlciBuZWVkZWQgaWYgZmVuY2UNCj4+PiBzeW5jaHJvbml6YXRpb24gaGFwcGVucyB0aHJvdWdo IHRoZSBhbWRncHVfc3luYy1vYmplY3QgQVBJIChyYXRoZXINCj4+PiB0aGFuIHdhaXRpbmcgb24g YSByZXNlcnZhdGlvbiBvYmplY3QgZGlyZWN0bHkpLiBJIHRoaW5rIGl0J3MgdGltZSBJDQo+Pj4g Z28gYW5kIGZpbmFsbHkgY2xlYW4gdGhhdCB1cC4NCj4+Pg0KPj4+IERvIHlvdSBrbm93IHdoZXRo ZXIgUFQgQk8gYWxsb2NhdGlvbiB3b3VsZCB3YWl0IG9uIHRoZSBwYWdlLWRpcmVjdG9yeQ0KPj4+ IHJlc2VydmF0aW9uIG9iamVjdCB3aXRob3V0IHRoZSBzeW5jLW9iamVjdCBBUEkgYW55d2hlcmU/ DQo+Pj4NCj4+PiBSZWdhcmRzLA0KPj4+ICAgICDCoCBGZWxpeA0KPj4+DQo+Pj4gT24gMjAxOS0w Mi0wNCA3OjQyIGEubS4sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6DQo+Pj4+IExldCdzIHN0YXJ0 IHRvIGFsbG9jYXRlIFZNIFBEcy9QVHMgb24gZGVtYW5kIGluc3RlYWQgb2YNCj4+Pj4gcHJlLWFs bG9jYXRpbmcgdGhlbSBkdXJpbmcgbWFwcGluZy4NCj4+Pj4NCj4+Pj4gU2lnbmVkLW9mZi1ieTog Q2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPg0KPj4+PiAtLS0NCj4+ Pj4gICAgICAuLi4vZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyAgfCAg IDYgLQ0KPj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jc2EuYyAg ICAgICB8ICAgOSAtLQ0KPj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9nZW0uYyAgICAgICB8ICAxMCAtLQ0KPj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV92bS5jICAgICAgICB8IDEzNiArKysrKy0tLS0tLS0tLS0tLS0NCj4+Pj4gICAg ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaCAgICAgICAgfCAgIDMgLQ0K Pj4+PiAgICAgIDUgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgMTI2IGRlbGV0aW9u cygtKQ0KPj4+Pg0KPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2FtZGtmZF9ncHV2bS5jDQo+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2FtZGtmZF9ncHV2bS5jDQo+Pj4+IGluZGV4IGQ3YjEwZDc5ZjFkZS4uMjE3NmM5MmY5 Mzc3IDEwMDY0NA0KPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkX2dwdXZtLmMNCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2FtZGtmZF9ncHV2bS5jDQo+Pj4+IEBAIC00OTIsMTIgKzQ5Miw2IEBAIHN0YXRpYyBpbnQg YWRkX2JvX3RvX3ZtKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3Qga2dkX21lbSAq bWVtLA0KPj4+PiAgICAgIAkJCQkJdm0tPnByb2Nlc3NfaW5mby0+ZXZpY3Rpb25fZmVuY2UsDQo+ Pj4+ICAgICAgCQkJCQlOVUxMLCBOVUxMKTsNCj4+Pj4gICAgICANCj4+Pj4gLQlyZXQgPSBhbWRn cHVfdm1fYWxsb2NfcHRzKGFkZXYsIHZtLCB2YSwgYW1kZ3B1X2JvX3NpemUoYm8pKTsNCj4+Pj4g LQlpZiAocmV0KSB7DQo+Pj4+IC0JCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIHB0cywgZXJy PSVkXG4iLCByZXQpOw0KPj4+PiAtCQlnb3RvIGVycl9hbGxvY19wdHM7DQo+Pj4+IC0JfQ0KPj4+ PiAtDQo+Pj4+ICAgICAgCXJldCA9IHZtX3ZhbGlkYXRlX3B0X3BkX2Jvcyh2bSk7DQo+Pj4+ICAg ICAgCWlmIChyZXQpIHsNCj4+Pj4gICAgICAJCXByX2VycigidmFsaWRhdGVfcHRfcGRfYm9zKCkg ZmFpbGVkXG4iKTsgZGlmZiAtLWdpdA0KPj4+PiBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9jc2EuYw0KPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9j c2EuYw0KPj4+PiBpbmRleCA3ZTIyYmU3Y2E2OGEuLjU0ZGQwMmE4OThiOSAxMDA2NDQNCj4+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzYS5jDQo+Pj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jc2EuYw0KPj4+PiBAQCAtOTIsMTUg KzkyLDYgQEAgaW50IGFtZGdwdV9tYXBfc3RhdGljX2NzYShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwgc3RydWN0IGFtZGdwdV92bSAqdm0sDQo+Pj4+ICAgICAgCQlyZXR1cm4gLUVOT01FTTsN Cj4+Pj4gICAgICAJfQ0KPj4+PiAgICAgIA0KPj4+PiAtCXIgPSBhbWRncHVfdm1fYWxsb2NfcHRz KGFkZXYsICgqYm9fdmEpLT5iYXNlLnZtLCBjc2FfYWRkciwNCj4+Pj4gLQkJCQlzaXplKTsNCj4+ Pj4gLQlpZiAocikgew0KPj4+PiAtCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBwdHMg Zm9yIHN0YXRpYyBDU0EsIGVycj0lZFxuIiwgcik7DQo+Pj4+IC0JCWFtZGdwdV92bV9ib19ybXYo YWRldiwgKmJvX3ZhKTsNCj4+Pj4gLQkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnRpY2tl dCwgJmxpc3QpOw0KPj4+PiAtCQlyZXR1cm4gcjsNCj4+Pj4gLQl9DQo+Pj4+IC0NCj4+Pj4gICAg ICAJciA9IGFtZGdwdV92bV9ib19tYXAoYWRldiwgKmJvX3ZhLCBjc2FfYWRkciwgMCwgc2l6ZSwN Cj4+Pj4gICAgICAJCQkgICAgIEFNREdQVV9QVEVfUkVBREFCTEUgfCBBTURHUFVfUFRFX1dSSVRF QUJMRSB8DQo+Pj4+ICAgICAgCQkJICAgICBBTURHUFVfUFRFX0VYRUNVVEFCTEUpOw0KPj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jDQo+Pj4+ IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jDQo+Pj4+IGluZGV4IGQy MWRkMmYzNjlkYS4uZTE0MWUzYjEzMTEyIDEwMDY0NA0KPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMNCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2dlbS5jDQo+Pj4+IEBAIC02MjcsMTEgKzYyNyw2IEBAIGludCBhbWRn cHVfZ2VtX3ZhX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+Pj4+IHZvaWQgKmRhdGEs DQo+Pj4+ICAgICAgDQo+Pj4+ICAgICAgCXN3aXRjaCAoYXJncy0+b3BlcmF0aW9uKSB7DQo+Pj4+ ICAgICAgCWNhc2UgQU1ER1BVX1ZBX09QX01BUDoNCj4+Pj4gLQkJciA9IGFtZGdwdV92bV9hbGxv Y19wdHMoYWRldiwgYm9fdmEtPmJhc2Uudm0sIGFyZ3MtPnZhX2FkZHJlc3MsDQo+Pj4+IC0JCQkJ CWFyZ3MtPm1hcF9zaXplKTsNCj4+Pj4gLQkJaWYgKHIpDQo+Pj4+IC0JCQlnb3RvIGVycm9yX2Jh Y2tvZmY7DQo+Pj4+IC0NCj4+Pj4gICAgICAJCXZhX2ZsYWdzID0gYW1kZ3B1X2dtY19nZXRfcHRl X2ZsYWdzKGFkZXYsIGFyZ3MtPmZsYWdzKTsNCj4+Pj4gICAgICAJCXIgPSBhbWRncHVfdm1fYm9f bWFwKGFkZXYsIGJvX3ZhLCBhcmdzLT52YV9hZGRyZXNzLA0KPj4+PiAgICAgIAkJCQkgICAgIGFy Z3MtPm9mZnNldF9pbl9ibywgYXJncy0+bWFwX3NpemUsIEBAIC02NDcsMTEgKzY0Miw2DQo+Pj4+ IEBAIGludCBhbWRncHVfZ2VtX3ZhX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsDQo+Pj4+ICAgICAgCQkJCQkJYXJncy0+bWFwX3NpemUpOw0KPj4+PiAgICAgIAkJYnJl YWs7DQo+Pj4+ICAgICAgCWNhc2UgQU1ER1BVX1ZBX09QX1JFUExBQ0U6DQo+Pj4+IC0JCXIgPSBh bWRncHVfdm1fYWxsb2NfcHRzKGFkZXYsIGJvX3ZhLT5iYXNlLnZtLCBhcmdzLT52YV9hZGRyZXNz LA0KPj4+PiAtCQkJCQlhcmdzLT5tYXBfc2l6ZSk7DQo+Pj4+IC0JCWlmIChyKQ0KPj4+PiAtCQkJ Z290byBlcnJvcl9iYWNrb2ZmOw0KPj4+PiAtDQo+Pj4+ICAgICAgCQl2YV9mbGFncyA9IGFtZGdw dV9nbWNfZ2V0X3B0ZV9mbGFncyhhZGV2LCBhcmdzLT5mbGFncyk7DQo+Pj4+ICAgICAgCQlyID0g YW1kZ3B1X3ZtX2JvX3JlcGxhY2VfbWFwKGFkZXYsIGJvX3ZhLCBhcmdzLT52YV9hZGRyZXNzLA0K Pj4+PiAgICAgIAkJCQkJICAgICBhcmdzLT5vZmZzZXRfaW5fYm8sIGFyZ3MtPm1hcF9zaXplLCBk aWZmIC0tZ2l0DQo+Pj4+IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMN Cj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYw0KPj4+PiBpbmRl eCBmN2Q0MTBhNWQ4NDguLjBiOGExYWE1NmM0YSAxMDA2NDQNCj4+Pj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMNCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMNCj4+Pj4gQEAgLTUwNCw0NyArNTA0LDYgQEAgc3RhdGlj IHZvaWQgYW1kZ3B1X3ZtX3B0X25leHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+Pj4+ ICAgICAgCX0NCj4+Pj4gICAgICB9DQo+Pj4+ICAgICAgDQo+Pj4+IC0vKioNCj4+Pj4gLSAqIGFt ZGdwdV92bV9wdF9maXJzdF9sZWFmIC0gZ2V0IGZpcnN0IGxlYWYgUEQvUFQNCj4+Pj4gLSAqDQo+ Pj4+IC0gKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyDQo+Pj4+IC0gKiBAdm06IGFtZGdw dV92bSBzdHJ1Y3R1cmUNCj4+Pj4gLSAqIEBzdGFydDogc3RhcnQgYWRkciBvZiB0aGUgd2Fsaw0K Pj4+PiAtICogQGN1cnNvcjogc3RhdGUgdG8gaW5pdGlhbGl6ZQ0KPj4+PiAtICoNCj4+Pj4gLSAq IFN0YXJ0IGEgd2FsayBhbmQgZ28gZGlyZWN0bHkgdG8gdGhlIGxlYWYgbm9kZS4NCj4+Pj4gLSAq Lw0KPj4+PiAtc3RhdGljIHZvaWQgYW1kZ3B1X3ZtX3B0X2ZpcnN0X2xlYWYoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsDQo+Pj4+IC0JCQkJICAgIHN0cnVjdCBhbWRncHVfdm0gKnZtLCB1aW50 NjRfdCBzdGFydCwNCj4+Pj4gLQkJCQkgICAgc3RydWN0IGFtZGdwdV92bV9wdF9jdXJzb3IgKmN1 cnNvcikNCj4+Pj4gLXsNCj4+Pj4gLQlhbWRncHVfdm1fcHRfc3RhcnQoYWRldiwgdm0sIHN0YXJ0 LCBjdXJzb3IpOw0KPj4+PiAtCXdoaWxlIChhbWRncHVfdm1fcHRfZGVzY2VuZGFudChhZGV2LCBj dXJzb3IpKTsNCj4+Pj4gLX0NCj4+Pj4gLQ0KPj4+PiAtLyoqDQo+Pj4+IC0gKiBhbWRncHVfdm1f cHRfbmV4dF9sZWFmIC0gZ2V0IG5leHQgbGVhZiBQRC9QVA0KPj4+PiAtICoNCj4+Pj4gLSAqIEBh ZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXINCj4+Pj4gLSAqIEBjdXJzb3I6IGN1cnJlbnQgc3Rh dGUNCj4+Pj4gLSAqDQo+Pj4+IC0gKiBXYWxrIHRoZSBQRC9QVCB0cmVlIHRvIHRoZSBuZXh0IGxl YWYgbm9kZS4NCj4+Pj4gLSAqLw0KPj4+PiAtc3RhdGljIHZvaWQgYW1kZ3B1X3ZtX3B0X25leHRf bGVhZihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwNCj4+Pj4gLQkJCQkgICBzdHJ1Y3QgYW1k Z3B1X3ZtX3B0X2N1cnNvciAqY3Vyc29yKQ0KPj4+PiAtew0KPj4+PiAtCWFtZGdwdV92bV9wdF9u ZXh0KGFkZXYsIGN1cnNvcik7DQo+Pj4+IC0JaWYgKGN1cnNvci0+cGZuICE9IH4wbGwpDQo+Pj4+ IC0JCXdoaWxlIChhbWRncHVfdm1fcHRfZGVzY2VuZGFudChhZGV2LCBjdXJzb3IpKTsNCj4+Pj4g LX0NCj4+Pj4gLQ0KPj4+PiAtLyoqDQo+Pj4+IC0gKiBmb3JfZWFjaF9hbWRncHVfdm1fcHRfbGVh ZiAtIHdhbGsgb3ZlciBhbGwgbGVhZiBQRHMvUFRzIGluIHRoZQ0KPj4+PiBoaWVyYXJjaHkNCj4+ Pj4gLSAqLw0KPj4+PiAtI2RlZmluZSBmb3JfZWFjaF9hbWRncHVfdm1fcHRfbGVhZihhZGV2LCB2 bSwgc3RhcnQsIGVuZCwgY3Vyc29yKQkJXA0KPj4+PiAtCWZvciAoYW1kZ3B1X3ZtX3B0X2ZpcnN0 X2xlYWYoKGFkZXYpLCAodm0pLCAoc3RhcnQpLCAmKGN1cnNvcikpOwkJXA0KPj4+PiAtCSAgICAg KGN1cnNvcikucGZuIDw9IGVuZDsgYW1kZ3B1X3ZtX3B0X25leHRfbGVhZigoYWRldiksICYoY3Vy c29yKSkpDQo+Pj4+IC0NCj4+Pj4gICAgICAvKioNCj4+Pj4gICAgICAgKiBhbWRncHVfdm1fcHRf Zmlyc3RfZGZzIC0gc3RhcnQgYSBkZWVwIGZpcnN0IHNlYXJjaA0KPj4+PiAgICAgICAqDQo+Pj4+ IEBAIC05MTksNzQgKzg3OCw1MSBAQCBzdGF0aWMgdm9pZCBhbWRncHVfdm1fYm9fcGFyYW0oc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZtLA0KPj4+PiAgICAg ICAqIFJldHVybnM6DQo+Pj4+ICAgICAgICogMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2Uu DQo+Pj4+ICAgICAgICovDQo+Pj4+IC1pbnQgYW1kZ3B1X3ZtX2FsbG9jX3B0cyhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwNCj4+Pj4gLQkJCXN0cnVjdCBhbWRncHVfdm0gKnZtLA0KPj4+PiAt CQkJdWludDY0X3Qgc2FkZHIsIHVpbnQ2NF90IHNpemUpDQo+Pj4+ICtzdGF0aWMgaW50IGFtZGdw dV92bV9hbGxvY19wdHMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+Pj4+ICsJCQkgICAg ICAgc3RydWN0IGFtZGdwdV92bSAqdm0sDQo+Pj4+ICsJCQkgICAgICAgc3RydWN0IGFtZGdwdV92 bV9wdF9jdXJzb3IgKmN1cnNvcikNCj4+Pj4gICAgICB7DQo+Pj4+IC0Jc3RydWN0IGFtZGdwdV92 bV9wdF9jdXJzb3IgY3Vyc29yOw0KPj4+PiArCXN0cnVjdCBhbWRncHVfdm1fcHQgKmVudHJ5ID0g Y3Vyc29yLT5lbnRyeTsNCj4+Pj4gKwlzdHJ1Y3QgYW1kZ3B1X2JvX3BhcmFtIGJwOw0KPj4+PiAg ICAgIAlzdHJ1Y3QgYW1kZ3B1X2JvICpwdDsNCj4+Pj4gLQl1aW50NjRfdCBlYWRkcjsNCj4+Pj4g ICAgICAJaW50IHI7DQo+Pj4+ICAgICAgDQo+Pj4+IC0JLyogdmFsaWRhdGUgdGhlIHBhcmFtZXRl cnMgKi8NCj4+Pj4gLQlpZiAoc2FkZHIgJiBBTURHUFVfR1BVX1BBR0VfTUFTSyB8fCBzaXplICYg QU1ER1BVX0dQVV9QQUdFX01BU0spDQo+Pj4+IC0JCXJldHVybiAtRUlOVkFMOw0KPj4+PiArCWlm IChjdXJzb3ItPmxldmVsIDwgQU1ER1BVX1ZNX1BUQiAmJiAhZW50cnktPmVudHJpZXMpIHsNCj4+ Pj4gKwkJdW5zaWduZWQgbnVtX2VudHJpZXM7DQo+Pj4+ICAgICAgDQo+Pj4+IC0JZWFkZHIgPSBz YWRkciArIHNpemUgLSAxOw0KPj4+PiAtDQo+Pj4+IC0Jc2FkZHIgLz0gQU1ER1BVX0dQVV9QQUdF X1NJWkU7DQo+Pj4+IC0JZWFkZHIgLz0gQU1ER1BVX0dQVV9QQUdFX1NJWkU7DQo+Pj4+IC0NCj4+ Pj4gLQlpZiAoZWFkZHIgPj0gYWRldi0+dm1fbWFuYWdlci5tYXhfcGZuKSB7DQo+Pj4+IC0JCWRl dl9lcnIoYWRldi0+ZGV2LCAidmEgYWJvdmUgbGltaXQgKDB4JTA4bGxYID49IDB4JTA4bGxYKVxu IiwNCj4+Pj4gLQkJCWVhZGRyLCBhZGV2LT52bV9tYW5hZ2VyLm1heF9wZm4pOw0KPj4+PiAtCQly ZXR1cm4gLUVJTlZBTDsNCj4+Pj4gKwkJbnVtX2VudHJpZXMgPSBhbWRncHVfdm1fbnVtX2VudHJp ZXMoYWRldiwgY3Vyc29yLT5sZXZlbCk7DQo+Pj4+ICsJCWVudHJ5LT5lbnRyaWVzID0ga3ZtYWxs b2NfYXJyYXkobnVtX2VudHJpZXMsDQo+Pj4+ICsJCQkJCQlzaXplb2YoKmVudHJ5LT5lbnRyaWVz KSwNCj4+Pj4gKwkJCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsNCj4+Pj4gKwkJaWYgKCFl bnRyeS0+ZW50cmllcykNCj4+Pj4gKwkJCXJldHVybiAtRU5PTUVNOw0KPj4+PiAgICAgIAl9DQo+ Pj4+ICAgICAgDQo+Pj4+IC0JZm9yX2VhY2hfYW1kZ3B1X3ZtX3B0X2xlYWYoYWRldiwgdm0sIHNh ZGRyLCBlYWRkciwgY3Vyc29yKSB7DQo+Pj4+IC0JCXN0cnVjdCBhbWRncHVfdm1fcHQgKmVudHJ5 ID0gY3Vyc29yLmVudHJ5Ow0KPj4+PiAtCQlzdHJ1Y3QgYW1kZ3B1X2JvX3BhcmFtIGJwOw0KPj4+ PiAtDQo+Pj4+IC0JCWlmIChjdXJzb3IubGV2ZWwgPCBBTURHUFVfVk1fUFRCKSB7DQo+Pj4+IC0J CQl1bnNpZ25lZCBudW1fZW50cmllczsNCj4+Pj4gLQ0KPj4+PiAtCQkJbnVtX2VudHJpZXMgPSBh bWRncHVfdm1fbnVtX2VudHJpZXMoYWRldiwgY3Vyc29yLmxldmVsKTsNCj4+Pj4gLQkJCWVudHJ5 LT5lbnRyaWVzID0ga3ZtYWxsb2NfYXJyYXkobnVtX2VudHJpZXMsDQo+Pj4+IC0JCQkJCQkJc2l6 ZW9mKCplbnRyeS0+ZW50cmllcyksDQo+Pj4+IC0JCQkJCQkJR0ZQX0tFUk5FTCB8DQo+Pj4+IC0J CQkJCQkJX19HRlBfWkVSTyk7DQo+Pj4+IC0JCQlpZiAoIWVudHJ5LT5lbnRyaWVzKQ0KPj4+PiAt CQkJCXJldHVybiAtRU5PTUVNOw0KPj4+PiAtCQl9DQo+Pj4+IC0NCj4+Pj4gLQ0KPj4+PiAtCQlp ZiAoZW50cnktPmJhc2UuYm8pDQo+Pj4+IC0JCQljb250aW51ZTsNCj4+Pj4gLQ0KPj4+PiAtCQlh bWRncHVfdm1fYm9fcGFyYW0oYWRldiwgdm0sIGN1cnNvci5sZXZlbCwgJmJwKTsNCj4+Pj4gLQ0K Pj4+PiAtCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LCAmYnAsICZwdCk7DQo+Pj4+IC0JCWlm IChyKQ0KPj4+PiAtCQkJcmV0dXJuIHI7DQo+Pj4+IC0NCj4+Pj4gLQkJaWYgKHZtLT51c2VfY3B1 X2Zvcl91cGRhdGUpIHsNCj4+Pj4gLQkJCXIgPSBhbWRncHVfYm9fa21hcChwdCwgTlVMTCk7DQo+ Pj4+IC0JCQlpZiAocikNCj4+Pj4gLQkJCQlnb3RvIGVycm9yX2ZyZWVfcHQ7DQo+Pj4+IC0JCX0N Cj4+Pj4gKwlpZiAoZW50cnktPmJhc2UuYm8pDQo+Pj4+ICsJCXJldHVybiAwOw0KPj4+PiAgICAg IA0KPj4+PiAtCQkvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byBh dm9pZA0KPj4+PiAtCQkqIGZyZWVpbmcgdGhlbSB1cCBpbiB0aGUgd3Jvbmcgb3JkZXIuDQo+Pj4+ IC0JCSovDQo+Pj4+IC0JCXB0LT5wYXJlbnQgPSBhbWRncHVfYm9fcmVmKGN1cnNvci5wYXJlbnQt PmJhc2UuYm8pOw0KPj4+PiArCWFtZGdwdV92bV9ib19wYXJhbShhZGV2LCB2bSwgY3Vyc29yLT5s ZXZlbCwgJmJwKTsNCj4+Pj4gICAgICANCj4+Pj4gLQkJYW1kZ3B1X3ZtX2JvX2Jhc2VfaW5pdCgm ZW50cnktPmJhc2UsIHZtLCBwdCk7DQo+Pj4+ICsJciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwg JmJwLCAmcHQpOw0KPj4+PiArCWlmIChyKQ0KPj4+PiArCQlyZXR1cm4gcjsNCj4+Pj4gICAgICAN Cj4+Pj4gLQkJciA9IGFtZGdwdV92bV9jbGVhcl9ibyhhZGV2LCB2bSwgcHQpOw0KPj4+PiArCWlm ICh2bS0+dXNlX2NwdV9mb3JfdXBkYXRlKSB7DQo+Pj4+ICsJCXIgPSBhbWRncHVfYm9fa21hcChw dCwgTlVMTCk7DQo+Pj4+ICAgICAgCQlpZiAocikNCj4+Pj4gICAgICAJCQlnb3RvIGVycm9yX2Zy ZWVfcHQ7DQo+Pj4+ICAgICAgCX0NCj4+Pj4gICAgICANCj4+Pj4gKwkvKiBLZWVwIGEgcmVmZXJl bmNlIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byBhdm9pZA0KPj4+PiArCSAqIGZyZWVpbmcgdGhl bSB1cCBpbiB0aGUgd3Jvbmcgb3JkZXIuDQo+Pj4+ICsJICovDQo+Pj4+ICsJcHQtPnBhcmVudCA9 IGFtZGdwdV9ib19yZWYoY3Vyc29yLT5wYXJlbnQtPmJhc2UuYm8pOw0KPj4+PiArCWFtZGdwdV92 bV9ib19iYXNlX2luaXQoJmVudHJ5LT5iYXNlLCB2bSwgcHQpOw0KPj4+PiArDQo+Pj4+ICsJciA9 IGFtZGdwdV92bV9jbGVhcl9ibyhhZGV2LCB2bSwgcHQpOw0KPj4+PiArCWlmIChyKQ0KPj4+PiAr CQlnb3RvIGVycm9yX2ZyZWVfcHQ7DQo+Pj4+ICsNCj4+Pj4gICAgICAJcmV0dXJuIDA7DQo+Pj4+ ICAgICAgDQo+Pj4+ICAgICAgZXJyb3JfZnJlZV9wdDoNCj4+Pj4gQEAgLTE2NTUsNiArMTU5MSw3 IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9wdGVzKHN0cnVjdCBhbWRncHVfcHRlX3Vw ZGF0ZV9wYXJhbXMgKnBhcmFtcywNCj4+Pj4gICAgICAJc3RydWN0IGFtZGdwdV92bV9wdF9jdXJz b3IgY3Vyc29yOw0KPj4+PiAgICAgIAl1aW50NjRfdCBmcmFnX3N0YXJ0ID0gc3RhcnQsIGZyYWdf ZW5kOw0KPj4+PiAgICAgIAl1bnNpZ25lZCBpbnQgZnJhZzsNCj4+Pj4gKwlpbnQgcjsNCj4+Pj4g ICAgICANCj4+Pj4gICAgICAJLyogZmlndXJlIG91dCB0aGUgaW5pdGlhbCBmcmFnbWVudCAqLw0K Pj4+PiAgICAgIAlhbWRncHVfdm1fZnJhZ21lbnQocGFyYW1zLCBmcmFnX3N0YXJ0LCBlbmQsIGZs YWdzLCAmZnJhZywNCj4+Pj4gJmZyYWdfZW5kKTsgQEAgLTE2NjIsMTIgKzE1OTksMTUgQEAgc3Rh dGljIGludCBhbWRncHVfdm1fdXBkYXRlX3B0ZXMoc3RydWN0IGFtZGdwdV9wdGVfdXBkYXRlX3Bh cmFtcyAqcGFyYW1zLA0KPj4+PiAgICAgIAkvKiB3YWxrIG92ZXIgdGhlIGFkZHJlc3Mgc3BhY2Ug YW5kIHVwZGF0ZSB0aGUgUFRzICovDQo+Pj4+ICAgICAgCWFtZGdwdV92bV9wdF9zdGFydChhZGV2 LCBwYXJhbXMtPnZtLCBzdGFydCwgJmN1cnNvcik7DQo+Pj4+ICAgICAgCXdoaWxlIChjdXJzb3Iu cGZuIDwgZW5kKSB7DQo+Pj4+IC0JCXN0cnVjdCBhbWRncHVfYm8gKnB0ID0gY3Vyc29yLmVudHJ5 LT5iYXNlLmJvOw0KPj4+PiAgICAgIAkJdW5zaWduZWQgc2hpZnQsIHBhcmVudF9zaGlmdCwgbWFz azsNCj4+Pj4gICAgICAJCXVpbnQ2NF90IGluY3IsIGVudHJ5X2VuZCwgcGVfc3RhcnQ7DQo+Pj4+ ICsJCXN0cnVjdCBhbWRncHVfYm8gKnB0Ow0KPj4+PiAgICAgIA0KPj4+PiAtCQlpZiAoIXB0KQ0K Pj4+PiAtCQkJcmV0dXJuIC1FTk9FTlQ7DQo+Pj4+ICsJCXIgPSBhbWRncHVfdm1fYWxsb2NfcHRz KHBhcmFtcy0+YWRldiwgcGFyYW1zLT52bSwgJmN1cnNvcik7DQo+Pj4+ICsJCWlmIChyKQ0KPj4+ PiArCQkJcmV0dXJuIHI7DQo+Pj4+ICsNCj4+Pj4gKwkJcHQgPSBjdXJzb3IuZW50cnktPmJhc2Uu Ym87DQo+Pj4+ICAgICAgDQo+Pj4+ICAgICAgCQkvKiBUaGUgcm9vdCBsZXZlbCBjYW4ndCBiZSBh IGh1Z2UgcGFnZSAqLw0KPj4+PiAgICAgIAkJaWYgKGN1cnNvci5sZXZlbCA9PSBhZGV2LT52bV9t YW5hZ2VyLnJvb3RfbGV2ZWwpIHsgZGlmZiAtLWdpdA0KPj4+PiBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV92bS5oDQo+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3ZtLmgNCj4+Pj4gaW5kZXggODFmZjgxNzdmMDkyLi4xMTY2MDVjMDM4ZDIgMTAwNjQ0 DQo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oDQo+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oDQo+Pj4+IEBAIC0z MDMsOSArMzAzLDYgQEAgYm9vbCBhbWRncHVfdm1fcmVhZHkoc3RydWN0IGFtZGdwdV92bSAqdm0p Ow0KPj4+PiAgICAgIGludCBhbWRncHVfdm1fdmFsaWRhdGVfcHRfYm9zKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwNCj4+Pj4gICAgICAJCQkgICAgICBp bnQgKCpjYWxsYmFjaykodm9pZCAqcCwgc3RydWN0IGFtZGdwdV9ibyAqYm8pLA0KPj4+PiAgICAg IAkJCSAgICAgIHZvaWQgKnBhcmFtKTsNCj4+Pj4gLWludCBhbWRncHVfdm1fYWxsb2NfcHRzKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4+PiAtCQkJc3RydWN0IGFtZGdwdV92bSAqdm0s DQo+Pj4+IC0JCQl1aW50NjRfdCBzYWRkciwgdWludDY0X3Qgc2l6ZSk7DQo+Pj4+ICAgICAgaW50 IGFtZGdwdV92bV9mbHVzaChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHN0cnVjdCBhbWRncHVf am9iICpqb2IsIGJvb2wgbmVlZF9waXBlX3N5bmMpOw0KPj4+PiAgICAgIGludCBhbWRncHVfdm1f dXBkYXRlX2RpcmVjdG9yaWVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4+PiAgICAg IAkJCQkgc3RydWN0IGFtZGdwdV92bSAqdm0pOw0KPj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCj4+IGFtZC1nZnggbWFpbGluZyBsaXN0DQo+PiBhbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vYW1kLWdmeAo=