From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1i9qlg-0004KX-QT for ath10k@lists.infradead.org; Mon, 16 Sep 2019 13:10:14 +0000 From: Yibo Zhao Subject: [PATCH 2/4] mac80211: defer txqs removal from rbtree Date: Mon, 16 Sep 2019 21:09:46 +0800 Message-Id: <1568639388-27291-2-git-send-email-yiboz@codeaurora.org> In-Reply-To: <1568639388-27291-1-git-send-email-yiboz@codeaurora.org> References: <1568639388-27291-1-git-send-email-yiboz@codeaurora.org> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "ath10k" Errors-To: ath10k-bounces+kvalo=adurom.com@lists.infradead.org To: ath10k@lists.infradead.org Cc: Yibo Zhao , =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= , linux-wireless@vger.kernel.org SW4gYSBsb29wIHR4cXMgZGVxdWV1ZSBzY2VuYXJpbywgaWYgdGhlIGZpcnN0IHR4cSBpbiB0aGUg cmJ0cmVlIGdldHMKcmVtb3ZlZCBmcm9tIHJidHJlZSBpbW1lZGlhdGVseSBpbiB0aGUgaWVlZTgw MjExX3JldHVybl90eHEoKSwgdGhlCmxvb3Agd2lsbCBicmVhayBzb29uIGluIHRoZSBpZWVlODAy MTFfbmV4dF90eHEoKSBkdWUgdG8gc2NoZWR1bGVfcG9zCm5vdCBsZWFkaW5nIHRvIHRoZSBzZWNv bmQgdHhxIGluIHRoZSByYnRyZWUuIFRodXMsIGRlZmVyaW5nIHRoZQpyZW1vdmFsIHJpZ2h0IGJl Zm9yZSB0aGUgZW5kIG9mIHRoaXMgc2NoZWR1bGUgcm91bmQuCgpDby1kZXZlbG9wZWQtYnk6IFlp Ym8gWmhhbyA8eWlib3pAY29kZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IFlpYm8gWmhhbyA8 eWlib3pAY29kZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IFRva2UgSMO4aWxhbmQtSsO4cmdl bnNlbiA8dG9rZUB0b2tlLmRrPgotLS0KIGluY2x1ZGUvbmV0L21hYzgwMjExLmggICAgIHwgMTYg KysrKysrKysrKy0tCiBuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCB8ICAzICsrKwogbmV0L21h YzgwMjExL21haW4uYyAgICAgICAgfCAgNiArKysrKwogbmV0L21hYzgwMjExL3R4LmMgICAgICAg ICAgfCA2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiA0 IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5k ZXggYWMyZWQ4ZS4uYmE1YTM0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAor KysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC05MjUsNiArOTI1LDggQEAgc3RydWN0IGll ZWU4MDIxMV90eF9yYXRlIHsKIAogI2RlZmluZSBJRUVFODAyMTFfTUFYX1RYX1JFVFJZCQkzMQog CisjZGVmaW5lIElFRUU4MDIxMV9BSVJUSU1FX1RYUV9STV9DSEtfSU5UVl9JTl9NUyAxMDAKKwog c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9yYXRlX3NldF92aHQoc3RydWN0IGllZWU4MDIx MV90eF9yYXRlICpyYXRlLAogCQkJCQkgIHU4IG1jcywgdTggbnNzKQogewpAQCAtNjIzMiw3ICs2 MjM0LDggQEAgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LAogICogQGFjOiBBQyBudW1iZXIgdG8gcmV0dXJuIHBhY2tldHMgZnJvbS4K ICAqCiAgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgYmV0d2VlbiBjYWxscyB0byBpZWVlODAyMTFf dHhxX3NjaGVkdWxlX3N0YXJ0KCkKLSAqIGFuZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZCgp LgorICogYW5kIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKCkuIElmIHRoZSB0eHEgaXMgZW1w dHksIGl0IHdpbGwgYmUgYWRkZWQKKyAqIHRvIGEgcmVtb3ZlIGxpc3QgYW5kIGdldCByZW1vdmVk IGxhdGVyLgogICogUmV0dXJucyB0aGUgbmV4dCB0eHEgaWYgc3VjY2Vzc2Z1bCwgJU5VTEwgaWYg bm8gcXVldWUgaXMgZWxpZ2libGUuIElmIGEgdHhxCiAgKiBpcyByZXR1cm5lZCwgaXQgc2hvdWxk IGJlIHJldHVybmVkIHdpdGggaWVlZTgwMjExX3JldHVybl90eHEoKSBhZnRlciB0aGUKICAqIGRy aXZlciBoYXMgZmluaXNoZWQgc2NoZWR1bGluZyBpdC4KQEAgLTYyNjgsNyArNjI3MSw4IEBAIHZv aWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg dTggYWMpCiAgKiBAaHc6IHBvaW50ZXIgYXMgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2Nf aHcoKQogICogQGFjOiBBQyBudW1iZXIgdG8gYWNxdWlyZSBsb2NrcyBmb3IKICAqCi0gKiBSZWxl YXNlIGxvY2tzIHByZXZpb3VzbHkgYWNxdWlyZWQgYnkgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9l bmQoKS4KKyAqIFJlbGVhc2UgbG9ja3MgcHJldmlvdXNseSBhY3F1aXJlZCBieSBpZWVlODAyMTFf dHhxX3NjaGVkdWxlX2VuZCgpLiBDaGVjaworICogYW5kIHJlbW92ZSB0aGUgZW1wdHkgdHhxIGZy b20gcmItdHJlZS4KICAqLwogdm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgdTggYWMpCiAJX19yZWxlYXNlcyh0eHFfbG9jayk7CkBAIC02Mjg3 LDYgKzYyOTEsMTQgQEAgdm9pZCBpZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKQogCV9fYWNxdWlyZXModHhxX2xv Y2spIF9fcmVsZWFzZXModHhxX2xvY2spOwogCiAvKioKKyAqIGllZWU4MDIxMV90eHFzX2NoZWNr IC0gQ2hlY2sgdHhxcyB3YWl0aW5nIGZvciByZW1vdmFsCisgKgorICogQHRtcjogcG9pbnRlciBh cyBvYnRhaW5lZCBmcm9tIGxvY2FsCisgKgorICovCit2b2lkIGllZWU4MDIxMV90eHFzX2NoZWNr KHN0cnVjdCB0aW1lcl9saXN0ICp0bXIpOworCisvKioKICAqIGllZWU4MDIxMV90eHFfbWF5X3Ry YW5zbWl0IC0gY2hlY2sgd2hldGhlciBUWFEgaXMgYWxsb3dlZCB0byB0cmFuc21pdAogICoKICAq IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIGdpdmVuIHR4cSBpcyBhbGxv d2VkIHRvIHRyYW5zbWl0IGJ5CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2ku aCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGE0NTU2ZjkuLjQ5YWExNDNlIDEw MDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEv aWVlZTgwMjExX2kuaApAQCAtODQ3LDYgKzg0Nyw3IEBAIHN0cnVjdCB0eHFfaW5mbyB7CiAJc3Ry dWN0IGNvZGVsX3N0YXRzIGNzdGF0czsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzOwogCXN0 cnVjdCByYl9ub2RlIHNjaGVkdWxlX29yZGVyOworCXN0cnVjdCBsaXN0X2hlYWQgY2FuZGlkYXRl OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBrZWVwIGxhc3QhICovCkBAIC0xMTQ1LDYg KzExNDYsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHsKIAl1NjQgYWlydGltZV92X3RbSUVF RTgwMjExX05VTV9BQ1NdOwogCXU2NCBhaXJ0aW1lX3dlaWdodF9zdW1bSUVFRTgwMjExX05VTV9B Q1NdOwogCisJc3RydWN0IGxpc3RfaGVhZCByZW1vdmVfbGlzdFtJRUVFODAyMTFfTlVNX0FDU107 CisJc3RydWN0IHRpbWVyX2xpc3QgcmVtb3ZlX3RpbWVyOwogCXUxNiBhaXJ0aW1lX2ZsYWdzOwog CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wczsKZGlmZiAtLWdpdCBhL25ldC9tYWM4 MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IGU5ZmZhOGUuLjc4ZmUyNGEg MTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMKKysrIGIvbmV0L21hYzgwMjExL21haW4u YwpAQCAtNjY3LDEwICs2NjcsMTUgQEAgc3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2Fs bG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLAogCiAJZm9yIChpID0gMDsgaSA8IElFRUU4 MDIxMV9OVU1fQUNTOyBpKyspIHsKIAkJbG9jYWwtPmFjdGl2ZV90eHFzW2ldID0gUkJfUk9PVF9D QUNIRUQ7CisJCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+cmVtb3ZlX2xpc3RbaV0pOwogCQlzcGlu X2xvY2tfaW5pdCgmbG9jYWwtPmFjdGl2ZV90eHFfbG9ja1tpXSk7CiAJfQogCWxvY2FsLT5haXJ0 aW1lX2ZsYWdzID0gQUlSVElNRV9VU0VfVFggfCBBSVJUSU1FX1VTRV9SWDsKIAorCXRpbWVyX3Nl dHVwKCZsb2NhbC0+cmVtb3ZlX3RpbWVyLCBpZWVlODAyMTFfdHhxc19jaGVjaywgMCk7CisJbW9k X3RpbWVyKCZsb2NhbC0+cmVtb3ZlX3RpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZm aWVzKElFRUU4MDIxMV9BSVJUSU1FX1RYUV9STV9DSEtfSU5UVl9JTl9NUykpOworCiAJSU5JVF9M SVNUX0hFQUQoJmxvY2FsLT5jaGFuY3R4X2xpc3QpOwogCW11dGV4X2luaXQoJmxvY2FsLT5jaGFu Y3R4X210eCk7CiAKQEAgLTEzMDUsNiArMTMxMCw3IEBAIHZvaWQgaWVlZTgwMjExX3VucmVnaXN0 ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiAJdGFza2xldF9raWxsKCZsb2NhbC0+dHhf cGVuZGluZ190YXNrbGV0KTsKIAl0YXNrbGV0X2tpbGwoJmxvY2FsLT50YXNrbGV0KTsKIAorCWRl bF90aW1lcl9zeW5jKCZsb2NhbC0+cmVtb3ZlX3RpbWVyKTsKICNpZmRlZiBDT05GSUdfSU5FVAog CXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJmxvY2FsLT5pZmFfbm90aWZpZXIpOwogI2Vu ZGlmCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmlu ZGV4IGQwMGJhYWEuLjQyY2EwMTAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBi L25ldC9tYWM4MDIxMS90eC5jCkBAIC0xNDUwLDYgKzE0NTAsNyBAQCB2b2lkIGllZWU4MDIxMV90 eHFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAljb2RlbF9zdGF0 c19pbml0KCZ0eHFpLT5jc3RhdHMpOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHhxaS0+ZnJh Z3MpOwogCVJCX0NMRUFSX05PREUoJnR4cWktPnNjaGVkdWxlX29yZGVyKTsKKwlJTklUX0xJU1Rf SEVBRCgmdHhxaS0+Y2FuZGlkYXRlKTsKIAogCXR4cWktPnR4cS52aWYgPSAmc2RhdGEtPnZpZjsK IApAQCAtMzcyNCw2ICszNzI1LDkgQEAgdm9pZCBpZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LAogCiAJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YWN0aXZlX3R4cV9s b2NrW2FjXSk7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJnR4cWktPmNhbmRpZGF0ZSkpCisJCWxpc3Rf ZGVsX2luaXQoJnR4cWktPmNhbmRpZGF0ZSk7CisKIAlpZiAoIVJCX0VNUFRZX05PREUoJnR4cWkt PnNjaGVkdWxlX29yZGVyKSkKIAkJZ290byBvdXQ7CiAKQEAgLTM3ODMsNiArMzc4NywyMCBAQCBz dGF0aWMgdm9pZCBfX2llZWU4MDIxMV91bnNjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywKIAlSQl9DTEVBUl9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9vcmRlcik7CiB9CiAKK3ZvaWQg aWVlZTgwMjExX3JlbW92ZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHN0cnVj dCBpZWVlODAyMTFfdHhxICp0eHEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwg PSBod190b19sb2NhbChodyk7CisJc3RydWN0IHR4cV9pbmZvICp0eHFpID0gdG9fdHhxX2luZm8o dHhxKTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tbdHhx LT5hY10pOworCisJaWYgKCFSQl9FTVBUWV9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9vcmRlcikpIHsK KwkJX19pZWVlODAyMTFfdW5zY2hlZHVsZV90eHEoaHcsIHR4cSk7CisJCWxpc3RfZGVsX2luaXQo JnR4cWktPmNhbmRpZGF0ZSk7CisJfQorfQorCiB2b2lkIGllZWU4MDIxMV91bnNjaGVkdWxlX3R4 cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhx ICp0eHEpCiAJX19hY3F1aXJlcyh0eHFfbG9jaykgX19yZWxlYXNlcyh0eHFfbG9jaykKQEAgLTM3 OTAsNyArMzgwOCw3IEBAIHZvaWQgaWVlZTgwMjExX3Vuc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9j YWwoaHcpOwogCiAJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW3R4cS0+YWNd KTsKLQlfX2llZWU4MDIxMV91bnNjaGVkdWxlX3R4cShodywgdHhxKTsKKwlpZWVlODAyMTFfcmVt b3ZlX3R4cShodywgdHhxKTsKIAlzcGluX3VubG9ja19iaCgmbG9jYWwtPmFjdGl2ZV90eHFfbG9j a1t0eHEtPmFjXSk7CiB9CiAKQEAgLTM4MDMsMTEgKzM4MjEsNDggQEAgdm9pZCBpZWVlODAyMTFf cmV0dXJuX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAlsb2NrZGVwX2Fzc2VydF9oZWxk KCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW3R4cS0+YWNdKTsKIAogCWlmICghUkJfRU1QVFlfTk9E RSgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpICYmCi0JICAgIChza2JfcXVldWVfZW1wdHkoJnR4cWkt PmZyYWdzKSAmJiAhdHhxaS0+dGluLmJhY2tsb2dfcGFja2V0cykpCi0JCV9faWVlZTgwMjExX3Vu c2NoZWR1bGVfdHhxKGh3LCB0eHEpOworCQkhdHhxX2hhc19xdWV1ZSgmdHhxaS0+dHhxKSAmJgor CQlsaXN0X2VtcHR5KCZ0eHFpLT5jYW5kaWRhdGUpKQorCQlsaXN0X2FkZF90YWlsKCZ0eHFpLT5j YW5kaWRhdGUsICZsb2NhbC0+cmVtb3ZlX2xpc3RbdHhxLT5hY10pOworCiB9CiBFWFBPUlRfU1lN Qk9MKGllZWU4MDIxMV9yZXR1cm5fdHhxKTsKIAordm9pZCBfX2llZWU4MDIxMV9jaGVja190eHFz KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgYWMpCit7CisJc3RydWN0IHR4cV9p bmZvICppdGVyLCAqdG1wOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmbG9jYWwtPmFjdGl2ZV90eHFfbG9ja1thY10pOworCisJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGl0ZXIsIHRtcCwgJmxvY2FsLT5yZW1vdmVfbGlzdFthY10sCisJCQkJIGNhbmRp ZGF0ZSkgeworCQlzdGEgPSBjb250YWluZXJfb2YoaXRlci0+dHhxLnN0YSwgc3RydWN0IHN0YV9p bmZvLCBzdGEpOworCisJCWlmICh0eHFfaGFzX3F1ZXVlKCZpdGVyLT50eHEpKQorCQkJbGlzdF9k ZWxfaW5pdCgmaXRlci0+Y2FuZGlkYXRlKTsKKwkJZWxzZQorCQkJaWVlZTgwMjExX3JlbW92ZV90 eHEoJmxvY2FsLT5odywgJml0ZXItPnR4cSk7CisJfQorfQorCit2b2lkIGllZWU4MDIxMV90eHFz X2NoZWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwg KmxvY2FsID0gZnJvbV90aW1lcihsb2NhbCwgdCwgcmVtb3ZlX3RpbWVyKTsKKwlzdHJ1Y3QgdHhx X2luZm8gKml0ZXIsICp0bXA7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IGFjOworCisJ Zm9yIChhYyA9IDA7IGFjIDwgSUVFRTgwMjExX05VTV9BQ1M7IGFjKyspIHsKKwkJc3Bpbl9sb2Nr X2JoKCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW2FjXSk7CisJCV9faWVlZTgwMjExX2NoZWNrX3R4 cXMobG9jYWwsIGFjKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tb YWNdKTsKKwl9CisKKwltb2RfdGltZXIoJmxvY2FsLT5yZW1vdmVfdGltZXIsCisJCSAgamlmZmll cyArIG1zZWNzX3RvX2ppZmZpZXMoSUVFRTgwMjExX0FJUlRJTUVfVFhRX1JNX0NIS19JTlRWX0lO X01TKSk7Cit9CisKIGJvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsCiAJCQkJc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSkKIHsKQEAgLTM4NDEs NiArMzg5Niw4IEBAIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHU4IGFjKQogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdf dG9fbG9jYWwoaHcpOwogCiAJbG9jYWwtPnNjaGVkdWxlX3Bvc1thY10gPSBOVUxMOworCV9faWVl ZTgwMjExX2NoZWNrX3R4cXMobG9jYWwsIGFjKTsKKwogCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+ YWN0aXZlX3R4cV9sb2NrW2FjXSk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfc2No ZWR1bGVfZW5kKTsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KYXRoMTBrIG1haWxpbmcgbGlzdAphdGgxMGtAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2F0aDEwawo=