From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [RFC] [PATCH] mm, oom: Offload OOM notify callback to a kernel thread. Date: Mon, 2 Oct 2017 06:59:12 +0300 Message-ID: <20171002065801-mutt-send-email-mst@kernel.org> References: <201709111927.IDD00574.tFVJHLOSOOMQFF@I-love.SAKURA.ne.jp> <20170929065654-mutt-send-email-mst@kernel.org> <201709291344.FID60965.VHtMQFFJFSLOOO@I-love.SAKURA.ne.jp> <201710011444.IBD05725.VJSFHOOMOFtLQF@I-love.SAKURA.ne.jp> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7DE286E21B for ; Mon, 2 Oct 2017 03:59:21 +0000 (UTC) Content-Disposition: inline In-Reply-To: <201710011444.IBD05725.VJSFHOOMOFtLQF@I-love.SAKURA.ne.jp> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tetsuo Handa Cc: airlied@linux.ie, jasowang@redhat.com, jiangshanlai@gmail.com, josh@joshtriplett.org, virtualization@lists.linux-foundation.org, linux-mm@kvack.org, mathieu.desnoyers@efficios.com, rostedt@goodmis.org, rodrigo.vivi@intel.com, paulmck@linux.vnet.ibm.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gU3VuLCBPY3QgMDEsIDIwMTcgYXQgMDI6NDQ6MzRQTSArMDkwMCwgVGV0c3VvIEhhbmRhIHdy b3RlOgo+IFRldHN1byBIYW5kYSB3cm90ZToKPiA+IE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90ZToK PiA+ID4gT24gTW9uLCBTZXAgMTEsIDIwMTcgYXQgMDc6Mjc6MTlQTSArMDkwMCwgVGV0c3VvIEhh bmRhIHdyb3RlOgo+ID4gPiA+IEhlbGxvLgo+ID4gPiA+IAo+ID4gPiA+IEkgbm90aWNlZCB0aGF0 IHZpcnRpb19iYWxsb29uIGlzIHVzaW5nIHJlZ2lzdGVyX29vbV9ub3RpZmllcigpIGFuZAo+ID4g PiA+IGxlYWtfYmFsbG9vbigpIGZyb20gdmlydGJhbGxvb25fb29tX25vdGlmeSgpIG1pZ2h0IGRl cGVuZCBvbgo+ID4gPiA+IF9fR0ZQX0RJUkVDVF9SRUNMQUlNIG1lbW9yeSBhbGxvY2F0aW9uLgo+ ID4gPiA+IAo+ID4gPiA+IEluIGxlYWtfYmFsbG9vbigpLCBtdXRleF9sb2NrKCZ2Yi0+YmFsbG9v bl9sb2NrKSBpcyBjYWxsZWQgaW4gb3JkZXIgdG8KPiA+ID4gPiBzZXJpYWxpemUgYWdhaW5zdCBm aWxsX2JhbGxvb24oKS4gQnV0IGluIGZpbGxfYmFsbG9vbigpLAo+ID4gPiA+IGFsbG9jX3BhZ2Uo R0ZQX0hJR0hVU0VSW19NT1ZBQkxFXSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1JFVFJZ KSBpcwo+ID4gPiA+IGNhbGxlZCB3aXRoIHZiLT5iYWxsb29uX2xvY2sgbXV0ZXggaGVsZC4gU2lu Y2UgR0ZQX0hJR0hVU0VSW19NT1ZBQkxFXSBpbXBsaWVzCj4gPiA+ID4gX19HRlBfRElSRUNUX1JF Q0xBSU0gfCBfX0dGUF9JTyB8IF9fR0ZQX0ZTLCB0aGlzIGFsbG9jYXRpb24gYXR0ZW1wdCBtaWdo dAo+ID4gPiA+IGRlcGVuZCBvbiBzb21lYm9keSBlbHNlJ3MgX19HRlBfRElSRUNUX1JFQ0xBSU0g fCAhX19HRlBfTk9SRVRSWSBtZW1vcnkKPiA+ID4gPiBhbGxvY2F0aW9uLiBTdWNoIF9fR0ZQX0RJ UkVDVF9SRUNMQUlNIHwgIV9fR0ZQX05PUkVUUlkgYWxsb2NhdGlvbiBjYW4gcmVhY2gKPiA+ID4g PiBfX2FsbG9jX3BhZ2VzX21heV9vb20oKSBhbmQgaG9sZCBvb21fbG9jayBtdXRleCBhbmQgY2Fs bCBvdXRfb2ZfbWVtb3J5KCkuCj4gPiA+ID4gQW5kIGxlYWtfYmFsbG9vbigpIGlzIGNhbGxlZCBi eSB2aXJ0YmFsbG9vbl9vb21fbm90aWZ5KCkgdmlhCj4gPiA+ID4gYmxvY2tpbmdfbm90aWZpZXJf Y2FsbF9jaGFpbigpIGNhbGxiYWNrIHdoZW4gdmItPmJhbGxvb25fbG9jayBtdXRleCBpcyBhbHJl YWR5Cj4gPiA+ID4gaGVsZCBieSBmaWxsX2JhbGxvb24oKS4gQXMgYSByZXN1bHQsIGRlc3BpdGUg X19HRlBfTk9SRVRSWSBpcyBzcGVjaWZpZWQsCj4gPiA+ID4gZmlsbF9iYWxsb29uKCkgY2FuIGlu ZGlyZWN0bHkgZ2V0IHN0dWNrIHdhaXRpbmcgZm9yIHZiLT5iYWxsb29uX2xvY2sgbXV0ZXgKPiA+ ID4gPiBhdCBsZWFrX2JhbGxvb24oKS4KPiA+ID4gCj4gPiA+IFRoYXQgd291bGQgYmUgdHJpY2t5 IHRvIGZpeC4gSSBndWVzcyB3ZSdsbCBuZWVkIHRvIGRyb3AgdGhlIGxvY2sKPiA+ID4gd2hpbGUg YWxsb2NhdGluZyBtZW1vcnkgLSBub3QgYW4gZWFzeSBmaXguCj4gPiA+IAo+ID4gPiA+IEFsc28s IGluIGxlYWtfYmFsbG9vbigpLCB2aXJ0cXVldWVfYWRkX291dGJ1ZihHRlBfS0VSTkVMKSBpcyBj YWxsZWQgdmlhCj4gPiA+ID4gdGVsbF9ob3N0KCkuIFJlYWNoaW5nIF9fYWxsb2NfcGFnZXNfbWF5 X29vbSgpIGZyb20gdGhpcyB2aXJ0cXVldWVfYWRkX291dGJ1ZigpCj4gPiA+ID4gcmVxdWVzdCBm cm9tIGxlYWtfYmFsbG9vbigpIGZyb20gdmlydGJhbGxvb25fb29tX25vdGlmeSgpIGZyb20KPiA+ ID4gPiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCkgZnJvbSBvdXRfb2ZfbWVtb3J5KCkg bGVhZHMgdG8gT09NIGxvY2t1cAo+ID4gPiA+IGJlY2F1c2Ugb29tX2xvY2sgbXV0ZXggaXMgYWxy ZWFkeSBoZWxkIGJlZm9yZSBjYWxsaW5nIG91dF9vZl9tZW1vcnkoKS4KPiA+ID4gCj4gPiA+IEkg Z3Vlc3Mgd2Ugc2hvdWxkIGp1c3QgZG8KPiA+ID4gCj4gPiA+IEdGUF9LRVJORUwgJiB+X19HRlBf RElSRUNUX1JFQ0xBSU0gdGhlcmUgdGhlbj8KPiA+IAo+ID4gWWVzLCBidXQgR0ZQX0tFUk5FTCAm IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTSB3aWxsIGVmZmVjdGl2ZWx5IGJlIEdGUF9OT1dBSVQsIGZv cgo+ID4gX19HRlBfSU8gYW5kIF9fR0ZQX0ZTIHdvbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBfX0dG UF9ESVJFQ1RfUkVDTEFJTS4gSXQgbWlnaHQKPiA+IHNpZ25pZmljYW50bHkgaW5jcmVhc2VzIHBv c3NpYmlsaXR5IG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCj4gPiAKPiA+ID4gCj4gPiA+ IAo+ID4gPiA+IAo+ID4gPiA+IE9PTSBub3RpZmllciBjYWxsYmFjayBzaG91bGQgbm90IChkaXJl Y3RseSBvciBpbmRpcmVjdGx5KSBkZXBlbmQgb24KPiA+ID4gPiBfX0dGUF9ESVJFQ1RfUkVDTEFJ TSBtZW1vcnkgYWxsb2NhdGlvbiBhdHRlbXB0LiBDYW4geW91IGZpeCB0aGlzIGRlcGVuZGVuY3k/ Cj4gPiA+IAo+ID4gCj4gPiBBbm90aGVyIGlkZWEgd291bGQgYmUgdG8gdXNlIGEga2VybmVsIHRo cmVhZCAob3Igd29ya3F1ZXVlKSBzbyB0aGF0Cj4gPiB2aXJ0YmFsbG9vbl9vb21fbm90aWZ5KCkg Y2FuIHdhaXQgd2l0aCB0aW1lb3V0Lgo+ID4gCj4gPiBXZSBjb3VsZCBvZmZsb2FkIGVudGlyZSBi bG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZvb21fbm90aWZ5X2xpc3QsIDAsICZmcmVlZCkK PiA+IGNhbGwgdG8gYSBrZXJuZWwgdGhyZWFkIChvciB3b3JrcXVldWUpIHdpdGggdGltZW91dCBp ZiBNTSBmb2xrcyBhZ3JlZS4KPiA+IAo+IAo+IEJlbG93IGlzIGEgcGF0Y2ggd2hpY2ggb2ZmbG9h ZHMgYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigpIGNhbGwuIFdoYXQgZG8geW91IHRoaW5r Pwo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiBbUkZDXSBbUEFU Q0hdIG1tLG9vbTogT2ZmbG9hZCBPT00gbm90aWZ5IGNhbGxiYWNrIHRvIGEga2VybmVsIHRocmVh ZC4KPiAKPiBTaW5jZSBvb21fbm90aWZ5X2xpc3QgaXMgdHJhdmVyc2VkIHZpYSBibG9ja2luZ19u b3RpZmllcl9jYWxsX2NoYWluKCksCj4gaXQgaXMgbGVnYWwgdG8gc2xlZXAgaW5zaWRlIE9PTSBu b3RpZmllciBjYWxsYmFjayBmdW5jdGlvbi4KPiAKPiBIb3dldmVyLCBzaW5jZSBvb21fbm90aWZ5 X2xpc3QgaXMgdHJhdmVyc2VkIHdpdGggb29tX2xvY2sgaGVsZCwKPiBfX0dGUF9ESVJFQ1RfUkVD TEFJTSAmJiAhX19HRlBfTk9SRVRSWSBtZW1vcnkgYWxsb2NhdGlvbiBhdHRlbXB0IGNhbm5vdAo+ IGZhaWwgd2hlbiB0cmF2ZXJzaW5nIG9vbV9ub3RpZnlfbGlzdCBlbnRyaWVzLiBUaGVyZWZvcmUs IE9PTSBub3RpZmllcgo+IGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBub3QgKGRpcmVjdGx5IG9y IGluZGlyZWN0bHkpIGRlcGVuZCBvbgo+IF9fR0ZQX0RJUkVDVF9SRUNMQUlNICYmICFfX0dGUF9O T1JFVFJZIG1lbW9yeSBhbGxvY2F0aW9uIGF0dGVtcHQuCj4gCj4gQ3VycmVudGx5IHRoZXJlIGFy ZSA1IHJlZ2lzdGVyX29vbV9ub3RpZmllcigpIHVzZXJzIGluIHRoZSBtYWlubGluZSBrZXJuZWwu Cj4gCj4gICBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKPiAgIGFyY2gvczM5 MC9tbS9jbW0uYwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc2hyaW5rZXIuYwo+ ICAgZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwo+ICAga2VybmVsL3JjdS90cmVlX3Bs dWdpbi5oCj4gCj4gQW1vbmcgdGhlc2UgdXNlcnMsIGF0IGxlYXN0IHZpcnRpb19iYWxsb29uLmMg aGFzIHBvc3NpYmlsaXR5IG9mIE9PTSBsb2NrdXAKPiBiZWNhdXNlIGl0IGlzIHVzaW5nIG11dGV4 IHdoaWNoIGNhbiBkZXBlbmQgb24gR0ZQX0tFUk5FTCBtZW1vcnkgYWxsb2NhdGlvbnMuCj4gKEJv dGggY21tLmMgc2VlbSB0byBiZSBzYWZlIGFzIHRoZXkgdXNlIHNwaW5sb2Nrcy4gSSdtIG5vdCBz dXJlIGFib3V0Cj4gdHJlZV9wbHVnaW4uaCBhbmQgaTkxNV9nZW1fc2hyaW5rZXIuYyAuIFBsZWFz ZSBjaGVjay4pCj4gCj4gQnV0IGNvbnZlcnRpbmcgc3VjaCBhbGxvY2F0aW9ucyB0byB1c2UgR0ZQ X05PV0FJVCBpcyBub3Qgb25seSBwcm9uZSB0bwo+IGFsbG9jYXRpb24gZmFpbHVyZXMgdW5kZXIg bWVtb3J5IHByZXNzdXJlIGJ1dCBhbHNvIGRpZmZpY3VsdCB0byBhdWRpdAo+IHdoZXRoZXIgYWxs IGxvY2F0aW9ucyBhcmUgY29udmVydGVkIHRvIHVzZSBHRlBfTk9XQUlULgo+IAo+IFRoZXJlZm9y ZSwgdGhpcyBwYXRjaCBvZmZsb2FkcyBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCkgY2Fs bCB0byBhCj4gZGVkaWNhdGVkIGtlcm5lbCB0aHJlYWQgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24g d2l0aCB0aW1lb3V0IG9mIDUgc2Vjb25kcwo+IHNvIHRoYXQgd2UgY2FuIGNvbXBsZXRlbHkgZm9y Z2V0IGFib3V0IHBvc3NpYmlsaXR5IG9mIE9PTSBsb2NrdXAgZHVlIHRvCj4gT09NIG5vdGlmaWVy IGNhbGxiYWNrIGZ1bmN0aW9uLgo+IAo+ICg1IHNlY29uZHMgaXMgY2hvc2VuIGZyb20gbXkgZ3Vl c3MgdGhhdCBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCkKPiBzaG91bGQgbm90IHRha2Ug bG9uZywgZm9yIHdlIGFyZSB1c2luZyBtdXRleF90cnlsb2NrKCZvb21fbG9jaykgYXQKPiBfX2Fs bG9jX3BhZ2VzX21heV9vb20oKSBiYXNlZCBvbiBhbiBhc3N1bXB0aW9uIHRoYXQgb3V0X29mX21l bW9yeSgpIHNob3VsZAo+IHJlY2xhaW0gbWVtb3J5IHNob3J0bHkuKQo+IAo+IFRoZSBrZXJuZWwg dGhyZWFkIGlzIGNyZWF0ZWQgdXBvbiBmaXJzdCByZWdpc3Rlcl9vb21fbm90aWZpZXIoKSBjYWxs Lgo+IFRodXMsIHRob3NlIGVudmlyb25tZW50cyB3aGljaCBkbyBub3QgdXNlIHJlZ2lzdGVyX29v bV9ub3RpZmllcigpIHdpbGwKPiBub3Qgd2FzdGUgcmVzb3VyY2UgZm9yIHRoZSBkZWRpY2F0ZWQg a2VybmVsIHRocmVhZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBUZXRzdW8gSGFuZGEgPHBlbmd1aW4t a2VybmVsQEktbG92ZS5TQUtVUkEubmUuanA+Cj4gLS0tCj4gIG1tL29vbV9raWxsLmMgfCA0MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCj4gIDEgZmlsZSBjaGFuZ2Vk LCAzNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9tbS9v b21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwo+IGluZGV4IGRlZTBmNzUuLmQ5NzQ0ZjcgMTAwNjQ0 Cj4gLS0tIGEvbW0vb29tX2tpbGwuYwo+ICsrKyBiL21tL29vbV9raWxsLmMKPiBAQCAtOTgxLDkg Kzk4MSwzNyBAQCBzdGF0aWMgdm9pZCBjaGVja19wYW5pY19vbl9vb20oc3RydWN0IG9vbV9jb250 cm9sICpvYywKPiAgfQo+ICAKPiAgc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQob29tX25v dGlmeV9saXN0KTsKPiArc3RhdGljIGJvb2wgb29tX25vdGlmaWVyX3JlcXVlc3RlZDsKPiArc3Rh dGljIHVuc2lnbmVkIGxvbmcgb29tX25vdGlmaWVyX2ZyZWVkOwo+ICtzdGF0aWMgc3RydWN0IHRh c2tfc3RydWN0ICpvb21fbm90aWZpZXJfdGg7Cj4gK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVf SEVBRChvb21fbm90aWZpZXJfcmVxdWVzdF93YWl0KTsKPiArc3RhdGljIERFQ0xBUkVfV0FJVF9R VUVVRV9IRUFEKG9vbV9ub3RpZmllcl9yZXNwb25zZV93YWl0KTsKPiArCj4gK3N0YXRpYyBpbnQg b29tX25vdGlmaWVyKHZvaWQgKnVudXNlZCkKPiArewo+ICsJd2hpbGUgKHRydWUpIHsKPiArCQl3 YWl0X2V2ZW50X2ZyZWV6YWJsZShvb21fbm90aWZpZXJfcmVxdWVzdF93YWl0LAo+ICsJCQkJICAg ICBvb21fbm90aWZpZXJfcmVxdWVzdGVkKTsKPiArCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2No YWluKCZvb21fbm90aWZ5X2xpc3QsIDAsCj4gKwkJCQkJICAgICAmb29tX25vdGlmaWVyX2ZyZWVk KTsKPiArCQlvb21fbm90aWZpZXJfcmVxdWVzdGVkID0gZmFsc2U7Cj4gKwkJd2FrZV91cCgmb29t X25vdGlmaWVyX3Jlc3BvbnNlX3dhaXQpOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiAgCj4g IGludCByZWdpc3Rlcl9vb21fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKPiAg ewo+ICsJaWYgKCFvb21fbm90aWZpZXJfdGgpIHsKPiArCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRo ID0ga3RocmVhZF9ydW4ob29tX25vdGlmaWVyLCBOVUxMLAo+ICsJCQkJCQkgICAgICJvb21fbm90 aWZpZXIiKTsKPiArCj4gKwkJaWYgKElTX0VSUih0aCkpIHsKPiArCQkJcHJfZXJyKCJVbmFibGUg dG8gc3RhcnQgT09NIG5vdGlmaWVyIHRocmVhZC5cbiIpOwo+ICsJCQlyZXR1cm4gKGludCkgUFRS X0VSUih0aCk7Cj4gKwkJfQo+ICsJCW9vbV9ub3RpZmllcl90aCA9IHRoOwo+ICsJfQo+ICAJcmV0 dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZvb21fbm90aWZ5X2xpc3QsIG5i KTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9vb21fbm90aWZpZXIpOwo+IEBA IC0xMDA1LDE3ICsxMDMzLDIxIEBAIGludCB1bnJlZ2lzdGVyX29vbV9ub3RpZmllcihzdHJ1Y3Qg bm90aWZpZXJfYmxvY2sgKm5iKQo+ICAgKi8KPiAgYm9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBv b21fY29udHJvbCAqb2MpCj4gIHsKPiAtCXVuc2lnbmVkIGxvbmcgZnJlZWQgPSAwOwo+ICAJZW51 bSBvb21fY29uc3RyYWludCBjb25zdHJhaW50ID0gQ09OU1RSQUlOVF9OT05FOwo+ICAKPiAgCWlm IChvb21fa2lsbGVyX2Rpc2FibGVkKQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gLQlpZiAoIWlz X21lbWNnX29vbShvYykpIHsKPiAtCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZvb21f bm90aWZ5X2xpc3QsIDAsICZmcmVlZCk7Cj4gLQkJaWYgKGZyZWVkID4gMCkKPiArCWlmICghaXNf bWVtY2dfb29tKG9jKSAmJiBvb21fbm90aWZpZXJfdGgpIHsKPiArCQlvb21fbm90aWZpZXJfcmVx dWVzdGVkID0gdHJ1ZTsKPiArCQl3YWtlX3VwKCZvb21fbm90aWZpZXJfcmVxdWVzdF93YWl0KTsK PiArCQl3YWl0X2V2ZW50X3RpbWVvdXQob29tX25vdGlmaWVyX3Jlc3BvbnNlX3dhaXQsCj4gKwkJ CQkgICAhb29tX25vdGlmaWVyX3JlcXVlc3RlZCwgNSAqIEhaKTsKCkkgZ3Vlc3MgdGhpcyBtZWFu cyB3aGF0IHdhcyBlYXJsaWVyIGEgZGVhZGxvY2sgd2lsbCBmcmVlIHVwIGFmdGVyIDUKc2Vjb25k cywgYnkgYSA1IHNlYyBkb3dudGltZSBpcyBzdGlsbCBhIGxvdCwgaXNuJ3QgaXQ/CgoKPiArCQlp ZiAob29tX25vdGlmaWVyX2ZyZWVkKSB7Cj4gKwkJCW9vbV9ub3RpZmllcl9mcmVlZCA9IDA7Cj4g IAkJCS8qIEdvdCBzb21lIG1lbW9yeSBiYWNrIGluIHRoZSBsYXN0IHNlY29uZC4gKi8KPiAgCQkJ cmV0dXJuIHRydWU7Cj4gKwkJfQo+ICAJfQo+ICAKPiAgCS8qCj4gLS0gCj4gMS44LjMuMQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK