From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH v3 21/24] ARM: NUMA: ACPI: Extract proximity from SRAT table Date: Tue, 18 Jul 2017 17:11:43 +0530 Message-ID: <1500378106-2620-22-git-send-email-vijay.kilari@gmail.com> References: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com, jbeulich@suse.com, Vijaya Kumar K List-Id: xen-devel@lists.xenproject.org RnJvbTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgoKUmVnaXN0ZXIg U1JBVCBlbnRyeSBoYW5kbGVyIGZvciB0eXBlCkFDUElfU1JBVF9UWVBFX0dJQ0NfQUZGSU5JVFkg dG8gcGFyc2UgU1JBVCB0YWJsZQphbmQgZXh0cmFjdCBwcm94aW1pdHkgZm9yIGFsbCBDUFUgSURz LgoKU2lnbmVkLW9mZi1ieTogVmlqYXlhIEt1bWFyIDxWaWpheWEuS3VtYXJAY2F2aXVtLmNvbT4K LS0tCiB4ZW4vYXJjaC9hcm0vYWNwaS9ib290LmMgICAgICB8ICAgMiArCiB4ZW4vYXJjaC9hcm0v bnVtYS9hY3BpX251bWEuYyB8IDEyNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0KIHhlbi9kcml2ZXJzL2FjcGkvbnVtYS5jICAgICAgIHwgIDE1ICsrKysrCiB4ZW4v aW5jbHVkZS9hY3BpL2FjdGJsMS5oICAgICB8ICAxNyArKysrKy0KIHhlbi9pbmNsdWRlL2FzbS1h cm0vbnVtYS5oICAgIHwgICA5ICsrKwogNSBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygr KSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYWNwaS9ib290LmMg Yi94ZW4vYXJjaC9hcm0vYWNwaS9ib290LmMKaW5kZXggODg5MjA4YS4uNGUyOGIxNiAxMDA2NDQK LS0tIGEveGVuL2FyY2gvYXJtL2FjcGkvYm9vdC5jCisrKyBiL3hlbi9hcmNoL2FybS9hY3BpL2Jv b3QuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWN0YWJsZXMuaD4KICNpbmNs dWRlIDx4ZW4vbW0uaD4KICNpbmNsdWRlIDx4ZW4vZGV2aWNlX3RyZWUuaD4KKyNpbmNsdWRlIDx4 ZW4vbnVtYS5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+ CkBAIC0xMTcsNiArMTE4LDcgQEAgYWNwaV9tYXBfZ2ljX2NwdV9pbnRlcmZhY2Uoc3RydWN0IGFj cGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCAqcHJvY2Vzc29yKQogICAgICAgICByZXR1cm47CiAg ICAgfQogCisgICAgbnVtYV9zZXRfY3B1X25vZGUoZW5hYmxlZF9jcHVzLCBhY3BpX2dldF9ub2Rl aWQobXBpZHIpKTsKICAgICAvKiBtYXAgdGhlIGxvZ2ljYWwgY3B1IGlkIHRvIGNwdSBNUElEUiAq LwogICAgIGNwdV9sb2dpY2FsX21hcChlbmFibGVkX2NwdXMpID0gbXBpZHI7CiAKZGlmZiAtLWdp dCBhL3hlbi9hcmNoL2FybS9udW1hL2FjcGlfbnVtYS5jIGIveGVuL2FyY2gvYXJtL251bWEvYWNw aV9udW1hLmMKaW5kZXggMzQxZTIwYjcuLjk1NjE3ZjkgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2Fy bS9udW1hL2FjcGlfbnVtYS5jCisrKyBiL3hlbi9hcmNoL2FybS9udW1hL2FjcGlfbnVtYS5jCkBA IC0zNCwxMyArMzQsNjMgQEAgc3RydWN0IGNwdWlkX3RvX2h3aWQgewogICAgIHVpbnQ2NF90IGh3 aWQ7CiB9OwogCisvKiBIb2xkcyBOT0RFIHRvIE1QSURSIG1hcHBpbmcuICovCitzdHJ1Y3Qgbm9k ZV90b19od2lkIHsKKyAgICBub2RlaWRfdCBub2RlaWQ7CisgICAgdWludDY0X3QgaHdpZDsKK307 CisKICNkZWZpbmUgUEhZU19DUFVJRF9JTlZBTElEIDB4ZmYKIAogLyogSG9sZHMgbWFwcGluZyBv ZiBDUFUgaWQgdG8gTVBJRFIgcmVhZCBmcm9tIE1BRFQgKi8KIHN0YXRpYyBzdHJ1Y3QgY3B1aWRf dG9faHdpZCBfX3JlYWRfbW9zdGx5IGNwdWlkX3RvX2h3aWRfbWFwW05SX0NQVVNdID0KICAgICB7 IFswIC4uLiBOUl9DUFVTIC0gMV0gPSB7UEhZU19DUFVJRF9JTlZBTElELCBNUElEUl9JTlZBTElE fSB9Oworc3RhdGljIHN0cnVjdCBub2RlX3RvX2h3aWQgX19yZWFkX21vc3RseSBub2RlX3RvX2h3 aWRfbWFwW05SX0NQVVNdID0KKyAgICB7IFswIC4uLiBOUl9DUFVTIC0gMV0gPSB7TlVNQV9OT19O T0RFLCBNUElEUl9JTlZBTElEfSB9Oworc3RhdGljIHVuc2lnbmVkIGludCBjcHVzX2luX3NyYXQ7 CiBzdGF0aWMgdW5zaWduZWQgaW50IG51bV9jcHVpZF90b19od2lkOwogCitub2RlaWRfdCBfX2lu aXQgYWNwaV9nZXRfbm9kZWlkKHVpbnQ2NF90IGh3aWQpCit7CisgICAgdW5zaWduZWQgaW50IGk7 CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNwdXNfaW5fc3JhdDsgaSsrICkKKyAgICB7CisgICAg ICAgIGlmICggbm9kZV90b19od2lkX21hcFtpXS5od2lkID09IGh3aWQgKQorICAgICAgICAgICAg cmV0dXJuIG5vZGVfdG9faHdpZF9tYXBbaV0ubm9kZWlkOworICAgIH0KKworICAgIHJldHVybiBO VU1BX05PX05PREU7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBhY3BpX2dldF9jcHVfaHdpZChpbnQg Y2lkKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBudW1f Y3B1aWRfdG9faHdpZDsgaSsrICkKKyAgICB7CisgICAgICAgIGlmICggY3B1aWRfdG9faHdpZF9t YXBbaV0uY3B1aWQgPT0gY2lkICkKKyAgICAgICAgICAgIHJldHVybiBjcHVpZF90b19od2lkX21h cFtpXS5od2lkOworICAgIH0KKworICAgIHJldHVybiBNUElEUl9JTlZBTElEOworfQorCitzdGF0 aWMgdm9pZCBfX2luaXQgYWNwaV9tYXBfbm9kZV90b19od2lkKG5vZGVpZF90IG5vZGVpZCwgdWlu dDY0X3QgaHdpZCkKK3sKKyAgICBpZiAoIG5vZGVpZCA+PSBNQVhfTlVNTk9ERVMgKQorICAgIHsK KyAgICAgICAgcHJpbnRrKFhFTkxPR19XQVJOSU5HCisgICAgICAgICAgICAgICAiQUNQSTogTlVN QTogbm9kZWlkIG91dCBvZiByYW5nZSAlZCB3aXRoIE1QSURSIDB4JWx4XG4iLAorICAgICAgICAg ICAgICAgbm9kZWlkLCBod2lkKTsKKyAgICAgICAgbnVtYV9mYWlsZWQoKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIG5vZGVfdG9faHdpZF9tYXBbY3B1c19pbl9zcmF0XS5ub2RlaWQg PSBub2RlaWQ7CisgICAgbm9kZV90b19od2lkX21hcFtjcHVzX2luX3NyYXRdLmh3aWQgPSBod2lk OworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgYWNwaV9tYXBfY3B1X3RvX2h3aWQodWludDMyX3Qg Y3B1aWQsIHVpbnQ2NF90IG1waWRyKQogewogICAgIGlmICggbXBpZHIgPT0gTVBJRFJfSU5WQUxJ RCApCkBAIC03NiwxNSArMTI2LDg3IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcGFyc2VfbWFk dF9oYW5kbGVyKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAogICAgIHJldHVy biAwOwogfQogCisvKiBDYWxsYmFjayBmb3IgUHJveGltaXR5IERvbWFpbiAtPiBBQ1BJIHByb2Nl c3NvciBVSUQgbWFwcGluZyAqLworc3RhdGljIHZvaWQgX19pbml0CithY3BpX251bWFfZ2ljY19h ZmZpbml0eV9pbml0KGNvbnN0IHN0cnVjdCBhY3BpX3NyYXRfZ2ljY19hZmZpbml0eSAqcGEpCit7 CisgICAgaW50IHB4bSwgbm9kZTsKKyAgICB1aW50NjRfdCBtcGlkcjsKKworICAgIGlmICggc3Jh dF9kaXNhYmxlZCgpICkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCBwYS0+aGVhZGVyLmxl bmd0aCA8IHNpemVvZihzdHJ1Y3QgYWNwaV9zcmF0X2dpY2NfYWZmaW5pdHkpICkKKyAgICB7Cisg ICAgICAgIHByaW50ayhYRU5MT0dfV0FSTklORyAiU1JBVDogSW52YWxpZCBTUkFUIGhlYWRlciBs ZW5ndGg6ICVkXG4iLAorICAgICAgICAgICAgICAgcGEtPmhlYWRlci5sZW5ndGgpOworICAgICAg ICBudW1hX2ZhaWxlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCAhKHBh LT5mbGFncyAmIEFDUElfU1JBVF9HSUNDX0VOQUJMRUQpICkKKyAgICAgICAgcmV0dXJuOworCisg ICAgaWYgKCBjcHVzX2luX3NyYXQgPj0gTlJfQ1BVUyApCisgICAgeworICAgICAgICBwcmludGso WEVOTE9HX0VSUgorICAgICAgICAgICAgICAgIlNSQVQ6IGNwdV90b19ub2RlX21hcFslZF0gaXMg dG9vIHNtYWxsIHRvIGZpdCBhbGwgY3B1c1xuIiwKKyAgICAgICAgICAgICAgIE5SX0NQVVMpOwor ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHhtID0gcGEtPnByb3hpbWl0eV9kb21haW47 CisgICAgbm9kZSA9IGFjcGlfc2V0dXBfbm9kZShweG0pOworICAgIGlmICggbm9kZSA9PSBOVU1B X05PX05PREUgKQorICAgIHsKKyAgICAgICAgbnVtYV9mYWlsZWQoKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIG1waWRyID0gYWNwaV9nZXRfY3B1X2h3aWQocGEtPmFjcGlfcHJvY2Vz c29yX3VpZCk7CisgICAgaWYgKCBtcGlkciA9PSBNUElEUl9JTlZBTElEICkKKyAgICB7CisgICAg ICAgIHByaW50ayhYRU5MT0dfRVJSCisgICAgICAgICAgICAgICAiU1JBVDogUFhNICVkIHdpdGgg QUNQSSBJRCAlZCBoYXMgbm8gdmFsaWQgTVBJRFIgaW4gTUFEVFxuIiwKKyAgICAgICAgICAgICAg IHB4bSwgcGEtPmFjcGlfcHJvY2Vzc29yX3VpZCk7CisgICAgICAgIG51bWFfZmFpbGVkKCk7Cisg ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhY3BpX21hcF9ub2RlX3RvX2h3aWQobm9kZSwg bXBpZHIpOworICAgIG5vZGVfc2V0KG5vZGUsIHByb2Nlc3Nvcl9ub2Rlc19wYXJzZWQpOworICAg IGNwdXNfaW5fc3JhdCsrOworICAgIGFjcGlfbnVtYSA9IDE7CisgICAgcHJpbnRrKFhFTkxPR19J TkZPICJTUkFUOiBQWE0gJWQgLT4gTVBJRFIgMHglbHggLT4gTm9kZSAlZFxuIiwKKyAgICAgICAg ICAgcHhtLCBtcGlkciwgbm9kZSk7Cit9CisKIHZvaWQgX19pbml0IGFjcGlfbWFwX3VpZF90b19t cGlkcih2b2lkKQogewogICAgIGFjcGlfdGFibGVfcGFyc2VfbWFkdChBQ1BJX01BRFRfVFlQRV9H RU5FUklDX0lOVEVSUlVQVCwKICAgICAgICAgICAgICAgICAgICAgYWNwaV9wYXJzZV9tYWR0X2hh bmRsZXIsIE5SX0NQVVMpOwogfQogCitzdGF0aWMgaW50IF9faW5pdAorYWNwaV9wYXJzZV9naWNj X2FmZmluaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKQoreworICAgY29uc3Qgc3Ry dWN0IGFjcGlfc3JhdF9naWNjX2FmZmluaXR5ICpwcm9jZXNzb3JfYWZmaW5pdHkKKyAgICAgICAg ICAgICAgICA9IChzdHJ1Y3QgYWNwaV9zcmF0X2dpY2NfYWZmaW5pdHkgKiloZWFkZXI7CisKKyAg IGlmICghcHJvY2Vzc29yX2FmZmluaXR5KQorICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICBh Y3BpX3RhYmxlX3ByaW50X3NyYXRfZW50cnkoaGVhZGVyKTsKKyAgIGFjcGlfbnVtYV9naWNjX2Fm ZmluaXR5X2luaXQocHJvY2Vzc29yX2FmZmluaXR5KTsKKworICAgcmV0dXJuIDA7Cit9CisKIHZv aWQgX19pbml0IGFyY2hfdGFibGVfcGFyc2Vfc3JhdCh2b2lkKQogewotICAgIHJldHVybjsKKyAg ICBhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfR0lDQ19BRkZJTklUWSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9wYXJzZV9naWNjX2FmZmluaXR5LCBOUl9DUFVT KTsKIH0KIAogdm9pZCBfX2luaXQgYWNwaV9udW1hX2FyY2hfZml4dXAodm9pZCkge30KZGlmZiAt LWdpdCBhL3hlbi9kcml2ZXJzL2FjcGkvbnVtYS5jIGIveGVuL2RyaXZlcnMvYWNwaS9udW1hLmMK aW5kZXggMGFkYzMyYy4uYjQ4ZDkxZCAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvYWNwaS9udW1h LmMKKysrIGIveGVuL2RyaXZlcnMvYWNwaS9udW1hLmMKQEAgLTEwNCw2ICsxMDQsMjEgQEAgdm9p ZCBfX2luaXQgYWNwaV90YWJsZV9wcmludF9zcmF0X2VudHJ5KHN0cnVjdCBhY3BpX3N1YnRhYmxl X2hlYWRlciAqIGhlYWRlcikKIAkJfQogI2VuZGlmCQkJCS8qIEFDUElfREVCVUdfT1VUUFVUICov CiAJCWJyZWFrOworICAgICAgIGNhc2UgQUNQSV9TUkFUX1RZUEVfR0lDQ19BRkZJTklUWToKKyNp ZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorCQl7CisJCQlzdHJ1Y3QgYWNwaV9zcmF0X2dpY2NfYWZm aW5pdHkgKnAgPQorCQkJICAgIChzdHJ1Y3QgYWNwaV9zcmF0X2dpY2NfYWZmaW5pdHkgKiloZWFk ZXI7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCQkJCSAgIlNSQVQgUHJv Y2Vzc29yIChhY3BpIGlkWzB4JTA0eF0pIGluIgorCQkJCQkgICIgcHJveGltaXR5IGRvbWFpbiAl ZCAlc1xuIiwKKwkJCQkJICBwLT5hY3BpX3Byb2Nlc3Nvcl91aWQsCisJCQkJCSAgcC0+cHJveGlt aXR5X2RvbWFpbiwKKwkJCQkJICAocC0+ZmxhZ3MgJiBBQ1BJX1NSQVRfR0lDQ19FTkFCTEVEKSA/ CisJCQkJCSAgImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJCX0KKyNlbmRpZiAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBQ1BJX0RFQlVHX09VVFBVVCAqLworICAgICAgICAgICAgICAgYnJl YWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKIAkJICAgICAgICJG b3VuZCB1bnN1cHBvcnRlZCBTUkFUIGVudHJ5ICh0eXBlID0gJSN4KVxuIiwKZGlmZiAtLWdpdCBh L3hlbi9pbmNsdWRlL2FjcGkvYWN0YmwxLmggYi94ZW4vaW5jbHVkZS9hY3BpL2FjdGJsMS5oCmlu ZGV4IGUxOTkxMzYuLmI4NGJmYmEgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FjcGkvYWN0Ymwx LmgKKysrIGIveGVuL2luY2x1ZGUvYWNwaS9hY3RibDEuaApAQCAtOTQ5LDcgKzk0OSw4IEBAIGVu dW0gYWNwaV9zcmF0X3R5cGUgewogCUFDUElfU1JBVF9UWVBFX0NQVV9BRkZJTklUWSA9IDAsCiAJ QUNQSV9TUkFUX1RZUEVfTUVNT1JZX0FGRklOSVRZID0gMSwKIAlBQ1BJX1NSQVRfVFlQRV9YMkFQ SUNfQ1BVX0FGRklOSVRZID0gMiwKLQlBQ1BJX1NSQVRfVFlQRV9SRVNFUlZFRCA9IDMJLyogMyBh bmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KKwlBQ1BJX1NSQVRfVFlQRV9HSUNDX0FGRklOSVRZ ID0gMywKKwlBQ1BJX1NSQVRfVFlQRV9SRVNFUlZFRCA9IDQJLyogNCBhbmQgZ3JlYXRlciBhcmUg cmVzZXJ2ZWQgKi8KIH07CiAKIC8qCkBAIC0xMDA3LDYgKzEwMDgsMjAgQEAgc3RydWN0IGFjcGlf c3JhdF94MmFwaWNfY3B1X2FmZmluaXR5IHsKIAogI2RlZmluZSBBQ1BJX1NSQVRfQ1BVX0VOQUJM RUQgICAgICAgKDEpCS8qIDAwOiBVc2UgYWZmaW5pdHkgc3RydWN0dXJlICovCiAKKy8qIDM6IEdJ Q0MgQWZmaW5pdHkgKEFDUEkgNS4xKSAqLworCitzdHJ1Y3QgYWNwaV9zcmF0X2dpY2NfYWZmaW5p dHkgeworCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CisJdTMyIHByb3hpbWl0 eV9kb21haW47CisJdTMyIGFjcGlfcHJvY2Vzc29yX3VpZDsKKwl1MzIgZmxhZ3M7CisJdTMyIGNs b2NrX2RvbWFpbjsKK307CisKKy8qIEZsYWdzIGZvciBzdHJ1Y3QgYWNwaV9zcmF0X2dpY2NfYWZm aW5pdHkgKi8KKworI2RlZmluZSBBQ1BJX1NSQVRfR0lDQ19FTkFCTEVEICAgICAoMSkgIC8qIDAw OiBVc2UgYWZmaW5pdHkgc3RydWN0dXJlICovCisKIC8qIFJlc2V0IHRvIGRlZmF1bHQgcGFja2lu ZyAqLwogCiAjcHJhZ21hIHBhY2soKQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9u dW1hLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL251bWEuaAppbmRleCAwZDMxNDZjLi5mMGE1MGJk IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL251bWEuaAorKysgYi94ZW4vaW5jbHVk ZS9hc20tYXJtL251bWEuaApAQCAtNyw2ICs3LDE1IEBAIHZvaWQgZHRfbnVtYV9wcm9jZXNzX21l bW9yeV9ub2RlKHVpbnQzMl90IG5pZCwgcGFkZHJfdCBzdGFydCwgcGFkZHJfdCBzaXplKTsKIHZv aWQgcmVnaXN0ZXJfbm9kZV9kaXN0YW5jZSh1aW50OF90IChmbikobm9kZWlkX3QgYSwgbm9kZWlk X3QgYikpOwogdm9pZCBpbml0X2R0X251bWFfZGlzdGFuY2Uodm9pZCk7CiAKKyNpZmRlZiBDT05G SUdfQUNQSV9OVU1BCitub2RlaWRfdCBhY3BpX2dldF9ub2RlaWQodWludDY0X3QgaHdpZCk7Cisj ZWxzZQorc3RhdGljIGlubGluZSBub2RlaWRfdCBhY3BpX2dldF9ub2RlaWQodWludDY0X3QgaHdp ZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfQUNQSV9OVU1BICovCisK ICNpZmRlZiBDT05GSUdfTlVNQQogdm9pZCBudW1hX2luaXQodm9pZCk7CiBpbnQgZHRfbnVtYV9p bml0KHZvaWQpOwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK