From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zeng, Oak" Subject: [PATCH 3/6] drm/amdkfd: Refactor create_queue_nocpsch Date: Tue, 4 Jun 2019 02:52:46 +0000 Message-ID: <1559616755-13116-3-git-send-email-Oak.Zeng@amd.com> References: <1559616755-13116-1-git-send-email-Oak.Zeng@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1559616755-13116-1-git-send-email-Oak.Zeng-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US 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: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Kuehling, Felix" , "Zeng, Oak" VGhpcyBpcyBwcmVwYXJlIHdvcmsgdG8gZml4IGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5Lg0K Tm8gbG9naWMgY2hhbmdlDQoNCkNoYW5nZS1JZDogSTRlMGVlOTE4MjYwZTc3ODBkZTk3MmRkNzFm NGNlNzg3YjRmNmRkZTkNClNpZ25lZC1vZmYtYnk6IE9hayBaZW5nIDxPYWsuWmVuZ0BhbWQuY29t Pg0KLS0tDQogLi4uL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIu YyAgfCAxNzEgKysrKysrKy0tLS0tLS0tLS0tLS0tDQogMSBmaWxlIGNoYW5nZWQsIDU3IGluc2Vy dGlvbnMoKyksIDExNCBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMNCmluZGV4IGRjMWE3MGIuLmRj MzRlMGUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNl X3F1ZXVlX21hbmFnZXIuYw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2Rl dmljZV9xdWV1ZV9tYW5hZ2VyLmMNCkBAIC00MiwxMCArNDIsNiBAQA0KIHN0YXRpYyBpbnQgc2V0 X3Bhc2lkX3ZtaWRfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwNCiAJ CQkJCXVuc2lnbmVkIGludCBwYXNpZCwgdW5zaWduZWQgaW50IHZtaWQpOw0KIA0KLXN0YXRpYyBp bnQgY3JlYXRlX2NvbXB1dGVfcXVldWVfbm9jcHNjaChzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFn ZXIgKmRxbSwNCi0JCQkJCXN0cnVjdCBxdWV1ZSAqcSwNCi0JCQkJCXN0cnVjdCBxY21fcHJvY2Vz c19kZXZpY2UgKnFwZCk7DQotDQogc3RhdGljIGludCBleGVjdXRlX3F1ZXVlc19jcHNjaChzdHJ1 Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwNCiAJCQkJZW51bSBrZmRfdW5tYXBfcXVldWVz X2ZpbHRlciBmaWx0ZXIsDQogCQkJCXVpbnQzMl90IGZpbHRlcl9wYXJhbSk7DQpAQCAtNTUsMTMg KzUxLDE0IEBAIHN0YXRpYyBpbnQgdW5tYXBfcXVldWVzX2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVl dWVfbWFuYWdlciAqZHFtLA0KIA0KIHN0YXRpYyBpbnQgbWFwX3F1ZXVlc19jcHNjaChzdHJ1Y3Qg ZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSk7DQogDQotc3RhdGljIGludCBjcmVhdGVfc2RtYV9x dWV1ZV9ub2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLA0KLQkJCQkJc3Ry dWN0IHF1ZXVlICpxLA0KLQkJCQkJc3RydWN0IHFjbV9wcm9jZXNzX2RldmljZSAqcXBkKTsNCi0N CiBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlX3NkbWFfcXVldWUoc3RydWN0IGRldmljZV9xdWV1ZV9t YW5hZ2VyICpkcW0sDQogCQkJCXN0cnVjdCBxdWV1ZSAqcSk7DQogDQorc3RhdGljIGlubGluZSB2 b2lkIGRlYWxsb2NhdGVfaHFkKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLA0KKwkJ CQlzdHJ1Y3QgcXVldWUgKnEpOw0KK3N0YXRpYyBpbnQgYWxsb2NhdGVfaHFkKHN0cnVjdCBkZXZp Y2VfcXVldWVfbWFuYWdlciAqZHFtLCBzdHJ1Y3QgcXVldWUgKnEpOw0KK3N0YXRpYyBpbnQgYWxs b2NhdGVfc2RtYV9xdWV1ZShzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwNCisJCQkJ c3RydWN0IHF1ZXVlICpxKTsNCiBzdGF0aWMgdm9pZCBrZmRfcHJvY2Vzc19od19leGNlcHRpb24o c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCiANCiBzdGF0aWMgaW5saW5lDQpAQCAtMjIzLDYg KzIyMCw5IEBAIHN0YXRpYyBpbnQgYWxsb2NhdGVfdm1pZChzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21h bmFnZXIgKmRxbSwNCiAJLyogaW52YWxpZGF0ZSB0aGUgVk0gY29udGV4dCBhZnRlciBwYXNpZCBh bmQgdm1pZCBtYXBwaW5nIGlzIHNldCB1cCAqLw0KIAlrZmRfZmx1c2hfdGxiKHFwZF90b19wZGQo cXBkKSk7DQogDQorCWRxbS0+ZGV2LT5rZmQya2dkLT5zZXRfc2NyYXRjaF9iYWNraW5nX3ZhKA0K KwkJZHFtLT5kZXYtPmtnZCwgcXBkLT5zaF9oaWRkZW5fcHJpdmF0ZV9iYXNlLCBxcGQtPnZtaWQp Ow0KKw0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtMjY5LDYgKzI2OSw3IEBAIHN0YXRpYyBpbnQg Y3JlYXRlX3F1ZXVlX25vY3BzY2goc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sDQog CQkJCXN0cnVjdCBxdWV1ZSAqcSwNCiAJCQkJc3RydWN0IHFjbV9wcm9jZXNzX2RldmljZSAqcXBk KQ0KIHsNCisJc3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWdyOw0KIAlpbnQgcmV0dmFsOw0KIA0K IAlwcmludF9xdWV1ZShxKTsNCkBAIC0zMDAsMTggKzMwMSw0MSBAQCBzdGF0aWMgaW50IGNyZWF0 ZV9xdWV1ZV9ub2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLA0KIAlxLT5w cm9wZXJ0aWVzLnRiYV9hZGRyID0gcXBkLT50YmFfYWRkcjsNCiAJcS0+cHJvcGVydGllcy50bWFf YWRkciA9IHFwZC0+dG1hX2FkZHI7DQogDQotCWlmIChxLT5wcm9wZXJ0aWVzLnR5cGUgPT0gS0ZE X1FVRVVFX1RZUEVfQ09NUFVURSkNCi0JCXJldHZhbCA9IGNyZWF0ZV9jb21wdXRlX3F1ZXVlX25v Y3BzY2goZHFtLCBxLCBxcGQpOw0KLQllbHNlIGlmIChxLT5wcm9wZXJ0aWVzLnR5cGUgPT0gS0ZE X1FVRVVFX1RZUEVfU0RNQSB8fA0KLQkJCXEtPnByb3BlcnRpZXMudHlwZSA9PSBLRkRfUVVFVUVf VFlQRV9TRE1BX1hHTUkpDQotCQlyZXR2YWwgPSBjcmVhdGVfc2RtYV9xdWV1ZV9ub2Nwc2NoKGRx bSwgcSwgcXBkKTsNCi0JZWxzZQ0KLQkJcmV0dmFsID0gLUVJTlZBTDsNCisJbXFkX21nciA9IGRx bS0+bXFkX21ncnNbZ2V0X21xZF90eXBlX2Zyb21fcXVldWVfdHlwZSgNCisJCQlxLT5wcm9wZXJ0 aWVzLnR5cGUpXTsNCisJaWYgKHEtPnByb3BlcnRpZXMudHlwZSA9PSBLRkRfUVVFVUVfVFlQRV9D T01QVVRFKSB7DQorCQlyZXR2YWwgPSBhbGxvY2F0ZV9ocWQoZHFtLCBxKTsNCisJCWlmIChyZXR2 YWwpDQorCQkJZ290byBkZWFsbG9jYXRlX3ZtaWQ7DQorCQlwcl9kZWJ1ZygiTG9hZGluZyBtcWQg dG8gaHFkIG9uIHBpcGUgJWQsIHF1ZXVlICVkXG4iLA0KKwkJCXEtPnBpcGUsIHEtPnF1ZXVlKTsN CisJfSBlbHNlIGlmIChxLT5wcm9wZXJ0aWVzLnR5cGUgPT0gS0ZEX1FVRVVFX1RZUEVfU0RNQSB8 fA0KKwkJcS0+cHJvcGVydGllcy50eXBlID09IEtGRF9RVUVVRV9UWVBFX1NETUFfWEdNSSkgew0K KwkJcmV0dmFsID0gYWxsb2NhdGVfc2RtYV9xdWV1ZShkcW0sIHEpOw0KKwkJaWYgKHJldHZhbCkN CisJCQlnb3RvIGRlYWxsb2NhdGVfdm1pZDsNCisJCWRxbS0+YXNpY19vcHMuaW5pdF9zZG1hX3Zt KGRxbSwgcSwgcXBkKTsNCisJfQ0KIA0KLQlpZiAocmV0dmFsKSB7DQotCQlpZiAobGlzdF9lbXB0 eSgmcXBkLT5xdWV1ZXNfbGlzdCkpDQotCQkJZGVhbGxvY2F0ZV92bWlkKGRxbSwgcXBkLCBxKTsN Ci0JCWdvdG8gb3V0X3VubG9jazsNCisJcmV0dmFsID0gYWxsb2NhdGVfZG9vcmJlbGwocXBkLCBx KTsNCisJaWYgKHJldHZhbCkNCisJCWdvdG8gb3V0X2RlYWxsb2NhdGVfaHFkOw0KKw0KKwlyZXR2 YWwgPSBtcWRfbWdyLT5pbml0X21xZChtcWRfbWdyLCAmcS0+bXFkLCAmcS0+bXFkX21lbV9vYmos DQorCQkJCSZxLT5nYXJ0X21xZF9hZGRyLCAmcS0+cHJvcGVydGllcyk7DQorCWlmIChyZXR2YWwp DQorCQlnb3RvIG91dF9kZWFsbG9jYXRlX2Rvb3JiZWxsOw0KKw0KKwlpZiAocS0+cHJvcGVydGll cy5pc19hY3RpdmUpIHsNCisNCisJCWlmIChXQVJOKHEtPnByb2Nlc3MtPm1tICE9IGN1cnJlbnQt Pm1tLA0KKwkJCQkJInNob3VsZCBvbmx5IHJ1biBpbiB1c2VyIHRocmVhZCIpKQ0KKwkJCXJldHZh bCA9IC1FRkFVTFQ7DQorCQllbHNlDQorCQkJcmV0dmFsID0gbXFkX21nci0+bG9hZF9tcWQobXFk X21nciwgcS0+bXFkLCBxLT5waXBlLA0KKwkJCQkJcS0+cXVldWUsICZxLT5wcm9wZXJ0aWVzLCBj dXJyZW50LT5tbSk7DQorCQlpZiAocmV0dmFsKQ0KKwkJCWdvdG8gb3V0X3VuaW5pdF9tcWQ7DQog CX0NCiANCiAJbGlzdF9hZGQoJnEtPmxpc3QsICZxcGQtPnF1ZXVlc19saXN0KTsNCkBAIC0zMzEs NyArMzU1LDIxIEBAIHN0YXRpYyBpbnQgY3JlYXRlX3F1ZXVlX25vY3BzY2goc3RydWN0IGRldmlj ZV9xdWV1ZV9tYW5hZ2VyICpkcW0sDQogCWRxbS0+dG90YWxfcXVldWVfY291bnQrKzsNCiAJcHJf ZGVidWcoIlRvdGFsIG9mICVkIHF1ZXVlcyBhcmUgYWNjb3VudGFibGUgc28gZmFyXG4iLA0KIAkJ CWRxbS0+dG90YWxfcXVldWVfY291bnQpOw0KKwlnb3RvIG91dF91bmxvY2s7DQogDQorb3V0X3Vu aW5pdF9tcWQ6DQorCW1xZF9tZ3ItPnVuaW5pdF9tcWQobXFkX21nciwgcS0+bXFkLCBxLT5tcWRf bWVtX29iaik7DQorb3V0X2RlYWxsb2NhdGVfZG9vcmJlbGw6DQorCWRlYWxsb2NhdGVfZG9vcmJl bGwocXBkLCBxKTsNCitvdXRfZGVhbGxvY2F0ZV9ocWQ6DQorCWlmIChxLT5wcm9wZXJ0aWVzLnR5 cGUgPT0gS0ZEX1FVRVVFX1RZUEVfQ09NUFVURSkNCisJCWRlYWxsb2NhdGVfaHFkKGRxbSwgcSk7 DQorCWVsc2UgaWYgKHEtPnByb3BlcnRpZXMudHlwZSA9PSBLRkRfUVVFVUVfVFlQRV9TRE1BIHx8 DQorCQlxLT5wcm9wZXJ0aWVzLnR5cGUgPT0gS0ZEX1FVRVVFX1RZUEVfU0RNQV9YR01JKQ0KKwkJ ZGVhbGxvY2F0ZV9zZG1hX3F1ZXVlKGRxbSwgcSk7DQorZGVhbGxvY2F0ZV92bWlkOg0KKwlpZiAo bGlzdF9lbXB0eSgmcXBkLT5xdWV1ZXNfbGlzdCkpDQorCQlkZWFsbG9jYXRlX3ZtaWQoZHFtLCBx cGQsIHEpOw0KIG91dF91bmxvY2s6DQogCWRxbV91bmxvY2soZHFtKTsNCiAJcmV0dXJuIHJldHZh bDsNCkBAIC0zNzcsNTggKzQxNSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWFsbG9jYXRlX2hx ZChzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwNCiAJZHFtLT5hbGxvY2F0ZWRfcXVl dWVzW3EtPnBpcGVdIHw9ICgxIDw8IHEtPnF1ZXVlKTsNCiB9DQogDQotc3RhdGljIGludCBjcmVh dGVfY29tcHV0ZV9xdWV1ZV9ub2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFt LA0KLQkJCQkJc3RydWN0IHF1ZXVlICpxLA0KLQkJCQkJc3RydWN0IHFjbV9wcm9jZXNzX2Rldmlj ZSAqcXBkKQ0KLXsNCi0Jc3RydWN0IG1xZF9tYW5hZ2VyICptcWRfbWdyOw0KLQlpbnQgcmV0dmFs Ow0KLQ0KLQltcWRfbWdyID0gZHFtLT5tcWRfbWdyc1tLRkRfTVFEX1RZUEVfQ09NUFVURV07DQot DQotCXJldHZhbCA9IGFsbG9jYXRlX2hxZChkcW0sIHEpOw0KLQlpZiAocmV0dmFsKQ0KLQkJcmV0 dXJuIHJldHZhbDsNCi0NCi0JcmV0dmFsID0gYWxsb2NhdGVfZG9vcmJlbGwocXBkLCBxKTsNCi0J aWYgKHJldHZhbCkNCi0JCWdvdG8gb3V0X2RlYWxsb2NhdGVfaHFkOw0KLQ0KLQlyZXR2YWwgPSBt cWRfbWdyLT5pbml0X21xZChtcWRfbWdyLCAmcS0+bXFkLCAmcS0+bXFkX21lbV9vYmosDQotCQkJ CSZxLT5nYXJ0X21xZF9hZGRyLCAmcS0+cHJvcGVydGllcyk7DQotCWlmIChyZXR2YWwpDQotCQln b3RvIG91dF9kZWFsbG9jYXRlX2Rvb3JiZWxsOw0KLQ0KLQlwcl9kZWJ1ZygiTG9hZGluZyBtcWQg dG8gaHFkIG9uIHBpcGUgJWQsIHF1ZXVlICVkXG4iLA0KLQkJCXEtPnBpcGUsIHEtPnF1ZXVlKTsN Ci0NCi0JZHFtLT5kZXYtPmtmZDJrZ2QtPnNldF9zY3JhdGNoX2JhY2tpbmdfdmEoDQotCQkJZHFt LT5kZXYtPmtnZCwgcXBkLT5zaF9oaWRkZW5fcHJpdmF0ZV9iYXNlLCBxcGQtPnZtaWQpOw0KLQ0K LQlpZiAoIXEtPnByb3BlcnRpZXMuaXNfYWN0aXZlKQ0KLQkJcmV0dXJuIDA7DQotDQotCWlmIChX QVJOKHEtPnByb2Nlc3MtPm1tICE9IGN1cnJlbnQtPm1tLA0KLQkJICJzaG91bGQgb25seSBydW4g aW4gdXNlciB0aHJlYWQiKSkNCi0JCXJldHZhbCA9IC1FRkFVTFQ7DQotCWVsc2UNCi0JCXJldHZh bCA9IG1xZF9tZ3ItPmxvYWRfbXFkKG1xZF9tZ3IsIHEtPm1xZCwgcS0+cGlwZSwgcS0+cXVldWUs DQotCQkJCQkgICAmcS0+cHJvcGVydGllcywgY3VycmVudC0+bW0pOw0KLQlpZiAocmV0dmFsKQ0K LQkJZ290byBvdXRfdW5pbml0X21xZDsNCi0NCi0JcmV0dXJuIDA7DQotDQotb3V0X3VuaW5pdF9t cWQ6DQotCW1xZF9tZ3ItPnVuaW5pdF9tcWQobXFkX21nciwgcS0+bXFkLCBxLT5tcWRfbWVtX29i aik7DQotb3V0X2RlYWxsb2NhdGVfZG9vcmJlbGw6DQotCWRlYWxsb2NhdGVfZG9vcmJlbGwocXBk LCBxKTsNCi1vdXRfZGVhbGxvY2F0ZV9ocWQ6DQotCWRlYWxsb2NhdGVfaHFkKGRxbSwgcSk7DQot DQotCXJldHVybiByZXR2YWw7DQotfQ0KLQ0KIC8qIEFjY2VzcyB0byBEUU0gaGFzIHRvIGJlIGxv Y2tlZCBiZWZvcmUgY2FsbGluZyBkZXN0cm95X3F1ZXVlX25vY3BzY2hfbG9ja2VkDQogICogdG8g YXZvaWQgYXN5bmNocm9uaXplZCBhY2Nlc3MNCiAgKi8NCkBAIC05NjcsNDkgKzk1Myw2IEBAIHN0 YXRpYyB2b2lkIGRlYWxsb2NhdGVfc2RtYV9xdWV1ZShzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFn ZXIgKmRxbSwNCiAJfQ0KIH0NCiANCi1zdGF0aWMgaW50IGNyZWF0ZV9zZG1hX3F1ZXVlX25vY3Bz Y2goc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sDQotCQkJCQlzdHJ1Y3QgcXVldWUg KnEsDQotCQkJCQlzdHJ1Y3QgcWNtX3Byb2Nlc3NfZGV2aWNlICpxcGQpDQotew0KLQlzdHJ1Y3Qg bXFkX21hbmFnZXIgKm1xZF9tZ3I7DQotCWludCByZXR2YWw7DQotDQotCW1xZF9tZ3IgPSBkcW0t Pm1xZF9tZ3JzW0tGRF9NUURfVFlQRV9TRE1BXTsNCi0NCi0JcmV0dmFsID0gYWxsb2NhdGVfc2Rt YV9xdWV1ZShkcW0sIHEpOw0KLQlpZiAocmV0dmFsKQ0KLQkJcmV0dXJuIHJldHZhbDsNCi0NCi0J cmV0dmFsID0gYWxsb2NhdGVfZG9vcmJlbGwocXBkLCBxKTsNCi0JaWYgKHJldHZhbCkNCi0JCWdv dG8gb3V0X2RlYWxsb2NhdGVfc2RtYV9xdWV1ZTsNCi0NCi0JZHFtLT5hc2ljX29wcy5pbml0X3Nk bWFfdm0oZHFtLCBxLCBxcGQpOw0KLQlyZXR2YWwgPSBtcWRfbWdyLT5pbml0X21xZChtcWRfbWdy LCAmcS0+bXFkLCAmcS0+bXFkX21lbV9vYmosDQotCQkJCSZxLT5nYXJ0X21xZF9hZGRyLCAmcS0+ cHJvcGVydGllcyk7DQotCWlmIChyZXR2YWwpDQotCQlnb3RvIG91dF9kZWFsbG9jYXRlX2Rvb3Ji ZWxsOw0KLQ0KLQlpZiAoIXEtPnByb3BlcnRpZXMuaXNfYWN0aXZlKQ0KLQkJcmV0dXJuIDA7DQot DQotCXJldHZhbCA9IG1xZF9tZ3ItPmxvYWRfbXFkKG1xZF9tZ3IsIHEtPm1xZCwgMCwgMCwgJnEt PnByb3BlcnRpZXMsDQotCQkJCWN1cnJlbnQtPm1tKTsNCi0JaWYgKHJldHZhbCkNCi0JCWdvdG8g b3V0X3VuaW5pdF9tcWQ7DQotDQotCXJldHVybiAwOw0KLQ0KLW91dF91bmluaXRfbXFkOg0KLQlt cWRfbWdyLT51bmluaXRfbXFkKG1xZF9tZ3IsIHEtPm1xZCwgcS0+bXFkX21lbV9vYmopOw0KLW91 dF9kZWFsbG9jYXRlX2Rvb3JiZWxsOg0KLQlkZWFsbG9jYXRlX2Rvb3JiZWxsKHFwZCwgcSk7DQot b3V0X2RlYWxsb2NhdGVfc2RtYV9xdWV1ZToNCi0JZGVhbGxvY2F0ZV9zZG1hX3F1ZXVlKGRxbSwg cSk7DQotDQotCXJldHVybiByZXR2YWw7DQotfQ0KLQ0KIC8qDQogICogRGV2aWNlIFF1ZXVlIE1h bmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIGNwIHNjaGVkdWxlcg0KICAqLw0KLS0gDQoyLjcuNA0K DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4 IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=