From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1bCiRv-0001hT-HT for barebox@lists.infradead.org; Tue, 14 Jun 2016 07:07:52 +0000 Received: by mail-wm0-x243.google.com with SMTP id n184so19970583wmn.1 for ; Tue, 14 Jun 2016 00:07:28 -0700 (PDT) From: Raphael Poggi Date: Tue, 14 Jun 2016 09:06:45 +0200 Message-Id: <1465888006-39463-12-git-send-email-poggi.raph@gmail.com> In-Reply-To: <1465888006-39463-1-git-send-email-poggi.raph@gmail.com> References: <1465888006-39463-1-git-send-email-poggi.raph@gmail.com> 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: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH v2 11/12] arm: cpu: add basic arm64 mmu support To: barebox@lists.infradead.org Cc: Raphael Poggi VGhpcyBjb21taXQgYWRkcyBiYXNpYyBtbXUgc3VwcG9ydCwgaWU6CiAgICAgICAgLSBETUEgY2Fj aGUgaGFuZGxpbmcgaXMgbm90IHN1cHBvcnRlZAogICAgICAgIC0gUmVtYXBwaW5nIG1lbW9yeSBy ZWdpb24gYWxzbwoKVGhlIGN1cnJlbnQgbW11IHNldHRpbmcgaXM6CiAgICAgICAgLSA0S0IgZ3Jh bnVsYXJpdHkKICAgICAgICAtIDMgbGV2ZWwgbG9va3VwIChza2lwcGluZyBMMCkKICAgICAgICAt IDMzIGJpdHMgcGVyIFZBCgpUaGlzIGlzIGJhc2VkIG9uIGNvcmVib290IGFuZCB1LWJvb3QgbW11 IGNvbmZpZ3VyYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBSYXBoYWVsIFBvZ2dpIDxwb2dnaS5yYXBo QGdtYWlsLmNvbT4KLS0tCiBhcmNoL2FybS9jcHUvTWFrZWZpbGUgICAgICAgICAgICB8ICAgNCAr LQogYXJjaC9hcm0vY3B1L21tdS5oICAgICAgICAgICAgICAgfCAgNTQgKysrKysrKwogYXJjaC9h cm0vY3B1L21tdV82NC5jICAgICAgICAgICAgfCAzMzMgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBhcmNoL2FybS9pbmNsdWRlL2FzbS9tbXUuaCAgICAgICB8ICAxNCAr LQogYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZTY0LmggfCAxNDAgKysrKysrKysrKysrKysr KwogNSBmaWxlcyBjaGFuZ2VkLCA1NDAgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9jcHUvbW11XzY0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBhcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlNjQuaAoKZGlmZiAtLWdpdCBhL2FyY2gvYXJt L2NwdS9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9NYWtlZmlsZQppbmRleCA4NmE0YTkwLi43Y2Y1 ZGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vY3B1 L01ha2VmaWxlCkBAIC0yNCw4ICsyNCw4IEBAIGVuZGlmCiBvYmotJChDT05GSUdfQ01EX0FSTV9D UFVJTkZPKSArPSBjcHVpbmZvLm8KIG9iai0kKENPTkZJR19DTURfQVJNX01NVUlORk8pICs9IG1t dWluZm8ubwogb2JqLSQoQ09ORklHX09GREVWSUNFKSArPSBkdGIubwotb2JqLSQoQ09ORklHX01N VSkgKz0gbW11Lm8gY2FjaGUubyBtbXUtZWFybHkubwotcGJsLSQoQ09ORklHX01NVSkgKz0gbW11 LWVhcmx5Lm8KK29iai0kKENPTkZJR19NTVUpICs9IGNhY2hlLm8KKwogaWZlcSAoJChDT05GSUdf TU1VKSwpCiBvYmoteSArPSBuby1tbXUubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Nw dS9tbXUuaCBiL2FyY2gvYXJtL2NwdS9tbXUuaAppbmRleCA3OWViYzgwLi4xODZkNDA4IDEwMDY0 NAotLS0gYS9hcmNoL2FybS9jcHUvbW11LmgKKysrIGIvYXJjaC9hcm0vY3B1L21tdS5oCkBAIC0x LDYgKzEsNjAgQEAKICNpZm5kZWYgX19BUk1fTU1VX0gKICNkZWZpbmUgX19BUk1fTU1VX0gKIAor I2lmZGVmIENPTkZJR19DUFVfNjR2OAorCisjZGVmaW5lIFRDUl9GTEFHUwkJKFRDUl9URzBfNEsg fCBcCisJCVRDUl9TSEFSRURfT1VURVIgfCBcCisJCVRDUl9TSEFSRURfSU5ORVIgfCBcCisJCVRD Ul9JUkdOX1dCV0EgfCBcCisJCVRDUl9PUkdOX1dCV0EgfCBcCisJCVRDUl9UMFNaKEJJVFNfUEVS X1ZBKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RhdGljIGlubGluZSB2b2lkIHNldF90 dGJyX3Rjcl9tYWlyKGludCBlbCwgdWludDY0X3QgdGFibGUsIHVpbnQ2NF90IHRjciwgdWludDY0 X3QgYXR0cikKK3sKKwlhc20gdm9sYXRpbGUoImRzYiBzeSIpOworCWlmIChlbCA9PSAxKSB7CisJ CWFzbSB2b2xhdGlsZSgibXNyIHR0YnIwX2VsMSwgJTAiIDogOiAiciIgKHRhYmxlKSA6ICJtZW1v cnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJtc3IgdGNyX2VsMSwgJTAiIDogOiAiciIgKHRjcikgOiAi bWVtb3J5Iik7CisJCWFzbSB2b2xhdGlsZSgibXNyIG1haXJfZWwxLCAlMCIgOiA6ICJyIiAoYXR0 cikgOiAibWVtb3J5Iik7CisJfSBlbHNlIGlmIChlbCA9PSAyKSB7CisJCWFzbSB2b2xhdGlsZSgi bXNyIHR0YnIwX2VsMiwgJTAiIDogOiAiciIgKHRhYmxlKSA6ICJtZW1vcnkiKTsKKwkJYXNtIHZv bGF0aWxlKCJtc3IgdGNyX2VsMiwgJTAiIDogOiAiciIgKHRjcikgOiAibWVtb3J5Iik7CisJCWFz bSB2b2xhdGlsZSgibXNyIG1haXJfZWwyLCAlMCIgOiA6ICJyIiAoYXR0cikgOiAibWVtb3J5Iik7 CisJfSBlbHNlIGlmIChlbCA9PSAzKSB7CisJCWFzbSB2b2xhdGlsZSgibXNyIHR0YnIwX2VsMywg JTAiIDogOiAiciIgKHRhYmxlKSA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJtc3IgdGNy X2VsMywgJTAiIDogOiAiciIgKHRjcikgOiAibWVtb3J5Iik7CisJCWFzbSB2b2xhdGlsZSgibXNy IG1haXJfZWwzLCAlMCIgOiA6ICJyIiAoYXR0cikgOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJ aGFuZygpOworCX0KKwlhc20gdm9sYXRpbGUoImlzYiIpOworfQorCitzdGF0aWMgaW5saW5lIHVp bnQ2NF90IGdldF90dGJyKGludCBlbCkKK3sKKwl1aW50NjRfdCB2YWw7CisJaWYgKGVsID09IDEp IHsKKwkJYXNtIHZvbGF0aWxlKCJtcnMgJTAsIHR0YnIwX2VsMSIgOiAiPXIiICh2YWwpKTsKKwl9 IGVsc2UgaWYgKGVsID09IDIpIHsKKwkJYXNtIHZvbGF0aWxlKCJtcnMgJTAsIHR0YnIwX2VsMiIg OiAiPXIiICh2YWwpKTsKKwl9IGVsc2UgaWYgKGVsID09IDMpIHsKKwkJYXNtIHZvbGF0aWxlKCJt cnMgJTAsIHR0YnIwX2VsMyIgOiAiPXIiICh2YWwpKTsKKwl9IGVsc2UgeworCQloYW5nKCk7CisJ fQorCisJcmV0dXJuIHZhbDsKK30KKwordm9pZCBtbXVfZWFybHlfZW5hYmxlKHVpbnQ2NF90IG1l bWJhc2UsIHVpbnQ2NF90IG1lbXNpemUsIHVpbnQ2NF90IF90dGIpOworCisjZW5kaWYKKworI2Vu ZGlmIC8qIENPTkZJR19DUFVfNjR2OCAqLworCiAjaWZkZWYgQ09ORklHX01NVQogdm9pZCBfX21t dV9jYWNoZV9vbih2b2lkKTsKIHZvaWQgX19tbXVfY2FjaGVfb2ZmKHZvaWQpOwpkaWZmIC0tZ2l0 IGEvYXJjaC9hcm0vY3B1L21tdV82NC5jIGIvYXJjaC9hcm0vY3B1L21tdV82NC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NmFhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9h cmNoL2FybS9jcHUvbW11XzY0LmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMDktMjAxMyBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+LCBQZW5n dXRyb25peAorICogQ29weXJpZ2h0IChjKSAyMDE2IFJhcGhhw6tsIFBvZ2dpIDxwb2dnaS5yYXBo QGdtYWlsLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3 aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNkZWZpbmUgcHJfZm10KGZt dCkJIm1tdTogIiBmbXQKKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGRtYS1kaXIu aD4KKyNpbmNsdWRlIDxpbml0Lmg+CisjaW5jbHVkZSA8bW11Lmg+CisjaW5jbHVkZSA8ZXJybm8u aD4KKyNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNp bmNsdWRlIDxhc20vYmFyZWJveC1hcm0uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5j bHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3N5 c3RlbV9pbmZvLmg+CisKKyNpbmNsdWRlICJtbXUuaCIKKworc3RhdGljIHVpbnQ2NF90ICp0dGI7 CitzdGF0aWMgaW50IGZyZWVfaWR4OworCitzdGF0aWMgdm9pZCBhcm1fbW11X25vdF9pbml0aWFs aXplZF9lcnJvcih2b2lkKQoreworCS8qCisJICogVGhpcyBtZWFuczoKKwkgKiAtIG9uZSBvZiB0 aGUgTU1VIGZ1bmN0aW9ucyBsaWtlIGRtYV9hbGxvY19jb2hlcmVudAorCSAqICAgb3IgcmVtYXBf cmFuZ2UgaXMgY2FsbGVkIHRvbyBlYXJseSwgYmVmb3JlIHRoZSBNTVUgaXMgaW5pdGlhbGl6ZWQK KwkgKiAtIE9yIHRoZSBNTVUgaW5pdGlhbGl6YXRpb24gaGFzIGZhaWxlZCBlYXJsaWVyCisJICov CisJcGFuaWMoIk1NVSBub3QgaW5pdGlhbGl6ZWRcbiIpOworfQorCisKKy8qCisgKiBEbyBpdCB0 aGUgc2ltcGxlIHdheSBmb3Igbm93IGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUKKyAqIHRsYgor ICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ludmFsaWRhdGUodm9pZCkKK3sKKwl1bnNpZ25l ZCBpbnQgZWwgPSBjdXJyZW50X2VsKCk7CisKKwlkc2IoKTsKKworCWlmIChlbCA9PSAxKQorCQlf X2FzbV9fIF9fdm9sYXRpbGVfXygidGxiaSBhbGxlMVxuXHQiIDogOiA6ICJtZW1vcnkiKTsKKwll bHNlIGlmIChlbCA9PSAyKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygidGxiaSBhbGxlMlxuXHQi IDogOiA6ICJtZW1vcnkiKTsKKwllbHNlIGlmIChlbCA9PSAzKQorCQlfX2FzbV9fIF9fdm9sYXRp bGVfXygidGxiaSBhbGxlM1xuXHQiIDogOiA6ICJtZW1vcnkiKTsKKworCWRzYigpOworCWlzYigp OworfQorCitzdGF0aWMgaW50IGxldmVsMnNoaWZ0KGludCBsZXZlbCkKK3sKKwkvKiBQYWdlIGlz IDEyIGJpdHMgd2lkZSwgZXZlcnkgbGV2ZWwgdHJhbnNsYXRlcyA5IGJpdHMgKi8KKwlyZXR1cm4g KDEyICsgOSAqICgzIC0gbGV2ZWwpKTsKK30KKworc3RhdGljIHVpbnQ2NF90IGxldmVsMm1hc2so aW50IGxldmVsKQoreworCXVpbnQ2NF90IG1hc2sgPSAtRUlOVkFMOworCisJaWYgKGxldmVsID09 IDEpCisJCW1hc2sgPSBMMV9BRERSX01BU0s7CisJZWxzZSBpZiAobGV2ZWwgPT0gMikKKwkJbWFz ayA9IEwyX0FERFJfTUFTSzsKKwllbHNlIGlmIChsZXZlbCA9PSAzKQorCQltYXNrID0gTDNfQURE Ul9NQVNLOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgcHRlX3R5cGUodWludDY0 X3QgKnB0ZSkKK3sKKwlyZXR1cm4gKnB0ZSAmIFBNRF9UWVBFX01BU0s7Cit9CisKK3N0YXRpYyB2 b2lkIHNldF90YWJsZSh1aW50NjRfdCAqcHQsIHVpbnQ2NF90ICp0YWJsZV9hZGRyKQoreworCXVp bnQ2NF90IHZhbDsKKworCXZhbCA9IFBNRF9UWVBFX1RBQkxFIHwgKHVpbnQ2NF90KXRhYmxlX2Fk ZHI7CisJKnB0ID0gdmFsOworfQorCitzdGF0aWMgdWludDY0X3QgKmNyZWF0ZV90YWJsZSh2b2lk KQoreworCXVpbnQ2NF90ICpuZXdfdGFibGUgPSB0dGIgKyBmcmVlX2lkeCAqIEdSQU5VTEVfU0la RTsKKworCS8qIE1hcmsgYWxsIGVudHJpZXMgYXMgaW52YWxpZCAqLworCW1lbXNldChuZXdfdGFi bGUsIDAsIEdSQU5VTEVfU0laRSk7CisKKwlmcmVlX2lkeCsrOworCisJcmV0dXJuIG5ld190YWJs ZTsKK30KKworc3RhdGljIHVpbnQ2NF90ICpnZXRfbGV2ZWxfdGFibGUodWludDY0X3QgKnB0ZSkK K3sKKwl1aW50NjRfdCAqdGFibGUgPSAodWludDY0X3QgKikoKnB0ZSAmIFhMQVRfQUREUl9NQVNL KTsKKworCWlmIChwdGVfdHlwZShwdGUpICE9IFBNRF9UWVBFX1RBQkxFKSB7CisJCXRhYmxlID0g Y3JlYXRlX3RhYmxlKCk7CisJCXNldF90YWJsZShwdGUsIHRhYmxlKTsKKwl9CisKKwlyZXR1cm4g dGFibGU7Cit9CisKK3N0YXRpYyB1aW50NjRfdCAqZmluZF9wdGUodWludDY0X3QgYWRkcikKK3sK Kwl1aW50NjRfdCAqcHRlOworCXVpbnQ2NF90IGJsb2NrX3NoaWZ0OworCXVpbnQ2NF90IGlkeDsK KwlpbnQgaTsKKworCXB0ZSA9IHR0YjsKKworCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJ YmxvY2tfc2hpZnQgPSBsZXZlbDJzaGlmdChpKTsKKwkJaWR4ID0gKGFkZHIgJiBsZXZlbDJtYXNr KGkpKSA+PiBibG9ja19zaGlmdDsKKwkJcHRlICs9IGlkeDsKKworCQlpZiAoKHB0ZV90eXBlKHB0 ZSkgIT0gUE1EX1RZUEVfVEFCTEUpIHx8IChibG9ja19zaGlmdCA8PSBHUkFOVUxFX1NJWkVfU0hJ RlQpKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXB0ZSA9ICh1aW50NjRfdCAqKSgqcHRlICYgWExB VF9BRERSX01BU0spOworCX0KKworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyB2b2lkIG1hcF9y ZWdpb24odWludDY0X3QgdmlydCwgdWludDY0X3QgcGh5cywgdWludDY0X3Qgc2l6ZSwgdWludDY0 X3QgYXR0cikKK3sKKwl1aW50NjRfdCBibG9ja19zaXplOworCXVpbnQ2NF90IGJsb2NrX3NoaWZ0 OworCXVpbnQ2NF90ICpwdGU7CisJdWludDY0X3QgaWR4OworCXVpbnQ2NF90IGFkZHI7CisJdWlu dDY0X3QgKnRhYmxlOworCWludCBsZXZlbDsKKworCWlmICghdHRiKQorCQlhcm1fbW11X25vdF9p bml0aWFsaXplZF9lcnJvcigpOworCisJYWRkciA9IHZpcnQ7CisKKwlhdHRyICY9IH4oUE1EX1RZ UEVfU0VDVCk7CisKKwl3aGlsZSAoc2l6ZSkgeworCQl0YWJsZSA9IHR0YjsKKwkJZm9yIChsZXZl bCA9IDE7IGxldmVsIDwgNDsgbGV2ZWwrKykgeworCQkJYmxvY2tfc2hpZnQgPSBsZXZlbDJzaGlm dChsZXZlbCk7CisJCQlpZHggPSAoYWRkciAmIGxldmVsMm1hc2sobGV2ZWwpKSA+PiBibG9ja19z aGlmdDsKKwkJCWJsb2NrX3NpemUgPSAoMSA8PCBibG9ja19zaGlmdCk7CisKKwkJCXB0ZSA9IHRh YmxlICsgaWR4OworCisJCQlpZiAobGV2ZWwgPT0gMykKKwkJCQlhdHRyIHw9IFBURV9UWVBFX1BB R0U7CisJCQllbHNlCisJCQkJYXR0ciB8PSBQTURfVFlQRV9TRUNUOworCisJCQlpZiAoc2l6ZSA+ PSBibG9ja19zaXplICYmIElTX0FMSUdORUQoYWRkciwgYmxvY2tfc2l6ZSkpIHsKKwkJCQkqcHRl ID0gcGh5cyB8IGF0dHI7CisJCQkJYWRkciArPSBibG9ja19zaXplOworCQkJCXBoeXMgKz0gYmxv Y2tfc2l6ZTsKKwkJCQlzaXplIC09IGJsb2NrX3NpemU7CisJCQkJYnJlYWs7CisKKwkJCX0KKwor CQkJdGFibGUgPSBnZXRfbGV2ZWxfdGFibGUocHRlKTsKKwkJfQorCisJfQorfQorCitzdGF0aWMg dm9pZCBjcmVhdGVfc2VjdGlvbnModWludDY0X3QgdmlydCwgdWludDY0X3QgcGh5cywgdWludDY0 X3Qgc2l6ZV9tLCB1aW50NjRfdCBmbGFncykKK3sKKworCW1hcF9yZWdpb24odmlydCwgcGh5cywg c2l6ZV9tLCBmbGFncyk7Cit9CisKK3ZvaWQgKm1hcF9pb19zZWN0aW9ucyh1bnNpZ25lZCBsb25n IHBoeXMsIHZvaWQgKl9zdGFydCwgc2l6ZV90IHNpemUpCit7CisKKwltYXBfcmVnaW9uKCh1aW50 NjRfdClfc3RhcnQsIHBoeXMsICh1aW50NjRfdClzaXplLCBVTkNBQ0hFRF9NRU0pOworCisJdGxi X2ludmFsaWRhdGUoKTsKKwlyZXR1cm4gX3N0YXJ0OworfQorCisKK2ludCBhcmNoX3JlbWFwX3Jh bmdlKHZvaWQgKl9zdGFydCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGZsYWdzKQoreworCW1hcF9y ZWdpb24oKHVpbnQ2NF90KV9zdGFydCwgKHVpbnQ2NF90KV9zdGFydCwgKHVpbnQ2NF90KXNpemUs IGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUHJlcGFyZSBNTVUgZm9yIHVzYWdl IGVuYWJsZSBpdC4KKyAqLworc3RhdGljIGludCBtbXVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBt ZW1vcnlfYmFuayAqYmFuazsKKworCWlmIChsaXN0X2VtcHR5KCZtZW1vcnlfYmFua3MpKQorCQkv KgorCQkgKiBJZiB5b3Ugc2VlIHRoaXMgaXQgbWVhbnMgeW91IGhhdmUgbm8gbWVtb3J5IHJlZ2lz dGVyZWQuCisJCSAqIFRoaXMgY2FuIGJlIGRvbmUgZWl0aGVyIHdpdGggYXJtX2FkZF9tZW1fZGV2 aWNlKCkgaW4gYW4KKwkJICogaW5pdGNhbGwgcHJpb3IgdG8gbW11X2luaXRjYWxsIG9yIHZpYSBk ZXZpY2V0cmVlIGluIHRoZQorCQkgKiBtZW1vcnkgbm9kZS4KKwkJICovCisJCXBhbmljKCJNTVU6 IE5vIG1lbW9yeSBiYW5rIGZvdW5kISBDYW5ub3QgY29udGludWVcbiIpOworCisJaWYgKGdldF9j cigpICYgQ1JfTSkgeworCQl0dGIgPSAodWludDY0X3QgKilnZXRfdHRicigxKTsKKwkJaWYgKCFy ZXF1ZXN0X3NkcmFtX3JlZ2lvbigidHRiIiwgKHVuc2lnbmVkIGxvbmcpdHRiLCBTWl8xNkspKQor CQkJLyoKKwkJCSogVGhpcyBjYW4gbWVhbiB0aGF0OgorCQkJKiAtIHRoZSBlYXJseSBNTVUgY29k ZSBoYXMgcHV0IHRoZSB0dGIgaW50byBhIHBsYWNlCisJCQkqICAgd2hpY2ggd2UgZG9uJ3QgaGF2 ZSBpbnNpZGUgb3VyIGF2YWlsYWJsZSBtZW1vcnkKKwkJCSogLSBTb21lYm9keSBlbHNlIGhhcyBv Y2N1cGllZCB0aGUgdHRiIHJlZ2lvbiB3aGljaCBtZWFucworCQkJKiAgIHRoZSB0dGIgd2lsbCBn ZXQgY29ycnVwdGVkLgorCQkJKi8KKwkJCXByX2NyaXQoIkNyaXRpY2FsIEVycm9yOiBDYW4ndCBy ZXF1ZXN0IFNEUkFNIHJlZ2lvbiBmb3IgdHRiIGF0ICVwXG4iLAorCQkJCXR0Yik7CisJfSBlbHNl IHsKKwkJdHRiID0gbWVtYWxpZ24oMHgxMDAwLCBTWl8xNkspOworCQlmcmVlX2lkeCA9IDE7CisK KwkJbWVtc2V0KHR0YiwgMCwgR1JBTlVMRV9TSVpFKTsKKworCQlzZXRfdHRicl90Y3JfbWFpcihj dXJyZW50X2VsKCksICh1aW50NjRfdCl0dGIsIFRDUl9GTEFHUywgVU5DQUNIRURfTUVNKTsKKwl9 CisKKwlwcl9kZWJ1ZygidHRiOiAweCVwXG4iLCB0dGIpOworCisJLyogY3JlYXRlIGEgZmxhdCBt YXBwaW5nIHVzaW5nIDFNaUIgc2VjdGlvbnMgKi8KKwljcmVhdGVfc2VjdGlvbnMoMCwgMCwgR1JB TlVMRV9TSVpFLCBVTkNBQ0hFRF9NRU0pOworCisJLyoKKwkgKiBGaXJzdCByZW1hcCBzZHJhbSBj YWNoZWQgdXNpbmcgc2VjdGlvbnMuCisJICogVGhpcyBpcyB0byBzcGVlZCB1cCB0aGUgZ2VuZXJh dGlvbiBvZiAybmQgbGV2ZWwgcGFnZSB0YWJsZXMKKwkgKiBiZWxvdworCSAqLworCWZvcl9lYWNo X21lbW9yeV9iYW5rKGJhbmspCisJCWNyZWF0ZV9zZWN0aW9ucyhiYW5rLT5zdGFydCwgYmFuay0+ c3RhcnQsIGJhbmstPnNpemUsIENBQ0hFRF9NRU0pOworCisJcmV0dXJuIDA7Cit9CittbXVfaW5p dGNhbGwobW11X2luaXQpOworCit2b2lkIG1tdV9lbmFibGUodm9pZCkKK3sKKwlpZiAoIXR0YikK KwkJYXJtX21tdV9ub3RfaW5pdGlhbGl6ZWRfZXJyb3IoKTsKKworCWlmICghKGdldF9jcigpICYg Q1JfTSkpIHsKKworCQlpc2IoKTsKKwkJc2V0X2NyKGdldF9jcigpIHwgQ1JfTSB8IENSX0MgfCBD Ul9JKTsKKwl9Cit9CisKK3ZvaWQgbW11X2Rpc2FibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQg Y3I7CisKKwlpZiAoIXR0YikKKwkJYXJtX21tdV9ub3RfaW5pdGlhbGl6ZWRfZXJyb3IoKTsKKwor CWNyID0gZ2V0X2NyKCk7CisJY3IgJj0gfihDUl9NIHwgQ1JfQyB8IENSX0kpOworCisJdGxiX2lu dmFsaWRhdGUoKTsKKworCWRzYigpOworCWlzYigpOworCisJc2V0X2NyKGNyKTsKKworCWRzYigp OworCWlzYigpOworfQorCit2b2lkIG1tdV9lYXJseV9lbmFibGUodWludDY0X3QgbWVtYmFzZSwg dWludDY0X3QgbWVtc2l6ZSwgdWludDY0X3QgX3R0YikKK3sKKwl0dGIgPSAodWludDY0X3QgKilf dHRiOworCisJbWVtc2V0KHR0YiwgMCwgR1JBTlVMRV9TSVpFKTsKKwlmcmVlX2lkeCA9IDE7CisK KwlzZXRfdHRicl90Y3JfbWFpcihjdXJyZW50X2VsKCksICh1aW50NjRfdCl0dGIsIFRDUl9GTEFH UywgVU5DQUNIRURfTUVNKTsKKworCWNyZWF0ZV9zZWN0aW9ucygwLCAwLCA0MDk2LCBVTkNBQ0hF RF9NRU0pOworCisJY3JlYXRlX3NlY3Rpb25zKG1lbWJhc2UsIG1lbWJhc2UsIG1lbXNpemUsIENB Q0hFRF9NRU0pOworCisJaXNiKCk7CisJc2V0X2NyKGdldF9jcigpIHwgQ1JfTSk7Cit9CisKK3Vu c2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKnZpcnQpCit7CisJcmV0dXJu ICh1bnNpZ25lZCBsb25nKXZpcnQ7Cit9CisKK3ZvaWQgKnBoeXNfdG9fdmlydCh1bnNpZ25lZCBs b25nIHBoeXMpCit7CisJcmV0dXJuICh2b2lkICopcGh5czsKK30KZGlmZiAtLWdpdCBhL2FyY2gv YXJtL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKaW5kZXgg OGRlNjU0NC4uZjY4YWIzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgK KysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKQEAgLTYsMTYgKzYsMjQgQEAKICNpbmNs dWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDx4ZnVuY3MuaD4KIAorI2lmZGVmIENPTkZJR19DUFVf NjR2OAorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlNjQuaD4KKworI2RlZmluZSBERVZfTUVNCQkoUE1E X0FUVFJJTkRYKE1UX0RFVklDRV9uR25SbkUpIHwgUE1EX1NFQ1RfQUYgfCBQTURfVFlQRV9TRUNU KQorI2RlZmluZSBDQUNIRURfTUVNCShQTURfQVRUUklORFgoTVRfTk9STUFMKSB8IFBNRF9TRUNU X1MgfCBQTURfU0VDVF9BRiB8IFBNRF9UWVBFX1NFQ1QpCisjZGVmaW5lIFVOQ0FDSEVEX01FTQko UE1EX0FUVFJJTkRYKE1UX05PUk1BTF9OQykgfCBQTURfU0VDVF9TIHwgUE1EX1NFQ1RfQUYgfCBQ TURfVFlQRV9TRUNUKQorI2Vsc2UKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAjZGVmaW5l IFBNRF9TRUNUX0RFRl9VTkNBQ0hFRCAoUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfU0VDVF9BUF9S RUFEIHwgUE1EX1RZUEVfU0VDVCkKICNkZWZpbmUgUE1EX1NFQ1RfREVGX0NBQ0hFRCAoUE1EX1NF Q1RfV0IgfCBQTURfU0VDVF9ERUZfVU5DQUNIRUQpCisjZW5kaWYKKworCiAKIHN0cnVjdCBhcm1f bWVtb3J5OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW11X2VuYWJsZSh2b2lkKQotewotfQordm9p ZCBtbXVfZW5hYmxlKHZvaWQpOwogdm9pZCBtbXVfZGlzYWJsZSh2b2lkKTsKIHN0YXRpYyBpbmxp bmUgdm9pZCBhcm1fY3JlYXRlX3NlY3Rpb24odW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBs b25nIHBoeXMsIGludCBzaXplX20sCiAJCXVuc2lnbmVkIGludCBmbGFncykKZGlmZiAtLWdpdCBh L2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGU2NC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20v cGd0YWJsZTY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiZWE1Ygot LS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGU2NC5oCkBAIC0w LDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2lmbmRlZiBfX0FTTV9QR1RBQkxFNjRfSAorI2RlZmlu ZSBfX0FTTV9QR1RBQkxFNjRfSAorCisjZGVmaW5lIFVMKHgpCQlfQUMoeCwgVUwpCisKKyNkZWZp bmUgVU5VU0VEX0RFU0MgICAgICAgICAgICAgICAgMHg2RWJBQUQwQkJBRGJBNkUwCisKKyNkZWZp bmUgVkFfU1RBUlQgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIEJJVFNfUEVSX1ZBICAg ICAgICAgICAgICAgIDMzCisKKy8qIEdyYW51bGUgc2l6ZSBvZiA0S0IgaXMgYmVpbmcgdXNlZCAq LworI2RlZmluZSBHUkFOVUxFX1NJWkVfU0hJRlQgICAgICAgICAxMgorI2RlZmluZSBHUkFOVUxF X1NJWkUgICAgICAgICAgICAgICAoMSA8PCBHUkFOVUxFX1NJWkVfU0hJRlQpCisjZGVmaW5lIFhM QVRfQUREUl9NQVNLICAgICAgICAgICAgICgoMVVMIDw8IEJJVFNfUEVSX1ZBKSAtIEdSQU5VTEVf U0laRSkKKyNkZWZpbmUgR1JBTlVMRV9TSVpFX01BU0sgICAgICAgICAgKCgxIDw8IEdSQU5VTEVf U0laRV9TSElGVCkgLSAxKQorCisjZGVmaW5lIEJJVFNfUkVTT0xWRURfUEVSX0xWTCAgIChHUkFO VUxFX1NJWkVfU0hJRlQgLSAzKQorI2RlZmluZSBMMV9BRERSX1NISUZUICAgICAgICAgICAoR1JB TlVMRV9TSVpFX1NISUZUICsgQklUU19SRVNPTFZFRF9QRVJfTFZMICogMikKKyNkZWZpbmUgTDJf QUREUl9TSElGVCAgICAgICAgICAgKEdSQU5VTEVfU0laRV9TSElGVCArIEJJVFNfUkVTT0xWRURf UEVSX0xWTCAqIDEpCisjZGVmaW5lIEwzX0FERFJfU0hJRlQgICAgICAgICAgIChHUkFOVUxFX1NJ WkVfU0hJRlQgKyBCSVRTX1JFU09MVkVEX1BFUl9MVkwgKiAwKQorCisKKyNkZWZpbmUgTDFfQURE Ul9NQVNLICAgICAoKCgxVUwgPDwgQklUU19SRVNPTFZFRF9QRVJfTFZMKSAtIDEpIDw8IEwxX0FE RFJfU0hJRlQpCisjZGVmaW5lIEwyX0FERFJfTUFTSyAgICAgKCgoMVVMIDw8IEJJVFNfUkVTT0xW RURfUEVSX0xWTCkgLSAxKSA8PCBMMl9BRERSX1NISUZUKQorI2RlZmluZSBMM19BRERSX01BU0sg ICAgICgoKDFVTCA8PCBCSVRTX1JFU09MVkVEX1BFUl9MVkwpIC0gMSkgPDwgTDNfQUREUl9TSElG VCkKKworLyogVGhlc2UgbWFjcm9zIGdpdmUgdGhlIHNpemUgb2YgdGhlIHJlZ2lvbiBhZGRyZXNz ZWQgYnkgZWFjaCBlbnRyeSBvZiBhIHhsYXQKKyAgIHRhYmxlIGF0IGFueSBnaXZlbiBsZXZlbCAq LworI2RlZmluZSBMM19YTEFUX1NJWkUgICAgICAgICAgICAgICAoMVVMIDw8IEwzX0FERFJfU0hJ RlQpCisjZGVmaW5lIEwyX1hMQVRfU0laRSAgICAgICAgICAgICAgICgxVUwgPDwgTDJfQUREUl9T SElGVCkKKyNkZWZpbmUgTDFfWExBVF9TSVpFICAgICAgICAgICAgICAgKDFVTCA8PCBMMV9BRERS X1NISUZUKQorCisjZGVmaW5lIEdSQU5VTEVfTUFTSwlHUkFOVUxFX1NJWkUKKworCisvKgorICog TGV2ZWwgMiBkZXNjcmlwdG9yIChQTUQpLgorICovCisjZGVmaW5lIFBNRF9UWVBFX01BU0sJCSgz IDw8IDApCisjZGVmaW5lIFBNRF9UWVBFX0ZBVUxUCQkoMCA8PCAwKQorI2RlZmluZSBQTURfVFlQ RV9UQUJMRQkJKDMgPDwgMCkKKyNkZWZpbmUgUE1EX1RZUEVfU0VDVAkJKDEgPDwgMCkKKyNkZWZp bmUgUE1EX1RBQkxFX0JJVAkJKDEgPDwgMSkKKworLyoKKyAqIFNlY3Rpb24KKyAqLworI2RlZmlu ZSBQTURfU0VDVF9WQUxJRAkJKDEgPDwgMCkKKyNkZWZpbmUgUE1EX1NFQ1RfVVNFUgkJKDEgPDwg NikJCS8qIEFQWzFdICovCisjZGVmaW5lIFBNRF9TRUNUX1JET05MWQkJKDEgPDwgNykJCS8qIEFQ WzJdICovCisjZGVmaW5lIFBNRF9TRUNUX1MJCSgzIDw8IDgpCisjZGVmaW5lIFBNRF9TRUNUX0FG CQkoMSA8PCAxMCkKKyNkZWZpbmUgUE1EX1NFQ1RfTkcJCSgxIDw8IDExKQorI2RlZmluZSBQTURf U0VDVF9DT05UCQkoMSA8PCA1MikKKyNkZWZpbmUgUE1EX1NFQ1RfUFhOCQkoMSA8PCA1MykKKyNk ZWZpbmUgUE1EX1NFQ1RfVVhOCQkoMSA8PCA1NCkKKworLyoKKyAqIEF0dHJJbmR4WzI6MF0gZW5j b2RpbmcgKG1hcHBpbmcgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBNQUlSKiByZWdpc3RlcnMp LgorICovCisjZGVmaW5lIFBNRF9BVFRSSU5EWCh0KQkJKCh0KSA8PCAyKQorI2RlZmluZSBQTURf QVRUUklORFhfTUFTSwkoNyA8PCAyKQorCisvKgorICogTGV2ZWwgMyBkZXNjcmlwdG9yIChQVEUp LgorICovCisjZGVmaW5lIFBURV9UWVBFX01BU0sJCSgzIDw8IDApCisjZGVmaW5lIFBURV9UWVBF X0ZBVUxUCQkoMCA8PCAwKQorI2RlZmluZSBQVEVfVFlQRV9QQUdFCQkoMyA8PCAwKQorI2RlZmlu ZSBQVEVfVEFCTEVfQklUCQkoMSA8PCAxKQorI2RlZmluZSBQVEVfVVNFUgkJKDEgPDwgNikJCS8q IEFQWzFdICovCisjZGVmaW5lIFBURV9SRE9OTFkJCSgxIDw8IDcpCQkvKiBBUFsyXSAqLworI2Rl ZmluZSBQVEVfU0hBUkVECQkoMyA8PCA4KQkJLyogU0hbMTowXSwgaW5uZXIgc2hhcmVhYmxlICov CisjZGVmaW5lIFBURV9BRgkJCSgxIDw8IDEwKQkvKiBBY2Nlc3MgRmxhZyAqLworI2RlZmluZSBQ VEVfTkcJCQkoMSA8PCAxMSkJLyogbkcgKi8KKyNkZWZpbmUgUFRFX0RCTQkJCSgxIDw8IDUxKQkv KiBEaXJ0eSBCaXQgTWFuYWdlbWVudCAqLworI2RlZmluZSBQVEVfQ09OVAkJKDEgPDwgNTIpCS8q IENvbnRpZ3VvdXMgcmFuZ2UgKi8KKyNkZWZpbmUgUFRFX1BYTgkJCSgxIDw8IDUzKQkvKiBQcml2 aWxlZ2VkIFhOICovCisjZGVmaW5lIFBURV9VWE4JCQkoMSA8PCA1NCkJLyogVXNlciBYTiAqLwor CisvKgorICogQXR0ckluZHhbMjowXSBlbmNvZGluZyAobWFwcGluZyBhdHRyaWJ1dGVzIGRlZmlu ZWQgaW4gdGhlIE1BSVIqIHJlZ2lzdGVycykuCisgKi8KKyNkZWZpbmUgUFRFX0FUVFJJTkRYKHQp CQkoKHQpIDw8IDIpCisjZGVmaW5lIFBURV9BVFRSSU5EWF9NQVNLCSg3IDw8IDIpCisKKy8qCisg KiBNZW1vcnkgdHlwZXMgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIE1UX0RFVklDRV9uR25SbkUJ MAorI2RlZmluZSBNVF9ERVZJQ0VfbkduUkUJCTEKKyNkZWZpbmUgTVRfREVWSUNFX0dSRQkJMgor I2RlZmluZSBNVF9OT1JNQUxfTkMJCTMKKyNkZWZpbmUgTVRfTk9STUFMCQk0CisjZGVmaW5lIE1U X05PUk1BTF9XVAkJNQorCisvKgorICogVENSIGZsYWdzLgorICovCisjZGVmaW5lIFRDUl9UMFNa KHgpCQkoKDY0IC0gKHgpKSA8PCAwKQorI2RlZmluZSBUQ1JfSVJHTl9OQwkJKDAgPDwgOCkKKyNk ZWZpbmUgVENSX0lSR05fV0JXQQkJKDEgPDwgOCkKKyNkZWZpbmUgVENSX0lSR05fV1QJCSgyIDw8 IDgpCisjZGVmaW5lIFRDUl9JUkdOX1dCTldBCQkoMyA8PCA4KQorI2RlZmluZSBUQ1JfSVJHTl9N QVNLCQkoMyA8PCA4KQorI2RlZmluZSBUQ1JfT1JHTl9OQwkJKDAgPDwgMTApCisjZGVmaW5lIFRD Ul9PUkdOX1dCV0EJCSgxIDw8IDEwKQorI2RlZmluZSBUQ1JfT1JHTl9XVAkJKDIgPDwgMTApCisj ZGVmaW5lIFRDUl9PUkdOX1dCTldBCQkoMyA8PCAxMCkKKyNkZWZpbmUgVENSX09SR05fTUFTSwkJ KDMgPDwgMTApCisjZGVmaW5lIFRDUl9TSEFSRURfTk9OCQkoMCA8PCAxMikKKyNkZWZpbmUgVENS X1NIQVJFRF9PVVRFUgkoMiA8PCAxMikKKyNkZWZpbmUgVENSX1NIQVJFRF9JTk5FUgkoMyA8PCAx MikKKyNkZWZpbmUgVENSX1RHMF80SwkJKDAgPDwgMTQpCisjZGVmaW5lIFRDUl9URzBfNjRLCQko MSA8PCAxNCkKKyNkZWZpbmUgVENSX1RHMF8xNksJCSgyIDw8IDE0KQorI2RlZmluZSBUQ1JfRUwx X0lQU19CSVRTCShVTCgzKSA8PCAzMikJLyogNDIgYml0cyBwaHlzaWNhbCBhZGRyZXNzICovCisj ZGVmaW5lIFRDUl9FTDJfSVBTX0JJVFMJKDMgPDwgMTYpCS8qIDQyIGJpdHMgcGh5c2ljYWwgYWRk cmVzcyAqLworI2RlZmluZSBUQ1JfRUwzX0lQU19CSVRTCSgzIDw8IDE2KQkvKiA0MiBiaXRzIHBo eXNpY2FsIGFkZHJlc3MgKi8KKworI2RlZmluZSBUQ1JfRUwxX1JTVkQJCSgxIDw8IDMxKQorI2Rl ZmluZSBUQ1JfRUwyX1JTVkQJCSgxIDw8IDMxIHwgMSA8PCAyMykKKyNkZWZpbmUgVENSX0VMM19S U1ZECQkoMSA8PCAzMSB8IDEgPDwgMjMpCisKKyNlbmRpZgotLSAKMi4xLjAKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpiYXJlYm94IG1haWxpbmcgbGlz dApiYXJlYm94QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9iYXJlYm94Cg==