Name: series-workflowfg5hv Phase: Succeeded StartedAt: 2026-06-22 08:02:00 +0000 UTC FinishedAt: 2026-06-22 09:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[0] Phase: Succeeded StartedAt: 2026-06-22 08:02:00 +0000 UTC FinishedAt: 2026-06-22 08:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 08:02:00 +0000 UTC FinishedAt: 2026-06-22 08:17:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH" ], "series_id": "a66c1909-0e1c-439d-92c4-146c8e09daea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_tph_enable", "vfio_pci_core_feature_tph_st_config", "vfio_tph_config_write", "vfio_pci_tph_init", "pci_tph_init", "enable_tph", "tph_cpu_st_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcmIzM0OywKICAgICYjMzQ7dmZpb190cGhfY29uZmlnX3dyaXRlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX3RwaF9pbml0JiMzNDssCiAgICAmIzM0O3BjaV90cGhfaW5pdCYjMzQ7LAogICAgJiMzNDtlbmFibGVfdHBoJiMzNDssCiAgICAmIzM0O3RwaF9jcHVfc3RfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4MjU0M2ExZWQwOWEyNmQ2NDY2NTgyMDI0MzdkNjE0NzM1YjczODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwODoxNDo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2lcbmluZGV4IGI3NjdkYjJjNTJjYjcwLi5lZGM2NGU0ZTU2NDA0ZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaVxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXG5AQCAtNzAyLDMgJiM0Mzs3MDIsMjcgQEAgRGVzY3JpcHRpb246XG4gXHRcdFdoZW4gcHJlc2VudCBhbmQgdGhlIHRzbS8gYXR0cmlidXRlIGRpcmVjdG9yeSBpcyBwcmVzZW50LCB0aGVcbiBcdFx0YXV0aGVudGljYXRlZCBhdHRyaWJ1dGUgaXMgYW4gYWxpYXMgZm9yIHRoZSBkZXZpY2UgJiMzOTtjb25uZWN0JiMzOTtcbiBcdFx0c3RhdGUuIFNlZSB0aGUgJiMzOTt0c20vY29ubmVjdCYjMzk7IGF0dHJpYnV0ZSBmb3IgbW9yZSBkZXRhaWxzLlxuJiM0MztcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvcGNpL2RldmljZXMvXHUwMDNjcm9vdC1wb3J0LWJkZlx1MDAzZS90cGhfY3B1X3N0XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4mIzQzO0Rlc2NyaXB0aW9uOlxuJiM0MztcdFx0UmVhZC1vbmx5IGJpbmFyeSBhdHRyaWJ1dGUgb25seSBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB0aGF0XG4mIzQzO1x0XHRzdXBwb3J0IFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgaW1wbGVtZW50IHRoZSBBQ1BJIERTTVxuJiM0MztcdFx0bWV0aG9kIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gRmlsZSBwZXJtaXNzaW9uIGlzIHJvb3Qtb25seVxuJiM0MztcdFx0KDA0MDApLlxuJiM0MztcbiYjNDM7XHRcdFRoZSBibG9iIGlzIGEgc2VxdWVuY2Ugb2YgZml4ZWQtc2l6ZSA4LWJ5dGUgZW50cmllcyBkZWZpbmVkIGJ5XG4mIzQzO1x0XHRzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgaW4gdWFwaS9saW51eC9wY2kuaDpcbiYjNDM7XHRcdCAgX191OCB2bV9zdDtcbiYjNDM7XHRcdCAgX191OCBwbV9zdDtcbiYjNDM7XHRcdCAgX191MTYgdm1feHN0O1xuJiM0MztcdFx0ICBfX3UxNiBwbV94c3Q7XG4mIzQzO1x0XHQgIF9fdTE2IHJlc2VydmVkO1xuJiM0MztcbiYjNDM7XHRcdEVhY2ggZW50cnkgY29ycmVzcG9uZHMgdG8gYSBsb2dpY2FsIENQVSBpbmRleC4gU2VlayBvZmZzZXQgPVxuJiM0MztcdFx0Y3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1ouIEFyYml0cmFyeSB1bmFsaWduZWQgcGFydGlhbFxuJiM0MztcdFx0cmVhZHMgYXJlIHN1cHBvcnRlZDsgbm8gYWxpZ25tZW50IHJlc3RyaWN0aW9uIGVuZm9yY2VkLlxuJiM0MztcbiYjNDM7XHRcdEZvciBDUFVzIG91dHNpZGUgY3B1X3Bvc3NpYmxlX21hc2sgb3Igb2ZmbGluZSBDUFVzLCB0aGUgZW50cnlcbiYjNDM7XHRcdGlzIGZpbGxlZCB3aXRoIGFsbCB6ZXJvcyB0byBhdm9pZCBicmVha2luZyBzZXF1ZW50aWFsIGR1bXAgdG9vbHNcbiYjNDM7XHRcdGxpa2UgY2F0L2hleGR1bXAgb24gc3BhcnNlIENQVSB0b3BvbG9naWVzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcbmluZGV4IGQzNzg2MDg0MTI2MGNlLi5hZDllNGU4ZDMyMGIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuY1xuQEAgLTE4MzIsNiAmIzQzOzE4MzIsOSBAQCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwY2lfZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gI2lmZGVmIENPTkZJR19QQ0lfVFNNXG4gXHRcdTAwMjZwY2lfdHNtX2F1dGhfYXR0cl9ncm91cCxcbiBcdFx1MDAyNnBjaV90c21fYXR0cl9ncm91cCxcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7XHRcdTAwMjZwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCxcbiAjZW5kaWZcbiBcdE5VTEwsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXG5pbmRleCBlOGFkMjdhYmIxY2ZlNC4uMWFiZTdmYTFmY2M3ZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLmhcbkBAIC0xMzc1LDYgJiM0MzsxMzc1LDEwIEBAIHN0YXRpYyBpbmxpbmUgcGNpX3Bvd2VyX3QgYWNwaV9wY2lfY2hvb3NlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzcG1fY3RybF9hdHRyX2dyb3VwO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjaWVfdHBoX2NwdV9zdF9hdHRyX2dyb3VwO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19YODZfSU5URUxfTUlEXG4gYm9vbCBwY2lfdXNlX21pZF9wbSh2b2lkKTtcbiBpbnQgbWlkX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA5MTE0NWU4ZDlkOTUxMi4uNDc0MDJkNGI4ODk5OGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21zaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cGNpLmhcJiMzNDtcbiBcbkBAIC0xMzAsOCAmIzQzOzEzMSw0NyBAQCBzdGF0aWMgYWNwaV9zdGF0dXMgdHBoX2ludm9rZV9kc20oYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgY3B1X3VpZCxcbiBcbiBcdHJldHVybiBBRV9PSztcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRwaF9nZXRfY3B1X3N0X2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBjcHUsXG4mIzQzO1x0XHRcdCAgICAgICB1bmlvbiBzdF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnJwO1xuJiM0MztcdHUzMiBjcHVfdWlkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbiYjNDM7XHRpZiAocmV0ICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4mIzQzO1x0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJwX2FjcGlfaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXHUwMDNlYnVzLVx1MDAzZWJyaWRnZSk7XG4mIzQzO1x0aWYgKHRwaF9pbnZva2VfZHNtKHJwX2FjcGlfaGFuZGxlLCBjcHVfdWlkLCBpbmZvKSAhPSBBRV9PSylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgYm9vbCB0cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0FDUElcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpO1xuJiM0MztcdGFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJwX2FjcGlfaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXHUwMDNlYnVzLVx1MDAzZWJyaWRnZSk7XG4mIzQzO1x0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKHJwX2FjcGlfaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbiYjNDM7XHRcdFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyogVXBkYXRlIHRoZSBUUEggUmVxdWVzdGVyIEVuYWJsZSBmaWVsZCBvZiBUUEggQ29udHJvbCBSZWdpc3RlciAqL1xuIHN0YXRpYyB2b2lkIHNldF9jdHJsX3JlZ19yZXFfZW4oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IHJlcV90eXBlKVxuIHtcbkBAIC0xNjYsMTEgJiM0MzsyMDYsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuJiM0MztcdHUzMiByZWcgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiYjNDM7XHRcdHJldHVybiBQQ0lfVFBIX0xPQ19OT05FO1xuIFxuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XG4mIzQzO1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg1LDkgJiM0MzsyMjgsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiBkZWZpbmVkIGluIHBjaV9yZWdzLmggKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMxLDYgJiM0MzsyNzEsNDkgQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBnZXRfY3B1X2FsbF9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHBjaV90cGhfY3B1X3N0ICpzdClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0FDUElcbiYjNDM7XHR1bmlvbiBzdF9pbmZvIGluZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQgPT0gMCkge1xuJiM0MztcdFx0c3QtXHUwMDNldm1fc3QgPSBpbmZvLnZtX3N0X3ZhbGlkID8gaW5mby52bV9zdCA6IDA7XG4mIzQzO1x0XHRzdC1cdTAwM2VwbV9zdCA9IGluZm8ucG1fc3RfdmFsaWQgPyBpbmZvLnBtX3N0IDogMDtcbiYjNDM7XHRcdHN0LVx1MDAzZXZtX3hzdCA9IGluZm8udm1feHN0X3ZhbGlkID8gaW5mby52bV94c3QgOiAwO1xuJiM0MztcdFx0c3QtXHUwMDNlcG1feHN0ID0gaW5mby5wbV94c3RfdmFsaWQgPyBpbmZvLnBtX3hzdCA6IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBnZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0FDUElcbiYjNDM7XHR1bmlvbiBzdF9pbmZvIGluZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQgIT0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiYjNDM7XG4mIzQzO1x0cGNpX2RiZyhwZGV2LCBcJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgcmVxX3R5cGU9JXUsIGNwdT0lZCwgdGFnPSUjMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcJiMzNDt2b2xhdGlsZVwmIzM0OyA6IFwmIzM0O3BlcnNpc3RlbnRcJiMzNDssXG4mIzQzO1x0XHRyZXFfdHlwZSwgY3B1LCAqdGFnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIC1FTk9ERVY7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbiAgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG5AQCAtMjQ3LDQwICYjNDM7MzMwLDM1IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHtcbi0jaWZkZWYgQ09ORklHX0FDUElcbi1cdHN0cnVjdCBwY2lfZGV2ICpycDtcbi1cdGFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlO1xuLVx0dW5pb24gc3RfaW5mbyBpbmZvO1xuLVx0dTMyIGNwdV91aWQ7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gYWNwaV9nZXRfY3B1X3VpZChjcHUsIFx1MDAyNmNwdV91aWQpO1xuLVx0aWYgKHJldCAhPSAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpO1xuLVx0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHRyZXR1cm4gZ2V0X2NwdV9zdChwZGV2LCBtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIGNwdSwgdGFnKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xuIFxuLVx0cnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKTtcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4mIzQzOyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seVxuJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuJiM0MzsgKiBAdGFnOiBvdXRwdXQgc3RlZXJpbmcgdGFnIHBvaW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogVW5saWtlIGF1dG8gcGNpZV90cGhfZ2V0X2NwdV9zdCgpLCBjYWxsZXIgbWFudWFsbHkgcGlja3MgcmVxdWVzdGVyIHR5cGUuXG4mIzQzOyAqIFJlamVjdHMgRVhUIHJlcXVlc3QgaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0XHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4mIzQzO3tcbiYjNDM7XHR1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuIFxuLVx0aWYgKHRwaF9pbnZva2VfZHNtKHJwX2FjcGlfaGFuZGxlLCBjcHVfdWlkLCBcdTAwMjZpbmZvKSAhPSBBRV9PSykge1xuLVx0XHQqdGFnID0gMDtcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgXHUwMDI2aW5mbyk7XG4tXG4tXHRwY2lfZGJnKHBkZXYsIFwmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwmIzM0Oyxcbi1cdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcJiMzNDt2b2xhdGlsZVwmIzM0OyA6IFwmIzM0O3BlcnNpc3RlbnRcJiMzNDssXG4tXHRcdGNwdSwgKnRhZyk7XG4gXG4tXHRyZXR1cm4gMDtcbi0jZWxzZVxuLVx0cmV0dXJuIC1FTk9ERVY7XG4tI2VuZGlmXG4mIzQzO1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHJlcV90eXBlLCBjcHUsIHRhZyk7XG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCk7XG4gXG4gLyoqXG4gICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxuQEAgLTMxNiw4ICYjNDM7Mzk0LDYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuIFx0c2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBQQ0lfVFBIX1JFUV9ESVNBQkxFKTtcbiBcbiBcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XG4tXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXG4gXHRzd2l0Y2ggKGxvYykge1xuIFx0Y2FzZSBQQ0lfVFBIX0xPQ19NU0lYOlxuQEAgLTM2NiwyNyAmIzQzOzQ0MiwxMCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XG4gXG4tLyoqXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4tICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4tICpcbi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbi0gKlxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0JiMzOTtzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuLSAqL1xuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuJiM0MztzdGF0aWMgaW50IGVuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCB1OCByZXFfdHlwZSlcbiB7XG4gXHR1MzIgcmVnO1xuIFx0dTggZGV2X21vZGVzO1xuLVx0dTggcnBfcmVxX3R5cGU7XG4gXG4gXHQvKiBIb25vciBcJiMzNDtub3RwaFwmIzM0OyBrZXJuZWwgcGFyYW1ldGVyICovXG4gXHRpZiAocGNpX3RwaF9kaXNhYmxlZClcbkBAIC00MDQsMjYgJiM0Mzs0NjMsMTIgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgbW9kZSkgXHUwMDI2IGRldl9tb2RlcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cGRldi1cdTAwM2V0cGhfbW9kZSA9IG1vZGU7XG4tXG4tXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuLVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbi1cdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuLVx0ZWxzZVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuLVxuLVx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbi1cdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbi1cdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4tXG4tXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbi1cdH1cbi1cbi1cdGlmIChwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxuJiM0MztcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIIFx1MDAyNlx1MDAyNiAhcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHBkZXYtXHUwMDNldHBoX21vZGUgPSBtb2RlO1xuJiM0MztcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XG4mIzQzO1xuIFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ1RSTCwgXHUwMDI2cmVnKTtcbiBcbkBAIC00MzEsNyAmIzQzOzQ3Niw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIHBkZXYtXHUwMDNldHBoX21vZGUpO1xuIFxuIFx0cmVnIFx1MDAyNj0gflBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSztcbi1cdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUpO1xuJiM0MztcdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcmVxX3R5cGUpO1xuIFxuIFx0cGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DVFJMLCByZWcpO1xuIFxuQEAgLTQzOSw4ICYjNDM7NDg0LDYzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4mIzQzOyAqXG4mIzQzOyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcbiYjNDM7ICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4mIzQzOyAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4mIzQzOyAqXG4mIzQzOyAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4mIzQzOyAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4mIzQzOyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlclxuJiM0MzsgKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0JiMzOTtzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4mIzQzOyAqL1xuJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiYjNDM7e1xuJiM0MztcdHU4IHJlcV90eXBlID0gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDpcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuJiM0MztcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcbiYjNDM7ICogQG1vZGU6IFNUIHRhYmxlIG9wZXJhdGluZyBtb2RlIChOUy9JVi9EUylcbiYjNDM7ICogQGV4dGVuZGVkOiB0cnVlID0gRVhUX1RQSCwgZmFsc2UgPSBzdGFuZGFyZCBUUEggb25seVxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XG4mIzQzOyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZClcbiYjNDM7e1xuJiM0MztcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbiYjNDM7XG4gdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7XG5AQCAtNTEyLDE0ICYjNDM7NjEyLDEzMSBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcbiBcbiB2b2lkIHBjaV90cGhfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4mIzQzO1x0dTggdHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZTtcbiBcdGludCBudW1fZW50cmllcztcbiBcdHUzMiBzYXZlX3NpemU7XG4mIzQzO1x0dTMyIHJlZyA9IDA7XG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4mIzQzO1x0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuJiM0MztcdFx0dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbiYjNDM7XHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4mIzQzO1x0XHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcbiYjNDM7XHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbiYjNDM7XHRcdHRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuJiM0MztcdFx0cGRldi1cdTAwM2V0cGhfY2FwID0gMDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0ID0gISEodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpO1xuJiM0MztcbiBcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4gXHRzYXZlX3NpemUgPSBzaXplb2YodTMyKSAmIzQzOyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpO1xuIFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfc3VwcG9ydGVkIC0gQ2hlY2sgVFBIIGNhcGFiaWxpdHkgYXR0cmlidXRlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqIEB3YW50X2V4dDogZmFsc2UgLSBjaGVjayBUUEggY2FwIGV4aXN0czsgdHJ1ZSAtIGNoZWNrIEVYVF9UUEggc3VwcG9ydFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgb24gbWF0Y2hlZCBjb25kaXRpb24sIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3YW50X2V4dClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgdHBoX2NwdV9zdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuJiM0MztcdFx0XHQgICAgICAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbiYjNDM7XHRjb25zdCBzaXplX3QgZW50cnlfc3ogPSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWjtcbiYjNDM7XHRjb25zdCBzaXplX3QgdG90YWxfc2l6ZSA9IG5yX2NwdV9pZHMgKiBlbnRyeV9zejtcbiYjNDM7XHRzaXplX3QgY29waWVkID0gMDtcbiYjNDM7XHRsb2ZmX3QgcG9zID0gb2ZmO1xuJiM0MztcbiYjNDM7XHRpZiAocG9zIFx1MDAzZT0gdG90YWxfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHRvdGFsX3NpemUgLSBwb3MpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoY29waWVkIFx1MDAzYyBjb3VudCkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejtcbiYjNDM7XHRcdHNpemVfdCBlbnRyeV9vZmYgPSBwb3MgJSBlbnRyeV9zejtcbiYjNDM7XHRcdHNpemVfdCByZW1haW4gPSBlbnRyeV9zeiAtIGVudHJ5X29mZjtcbiYjNDM7XHRcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNpX3RwaF9jcHVfc3Qgc3QgPSB7MH07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNwdV9wb3NzaWJsZShjcHVfaWR4KSlcbiYjNDM7XHRcdFx0Z2V0X2NwdV9hbGxfc3QocGRldiwgY3B1X2lkeCwgXHUwMDI2c3QpO1xuJiM0MztcbiYjNDM7XHRcdG1lbWNweShidWYgJiM0MzsgY29waWVkLCAoY2hhciAqKVx1MDAyNnN0ICYjNDM7IGVudHJ5X29mZiwgY2h1bmspO1xuJiM0MztcbiYjNDM7XHRcdGNvcGllZCAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRwb3MgJiM0Mzs9IGNodW5rO1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvcGllZDtcbiYjNDM7fVxuJiM0MztzdGF0aWMgQklOX0FUVFIodHBoX2NwdV9zdCwgMDQwMCwgdHBoX2NwdV9zdF9yZWFkLCBOVUxMLCAwKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgdHBoX2NwdV9zdF9iaW5fYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZiaW5fYXR0cl90cGhfY3B1X3N0LFxuJiM0MztcdE5VTEwsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYSwgaW50IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbnJfY3B1X2lkcyAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW1vZGVfdCB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsIGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbiYjNDM7XHRib29sIGlzX3Jvb3RfcG9ydCA9IHBjaV9pc19wY2llKHBkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdHBjaV9wY2llX3R5cGUocGRldikgPT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVDtcbiYjNDM7XHR1MzIgZGV2Y2FwMiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfcm9vdF9wb3J0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNmRldmNhcDIpO1xuJiM0MztcdGlmICghKGRldmNhcDIgXHUwMDI2IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRwaF9kc21fc3VwcG9ydGVkKHBkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhLVx1MDAzZWF0dHIubW9kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCA9IHtcbiYjNDM7XHQuYmluX2F0dHJzID0gdHBoX2NwdV9zdF9iaW5fYXR0cnMsXG4mIzQzO1x0LmJpbl9zaXplID0gdHBoX2NwdV9zdF9iaW5fc2l6ZSxcbiYjNDM7XHQuaXNfYmluX3Zpc2libGUgPSB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbmluZGV4IDBjNzcxMDY0YzBiODQ0Li42ZDczNjY4NDU5Y2Y1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5AQCAtNjAsNiAmIzQzOzYwLDEyIEBAIHN0YXRpYyBib29sIGRpc2FibGVfZGVueWxpc3Q7XG4gbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgXCYjMzQ7RGlzYWJsZSB1c2Ugb2YgZGV2aWNlIGRlbnlsaXN0LiBEaXNhYmxpbmcgdGhlIGRlbnlsaXN0IGFsbG93cyBiaW5kaW5nIHRvIGRldmljZXMgd2l0aCBrbm93biBlcnJhdGEgdGhhdCBtYXkgbGVhZCB0byBleHBsb2l0YWJsZSBzdGFiaWxpdHkgb3Igc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnkgdW50cnVzdGVkIHVzZXJzLlwmIzM0Oyk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7c3RhdGljIGJvb2wgZW5hYmxlX3Vuc2FmZV90cGg7XG4mIzQzO21vZHVsZV9wYXJhbShlbmFibGVfdW5zYWZlX3RwaCwgYm9vbCwgMDQ0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3Vuc2FmZV90cGgsIFwmIzM0O0VuYWJsZSBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydC4gSXQgbWF5IGJyZWFrIHBsYXRmb3JtIGlzb2xhdGlvbi4gSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIHN0ZXAgYXdheS4gKGRlZmF1bHQ6IGZhbHNlKVwmIzM0Oyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3dpdGNoIChwZGV2LVx1MDAzZXZlbmRvcikge1xuQEAgLTI1NywxMiAmIzQzOzI2MywxNyBAQCBzdGF0aWMgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcdGJvb2wgaXNfZGlzYWJsZV92Z2EgPSB0cnVlO1xuJiM0MztcdGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGggPSBmYWxzZTtcbiBcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxuIFx0aXNfZGlzYWJsZV92Z2EgPSBkaXNhYmxlX3ZnYTtcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuJiM0MztcdGlzX2VuYWJsZV91bnNhZmVfdHBoID0gZW5hYmxlX3Vuc2FmZV90cGg7XG4mIzQzOyNlbmRpZlxuIFxuLVx0dmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKG5vaW50eG1hc2ssIGlzX2Rpc2FibGVfdmdhLCBkaXNhYmxlX2lkbGVfZDMpO1xuJiM0MztcdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzLFxuJiM0MztcdFx0XHRcdCBpc19lbmFibGVfdW5zYWZlX3RwaCk7XG4gXG4gXHQvKiBSZWdpc3RlciBhbmQgc2NhbiBmb3IgZGV2aWNlcyAqL1xuIFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ2ZmlvX3BjaV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uMTBmNGU5ZmFiZWE3Y2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICYjNDM7MTA4NiwxMTggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBQZXJtaXNzaW9ucyBmb3IgVFBIIGV4dGVuZGVkIGNhcGFiaWxpdHkgKi9cbiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuJiM0MztcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbiYjNDM7XG4mIzQzO1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsIEFMTF9XUklURSk7XG4mIzQzO1xuJiM0MztcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xuJiM0MztcdCAqIHdoZW4gdGhlIFNUIHRhYmxlIGlzIGxvY2F0ZWQgaW4gdGhlIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiYjNDM7XHQgKiBDYXBhYmlsaXR5IHN0cnVjdHVyZS5cbiYjNDM7XHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxuJiM0MztcdCAqIGZvbGxvd2luZyBvcGVyYXRpb24gaXMgZmluZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiAmIzQzOyBpICogc2l6ZW9mKHUxNiksXG4mIzQzO1x0XHQgICAgICAgKHUxNilBTExfVklSVCwgKHUxNilBTExfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmZpb190cGhfbWFza19leHRfdHBoX2JpdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgaW50IHBvcylcbiYjNDM7e1xuJiM0MztcdF9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCB0cnVlKSkge1xuJiM0MztcdFx0dmFsID0gbGUzMl90b19jcHUoKnZwdHIpO1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7XG4mIzQzO1x0XHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKTtcbiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuJiM0MztcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVxX2VuX2J5dGUgPSBQQ0lfVFBIX0NUUkwgJiM0MzsgMTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHR1OCBtb2RlLCByZXE7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XHR1MTYgc3RhcnQ7XG4mIzQzO1x0dTMyIGRhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0KVxuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBCYWNrIHVwIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gb3JkZXIgcm9sbGJhY2sgd2hlbiBmYWlsICovXG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2M9IHJlcV9lbl9ieXRlIFx1MDAyNlx1MDAyNiBvZmZzZXQgJiM0MzsgY291bnQgXHUwMDNlIHJlcV9lbl9ieXRlKVxuJiM0MztcdFx0dmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZvcmdfdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4mIzQzO1x0aWYgKHJldCAhPSBjb3VudCkge1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBpZiB3cml0ZSByYW5nZSBkb2VzIG5vdCBjb3ZlciBSZXF1ZXN0ZXIgRW5hYmxlIGJ5dGUgKi9cbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzZSByZXFfZW5fYnl0ZSB8fCBvZmZzZXQgJiM0MzsgY291bnQgXHUwMDNjPSByZXFfZW5fYnl0ZSkge1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgb3JnX3ZhbCk7XG4mIzQzO1x0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiBjb3VudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpO1xuJiM0MztcdGRhdGEgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTtcbiYjNDM7XHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBkYXRhKTtcbiYjNDM7XHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBkYXRhKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xuJiM0MztcdFx0ZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XG4mIzQzO1x0XHRyZXQgPSBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQocGRldiwgbW9kZSwgZXh0ZW5kZWQpO1xuJiM0MztcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdykge1xuJiM0MztcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgaSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgdmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93W2ldKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBvZmZzZXQsIG9yZ192YWwpO1xuJiM0MztcdH0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHtcbiYjNDM7XHRcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHQgIG9yZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiAmIzQzOzEyMTMsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcbiBcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuJiM0MztcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgJiM0MzsxMjM0LDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbiYjNDM7XHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuJiM0MztcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcbkBAIC0xNDUwLDYgJiM0MzsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICYjNDM7IGJ5dGUgJiM0MzsgMTtcbiBcdGNhc2UgUENJX0VYVF9DQVBfSURfVFBIOlxuJiM0MztcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGVwb3MgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNmR3b3JkKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbkBAIC0xNzAxLDYgJiM0MzsxODE5LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChlY2FwID09IFBDSV9FWFRfQ0FQX0lEX1RQSCBcdTAwMjZcdTAwMjYgIWhpZGRlbilcbiYjNDM7XHRcdFx0dmZpb190cGhfbWFza19leHRfdHBoX2JpdCh2ZGV2LCBlcG9zKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMjhmMWU5OTM2MmMxZS4uMWU3MDZhNjkwZGJkNzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0yOSw2ICYjNDM7MjksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0VFSClcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWVoLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC00MSw2ICYjNDM7NDIsNyBAQFxuIHN0YXRpYyBib29sIG5vaW50eG1hc2s7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV92Z2E7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV9pZGxlX2QzO1xuJiM0MztzdGF0aWMgYm9vbCBlbmFibGVfdW5zYWZlX3RwaDtcbiBcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9ldmVudGZkX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIHtcbkBAIC01MzEsNiAmIzQzOzUzMyw1MiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdmZpb19wY2lfY29yZV9wbV9vcHMgPSB7XG4gXHRcdFx0ICAgTlVMTClcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuJiM0MztcdFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiYjNDM7e1xuJiM0MztcdHZkZXYtXHUwMDNldHBoX3N0X2VudHJpZXMgPSAwO1xuJiM0MztcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IE5VTEw7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZSh2ZGV2KTtcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfc3RfZW50cmllcykge1xuJiM0MztcdFx0dmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93ID0ga2NhbGxvYyh2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzLCBzaXplb2YodTE2KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0XHRpZiAoIXZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmZpb19wY2lfdHBoX2RlaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZSh2ZGV2LVx1MDAzZXRwaF9zdF9zaGFkb3cpO1xuJiM0MztcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IE5VTEw7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbkBAIC01NTcsNiAmIzQzOzYwNSwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRnb3RvIG91dF9kaXNhYmxlX2RldmljZTtcbiBcbiBcdHZkZXYtXHUwMDNlcmVzZXRfd29ya3MgPSAhcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cbiYjNDM7XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfdHBoX2luaXQodmRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuJiM0MztcbiBcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFx0dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XG4gXHRpZiAoIXZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxuQEAgLTYxNCw2ICYjNDM7NjY5LDcgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBvdXRfZnJlZV9zdGF0ZTpcbiBcdGtmcmVlKHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gTlVMTDtcbiYjNDM7XHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xuIG91dF9kaXNhYmxlX2RldmljZTpcbiBcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiBvdXRfcG93ZXI6XG5AQCAtNjgyLDYgJiM0Mzs3MzgsOSBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRrZnJlZSh2ZGV2LVx1MDAzZXJlZ2lvbik7XG4gXHR2ZGV2LVx1MDAzZXJlZ2lvbiA9IE5VTEw7IC8qIGRvbiYjMzk7dCBrcmVhbGxvYyBhIGZyZWVkIHBvaW50ZXIgKi9cbiBcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIHNlc3Npb24gZXhpdCAqL1xuJiM0MztcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xuIFx0dmZpb19jb25maWdfZnJlZSh2ZGV2KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMTU1NCw2ICYjNDM7MTYxMyw5NSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIHUzMiBmbGFncywgc2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmFibGVfdW5zYWZlX3RwaClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9wZXJtaXQpXG4mIzQzO1x0XHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyhcbiYjNDM7XHRcdFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHR1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdF9jb25maWcgX191c2VyICphcmcsXG4mIzQzO1x0XHRcdHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdF9jb25maWcgY29uZmlnO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuJiM0MztcdHZvaWQgX191c2VyICp1cHRyO1xuJiM0MztcdGludCBpLCBpZHgsIHJldDtcbiYjNDM7XHRzaXplX3Qgc3o7XG4mIzQzO1x0dTE2ICpzdHM7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRcdCBzaXplb2YoY29uZmlnKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdCB8fCAhdmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjb25maWcsIGFyZywgc2l6ZW9mKGNvbmZpZykpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb25maWcuY291bnQgPT0gMCB8fCBjb25maWcucmVzZXJ2ZWQgIT0gMCB8fFxuJiM0MztcdFx0Y29uZmlnLmluZGV4IFx1MDAzZT0gdmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyB8fFxuJiM0MztcdFx0Y29uZmlnLmNvdW50IFx1MDAzZSB2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzIC0gY29uZmlnLmluZGV4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHVwdHIgPSB1NjRfdG9fdXNlcl9wdHIoY29uZmlnLmRhdGFfdXB0cik7XG4mIzQzO1x0c3RzID0gbWVtZHVwX2FycmF5X3VzZXIodXB0ciwgY29uZmlnLmNvdW50LCBzaXplb2YodTE2KSk7XG4mIzQzO1x0c3ogPSBjb25maWcuY291bnQgKiBzaXplb2YodTE2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHN0cykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihzdHMpO1xuJiM0MztcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2tfbWVtb3J5O1xuJiM0MztcbiYjNDM7XHRpZiAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShwZGV2KSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxuJiM0MztcdFx0Z290byB1cGRhdGVfc2hhZG93O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWcuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZHggPSBjb25maWcuaW5kZXggJiM0MzsgaTtcbiYjNDM7XHRcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHN0c1tpXSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJvbGxiYWNrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VwZGF0ZV9zaGFkb3c6XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tjb25maWcuaW5kZXhdLCBzdHMsIHN6KTtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcdGdvdG8gb3V0X3VubG9ja19tZW1vcnk7XG4mIzQzO1xuJiM0Mztyb2xsYmFjazpcbiYjNDM7XHR3aGlsZSAoaS0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZHggPSBjb25maWcuaW5kZXggJiM0MzsgaTtcbiYjNDM7XHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tpZHhdKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrX21lbW9yeTpcbiYjNDM7XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUoc3RzKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTU3Miw2ICYjNDM7MTcyMCwxMSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEU6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUodmRldiwgZmxhZ3MsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJRzpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyh2ZGV2LCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuQEAgLTI2MTUsMTEgJiM0MzsyNzY4LDEzIEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKGJvb2wgaXNfbm9pbnR4bWFzaywgYm9vbCBpc19kaXNhYmxlX3ZnYSxcbi1cdFx0XHQgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMylcbiYjNDM7XHRcdFx0ICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMsXG4mIzQzO1x0XHRcdCAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpXG4ge1xuIFx0bm9pbnR4bWFzayA9IGlzX25vaW50eG1hc2s7XG4gXHRkaXNhYmxlX3ZnYSA9IGlzX2Rpc2FibGVfdmdhO1xuIFx0ZGlzYWJsZV9pZGxlX2QzID0gaXNfZGlzYWJsZV9pZGxlX2QzO1xuJiM0MztcdGVuYWJsZV91bnNhZmVfdHBoID0gaXNfZW5hYmxlX3Vuc2FmZV90cGg7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuaW5kZXggYmU2OGNkMTdmMmY4MzMuLjU5MTdhMDY5NGMxZDY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gICovXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuIFxuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuQEAgLTI2LDEwICYjNDM7MjcsMTYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuIFx0XHRcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHRcdCBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKTtcbiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4mIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuQEAgLTM4LDkgJiM0Mzs0NSwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHRlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0XHRib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICBib29sIGV4dGVuZGVkKVxuJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiAwOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcbiYjNDM7eyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDJjNDQ1NDU4M2MxMTViLi4yODVjMGYwMDg4MmUwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzEsNyAmIzQzOzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OSw3ICYjNDM7NTg4LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfY2FwOjE0O1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4mIzQzO1x0dTE2XHRcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxuJiM0MztcdFx0XHRcdFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfZW5hYmxlZDoxO1x0LyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqL1xuIFx0dThcdFx0dHBoX21vZGU7XHQvKiBUUEggbW9kZSAqL1xuIFx0dThcdFx0dHBoX3JlcV90eXBlO1x0LyogVFBIIHJlcXVlc3RlciB0eXBlICovXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuaW5kZXggNWZjNmNlNGRkNzg2MTYuLjUyN2M4NGYwNDJhYTZmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTI4LDYgJiM0MzsxMjgsNyBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4gXHRib29sXHRcdFx0c3Jpb3ZfYWN0aXZlO1xuJiM0MztcdGJvb2xcdFx0XHR0cGhfcGVybWl0O1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBjaV9zYXZlZF9zdGF0ZTtcbiBcdHN0cnVjdCBwY2lfc2F2ZWRfc3RhdGVcdCpwbV9zYXZlO1xuIFx0aW50XHRcdFx0aW9ldmVudGZkc19ucjtcbkBAIC0xNDMsNiAmIzQzOzE0NCw4IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcdG5iO1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZVx0bWVtb3J5X2xvY2s7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRkbWFidWZzO1xuJiM0MztcdHUxNlx0XHRcdCp0cGhfc3Rfc2hhZG93O1xuJiM0MztcdHUxNlx0XHRcdHRwaF9zdF9lbnRyaWVzO1xuIH07XG4gXG4gZW51bSB2ZmlvX3BjaV9pb193aWR0aCB7XG5AQCAtMTU4LDcgJiM0MzsxNjEsOCBAQCBpbnQgdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZfcmVnaW9uKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9yZWdvcHMgKm9wcyxcbiBcdFx0XHRcdCAgICAgIHNpemVfdCBzaXplLCB1MzIgZmxhZ3MsIHZvaWQgKmRhdGEpO1xuIHZvaWQgdmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKGJvb2wgbm9pbnR4bWFzaywgYm9vbCBpc19kaXNhYmxlX3ZnYSxcbi1cdFx0XHQgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMyk7XG4mIzQzO1x0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxuJiM0MztcdFx0XHQgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKTtcbiB2b2lkIHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcbiBpbnQgdmZpb19wY2lfY29yZV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3JlbGVhc2VfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcGNpLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcGNpLmhcbmluZGV4IDRmMTUwMDI4OTY1ZDhiLi41YzRlYTQ0ZDY2ZDIwNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjZGVmaW5lIF9VQVBJTElOVVhfUENJX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXHQvKiBUaGUgcGNpIHJlZ2lzdGVyIGRlZmluZXMgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhlIFBDSSBpbnRlcmZhY2UgdHJlYXRzIG11bHRpLWZ1bmN0aW9uIGRldmljZXMgYXMgaW5kZXBlbmRlbnRcbkBAIC00Niw0ICYjNDM7NDcsMTkgQEAgZW51bSBwY2lfaG90cGx1Z19ldmVudCB7XG4gXHRQQ0lfSE9UUExVR19DQVJEX05PVF9QUkVTRU5ULFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFBDSWUgVFBIIHN5c2ZzIGJpbmFyeSBlbnRyeSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmdcbiYjNDM7ICogU3lzZnMgZmlsZTogL3N5cy9idXMvcGNpL2RldmljZXMvXHUwMDNjQkRGXHUwMDNlL3RwaF9jcHVfc3RcbiYjNDM7ICogRWFjaCBlbnRyeSBpcyA4IGJ5dGVzIGFsaWduZWQsIHNlZWsgb2Zmc2V0ID0gY3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1pcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfdHBoX2NwdV9zdCB7XG4mIzQzO1x0X191OCAgdm1fc3Q7ICAgICAgICAvKiBWb2xhdGlsZSBNZW1vcnkgU3RlZXJpbmcgVGFnICgxIGJ5dGUpICovXG4mIzQzO1x0X191OCAgcG1fc3Q7ICAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBTdGVlcmluZyBUYWcgKDEgYnl0ZSkgKi9cbiYjNDM7XHRfX3UxNiB2bV94c3Q7ICAgICAgIC8qIFZvbGF0aWxlIE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovXG4mIzQzO1x0X191MTYgcG1feHN0OyAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovXG4mIzQzO1x0X191MTYgcmVzZXJ2ZWQ7ICAgICAvKiBQYWRkaW5nIHRvIDggYnl0ZXMgZm9yIGFsaWduZWQgb2Zmc2V0IGxvb2t1cCAqL1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWiBzaXplb2Yoc3RydWN0IHBjaV90cGhfY3B1X3N0KVxuJiM0MztcbiAjZW5kaWYgLyogX1VBUElMSU5VWF9QQ0lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uNjEwNzk1OTRhOTFmNWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICYjNDM7MTUzNCwzNSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZXZpY2UtbGV2ZWwgb3B0LWluIGZvciBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQuXG4mIzQzOyAqIFdoZW4gc2V0LCBhbGxvd3MgYWNjZXNzIHRvIFRQSF9DUFVfU1QgYW5kIFRQSF9TVF9DT05GSUcgZmVhdHVyZXMuXG4mIzQzOyAqIFJlcXVpcmVzIGdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIGVuYWJsZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRVx0MTNcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUcgLSBDb25maWd1cmUgUENJZSBUUEggU3RlZXJpbmcgVGFnIGVudHJpZXNcbiYjNDM7ICpcbiYjNDM7ICogUHJvdmlkZXMgdXNlcnNwYWNlIGludGVyZmFjZSB0byBjb25maWd1cmUgUENJZSBUUEggU1QgdGFibGUgZW50cmllcy5cbiYjNDM7ICpcbiYjNDM7ICogQGluZGV4OiBTdGFydCBlbnRyeSBvZmZzZXQgd2l0aGluIFNUIHRhYmxlXG4mIzQzOyAqIEBjb3VudDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGVudHJpZXMgdG8gY29uZmlndXJlXG4mIzQzOyAqIEBkYXRhX3VwdHI6IFVzZXJzcGFjZSBkYXRhIGJ1ZmZlciBmb3IgMTYtYml0IHJhdyBTVCB2YWx1ZXNcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHR3byBwcmVjb25kaXRpb25zOlxuJiM0MzsgKiAxLiBHbG9iYWwgZW5hYmxlX3Vuc2FmZV90cGggbW9kdWxlIHBhcmFtZXRlciBpcyBlbmFibGVkO1xuJiM0MzsgKiAyLiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEUgaGFzIGJlZW4gU0VUIG9uIHRoZSBkZXZpY2UgYmVmb3JlaGFuZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHXHQxNFxuJiM0MztcbiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyB7XG4mIzQzO1x0X191MTYgaW5kZXg7XG4mIzQzO1x0X191MTYgY291bnQ7XG4mIzQzO1x0X191MzIgcmVzZXJ2ZWQ7IC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8gKi9cbiYjNDM7XHRfX2FsaWduZWRfdTY0IGRhdGFfdXB0cjtcbiYjNDM7fTtcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfdHBoX2luaXQmIzM0OywKICAgICYjMzQ7cGNpX3RwaF9pbml0JiMzNDssCiAgICAmIzM0O2VuYWJsZV90cGgmIzM0OywKICAgICYjMzQ7dHBoX2NwdV9zdF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFBDSWUgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0IHRvIFZGSU8gUENJIGFuZCBhZGRzIGEgc3lzZnMgYXR0cmlidXRlIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gVGhlIFZGSU8gaW9jdGxzIGFuZCBjb25maWcgc3BhY2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCwgYnV0IHRoZXkgcmVxdWlyZSB0aGUgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgY29yZSBQQ0kgVFBIIGluaXRpYWxpemF0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIHByb2JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhODI1NDNhMWVkMDlhMjZkNjQ2NjU4MjAyNDM3ZDYxNDczNWI3Mzg3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjIgMDg6MTQ6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKaW5kZXggYjc2N2RiMmM1MmNiNzAuLmVkYzY0ZTRlNTY0MDRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCkBAIC03MDIsMyAmIzQzOzcwMiwyNyBAQCBEZXNjcmlwdGlvbjoKIAkJV2hlbiBwcmVzZW50IGFuZCB0aGUgdHNtLyBhdHRyaWJ1dGUgZGlyZWN0b3J5IGlzIHByZXNlbnQsIHRoZQogCQlhdXRoZW50aWNhdGVkIGF0dHJpYnV0ZSBpcyBhbiBhbGlhcyBmb3IgdGhlIGRldmljZSAmIzM5O2Nvbm5lY3QmIzM5OwogCQlzdGF0ZS4gU2VlIHRoZSAmIzM5O3RzbS9jb25uZWN0JiMzOTsgYXR0cmlidXRlIGZvciBtb3JlIGRldGFpbHMuCiYjNDM7CiYjNDM7V2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLyZsdDtyb290LXBvcnQtYmRmJmd0Oy90cGhfY3B1X3N0CiYjNDM7Q29udGFjdDoJbGludXgtcGNpQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJUmVhZC1vbmx5IGJpbmFyeSBhdHRyaWJ1dGUgb25seSBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB0aGF0CiYjNDM7CQlzdXBwb3J0IFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgaW1wbGVtZW50IHRoZSBBQ1BJIERTTQomIzQzOwkJbWV0aG9kIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gRmlsZSBwZXJtaXNzaW9uIGlzIHJvb3Qtb25seQomIzQzOwkJKDA0MDApLgomIzQzOwomIzQzOwkJVGhlIGJsb2IgaXMgYSBzZXF1ZW5jZSBvZiBmaXhlZC1zaXplIDgtYnl0ZSBlbnRyaWVzIGRlZmluZWQgYnkKJiM0MzsJCXN0cnVjdCBwY2lfdHBoX2NwdV9zdCBpbiB1YXBpL2xpbnV4L3BjaS5oOgomIzQzOwkJICBfX3U4IHZtX3N0OwomIzQzOwkJICBfX3U4IHBtX3N0OwomIzQzOwkJICBfX3UxNiB2bV94c3Q7CiYjNDM7CQkgIF9fdTE2IHBtX3hzdDsKJiM0MzsJCSAgX191MTYgcmVzZXJ2ZWQ7CiYjNDM7CiYjNDM7CQlFYWNoIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGEgbG9naWNhbCBDUFUgaW5kZXguIFNlZWsgb2Zmc2V0ID0KJiM0MzsJCWNwdV9pZCAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaLiBBcmJpdHJhcnkgdW5hbGlnbmVkIHBhcnRpYWwKJiM0MzsJCXJlYWRzIGFyZSBzdXBwb3J0ZWQ7IG5vIGFsaWdubWVudCByZXN0cmljdGlvbiBlbmZvcmNlZC4KJiM0MzsKJiM0MzsJCUZvciBDUFVzIG91dHNpZGUgY3B1X3Bvc3NpYmxlX21hc2sgb3Igb2ZmbGluZSBDUFVzLCB0aGUgZW50cnkKJiM0MzsJCWlzIGZpbGxlZCB3aXRoIGFsbCB6ZXJvcyB0byBhdm9pZCBicmVha2luZyBzZXF1ZW50aWFsIGR1bXAgdG9vbHMKJiM0MzsJCWxpa2UgY2F0L2hleGR1bXAgb24gc3BhcnNlIENQVSB0b3BvbG9naWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBkMzc4NjA4NDEyNjBjZS4uYWQ5ZTRlOGQzMjBiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCkBAIC0xODMyLDYgJiM0MzsxODMyLDkgQEAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGNpX2Rldl9hdHRyX2dyb3Vwc1tdID0gewogI2lmZGVmIENPTkZJR19QQ0lfVFNNCiAJJmFtcDtwY2lfdHNtX2F1dGhfYXR0cl9ncm91cCwKIAkmYW1wO3BjaV90c21fYXR0cl9ncm91cCwKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7CSZhbXA7cGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXAsCiAjZW5kaWYKIAlOVUxMLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggZThhZDI3YWJiMWNmZTQuLjFhYmU3ZmExZmNjN2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMTM3NSw2ICYjNDM7MTM3NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBjaV9wb3dlcl90IGFjcGlfcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzcG1fY3RybF9hdHRyX2dyb3VwOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXA7CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NSUQKIGJvb2wgcGNpX3VzZV9taWRfcG0odm9pZCk7CiBpbnQgbWlkX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3RwaC5jIGIvZHJpdmVycy9wY2kvdHBoLmMKaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjQ3NDAyZDRiODg5OThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS90cGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS90cGguYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tc2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtwY2kuaCYjMzQ7CiAKQEAgLTEzMCw4ICYjNDM7MTMxLDQ3IEBAIHN0YXRpYyBhY3BpX3N0YXR1cyB0cGhfaW52b2tlX2RzbShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBjcHVfdWlkLAogCiAJcmV0dXJuIEFFX09LOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHBoX2dldF9jcHVfc3RfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSwKJiM0MzsJCQkgICAgICAgdW5pb24gc3RfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcnA7CiYjNDM7CXUzMiBjcHVfdWlkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgJmFtcDtjcHVfdWlkKTsKJiM0MzsJaWYgKHJldCAhPSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpOwomIzQzOwlpZiAoIXJwIHx8ICFycC0mZ3Q7YnVzIHx8ICFycC0mZ3Q7YnVzLSZndDticmlkZ2UpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC0mZ3Q7YnVzLSZndDticmlkZ2UpOwomIzQzOwlpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsIGluZm8pICE9IEFFX09LKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KICNlbmRpZgogCiYjNDM7c3RhdGljIGJvb2wgdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQUNQSQomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpOwomIzQzOwlhY3BpX2hhbmRsZSBycF9hY3BpX2hhbmRsZTsKJiM0MzsKJiM0MzsJaWYgKCFycCB8fCAhcnAtJmd0O2J1cyB8fCAhcnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLSZndDtidXMtJmd0O2JyaWRnZSk7CiYjNDM7CXJldHVybiBhY3BpX2NoZWNrX2RzbShycF9hY3BpX2hhbmRsZSwgJmFtcDtwY2lfYWNwaV9kc21fZ3VpZCwgNywKJiM0MzsJCQkgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKiBVcGRhdGUgdGhlIFRQSCBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkIG9mIFRQSCBDb250cm9sIFJlZ2lzdGVyICovCiBzdGF0aWMgdm9pZCBzZXRfY3RybF9yZWdfcmVxX2VuKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCByZXFfdHlwZSkKIHsKQEAgLTE2NiwxMSAmIzQzOzIwNiwxNCBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogICovCiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl1MzIgcmVnOwomIzQzOwl1MzIgcmVnID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQomIzQzOwkJcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtyZWcpOwogCi0JcmV0dXJuIEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgcmVnKTsKJiM0MzsJcmV0dXJuIHJlZyAmYW1wOyBQQ0lfVFBIX0NBUF9MT0NfTUFTSzsKIH0KIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7CiAKQEAgLTE4NSw5ICYjNDM7MjI4LDYgQEAgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJLyogQ2hlY2sgU1QgdGFibGUgbG9jYXRpb24gZmlyc3QgKi8KIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCi0JLyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7CiAJaWYgKGxvYyAhPSBQQ0lfVFBIX0xPQ19DQVApCiAJCXJldHVybiAwOwogCkBAIC0yMzEsNiAmIzQzOzI3MSw0OSBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpOwogfQogCiYjNDM7c3RhdGljIGludCBnZXRfY3B1X2FsbF9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSwKJiM0MzsJCQkgICBzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgKnN0KQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0FDUEkKJiM0MzsJdW5pb24gc3RfaW5mbyBpbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB0cGhfZ2V0X2NwdV9zdF9pbmZvKHBkZXYsIGNwdSwgJmFtcDtpbmZvKTsKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQlzdC0mZ3Q7dm1fc3QgPSBpbmZvLnZtX3N0X3ZhbGlkID8gaW5mby52bV9zdCA6IDA7CiYjNDM7CQlzdC0mZ3Q7cG1fc3QgPSBpbmZvLnBtX3N0X3ZhbGlkID8gaW5mby5wbV9zdCA6IDA7CiYjNDM7CQlzdC0mZ3Q7dm1feHN0ID0gaW5mby52bV94c3RfdmFsaWQgPyBpbmZvLnZtX3hzdCA6IDA7CiYjNDM7CQlzdC0mZ3Q7cG1feHN0ID0gaW5mby5wbV94c3RfdmFsaWQgPyBpbmZvLnBtX3hzdCA6IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIC1FTk9ERVY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQUNQSQomIzQzOwl1bmlvbiBzdF9pbmZvIGluZm87CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHRwaF9nZXRfY3B1X3N0X2luZm8ocGRldiwgY3B1LCAmYW1wO2luZm8pOwomIzQzOwlpZiAocmV0ICE9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCByZXFfdHlwZSwgJmFtcDtpbmZvKTsKJiM0MzsKJiM0MzsJcGNpX2RiZyhwZGV2LCAmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAomIzQzOwkJKG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyAmIzM0O3ZvbGF0aWxlJiMzNDsgOiAmIzM0O3BlcnNpc3RlbnQmIzM0OywKJiM0MzsJCXJlcV90eXBlLCBjcHUsICp0YWcpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gLUVOT0RFVjsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQKICAqIHdpdGggYSBzcGVjaWZpYyBDUFUKQEAgLTI0Nyw0MCAmIzQzOzMzMCwzNSBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiB7Ci0jaWZkZWYgQ09ORklHX0FDUEkKLQlzdHJ1Y3QgcGNpX2RldiAqcnA7Ci0JYWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7Ci0JdW5pb24gc3RfaW5mbyBpbmZvOwotCXUzMiBjcHVfdWlkOwotCWludCByZXQ7Ci0KLQlyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgJmFtcDtjcHVfdWlkKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQlycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7Ci0JaWYgKCFycCB8fCAhcnAtJmd0O2J1cyB8fCAhcnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKQotCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJcmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSwgY3B1LCB0YWcpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpOwogCi0JcnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC0mZ3Q7YnVzLSZndDticmlkZ2UpOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlCiYjNDM7ICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKQomIzQzOyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seQomIzQzOyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkCiYjNDM7ICogQHRhZzogb3V0cHV0IHN0ZWVyaW5nIHRhZyBwb2ludGVyCiYjNDM7ICoKJiM0MzsgKiBVbmxpa2UgYXV0byBwY2llX3RwaF9nZXRfY3B1X3N0KCksIGNhbGxlciBtYW51YWxseSBwaWNrcyByZXF1ZXN0ZXIgdHlwZS4KJiM0MzsgKiBSZWplY3RzIEVYVCByZXF1ZXN0IGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJCSBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKJiM0Mzt7CiYjNDM7CXU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7CiAKLQlpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsICZhbXA7aW5mbykgIT0gQUVfT0spIHsKLQkJKnRhZyA9IDA7CiYjNDM7CWlmIChleHRlbmRlZCAmYW1wOyZhbXA7ICFwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCSp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSwgJmFtcDtpbmZvKTsKLQotCXBjaV9kYmcocGRldiwgJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAotCQkobWVtX3R5cGUgPT0gVFBIX01FTV9UWVBFX1ZNKSA/ICYjMzQ7dm9sYXRpbGUmIzM0OyA6ICYjMzQ7cGVyc2lzdGVudCYjMzQ7LAotCQljcHUsICp0YWcpOwogCi0JcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiAtRU5PREVWOwotI2VuZGlmCiYjNDM7CXJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpOwogfQotRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTsKJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpOwogCiAvKioKICAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnkKQEAgLTMxNiw4ICYjNDM7Mzk0LDYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQogCXNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7CiAKIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCS8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7CiAKIAlzd2l0Y2ggKGxvYykgewogCWNhc2UgUENJX1RQSF9MT0NfTVNJWDoKQEAgLTM2NiwyNyAmIzQzOzQ0MiwxMCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpOwogCi0vKioKLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZQotICogQHBkZXY6IFBDSSBkZXZpY2UKLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKLSAqCi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlCi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlCi0gKgotICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsCi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXIKLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQotICovCi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKJiM0MztzdGF0aWMgaW50IGVuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCB1OCByZXFfdHlwZSkKIHsKIAl1MzIgcmVnOwogCXU4IGRldl9tb2RlczsKLQl1OCBycF9yZXFfdHlwZTsKIAogCS8qIEhvbm9yICYjMzQ7bm90cGgmIzM0OyBrZXJuZWwgcGFyYW1ldGVyICovCiAJaWYgKHBjaV90cGhfZGlzYWJsZWQpCkBAIC00MDQsMjYgJiM0Mzs0NjMsMTIgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAJaWYgKCEoKDEgJmx0OyZsdDsgbW9kZSkgJmFtcDsgZGV2X21vZGVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwZGV2LSZndDt0cGhfbW9kZSA9IG1vZGU7Ci0KLQkvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7Ci0JaWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKQotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIOwotCWVsc2UKLQkJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7Ci0KLQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqLwotCWlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHsKLQkJcnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7Ci0KLQkJLyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqLwotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi0mZ3Q7dHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7Ci0JfQotCi0JaWYgKHBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKQomIzQzOwlpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCAmYW1wOyZhbXA7ICFwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXBkZXYtJmd0O3RwaF9tb2RlID0gbW9kZTsKJiM0MzsJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gcmVxX3R5cGU7CiYjNDM7CiAJLyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtJmd0O3RwaF9jYXAgJiM0MzsgUENJX1RQSF9DVFJMLCAmYW1wO3JlZyk7CiAKQEAgLTQzMSw3ICYjNDM7NDc2LDcgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAJcmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIHBkZXYtJmd0O3RwaF9tb2RlKTsKIAogCXJlZyAmYW1wOz0gflBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSzsKLQlyZWcgfD0gRklFTERfUFJFUChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSk7CiYjNDM7CXJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcmVxX3R5cGUpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ1RSTCwgcmVnKTsKIApAQCAtNDM5LDggJiM0Mzs0ODQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKJiM0MzsgKgomIzQzOyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKJiM0MzsgKiBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIG5vdC4gQWRkaXRpb25hbGx5IGRldGVybWluZSB3aGF0IHR5cGVzIG9mIHJlcXVlc3RzLAomIzQzOyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlcgomIzQzOyAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiYjNDM7ICovCiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IHBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOgomIzQzOwkJCQkJICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7CiYjNDM7CXJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaCk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvbgomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGUKJiM0MzsgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKQomIzQzOyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHkKJiM0MzsgKgomIzQzOyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGUKJiM0MzsgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdAomIzQzOyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKQomIzQzO3sKJiM0MzsJdTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlCiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC4KJiM0MzsgKi8KJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBkZXYtJmd0O3RwaF9yZXFfdHlwZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTsKJiM0MzsKIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOwpAQCAtNTEyLDE0ICYjNDM7NjEyLDEzMSBAQCB2b2lkIHBjaV9ub190cGgodm9pZCkKIAogdm9pZCBwY2lfdHBoX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiYjNDM7CXU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7CiAJaW50IG51bV9lbnRyaWVzOwogCXUzMiBzYXZlX3NpemU7CiYjNDM7CXUzMiByZWcgPSAwOwogCiAJcGRldi0mZ3Q7dHBoX2NhcCA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCk7CiAJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQogCQlyZXR1cm47CiAKJiM0MzsJLyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi8KJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtJmd0O3RwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsICZhbXA7cmVnKTsKJiM0MzsJaWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKQomIzQzOwkJdHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDsKJiM0MzsJZWxzZQomIzQzOwkJdHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7CiYjNDM7CiYjNDM7CS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovCiYjNDM7CWlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHsKJiM0MzsJCXJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpOwomIzQzOwkJLyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqLwomIzQzOwkJdHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkgewomIzQzOwkJcGRldi0mZ3Q7dHBoX2NhcCA9IDA7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGRldi0mZ3Q7dHBoX2V4dF9zdXBwb3J0ID0gISEodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpOwomIzQzOwogCW51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7CiAJc2F2ZV9zaXplID0gc2l6ZW9mKHUzMikgJiM0MzsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTsKIAlwY2lfYWRkX2V4dF9jYXBfc2F2ZV9idWZmZXIocGRldiwgUENJX0VYVF9DQVBfSURfVFBILCBzYXZlX3NpemUpOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICogQHdhbnRfZXh0OiBmYWxzZSAtIGNoZWNrIFRQSCBjYXAgZXhpc3RzOyB0cnVlIC0gY2hlY2sgRVhUX1RQSCBzdXBwb3J0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgb24gbWF0Y2hlZCBjb25kaXRpb24sIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KQomIzQzO3sKJiM0MzsJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXdhbnRfZXh0KQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCB0cGhfY3B1X3N0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZiwKJiM0MzsJCQkgICAgICAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTsKJiM0MzsJY29uc3Qgc2l6ZV90IGVudHJ5X3N6ID0gUENJX1RQSF9DUFVfU1RfRU5UUllfU1o7CiYjNDM7CWNvbnN0IHNpemVfdCB0b3RhbF9zaXplID0gbnJfY3B1X2lkcyAqIGVudHJ5X3N6OwomIzQzOwlzaXplX3QgY29waWVkID0gMDsKJiM0MzsJbG9mZl90IHBvcyA9IG9mZjsKJiM0MzsKJiM0MzsJaWYgKHBvcyAmZ3Q7PSB0b3RhbF9zaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgdG90YWxfc2l6ZSAtIHBvcyk7CiYjNDM7CiYjNDM7CXdoaWxlIChjb3BpZWQgJmx0OyBjb3VudCkgewomIzQzOwkJdW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejsKJiM0MzsJCXNpemVfdCBlbnRyeV9vZmYgPSBwb3MgJSBlbnRyeV9zejsKJiM0MzsJCXNpemVfdCByZW1haW4gPSBlbnRyeV9zeiAtIGVudHJ5X29mZjsKJiM0MzsJCXNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7CiYjNDM7CQlzdHJ1Y3QgcGNpX3RwaF9jcHVfc3Qgc3QgPSB7MH07CiYjNDM7CiYjNDM7CQlpZiAoY3B1X3Bvc3NpYmxlKGNwdV9pZHgpKQomIzQzOwkJCWdldF9jcHVfYWxsX3N0KHBkZXYsIGNwdV9pZHgsICZhbXA7c3QpOwomIzQzOwomIzQzOwkJbWVtY3B5KGJ1ZiAmIzQzOyBjb3BpZWQsIChjaGFyICopJmFtcDtzdCAmIzQzOyBlbnRyeV9vZmYsIGNodW5rKTsKJiM0MzsKJiM0MzsJCWNvcGllZCAmIzQzOz0gY2h1bms7CiYjNDM7CQlwb3MgJiM0Mzs9IGNodW5rOwomIzQzOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvcGllZDsKJiM0Mzt9CiYjNDM7c3RhdGljIEJJTl9BVFRSKHRwaF9jcHVfc3QsIDA0MDAsIHRwaF9jcHVfc3RfcmVhZCwgTlVMTCwgMCk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCB0cGhfY3B1X3N0X2Jpbl9hdHRyc1tdID0gewomIzQzOwkmYW1wO2Jpbl9hdHRyX3RwaF9jcHVfc3QsCiYjNDM7CU5VTEwsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsIGludCBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5yX2NwdV9pZHMgKiBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVtb2RlX3QgdHBoX2NwdV9zdF9hdHRyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphLCBpbnQgbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihrb2JqX3RvX2Rldihrb2JqKSk7CiYjNDM7CWJvb2wgaXNfcm9vdF9wb3J0ID0gcGNpX2lzX3BjaWUocGRldikgJmFtcDsmYW1wOwomIzQzOwkJCQlwY2lfcGNpZV90eXBlKHBkZXYpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQ7CiYjNDM7CXUzMiBkZXZjYXAyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFpc19yb290X3BvcnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgJmFtcDtkZXZjYXAyKTsKJiM0MzsJaWYgKCEoZGV2Y2FwMiAmYW1wOyBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCF0cGhfZHNtX3N1cHBvcnRlZChwZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gYS0mZ3Q7YXR0ci5tb2RlOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjaWVfdHBoX2NwdV9zdF9hdHRyX2dyb3VwID0gewomIzQzOwkuYmluX2F0dHJzID0gdHBoX2NwdV9zdF9iaW5fYXR0cnMsCiYjNDM7CS5iaW5fc2l6ZSA9IHRwaF9jcHVfc3RfYmluX3NpemUsCiYjNDM7CS5pc19iaW5fdmlzaWJsZSA9IHRwaF9jcHVfc3RfYXR0cl9pc192aXNpYmxlLAomIzQzO307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKaW5kZXggMGM3NzEwNjRjMGI4NDQuLjZkNzM2Njg0NTljZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jCkBAIC02MCw2ICYjNDM7NjAsMTIgQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDsKIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgJiMzNDtEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuJiMzNDspOwogCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzO3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoOwomIzQzO21vZHVsZV9wYXJhbShlbmFibGVfdW5zYWZlX3RwaCwgYm9vbCwgMDQ0NCk7CiYjNDM7TU9EVUxFX1BBUk1fREVTQyhlbmFibGVfdW5zYWZlX3RwaCwgJiMzNDtFbmFibGUgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQuIEl0IG1heSBicmVhayBwbGF0Zm9ybSBpc29sYXRpb24uIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRoaXMgaXMgZm9yLCBzdGVwIGF3YXkuIChkZWZhdWx0OiBmYWxzZSkmIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3dpdGNoIChwZGV2LSZndDt2ZW5kb3IpIHsKQEAgLTI1NywxMiAmIzQzOzI2MywxNyBAQCBzdGF0aWMgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAlib29sIGlzX2Rpc2FibGVfdmdhID0gdHJ1ZTsKJiM0MzsJYm9vbCBpc19lbmFibGVfdW5zYWZlX3RwaCA9IGZhbHNlOwogCiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQQogCWlzX2Rpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7CiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7CWlzX2VuYWJsZV91bnNhZmVfdHBoID0gZW5hYmxlX3Vuc2FmZV90cGg7CiYjNDM7I2VuZGlmCiAKLQl2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMobm9pbnR4bWFzaywgaXNfZGlzYWJsZV92Z2EsIGRpc2FibGVfaWRsZV9kMyk7CiYjNDM7CXZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzLAomIzQzOwkJCQkgaXNfZW5hYmxlX3Vuc2FmZV90cGgpOwogCiAJLyogUmVnaXN0ZXIgYW5kIHNjYW4gZm9yIGRldmljZXMgKi8KIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbXA7dmZpb19wY2lfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCmluZGV4IGExMGVkNzMzZjBlM2FmLi4xMGY0ZTlmYWJlYTdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92ZmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtMTA4NSw2ICYjNDM7MTA4NiwxMTggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQogCXJldHVybiAwOwogfQogCiYjNDM7LyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovCiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpOwomIzQzOwlwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7CiYjNDM7CiYjNDM7CXBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NUUkwsIEFMTF9WSVJULCBBTExfV1JJVEUpOwomIzQzOwomIzQzOwkvKiBQZXIgUENJIHNwZWNpZmljYXRpb246IFRoZXJlIGlzIGFuIHVwcGVyIGxpbWl0IG9mIDY0IGVudHJpZXMKJiM0MzsJICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZAomIzQzOwkgKiBDYXBhYmlsaXR5IHN0cnVjdHVyZS4KJiM0MzsJICogQW5kIHRoZSBwY2lfZXh0X2NhcF9sZW5ndGhbUENJX0VYVF9DQVBfSURfVFBIXSBpcyAweEZGLCBzbyB0aGUKJiM0MzsJICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDY0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXBfc2V0dyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GICYjNDM7IGkgKiBzaXplb2YodTE2KSwKJiM0MzsJCSAgICAgICAodTE2KUFMTF9WSVJULCAodTE2KUFMTF9XUklURSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3RwaF9tYXNrX2V4dF90cGhfYml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICAgaW50IHBvcykKJiM0Mzt7CiYjNDM7CV9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgdmFsOwomIzQzOwomIzQzOwlpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCB0cnVlKSkgewomIzQzOwkJdmFsID0gbGUzMl90b19jcHUoKnZwdHIpOwomIzQzOwkJdmFsICZhbXA7PSB+UENJX1RQSF9DQVBfRVhUX1RQSDsKJiM0MzsJCSp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKTsKJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiYjNDM7CQkJCSBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sCiYjNDM7CQkJCSBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlcV9lbl9ieXRlID0gUENJX1RQSF9DVFJMICYjNDM7IDE7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi0mZ3Q7cGRldjsKJiM0MzsJX19sZTMyIG9yZ192YWwgPSAwOwomIzQzOwlib29sIGV4dGVuZGVkOwomIzQzOwl1OCBtb2RlLCByZXE7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CXUxNiBzdGFydDsKJiM0MzsJdTMyIGRhdGE7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX3Blcm1pdCkKJiM0MzsJCXJldHVybiBjb3VudDsKJiM0MzsKJiM0MzsJZG93bl93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogQmFjayB1cCB0aGUgb3JpZ2luYWwgdmFsdWVzIGluIG9yZGVyIHJvbGxiYWNrIHdoZW4gZmFpbCAqLwomIzQzOwlpZiAob2Zmc2V0ICZsdDs9IHJlcV9lbl9ieXRlICZhbXA7JmFtcDsgb2Zmc2V0ICYjNDM7IGNvdW50ICZndDsgcmVxX2VuX2J5dGUpCiYjNDM7CQl2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LAomIzQzOwkJCQkJICZhbXA7b3JnX3ZhbCk7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCB2YWwpOwomIzQzOwlpZiAocmV0ICE9IGNvdW50KSB7CiYjNDM7CQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2tpcCBpZiB3cml0ZSByYW5nZSBkb2VzIG5vdCBjb3ZlciBSZXF1ZXN0ZXIgRW5hYmxlIGJ5dGUgKi8KJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IHJlcV9lbl9ieXRlIHx8IG9mZnNldCAmIzQzOyBjb3VudCAmbHQ7PSByZXFfZW5fYnl0ZSkgewomIzQzOwkJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LAomIzQzOwkJCQkJICBvcmdfdmFsKTsKJiM0MzsJCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpOwomIzQzOwlkYXRhID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7CiYjNDM7CW1vZGUgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIGRhdGEpOwomIzQzOwlyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBkYXRhKTsKJiM0MzsKJiM0MzsJaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkgewomIzQzOwkJZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7CiYjNDM7CQlyZXQgPSBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQocGRldiwgbW9kZSwgZXh0ZW5kZWQpOwomIzQzOwkJaWYgKCFyZXQgJmFtcDsmYW1wOyB2ZGV2LSZndDt0cGhfc3Rfc2hhZG93KSB7CiYjNDM7CQkJZm9yIChpID0gMDsgaSAmbHQ7IHZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQkJcGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGksCiYjNDM7CQkJCQkJICAgICAgdmRldi0mZ3Q7dHBoX3N0X3NoYWRvd1tpXSk7CiYjNDM7CQl9CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwKJiM0MzsJCQkJCQkgIG9mZnNldCwgb3JnX3ZhbCk7CiYjNDM7CX0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHsKJiM0MzsJCXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwKJiM0MzsJCQkJCSAgb3JnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAvKgogICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzCiAgKi8KQEAgLTExMDAsNiAmIzQzOzEyMTMsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZCkKIAogCWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTsKIAlmcmVlX3Blcm1fYml0cygmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7CiYjNDM7CWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTsKIH0KIAogaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKQpAQCAtMTEyMCw2ICYjNDM7MTIzNCw4IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZCkKIAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KIAlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7CiAJcmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pOwomIzQzOwlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7CiYjNDM7CWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlOwogCWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTsKIAllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlOwogCkBAIC0xNDUwLDYgJiM0MzsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG8KIAkJYnl0ZSAmYW1wOz0gUENJX0RQQV9DQVBfU1VCU1RBVEVfTUFTSzsKIAkJcmV0dXJuIFBDSV9EUEFfQkFTRV9TSVpFT0YgJiM0MzsgYnl0ZSAmIzQzOyAxOwogCWNhc2UgUENJX0VYVF9DQVBfSURfVFBIOgomIzQzOwkJaWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKQomIzQzOwkJCXJldHVybiAwOwogCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtkd29yZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTsKQEAgLTE3MDEsNiAmIzQzOzE4MTksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJcmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEggJmFtcDsmYW1wOyAhaGlkZGVuKQomIzQzOwkJCXZmaW9fdHBoX21hc2tfZXh0X3RwaF9iaXQodmRldiwgZXBvcyk7CiAKIAkJLyoKIAkJICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggYTI4ZjFlOTkzNjJjMWUuLjFlNzA2YTY5MGRiZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwpAQCAtMjksNiAmIzQzOzI5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11ZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2ktcDJwZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpCiAjaW5jbHVkZSAmbHQ7YXNtL2VlaC5oJmd0OwogI2VuZGlmCkBAIC00MSw2ICYjNDM7NDIsNyBAQAogc3RhdGljIGJvb2wgbm9pbnR4bWFzazsKIHN0YXRpYyBib29sIGRpc2FibGVfdmdhOwogc3RhdGljIGJvb2wgZGlzYWJsZV9pZGxlX2QzOwomIzQzO3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoOwogCiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9ldmVudGZkX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQogewpAQCAtNTMxLDYgJiM0Mzs1MzMsNTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHZmaW9fcGNpX2NvcmVfcG1fb3BzID0gewogCQkJICAgTlVMTCkKIH07CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkgewomIzQzOwkJcmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpOwomIzQzOwl9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7CiYjNDM7CQlyZXQgPSBwY2lfbXNpeF92ZWNfY291bnQocGRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzID0gMDsKJiM0MzsJdmRldi0mZ3Q7dHBoX3N0X3NoYWRvdyA9IE5VTEw7CiYjNDM7CXZkZXYtJmd0O3RwaF9wZXJtaXQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFlbmFibGVfdW5zYWZlX3RwaCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2ZGV2LSZndDt0cGhfc3RfZW50cmllcyA9IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZSh2ZGV2KTsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzKSB7CiYjNDM7CQl2ZGV2LSZndDt0cGhfc3Rfc2hhZG93ID0ga2NhbGxvYyh2ZGV2LSZndDt0cGhfc3RfZW50cmllcywgc2l6ZW9mKHUxNiksCiYjNDM7CQkJCQkgICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJaWYgKCF2ZGV2LSZndDt0cGhfc3Rfc2hhZG93KQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3BjaV90cGhfZGVpbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CWtmcmVlKHZkZXYtJmd0O3RwaF9zdF9zaGFkb3cpOwomIzQzOwl2ZGV2LSZndDt0cGhfc3Rfc2hhZG93ID0gTlVMTDsKJiM0MzsJdmRldi0mZ3Q7dHBoX3N0X2VudHJpZXMgPSAwOwomIzQzOwl2ZGV2LSZndDt0cGhfcGVybWl0ID0gZmFsc2U7CiYjNDM7fQomIzQzOwogaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtJmd0O3BkZXY7CkBAIC01NTcsNiAmIzQzOzYwNSwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKIAogCXZkZXYtJmd0O3Jlc2V0X3dvcmtzID0gIXJldDsKJiM0MzsKJiM0MzsJLyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovCiYjNDM7CXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CXJldCA9IHZmaW9fcGNpX3RwaF9pbml0KHZkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CiYjNDM7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpOwogCWlmICghdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKQpAQCAtNjE0LDYgJiM0Mzs2NjksNyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogb3V0X2ZyZWVfc3RhdGU6CiAJa2ZyZWUodmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKTsKIAl2ZGV2LSZndDtwY2lfc2F2ZWRfc3RhdGUgPSBOVUxMOwomIzQzOwl2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpOwogb3V0X2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIG91dF9wb3dlcjoKQEAgLTY4Miw2ICYjNDM7NzM4LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWtmcmVlKHZkZXYtJmd0O3JlZ2lvbik7CiAJdmRldi0mZ3Q7cmVnaW9uID0gTlVMTDsgLyogZG9uJiMzOTt0IGtyZWFsbG9jIGEgZnJlZWQgcG9pbnRlciAqLwogCiYjNDM7CS8qIFJlc2V0IFRQSCBzdGF0dXMgb24gc2Vzc2lvbiBleGl0ICovCiYjNDM7CXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CXZmaW9fcGNpX3RwaF9kZWluaXQodmRldik7CiAJdmZpb19jb25maWdfZnJlZSh2ZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBQQ0lfU1REX05VTV9CQVJTOyBpJiM0MzsmIzQzOykgewpAQCAtMTU1NCw2ICYjNDM7MTYxMyw5NSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJCSAgICB1MzIgZmxhZ3MsIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZW5hYmxlX3Vuc2FmZV90cGgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfcGVybWl0KQomIzQzOwkJdmRldi0mZ3Q7dHBoX3Blcm1pdCA9IDE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnKAomIzQzOwkJCXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBfX3VzZXIgKmFyZywKJiM0MzsJCQlzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIGNvbmZpZzsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl2b2lkIF9fdXNlciAqdXB0cjsKJiM0MzsJaW50IGksIGlkeCwgcmV0OwomIzQzOwlzaXplX3Qgc3o7CiYjNDM7CXUxNiAqc3RzOwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZV91bnNhZmVfdHBoKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZihjb25maWcpKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfcGVybWl0IHx8ICF2ZGV2LSZndDt0cGhfc3Rfc2hhZG93KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2NvbmZpZywgYXJnLCBzaXplb2YoY29uZmlnKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJaWYgKGNvbmZpZy5jb3VudCA9PSAwIHx8IGNvbmZpZy5yZXNlcnZlZCAhPSAwIHx8CiYjNDM7CQljb25maWcuaW5kZXggJmd0Oz0gdmRldi0mZ3Q7dHBoX3N0X2VudHJpZXMgfHwKJiM0MzsJCWNvbmZpZy5jb3VudCAmZ3Q7IHZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzIC0gY29uZmlnLmluZGV4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXVwdHIgPSB1NjRfdG9fdXNlcl9wdHIoY29uZmlnLmRhdGFfdXB0cik7CiYjNDM7CXN0cyA9IG1lbWR1cF9hcnJheV91c2VyKHVwdHIsIGNvbmZpZy5jb3VudCwgc2l6ZW9mKHUxNikpOwomIzQzOwlzeiA9IGNvbmZpZy5jb3VudCAqIHNpemVvZih1MTYpOwomIzQzOwlpZiAoSVNfRVJSKHN0cykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihzdHMpOwomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3VubG9ja19tZW1vcnk7CiYjNDM7CiYjNDM7CWlmIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHBkZXYpID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpCiYjNDM7CQlnb3RvIHVwZGF0ZV9zaGFkb3c7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb25maWcuY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZHggPSBjb25maWcuaW5kZXggJiM0MzsgaTsKJiM0MzsJCXJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHN0c1tpXSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcm9sbGJhY2s7CiYjNDM7CX0KJiM0MzsKJiM0Mzt1cGRhdGVfc2hhZG93OgomIzQzOwltZW1jcHkoJmFtcDt2ZGV2LSZndDt0cGhfc3Rfc2hhZG93W2NvbmZpZy5pbmRleF0sIHN0cywgc3opOwomIzQzOwlyZXQgPSAwOwomIzQzOwlnb3RvIG91dF91bmxvY2tfbWVtb3J5OwomIzQzOwomIzQzO3JvbGxiYWNrOgomIzQzOwl3aGlsZSAoaS0tICZndDsgMCkgewomIzQzOwkJaWR4ID0gY29uZmlnLmluZGV4ICYjNDM7IGk7CiYjNDM7CQlwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgaWR4LCB2ZGV2LSZndDt0cGhfc3Rfc2hhZG93W2lkeF0pOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9ja19tZW1vcnk6CiYjNDM7CXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwomIzQzOwlrZnJlZShzdHMpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJCQl2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opCiB7CkBAIC0xNTcyLDYgJiM0MzsxNzIwLDExIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiAJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6CiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFOgomIzQzOwkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlKHZkZXYsIGZsYWdzLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHOgomIzQzOwkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnKHZkZXYsIGZsYWdzLAomIzQzOwkJCQkJCQkgICBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CkBAIC0yNjE1LDExICYjNDM7Mjc2OCwxMyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0KQogfQogCiB2b2lkIHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhib29sIGlzX25vaW50eG1hc2ssIGJvb2wgaXNfZGlzYWJsZV92Z2EsCi0JCQkgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMykKJiM0MzsJCQkgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMywKJiM0MzsJCQkgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKQogewogCW5vaW50eG1hc2sgPSBpc19ub2ludHhtYXNrOwogCWRpc2FibGVfdmdhID0gaXNfZGlzYWJsZV92Z2E7CiAJZGlzYWJsZV9pZGxlX2QzID0gaXNfZGlzYWJsZV9pZGxlX2QzOwomIzQzOwllbmFibGVfdW5zYWZlX3RwaCA9IGlzX2VuYWJsZV91bnNhZmVfdHBoOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAppbmRleCBiZTY4Y2QxN2YyZjgzMy4uNTkxN2EwNjk0YzFkNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKICAqLwogI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0gKICNkZWZpbmUgTElOVVhfUENJX1RQSF9ICiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwogCiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudApAQCAtMjYsMTAgJiM0MzsyNywxNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCWVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpOwomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJCSBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7CiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpOwomIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKTsKJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQpAQCAtMzgsOSAmIzQzOzQ1LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKIHsgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MzsJCQkJYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsCiYjNDM7CQkJCQkgICBib29sIGV4dGVuZGVkKQomIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dCkKJiM0Mzt7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDJjNDQ1NDU4M2MxMTViLi4yODVjMGYwMDg4MmUwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC00NzEsNyAmIzQzOzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHsKIAl1bnNpZ25lZCBpbnQJYXRzX2VuYWJsZWQ6MTsJCS8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovCiAJdW5zaWduZWQgaW50CXBhc2lkX2VuYWJsZWQ6MTsJLyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovCiAJdW5zaWduZWQgaW50CXByaV9lbmFibGVkOjE7CQkvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovCi0JdW5zaWduZWQgaW50CXRwaF9lbmFibGVkOjE7CQkvKiBUTFAgUHJvY2Vzc2luZyBIaW50cyAqLwogCXVuc2lnbmVkIGludAlmbV9lbmFibGVkOjE7CQkvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovCiAJdW5zaWduZWQgaW50CWlzX21hbmFnZWQ6MTsJCS8qIE1hbmFnZWQgdmlhIGRldnJlcyAqLwogCXVuc2lnbmVkIGludAlpc19tc2lfbWFuYWdlZDoxOwkvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqLwpAQCAtNTg5LDcgJiM0Mzs1ODgsMTAgQEAgc3RydWN0IHBjaV9kZXYgewogCXU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi8KIAogI2lmZGVmIENPTkZJR19QQ0lFX1RQSAotCXUxNgkJdHBoX2NhcDsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX2NhcDoxNDsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX2V4dF9zdXBwb3J0OjE7IC8qIEluZGljYXRlIHdoZXRoZXIgRXh0ZW5kZWQgVFBICiYjNDM7CQkJCQkgICAgKiByZXF1ZXN0ZXIgaXMgc3VwcG9ydGVkICovCiYjNDM7CXUxNgkJdHBoX2VuYWJsZWQ6MTsJLyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqLwogCXU4CQl0cGhfbW9kZTsJLyogVFBIIG1vZGUgKi8KIAl1OAkJdHBoX3JlcV90eXBlOwkvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaAppbmRleCA1ZmM2Y2U0ZGQ3ODYxNi4uNTI3Yzg0ZjA0MmFhNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJYm9vbAkJCXBtX2ludHhfbWFza2VkOjE7CiAJYm9vbAkJCXBtX3J1bnRpbWVfZW5nYWdlZDoxOwogCWJvb2wJCQlzcmlvdl9hY3RpdmU7CiYjNDM7CWJvb2wJCQl0cGhfcGVybWl0OwogCXN0cnVjdCBwY2lfc2F2ZWRfc3RhdGUJKnBjaV9zYXZlZF9zdGF0ZTsKIAlzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlCSpwbV9zYXZlOwogCWludAkJCWlvZXZlbnRmZHNfbnI7CkBAIC0xNDMsNiAmIzQzOzE0NCw4IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCW5iOwogCXN0cnVjdCByd19zZW1hcGhvcmUJbWVtb3J5X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAlkbWFidWZzOwomIzQzOwl1MTYJCQkqdHBoX3N0X3NoYWRvdzsKJiM0MzsJdTE2CQkJdHBoX3N0X2VudHJpZXM7CiB9OwogCiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHsKQEAgLTE1OCw3ICYjNDM7MTYxLDggQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHZmaW9fcGNpX3JlZ29wcyAqb3BzLAogCQkJCSAgICAgIHNpemVfdCBzaXplLCB1MzIgZmxhZ3MsIHZvaWQgKmRhdGEpOwogdm9pZCB2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMoYm9vbCBub2ludHhtYXNrLCBib29sIGlzX2Rpc2FibGVfdmdhLAotCQkJICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMpOwomIzQzOwkJCSAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLAomIzQzOwkJCSAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpOwogdm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7CiBpbnQgdmZpb19wY2lfY29yZV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7CiB2b2lkIHZmaW9fcGNpX2NvcmVfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oCmluZGV4IDRmMTUwMDI4OTY1ZDhiLi41YzRlYTQ0ZDY2ZDIwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaApAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNkZWZpbmUgX1VBUElMSU5VWF9QQ0lfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsJLyogVGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKIC8qCiAgKiBUaGUgUENJIGludGVyZmFjZSB0cmVhdHMgbXVsdGktZnVuY3Rpb24gZGV2aWNlcyBhcyBpbmRlcGVuZGVudApAQCAtNDYsNCAmIzQzOzQ3LDE5IEBAIGVudW0gcGNpX2hvdHBsdWdfZXZlbnQgewogCVBDSV9IT1RQTFVHX0NBUkRfTk9UX1BSRVNFTlQsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBQQ0llIFRQSCBzeXNmcyBiaW5hcnkgZW50cnkgZm9yIENQVS10by1TVCBtYXBwaW5nCiYjNDM7ICogU3lzZnMgZmlsZTogL3N5cy9idXMvcGNpL2RldmljZXMvJmx0O0JERiZndDsvdHBoX2NwdV9zdAomIzQzOyAqIEVhY2ggZW50cnkgaXMgOCBieXRlcyBhbGlnbmVkLCBzZWVrIG9mZnNldCA9IGNwdV9pZCAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaCiYjNDM7ICovCiYjNDM7c3RydWN0IHBjaV90cGhfY3B1X3N0IHsKJiM0MzsJX191OCAgdm1fc3Q7ICAgICAgICAvKiBWb2xhdGlsZSBNZW1vcnkgU3RlZXJpbmcgVGFnICgxIGJ5dGUpICovCiYjNDM7CV9fdTggIHBtX3N0OyAgICAgICAgLyogUGVyc2lzdGVudCBNZW1vcnkgU3RlZXJpbmcgVGFnICgxIGJ5dGUpICovCiYjNDM7CV9fdTE2IHZtX3hzdDsgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IEV4dGVuZGVkIFN0ZWVyaW5nIFRhZyAoMiBieXRlcykgKi8KJiM0MzsJX191MTYgcG1feHN0OyAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovCiYjNDM7CV9fdTE2IHJlc2VydmVkOyAgICAgLyogUGFkZGluZyB0byA4IGJ5dGVzIGZvciBhbGlnbmVkIG9mZnNldCBsb29rdXAgKi8KJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOyNkZWZpbmUgUENJX1RQSF9DUFVfU1RfRU5UUllfU1ogc2l6ZW9mKHN0cnVjdCBwY2lfdHBoX2NwdV9zdCkKJiM0MzsKICNlbmRpZiAvKiBfVUFQSUxJTlVYX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAppbmRleCA1ZGU2MThhM2E1ZWVlZS4uNjEwNzk1OTRhOTFmNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaApAQCAtMTUzNCw2ICYjNDM7MTUzNCwzNSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHsKICAqLwogI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTIKIAomIzQzOy8qCiYjNDM7ICogRGV2aWNlLWxldmVsIG9wdC1pbiBmb3IgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0LgomIzQzOyAqIFdoZW4gc2V0LCBhbGxvd3MgYWNjZXNzIHRvIFRQSF9DUFVfU1QgYW5kIFRQSF9TVF9DT05GSUcgZmVhdHVyZXMuCiYjNDM7ICogUmVxdWlyZXMgZ2xvYmFsIGVuYWJsZV91bnNhZmVfdHBoIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgZW5hYmxlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRQkxMwomIzQzOwomIzQzOy8qKgomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJRyAtIENvbmZpZ3VyZSBQQ0llIFRQSCBTdGVlcmluZyBUYWcgZW50cmllcwomIzQzOyAqCiYjNDM7ICogUHJvdmlkZXMgdXNlcnNwYWNlIGludGVyZmFjZSB0byBjb25maWd1cmUgUENJZSBUUEggU1QgdGFibGUgZW50cmllcy4KJiM0MzsgKgomIzQzOyAqIEBpbmRleDogU3RhcnQgZW50cnkgb2Zmc2V0IHdpdGhpbiBTVCB0YWJsZQomIzQzOyAqIEBjb3VudDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGVudHJpZXMgdG8gY29uZmlndXJlCiYjNDM7ICogQGRhdGFfdXB0cjogVXNlcnNwYWNlIGRhdGEgYnVmZmVyIGZvciAxNi1iaXQgcmF3IFNUIHZhbHVlcwomIzQzOyAqCiYjNDM7ICogVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHR3byBwcmVjb25kaXRpb25zOgomIzQzOyAqIDEuIEdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQ7CiYjNDM7ICogMi4gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFIGhhcyBiZWVuIFNFVCBvbiB0aGUgZGV2aWNlIGJlZm9yZWhhbmQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUcJMTQKJiM0MzsKJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIHsKJiM0MzsJX191MTYgaW5kZXg7CiYjNDM7CV9fdTE2IGNvdW50OwomIzQzOwlfX3UzMiByZXNlcnZlZDsgLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVybyAqLwomIzQzOwlfX2FsaWduZWRfdTY0IGRhdGFfdXB0cjsKJiM0Mzt9OwomIzQzOwogLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovCiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBQQ0llIFRQSCBWRklPIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBpbnRyb2R1Y2VzIFBDSWUgVFBIIHN1cHBvcnQgd2l0aGluIFZGSU8uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYCB3aGljaCBub3cgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBmb3IgcmV0cmlldmluZyBDUFUgU1QgaW5mb3JtYXRpb24sIGV4cGxpY2l0bHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIFRQSCwgYW5kIGV4cG9zZXMgdGhpcyBpbmZvcm1hdGlvbiB2aWEgdGhlIGB0cGhfY3B1X3N0YCBzeXNmcyBhdHRyaWJ1dGUuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KClRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgYXBwZWFycyBpbiB0aGUgVkZJTyBQQ0kgY29kZTogYHZmaW9fcGNpLmNgLCBgdmZpb19wY2lfY29uZmlnLmNgLCBhbmQgYHZmaW9fcGNpX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIFRQSCBzdXBwb3J0IGlzIGJlaW5nIGludGVncmF0ZWQsIGFuZCBpdCYjMzk7cyBjb250cm9sbGVkIGJ5IGEgbW9kdWxlIHBhcmFtZXRlciwgYGVuYWJsZV91bnNhZmVfdHBoYC4gVGhpcyBwYXJhbWV0ZXIgZmxhZ3MgYSBwb3RlbnRpYWwgcmlzayB3aXRoIGVuYWJsaW5nIHRoaXMgYmVoYXZpb3IsIHNvIGl0IGlzIG5lY2Vzc2FyeSB0byBjb25zaWRlciB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdXBwb3J0LiBOb3csIHRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhlc2UgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzOiBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFYCBhbmQgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJR2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHVzZXIgc3BhY2UuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhpcyBhbGwgcGxheSBvdXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IE9idmlvdXNseSwgVkZJTyBQQ0kgaXMgb25seSByZWFjaGFibGUgaWYgeW91IGhhdmUgYSBQQ0kgZGV2aWNlIHBhc3NlZCB0aHJvdWdoIGRpcmVjdGx5LiBBbHRlcm5hdGl2ZWx5LCBpZiBhIHVzZXIgbWFrZXMgdXNlIG9mIGB2ZmlvLXBjaWAgd2l0aCBhIGR1bW15IGRldmljZSwgb3IgYSB2aXJ0dWFsIGRldmljZSwgeW91IGNvdWxkIHRlc3QgdGhlIGNoYW5nZXMuCgpIb2xkIG9uLCB0aGlzIGBlbmFibGVfdW5zYWZlX3RwaGAgcGFyYW1ldGVyIGlzIHNwZWNpZmljIHRvIGB2ZmlvX3BjaWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKT2theSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBxdWlja2x5LiBBcmUgd2UgZXZlbiBidWlsZGluZyB0aGlzIHN0dWZmIGludG8gb3VyIGZ1enppbmcga2VybmVscz8gRmlyc3QsIGlzIGBDT05GSUdfUENJRV9UUEhgIGV2ZW4gZW5hYmxlZD8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0LiBXYWl0LCB0aGF0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vdCBhIG1vZHVsZSwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGRpcmVjdGx5LiBOZXh0LCBJIHNob3VsZCBjaGVjayB0aGF0IGBDT05GSUdfVkZJT19QQ0lgIGlzIGRlZmluaXRlbHkgZW5hYmxlZCwgYXMgdGhhdCYjMzk7cyB0aGUgY29yZSBkZXBlbmRlbmN5LiBUaW1lIHRvIGJyZWFrIG91dCB0aGUgdG9vbHMgYW5kIHJ1biBzb21lIHF1aWNrIGNvbmZpZyBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSUVfVFBIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1RMUCBQcm9jZXNzaW5nIEhpbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX1BDSUVfVFBIYCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgbGVnaXRpbWF0ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbiYjMzk7dCBpdD8gR29vZC4gSSBqdXN0IHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGNvbnRleHQgYmVmb3JlIG1vdmluZyBvbi4gTm93LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBDT05GSUdfVkZJT19QQ0lgLiBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhlIGRlcGVuZGVuY3kgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSB0d28uIFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBoZXJlPyBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmU/IERvZXMgb25lIGltcGxpY2l0bHkgcmVxdWlyZSB0aGUgb3RoZXI/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGh5cG90aGVzZXMgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgSU9NTVUgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlIHBhc3N0aHJvdWdoIHNjZW5hcmlvcy4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDczCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIE5ldyBWRklPIElPQ1RMcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRWAgYW5kIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUdgIGlvY3Rscy4gVGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYCBmdW5jdGlvbiwgYW5kIGNydWNpYWxseSwgdGhleSBkZXBlbmQgb24gdGhlIGBlbmFibGVfdW5zYWZlX3RwaGAgbW9kdWxlIHBhcmFtZXRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiBzeXprYWxsZXIgZWFzaWx5IHJlYWNoIHRoaXMgbmV3IGNvZGU/JiMzNDsgVHlwaWNhbGx5LCBtb2R1bGUgcGFyYW1ldGVycyBpbiBzeXprYWxsZXIgcmVxdWlyZSBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCB3aGljaCBhZGRzIG92ZXJoZWFkLiBXZSBjb3VsZCB0cnkgc3lzZnMgYnV0IGl0IGlzIG5vdCBleHBvc2VkIHRoaXMgd2F5LCBzbyBpdCBpcyB1bmxpa2VseS4KCkJ1dCwgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcHJvbXB0IHJlbWluZHMgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb25jZXJucyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBIb3dldmVyLCBWRklPIFBDSSBfaXNfIHJlYWNoYWJsZSBpbiBRRU1VLCByaWdodD8gU3l6a2FsbGVyIGhhcyB0aGUgcHJpbWl0aXZlcyB0byBkbyB0aGF0IHdpdGggYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgc28gb24sIGFuZCBJIGtub3cgaXQgaGFzIGZ1enppbmcgY2FwYWJpbGl0aWVzIGZvciBgdmZpb2AuIEluIGZhY3QsIGl0IGhhcyAqZGVzY3JpcHRpb25zKiBmb3IgYHZmaW9gLgoKVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGB2ZmlvX3BjaWAgaXRzZWxmIGlzIGJlaW5nIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIuIElmIGl0IGlzLCBhbmQgdGhlc2UgbmV3IGlvY3RscyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBleGlzdGluZyBWRklPIGZ1enppbmcgc3RyYXRlZ3ksIHRoYXQgYWRkcyBzaWduaWZpY2FudCB2YWx1ZS4gSWYgaXQgaXNuJiMzOTt0LCB0aGUgZWZmb3J0IHdvdWxkIGJlIHdvcnRoIG1vcmUgZGlzY3Vzc2lvbiwgYXMgdGhlIGxpa2VsaWhvb2Qgb2YgaGl0dGluZyB0aGlzIGNvZGUgcGF0aCBkZWNyZWFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTU4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9taWdybl9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTg4LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaGlzaV9hY2NfdmZpb19pb2N0bF9nZXRfcmVnaW9uLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYzoxNTg5Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTkwLVx0LnJlYWQgPSBoaXNpX2FjY192ZmlvX3BjaV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTYwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjA5LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYzoxNjEwOlx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjExLVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQyLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaXNtX3ZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYzozNDM6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQ0LVx0LnJlYWQgPSBpc21fdmZpb19wY2lfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTEzODY9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbWx4NXZmX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzkzLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYzoxMzk0Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzk1LVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNzEtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBudmdyYWNlX2dwdV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMDcyOlx0LmRldmljZV9mZWF0dXJlXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNzMtXHQucmVhZFx0XHQ9IG52Z3JhY2VfZ3B1X3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfY29yZV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA5Ni1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwOTc6XHQuZGV2aWNlX2ZlYXR1cmVcdD0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA5OC1cdC5yZWFkXHRcdD0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM9MTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHBkc192ZmlvX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE5OC1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM6MTk5Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYy0yMDAtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTQxLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjE0MjpcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNDMtXHQucmVhZFx0XHQ9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNjM0PXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcoXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3MDU6aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNi1cdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzMxLX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3MzI6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3MzMtXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZpcnRpb3ZmX3ZmaW9fcGNpX2xtX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTEtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6OTI6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTMtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9MTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZpcnRpb3ZmX3ZmaW9fcGNpX3RyYW5fbG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTMtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2aXJ0aW92Zl9wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjExNDpcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTUtXHQucmVhZCA9IHZpcnRpb3ZmX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNS1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxMzY6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTM3LVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM9NTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHhlX3ZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MjktXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYzo1MzA6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MzEtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD0xNzQ9bG9uZyB2ZmlvX3BjaV9jb3JlX2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc1LVx0XHR1bnNpZ25lZCBsb25nIGFyZyk7XG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaDoxNzY6aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc3LVx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZywgc2l6ZV90IGFyZ3N6KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIzMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUENJZSBUUEggQ29kZSBQYXRoIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHJlYWNoYWJsZS4gQnV0IHRoZXJlJiMzOTtzIHRoaXMgYGVuYWJsZV91bnNhZmVfdHBoYCBtb2R1bGUgcGFyYW1ldGVyIHRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuIEJ5IGRlZmF1bHQsIGl0JiMzOTtzIGBmYWxzZWAsIHdoaWNoIGlzIGEgcHJvYmxlbS4gU3l6a2FsbGVyIGNhbiYjMzk7dCBlYXNpbHkgZW5hYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIHVubGVzcyB0aGV5JiMzOTtyZSBpbiB0aGUgY29uZmlnIG9yIHdyaXRhYmxlIHZpYSBzeXNmcywgYW5kIHRoaXMgb25lIGlzIHJlYWQtb25seS4gV2UmIzM5O3JlIGV2YWx1YXRpbmcgaWYgdGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgKnNob3VsZCogYmUgZnV6emVkLCBhbmQgdGhpcyBsb29rcyB0cmlja3kuIElmIGl0IHJlcXVpcmVzIGEgbW9kdWxlIHBhcmFtZXRlciwgd2Ugc2hvdWxkIHByb2JhYmx5IG1lbnRpb24gaXQgaW4gdGhlIHJlYXNvbmluZy4KClRoZSBwcm9tcHQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciBkaXNhYmxlZCwgdGhlIGNvZGUgaXMgaW5kZWVkIHVucmVhY2hhYmxlLiBCdXQgaWYgd2UgKndhbnRlZCogdG8gZnV6eiBpdCwgd2UmIzM5O2QgbmVlZCB0byBlbmFibGUgdGhhdCBwYXJhbWV0ZXIgc29tZWhvdy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBkaXJlY3Qgd2F5IHRvIGRvIHRoYXQgaW4gdGhlIGBFbmFibGVDb25maWdzYC4KCk5vdywgdGhlcmUmIzM5O3MgYSBzeXNmcyBhdHRyaWJ1dGUsIGB0cGhfY3B1X3N0YCwgYWRkZWQgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYC4gSXQmIzM5O3MgZXhwb3NlZCBvbiBQQ0llIFJvb3QgUG9ydHMgd2l0aCBUUEggQ29tcGxldGVyIGNhcGFiaWxpdHkgYW5kIEFDUEkgRFNNIHN1cHBvcnQuIEluIFFFTVUsIGRvZXMgdGhlIFBDSWUgUm9vdCBQb3J0IHN1cHBvcnQgdGhpcz8gSXQgbWlnaHQgbm90LiBFdmVuIGlmIGl0IGRpZCwgdGhlIGB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZWAgZnVuY3Rpb24gY2hlY2tzIGZvciB0aGUgVFBIIENvbXBsZXRlciBjYXBhYmlsaXR5IGFuZCBBQ1BJIERTTSBzdXBwb3J0LiBJZiBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgdGhhdCwgdGhlIHN5c2ZzIGZpbGUgd29uJiMzOTt0IGJlIHZpc2libGUuCgpMb29raW5nIGF0IHRoZSBWRklPIFBDSSBwYXJ0LCBpZiBgZW5hYmxlX3Vuc2FmZV90cGhgIGlzIGZhbHNlLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGVgIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyB0aGUgaW9jdGwgd2lsbCBqdXN0IHJldHVybiBhbiBlcnJvci4gSW4gYHZmaW9fcGNpX2NvbmZpZy5jYCwgYHZkZXYtJmd0O3RwaF9wZXJtaXRgIGlzIG9ubHkgc2V0IGluIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZWAsIHdoaWNoIHJlcXVpcmVzIHRoZSBtb2R1bGUgcGFyYW1ldGVyLiBTbywgYWxsIHRoZSBWRklPIFRQSCBjb2RlIHBhdGhzIGFyZSBnYXRlZC4KClNpbmNlIGBlbmFibGVfdW5zYWZlX3RwaGAgaXMgcmVhZC1vbmx5IGFuZCBkZWZhdWx0cyB0byBmYWxzZSwgaXQgY2FuJiMzOTt0IGJlIGVuYWJsZWQgYXQgcnVudGltZS4gU3l6a2FsbGVyIGNhbiBwYXNzIGJvb3QgcGFyYW1ldGVycywgYnV0IG5vdCBpbiB0aGlzIGBzZXQtcmVzdWx0c2Agc2l0dWF0aW9uLiBJIGNhbiYjMzk7dCBldmVuIHRlbGwgU3l6a2FsbGVyIHRvIHBhc3MgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgLgoKSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBhIGRpc2FibGVkLWJ5LWRlZmF1bHQgbW9kdWxlIHBhcmFtZXRlciwgaXMgaXQgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDs/IFllcywgcHJldHR5IG11Y2gsIHVubGVzcyB0aGF0IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuIEJ1dCB3YWl0LCBgQ09ORklHX1BDSUVfVFBIYCBpcyBhIGNvbmZpZyBvcHRpb24sIHdlIGNhbiBlbmFibGUgaXQuLi4gaXMgaXQgc3RpbGwgd29ydGggZnV6emluZyB0aGVuPyBZZXMsIGJ1dCBvbmx5IGlmIHdlIGNhbiBmaW5kIGEgd2F5IHRvIHNwZWNpZnkgdGhlIHBhcmFtLgoKV2hhdCBpZiBgdmZpb19wY2lgIGlzIGJ1aWx0LWluPyBUaGVuIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAgY2FuIGJlIHBhc3NlZC4uLiBJZiBpdCYjMzk7cyBhIG1vZHVsZSwgaXQmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyLiBTaW5jZSB3ZSBjYW4mIzM5O3Qgc3BlY2lmeSBhIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIGhlcmUsIGl0JiMzOTtzIGEgYml0IG9mIGEgZGlsZW1tYS4KClN5emthbGxlciBkb2VzIGhhdmUgYGtlcm5lbF9jbWRsaW5lYCBpbiBpdHMgY29uZmlnLCBidXQgd2UgY2FuJiMzOTt0IHNldCB0aGF0IGhlcmUuIFRoZSBwcm9tcHQgaXMgc3RpbGwgcmVsZXZhbnQgdGhvdWdoOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7LiBXaXRob3V0IHRoYXQgcGFyYW1ldGVyLCBpdCAqaXMqIHVucmVhY2hhYmxlLCBidXQgd2UgY291bGQgdHJ5IG90aGVyIG1ldGhvZHMuCgpNYXliZSB3ZSBzaG91bGQgc2F5IGl0JiMzOTtzIGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGxldCB0aGUgc3l6a2FsbGVyIG1haW50YWluZXJzIGZpZ3VyZSBpdCBvdXQ/CgpXYWl0LCB3aGF0IGFib3V0IHRoZSBleHBvcnRlZCBzeW1ib2xzOiBgcGNpZV90cGhfZ2V0X2NwdV9zdGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cnlgLCBgcGNpZV9kaXNhYmxlX3RwaGAsIGBwY2llX2VuYWJsZV90cGhgLiBBcmUgdGhleSB1c2VkIGJ5IGFueSBvdGhlciBkcml2ZXJzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2llX2VuYWJsZV90cGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdD00OD1UbyBlbmFibGUgVFBIIGZvciBhIGRldmljZSwgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246OlxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC00OS1cbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q6NTA6ICBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0LTUxLVxuLS1cbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NTM9Q3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcbi0tXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0LTU4LVxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdDo1OTpgcGNpZV9lbmFibGVfdHBoKClgIGNoZWNrcyB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcyBhY3R1YWxseVxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC02MC1zdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcuIFRoZSBkZXZpY2UgZHJpdmVyIGNhbiBmaWd1cmUgb3V0XG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0PTYxPXdoaWNoIFRQSCBtb2RlIGlzIHN1cHBvcnRlZCBhbmQgY2FuIGJlIHByb3Blcmx5IGVuYWJsZWQgYmFzZWQgb24gdGhlXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0OjYyOnJldHVybiB2YWx1ZSBvZiBgcGNpZV9lbmFibGVfdHBoKClgLlxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC02My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xMTg0Mj1zdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTExODU4LVx0LyogRW5hYmxlIFRQSCBzdXBwb3J0IGFzIHBhcnQgb2YgSVJRIHJlcXVlc3QgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjExODU5Olx0cmMgPSBwY2llX2VuYWJsZV90cGgoYnAtXHUwMDNlcGRldiwgUENJX1RQSF9TVF9JVl9NT0RFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTExODYwLVx0aWYgKCFyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmM9MjU9c3RydWN0IG1seDVfc3QgKm1seDVfc3RfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU3LVx0LyogVGhlIE9TIGRvZXNuJiMzOTt0IHN1cHBvcnQgU1QgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYzo1ODpcdHJldCA9IHBjaWVfZW5hYmxlX3RwaChwZGV2LCBQQ0lfVFBIX1NUX0RTX01PREUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3BjaS90cGguYz00NDU9c3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNDg4LS8qKlxuZHJpdmVycy9wY2kvdHBoLmM6NDg5OiAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuZHJpdmVycy9wY2kvdHBoLmMtNDkwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNTAzLSAqL1xuZHJpdmVycy9wY2kvdHBoLmM6NTA0OmludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuZHJpdmVycy9wY2kvdHBoLmMtNTA1LXtcbi0tXG5kcml2ZXJzL3BjaS90cGguYy01MDktfVxuZHJpdmVycy9wY2kvdHBoLmM6NTEwOkVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcbmRyaXZlcnMvcGNpL3RwaC5jLTUxMS1cbmRyaXZlcnMvcGNpL3RwaC5jLTUxMi0vKipcbmRyaXZlcnMvcGNpL3RwaC5jOjUxMzogKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvblxuZHJpdmVycy9wY2kvdHBoLmMtNTE0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcbi0tXG5kcml2ZXJzL3BjaS90cGguYy01MTctICpcbmRyaXZlcnMvcGNpL3RwaC5jOjUxODogKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXG5kcml2ZXJzL3BjaS90cGguYy01MTktICogbWFudWFsbHkgaW5zdGVhZCBvZiBoYXJkd2FyZSBhdXRvLXNlbGVjdGlvbi4gUmVqZWN0cyBFWFRfVFBIIHJlcXVlc3Rcbi0tXG5kcml2ZXJzL3BjaS90cGguYy01MjMtICovXG5kcml2ZXJzL3BjaS90cGguYzo1MjQ6aW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpXG5kcml2ZXJzL3BjaS90cGguYy01MjUte1xuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTUyOS19XG5kcml2ZXJzL3BjaS90cGguYzo1MzA6RVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGhfZXhwbGljaXQpO1xuZHJpdmVycy9wY2kvdHBoLmMtNTMxLVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTEzMD1zdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMTc5LVx0XHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTE4MDpcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTE4MS1cdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdykge1xuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTMzPXZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDozNDppbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDozNTppbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC0zNi11OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD01ND1zdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo1NTpzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTYteyByZXR1cm4gLUVJTlZBTDsgfVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NTc6c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTU4LVx0XHRcdFx0XHQgICBib29sIGV4dGVuZGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM0NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgVFBIIFBhdGNoIGFuZCBSZWFjaGFiaWxpdHkgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGFjdHVhbGx5IHJlYWNoYWJsZSBieSBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBpbml0aWFsIGNvZGUgbW9kaWZpY2F0aW9ucyBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCDigJMgY2hhbmdlcyB0byBgdHBoLmNgLCBgdmZpb19wY2lfY29uZmlnLmNgLCBhbmQgYHZmaW9fcGNpX2NvcmUuY2AsIHBsdXMgdGhlIGFkZGl0aW9uIG9mIHNvbWUgbmV3IGZ1bmN0aW9ucyAoYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAsIGV0Yy4pIGFuZCBhIHN5c2ZzIGF0dHJpYnV0ZSAoYHRwaF9jcHVfc3RgKS4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBhY3R1YWxseSAqcnVuKj8mIzM0OyBUaGUgcGF0Y2ggbWVudGlvbnMgYGJueHRgIGFuZCBgbWx4NWAsIGJ1dCB0aG9zZSBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgc28gcHJvYmFibHkgbm90IHN5emthbGxlciYjMzk7cyB1c3VhbCBwbGF5Z3JvdW5kLgoKVGhlIFZGSU8gY29kZSBpcyBhIGJpZyBxdWVzdGlvbiBtYXJrLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzICptb3N0bHkqIHVucmVhY2hhYmxlIHVubGVzcyBgZW5hYmxlX3Vuc2FmZV90cGhgIGlzIHNldC4gVGhlIGAtRU9QTk9UU1VQUGAgcmV0dXJucywgdGhlIGB2ZGV2LSZndDt0cGhfcGVybWl0YCBjaGVjay4uLiBpdCBhbGwgcG9pbnRzIHRvIHRoYXQgYmVpbmcgdGhlIGdhdGVrZWVwZXIuIEFuZCB0aGUgc3lzZnMgYXR0cmlidXRlPyBUaGF0IGhhcyBtdWx0aXBsZSBjaGVja3M6IHdoZXRoZXIgdGhlIGRldmljZSBpcyBhIFJvb3QgUG9ydCwgaWYgaXQgc3VwcG9ydHMgVFBIIENvbXBsZXRlciwgYW5kIHdoZXRoZXIgdGhlIEFDUEkgRFNNIGlzIHByZXNlbnQuIFFFTVUgYW5kIEdDRSBvZnRlbiBoYXZlIGxpbWl0ZWQgY2FwYWJpbGl0aWVzIGluIHRoZXNlIGFyZWFzLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duOgoKKiAgICoqVkZJTzoqKiBWaXJ0dWFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBhIG1vZHVsZSBwYXJhbWV0ZXIuCiogICAqKlN5c2ZzIGF0dHJpYnV0ZToqKiBQcm9iYWJseSB1bnJlYWNoYWJsZSBiZWNhdXNlIHN5emthbGxlciBjYW4mIzM5O3QgaW5qZWN0IEFDUEkgRFNNcy4KKiAgICoqT3RoZXIgZnVuY3Rpb25zOioqIFRoZSBgcGNpX3RwaF9pbml0YCBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGluamVjdCB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGlzIGNvZGUgcmVhZHMgc29tZSBjb25maWcgc3BhY2UgYW5kIHNldHMgYSBmZXcgYml0cywgYnV0IG5vIHJlYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlIGlzIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCwgYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAgdGhhdCBjYW4gYmUgcmVhY2hlZCBpZiBgdmZpb19wY2lgIGlzIHVzZWQuCiogICAqKk1vZGlmaWVkIGBwY2llX2VuYWJsZV90cGhgOioqIFJlYWNoZWQgaWYgdGhlIGBibnh0YCBvciBgbWx4NWAgZHJpdmVycyBhcmUgbG9hZGVkLCBidXQgdW5saWtlbHkgaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcyAqbmV3KiBWRklPIGZ1bmN0aW9uYWxpdHkuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIGdhdGVkIGJ5IGBlbmFibGVfdW5zYWZlX3RwaGAsIHRoaXMgaXMgYSB2YWxpZCBmZWF0dXJlLgoKVGhlcmVmb3JlLCBkZXNwaXRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGFuZCB0aGUgZGlmZmljdWx0eSBpbiByZWFjaGluZyBpdCAqZGlyZWN0bHkqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbmFsaXR5IGFuZCBtYXJrIGl0IGFzIGZ1enplci13b3J0aHkuIFRoZSByZWFzb25pbmcgd291bGQgYmUgdGhhdCB0aGlzIHBhdGNoIGFkZHMgVFBIIHN1cHBvcnQgdG8gVkZJTyBQQ0kuIEl0IGlzIGdhdGVkIGJ5IHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGhgIG1vZHVsZSBwYXJhbWV0ZXIsIHdoaWNoIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lFX1RQSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTYtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtUTFAgUHJvY2Vzc2luZyBIaW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk2MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUENJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZSBQQ0kgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgd2l0aCBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTk3LiBUaGlzIGxpa2VseSBjZW50ZXJzIG9uIGEgZ3JvdXAgb2YgcmVsYXRlZCBvcHRpb25zLCBwcm9iYWJseSB3aXRoaW4gYSBkZWZpbmVkICYjMzQ7bWVudSYjMzQ7IG9yIGJsb2NrLCBnaXZlbiB0aGUgYEtjb25maWdgIGZpbGUgc3RydWN0dXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSBudW1iZXIgaXMgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mIGZlYXR1cmVzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgY2VydGFpbiBQQ0ktcmVsYXRlZCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgcG9zc2libHkgZGVwZW5kZW50IG9uIGhhcmR3YXJlLCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG9yIHNwZWNpZmljIHVzZS1jYXNlcy4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgcGljdHVyZSBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBtYXliZSBzb21lIGhlbHAgdGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgdG8gYWNjZXNzIG1vcmUgdGhhbiBvbmUgSU8gYWRkcmVzcyBzcGFjZSBhdCB0aGUgc2FtZSB0aW1lLiBUbyBtYWtlXG4gMTkxOlx0XHQgIHVzZSBvZiB0aGlzIGZlYXR1cmUgYW4gSU9NTVUgaXMgcmVxdWlyZWQgd2hpY2ggYWxzbyBzdXBwb3J0cyBQQVNJRHMuXG4gMTkyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBzdWNoIGFuIElPTU1VIGFuZCB3YW50IHRvIGNvbXBpbGUgdGhlXG4gMTkzOlx0XHQgIGRyaXZlciBmb3IgaXQgaW50byB5b3VyIGtlcm5lbC5cbiAxOTQ6XHRcbiAxOTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxOTY6XHRcbiAxOTc6XHRjb25maWcgUENJRV9UUEhcbiAxOTg6XHRcdGJvb2wgXCYjMzQ7VExQIFByb2Nlc3NpbmcgSGludHNcJiMzNDtcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLlxuIDIwMTpcdFx0ICBUUEggYWxsb3dzIGVuZHBvaW50IGRldmljZXMgdG8gcHJvdmlkZSBvcHRpbWl6YXRpb24gaGludHMsIHN1Y2ggYXNcbiAyMDI6XHRcdCAgZGVzaXJlZCBjYWNoaW5nIGJlaGF2aW9yLCBmb3IgcmVxdWVzdHMgdGhhdCB0YXJnZXQgbWVtb3J5IHNwYWNlLlxuIDIwMzpcdFx0ICBUaGVzZSBoaW50cywgY2FsbGVkIFN0ZWVyaW5nIFRhZ3MsIGNhbiBlbXBvd2VyIHRoZSBzeXN0ZW0gaGFyZHdhcmVcbiAyMDQ6XHRcdCAgdG8gb3B0aW1pemUgdGhlIHV0aWxpemF0aW9uIG9mIHBsYXRmb3JtIHJlc291cmNlcy5cbiAyMDU6XHRcbiAyMDY6XHRjb25maWcgUENJX1AyUERNQVxuIDIwNzpcdFx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiAyMDg6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbiAyMDk6XHRcdCNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTAKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogMjE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0llIFRQSCBhbmQgVkZJTyBQQ0kgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBQQ0lFX1RQSGAgbWlnaHQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc28gd2UgZGVmaW5pdGVseSB3YW50IHRvIGFkZCBpdCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBzaG91bGQgYWxzbyBlbnN1cmUgYFZGSU9fUENJYCBpcyBlbmFibGVkLCBhbHRob3VnaCB0aGF0JiMzOTtzIGxpa2VseSBhbHJlYWR5IHRoZSBjYXNlIGluIHN5emthbGxlciBjb25maWdzLiBJdCBhcHBlYXJzIHRoZSBwcm9tcHQgd2FudHMgdXMgdG8gZm9jdXMgb24gdGhlIHNwZWNpZmljIGNoYW5nZXMsIHNvIGBQQ0lFX1RQSGAgaXMgdGhlIGtleS4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgdGhlIG9uZXMgd2Ugd2FudCBzeXprYWxsZXIgdG8gdGFyZ2V0PyBMZXQmIzM5O3Mgem9vbSBpbiBvbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgIGFuZCBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY2AsIGFuZCBgZHJpdmVycy9wY2kvdHBoLmNgIHNpbmNlIHRoZXNlIGFyZSB0aGUgbWFpbiBjaGFuZ2VzLiBXZSBzaG91bGQgcHJpb3JpdGl6ZSBmdW5jdGlvbnMgaW4gdGhlIFZGSU8gc3BhY2UgYXMgdGhlc2UgYXJlIHdoYXQgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoLCBzbyB0aG9zZSBhcmUga2V5LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nOgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlYAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnYAoqICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAKKiAgIGB2ZmlvX3BjaV90cGhfaW5pdGAKKiAgIGBwY2lfdHBoX2luaXRgCiogICBgdHBoX2NwdV9zdF9yZWFkYAoqICAgYGVuYWJsZV90cGhgCgpXZSB3YW50IGB0cGhfY3B1X3N0X3JlYWRgIHRvIGJlIHZpc2libGUsIHNvIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBlZGdlIGNhc2UuIEV2ZW4gaWYgaXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGB0cGhfZHNtX3N1cHBvcnRlZGAgYmVpbmcgZmFsc2UsIGl0IG1pZ2h0IHN0aWxsIGJlIHdvcnRoIGxpc3RpbmcgaXQuIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGJlY2F1c2Ugc3l6a2FsbGVyIGZ1enplcyB3cml0ZXMgdG8gdGhlIFZGSU8gUENJIGNvbmZpZyBzcGFjZS4gYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlYCBpcyByZWFjaGFibGUgdmlhIGBWRklPX0RFVklDRV9GRUFUVVJFYCBpb2N0bC4KCkEga2V5IHBvaW50IGlzIHRoZSBtb2R1bGUgcGFyYW1ldGVyIGBlbmFibGVfdW5zYWZlX3RwaGAgd2hpY2gsIGlmICpub3QqIHNldCwgd2lsbCBtYWtlIHRoZSBjb2RlIGp1c3QgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgc2FpZCwgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHksIGFuZCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHNpbmNlIGl0IG1heSByZXZlYWwgbmV3IGZsYXdzIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIFN5emthbGxlciYjMzk7cyBtYWludGFpbmVycyBzaG91bGQgYmUgYXdhcmUgdGhhdCBzZXR0aW5nIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgd2lsbCBiZSAqZXNzZW50aWFsKiB0byBhY3R1YWxseSByZWFjaCB0aGUgdGFyZ2V0IGxvZ2ljLgoKU28sIGZvciBgRm9jdXNTeW1ib2xzYCwgSSB3aWxsIGFkZCB0aGUgVkZJTyBmdW5jdGlvbnMgZmlyc3QuIFRoZW4gSSBhbSBhZGRpbmcgdGhlIFBDSSBpbml0aWFsaXphdGlvbiBjb2RlIGFzIGl0JiMzOTtzIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlLgpJJiMzOTttIGluY2x1ZGluZyBgdHBoX2NwdV9zdF9yZWFkYCBhbmQgYGVuYWJsZV90cGhgLgoKTXkgUmVhc29uaW5nIGlzLCAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS4gV2UgaW5jbHVkZSBgZW5hYmxlX3RwaGAgYXMgaXQmIzM5O3MgcGFydCBvZiB0aGUgd3JpdGUgcGF0aC4gYHRwaF9jcHVfc3RfcmVhZGAgaXMgaW5jbHVkZWQuJiMzNDsKClRoZSBjcml0aWNhbCBjb25maWcgd2UgbmVlZCBpcyBgUENJRV9UUEhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfdHBoX2luaXQmIzM0OywKICAgICYjMzQ7cGNpX3RwaF9pbml0JiMzNDssCiAgICAmIzM0O2VuYWJsZV90cGgmIzM0OywKICAgICYjMzQ7dHBoX2NwdV9zdF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFBDSWUgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0IHRvIFZGSU8gUENJIGFuZCBhZGRzIGEgc3lzZnMgYXR0cmlidXRlIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gVGhlIFZGSU8gaW9jdGxzIGFuZCBjb25maWcgc3BhY2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCwgYnV0IHRoZXkgcmVxdWlyZSB0aGUgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgY29yZSBQQ0kgVFBIIGluaXRpYWxpemF0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIHByb2JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0lFX1RQSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnJiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV90cGhfaW5pdCYjMzQ7LAogICAgJiMzNDtwY2lfdHBoX2luaXQmIzM0OywKICAgICYjMzQ7ZW5hYmxlX3RwaCYjMzQ7LAogICAgJiMzNDt0cGhfY3B1X3N0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQgdG8gVkZJTyBQQ0kgYW5kIGFkZHMgYSBzeXNmcyBhdHRyaWJ1dGUgZm9yIENQVS10by1TVCBtYXBwaW5nLiBUaGUgVkZJTyBpb2N0bHMgYW5kIGNvbmZpZyBzcGFjZSBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLCBidXQgdGhleSByZXF1aXJlIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAgbW9kdWxlIHBhcmFtZXRlciB0byBiZSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoZSBjb3JlIFBDSSBUUEggaW5pdGlhbGl6YXRpb24gaXMgcmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsIFBDSSBkZXZpY2UgcHJvYmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNDo0My40ODU4MzUyMTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA4MjgxNzc1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWdcIixcbiAgICBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiLFxuICAgIFwidmZpb19wY2lfdHBoX2luaXRcIixcbiAgICBcInBjaV90cGhfaW5pdFwiLFxuICAgIFwiZW5hYmxlX3RwaFwiLFxuICAgIFwidHBoX2NwdV9zdF9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQgdG8gVkZJTyBQQ0kgYW5kIGFkZHMgYSBzeXNmcyBhdHRyaWJ1dGUgZm9yIENQVS10by1TVCBtYXBwaW5nLiBUaGUgVkZJTyBpb2N0bHMgYW5kIGNvbmZpZyBzcGFjZSBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLCBidXQgdGhleSByZXF1aXJlIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAgbW9kdWxlIHBhcmFtZXRlciB0byBiZSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoZSBjb3JlIFBDSSBUUEggaW5pdGlhbGl6YXRpb24gaXMgcmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsIFBDSSBkZXZpY2UgcHJvYmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE0OjQzLjQ4NTg0MTY0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MzcyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTgyNTQzYTFlZDA5YTI2ZDY0NjY1ODIwMjQzN2Q2MTQ3MzViNzM4N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAwODoxNDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2lcXG5pbmRleCBiNzY3ZGIyYzUyY2I3MC4uZWRjNjRlNGU1NjQwNGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXFxuQEAgLTcwMiwzICs3MDIsMjcgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdFdoZW4gcHJlc2VudCBhbmQgdGhlIHRzbS8gYXR0cmlidXRlIGRpcmVjdG9yeSBpcyBwcmVzZW50LCB0aGVcXG4gXFx0XFx0YXV0aGVudGljYXRlZCBhdHRyaWJ1dGUgaXMgYW4gYWxpYXMgZm9yIHRoZSBkZXZpY2UgJ2Nvbm5lY3QnXFxuIFxcdFxcdHN0YXRlLiBTZWUgdGhlICd0c20vY29ubmVjdCcgYXR0cmlidXRlIGZvciBtb3JlIGRldGFpbHMuXFxuK1xcbitXaGF0OlxcdFxcdC9zeXMvYnVzL3BjaS9kZXZpY2VzL1xcdTAwM2Nyb290LXBvcnQtYmRmXFx1MDAzZS90cGhfY3B1X3N0XFxuK0NvbnRhY3Q6XFx0bGludXgtcGNpQHZnZXIua2VybmVsLm9yZ1xcbitEZXNjcmlwdGlvbjpcXG4rXFx0XFx0UmVhZC1vbmx5IGJpbmFyeSBhdHRyaWJ1dGUgb25seSBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB0aGF0XFxuK1xcdFxcdHN1cHBvcnQgVFBIIENvbXBsZXRlciBjYXBhYmlsaXR5IGFuZCBpbXBsZW1lbnQgdGhlIEFDUEkgRFNNXFxuK1xcdFxcdG1ldGhvZCBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIEZpbGUgcGVybWlzc2lvbiBpcyByb290LW9ubHlcXG4rXFx0XFx0KDA0MDApLlxcbitcXG4rXFx0XFx0VGhlIGJsb2IgaXMgYSBzZXF1ZW5jZSBvZiBmaXhlZC1zaXplIDgtYnl0ZSBlbnRyaWVzIGRlZmluZWQgYnlcXG4rXFx0XFx0c3RydWN0IHBjaV90cGhfY3B1X3N0IGluIHVhcGkvbGludXgvcGNpLmg6XFxuK1xcdFxcdCAgX191OCB2bV9zdDtcXG4rXFx0XFx0ICBfX3U4IHBtX3N0O1xcbitcXHRcXHQgIF9fdTE2IHZtX3hzdDtcXG4rXFx0XFx0ICBfX3UxNiBwbV94c3Q7XFxuK1xcdFxcdCAgX191MTYgcmVzZXJ2ZWQ7XFxuK1xcbitcXHRcXHRFYWNoIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGEgbG9naWNhbCBDUFUgaW5kZXguIFNlZWsgb2Zmc2V0ID1cXG4rXFx0XFx0Y3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1ouIEFyYml0cmFyeSB1bmFsaWduZWQgcGFydGlhbFxcbitcXHRcXHRyZWFkcyBhcmUgc3VwcG9ydGVkOyBubyBhbGlnbm1lbnQgcmVzdHJpY3Rpb24gZW5mb3JjZWQuXFxuK1xcbitcXHRcXHRGb3IgQ1BVcyBvdXRzaWRlIGNwdV9wb3NzaWJsZV9tYXNrIG9yIG9mZmxpbmUgQ1BVcywgdGhlIGVudHJ5XFxuK1xcdFxcdGlzIGZpbGxlZCB3aXRoIGFsbCB6ZXJvcyB0byBhdm9pZCBicmVha2luZyBzZXF1ZW50aWFsIGR1bXAgdG9vbHNcXG4rXFx0XFx0bGlrZSBjYXQvaGV4ZHVtcCBvbiBzcGFyc2UgQ1BVIHRvcG9sb2dpZXMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcXG5pbmRleCBkMzc4NjA4NDEyNjBjZS4uYWQ5ZTRlOGQzMjBiMDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcXG4rKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuY1xcbkBAIC0xODMyLDYgKzE4MzIsOSBAQCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwY2lfZGV2X2F0dHJfZ3JvdXBzW10gPSB7XFxuICNpZmRlZiBDT05GSUdfUENJX1RTTVxcbiBcXHRcXHUwMDI2cGNpX3RzbV9hdXRoX2F0dHJfZ3JvdXAsXFxuIFxcdFxcdTAwMjZwY2lfdHNtX2F0dHJfZ3JvdXAsXFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuK1xcdFxcdTAwMjZwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCxcXG4gI2VuZGlmXFxuIFxcdE5VTEwsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcXG5pbmRleCBlOGFkMjdhYmIxY2ZlNC4uMWFiZTdmYTFmY2M3ZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmhcXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxcbkBAIC0xMzc1LDYgKzEzNzUsMTAgQEAgc3RhdGljIGlubGluZSBwY2lfcG93ZXJfdCBhY3BpX3BjaV9jaG9vc2Vfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzcG1fY3RybF9hdHRyX2dyb3VwO1xcbiAjZW5kaWZcXG4gXFxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXA7XFxuKyNlbmRpZlxcbitcXG4gI2lmZGVmIENPTkZJR19YODZfSU5URUxfTUlEXFxuIGJvb2wgcGNpX3VzZV9taWRfcG0odm9pZCk7XFxuIGludCBtaWRfcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjQ3NDAyZDRiODg5OThmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3RwaC5jXFxuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLXRwaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJwY2kuaFxcXCJcXG4gXFxuQEAgLTEzMCw4ICsxMzEsNDcgQEAgc3RhdGljIGFjcGlfc3RhdHVzIHRwaF9pbnZva2VfZHNtKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGNwdV91aWQsXFxuIFxcbiBcXHRyZXR1cm4gQUVfT0s7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgdHBoX2dldF9jcHVfc3RfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcXG4rXFx0XFx0XFx0ICAgICAgIHVuaW9uIHN0X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpycDtcXG4rXFx0dTMyIGNwdV91aWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgXFx1MDAyNmNwdV91aWQpO1xcbitcXHRpZiAocmV0ICE9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XFxuK1xcdGlmICghcnAgfHwgIXJwLVxcdTAwM2VidXMgfHwgIXJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSk7XFxuK1xcdGlmICh0cGhfaW52b2tlX2RzbShycF9hY3BpX2hhbmRsZSwgY3B1X3VpZCwgaW5mbykgIT0gQUVfT0spXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFxuIFxcbitzdGF0aWMgYm9vbCB0cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbisjaWZkZWYgQ09ORklHX0FDUElcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcXG4rXFx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XFxuK1xcbitcXHRpZiAoIXJwIHx8ICFycC1cXHUwMDNlYnVzIHx8ICFycC1cXHUwMDNlYnVzLVxcdTAwM2VicmlkZ2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJwX2FjcGlfaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXFx1MDAzZWJ1cy1cXHUwMDNlYnJpZGdlKTtcXG4rXFx0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKHJwX2FjcGlfaGFuZGxlLCBcXHUwMDI2cGNpX2FjcGlfZHNtX2d1aWQsIDcsXFxuK1xcdFxcdFxcdCAgICAgIEJJVChUUEhfU1RfRFNNX0ZVTkNfSU5ERVgpKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyogVXBkYXRlIHRoZSBUUEggUmVxdWVzdGVyIEVuYWJsZSBmaWVsZCBvZiBUUEggQ29udHJvbCBSZWdpc3RlciAqL1xcbiBzdGF0aWMgdm9pZCBzZXRfY3RybF9yZWdfcmVxX2VuKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCByZXFfdHlwZSlcXG4ge1xcbkBAIC0xNjYsMTEgKzIwNiwxNCBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiAgKi9cXG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4tXFx0dTMyIHJlZztcXG4rXFx0dTMyIHJlZyA9IDA7XFxuK1xcbitcXHRpZiAoIXBkZXYtXFx1MDAzZXRwaF9jYXApXFxuK1xcdFxcdHJldHVybiBQQ0lfVFBIX0xPQ19OT05FO1xcbiBcXG4gXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXFx1MDAyNnJlZyk7XFxuIFxcbi1cXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xcbitcXHRyZXR1cm4gcmVnIFxcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcXG4gXFxuQEAgLTE4NSw5ICsyMjgsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xcbiBcXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbi1cXG4tXFx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xcbi1cXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xcbiBcXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0yMzEsNiArMjcxLDQ5IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIFxcdHJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGdldF9jcHVfYWxsX3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgY3B1LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgKnN0KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfQUNQSVxcbitcXHR1bmlvbiBzdF9pbmZvIGluZm87XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB0cGhfZ2V0X2NwdV9zdF9pbmZvKHBkZXYsIGNwdSwgXFx1MDAyNmluZm8pO1xcbitcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0c3QtXFx1MDAzZXZtX3N0ID0gaW5mby52bV9zdF92YWxpZCA/IGluZm8udm1fc3QgOiAwO1xcbitcXHRcXHRzdC1cXHUwMDNlcG1fc3QgPSBpbmZvLnBtX3N0X3ZhbGlkID8gaW5mby5wbV9zdCA6IDA7XFxuK1xcdFxcdHN0LVxcdTAwM2V2bV94c3QgPSBpbmZvLnZtX3hzdF92YWxpZCA/IGluZm8udm1feHN0IDogMDtcXG4rXFx0XFx0c3QtXFx1MDAzZXBtX3hzdCA9IGluZm8ucG1feHN0X3ZhbGlkID8gaW5mby5wbV94c3QgOiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4re1xcbisjaWZkZWYgQ09ORklHX0FDUElcXG4rXFx0dW5pb24gc3RfaW5mbyBpbmZvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFxcdTAwMjZpbmZvKTtcXG4rXFx0aWYgKHJldCAhPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4rXFxuK1xcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXFxcblxcXCIsXFxuK1xcdFxcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXFxcInZvbGF0aWxlXFxcIiA6IFxcXCJwZXJzaXN0ZW50XFxcIixcXG4rXFx0XFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiAvKipcXG4gICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxcbiAgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXFxuQEAgLTI0Nyw0MCArMzMwLDM1IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuIHtcXG4tI2lmZGVmIENPTkZJR19BQ1BJXFxuLVxcdHN0cnVjdCBwY2lfZGV2ICpycDtcXG4tXFx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XFxuLVxcdHVuaW9uIHN0X2luZm8gaW5mbztcXG4tXFx0dTMyIGNwdV91aWQ7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgXFx1MDAyNmNwdV91aWQpO1xcbi1cXHRpZiAocmV0ICE9IDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XFxuLVxcdGlmICghcnAgfHwgIXJwLVxcdTAwM2VidXMgfHwgIXJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIGNwdSwgdGFnKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xcbiBcXG4tXFx0cnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cXHUwMDNlYnVzLVxcdTAwM2VicmlkZ2UpO1xcbisvKipcXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCAtIEdldCBTVCB3aXRoIGV4cGxpY2l0IHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuKyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcXG4rICogQGV4dGVuZGVkOiB0cnVlPUVYVF9UUEgsIGZhbHNlPXN0YW5kYXJkIFRQSCBvbmx5XFxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXFxuKyAqIEB0YWc6IG91dHB1dCBzdGVlcmluZyB0YWcgcG9pbnRlclxcbisgKlxcbisgKiBVbmxpa2UgYXV0byBwY2llX3RwaF9nZXRfY3B1X3N0KCksIGNhbGxlciBtYW51YWxseSBwaWNrcyByZXF1ZXN0ZXIgdHlwZS5cXG4rICogUmVqZWN0cyBFWFQgcmVxdWVzdCBpZiBkZXZpY2UgbGFja3MgZXh0ZW5kZWQgcmVxdWVzdGVyIGNhcGFiaWxpdHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4rXFx0XFx0XFx0XFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbit7XFxuK1xcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuIFxcbi1cXHRpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsIFxcdTAwMjZpbmZvKSAhPSBBRV9PSykge1xcbi1cXHRcXHQqdGFnID0gMDtcXG4rXFx0aWYgKGV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFwZGV2LVxcdTAwM2V0cGhfZXh0X3N1cHBvcnQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuLVxcbi1cXHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4tXFxuLVxcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcXFxuXFxcIixcXG4tXFx0XFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcXFwidm9sYXRpbGVcXFwiIDogXFxcInBlcnNpc3RlbnRcXFwiLFxcbi1cXHRcXHRjcHUsICp0YWcpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuLSNlbHNlXFxuLVxcdHJldHVybiAtRU5PREVWO1xcbi0jZW5kaWZcXG4rXFx0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHJlcV90eXBlLCBjcHUsIHRhZyk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KTtcXG4gXFxuIC8qKlxcbiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XFxuQEAgLTMxNiw4ICszOTQsNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIFxcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7XFxuIFxcbiBcXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbi1cXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogKi9cXG4tXFx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcXG4gXFxuIFxcdHN3aXRjaCAobG9jKSB7XFxuIFxcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcXG5AQCAtMzY2LDI3ICs0NDIsMTAgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XFxuIFxcbi0vKipcXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXFxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcXG4tICpcXG4tICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxcbi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGVcXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcXG4tICpcXG4tICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmdcXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXFxuLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQncyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cXG4tICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxcbi0gKi9cXG4taW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuK3N0YXRpYyBpbnQgZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIHU4IHJlcV90eXBlKVxcbiB7XFxuIFxcdHUzMiByZWc7XFxuIFxcdHU4IGRldl9tb2RlcztcXG4tXFx0dTggcnBfcmVxX3R5cGU7XFxuIFxcbiBcXHQvKiBIb25vciBcXFwibm90cGhcXFwiIGtlcm5lbCBwYXJhbWV0ZXIgKi9cXG4gXFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXFxuQEAgLTQwNCwyNiArNDYzLDEyIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiBcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBtb2RlKSBcXHUwMDI2IGRldl9tb2RlcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0cGRldi1cXHUwMDNldHBoX21vZGUgPSBtb2RlO1xcbi1cXG4tXFx0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cXG4tXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXFx1MDAyNnJlZyk7XFxuLVxcdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcXG4tXFx0XFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4tXFxuLVxcdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXFxuLVxcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcXG4tXFx0XFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XFxuLVxcbi1cXHRcXHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXFxuLVxcdFxcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IG1pbihwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxcbitcXHRpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcXHUwMDI2XFx1MDAyNiAhcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9tb2RlID0gbW9kZTtcXG4rXFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XFxuK1xcbiBcXHQvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi9cXG4gXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NUUkwsIFxcdTAwMjZyZWcpO1xcbiBcXG5AQCAtNDMxLDcgKzQ3Niw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiBcXHRyZWcgfD0gRklFTERfUFJFUChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgcGRldi1cXHUwMDNldHBoX21vZGUpO1xcbiBcXG4gXFx0cmVnIFxcdTAwMjY9IH5QQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0s7XFxuLVxcdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlKTtcXG4rXFx0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCByZXFfdHlwZSk7XFxuIFxcbiBcXHRwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NUUkwsIHJlZyk7XFxuIFxcbkBAIC00MzksOCArNDg0LDYzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcXG4rICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxcbisgKlxcbisgKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXFxuKyAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxcbisgKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZVxcbisgKlxcbisgKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xcbisgKiBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIG5vdC4gQWRkaXRpb25hbGx5IGRldGVybWluZSB3aGF0IHR5cGVzIG9mIHJlcXVlc3RzLFxcbisgKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcXG4rICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCdzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuKyAqL1xcbitpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4re1xcbitcXHR1OCByZXFfdHlwZSA9IHBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4rXFx0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcXG4gXFxuKy8qKlxcbisgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvblxcbisgKiBAcGRldjogUENJIGRldmljZSB0byBvcGVyYXRlXFxuKyAqIEBtb2RlOiBTVCB0YWJsZSBvcGVyYXRpbmcgbW9kZSAoTlMvSVYvRFMpXFxuKyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHlcXG4rICpcXG4rICogVW5saWtlIGF1dG8tZGV0ZWN0aW5nIHBjaWVfZW5hYmxlX3RwaCgpLCBjYWxsZXIgc2VsZWN0cyByZXF1ZXN0ZXIgdHlwZVxcbisgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdFxcbisgKiBpZiBkZXZpY2UgbGFja3MgZXh0ZW5kZWQgcmVxdWVzdGVyIGNhcGFiaWxpdHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpXFxuK3tcXG4rXFx0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4rXFxuK1xcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7XFxuK1xcbisvKipcXG4rICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJ3MgZW5hYmxlZCBUUEggcmVxdWVzdGVyIHR5cGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmV0dXJuOiBQQ0lfVFBIX1JFUV9ESVNBQkxFLCBQQ0lfVFBIX1JFUV9UUEhfT05MWSBvciBQQ0lfVFBIX1JFUV9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRyZXR1cm4gcGRldi1cXHUwMDNldHBoX3JlcV90eXBlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XFxuK1xcbiB2b2lkIHBjaV9yZXN0b3JlX3RwaF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTtcXG5AQCAtNTEyLDE0ICs2MTIsMTMxIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxcbiBcXG4gdm9pZCBwY2lfdHBoX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4rXFx0dTggdHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZTtcXG4gXFx0aW50IG51bV9lbnRyaWVzO1xcbiBcXHR1MzIgc2F2ZV9zaXplO1xcbitcXHR1MzIgcmVnID0gMDtcXG4gXFxuIFxcdHBkZXYtXFx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xcbiBcXHRpZiAoIXBkZXYtXFx1MDAzZXRwaF9jYXApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFxcdTAwMjZyZWcpO1xcbitcXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuK1xcbitcXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xcbitcXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XFxuK1xcdFxcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xcbitcXHRcXHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XFxuK1xcdFxcdHBkZXYtXFx1MDAzZXRwaF9jYXAgPSAwO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydCA9ICEhKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcXG4rXFxuIFxcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XFxuIFxcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcXG4gXFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZVxcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxcbisgKiBAd2FudF9leHQ6IGZhbHNlIC0gY2hlY2sgVFBIIGNhcCBleGlzdHM7IHRydWUgLSBjaGVjayBFWFRfVFBIIHN1cHBvcnRcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIG9uIG1hdGNoZWQgY29uZGl0aW9uLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxcbit7XFxuK1xcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCF3YW50X2V4dClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTtcXG4rXFxuK3N0YXRpYyBzc2l6ZV90IHRwaF9jcHVfc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG4rXFx0XFx0XFx0ICAgICAgIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoa29ial90b19kZXYoa29iaikpO1xcbitcXHRjb25zdCBzaXplX3QgZW50cnlfc3ogPSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWjtcXG4rXFx0Y29uc3Qgc2l6ZV90IHRvdGFsX3NpemUgPSBucl9jcHVfaWRzICogZW50cnlfc3o7XFxuK1xcdHNpemVfdCBjb3BpZWQgPSAwO1xcbitcXHRsb2ZmX3QgcG9zID0gb2ZmO1xcbitcXG4rXFx0aWYgKHBvcyBcXHUwMDNlPSB0b3RhbF9zaXplKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgdG90YWxfc2l6ZSAtIHBvcyk7XFxuK1xcbitcXHR3aGlsZSAoY29waWVkIFxcdTAwM2MgY291bnQpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejtcXG4rXFx0XFx0c2l6ZV90IGVudHJ5X29mZiA9IHBvcyAlIGVudHJ5X3N6O1xcbitcXHRcXHRzaXplX3QgcmVtYWluID0gZW50cnlfc3ogLSBlbnRyeV9vZmY7XFxuK1xcdFxcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7XFxuK1xcdFxcdHN0cnVjdCBwY2lfdHBoX2NwdV9zdCBzdCA9IHswfTtcXG4rXFxuK1xcdFxcdGlmIChjcHVfcG9zc2libGUoY3B1X2lkeCkpXFxuK1xcdFxcdFxcdGdldF9jcHVfYWxsX3N0KHBkZXYsIGNwdV9pZHgsIFxcdTAwMjZzdCk7XFxuK1xcbitcXHRcXHRtZW1jcHkoYnVmICsgY29waWVkLCAoY2hhciAqKVxcdTAwMjZzdCArIGVudHJ5X29mZiwgY2h1bmspO1xcbitcXG4rXFx0XFx0Y29waWVkICs9IGNodW5rO1xcbitcXHRcXHRwb3MgKz0gY2h1bms7XFxuK1xcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNvcGllZDtcXG4rfVxcbitzdGF0aWMgQklOX0FUVFIodHBoX2NwdV9zdCwgMDQwMCwgdHBoX2NwdV9zdF9yZWFkLCBOVUxMLCAwKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgdHBoX2NwdV9zdF9iaW5fYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmJpbl9hdHRyX3RwaF9jcHVfc3QsXFxuK1xcdE5VTEwsXFxuK307XFxuK1xcbitzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsIGludCBuKVxcbit7XFxuK1xcdHJldHVybiBucl9jcHVfaWRzICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1o7XFxuK31cXG4rXFxuK3N0YXRpYyB1bW9kZV90IHRwaF9jcHVfc3RfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbitcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphLCBpbnQgbilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoa29ial90b19kZXYoa29iaikpO1xcbitcXHRib29sIGlzX3Jvb3RfcG9ydCA9IHBjaV9pc19wY2llKHBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdHBjaV9wY2llX3R5cGUocGRldikgPT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVDtcXG4rXFx0dTMyIGRldmNhcDIgPSAwO1xcbitcXG4rXFx0aWYgKCFpc19yb290X3BvcnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXFx1MDAyNmRldmNhcDIpO1xcbitcXHRpZiAoIShkZXZjYXAyIFxcdTAwMjYgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0spKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghdHBoX2RzbV9zdXBwb3J0ZWQocGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGEtXFx1MDAzZWF0dHIubW9kZTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCA9IHtcXG4rXFx0LmJpbl9hdHRycyA9IHRwaF9jcHVfc3RfYmluX2F0dHJzLFxcbitcXHQuYmluX3NpemUgPSB0cGhfY3B1X3N0X2Jpbl9zaXplLFxcbitcXHQuaXNfYmluX3Zpc2libGUgPSB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXFxuaW5kZXggMGM3NzEwNjRjMGI4NDQuLjZkNzM2Njg0NTljZjU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xcbkBAIC02MCw2ICs2MCwxMiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xcbiBtb2R1bGVfcGFyYW0oZGlzYWJsZV9kZW55bGlzdCwgYm9vbCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgXFxcIkRpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cXFwiKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4rc3RhdGljIGJvb2wgZW5hYmxlX3Vuc2FmZV90cGg7XFxuK21vZHVsZV9wYXJhbShlbmFibGVfdW5zYWZlX3RwaCwgYm9vbCwgMDQ0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3Vuc2FmZV90cGgsIFxcXCJFbmFibGUgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQuIEl0IG1heSBicmVhayBwbGF0Zm9ybSBpc29sYXRpb24uIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRoaXMgaXMgZm9yLCBzdGVwIGF3YXkuIChkZWZhdWx0OiBmYWxzZSlcXFwiKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3dpdGNoIChwZGV2LVxcdTAwM2V2ZW5kb3IpIHtcXG5AQCAtMjU3LDEyICsyNjMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgdmZpb19wY2lfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcdGJvb2wgaXNfZGlzYWJsZV92Z2EgPSB0cnVlO1xcbitcXHRib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoID0gZmFsc2U7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxcbiBcXHRpc19kaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbitcXHRpc19lbmFibGVfdW5zYWZlX3RwaCA9IGVuYWJsZV91bnNhZmVfdHBoO1xcbisjZW5kaWZcXG4gXFxuLVxcdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzKTtcXG4rXFx0dmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKG5vaW50eG1hc2ssIGlzX2Rpc2FibGVfdmdhLCBkaXNhYmxlX2lkbGVfZDMsXFxuK1xcdFxcdFxcdFxcdCBpc19lbmFibGVfdW5zYWZlX3RwaCk7XFxuIFxcbiBcXHQvKiBSZWdpc3RlciBhbmQgc2NhbiBmb3IgZGV2aWNlcyAqL1xcbiBcXHRyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZ2ZmlvX3BjaV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbmluZGV4IGExMGVkNzMzZjBlM2FmLi4xMGY0ZTlmYWJlYTdjYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbkBAIC0yMiw2ICsyMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLXRwaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdmZpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbkBAIC0xMDg1LDYgKzEwODYsMTE4IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIFBlcm1pc3Npb25zIGZvciBUUEggZXh0ZW5kZWQgY2FwYWJpbGl0eSAqL1xcbitzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpO1xcbitcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsIEFMTF9XUklURSk7XFxuK1xcbitcXHQvKiBQZXIgUENJIHNwZWNpZmljYXRpb246IFRoZXJlIGlzIGFuIHVwcGVyIGxpbWl0IG9mIDY0IGVudHJpZXNcXG4rXFx0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxcbitcXHQgKiBDYXBhYmlsaXR5IHN0cnVjdHVyZS5cXG4rXFx0ICogQW5kIHRoZSBwY2lfZXh0X2NhcF9sZW5ndGhbUENJX0VYVF9DQVBfSURfVFBIXSBpcyAweEZGLCBzbyB0aGVcXG4rXFx0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY0OyBpKyspXFxuK1xcdFxcdHBfc2V0dyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GICsgaSAqIHNpemVvZih1MTYpLFxcbitcXHRcXHQgICAgICAgKHUxNilBTExfVklSVCwgKHUxNilBTExfV1JJVEUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZmaW9fdHBoX21hc2tfZXh0X3RwaF9iaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9zKVxcbit7XFxuK1xcdF9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKilcXHUwMDI2dmRldi1cXHUwMDNldmNvbmZpZ1twb3MgKyBQQ0lfVFBIX0NBUF07XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XFxuK1xcdFxcdHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xcbitcXHRcXHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XFxuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4rXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4rXFx0XFx0XFx0XFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXFxuK3tcXG4rXFx0aW50IHJlcV9lbl9ieXRlID0gUENJX1RQSF9DVFJMICsgMTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRfX2xlMzIgb3JnX3ZhbCA9IDA7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdHU4IG1vZGUsIHJlcTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFx0dTE2IHN0YXJ0O1xcbitcXHR1MzIgZGF0YTtcXG4rXFxuK1xcdGlmICghdmRldi1cXHUwMDNldHBoX3Blcm1pdClcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0LyogQmFjayB1cCB0aGUgb3JpZ2luYWwgdmFsdWVzIGluIG9yZGVyIHJvbGxiYWNrIHdoZW4gZmFpbCAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2M9IHJlcV9lbl9ieXRlIFxcdTAwMjZcXHUwMDI2IG9mZnNldCArIGNvdW50IFxcdTAwM2UgcmVxX2VuX2J5dGUpXFxuK1xcdFxcdHZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3JnX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rXFx0aWYgKHJldCAhPSBjb3VudCkge1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIGlmIHdyaXRlIHJhbmdlIGRvZXMgbm90IGNvdmVyIFJlcXVlc3RlciBFbmFibGUgYnl0ZSAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2UgcmVxX2VuX2J5dGUgfHwgb2Zmc2V0ICsgY291bnQgXFx1MDAzYz0gcmVxX2VuX2J5dGUpIHtcXG4rXFx0XFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBvcmdfdmFsKTtcXG4rXFx0XFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTtcXG4rXFx0ZGF0YSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcXG4rXFx0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgZGF0YSk7XFxuK1xcdHJlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIGRhdGEpO1xcbitcXG4rXFx0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xcbitcXHRcXHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcXG4rXFx0XFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcXG4rXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdykge1xcbitcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXM7IGkrKylcXG4rXFx0XFx0XFx0XFx0cGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3dbaV0pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXQsIG9yZ192YWwpO1xcbitcXHR9IGVsc2UgaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XFxuK1xcdFxcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cXHUwMDNlcGRldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIG9yZ192YWwpO1xcbitcXHR9XFxuK1xcbitcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgcGVybWlzc2lvbiB0YWJsZXNcXG4gICovXFxuQEAgLTExMDAsNiArMTIxMyw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKVxcbiBcXG4gXFx0ZnJlZV9wZXJtX2JpdHMoXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XFxuIFxcdGZyZWVfcGVybV9iaXRzKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xcbitcXHRmcmVlX3Blcm1fYml0cyhcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTtcXG4gfVxcbiBcXG4gaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxcbkBAIC0xMTIwLDYgKzEyMzQsOCBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuIFxcdC8qIEV4dGVuZGVkIGNhcGFiaWxpdGllcyAqL1xcbiBcXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcXG4gXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XFxuK1xcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xcbitcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcXG4gXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXG5AQCAtMTQ1MCw2ICsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cXG4gXFx0XFx0Ynl0ZSBcXHUwMDI2PSBQQ0lfRFBBX0NBUF9TVUJTVEFURV9NQVNLO1xcbiBcXHRcXHRyZXR1cm4gUENJX0RQQV9CQVNFX1NJWkVPRiArIGJ5dGUgKyAxO1xcbiBcXHRjYXNlIFBDSV9FWFRfQ0FQX0lEX1RQSDpcXG4rXFx0XFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGVwb3MgKyBQQ0lfVFBIX0NBUCwgXFx1MDAyNmR3b3JkKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHBjaWJpb3NfZXJyX3RvX2Vycm5vKHJldCk7XFxuQEAgLTE3MDEsNiArMTgxOSw4IEBAIHN0YXRpYyBpbnQgdmZpb19lY2FwX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHRcXHRyZXQgPSB2ZmlvX2ZpbGxfdmNvbmZpZ19ieXRlcyh2ZGV2LCBlcG9zLCBsZW4pO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEggXFx1MDAyNlxcdTAwMjYgIWhpZGRlbilcXG4rXFx0XFx0XFx0dmZpb190cGhfbWFza19leHRfdHBoX2JpdCh2ZGV2LCBlcG9zKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IGEyOGYxZTk5MzYyYzFlLi4xZTcwNmE2OTBkYmQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTI5LDYgKzI5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZWVoLmhcXHUwMDNlXFxuICNlbmRpZlxcbkBAIC00MSw2ICs0Miw3IEBAXFxuIHN0YXRpYyBib29sIG5vaW50eG1hc2s7XFxuIHN0YXRpYyBib29sIGRpc2FibGVfdmdhO1xcbiBzdGF0aWMgYm9vbCBkaXNhYmxlX2lkbGVfZDM7XFxuK3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoO1xcbiBcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZXZlbnRmZF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4ge1xcbkBAIC01MzEsNiArNTMzLDUyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2ZmlvX3BjaV9jb3JlX3BtX29wcyA9IHtcXG4gXFx0XFx0XFx0ICAgTlVMTClcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfdHBoX3N0X3NoYWRvd19zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHtcXG4rXFx0XFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbitcXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cgPSBOVUxMO1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIWVuYWJsZV91bnNhZmVfdHBoKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9zdF9lbnRyaWVzID0gdmZpb19wY2lfdHBoX3N0X3NoYWRvd19zaXplKHZkZXYpO1xcbitcXHRpZiAodmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMpIHtcXG4rXFx0XFx0dmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdyA9IGtjYWxsb2ModmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMsIHNpemVvZih1MTYpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmZpb19wY2lfdHBoX2RlaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuK3tcXG4rXFx0a2ZyZWUodmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdyk7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cgPSBOVUxMO1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgPSBmYWxzZTtcXG4rfVxcbitcXG4gaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuQEAgLTU1Nyw2ICs2MDUsMTMgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XFxuIFxcbiBcXHR2ZGV2LVxcdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XFxuK1xcbitcXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cXG4rXFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0cmV0ID0gdmZpb19wY2lfdHBoX2luaXQodmRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xcbitcXG4gXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcdHZkZXYtXFx1MDAzZXBjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTtcXG4gXFx0aWYgKCF2ZGV2LVxcdTAwM2VwY2lfc2F2ZWRfc3RhdGUpXFxuQEAgLTYxNCw2ICs2NjksNyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBvdXRfZnJlZV9zdGF0ZTpcXG4gXFx0a2ZyZWUodmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlKTtcXG4gXFx0dmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gTlVMTDtcXG4rXFx0dmZpb19wY2lfdHBoX2RlaW5pdCh2ZGV2KTtcXG4gb3V0X2Rpc2FibGVfZGV2aWNlOlxcbiBcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIG91dF9wb3dlcjpcXG5AQCAtNjgyLDYgKzczOCw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0a2ZyZWUodmRldi1cXHUwMDNlcmVnaW9uKTtcXG4gXFx0dmRldi1cXHUwMDNlcmVnaW9uID0gTlVMTDsgLyogZG9uJ3Qga3JlYWxsb2MgYSBmcmVlZCBwb2ludGVyICovXFxuIFxcbitcXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIHNlc3Npb24gZXhpdCAqL1xcbitcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xcbiBcXHR2ZmlvX2NvbmZpZ19mcmVlKHZkZXYpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xcbkBAIC0xNTU0LDYgKzE2MTMsOTUgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1MzIgZmxhZ3MsIHNpemVfdCBhcmdzeilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFlbmFibGVfdW5zYWZlX3RwaClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQpXFxuK1xcdFxcdHZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgPSAxO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcoXFxuK1xcdFxcdFxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0dTMyIGZsYWdzLFxcbitcXHRcXHRcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBjb25maWc7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0dm9pZCBfX3VzZXIgKnVwdHI7XFxuK1xcdGludCBpLCBpZHgsIHJldDtcXG4rXFx0c2l6ZV90IHN6O1xcbitcXHR1MTYgKnN0cztcXG4rXFxuK1xcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKGNvbmZpZykpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgfHwgIXZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjb25maWcsIGFyZywgc2l6ZW9mKGNvbmZpZykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChjb25maWcuY291bnQgPT0gMCB8fCBjb25maWcucmVzZXJ2ZWQgIT0gMCB8fFxcbitcXHRcXHRjb25maWcuaW5kZXggXFx1MDAzZT0gdmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMgfHxcXG4rXFx0XFx0Y29uZmlnLmNvdW50IFxcdTAwM2UgdmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMgLSBjb25maWcuaW5kZXgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0dXB0ciA9IHU2NF90b191c2VyX3B0cihjb25maWcuZGF0YV91cHRyKTtcXG4rXFx0c3RzID0gbWVtZHVwX2FycmF5X3VzZXIodXB0ciwgY29uZmlnLmNvdW50LCBzaXplb2YodTE2KSk7XFxuK1xcdHN6ID0gY29uZmlnLmNvdW50ICogc2l6ZW9mKHUxNik7XFxuK1xcdGlmIChJU19FUlIoc3RzKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoc3RzKTtcXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9ja19tZW1vcnk7XFxuK1xcbitcXHRpZiAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShwZGV2KSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxcbitcXHRcXHRnb3RvIHVwZGF0ZV9zaGFkb3c7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLmNvdW50OyBpKyspIHtcXG4rXFx0XFx0aWR4ID0gY29uZmlnLmluZGV4ICsgaTtcXG4rXFx0XFx0cmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGlkeCwgc3RzW2ldKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByb2xsYmFjaztcXG4rXFx0fVxcbitcXG4rdXBkYXRlX3NoYWRvdzpcXG4rXFx0bWVtY3B5KFxcdTAwMjZ2ZGV2LVxcdTAwM2V0cGhfc3Rfc2hhZG93W2NvbmZpZy5pbmRleF0sIHN0cywgc3opO1xcbitcXHRyZXQgPSAwO1xcbitcXHRnb3RvIG91dF91bmxvY2tfbWVtb3J5O1xcbitcXG4rcm9sbGJhY2s6XFxuK1xcdHdoaWxlIChpLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlkeCA9IGNvbmZpZy5pbmRleCArIGk7XFxuK1xcdFxcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3dbaWR4XSk7XFxuK1xcdH1cXG4rXFxuK291dF91bmxvY2tfbWVtb3J5OlxcbitcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0a2ZyZWUoc3RzKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXFxuIHtcXG5AQCAtMTU3Miw2ICsxNzIwLDExIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRTpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlKHZkZXYsIGZsYWdzLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcodmRldiwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGFyZywgYXJnc3opO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gXFx0fVxcbkBAIC0yNjE1LDExICsyNzY4LDEzIEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXFxuIH1cXG4gXFxuIHZvaWQgdmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKGJvb2wgaXNfbm9pbnR4bWFzaywgYm9vbCBpc19kaXNhYmxlX3ZnYSxcXG4tXFx0XFx0XFx0ICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMpXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxcbitcXHRcXHRcXHQgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKVxcbiB7XFxuIFxcdG5vaW50eG1hc2sgPSBpc19ub2ludHhtYXNrO1xcbiBcXHRkaXNhYmxlX3ZnYSA9IGlzX2Rpc2FibGVfdmdhO1xcbiBcXHRkaXNhYmxlX2lkbGVfZDMgPSBpc19kaXNhYmxlX2lkbGVfZDM7XFxuK1xcdGVuYWJsZV91bnNhZmVfdHBoID0gaXNfZW5hYmxlX3Vuc2FmZV90cGg7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uNTkxN2EwNjk0YzFkNjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbkBAIC04LDYgKzgsNyBAQFxcbiAgKi9cXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxcbkBAIC0yNiwxMCArMjcsMTYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0XFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4rXFx0XFx0XFx0XFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcXG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpO1xcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuQEAgLTM4LDkgKzQ1LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbiB7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHRcXHRib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4reyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiB7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGJvb2wgZXh0ZW5kZWQpXFxuK3sgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIDA7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxcbit7IHJldHVybiBmYWxzZTsgfVxcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcXG5pbmRleCAyYzQ0NTQ1ODNjMTE1Yi4uMjg1YzBmMDA4ODJlMGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcXG5AQCAtNDcxLDcgKzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcXG4gXFx0dW5zaWduZWQgaW50XFx0YXRzX2VuYWJsZWQ6MTtcXHRcXHQvKiBBZGRyZXNzIFRyYW5zbGF0aW9uIFN2YyAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRwYXNpZF9lbmFibGVkOjE7XFx0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXFxuIFxcdHVuc2lnbmVkIGludFxcdHByaV9lbmFibGVkOjE7XFx0XFx0LyogUGFnZSBSZXF1ZXN0IEludGVyZmFjZSAqL1xcbi1cXHR1bnNpZ25lZCBpbnRcXHR0cGhfZW5hYmxlZDoxO1xcdFxcdC8qIFRMUCBQcm9jZXNzaW5nIEhpbnRzICovXFxuIFxcdHVuc2lnbmVkIGludFxcdGZtX2VuYWJsZWQ6MTtcXHRcXHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXFxuIFxcdHVuc2lnbmVkIGludFxcdGlzX21hbmFnZWQ6MTtcXHRcXHQvKiBNYW5hZ2VkIHZpYSBkZXZyZXMgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0aXNfbXNpX21hbmFnZWQ6MTtcXHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xcbkBAIC01ODksNyArNTg4LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcXG4gXFx0dTggcmVzZXRfbWV0aG9kc1tQQ0lfTlVNX1JFU0VUX01FVEhPRFNdOyAvKiBJbiBwcmlvcml0eSBvcmRlciAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbi1cXHR1MTZcXHRcXHR0cGhfY2FwO1xcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfY2FwOjE0O1xcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfZXh0X3N1cHBvcnQ6MTsgLyogSW5kaWNhdGUgd2hldGhlciBFeHRlbmRlZCBUUEhcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfZW5hYmxlZDoxO1xcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cXG4gXFx0dThcXHRcXHR0cGhfbW9kZTtcXHQvKiBUUEggbW9kZSAqL1xcbiBcXHR1OFxcdFxcdHRwaF9yZXFfdHlwZTtcXHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA1ZmM2Y2U0ZGQ3ODYxNi4uNTI3Yzg0ZjA0MmFhNmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbkBAIC0xMjgsNiArMTI4LDcgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcXG4gXFx0Ym9vbFxcdFxcdFxcdHBtX2ludHhfbWFza2VkOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRwbV9ydW50aW1lX2VuZ2FnZWQ6MTtcXG4gXFx0Ym9vbFxcdFxcdFxcdHNyaW92X2FjdGl2ZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdHRwaF9wZXJtaXQ7XFxuIFxcdHN0cnVjdCBwY2lfc2F2ZWRfc3RhdGVcXHQqcGNpX3NhdmVkX3N0YXRlO1xcbiBcXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXFx0KnBtX3NhdmU7XFxuIFxcdGludFxcdFxcdFxcdGlvZXZlbnRmZHNfbnI7XFxuQEAgLTE0Myw2ICsxNDQsOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcXHRuYjtcXG4gXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdG1lbW9yeV9sb2NrO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZG1hYnVmcztcXG4rXFx0dTE2XFx0XFx0XFx0KnRwaF9zdF9zaGFkb3c7XFxuK1xcdHUxNlxcdFxcdFxcdHRwaF9zdF9lbnRyaWVzO1xcbiB9O1xcbiBcXG4gZW51bSB2ZmlvX3BjaV9pb193aWR0aCB7XFxuQEAgLTE1OCw3ICsxNjEsOCBAQCBpbnQgdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZfcmVnaW9uKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHZmaW9fcGNpX3JlZ29wcyAqb3BzLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSwgdTMyIGZsYWdzLCB2b2lkICpkYXRhKTtcXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMoYm9vbCBub2ludHhtYXNrLCBib29sIGlzX2Rpc2FibGVfdmdhLFxcbi1cXHRcXHRcXHQgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMyk7XFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxcbitcXHRcXHRcXHQgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKTtcXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XFxuIGludCB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3JlbGVhc2VfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oXFxuaW5kZXggNGYxNTAwMjg5NjVkOGIuLjVjNGVhNDRkNjZkMjA2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNkZWZpbmUgX1VBUElMSU5VWF9QQ0lfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFx0LyogVGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogVGhlIFBDSSBpbnRlcmZhY2UgdHJlYXRzIG11bHRpLWZ1bmN0aW9uIGRldmljZXMgYXMgaW5kZXBlbmRlbnRcXG5AQCAtNDYsNCArNDcsMTkgQEAgZW51bSBwY2lfaG90cGx1Z19ldmVudCB7XFxuIFxcdFBDSV9IT1RQTFVHX0NBUkRfTk9UX1BSRVNFTlQsXFxuIH07XFxuIFxcbisvKlxcbisgKiBQQ0llIFRQSCBzeXNmcyBiaW5hcnkgZW50cnkgZm9yIENQVS10by1TVCBtYXBwaW5nXFxuKyAqIFN5c2ZzIGZpbGU6IC9zeXMvYnVzL3BjaS9kZXZpY2VzL1xcdTAwM2NCREZcXHUwMDNlL3RwaF9jcHVfc3RcXG4rICogRWFjaCBlbnRyeSBpcyA4IGJ5dGVzIGFsaWduZWQsIHNlZWsgb2Zmc2V0ID0gY3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1pcXG4rICovXFxuK3N0cnVjdCBwY2lfdHBoX2NwdV9zdCB7XFxuK1xcdF9fdTggIHZtX3N0OyAgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IFN0ZWVyaW5nIFRhZyAoMSBieXRlKSAqL1xcbitcXHRfX3U4ICBwbV9zdDsgICAgICAgIC8qIFBlcnNpc3RlbnQgTWVtb3J5IFN0ZWVyaW5nIFRhZyAoMSBieXRlKSAqL1xcbitcXHRfX3UxNiB2bV94c3Q7ICAgICAgIC8qIFZvbGF0aWxlIE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovXFxuK1xcdF9fdTE2IHBtX3hzdDsgICAgICAgLyogUGVyc2lzdGVudCBNZW1vcnkgRXh0ZW5kZWQgU3RlZXJpbmcgVGFnICgyIGJ5dGVzKSAqL1xcbitcXHRfX3UxNiByZXNlcnZlZDsgICAgIC8qIFBhZGRpbmcgdG8gOCBieXRlcyBmb3IgYWxpZ25lZCBvZmZzZXQgbG9va3VwICovXFxuK30gX19wYWNrZWQ7XFxuK1xcbisjZGVmaW5lIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaIHNpemVvZihzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QpXFxuK1xcbiAjZW5kaWYgLyogX1VBUElMSU5VWF9QQ0lfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi42MTA3OTU5NGE5MWY1YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsMzUgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLypcXG4rICogRGV2aWNlLWxldmVsIG9wdC1pbiBmb3IgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0LlxcbisgKiBXaGVuIHNldCwgYWxsb3dzIGFjY2VzcyB0byBUUEhfQ1BVX1NUIGFuZCBUUEhfU1RfQ09ORklHIGZlYXR1cmVzLlxcbisgKiBSZXF1aXJlcyBnbG9iYWwgZW5hYmxlX3Vuc2FmZV90cGggbW9kdWxlIHBhcmFtZXRlciB0byBiZSBlbmFibGVkLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEVcXHQxM1xcbitcXG4rLyoqXFxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJRyAtIENvbmZpZ3VyZSBQQ0llIFRQSCBTdGVlcmluZyBUYWcgZW50cmllc1xcbisgKlxcbisgKiBQcm92aWRlcyB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBQQ0llIFRQSCBTVCB0YWJsZSBlbnRyaWVzLlxcbisgKlxcbisgKiBAaW5kZXg6IFN0YXJ0IGVudHJ5IG9mZnNldCB3aXRoaW4gU1QgdGFibGVcXG4rICogQGNvdW50OiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZW50cmllcyB0byBjb25maWd1cmVcXG4rICogQGRhdGFfdXB0cjogVXNlcnNwYWNlIGRhdGEgYnVmZmVyIGZvciAxNi1iaXQgcmF3IFNUIHZhbHVlc1xcbisgKlxcbisgKiBUaGlzIGZlYXR1cmUgcmVxdWlyZXMgdHdvIHByZWNvbmRpdGlvbnM6XFxuKyAqIDEuIEdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQ7XFxuKyAqIDIuIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRSBoYXMgYmVlbiBTRVQgb24gdGhlIGRldmljZSBiZWZvcmVoYW5kLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUdcXHQxNFxcbitcXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyB7XFxuK1xcdF9fdTE2IGluZGV4O1xcbitcXHRfX3UxNiBjb3VudDtcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7IC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8gKi9cXG4rXFx0X19hbGlnbmVkX3U2NCBkYXRhX3VwdHI7XFxuK307XFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNDo0NC4wNDU5MDU3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwMjY4MDk3OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnXCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIixcbiAgICBcInZmaW9fcGNpX3RwaF9pbml0XCIsXG4gICAgXCJwY2lfdHBoX2luaXRcIixcbiAgICBcImVuYWJsZV90cGhcIixcbiAgICBcInRwaF9jcHVfc3RfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFBDSWUgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0IHRvIFZGSU8gUENJIGFuZCBhZGRzIGEgc3lzZnMgYXR0cmlidXRlIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gVGhlIFZGSU8gaW9jdGxzIGFuZCBjb25maWcgc3BhY2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCwgYnV0IHRoZXkgcmVxdWlyZSB0aGUgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgY29yZSBQQ0kgVFBIIGluaXRpYWxpemF0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MjU0M2ExZWQwOWEyNmQ2NDY2NTgyMDI0MzdkNjE0NzM1YjczODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwODoxNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaVxuaW5kZXggYjc2N2RiMmM1MmNiNzAuLmVkYzY0ZTRlNTY0MDRlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2lcbkBAIC03MDIsMyArNzAyLDI3IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRXaGVuIHByZXNlbnQgYW5kIHRoZSB0c20vIGF0dHJpYnV0ZSBkaXJlY3RvcnkgaXMgcHJlc2VudCwgdGhlXG4gXHRcdGF1dGhlbnRpY2F0ZWQgYXR0cmlidXRlIGlzIGFuIGFsaWFzIGZvciB0aGUgZGV2aWNlICdjb25uZWN0J1xuIFx0XHRzdGF0ZS4gU2VlIHRoZSAndHNtL2Nvbm5lY3QnIGF0dHJpYnV0ZSBmb3IgbW9yZSBkZXRhaWxzLlxuK1xuK1doYXQ6XHRcdC9zeXMvYnVzL3BjaS9kZXZpY2VzL1x1MDAzY3Jvb3QtcG9ydC1iZGZcdTAwM2UvdHBoX2NwdV9zdFxuK0NvbnRhY3Q6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdFJlYWQtb25seSBiaW5hcnkgYXR0cmlidXRlIG9ubHkgZXhwb3NlZCBvbiBQQ0llIFJvb3QgUG9ydHMgdGhhdFxuK1x0XHRzdXBwb3J0IFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgaW1wbGVtZW50IHRoZSBBQ1BJIERTTVxuK1x0XHRtZXRob2QgZm9yIENQVS10by1TVCBtYXBwaW5nLiBGaWxlIHBlcm1pc3Npb24gaXMgcm9vdC1vbmx5XG4rXHRcdCgwNDAwKS5cbitcbitcdFx0VGhlIGJsb2IgaXMgYSBzZXF1ZW5jZSBvZiBmaXhlZC1zaXplIDgtYnl0ZSBlbnRyaWVzIGRlZmluZWQgYnlcbitcdFx0c3RydWN0IHBjaV90cGhfY3B1X3N0IGluIHVhcGkvbGludXgvcGNpLmg6XG4rXHRcdCAgX191OCB2bV9zdDtcbitcdFx0ICBfX3U4IHBtX3N0O1xuK1x0XHQgIF9fdTE2IHZtX3hzdDtcbitcdFx0ICBfX3UxNiBwbV94c3Q7XG4rXHRcdCAgX191MTYgcmVzZXJ2ZWQ7XG4rXG4rXHRcdEVhY2ggZW50cnkgY29ycmVzcG9uZHMgdG8gYSBsb2dpY2FsIENQVSBpbmRleC4gU2VlayBvZmZzZXQgPVxuK1x0XHRjcHVfaWQgKiBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWi4gQXJiaXRyYXJ5IHVuYWxpZ25lZCBwYXJ0aWFsXG4rXHRcdHJlYWRzIGFyZSBzdXBwb3J0ZWQ7IG5vIGFsaWdubWVudCByZXN0cmljdGlvbiBlbmZvcmNlZC5cbitcbitcdFx0Rm9yIENQVXMgb3V0c2lkZSBjcHVfcG9zc2libGVfbWFzayBvciBvZmZsaW5lIENQVXMsIHRoZSBlbnRyeVxuK1x0XHRpcyBmaWxsZWQgd2l0aCBhbGwgemVyb3MgdG8gYXZvaWQgYnJlYWtpbmcgc2VxdWVudGlhbCBkdW1wIHRvb2xzXG4rXHRcdGxpa2UgY2F0L2hleGR1bXAgb24gc3BhcnNlIENQVSB0b3BvbG9naWVzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcbmluZGV4IGQzNzg2MDg0MTI2MGNlLi5hZDllNGU4ZDMyMGIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jXG4rKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuY1xuQEAgLTE4MzIsNiArMTgzMiw5IEBAIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBjaV9kZXZfYXR0cl9ncm91cHNbXSA9IHtcbiAjaWZkZWYgQ09ORklHX1BDSV9UU01cbiBcdFx1MDAyNnBjaV90c21fYXV0aF9hdHRyX2dyb3VwLFxuIFx0XHUwMDI2cGNpX3RzbV9hdHRyX2dyb3VwLFxuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitcdFx1MDAyNnBjaWVfdHBoX2NwdV9zdF9hdHRyX2dyb3VwLFxuICNlbmRpZlxuIFx0TlVMTCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IGU4YWQyN2FiYjFjZmU0Li4xYWJlN2ZhMWZjYzdlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTEzNzUsNiArMTM3NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBjaV9wb3dlcl90IGFjcGlfcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhc3BtX2N0cmxfYXR0cl9ncm91cDtcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXA7XG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19YODZfSU5URUxfTUlEXG4gYm9vbCBwY2lfdXNlX21pZF9wbSh2b2lkKTtcbiBpbnQgbWlkX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA5MTE0NWU4ZDlkOTUxMi4uNDc0MDJkNGI4ODk5OGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicGNpLmhcIlxuIFxuQEAgLTEzMCw4ICsxMzEsNDcgQEAgc3RhdGljIGFjcGlfc3RhdHVzIHRwaF9pbnZva2VfZHNtKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGNwdV91aWQsXG4gXG4gXHRyZXR1cm4gQUVfT0s7XG4gfVxuK1xuK3N0YXRpYyBpbnQgdHBoX2dldF9jcHVfc3RfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcbitcdFx0XHQgICAgICAgdW5pb24gc3RfaW5mbyAqaW5mbylcbit7XG4rXHRhY3BpX2hhbmRsZSBycF9hY3BpX2hhbmRsZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpycDtcbitcdHUzMiBjcHVfdWlkO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbitcdGlmIChyZXQgIT0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcbitcdGlmICghcnAgfHwgIXJwLVx1MDAzZWJ1cyB8fCAhcnAtXHUwMDNlYnVzLVx1MDAzZWJyaWRnZSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuK1x0aWYgKHRwaF9pbnZva2VfZHNtKHJwX2FjcGlfaGFuZGxlLCBjcHVfdWlkLCBpbmZvKSAhPSBBRV9PSylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gI2VuZGlmXG4gXG4rc3RhdGljIGJvb2wgdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuKyNpZmRlZiBDT05GSUdfQUNQSVxuK1x0c3RydWN0IHBjaV9kZXYgKnJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcbitcdGFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlO1xuK1xuK1x0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuK1x0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKHJwX2FjcGlfaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbitcdFx0XHQgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qIFVwZGF0ZSB0aGUgVFBIIFJlcXVlc3RlciBFbmFibGUgZmllbGQgb2YgVFBIIENvbnRyb2wgUmVnaXN0ZXIgKi9cbiBzdGF0aWMgdm9pZCBzZXRfY3RybF9yZWdfcmVxX2VuKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCByZXFfdHlwZSlcbiB7XG5AQCAtMTY2LDExICsyMDYsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuK1x0dTMyIHJlZyA9IDA7XG4rXG4rXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbitcdFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XG4gXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4gXG4tXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xuK1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg1LDkgKzIyOCw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVxuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMzEsNiArMjcxLDQ5IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIG9mZnNldCwgdGFnKTtcbiB9XG4gXG4rc3RhdGljIGludCBnZXRfY3B1X2FsbF9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcbitcdFx0XHQgICBzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgKnN0KVxuK3tcbisjaWZkZWYgQ09ORklHX0FDUElcbitcdHVuaW9uIHN0X2luZm8gaW5mbztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB0cGhfZ2V0X2NwdV9zdF9pbmZvKHBkZXYsIGNwdSwgXHUwMDI2aW5mbyk7XG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0c3QtXHUwMDNldm1fc3QgPSBpbmZvLnZtX3N0X3ZhbGlkID8gaW5mby52bV9zdCA6IDA7XG4rXHRcdHN0LVx1MDAzZXBtX3N0ID0gaW5mby5wbV9zdF92YWxpZCA/IGluZm8ucG1fc3QgOiAwO1xuK1x0XHRzdC1cdTAwM2V2bV94c3QgPSBpbmZvLnZtX3hzdF92YWxpZCA/IGluZm8udm1feHN0IDogMDtcbitcdFx0c3QtXHUwMDNlcG1feHN0ID0gaW5mby5wbV94c3RfdmFsaWQgPyBpbmZvLnBtX3hzdCA6IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuKyNlbmRpZlxuK1x0cmV0dXJuIC1FTk9ERVY7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbit7XG4rI2lmZGVmIENPTkZJR19BQ1BJXG4rXHR1bmlvbiBzdF9pbmZvIGluZm87XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFx1MDAyNmluZm8pO1xuK1x0aWYgKHJldCAhPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuK1xuK1x0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXG5cIixcbitcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcInZvbGF0aWxlXCIgOiBcInBlcnNpc3RlbnRcIixcbitcdFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XG4rXG4rXHRyZXR1cm4gMDtcbisjZWxzZVxuK1x0cmV0dXJuIC1FTk9ERVY7XG4rI2VuZGlmXG4rfVxuK1xuIC8qKlxuICAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbiAgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG5AQCAtMjQ3LDQwICszMzAsMzUgQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcbiBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4ge1xuLSNpZmRlZiBDT05GSUdfQUNQSVxuLVx0c3RydWN0IHBjaV9kZXYgKnJwO1xuLVx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XG4tXHR1bmlvbiBzdF9pbmZvIGluZm87XG4tXHR1MzIgY3B1X3VpZDtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgXHUwMDI2Y3B1X3VpZCk7XG4tXHRpZiAocmV0ICE9IDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4tXHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4tXHRcdHJldHVybiAtRU5PREVWO1xuK1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBjcHUsIHRhZyk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4gXG4tXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuKy8qKlxuKyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4rICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuKyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seVxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXG4rICogQHRhZzogb3V0cHV0IHN0ZWVyaW5nIHRhZyBwb2ludGVyXG4rICpcbisgKiBVbmxpa2UgYXV0byBwY2llX3RwaF9nZXRfY3B1X3N0KCksIGNhbGxlciBtYW51YWxseSBwaWNrcyByZXF1ZXN0ZXIgdHlwZS5cbisgKiBSZWplY3RzIEVYVCByZXF1ZXN0IGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuK3tcbitcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4gXG4tXHRpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsIFx1MDAyNmluZm8pICE9IEFFX09LKSB7XG4tXHRcdCp0YWcgPSAwO1xuK1x0aWYgKGV4dGVuZGVkIFx1MDAyNlx1MDAyNiAhcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuLVxuLVx0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwiLFxuLVx0XHQobWVtX3R5cGUgPT0gVFBIX01FTV9UWVBFX1ZNKSA/IFwidm9sYXRpbGVcIiA6IFwicGVyc2lzdGVudFwiLFxuLVx0XHRjcHUsICp0YWcpO1xuIFxuLVx0cmV0dXJuIDA7XG4tI2Vsc2Vcbi1cdHJldHVybiAtRU5PREVWO1xuLSNlbmRpZlxuK1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHJlcV90eXBlLCBjcHUsIHRhZyk7XG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KTtcbiBcbiAvKipcbiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XG5AQCAtMzE2LDggKzM5NCw2IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7XG4gXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovXG4tXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xuIFxuIFx0c3dpdGNoIChsb2MpIHtcbiBcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcbkBAIC0zNjYsMjcgKzQ0MiwxMCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XG4gXG4tLyoqXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4tICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4tICpcbi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbi0gKlxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4tICovXG4taW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4rc3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXG4ge1xuIFx0dTMyIHJlZztcbiBcdHU4IGRldl9tb2Rlcztcbi1cdHU4IHJwX3JlcV90eXBlO1xuIFxuIFx0LyogSG9ub3IgXCJub3RwaFwiIGtlcm5lbCBwYXJhbWV0ZXIgKi9cbiBcdGlmIChwY2lfdHBoX2Rpc2FibGVkKVxuQEAgLTQwNCwyNiArNDYzLDEyIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIG1vZGUpIFx1MDAyNiBkZXZfbW9kZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHBkZXYtXHUwMDNldHBoX21vZGUgPSBtb2RlO1xuLVxuLVx0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cbi1cdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbi1cdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuLVx0ZWxzZVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuLVxuLVx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbi1cdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbi1cdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4tXG4tXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbi1cdH1cbi1cbi1cdGlmIChwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxuK1x0aWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEggXHUwMDI2XHUwMDI2ICFwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbitcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XG4rXG4gXHQvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NUUkwsIFx1MDAyNnJlZyk7XG4gXG5AQCAtNDMxLDcgKzQ3Niw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIHBkZXYtXHUwMDNldHBoX21vZGUpO1xuIFxuIFx0cmVnIFx1MDAyNj0gflBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSztcbi1cdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUpO1xuK1x0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCByZXFfdHlwZSk7XG4gXG4gXHRwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ1RSTCwgcmVnKTtcbiBcbkBAIC00MzksOCArNDg0LDYzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK1xuKy8qKlxuKyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4rICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxuKyAqXG4rICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuKyAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxuKyAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4rICpcbisgKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuKyAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4rICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4rICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCdzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuKyAqL1xuK2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuK3tcbitcdHU4IHJlcV90eXBlID0gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDpcbitcdFx0XHRcdFx0ICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7XG4rXHRyZXR1cm4gZW5hYmxlX3RwaChwZGV2LCBtb2RlLCByZXFfdHlwZSk7XG4rfVxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcbiBcbisvKipcbisgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvblxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcbisgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKVxuKyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHlcbisgKlxuKyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGVcbisgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdFxuKyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKVxuK3tcbitcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4rXG4rXHRyZXR1cm4gZW5hYmxlX3RwaChwZGV2LCBtb2RlLCByZXFfdHlwZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KTtcbitcbisvKipcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4rXG4gdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7XG5AQCAtNTEyLDE0ICs2MTIsMTMxIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxuIFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbitcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XG4gXHRpbnQgbnVtX2VudHJpZXM7XG4gXHR1MzIgc2F2ZV9zaXplO1xuK1x0dTMyIHJlZyA9IDA7XG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4rXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4rXHRlbHNlXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuK1xuK1x0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbitcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbitcdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4rXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbitcdFx0dHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuK1x0fVxuK1xuK1x0aWYgKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XG4rXHRcdHBkZXYtXHUwMDNldHBoX2NhcCA9IDA7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0ID0gISEodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpO1xuK1xuIFx0bnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTtcbiBcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcbiBcdHBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7XG4gfVxuK1xuKy8qKlxuKyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICogQHdhbnRfZXh0OiBmYWxzZSAtIGNoZWNrIFRQSCBjYXAgZXhpc3RzOyB0cnVlIC0gY2hlY2sgRVhUX1RQSCBzdXBwb3J0XG4rICpcbisgKiBSZXR1cm46IHRydWUgb24gbWF0Y2hlZCBjb25kaXRpb24sIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuK3tcbitcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIXdhbnRfZXh0KVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydDtcbit9XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9zdXBwb3J0ZWQpO1xuK1xuK3N0YXRpYyBzc2l6ZV90IHRwaF9jcHVfc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuK1x0XHRcdCAgICAgICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbitcdGNvbnN0IHNpemVfdCBlbnRyeV9zeiA9IFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaO1xuK1x0Y29uc3Qgc2l6ZV90IHRvdGFsX3NpemUgPSBucl9jcHVfaWRzICogZW50cnlfc3o7XG4rXHRzaXplX3QgY29waWVkID0gMDtcbitcdGxvZmZfdCBwb3MgPSBvZmY7XG4rXG4rXHRpZiAocG9zIFx1MDAzZT0gdG90YWxfc2l6ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHRvdGFsX3NpemUgLSBwb3MpO1xuK1xuK1x0d2hpbGUgKGNvcGllZCBcdTAwM2MgY291bnQpIHtcbitcdFx0dW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejtcbitcdFx0c2l6ZV90IGVudHJ5X29mZiA9IHBvcyAlIGVudHJ5X3N6O1xuK1x0XHRzaXplX3QgcmVtYWluID0gZW50cnlfc3ogLSBlbnRyeV9vZmY7XG4rXHRcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7XG4rXHRcdHN0cnVjdCBwY2lfdHBoX2NwdV9zdCBzdCA9IHswfTtcbitcbitcdFx0aWYgKGNwdV9wb3NzaWJsZShjcHVfaWR4KSlcbitcdFx0XHRnZXRfY3B1X2FsbF9zdChwZGV2LCBjcHVfaWR4LCBcdTAwMjZzdCk7XG4rXG4rXHRcdG1lbWNweShidWYgKyBjb3BpZWQsIChjaGFyICopXHUwMDI2c3QgKyBlbnRyeV9vZmYsIGNodW5rKTtcbitcbitcdFx0Y29waWVkICs9IGNodW5rO1xuK1x0XHRwb3MgKz0gY2h1bms7XG4rXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNvcGllZDtcbit9XG4rc3RhdGljIEJJTl9BVFRSKHRwaF9jcHVfc3QsIDA0MDAsIHRwaF9jcHVfc3RfcmVhZCwgTlVMTCwgMCk7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCB0cGhfY3B1X3N0X2Jpbl9hdHRyc1tdID0ge1xuK1x0XHUwMDI2YmluX2F0dHJfdHBoX2NwdV9zdCxcbitcdE5VTEwsXG4rfTtcbitcbitzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphLCBpbnQgbilcbit7XG4rXHRyZXR1cm4gbnJfY3B1X2lkcyAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaO1xuK31cbitcbitzdGF0aWMgdW1vZGVfdCB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYSwgaW50IG4pXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbitcdGJvb2wgaXNfcm9vdF9wb3J0ID0gcGNpX2lzX3BjaWUocGRldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRwY2lfcGNpZV90eXBlKHBkZXYpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQ7XG4rXHR1MzIgZGV2Y2FwMiA9IDA7XG4rXG4rXHRpZiAoIWlzX3Jvb3RfcG9ydClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0VYUF9ERVZDQVAyLCBcdTAwMjZkZXZjYXAyKTtcbitcdGlmICghKGRldmNhcDIgXHUwMDI2IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXRwaF9kc21fc3VwcG9ydGVkKHBkZXYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBhLVx1MDAzZWF0dHIubW9kZTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCA9IHtcbitcdC5iaW5fYXR0cnMgPSB0cGhfY3B1X3N0X2Jpbl9hdHRycyxcbitcdC5iaW5fc2l6ZSA9IHRwaF9jcHVfc3RfYmluX3NpemUsXG4rXHQuaXNfYmluX3Zpc2libGUgPSB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZSxcbit9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuaW5kZXggMGM3NzEwNjRjMGI4NDQuLjZkNzM2Njg0NTljZjU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbkBAIC02MCw2ICs2MCwxMiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFwiRGlzYWJsZSB1c2Ugb2YgZGV2aWNlIGRlbnlsaXN0LiBEaXNhYmxpbmcgdGhlIGRlbnlsaXN0IGFsbG93cyBiaW5kaW5nIHRvIGRldmljZXMgd2l0aCBrbm93biBlcnJhdGEgdGhhdCBtYXkgbGVhZCB0byBleHBsb2l0YWJsZSBzdGFiaWxpdHkgb3Igc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnkgdW50cnVzdGVkIHVzZXJzLlwiKTtcbiBcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4rc3RhdGljIGJvb2wgZW5hYmxlX3Vuc2FmZV90cGg7XG4rbW9kdWxlX3BhcmFtKGVuYWJsZV91bnNhZmVfdHBoLCBib29sLCAwNDQ0KTtcbitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV91bnNhZmVfdHBoLCBcIkVuYWJsZSBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydC4gSXQgbWF5IGJyZWFrIHBsYXRmb3JtIGlzb2xhdGlvbi4gSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIHN0ZXAgYXdheS4gKGRlZmF1bHQ6IGZhbHNlKVwiKTtcbisjZW5kaWZcbitcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3dpdGNoIChwZGV2LVx1MDAzZXZlbmRvcikge1xuQEAgLTI1NywxMiArMjYzLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHZmaW9fcGNpX2luaXQodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuIFx0Ym9vbCBpc19kaXNhYmxlX3ZnYSA9IHRydWU7XG4rXHRib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoID0gZmFsc2U7XG4gXG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9WR0FcbiBcdGlzX2Rpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuK1x0aXNfZW5hYmxlX3Vuc2FmZV90cGggPSBlbmFibGVfdW5zYWZlX3RwaDtcbisjZW5kaWZcbiBcbi1cdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzKTtcbitcdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzLFxuK1x0XHRcdFx0IGlzX2VuYWJsZV91bnNhZmVfdHBoKTtcbiBcbiBcdC8qIFJlZ2lzdGVyIGFuZCBzY2FuIGZvciBkZXZpY2VzICovXG4gXHRyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnZmaW9fcGNpX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbmluZGV4IGExMGVkNzMzZjBlM2FmLi4xMGY0ZTlmYWJlYTdjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICsxMDg2LDExOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3B3cl9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXG4rc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuK3tcbitcdGludCBpO1xuK1xuK1x0aWYgKGFsbG9jX3Blcm1fYml0cyhwZXJtLCBwY2lfZXh0X2NhcF9sZW5ndGhbUENJX0VYVF9DQVBfSURfVFBIXSkpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cF9zZXRkKHBlcm0sIDAsIEFMTF9WSVJULCBOT19XUklURSk7XG4rXHRwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7XG4rXG4rXHRwX3NldGQocGVybSwgUENJX1RQSF9DVFJMLCBBTExfVklSVCwgQUxMX1dSSVRFKTtcbitcbitcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xuK1x0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuK1x0ICogQ2FwYWJpbGl0eSBzdHJ1Y3R1cmUuXG4rXHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxuK1x0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSsrKVxuK1x0XHRwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiArIGkgKiBzaXplb2YodTE2KSxcbitcdFx0ICAgICAgICh1MTYpQUxMX1ZJUlQsICh1MTYpQUxMX1dSSVRFKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZmlvX3RwaF9tYXNrX2V4dF90cGhfYml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdCAgICAgIGludCBwb3MpXG4re1xuK1x0X19sZTMyICp2cHRyID0gKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1twb3MgKyBQQ0lfVFBIX0NBUF07XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHUzMiB2YWw7XG4rXG4rXHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCB0cnVlKSkge1xuK1x0XHR2YWwgPSBsZTMyX3RvX2NwdSgqdnB0cik7XG4rXHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuK1x0XHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmZpb19maW5kX2NhcF9zdGFydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MpO1xuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbitcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4rXHRcdFx0XHQgaW50IG9mZnNldCwgX19sZTMyIHZhbClcbit7XG4rXHRpbnQgcmVxX2VuX2J5dGUgPSBQQ0lfVFBIX0NUUkwgKyAxO1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4rXHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0dTggbW9kZSwgcmVxO1xuK1x0aW50IGksIHJldDtcbitcdHUxNiBzdGFydDtcbitcdHUzMiBkYXRhO1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9wZXJtaXQpXG4rXHRcdHJldHVybiBjb3VudDtcbitcbitcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXG4rXHQvKiBCYWNrIHVwIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gb3JkZXIgcm9sbGJhY2sgd2hlbiBmYWlsICovXG4rXHRpZiAob2Zmc2V0IFx1MDAzYz0gcmVxX2VuX2J5dGUgXHUwMDI2XHUwMDI2IG9mZnNldCArIGNvdW50IFx1MDAzZSByZXFfZW5fYnl0ZSlcbitcdFx0dmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbitcdFx0XHRcdFx0IFx1MDAyNm9yZ192YWwpO1xuK1xuK1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4rXHRpZiAocmV0ICE9IGNvdW50KSB7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogU2tpcCBpZiB3cml0ZSByYW5nZSBkb2VzIG5vdCBjb3ZlciBSZXF1ZXN0ZXIgRW5hYmxlIGJ5dGUgKi9cbitcdGlmIChvZmZzZXQgXHUwMDNlIHJlcV9lbl9ieXRlIHx8IG9mZnNldCArIGNvdW50IFx1MDAzYz0gcmVxX2VuX2J5dGUpIHtcbitcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbitcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuK1x0aWYgKHJldCkge1xuK1x0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbitcdFx0XHRcdFx0ICBvcmdfdmFsKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbitcdHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpO1xuK1x0ZGF0YSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3N0YXJ0ICsgUENJX1RQSF9DVFJMXSk7XG4rXHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBkYXRhKTtcbitcdHJlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIGRhdGEpO1xuK1xuK1x0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xuK1x0XHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbitcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcbitcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdykge1xuK1x0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZkZXYtXHUwMDNldHBoX3N0X2VudHJpZXM7IGkrKylcbitcdFx0XHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpLFxuK1x0XHRcdFx0XHRcdCAgICAgIHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tpXSk7XG4rXHRcdH1cbitcdFx0aWYgKHJldClcbitcdFx0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sXG4rXHRcdFx0XHRcdFx0ICBvZmZzZXQsIG9yZ192YWwpO1xuK1x0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuK1x0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHR9IGVsc2Uge1xuK1x0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbitcdFx0XHRcdFx0ICBvcmdfdmFsKTtcbitcdH1cbitcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiArMTIxMyw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKVxuIFxuIFx0ZnJlZV9wZXJtX2JpdHMoXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XG4rXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuIH1cbiBcbiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG5AQCAtMTEyMCw2ICsxMjM0LDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbitcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4rXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XG4gXG5AQCAtMTQ1MCw2ICsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICsgYnl0ZSArIDE7XG4gXHRjYXNlIFBDSV9FWFRfQ0FQX0lEX1RQSDpcbitcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0XHRyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyArIFBDSV9UUEhfQ0FQLCBcdTAwMjZkd29yZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHBjaWJpb3NfZXJyX3RvX2Vycm5vKHJldCk7XG5AQCAtMTcwMSw2ICsxODE5LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIIFx1MDAyNlx1MDAyNiAhaGlkZGVuKVxuK1x0XHRcdHZmaW9fdHBoX21hc2tfZXh0X3RwaF9iaXQodmRldiwgZXBvcyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMjhmMWU5OTM2MmMxZS4uMWU3MDZhNjkwZGJkNzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0yOSw2ICsyOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2VlaC5oXHUwMDNlXG4gI2VuZGlmXG5AQCAtNDEsNiArNDIsNyBAQFxuIHN0YXRpYyBib29sIG5vaW50eG1hc2s7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV92Z2E7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV9pZGxlX2QzO1xuK3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoO1xuIFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2V2ZW50ZmRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4ge1xuQEAgLTUzMSw2ICs1MzMsNTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHZmaW9fcGNpX2NvcmVfcG1fb3BzID0ge1xuIFx0XHRcdCAgIE5VTEwpXG4gfTtcbiBcbitzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuK1x0XHRyZXR1cm4gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4rXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XG4rXHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHR2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzID0gMDtcbitcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IE5VTEw7XG4rXHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSBmYWxzZTtcbitcbitcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZSh2ZGV2KTtcbitcdGlmICh2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzKSB7XG4rXHRcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IGtjYWxsb2ModmRldi1cdTAwM2V0cGhfc3RfZW50cmllcywgc2l6ZW9mKHUxNiksXG4rXHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRcdGlmICghdmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93KVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZmaW9fcGNpX3RwaF9kZWluaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuK3tcbitcdGtmcmVlKHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyk7XG4rXHR2ZGV2LVx1MDAzZXRwaF9zdF9zaGFkb3cgPSBOVUxMO1xuK1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XG4rXHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSBmYWxzZTtcbit9XG4rXG4gaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbkBAIC01NTcsNiArNjA1LDEzIEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuIFx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4rXG4rXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cbitcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cdTAwM2VwZGV2KTtcbitcdHJldCA9IHZmaW9fcGNpX3RwaF9pbml0KHZkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4rXG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC02MTQsNiArNjY5LDcgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBvdXRfZnJlZV9zdGF0ZTpcbiBcdGtmcmVlKHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gTlVMTDtcbitcdHZmaW9fcGNpX3RwaF9kZWluaXQodmRldik7XG4gb3V0X2Rpc2FibGVfZGV2aWNlOlxuIFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIG91dF9wb3dlcjpcbkBAIC02ODIsNiArNzM4LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0a2ZyZWUodmRldi1cdTAwM2VyZWdpb24pO1xuIFx0dmRldi1cdTAwM2VyZWdpb24gPSBOVUxMOyAvKiBkb24ndCBrcmVhbGxvYyBhIGZyZWVkIHBvaW50ZXIgKi9cbiBcbitcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gc2Vzc2lvbiBleGl0ICovXG4rXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xuIFx0dmZpb19jb25maWdfZnJlZSh2ZGV2KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xuQEAgLTE1NTQsNiArMTYxMyw5NSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZmxhZ3MsIHNpemVfdCBhcmdzeilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFlbmFibGVfdW5zYWZlX3RwaClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbitcdFx0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gMTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnKFxuK1x0XHRcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHR1MzIgZmxhZ3MsXG4rXHRcdFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBfX3VzZXIgKmFyZyxcbitcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBjb25maWc7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHZvaWQgX191c2VyICp1cHRyO1xuK1x0aW50IGksIGlkeCwgcmV0O1xuK1x0c2l6ZV90IHN6O1xuK1x0dTE2ICpzdHM7XG4rXG4rXHRpZiAoIWVuYWJsZV91bnNhZmVfdHBoKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRcdCBzaXplb2YoY29uZmlnKSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0IHx8ICF2ZGV2LVx1MDAzZXRwaF9zdF9zaGFkb3cpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNvbmZpZywgYXJnLCBzaXplb2YoY29uZmlnKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0aWYgKGNvbmZpZy5jb3VudCA9PSAwIHx8IGNvbmZpZy5yZXNlcnZlZCAhPSAwIHx8XG4rXHRcdGNvbmZpZy5pbmRleCBcdTAwM2U9IHZkZXYtXHUwMDNldHBoX3N0X2VudHJpZXMgfHxcbitcdFx0Y29uZmlnLmNvdW50IFx1MDAzZSB2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzIC0gY29uZmlnLmluZGV4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHVwdHIgPSB1NjRfdG9fdXNlcl9wdHIoY29uZmlnLmRhdGFfdXB0cik7XG4rXHRzdHMgPSBtZW1kdXBfYXJyYXlfdXNlcih1cHRyLCBjb25maWcuY291bnQsIHNpemVvZih1MTYpKTtcbitcdHN6ID0gY29uZmlnLmNvdW50ICogc2l6ZW9mKHUxNik7XG4rXHRpZiAoSVNfRVJSKHN0cykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHN0cyk7XG4rXG4rXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF91bmxvY2tfbWVtb3J5O1xuK1xuK1x0aWYgKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUocGRldikgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbitcdFx0Z290byB1cGRhdGVfc2hhZG93O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLmNvdW50OyBpKyspIHtcbitcdFx0aWR4ID0gY29uZmlnLmluZGV4ICsgaTtcbitcdFx0cmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGlkeCwgc3RzW2ldKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJvbGxiYWNrO1xuK1x0fVxuK1xuK3VwZGF0ZV9zaGFkb3c6XG4rXHRtZW1jcHkoXHUwMDI2dmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93W2NvbmZpZy5pbmRleF0sIHN0cywgc3opO1xuK1x0cmV0ID0gMDtcbitcdGdvdG8gb3V0X3VubG9ja19tZW1vcnk7XG4rXG4rcm9sbGJhY2s6XG4rXHR3aGlsZSAoaS0tIFx1MDAzZSAwKSB7XG4rXHRcdGlkeCA9IGNvbmZpZy5pbmRleCArIGk7XG4rXHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tpZHhdKTtcbitcdH1cbitcbitvdXRfdW5sb2NrX21lbW9yeTpcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1xuK1x0a2ZyZWUoc3RzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTU3Miw2ICsxNzIwLDExIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUodmRldiwgZmxhZ3MsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcodmRldiwgZmxhZ3MsXG4rXHRcdFx0XHRcdFx0XHQgICBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuQEAgLTI2MTUsMTEgKzI3NjgsMTMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldClcbiB9XG4gXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMoYm9vbCBpc19ub2ludHhtYXNrLCBib29sIGlzX2Rpc2FibGVfdmdhLFxuLVx0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzKVxuK1x0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxuK1x0XHRcdCAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpXG4ge1xuIFx0bm9pbnR4bWFzayA9IGlzX25vaW50eG1hc2s7XG4gXHRkaXNhYmxlX3ZnYSA9IGlzX2Rpc2FibGVfdmdhO1xuIFx0ZGlzYWJsZV9pZGxlX2QzID0gaXNfZGlzYWJsZV9pZGxlX2QzO1xuK1x0ZW5hYmxlX3Vuc2FmZV90cGggPSBpc19lbmFibGVfdW5zYWZlX3RwaDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uNTkxN2EwNjk0YzFkNjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC04LDYgKzgsNyBAQFxuICAqL1xuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuIFxuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuQEAgLTI2LDEwICsyNywxNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4rYm9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG5AQCAtMzgsOSArNDUsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbitcdFx0XHRcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0Ym9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXG4rXHRcdFx0XHRcdCAgIGJvb2wgZXh0ZW5kZWQpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIDA7IH1cbitzdGF0aWMgaW5saW5lIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuK3sgcmV0dXJuIGZhbHNlOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCAyYzQ0NTQ1ODNjMTE1Yi4uMjg1YzBmMDA4ODJlMGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtNDcxLDcgKzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OSw3ICs1ODgsMTAgQEAgc3RydWN0IHBjaV9kZXYge1xuIFx0dTggcmVzZXRfbWV0aG9kc1tQQ0lfTlVNX1JFU0VUX01FVEhPRFNdOyAvKiBJbiBwcmlvcml0eSBvcmRlciAqL1xuIFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcbi1cdHUxNlx0XHR0cGhfY2FwO1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4rXHR1MTZcdFx0dHBoX2NhcDoxNDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuK1x0dTE2XHRcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxuK1x0XHRcdFx0XHQgICAgKiByZXF1ZXN0ZXIgaXMgc3VwcG9ydGVkICovXG4rXHR1MTZcdFx0dHBoX2VuYWJsZWQ6MTtcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDVmYzZjZTRkZDc4NjE2Li41MjdjODRmMDQyYWE2ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuQEAgLTEyOCw2ICsxMjgsNyBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4gXHRib29sXHRcdFx0c3Jpb3ZfYWN0aXZlO1xuK1x0Ym9vbFx0XHRcdHRwaF9wZXJtaXQ7XG4gXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXHQqcGNpX3NhdmVkX3N0YXRlO1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBtX3NhdmU7XG4gXHRpbnRcdFx0XHRpb2V2ZW50ZmRzX25yO1xuQEAgLTE0Myw2ICsxNDQsOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRuYjtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdG1lbW9yeV9sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZG1hYnVmcztcbitcdHUxNlx0XHRcdCp0cGhfc3Rfc2hhZG93O1xuK1x0dTE2XHRcdFx0dHBoX3N0X2VudHJpZXM7XG4gfTtcbiBcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcbkBAIC0xNTgsNyArMTYxLDggQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdmZpb19wY2lfcmVnb3BzICpvcHMsXG4gXHRcdFx0XHQgICAgICBzaXplX3Qgc2l6ZSwgdTMyIGZsYWdzLCB2b2lkICpkYXRhKTtcbiB2b2lkIHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhib29sIG5vaW50eG1hc2ssIGJvb2wgaXNfZGlzYWJsZV92Z2EsXG4tXHRcdFx0ICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMpO1xuK1x0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxuK1x0XHRcdCAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpO1xuIHZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuIGludCB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2NvcmVfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxuaW5kZXggNGYxNTAwMjg5NjVkOGIuLjVjNGVhNDRkNjZkMjA2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcGNpLmhcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2RlZmluZSBfVUFQSUxJTlVYX1BDSV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVx0LyogVGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhlIFBDSSBpbnRlcmZhY2UgdHJlYXRzIG11bHRpLWZ1bmN0aW9uIGRldmljZXMgYXMgaW5kZXBlbmRlbnRcbkBAIC00Niw0ICs0NywxOSBAQCBlbnVtIHBjaV9ob3RwbHVnX2V2ZW50IHtcbiBcdFBDSV9IT1RQTFVHX0NBUkRfTk9UX1BSRVNFTlQsXG4gfTtcbiBcbisvKlxuKyAqIFBDSWUgVFBIIHN5c2ZzIGJpbmFyeSBlbnRyeSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmdcbisgKiBTeXNmcyBmaWxlOiAvc3lzL2J1cy9wY2kvZGV2aWNlcy9cdTAwM2NCREZcdTAwM2UvdHBoX2NwdV9zdFxuKyAqIEVhY2ggZW50cnkgaXMgOCBieXRlcyBhbGlnbmVkLCBzZWVrIG9mZnNldCA9IGNwdV9pZCAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaXG4rICovXG4rc3RydWN0IHBjaV90cGhfY3B1X3N0IHtcbitcdF9fdTggIHZtX3N0OyAgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IFN0ZWVyaW5nIFRhZyAoMSBieXRlKSAqL1xuK1x0X191OCAgcG1fc3Q7ICAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBTdGVlcmluZyBUYWcgKDEgYnl0ZSkgKi9cbitcdF9fdTE2IHZtX3hzdDsgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IEV4dGVuZGVkIFN0ZWVyaW5nIFRhZyAoMiBieXRlcykgKi9cbitcdF9fdTE2IHBtX3hzdDsgICAgICAgLyogUGVyc2lzdGVudCBNZW1vcnkgRXh0ZW5kZWQgU3RlZXJpbmcgVGFnICgyIGJ5dGVzKSAqL1xuK1x0X191MTYgcmVzZXJ2ZWQ7ICAgICAvKiBQYWRkaW5nIHRvIDggYnl0ZXMgZm9yIGFsaWduZWQgb2Zmc2V0IGxvb2t1cCAqL1xuK30gX19wYWNrZWQ7XG4rXG4rI2RlZmluZSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWiBzaXplb2Yoc3RydWN0IHBjaV90cGhfY3B1X3N0KVxuK1xuICNlbmRpZiAvKiBfVUFQSUxJTlVYX1BDSV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi42MTA3OTU5NGE5MWY1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbkBAIC0xNTM0LDYgKzE1MzQsMzUgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbisvKlxuKyAqIERldmljZS1sZXZlbCBvcHQtaW4gZm9yIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydC5cbisgKiBXaGVuIHNldCwgYWxsb3dzIGFjY2VzcyB0byBUUEhfQ1BVX1NUIGFuZCBUUEhfU1RfQ09ORklHIGZlYXR1cmVzLlxuKyAqIFJlcXVpcmVzIGdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIGVuYWJsZWQuXG4rICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEVcdDEzXG4rXG4rLyoqXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHIC0gQ29uZmlndXJlIFBDSWUgVFBIIFN0ZWVyaW5nIFRhZyBlbnRyaWVzXG4rICpcbisgKiBQcm92aWRlcyB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBQQ0llIFRQSCBTVCB0YWJsZSBlbnRyaWVzLlxuKyAqXG4rICogQGluZGV4OiBTdGFydCBlbnRyeSBvZmZzZXQgd2l0aGluIFNUIHRhYmxlXG4rICogQGNvdW50OiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZW50cmllcyB0byBjb25maWd1cmVcbisgKiBAZGF0YV91cHRyOiBVc2Vyc3BhY2UgZGF0YSBidWZmZXIgZm9yIDE2LWJpdCByYXcgU1QgdmFsdWVzXG4rICpcbisgKiBUaGlzIGZlYXR1cmUgcmVxdWlyZXMgdHdvIHByZWNvbmRpdGlvbnM6XG4rICogMS4gR2xvYmFsIGVuYWJsZV91bnNhZmVfdHBoIG1vZHVsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZDtcbisgKiAyLiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEUgaGFzIGJlZW4gU0VUIG9uIHRoZSBkZXZpY2UgYmVmb3JlaGFuZC5cbisgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJR1x0MTRcbitcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIHtcbitcdF9fdTE2IGluZGV4O1xuK1x0X191MTYgY291bnQ7XG4rXHRfX3UzMiByZXNlcnZlZDsgLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVybyAqL1xuK1x0X19hbGlnbmVkX3U2NCBkYXRhX3VwdHI7XG4rfTtcbitcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE0OjQ0LjA0NTkwNzYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMzOTExMTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQQ0llIFRQSCBWRklPIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBQQ0llIFRQSCBzdXBwb3J0IHdpdGhpbiBWRklPLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGBkcml2ZXJzL3BjaS90cGguY2Agd2hpY2ggbm93IGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgZm9yIHJldHJpZXZpbmcgQ1BVIFNUIGluZm9ybWF0aW9uLCBleHBsaWNpdGx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBUUEgsIGFuZCBleHBvc2VzIHRoaXMgaW5mb3JtYXRpb24gdmlhIHRoZSBgdHBoX2NwdV9zdGAgc3lzZnMgYXR0cmlidXRlLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIGluIHRoZSBWRklPIFBDSSBjb2RlOiBgdmZpb19wY2kuY2AsIGB2ZmlvX3BjaV9jb25maWcuY2AsIGFuZCBgdmZpb19wY2lfY29yZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgVFBIIHN1cHBvcnQgaXMgYmVpbmcgaW50ZWdyYXRlZCwgYW5kIGl0J3MgY29udHJvbGxlZCBieSBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBlbmFibGVfdW5zYWZlX3RwaGAuIFRoaXMgcGFyYW1ldGVyIGZsYWdzIGEgcG90ZW50aWFsIHJpc2sgd2l0aCBlbmFibGluZyB0aGlzIGJlaGF2aW9yLCBzbyBpdCBpcyBuZWNlc3NhcnkgdG8gY29uc2lkZXIgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoaXMgc3VwcG9ydC4gTm93LCB0aGV5J3ZlIGFsc28gYWRkZWQgdGhlc2UgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzOiBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFYCBhbmQgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJR2AuIFRoYXQncyBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gZXhwb3NlIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB0aGUgdXNlciBzcGFjZS5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgYWxsIHBsYXkgb3V0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VPyBPYnZpb3VzbHksIFZGSU8gUENJIGlzIG9ubHkgcmVhY2hhYmxlIGlmIHlvdSBoYXZlIGEgUENJIGRldmljZSBwYXNzZWQgdGhyb3VnaCBkaXJlY3RseS4gQWx0ZXJuYXRpdmVseSwgaWYgYSB1c2VyIG1ha2VzIHVzZSBvZiBgdmZpby1wY2lgIHdpdGggYSBkdW1teSBkZXZpY2UsIG9yIGEgdmlydHVhbCBkZXZpY2UsIHlvdSBjb3VsZCB0ZXN0IHRoZSBjaGFuZ2VzLlxuXG5Ib2xkIG9uLCB0aGlzIGBlbmFibGVfdW5zYWZlX3RwaGAgcGFyYW1ldGVyIGlzIHNwZWNpZmljIHRvIGB2ZmlvX3BjaWAuIFRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbk9rYXksIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseS4gQXJlIHdlIGV2ZW4gYnVpbGRpbmcgdGhpcyBzdHVmZiBpbnRvIG91ciBmdXp6aW5nIGtlcm5lbHM/IEZpcnN0LCBpcyBgQ09ORklHX1BDSUVfVFBIYCBldmVuIGVuYWJsZWQ/IExldCdzIHZlcmlmeSB0aGF0LiBXYWl0LCB0aGF0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbm90IGEgbW9kdWxlLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZGlyZWN0bHkuIE5leHQsIEkgc2hvdWxkIGNoZWNrIHRoYXQgYENPTkZJR19WRklPX1BDSWAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBhcyB0aGF0J3MgdGhlIGNvcmUgZGVwZW5kZW5jeS4gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzIGFuZCBydW4gc29tZSBxdWljayBjb25maWcgY2hlY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE0OjUxLjM4NTAyMTI5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY2MDIxMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lFX1RQSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJUTFAgUHJvY2Vzc2luZyBIaW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTQ6NTMuODUxMDQ4NzczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0NDk4NDYxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gYENPTkZJR19QQ0lFX1RQSGAsIHRoYXQncyBkZWZpbml0ZWx5IGEgbGVnaXRpbWF0ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbid0IGl0PyBHb29kLiBJIGp1c3Qgd2FudCB0byBxdWlja2x5IHZlcmlmeSBpdHMgY29udGV4dCBiZWZvcmUgbW92aW5nIG9uLiBOb3csIGxldCBtZSBzZWUuLi4gSSdtIHJlYWxseSBjdXJpb3VzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgQ09ORklHX1ZGSU9fUENJYC4gSSB3YW50IHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmN5IG9yIHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiB0aGUgdHdvLiBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBoZXJlPyBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmU/IERvZXMgb25lIGltcGxpY2l0bHkgcmVxdWlyZSB0aGUgb3RoZXI/IEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBJT01NVSBjb25maWd1cmF0aW9uIGFuZCBkZXZpY2UgcGFzc3Rocm91Z2ggc2NlbmFyaW9zLiBMZXQncyBkaWcgaW4gYSBiaXQgZnVydGhlciB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3QsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMxNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjIyLjMwMDg5NjU4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMzOTM0NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNToyNC41MzQ4NDIzNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAwMzc3NDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBOZXcgVkZJTyBJT0NUTHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRWAgYW5kIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUdgIGlvY3Rscy4gVGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYCBmdW5jdGlvbiwgYW5kIGNydWNpYWxseSwgdGhleSBkZXBlbmQgb24gdGhlIGBlbmFibGVfdW5zYWZlX3RwaGAgbW9kdWxlIHBhcmFtZXRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiBzeXprYWxsZXIgZWFzaWx5IHJlYWNoIHRoaXMgbmV3IGNvZGU/XCIgVHlwaWNhbGx5LCBtb2R1bGUgcGFyYW1ldGVycyBpbiBzeXprYWxsZXIgcmVxdWlyZSBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCB3aGljaCBhZGRzIG92ZXJoZWFkLiBXZSBjb3VsZCB0cnkgc3lzZnMgYnV0IGl0IGlzIG5vdCBleHBvc2VkIHRoaXMgd2F5LCBzbyBpdCBpcyB1bmxpa2VseS5cblxuQnV0LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwcm9tcHQgcmVtaW5kcyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGNvbmNlcm5zIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEhvd2V2ZXIsIFZGSU8gUENJIF9pc18gcmVhY2hhYmxlIGluIFFFTVUsIHJpZ2h0PyBTeXprYWxsZXIgaGFzIHRoZSBwcmltaXRpdmVzIHRvIGRvIHRoYXQgd2l0aCBgc3l6X2t2bV9zZXR1cF9jcHVgIGFuZCBzbyBvbiwgYW5kIEkga25vdyBpdCBoYXMgZnV6emluZyBjYXBhYmlsaXRpZXMgZm9yIGB2ZmlvYC4gSW4gZmFjdCwgaXQgaGFzICpkZXNjcmlwdGlvbnMqIGZvciBgdmZpb2AuXG5cblRoZXJlZm9yZSwgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBgdmZpb19wY2lgIGl0c2VsZiBpcyBiZWluZyBhY3RpdmVseSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBJZiBpdCBpcywgYW5kIHRoZXNlIG5ldyBpb2N0bHMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgZXhpc3RpbmcgVkZJTyBmdXp6aW5nIHN0cmF0ZWd5LCB0aGF0IGFkZHMgc2lnbmlmaWNhbnQgdmFsdWUuIElmIGl0IGlzbid0LCB0aGUgZWZmb3J0IHdvdWxkIGJlIHdvcnRoIG1vcmUgZGlzY3Vzc2lvbiwgYXMgdGhlIGxpa2VsaWhvb2Qgb2YgaGl0dGluZyB0aGlzIGNvZGUgcGF0aCBkZWNyZWFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDczLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjM2LjUzODYxOTQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzA0NDc5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTU4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9taWdybl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1ODgtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaGlzaV9hY2NfdmZpb19pb2N0bF9nZXRfcmVnaW9uLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTU4OTpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTkwLVxcdC5yZWFkID0gaGlzaV9hY2NfdmZpb19wY2lfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTYwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MDktXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTYxMDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjExLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDItXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaXNtX3ZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM6MzQzOlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQ0LVxcdC5yZWFkID0gaXNtX3ZmaW9fcGNpX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTEzODY9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbWx4NXZmX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzOTMtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6MTM5NDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzk1LVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3MS1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBudmdyYWNlX2dwdV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA3MjpcXHQuZGV2aWNlX2ZlYXR1cmVcXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDczLVxcdC5yZWFkXFx0XFx0PSBudmdyYWNlX2dwdV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfY29yZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk2LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMDk3OlxcdC5kZXZpY2VfZmVhdHVyZVxcdD0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwOTgtXFx0LnJlYWRcXHRcXHQ9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM9MTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHBkc192ZmlvX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTk4LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jOjE5OTpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYy0yMDAtXFx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNDEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYzoxNDI6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNDMtXFx0LnJlYWRcXHRcXHQ9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MzQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyhcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3MDQtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTcwNTppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNi1cXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzMxLX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNzMyOkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTczMy1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9sbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo5MjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkzLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV90cmFuX2xtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTMtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmlydGlvdmZfcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTE0OlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTE1LVxcdC5yZWFkID0gdmlydGlvdmZfcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNS1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjEzNjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNy1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTUyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB4ZV92ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MjktXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjUzMDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTMxLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTc0PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzUtXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjE3NjppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc3LVxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjM4LjQ2OTA3MzE3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MzE0MjA2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBDSWUgVFBIIENvZGUgUGF0aCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgcmVhY2hhYmxlLiBCdXQgdGhlcmUncyB0aGlzIGBlbmFibGVfdW5zYWZlX3RwaGAgbW9kdWxlIHBhcmFtZXRlciB0aGF0J3MgdGhlIGdhdGVrZWVwZXIuIEJ5IGRlZmF1bHQsIGl0J3MgYGZhbHNlYCwgd2hpY2ggaXMgYSBwcm9ibGVtLiBTeXprYWxsZXIgY2FuJ3QgZWFzaWx5IGVuYWJsZSBtb2R1bGUgcGFyYW1ldGVycyB1bmxlc3MgdGhleSdyZSBpbiB0aGUgY29uZmlnIG9yIHdyaXRhYmxlIHZpYSBzeXNmcywgYW5kIHRoaXMgb25lIGlzIHJlYWQtb25seS4gV2UncmUgZXZhbHVhdGluZyBpZiB0aGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCAqc2hvdWxkKiBiZSBmdXp6ZWQsIGFuZCB0aGlzIGxvb2tzIHRyaWNreS4gSWYgaXQgcmVxdWlyZXMgYSBtb2R1bGUgcGFyYW1ldGVyLCB3ZSBzaG91bGQgcHJvYmFibHkgbWVudGlvbiBpdCBpbiB0aGUgcmVhc29uaW5nLlxuXG5UaGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgZGlzYWJsZWQsIHRoZSBjb2RlIGlzIGluZGVlZCB1bnJlYWNoYWJsZS4gQnV0IGlmIHdlICp3YW50ZWQqIHRvIGZ1enogaXQsIHdlJ2QgbmVlZCB0byBlbmFibGUgdGhhdCBwYXJhbWV0ZXIgc29tZWhvdy4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGRpcmVjdCB3YXkgdG8gZG8gdGhhdCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIHRoZXJlJ3MgYSBzeXNmcyBhdHRyaWJ1dGUsIGB0cGhfY3B1X3N0YCwgYWRkZWQgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYC4gSXQncyBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB3aXRoIFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgQUNQSSBEU00gc3VwcG9ydC4gSW4gUUVNVSwgZG9lcyB0aGUgUENJZSBSb290IFBvcnQgc3VwcG9ydCB0aGlzPyBJdCBtaWdodCBub3QuIEV2ZW4gaWYgaXQgZGlkLCB0aGUgYHRwaF9jcHVfc3RfYXR0cl9pc192aXNpYmxlYCBmdW5jdGlvbiBjaGVja3MgZm9yIHRoZSBUUEggQ29tcGxldGVyIGNhcGFiaWxpdHkgYW5kIEFDUEkgRFNNIHN1cHBvcnQuIElmIFFFTVUgZG9lc24ndCBoYXZlIHRoYXQsIHRoZSBzeXNmcyBmaWxlIHdvbid0IGJlIHZpc2libGUuXG5cbkxvb2tpbmcgYXQgdGhlIFZGSU8gUENJIHBhcnQsIGlmIGBlbmFibGVfdW5zYWZlX3RwaGAgaXMgZmFsc2UsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZWAgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0IG1lYW5zIHRoZSBpb2N0bCB3aWxsIGp1c3QgcmV0dXJuIGFuIGVycm9yLiBJbiBgdmZpb19wY2lfY29uZmlnLmNgLCBgdmRldi1cdTAwM2V0cGhfcGVybWl0YCBpcyBvbmx5IHNldCBpbiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGVgLCB3aGljaCByZXF1aXJlcyB0aGUgbW9kdWxlIHBhcmFtZXRlci4gU28sIGFsbCB0aGUgVkZJTyBUUEggY29kZSBwYXRocyBhcmUgZ2F0ZWQuXG5cblNpbmNlIGBlbmFibGVfdW5zYWZlX3RwaGAgaXMgcmVhZC1vbmx5IGFuZCBkZWZhdWx0cyB0byBmYWxzZSwgaXQgY2FuJ3QgYmUgZW5hYmxlZCBhdCBydW50aW1lLiBTeXprYWxsZXIgY2FuIHBhc3MgYm9vdCBwYXJhbWV0ZXJzLCBidXQgbm90IGluIHRoaXMgYHNldC1yZXN1bHRzYCBzaXR1YXRpb24uIEkgY2FuJ3QgZXZlbiB0ZWxsIFN5emthbGxlciB0byBwYXNzIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYC5cblxuSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBhIGRpc2FibGVkLWJ5LWRlZmF1bHQgbW9kdWxlIHBhcmFtZXRlciwgaXMgaXQgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCI/IFllcywgcHJldHR5IG11Y2gsIHVubGVzcyB0aGF0IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuIEJ1dCB3YWl0LCBgQ09ORklHX1BDSUVfVFBIYCBpcyBhIGNvbmZpZyBvcHRpb24sIHdlIGNhbiBlbmFibGUgaXQuLi4gaXMgaXQgc3RpbGwgd29ydGggZnV6emluZyB0aGVuPyBZZXMsIGJ1dCBvbmx5IGlmIHdlIGNhbiBmaW5kIGEgd2F5IHRvIHNwZWNpZnkgdGhlIHBhcmFtLlxuXG5XaGF0IGlmIGB2ZmlvX3BjaWAgaXMgYnVpbHQtaW4/IFRoZW4gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBjYW4gYmUgcGFzc2VkLi4uIElmIGl0J3MgYSBtb2R1bGUsIGl0J3MgYSBtb2R1bGUgcGFyYW1ldGVyLiBTaW5jZSB3ZSBjYW4ndCBzcGVjaWZ5IGEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgaGVyZSwgaXQncyBhIGJpdCBvZiBhIGRpbGVtbWEuXG5cblN5emthbGxlciBkb2VzIGhhdmUgYGtlcm5lbF9jbWRsaW5lYCBpbiBpdHMgY29uZmlnLCBidXQgd2UgY2FuJ3Qgc2V0IHRoYXQgaGVyZS4gVGhlIHByb21wdCBpcyBzdGlsbCByZWxldmFudCB0aG91Z2g6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoXCIuIFdpdGhvdXQgdGhhdCBwYXJhbWV0ZXIsIGl0ICppcyogdW5yZWFjaGFibGUsIGJ1dCB3ZSBjb3VsZCB0cnkgb3RoZXIgbWV0aG9kcy5cblxuTWF5YmUgd2Ugc2hvdWxkIHNheSBpdCdzIGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGxldCB0aGUgc3l6a2FsbGVyIG1haW50YWluZXJzIGZpZ3VyZSBpdCBvdXQ/XG5cbldhaXQsIHdoYXQgYWJvdXQgdGhlIGV4cG9ydGVkIHN5bWJvbHM6IGBwY2llX3RwaF9nZXRfY3B1X3N0YCwgYHBjaWVfdHBoX3NldF9zdF9lbnRyeWAsIGBwY2llX2Rpc2FibGVfdHBoYCwgYHBjaWVfZW5hYmxlX3RwaGAuIEFyZSB0aGV5IHVzZWQgYnkgYW55IG90aGVyIGRyaXZlcnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjMyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNTo1Ny43ODMyODI3NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjM4MjI5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpZV9lbmFibGVfdHBoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NDg9VG8gZW5hYmxlIFRQSCBmb3IgYSBkZXZpY2UsIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOjpcXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0LTQ5LVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q6NTA6ICBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC01MS1cXG4tLVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NTM9Q3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3QtNTgtXFxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdDo1OTpgcGNpZV9lbmFibGVfdHBoKClgIGNoZWNrcyB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcyBhY3R1YWxseVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3QtNjAtc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nLiBUaGUgZGV2aWNlIGRyaXZlciBjYW4gZmlndXJlIG91dFxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NjE9d2hpY2ggVFBIIG1vZGUgaXMgc3VwcG9ydGVkIGFuZCBjYW4gYmUgcHJvcGVybHkgZW5hYmxlZCBiYXNlZCBvbiB0aGVcXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0OjYyOnJldHVybiB2YWx1ZSBvZiBgcGNpZV9lbmFibGVfdHBoKClgLlxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3QtNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xMTg0Mj1zdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTE4NTgtXFx0LyogRW5hYmxlIFRQSCBzdXBwb3J0IGFzIHBhcnQgb2YgSVJRIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxMTg1OTpcXHRyYyA9IHBjaWVfZW5hYmxlX3RwaChicC1cXHUwMDNlcGRldiwgUENJX1RQSF9TVF9JVl9NT0RFKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xMTg2MC1cXHRpZiAoIXJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jPTI1PXN0cnVjdCBtbHg1X3N0ICptbHg1X3N0X2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU3LVxcdC8qIFRoZSBPUyBkb2Vzbid0IHN1cHBvcnQgU1QgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmM6NTg6XFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoKHBkZXYsIFBDSV9UUEhfU1RfRFNfTU9ERSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYz00NDU9c3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy00ODgtLyoqXFxuZHJpdmVycy9wY2kvdHBoLmM6NDg5OiAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxcbmRyaXZlcnMvcGNpL3RwaC5jLTQ5MC0gKiBAcGRldjogUENJIGRldmljZVxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNTAzLSAqL1xcbmRyaXZlcnMvcGNpL3RwaC5jOjUwNDppbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG5kcml2ZXJzL3BjaS90cGguYy01MDUte1xcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNTA5LX1cXG5kcml2ZXJzL3BjaS90cGguYzo1MTA6RVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xcbmRyaXZlcnMvcGNpL3RwaC5jLTUxMS1cXG5kcml2ZXJzL3BjaS90cGguYy01MTItLyoqXFxuZHJpdmVycy9wY2kvdHBoLmM6NTEzOiAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTUxNy0gKlxcbmRyaXZlcnMvcGNpL3RwaC5jOjUxODogKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE5LSAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy01MjMtICovXFxuZHJpdmVycy9wY2kvdHBoLmM6NTI0OmludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKVxcbmRyaXZlcnMvcGNpL3RwaC5jLTUyNS17XFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy01MjktfVxcbmRyaXZlcnMvcGNpL3RwaC5jOjUzMDpFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7XFxuZHJpdmVycy9wY2kvdHBoLmMtNTMxLVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYz0xMTMwPXN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTE3OS1cXHRcXHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjExODA6XFx0XFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExODEtXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdykge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9MzM9dm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDozNDppbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6MzU6aW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpO1xcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTM2LXU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9NTQ9c3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjU1OnN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTYteyByZXR1cm4gLUVJTlZBTDsgfVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjU3OnN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTgtXFx0XFx0XFx0XFx0XFx0ICAgYm9vbCBleHRlbmRlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTU6NTkuODQ3MTEyNDI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzc2NjAzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFRQSCBQYXRjaCBhbmQgUmVhY2hhYmlsaXR5IGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQncyBhY3R1YWxseSByZWFjaGFibGUgYnkgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCBjb2RlIG1vZGlmaWNhdGlvbnMgc2VlbSBzdHJhaWdodGZvcndhcmQg4oCTIGNoYW5nZXMgdG8gYHRwaC5jYCwgYHZmaW9fcGNpX2NvbmZpZy5jYCwgYW5kIGB2ZmlvX3BjaV9jb3JlLmNgLCBwbHVzIHRoZSBhZGRpdGlvbiBvZiBzb21lIG5ldyBmdW5jdGlvbnMgKGBwY2llX2VuYWJsZV90cGhfZXhwbGljaXRgLCBldGMuKSBhbmQgYSBzeXNmcyBhdHRyaWJ1dGUgKGB0cGhfY3B1X3N0YCkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCBcIldoZXJlIGRvZXMgdGhpcyBhY3R1YWxseSAqcnVuKj9cIiBUaGUgcGF0Y2ggbWVudGlvbnMgYGJueHRgIGFuZCBgbWx4NWAsIGJ1dCB0aG9zZSBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgc28gcHJvYmFibHkgbm90IHN5emthbGxlcidzIHVzdWFsIHBsYXlncm91bmQuXG5cblRoZSBWRklPIGNvZGUgaXMgYSBiaWcgcXVlc3Rpb24gbWFyay4gSXQgbG9va3MgbGlrZSBpdCdzICptb3N0bHkqIHVucmVhY2hhYmxlIHVubGVzcyBgZW5hYmxlX3Vuc2FmZV90cGhgIGlzIHNldC4gVGhlIGAtRU9QTk9UU1VQUGAgcmV0dXJucywgdGhlIGB2ZGV2LVx1MDAzZXRwaF9wZXJtaXRgIGNoZWNrLi4uIGl0IGFsbCBwb2ludHMgdG8gdGhhdCBiZWluZyB0aGUgZ2F0ZWtlZXBlci4gQW5kIHRoZSBzeXNmcyBhdHRyaWJ1dGU/IFRoYXQgaGFzIG11bHRpcGxlIGNoZWNrczogd2hldGhlciB0aGUgZGV2aWNlIGlzIGEgUm9vdCBQb3J0LCBpZiBpdCBzdXBwb3J0cyBUUEggQ29tcGxldGVyLCBhbmQgd2hldGhlciB0aGUgQUNQSSBEU00gaXMgcHJlc2VudC4gUUVNVSBhbmQgR0NFIG9mdGVuIGhhdmUgbGltaXRlZCBjYXBhYmlsaXRpZXMgaW4gdGhlc2UgYXJlYXMuXG5cbk5vdywgbGV0J3MgYnJlYWsgdGhpcyBkb3duOlxuXG4qICAgKipWRklPOioqIFZpcnR1YWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IGEgbW9kdWxlIHBhcmFtZXRlci5cbiogICAqKlN5c2ZzIGF0dHJpYnV0ZToqKiBQcm9iYWJseSB1bnJlYWNoYWJsZSBiZWNhdXNlIHN5emthbGxlciBjYW4ndCBpbmplY3QgQUNQSSBEU01zLlxuKiAgICoqT3RoZXIgZnVuY3Rpb25zOioqIFRoZSBgcGNpX3RwaF9pbml0YCBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGluamVjdCB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGlzIGNvZGUgcmVhZHMgc29tZSBjb25maWcgc3BhY2UgYW5kIHNldHMgYSBmZXcgYml0cywgYnV0IG5vIHJlYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlIGlzIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCwgYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAgdGhhdCBjYW4gYmUgcmVhY2hlZCBpZiBgdmZpb19wY2lgIGlzIHVzZWQuXG4qICAgKipNb2RpZmllZCBgcGNpZV9lbmFibGVfdHBoYDoqKiBSZWFjaGVkIGlmIHRoZSBgYm54dGAgb3IgYG1seDVgIGRyaXZlcnMgYXJlIGxvYWRlZCwgYnV0IHVubGlrZWx5IGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcyAqbmV3KiBWRklPIGZ1bmN0aW9uYWxpdHkuIEV2ZW4gdGhvdWdoIGl0J3MgZ2F0ZWQgYnkgYGVuYWJsZV91bnNhZmVfdHBoYCwgdGhpcyBpcyBhIHZhbGlkIGZlYXR1cmUuXG5cblRoZXJlZm9yZSwgZGVzcGl0ZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgdGhlIGRpZmZpY3VsdHkgaW4gcmVhY2hpbmcgaXQgKmRpcmVjdGx5KiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBJIHNob3VsZCBjb25zaWRlciB0aGUgcGF0Y2gncyBmdW5jdGlvbmFsaXR5IGFuZCBtYXJrIGl0IGFzIGZ1enplci13b3J0aHkuIFRoZSByZWFzb25pbmcgd291bGQgYmUgdGhhdCB0aGlzIHBhdGNoIGFkZHMgVFBIIHN1cHBvcnQgdG8gVkZJTyBQQ0kuIEl0IGlzIGdhdGVkIGJ5IHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGhgIG1vZHVsZSBwYXJhbWV0ZXIsIHdoaWNoIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzQ1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjozMC42MjM3MTgzMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTc5MTQwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSUVfVFBIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk2LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjozMi43MjE2Mzc5MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg0OTk5MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gc29tZSBQQ0kgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgd2l0aCBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTk3LiBUaGlzIGxpa2VseSBjZW50ZXJzIG9uIGEgZ3JvdXAgb2YgcmVsYXRlZCBvcHRpb25zLCBwcm9iYWJseSB3aXRoaW4gYSBkZWZpbmVkIFwibWVudVwiIG9yIGJsb2NrLCBnaXZlbiB0aGUgYEtjb25maWdgIGZpbGUgc3RydWN0dXJlLiBJJ20gZ3Vlc3NpbmcgdGhhdCBsaW5lIG51bWJlciBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgZm9yIGEgcGFydGljdWxhciBzZXQgb2YgZmVhdHVyZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBjZXJ0YWluIFBDSS1yZWxhdGVkIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBwb3NzaWJseSBkZXBlbmRlbnQgb24gaGFyZHdhcmUsIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucywgb3Igc3BlY2lmaWMgdXNlLWNhc2VzLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCBwaWN0dXJlIG9mIHRob3NlIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgc29tZSBoZWxwIHRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6NDAuNTcxNjM0MjM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcGNpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdCAgdG8gYWNjZXNzIG1vcmUgdGhhbiBvbmUgSU8gYWRkcmVzcyBzcGFjZSBhdCB0aGUgc2FtZSB0aW1lLiBUbyBtYWtlXFxuIDE5MTpcXHRcXHQgIHVzZSBvZiB0aGlzIGZlYXR1cmUgYW4gSU9NTVUgaXMgcmVxdWlyZWQgd2hpY2ggYWxzbyBzdXBwb3J0cyBQQVNJRHMuXFxuIDE5MjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBzdWNoIGFuIElPTU1VIGFuZCB3YW50IHRvIGNvbXBpbGUgdGhlXFxuIDE5MzpcXHRcXHQgIGRyaXZlciBmb3IgaXQgaW50byB5b3VyIGtlcm5lbC5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxOTY6XFx0XFxuIDE5NzpcXHRjb25maWcgUENJRV9UUEhcXG4gMTk4OlxcdFxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcbiAxOTk6XFx0XFx0aGVscFxcbiAyMDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuXFxuIDIwMTpcXHRcXHQgIFRQSCBhbGxvd3MgZW5kcG9pbnQgZGV2aWNlcyB0byBwcm92aWRlIG9wdGltaXphdGlvbiBoaW50cywgc3VjaCBhc1xcbiAyMDI6XFx0XFx0ICBkZXNpcmVkIGNhY2hpbmcgYmVoYXZpb3IsIGZvciByZXF1ZXN0cyB0aGF0IHRhcmdldCBtZW1vcnkgc3BhY2UuXFxuIDIwMzpcXHRcXHQgIFRoZXNlIGhpbnRzLCBjYWxsZWQgU3RlZXJpbmcgVGFncywgY2FuIGVtcG93ZXIgdGhlIHN5c3RlbSBoYXJkd2FyZVxcbiAyMDQ6XFx0XFx0ICB0byBvcHRpbWl6ZSB0aGUgdXRpbGl6YXRpb24gb2YgcGxhdGZvcm0gcmVzb3VyY2VzLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgUENJX1AyUERNQVxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbiAyMDk6XFx0XFx0I1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjo0MC41NzE3MDc5MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM2NjMxNzc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJZSBUUEggYW5kIFZGSU8gUENJIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYFBDSUVfVFBIYCBtaWdodCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LCBzbyB3ZSBkZWZpbml0ZWx5IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIHNob3VsZCBhbHNvIGVuc3VyZSBgVkZJT19QQ0lgIGlzIGVuYWJsZWQsIGFsdGhvdWdoIHRoYXQncyBsaWtlbHkgYWxyZWFkeSB0aGUgY2FzZSBpbiBzeXprYWxsZXIgY29uZmlncy4gSXQgYXBwZWFycyB0aGUgcHJvbXB0IHdhbnRzIHVzIHRvIGZvY3VzIG9uIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLCBzbyBgUENJRV9UUEhgIGlzIHRoZSBrZXkuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgdGhlIG9uZXMgd2Ugd2FudCBzeXprYWxsZXIgdG8gdGFyZ2V0PyBMZXQncyB6b29tIGluIG9uIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jYCwgYW5kIGBkcml2ZXJzL3BjaS90cGguY2Agc2luY2UgdGhlc2UgYXJlIHRoZSBtYWluIGNoYW5nZXMuIFdlIHNob3VsZCBwcmlvcml0aXplIGZ1bmN0aW9ucyBpbiB0aGUgVkZJTyBzcGFjZSBhcyB0aGVzZSBhcmUgd2hhdCB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGgsIHNvIHRob3NlIGFyZSBrZXkuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nOlxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZWBcbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWdgXG4qICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWBcbiogICBgdmZpb19wY2lfdHBoX2luaXRgXG4qICAgYHBjaV90cGhfaW5pdGBcbiogICBgdHBoX2NwdV9zdF9yZWFkYFxuKiAgIGBlbmFibGVfdHBoYFxuXG5XZSB3YW50IGB0cGhfY3B1X3N0X3JlYWRgIHRvIGJlIHZpc2libGUsIHNvIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBlZGdlIGNhc2UuIEV2ZW4gaWYgaXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGB0cGhfZHNtX3N1cHBvcnRlZGAgYmVpbmcgZmFsc2UsIGl0IG1pZ2h0IHN0aWxsIGJlIHdvcnRoIGxpc3RpbmcgaXQuIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGJlY2F1c2Ugc3l6a2FsbGVyIGZ1enplcyB3cml0ZXMgdG8gdGhlIFZGSU8gUENJIGNvbmZpZyBzcGFjZS4gYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlYCBpcyByZWFjaGFibGUgdmlhIGBWRklPX0RFVklDRV9GRUFUVVJFYCBpb2N0bC5cblxuQSBrZXkgcG9pbnQgaXMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGVuYWJsZV91bnNhZmVfdHBoYCB3aGljaCwgaWYgKm5vdCogc2V0LCB3aWxsIG1ha2UgdGhlIGNvZGUganVzdCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBzYWlkLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIGl0J3Mgd29ydGggZnV6emluZyBzaW5jZSBpdCBtYXkgcmV2ZWFsIG5ldyBmbGF3cyBvciBhcmVhcyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBTeXprYWxsZXIncyBtYWludGFpbmVycyBzaG91bGQgYmUgYXdhcmUgdGhhdCBzZXR0aW5nIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgd2lsbCBiZSAqZXNzZW50aWFsKiB0byBhY3R1YWxseSByZWFjaCB0aGUgdGFyZ2V0IGxvZ2ljLlxuXG5TbywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJIHdpbGwgYWRkIHRoZSBWRklPIGZ1bmN0aW9ucyBmaXJzdC4gVGhlbiBJIGFtIGFkZGluZyB0aGUgUENJIGluaXRpYWxpemF0aW9uIGNvZGUgYXMgaXQncyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZS5cbkknbSBpbmNsdWRpbmcgYHRwaF9jcHVfc3RfcmVhZGAgYW5kIGBlbmFibGVfdHBoYC5cblxuTXkgUmVhc29uaW5nIGlzLCBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS4gV2UgaW5jbHVkZSBgZW5hYmxlX3RwaGAgYXMgaXQncyBwYXJ0IG9mIHRoZSB3cml0ZSBwYXRoLiBgdHBoX2NwdV9zdF9yZWFkYCBpcyBpbmNsdWRlZC5cIlxuXG5UaGUgY3JpdGljYWwgY29uZmlnIHdlIG5lZWQgaXMgYFBDSUVfVFBIYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MTAsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE3OjA0LjIzNDg4ODAzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTEwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZ1wiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3BjaV90cGhfaW5pdFwiLFxuICAgIFwicGNpX3RwaF9pbml0XCIsXG4gICAgXCJlbmFibGVfdHBoXCIsXG4gICAgXCJ0cGhfY3B1X3N0X3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZ1wiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3BjaV90cGhfaW5pdFwiLFxuICAgIFwicGNpX3RwaF9pbml0XCIsXG4gICAgXCJlbmFibGVfdHBoXCIsXG4gICAgXCJ0cGhfY3B1X3N0X3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 08:02:00 +0000 UTC FinishedAt: 2026-06-22 08:17:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH" ], "series_id": "a66c1909-0e1c-439d-92c4-146c8e09daea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_tph_enable", "vfio_pci_core_feature_tph_st_config", "vfio_tph_config_write", "vfio_pci_tph_init", "pci_tph_init", "enable_tph", "tph_cpu_st_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcmIzM0OywKICAgICYjMzQ7dmZpb190cGhfY29uZmlnX3dyaXRlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX3RwaF9pbml0JiMzNDssCiAgICAmIzM0O3BjaV90cGhfaW5pdCYjMzQ7LAogICAgJiMzNDtlbmFibGVfdHBoJiMzNDssCiAgICAmIzM0O3RwaF9jcHVfc3RfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4MjU0M2ExZWQwOWEyNmQ2NDY2NTgyMDI0MzdkNjE0NzM1YjczODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwODoxNDo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2lcbmluZGV4IGI3NjdkYjJjNTJjYjcwLi5lZGM2NGU0ZTU2NDA0ZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaVxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXG5AQCAtNzAyLDMgJiM0Mzs3MDIsMjcgQEAgRGVzY3JpcHRpb246XG4gXHRcdFdoZW4gcHJlc2VudCBhbmQgdGhlIHRzbS8gYXR0cmlidXRlIGRpcmVjdG9yeSBpcyBwcmVzZW50LCB0aGVcbiBcdFx0YXV0aGVudGljYXRlZCBhdHRyaWJ1dGUgaXMgYW4gYWxpYXMgZm9yIHRoZSBkZXZpY2UgJiMzOTtjb25uZWN0JiMzOTtcbiBcdFx0c3RhdGUuIFNlZSB0aGUgJiMzOTt0c20vY29ubmVjdCYjMzk7IGF0dHJpYnV0ZSBmb3IgbW9yZSBkZXRhaWxzLlxuJiM0MztcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvcGNpL2RldmljZXMvXHUwMDNjcm9vdC1wb3J0LWJkZlx1MDAzZS90cGhfY3B1X3N0XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4mIzQzO0Rlc2NyaXB0aW9uOlxuJiM0MztcdFx0UmVhZC1vbmx5IGJpbmFyeSBhdHRyaWJ1dGUgb25seSBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB0aGF0XG4mIzQzO1x0XHRzdXBwb3J0IFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgaW1wbGVtZW50IHRoZSBBQ1BJIERTTVxuJiM0MztcdFx0bWV0aG9kIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gRmlsZSBwZXJtaXNzaW9uIGlzIHJvb3Qtb25seVxuJiM0MztcdFx0KDA0MDApLlxuJiM0MztcbiYjNDM7XHRcdFRoZSBibG9iIGlzIGEgc2VxdWVuY2Ugb2YgZml4ZWQtc2l6ZSA4LWJ5dGUgZW50cmllcyBkZWZpbmVkIGJ5XG4mIzQzO1x0XHRzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgaW4gdWFwaS9saW51eC9wY2kuaDpcbiYjNDM7XHRcdCAgX191OCB2bV9zdDtcbiYjNDM7XHRcdCAgX191OCBwbV9zdDtcbiYjNDM7XHRcdCAgX191MTYgdm1feHN0O1xuJiM0MztcdFx0ICBfX3UxNiBwbV94c3Q7XG4mIzQzO1x0XHQgIF9fdTE2IHJlc2VydmVkO1xuJiM0MztcbiYjNDM7XHRcdEVhY2ggZW50cnkgY29ycmVzcG9uZHMgdG8gYSBsb2dpY2FsIENQVSBpbmRleC4gU2VlayBvZmZzZXQgPVxuJiM0MztcdFx0Y3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1ouIEFyYml0cmFyeSB1bmFsaWduZWQgcGFydGlhbFxuJiM0MztcdFx0cmVhZHMgYXJlIHN1cHBvcnRlZDsgbm8gYWxpZ25tZW50IHJlc3RyaWN0aW9uIGVuZm9yY2VkLlxuJiM0MztcbiYjNDM7XHRcdEZvciBDUFVzIG91dHNpZGUgY3B1X3Bvc3NpYmxlX21hc2sgb3Igb2ZmbGluZSBDUFVzLCB0aGUgZW50cnlcbiYjNDM7XHRcdGlzIGZpbGxlZCB3aXRoIGFsbCB6ZXJvcyB0byBhdm9pZCBicmVha2luZyBzZXF1ZW50aWFsIGR1bXAgdG9vbHNcbiYjNDM7XHRcdGxpa2UgY2F0L2hleGR1bXAgb24gc3BhcnNlIENQVSB0b3BvbG9naWVzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcbmluZGV4IGQzNzg2MDg0MTI2MGNlLi5hZDllNGU4ZDMyMGIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuY1xuQEAgLTE4MzIsNiAmIzQzOzE4MzIsOSBAQCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwY2lfZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gI2lmZGVmIENPTkZJR19QQ0lfVFNNXG4gXHRcdTAwMjZwY2lfdHNtX2F1dGhfYXR0cl9ncm91cCxcbiBcdFx1MDAyNnBjaV90c21fYXR0cl9ncm91cCxcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7XHRcdTAwMjZwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCxcbiAjZW5kaWZcbiBcdE5VTEwsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXG5pbmRleCBlOGFkMjdhYmIxY2ZlNC4uMWFiZTdmYTFmY2M3ZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLmhcbkBAIC0xMzc1LDYgJiM0MzsxMzc1LDEwIEBAIHN0YXRpYyBpbmxpbmUgcGNpX3Bvd2VyX3QgYWNwaV9wY2lfY2hvb3NlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzcG1fY3RybF9hdHRyX2dyb3VwO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjaWVfdHBoX2NwdV9zdF9hdHRyX2dyb3VwO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19YODZfSU5URUxfTUlEXG4gYm9vbCBwY2lfdXNlX21pZF9wbSh2b2lkKTtcbiBpbnQgbWlkX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA5MTE0NWU4ZDlkOTUxMi4uNDc0MDJkNGI4ODk5OGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21zaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cGNpLmhcJiMzNDtcbiBcbkBAIC0xMzAsOCAmIzQzOzEzMSw0NyBAQCBzdGF0aWMgYWNwaV9zdGF0dXMgdHBoX2ludm9rZV9kc20oYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgY3B1X3VpZCxcbiBcbiBcdHJldHVybiBBRV9PSztcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRwaF9nZXRfY3B1X3N0X2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBjcHUsXG4mIzQzO1x0XHRcdCAgICAgICB1bmlvbiBzdF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnJwO1xuJiM0MztcdHUzMiBjcHVfdWlkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbiYjNDM7XHRpZiAocmV0ICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4mIzQzO1x0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJwX2FjcGlfaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXHUwMDNlYnVzLVx1MDAzZWJyaWRnZSk7XG4mIzQzO1x0aWYgKHRwaF9pbnZva2VfZHNtKHJwX2FjcGlfaGFuZGxlLCBjcHVfdWlkLCBpbmZvKSAhPSBBRV9PSylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgYm9vbCB0cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0FDUElcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpO1xuJiM0MztcdGFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJwX2FjcGlfaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXHUwMDNlYnVzLVx1MDAzZWJyaWRnZSk7XG4mIzQzO1x0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKHJwX2FjcGlfaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbiYjNDM7XHRcdFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyogVXBkYXRlIHRoZSBUUEggUmVxdWVzdGVyIEVuYWJsZSBmaWVsZCBvZiBUUEggQ29udHJvbCBSZWdpc3RlciAqL1xuIHN0YXRpYyB2b2lkIHNldF9jdHJsX3JlZ19yZXFfZW4oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IHJlcV90eXBlKVxuIHtcbkBAIC0xNjYsMTEgJiM0MzsyMDYsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuJiM0MztcdHUzMiByZWcgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiYjNDM7XHRcdHJldHVybiBQQ0lfVFBIX0xPQ19OT05FO1xuIFxuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XG4mIzQzO1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg1LDkgJiM0MzsyMjgsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiBkZWZpbmVkIGluIHBjaV9yZWdzLmggKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMxLDYgJiM0MzsyNzEsNDkgQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBnZXRfY3B1X2FsbF9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHBjaV90cGhfY3B1X3N0ICpzdClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0FDUElcbiYjNDM7XHR1bmlvbiBzdF9pbmZvIGluZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQgPT0gMCkge1xuJiM0MztcdFx0c3QtXHUwMDNldm1fc3QgPSBpbmZvLnZtX3N0X3ZhbGlkID8gaW5mby52bV9zdCA6IDA7XG4mIzQzO1x0XHRzdC1cdTAwM2VwbV9zdCA9IGluZm8ucG1fc3RfdmFsaWQgPyBpbmZvLnBtX3N0IDogMDtcbiYjNDM7XHRcdHN0LVx1MDAzZXZtX3hzdCA9IGluZm8udm1feHN0X3ZhbGlkID8gaW5mby52bV94c3QgOiAwO1xuJiM0MztcdFx0c3QtXHUwMDNlcG1feHN0ID0gaW5mby5wbV94c3RfdmFsaWQgPyBpbmZvLnBtX3hzdCA6IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBnZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0FDUElcbiYjNDM7XHR1bmlvbiBzdF9pbmZvIGluZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmIChyZXQgIT0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiYjNDM7XG4mIzQzO1x0cGNpX2RiZyhwZGV2LCBcJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgcmVxX3R5cGU9JXUsIGNwdT0lZCwgdGFnPSUjMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcJiMzNDt2b2xhdGlsZVwmIzM0OyA6IFwmIzM0O3BlcnNpc3RlbnRcJiMzNDssXG4mIzQzO1x0XHRyZXFfdHlwZSwgY3B1LCAqdGFnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIC1FTk9ERVY7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbiAgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG5AQCAtMjQ3LDQwICYjNDM7MzMwLDM1IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHtcbi0jaWZkZWYgQ09ORklHX0FDUElcbi1cdHN0cnVjdCBwY2lfZGV2ICpycDtcbi1cdGFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlO1xuLVx0dW5pb24gc3RfaW5mbyBpbmZvO1xuLVx0dTMyIGNwdV91aWQ7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gYWNwaV9nZXRfY3B1X3VpZChjcHUsIFx1MDAyNmNwdV91aWQpO1xuLVx0aWYgKHJldCAhPSAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpO1xuLVx0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHRyZXR1cm4gZ2V0X2NwdV9zdChwZGV2LCBtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIGNwdSwgdGFnKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xuIFxuLVx0cnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKTtcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4mIzQzOyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seVxuJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuJiM0MzsgKiBAdGFnOiBvdXRwdXQgc3RlZXJpbmcgdGFnIHBvaW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogVW5saWtlIGF1dG8gcGNpZV90cGhfZ2V0X2NwdV9zdCgpLCBjYWxsZXIgbWFudWFsbHkgcGlja3MgcmVxdWVzdGVyIHR5cGUuXG4mIzQzOyAqIFJlamVjdHMgRVhUIHJlcXVlc3QgaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0XHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4mIzQzO3tcbiYjNDM7XHR1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuIFxuLVx0aWYgKHRwaF9pbnZva2VfZHNtKHJwX2FjcGlfaGFuZGxlLCBjcHVfdWlkLCBcdTAwMjZpbmZvKSAhPSBBRV9PSykge1xuLVx0XHQqdGFnID0gMDtcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgXHUwMDI2aW5mbyk7XG4tXG4tXHRwY2lfZGJnKHBkZXYsIFwmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwmIzM0Oyxcbi1cdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcJiMzNDt2b2xhdGlsZVwmIzM0OyA6IFwmIzM0O3BlcnNpc3RlbnRcJiMzNDssXG4tXHRcdGNwdSwgKnRhZyk7XG4gXG4tXHRyZXR1cm4gMDtcbi0jZWxzZVxuLVx0cmV0dXJuIC1FTk9ERVY7XG4tI2VuZGlmXG4mIzQzO1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHJlcV90eXBlLCBjcHUsIHRhZyk7XG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCk7XG4gXG4gLyoqXG4gICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxuQEAgLTMxNiw4ICYjNDM7Mzk0LDYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuIFx0c2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBQQ0lfVFBIX1JFUV9ESVNBQkxFKTtcbiBcbiBcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XG4tXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXG4gXHRzd2l0Y2ggKGxvYykge1xuIFx0Y2FzZSBQQ0lfVFBIX0xPQ19NU0lYOlxuQEAgLTM2NiwyNyAmIzQzOzQ0MiwxMCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XG4gXG4tLyoqXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4tICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4tICpcbi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbi0gKlxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0JiMzOTtzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuLSAqL1xuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuJiM0MztzdGF0aWMgaW50IGVuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCB1OCByZXFfdHlwZSlcbiB7XG4gXHR1MzIgcmVnO1xuIFx0dTggZGV2X21vZGVzO1xuLVx0dTggcnBfcmVxX3R5cGU7XG4gXG4gXHQvKiBIb25vciBcJiMzNDtub3RwaFwmIzM0OyBrZXJuZWwgcGFyYW1ldGVyICovXG4gXHRpZiAocGNpX3RwaF9kaXNhYmxlZClcbkBAIC00MDQsMjYgJiM0Mzs0NjMsMTIgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgbW9kZSkgXHUwMDI2IGRldl9tb2RlcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cGRldi1cdTAwM2V0cGhfbW9kZSA9IG1vZGU7XG4tXG4tXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuLVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbi1cdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuLVx0ZWxzZVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuLVxuLVx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbi1cdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbi1cdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4tXG4tXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbi1cdH1cbi1cbi1cdGlmIChwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxuJiM0MztcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIIFx1MDAyNlx1MDAyNiAhcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHBkZXYtXHUwMDNldHBoX21vZGUgPSBtb2RlO1xuJiM0MztcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XG4mIzQzO1xuIFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ1RSTCwgXHUwMDI2cmVnKTtcbiBcbkBAIC00MzEsNyAmIzQzOzQ3Niw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIHBkZXYtXHUwMDNldHBoX21vZGUpO1xuIFxuIFx0cmVnIFx1MDAyNj0gflBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSztcbi1cdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUpO1xuJiM0MztcdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcmVxX3R5cGUpO1xuIFxuIFx0cGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DVFJMLCByZWcpO1xuIFxuQEAgLTQzOSw4ICYjNDM7NDg0LDYzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4mIzQzOyAqXG4mIzQzOyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcbiYjNDM7ICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4mIzQzOyAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4mIzQzOyAqXG4mIzQzOyAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4mIzQzOyAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4mIzQzOyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlclxuJiM0MzsgKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0JiMzOTtzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4mIzQzOyAqL1xuJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiYjNDM7e1xuJiM0MztcdHU4IHJlcV90eXBlID0gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDpcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuJiM0MztcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcbiYjNDM7ICogQG1vZGU6IFNUIHRhYmxlIG9wZXJhdGluZyBtb2RlIChOUy9JVi9EUylcbiYjNDM7ICogQGV4dGVuZGVkOiB0cnVlID0gRVhUX1RQSCwgZmFsc2UgPSBzdGFuZGFyZCBUUEggb25seVxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XG4mIzQzOyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZClcbiYjNDM7e1xuJiM0MztcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbiYjNDM7XG4gdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7XG5AQCAtNTEyLDE0ICYjNDM7NjEyLDEzMSBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcbiBcbiB2b2lkIHBjaV90cGhfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4mIzQzO1x0dTggdHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZTtcbiBcdGludCBudW1fZW50cmllcztcbiBcdHUzMiBzYXZlX3NpemU7XG4mIzQzO1x0dTMyIHJlZyA9IDA7XG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4mIzQzO1x0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuJiM0MztcdFx0dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbiYjNDM7XHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4mIzQzO1x0XHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcbiYjNDM7XHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbiYjNDM7XHRcdHRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuJiM0MztcdFx0cGRldi1cdTAwM2V0cGhfY2FwID0gMDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0ID0gISEodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpO1xuJiM0MztcbiBcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4gXHRzYXZlX3NpemUgPSBzaXplb2YodTMyKSAmIzQzOyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpO1xuIFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfc3VwcG9ydGVkIC0gQ2hlY2sgVFBIIGNhcGFiaWxpdHkgYXR0cmlidXRlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqIEB3YW50X2V4dDogZmFsc2UgLSBjaGVjayBUUEggY2FwIGV4aXN0czsgdHJ1ZSAtIGNoZWNrIEVYVF9UUEggc3VwcG9ydFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgb24gbWF0Y2hlZCBjb25kaXRpb24sIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3YW50X2V4dClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgdHBoX2NwdV9zdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuJiM0MztcdFx0XHQgICAgICAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbiYjNDM7XHRjb25zdCBzaXplX3QgZW50cnlfc3ogPSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWjtcbiYjNDM7XHRjb25zdCBzaXplX3QgdG90YWxfc2l6ZSA9IG5yX2NwdV9pZHMgKiBlbnRyeV9zejtcbiYjNDM7XHRzaXplX3QgY29waWVkID0gMDtcbiYjNDM7XHRsb2ZmX3QgcG9zID0gb2ZmO1xuJiM0MztcbiYjNDM7XHRpZiAocG9zIFx1MDAzZT0gdG90YWxfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHRvdGFsX3NpemUgLSBwb3MpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoY29waWVkIFx1MDAzYyBjb3VudCkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejtcbiYjNDM7XHRcdHNpemVfdCBlbnRyeV9vZmYgPSBwb3MgJSBlbnRyeV9zejtcbiYjNDM7XHRcdHNpemVfdCByZW1haW4gPSBlbnRyeV9zeiAtIGVudHJ5X29mZjtcbiYjNDM7XHRcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNpX3RwaF9jcHVfc3Qgc3QgPSB7MH07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNwdV9wb3NzaWJsZShjcHVfaWR4KSlcbiYjNDM7XHRcdFx0Z2V0X2NwdV9hbGxfc3QocGRldiwgY3B1X2lkeCwgXHUwMDI2c3QpO1xuJiM0MztcbiYjNDM7XHRcdG1lbWNweShidWYgJiM0MzsgY29waWVkLCAoY2hhciAqKVx1MDAyNnN0ICYjNDM7IGVudHJ5X29mZiwgY2h1bmspO1xuJiM0MztcbiYjNDM7XHRcdGNvcGllZCAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRwb3MgJiM0Mzs9IGNodW5rO1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvcGllZDtcbiYjNDM7fVxuJiM0MztzdGF0aWMgQklOX0FUVFIodHBoX2NwdV9zdCwgMDQwMCwgdHBoX2NwdV9zdF9yZWFkLCBOVUxMLCAwKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgdHBoX2NwdV9zdF9iaW5fYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZiaW5fYXR0cl90cGhfY3B1X3N0LFxuJiM0MztcdE5VTEwsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYSwgaW50IG4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbnJfY3B1X2lkcyAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW1vZGVfdCB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsIGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbiYjNDM7XHRib29sIGlzX3Jvb3RfcG9ydCA9IHBjaV9pc19wY2llKHBkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdHBjaV9wY2llX3R5cGUocGRldikgPT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVDtcbiYjNDM7XHR1MzIgZGV2Y2FwMiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfcm9vdF9wb3J0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNmRldmNhcDIpO1xuJiM0MztcdGlmICghKGRldmNhcDIgXHUwMDI2IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRwaF9kc21fc3VwcG9ydGVkKHBkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhLVx1MDAzZWF0dHIubW9kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCA9IHtcbiYjNDM7XHQuYmluX2F0dHJzID0gdHBoX2NwdV9zdF9iaW5fYXR0cnMsXG4mIzQzO1x0LmJpbl9zaXplID0gdHBoX2NwdV9zdF9iaW5fc2l6ZSxcbiYjNDM7XHQuaXNfYmluX3Zpc2libGUgPSB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbmluZGV4IDBjNzcxMDY0YzBiODQ0Li42ZDczNjY4NDU5Y2Y1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5AQCAtNjAsNiAmIzQzOzYwLDEyIEBAIHN0YXRpYyBib29sIGRpc2FibGVfZGVueWxpc3Q7XG4gbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgXCYjMzQ7RGlzYWJsZSB1c2Ugb2YgZGV2aWNlIGRlbnlsaXN0LiBEaXNhYmxpbmcgdGhlIGRlbnlsaXN0IGFsbG93cyBiaW5kaW5nIHRvIGRldmljZXMgd2l0aCBrbm93biBlcnJhdGEgdGhhdCBtYXkgbGVhZCB0byBleHBsb2l0YWJsZSBzdGFiaWxpdHkgb3Igc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnkgdW50cnVzdGVkIHVzZXJzLlwmIzM0Oyk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7c3RhdGljIGJvb2wgZW5hYmxlX3Vuc2FmZV90cGg7XG4mIzQzO21vZHVsZV9wYXJhbShlbmFibGVfdW5zYWZlX3RwaCwgYm9vbCwgMDQ0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3Vuc2FmZV90cGgsIFwmIzM0O0VuYWJsZSBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydC4gSXQgbWF5IGJyZWFrIHBsYXRmb3JtIGlzb2xhdGlvbi4gSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIHN0ZXAgYXdheS4gKGRlZmF1bHQ6IGZhbHNlKVwmIzM0Oyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3dpdGNoIChwZGV2LVx1MDAzZXZlbmRvcikge1xuQEAgLTI1NywxMiAmIzQzOzI2MywxNyBAQCBzdGF0aWMgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcdGJvb2wgaXNfZGlzYWJsZV92Z2EgPSB0cnVlO1xuJiM0MztcdGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGggPSBmYWxzZTtcbiBcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxuIFx0aXNfZGlzYWJsZV92Z2EgPSBkaXNhYmxlX3ZnYTtcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuJiM0MztcdGlzX2VuYWJsZV91bnNhZmVfdHBoID0gZW5hYmxlX3Vuc2FmZV90cGg7XG4mIzQzOyNlbmRpZlxuIFxuLVx0dmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKG5vaW50eG1hc2ssIGlzX2Rpc2FibGVfdmdhLCBkaXNhYmxlX2lkbGVfZDMpO1xuJiM0MztcdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzLFxuJiM0MztcdFx0XHRcdCBpc19lbmFibGVfdW5zYWZlX3RwaCk7XG4gXG4gXHQvKiBSZWdpc3RlciBhbmQgc2NhbiBmb3IgZGV2aWNlcyAqL1xuIFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ2ZmlvX3BjaV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uMTBmNGU5ZmFiZWE3Y2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICYjNDM7MTA4NiwxMTggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBQZXJtaXNzaW9ucyBmb3IgVFBIIGV4dGVuZGVkIGNhcGFiaWxpdHkgKi9cbiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuJiM0MztcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbiYjNDM7XG4mIzQzO1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsIEFMTF9XUklURSk7XG4mIzQzO1xuJiM0MztcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xuJiM0MztcdCAqIHdoZW4gdGhlIFNUIHRhYmxlIGlzIGxvY2F0ZWQgaW4gdGhlIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiYjNDM7XHQgKiBDYXBhYmlsaXR5IHN0cnVjdHVyZS5cbiYjNDM7XHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxuJiM0MztcdCAqIGZvbGxvd2luZyBvcGVyYXRpb24gaXMgZmluZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiAmIzQzOyBpICogc2l6ZW9mKHUxNiksXG4mIzQzO1x0XHQgICAgICAgKHUxNilBTExfVklSVCwgKHUxNilBTExfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmZpb190cGhfbWFza19leHRfdHBoX2JpdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgaW50IHBvcylcbiYjNDM7e1xuJiM0MztcdF9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCB0cnVlKSkge1xuJiM0MztcdFx0dmFsID0gbGUzMl90b19jcHUoKnZwdHIpO1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7XG4mIzQzO1x0XHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKTtcbiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuJiM0MztcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVxX2VuX2J5dGUgPSBQQ0lfVFBIX0NUUkwgJiM0MzsgMTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHR1OCBtb2RlLCByZXE7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XHR1MTYgc3RhcnQ7XG4mIzQzO1x0dTMyIGRhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0KVxuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBCYWNrIHVwIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gb3JkZXIgcm9sbGJhY2sgd2hlbiBmYWlsICovXG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2M9IHJlcV9lbl9ieXRlIFx1MDAyNlx1MDAyNiBvZmZzZXQgJiM0MzsgY291bnQgXHUwMDNlIHJlcV9lbl9ieXRlKVxuJiM0MztcdFx0dmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZvcmdfdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4mIzQzO1x0aWYgKHJldCAhPSBjb3VudCkge1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBpZiB3cml0ZSByYW5nZSBkb2VzIG5vdCBjb3ZlciBSZXF1ZXN0ZXIgRW5hYmxlIGJ5dGUgKi9cbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzZSByZXFfZW5fYnl0ZSB8fCBvZmZzZXQgJiM0MzsgY291bnQgXHUwMDNjPSByZXFfZW5fYnl0ZSkge1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgb3JnX3ZhbCk7XG4mIzQzO1x0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiBjb3VudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpO1xuJiM0MztcdGRhdGEgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTtcbiYjNDM7XHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBkYXRhKTtcbiYjNDM7XHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBkYXRhKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xuJiM0MztcdFx0ZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XG4mIzQzO1x0XHRyZXQgPSBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQocGRldiwgbW9kZSwgZXh0ZW5kZWQpO1xuJiM0MztcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdykge1xuJiM0MztcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgaSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgdmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93W2ldKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBvZmZzZXQsIG9yZ192YWwpO1xuJiM0MztcdH0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHtcbiYjNDM7XHRcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHQgIG9yZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiAmIzQzOzEyMTMsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcbiBcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuJiM0MztcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgJiM0MzsxMjM0LDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbiYjNDM7XHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuJiM0MztcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcbkBAIC0xNDUwLDYgJiM0MzsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICYjNDM7IGJ5dGUgJiM0MzsgMTtcbiBcdGNhc2UgUENJX0VYVF9DQVBfSURfVFBIOlxuJiM0MztcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGVwb3MgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNmR3b3JkKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbkBAIC0xNzAxLDYgJiM0MzsxODE5LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChlY2FwID09IFBDSV9FWFRfQ0FQX0lEX1RQSCBcdTAwMjZcdTAwMjYgIWhpZGRlbilcbiYjNDM7XHRcdFx0dmZpb190cGhfbWFza19leHRfdHBoX2JpdCh2ZGV2LCBlcG9zKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMjhmMWU5OTM2MmMxZS4uMWU3MDZhNjkwZGJkNzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0yOSw2ICYjNDM7MjksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0VFSClcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWVoLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC00MSw2ICYjNDM7NDIsNyBAQFxuIHN0YXRpYyBib29sIG5vaW50eG1hc2s7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV92Z2E7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV9pZGxlX2QzO1xuJiM0MztzdGF0aWMgYm9vbCBlbmFibGVfdW5zYWZlX3RwaDtcbiBcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9ldmVudGZkX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIHtcbkBAIC01MzEsNiAmIzQzOzUzMyw1MiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdmZpb19wY2lfY29yZV9wbV9vcHMgPSB7XG4gXHRcdFx0ICAgTlVMTClcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuJiM0MztcdFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiYjNDM7e1xuJiM0MztcdHZkZXYtXHUwMDNldHBoX3N0X2VudHJpZXMgPSAwO1xuJiM0MztcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IE5VTEw7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZSh2ZGV2KTtcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfc3RfZW50cmllcykge1xuJiM0MztcdFx0dmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93ID0ga2NhbGxvYyh2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzLCBzaXplb2YodTE2KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0XHRpZiAoIXZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmZpb19wY2lfdHBoX2RlaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZSh2ZGV2LVx1MDAzZXRwaF9zdF9zaGFkb3cpO1xuJiM0MztcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IE5VTEw7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbkBAIC01NTcsNiAmIzQzOzYwNSwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRnb3RvIG91dF9kaXNhYmxlX2RldmljZTtcbiBcbiBcdHZkZXYtXHUwMDNlcmVzZXRfd29ya3MgPSAhcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cbiYjNDM7XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfdHBoX2luaXQodmRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuJiM0MztcbiBcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFx0dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XG4gXHRpZiAoIXZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxuQEAgLTYxNCw2ICYjNDM7NjY5LDcgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBvdXRfZnJlZV9zdGF0ZTpcbiBcdGtmcmVlKHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gTlVMTDtcbiYjNDM7XHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xuIG91dF9kaXNhYmxlX2RldmljZTpcbiBcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiBvdXRfcG93ZXI6XG5AQCAtNjgyLDYgJiM0Mzs3MzgsOSBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRrZnJlZSh2ZGV2LVx1MDAzZXJlZ2lvbik7XG4gXHR2ZGV2LVx1MDAzZXJlZ2lvbiA9IE5VTEw7IC8qIGRvbiYjMzk7dCBrcmVhbGxvYyBhIGZyZWVkIHBvaW50ZXIgKi9cbiBcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIHNlc3Npb24gZXhpdCAqL1xuJiM0MztcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xuIFx0dmZpb19jb25maWdfZnJlZSh2ZGV2KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMTU1NCw2ICYjNDM7MTYxMyw5NSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIHUzMiBmbGFncywgc2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmFibGVfdW5zYWZlX3RwaClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9wZXJtaXQpXG4mIzQzO1x0XHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyhcbiYjNDM7XHRcdFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHR1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdF9jb25maWcgX191c2VyICphcmcsXG4mIzQzO1x0XHRcdHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdF9jb25maWcgY29uZmlnO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuJiM0MztcdHZvaWQgX191c2VyICp1cHRyO1xuJiM0MztcdGludCBpLCBpZHgsIHJldDtcbiYjNDM7XHRzaXplX3Qgc3o7XG4mIzQzO1x0dTE2ICpzdHM7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRcdCBzaXplb2YoY29uZmlnKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdCB8fCAhdmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjb25maWcsIGFyZywgc2l6ZW9mKGNvbmZpZykpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb25maWcuY291bnQgPT0gMCB8fCBjb25maWcucmVzZXJ2ZWQgIT0gMCB8fFxuJiM0MztcdFx0Y29uZmlnLmluZGV4IFx1MDAzZT0gdmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyB8fFxuJiM0MztcdFx0Y29uZmlnLmNvdW50IFx1MDAzZSB2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzIC0gY29uZmlnLmluZGV4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHVwdHIgPSB1NjRfdG9fdXNlcl9wdHIoY29uZmlnLmRhdGFfdXB0cik7XG4mIzQzO1x0c3RzID0gbWVtZHVwX2FycmF5X3VzZXIodXB0ciwgY29uZmlnLmNvdW50LCBzaXplb2YodTE2KSk7XG4mIzQzO1x0c3ogPSBjb25maWcuY291bnQgKiBzaXplb2YodTE2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHN0cykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihzdHMpO1xuJiM0MztcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2tfbWVtb3J5O1xuJiM0MztcbiYjNDM7XHRpZiAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShwZGV2KSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxuJiM0MztcdFx0Z290byB1cGRhdGVfc2hhZG93O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWcuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZHggPSBjb25maWcuaW5kZXggJiM0MzsgaTtcbiYjNDM7XHRcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHN0c1tpXSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJvbGxiYWNrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VwZGF0ZV9zaGFkb3c6XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tjb25maWcuaW5kZXhdLCBzdHMsIHN6KTtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcdGdvdG8gb3V0X3VubG9ja19tZW1vcnk7XG4mIzQzO1xuJiM0Mztyb2xsYmFjazpcbiYjNDM7XHR3aGlsZSAoaS0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZHggPSBjb25maWcuaW5kZXggJiM0MzsgaTtcbiYjNDM7XHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tpZHhdKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrX21lbW9yeTpcbiYjNDM7XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUoc3RzKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTU3Miw2ICYjNDM7MTcyMCwxMSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEU6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUodmRldiwgZmxhZ3MsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJRzpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyh2ZGV2LCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuQEAgLTI2MTUsMTEgJiM0MzsyNzY4LDEzIEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKGJvb2wgaXNfbm9pbnR4bWFzaywgYm9vbCBpc19kaXNhYmxlX3ZnYSxcbi1cdFx0XHQgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMylcbiYjNDM7XHRcdFx0ICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMsXG4mIzQzO1x0XHRcdCAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpXG4ge1xuIFx0bm9pbnR4bWFzayA9IGlzX25vaW50eG1hc2s7XG4gXHRkaXNhYmxlX3ZnYSA9IGlzX2Rpc2FibGVfdmdhO1xuIFx0ZGlzYWJsZV9pZGxlX2QzID0gaXNfZGlzYWJsZV9pZGxlX2QzO1xuJiM0MztcdGVuYWJsZV91bnNhZmVfdHBoID0gaXNfZW5hYmxlX3Vuc2FmZV90cGg7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuaW5kZXggYmU2OGNkMTdmMmY4MzMuLjU5MTdhMDY5NGMxZDY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gICovXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuIFxuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuQEAgLTI2LDEwICYjNDM7MjcsMTYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuIFx0XHRcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHRcdCBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKTtcbiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4mIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuQEAgLTM4LDkgJiM0Mzs0NSwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHRlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0XHRib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICBib29sIGV4dGVuZGVkKVxuJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiAwOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcbiYjNDM7eyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDJjNDQ1NDU4M2MxMTViLi4yODVjMGYwMDg4MmUwZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzEsNyAmIzQzOzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OSw3ICYjNDM7NTg4LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfY2FwOjE0O1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4mIzQzO1x0dTE2XHRcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxuJiM0MztcdFx0XHRcdFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfZW5hYmxlZDoxO1x0LyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqL1xuIFx0dThcdFx0dHBoX21vZGU7XHQvKiBUUEggbW9kZSAqL1xuIFx0dThcdFx0dHBoX3JlcV90eXBlO1x0LyogVFBIIHJlcXVlc3RlciB0eXBlICovXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuaW5kZXggNWZjNmNlNGRkNzg2MTYuLjUyN2M4NGYwNDJhYTZmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTI4LDYgJiM0MzsxMjgsNyBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4gXHRib29sXHRcdFx0c3Jpb3ZfYWN0aXZlO1xuJiM0MztcdGJvb2xcdFx0XHR0cGhfcGVybWl0O1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBjaV9zYXZlZF9zdGF0ZTtcbiBcdHN0cnVjdCBwY2lfc2F2ZWRfc3RhdGVcdCpwbV9zYXZlO1xuIFx0aW50XHRcdFx0aW9ldmVudGZkc19ucjtcbkBAIC0xNDMsNiAmIzQzOzE0NCw4IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcdG5iO1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZVx0bWVtb3J5X2xvY2s7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRkbWFidWZzO1xuJiM0MztcdHUxNlx0XHRcdCp0cGhfc3Rfc2hhZG93O1xuJiM0MztcdHUxNlx0XHRcdHRwaF9zdF9lbnRyaWVzO1xuIH07XG4gXG4gZW51bSB2ZmlvX3BjaV9pb193aWR0aCB7XG5AQCAtMTU4LDcgJiM0MzsxNjEsOCBAQCBpbnQgdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZfcmVnaW9uKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9yZWdvcHMgKm9wcyxcbiBcdFx0XHRcdCAgICAgIHNpemVfdCBzaXplLCB1MzIgZmxhZ3MsIHZvaWQgKmRhdGEpO1xuIHZvaWQgdmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKGJvb2wgbm9pbnR4bWFzaywgYm9vbCBpc19kaXNhYmxlX3ZnYSxcbi1cdFx0XHQgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMyk7XG4mIzQzO1x0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxuJiM0MztcdFx0XHQgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKTtcbiB2b2lkIHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcbiBpbnQgdmZpb19wY2lfY29yZV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3JlbGVhc2VfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcGNpLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcGNpLmhcbmluZGV4IDRmMTUwMDI4OTY1ZDhiLi41YzRlYTQ0ZDY2ZDIwNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjZGVmaW5lIF9VQVBJTElOVVhfUENJX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXHQvKiBUaGUgcGNpIHJlZ2lzdGVyIGRlZmluZXMgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhlIFBDSSBpbnRlcmZhY2UgdHJlYXRzIG11bHRpLWZ1bmN0aW9uIGRldmljZXMgYXMgaW5kZXBlbmRlbnRcbkBAIC00Niw0ICYjNDM7NDcsMTkgQEAgZW51bSBwY2lfaG90cGx1Z19ldmVudCB7XG4gXHRQQ0lfSE9UUExVR19DQVJEX05PVF9QUkVTRU5ULFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFBDSWUgVFBIIHN5c2ZzIGJpbmFyeSBlbnRyeSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmdcbiYjNDM7ICogU3lzZnMgZmlsZTogL3N5cy9idXMvcGNpL2RldmljZXMvXHUwMDNjQkRGXHUwMDNlL3RwaF9jcHVfc3RcbiYjNDM7ICogRWFjaCBlbnRyeSBpcyA4IGJ5dGVzIGFsaWduZWQsIHNlZWsgb2Zmc2V0ID0gY3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1pcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfdHBoX2NwdV9zdCB7XG4mIzQzO1x0X191OCAgdm1fc3Q7ICAgICAgICAvKiBWb2xhdGlsZSBNZW1vcnkgU3RlZXJpbmcgVGFnICgxIGJ5dGUpICovXG4mIzQzO1x0X191OCAgcG1fc3Q7ICAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBTdGVlcmluZyBUYWcgKDEgYnl0ZSkgKi9cbiYjNDM7XHRfX3UxNiB2bV94c3Q7ICAgICAgIC8qIFZvbGF0aWxlIE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovXG4mIzQzO1x0X191MTYgcG1feHN0OyAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovXG4mIzQzO1x0X191MTYgcmVzZXJ2ZWQ7ICAgICAvKiBQYWRkaW5nIHRvIDggYnl0ZXMgZm9yIGFsaWduZWQgb2Zmc2V0IGxvb2t1cCAqL1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWiBzaXplb2Yoc3RydWN0IHBjaV90cGhfY3B1X3N0KVxuJiM0MztcbiAjZW5kaWYgLyogX1VBUElMSU5VWF9QQ0lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uNjEwNzk1OTRhOTFmNWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICYjNDM7MTUzNCwzNSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZXZpY2UtbGV2ZWwgb3B0LWluIGZvciBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQuXG4mIzQzOyAqIFdoZW4gc2V0LCBhbGxvd3MgYWNjZXNzIHRvIFRQSF9DUFVfU1QgYW5kIFRQSF9TVF9DT05GSUcgZmVhdHVyZXMuXG4mIzQzOyAqIFJlcXVpcmVzIGdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIGVuYWJsZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRVx0MTNcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUcgLSBDb25maWd1cmUgUENJZSBUUEggU3RlZXJpbmcgVGFnIGVudHJpZXNcbiYjNDM7ICpcbiYjNDM7ICogUHJvdmlkZXMgdXNlcnNwYWNlIGludGVyZmFjZSB0byBjb25maWd1cmUgUENJZSBUUEggU1QgdGFibGUgZW50cmllcy5cbiYjNDM7ICpcbiYjNDM7ICogQGluZGV4OiBTdGFydCBlbnRyeSBvZmZzZXQgd2l0aGluIFNUIHRhYmxlXG4mIzQzOyAqIEBjb3VudDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGVudHJpZXMgdG8gY29uZmlndXJlXG4mIzQzOyAqIEBkYXRhX3VwdHI6IFVzZXJzcGFjZSBkYXRhIGJ1ZmZlciBmb3IgMTYtYml0IHJhdyBTVCB2YWx1ZXNcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHR3byBwcmVjb25kaXRpb25zOlxuJiM0MzsgKiAxLiBHbG9iYWwgZW5hYmxlX3Vuc2FmZV90cGggbW9kdWxlIHBhcmFtZXRlciBpcyBlbmFibGVkO1xuJiM0MzsgKiAyLiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEUgaGFzIGJlZW4gU0VUIG9uIHRoZSBkZXZpY2UgYmVmb3JlaGFuZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHXHQxNFxuJiM0MztcbiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyB7XG4mIzQzO1x0X191MTYgaW5kZXg7XG4mIzQzO1x0X191MTYgY291bnQ7XG4mIzQzO1x0X191MzIgcmVzZXJ2ZWQ7IC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8gKi9cbiYjNDM7XHRfX2FsaWduZWRfdTY0IGRhdGFfdXB0cjtcbiYjNDM7fTtcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfdHBoX2luaXQmIzM0OywKICAgICYjMzQ7cGNpX3RwaF9pbml0JiMzNDssCiAgICAmIzM0O2VuYWJsZV90cGgmIzM0OywKICAgICYjMzQ7dHBoX2NwdV9zdF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFBDSWUgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0IHRvIFZGSU8gUENJIGFuZCBhZGRzIGEgc3lzZnMgYXR0cmlidXRlIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gVGhlIFZGSU8gaW9jdGxzIGFuZCBjb25maWcgc3BhY2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCwgYnV0IHRoZXkgcmVxdWlyZSB0aGUgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgY29yZSBQQ0kgVFBIIGluaXRpYWxpemF0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIHByb2JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhODI1NDNhMWVkMDlhMjZkNjQ2NjU4MjAyNDM3ZDYxNDczNWI3Mzg3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjIgMDg6MTQ6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKaW5kZXggYjc2N2RiMmM1MmNiNzAuLmVkYzY0ZTRlNTY0MDRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCkBAIC03MDIsMyAmIzQzOzcwMiwyNyBAQCBEZXNjcmlwdGlvbjoKIAkJV2hlbiBwcmVzZW50IGFuZCB0aGUgdHNtLyBhdHRyaWJ1dGUgZGlyZWN0b3J5IGlzIHByZXNlbnQsIHRoZQogCQlhdXRoZW50aWNhdGVkIGF0dHJpYnV0ZSBpcyBhbiBhbGlhcyBmb3IgdGhlIGRldmljZSAmIzM5O2Nvbm5lY3QmIzM5OwogCQlzdGF0ZS4gU2VlIHRoZSAmIzM5O3RzbS9jb25uZWN0JiMzOTsgYXR0cmlidXRlIGZvciBtb3JlIGRldGFpbHMuCiYjNDM7CiYjNDM7V2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLyZsdDtyb290LXBvcnQtYmRmJmd0Oy90cGhfY3B1X3N0CiYjNDM7Q29udGFjdDoJbGludXgtcGNpQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJUmVhZC1vbmx5IGJpbmFyeSBhdHRyaWJ1dGUgb25seSBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB0aGF0CiYjNDM7CQlzdXBwb3J0IFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgaW1wbGVtZW50IHRoZSBBQ1BJIERTTQomIzQzOwkJbWV0aG9kIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gRmlsZSBwZXJtaXNzaW9uIGlzIHJvb3Qtb25seQomIzQzOwkJKDA0MDApLgomIzQzOwomIzQzOwkJVGhlIGJsb2IgaXMgYSBzZXF1ZW5jZSBvZiBmaXhlZC1zaXplIDgtYnl0ZSBlbnRyaWVzIGRlZmluZWQgYnkKJiM0MzsJCXN0cnVjdCBwY2lfdHBoX2NwdV9zdCBpbiB1YXBpL2xpbnV4L3BjaS5oOgomIzQzOwkJICBfX3U4IHZtX3N0OwomIzQzOwkJICBfX3U4IHBtX3N0OwomIzQzOwkJICBfX3UxNiB2bV94c3Q7CiYjNDM7CQkgIF9fdTE2IHBtX3hzdDsKJiM0MzsJCSAgX191MTYgcmVzZXJ2ZWQ7CiYjNDM7CiYjNDM7CQlFYWNoIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGEgbG9naWNhbCBDUFUgaW5kZXguIFNlZWsgb2Zmc2V0ID0KJiM0MzsJCWNwdV9pZCAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaLiBBcmJpdHJhcnkgdW5hbGlnbmVkIHBhcnRpYWwKJiM0MzsJCXJlYWRzIGFyZSBzdXBwb3J0ZWQ7IG5vIGFsaWdubWVudCByZXN0cmljdGlvbiBlbmZvcmNlZC4KJiM0MzsKJiM0MzsJCUZvciBDUFVzIG91dHNpZGUgY3B1X3Bvc3NpYmxlX21hc2sgb3Igb2ZmbGluZSBDUFVzLCB0aGUgZW50cnkKJiM0MzsJCWlzIGZpbGxlZCB3aXRoIGFsbCB6ZXJvcyB0byBhdm9pZCBicmVha2luZyBzZXF1ZW50aWFsIGR1bXAgdG9vbHMKJiM0MzsJCWxpa2UgY2F0L2hleGR1bXAgb24gc3BhcnNlIENQVSB0b3BvbG9naWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBkMzc4NjA4NDEyNjBjZS4uYWQ5ZTRlOGQzMjBiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCkBAIC0xODMyLDYgJiM0MzsxODMyLDkgQEAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGNpX2Rldl9hdHRyX2dyb3Vwc1tdID0gewogI2lmZGVmIENPTkZJR19QQ0lfVFNNCiAJJmFtcDtwY2lfdHNtX2F1dGhfYXR0cl9ncm91cCwKIAkmYW1wO3BjaV90c21fYXR0cl9ncm91cCwKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7CSZhbXA7cGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXAsCiAjZW5kaWYKIAlOVUxMLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggZThhZDI3YWJiMWNmZTQuLjFhYmU3ZmExZmNjN2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMTM3NSw2ICYjNDM7MTM3NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBjaV9wb3dlcl90IGFjcGlfcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzcG1fY3RybF9hdHRyX2dyb3VwOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXA7CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NSUQKIGJvb2wgcGNpX3VzZV9taWRfcG0odm9pZCk7CiBpbnQgbWlkX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3RwaC5jIGIvZHJpdmVycy9wY2kvdHBoLmMKaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjQ3NDAyZDRiODg5OThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS90cGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS90cGguYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tc2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtwY2kuaCYjMzQ7CiAKQEAgLTEzMCw4ICYjNDM7MTMxLDQ3IEBAIHN0YXRpYyBhY3BpX3N0YXR1cyB0cGhfaW52b2tlX2RzbShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBjcHVfdWlkLAogCiAJcmV0dXJuIEFFX09LOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHBoX2dldF9jcHVfc3RfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSwKJiM0MzsJCQkgICAgICAgdW5pb24gc3RfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcnA7CiYjNDM7CXUzMiBjcHVfdWlkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgJmFtcDtjcHVfdWlkKTsKJiM0MzsJaWYgKHJldCAhPSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpOwomIzQzOwlpZiAoIXJwIHx8ICFycC0mZ3Q7YnVzIHx8ICFycC0mZ3Q7YnVzLSZndDticmlkZ2UpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC0mZ3Q7YnVzLSZndDticmlkZ2UpOwomIzQzOwlpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsIGluZm8pICE9IEFFX09LKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KICNlbmRpZgogCiYjNDM7c3RhdGljIGJvb2wgdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQUNQSQomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpOwomIzQzOwlhY3BpX2hhbmRsZSBycF9hY3BpX2hhbmRsZTsKJiM0MzsKJiM0MzsJaWYgKCFycCB8fCAhcnAtJmd0O2J1cyB8fCAhcnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLSZndDtidXMtJmd0O2JyaWRnZSk7CiYjNDM7CXJldHVybiBhY3BpX2NoZWNrX2RzbShycF9hY3BpX2hhbmRsZSwgJmFtcDtwY2lfYWNwaV9kc21fZ3VpZCwgNywKJiM0MzsJCQkgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKiBVcGRhdGUgdGhlIFRQSCBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkIG9mIFRQSCBDb250cm9sIFJlZ2lzdGVyICovCiBzdGF0aWMgdm9pZCBzZXRfY3RybF9yZWdfcmVxX2VuKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCByZXFfdHlwZSkKIHsKQEAgLTE2NiwxMSAmIzQzOzIwNiwxNCBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogICovCiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl1MzIgcmVnOwomIzQzOwl1MzIgcmVnID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQomIzQzOwkJcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtyZWcpOwogCi0JcmV0dXJuIEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgcmVnKTsKJiM0MzsJcmV0dXJuIHJlZyAmYW1wOyBQQ0lfVFBIX0NBUF9MT0NfTUFTSzsKIH0KIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7CiAKQEAgLTE4NSw5ICYjNDM7MjI4LDYgQEAgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJLyogQ2hlY2sgU1QgdGFibGUgbG9jYXRpb24gZmlyc3QgKi8KIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCi0JLyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7CiAJaWYgKGxvYyAhPSBQQ0lfVFBIX0xPQ19DQVApCiAJCXJldHVybiAwOwogCkBAIC0yMzEsNiAmIzQzOzI3MSw0OSBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpOwogfQogCiYjNDM7c3RhdGljIGludCBnZXRfY3B1X2FsbF9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSwKJiM0MzsJCQkgICBzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgKnN0KQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0FDUEkKJiM0MzsJdW5pb24gc3RfaW5mbyBpbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB0cGhfZ2V0X2NwdV9zdF9pbmZvKHBkZXYsIGNwdSwgJmFtcDtpbmZvKTsKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQlzdC0mZ3Q7dm1fc3QgPSBpbmZvLnZtX3N0X3ZhbGlkID8gaW5mby52bV9zdCA6IDA7CiYjNDM7CQlzdC0mZ3Q7cG1fc3QgPSBpbmZvLnBtX3N0X3ZhbGlkID8gaW5mby5wbV9zdCA6IDA7CiYjNDM7CQlzdC0mZ3Q7dm1feHN0ID0gaW5mby52bV94c3RfdmFsaWQgPyBpbmZvLnZtX3hzdCA6IDA7CiYjNDM7CQlzdC0mZ3Q7cG1feHN0ID0gaW5mby5wbV94c3RfdmFsaWQgPyBpbmZvLnBtX3hzdCA6IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIC1FTk9ERVY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQUNQSQomIzQzOwl1bmlvbiBzdF9pbmZvIGluZm87CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHRwaF9nZXRfY3B1X3N0X2luZm8ocGRldiwgY3B1LCAmYW1wO2luZm8pOwomIzQzOwlpZiAocmV0ICE9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCByZXFfdHlwZSwgJmFtcDtpbmZvKTsKJiM0MzsKJiM0MzsJcGNpX2RiZyhwZGV2LCAmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAomIzQzOwkJKG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyAmIzM0O3ZvbGF0aWxlJiMzNDsgOiAmIzM0O3BlcnNpc3RlbnQmIzM0OywKJiM0MzsJCXJlcV90eXBlLCBjcHUsICp0YWcpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gLUVOT0RFVjsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQKICAqIHdpdGggYSBzcGVjaWZpYyBDUFUKQEAgLTI0Nyw0MCAmIzQzOzMzMCwzNSBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiB7Ci0jaWZkZWYgQ09ORklHX0FDUEkKLQlzdHJ1Y3QgcGNpX2RldiAqcnA7Ci0JYWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7Ci0JdW5pb24gc3RfaW5mbyBpbmZvOwotCXUzMiBjcHVfdWlkOwotCWludCByZXQ7Ci0KLQlyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgJmFtcDtjcHVfdWlkKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQlycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7Ci0JaWYgKCFycCB8fCAhcnAtJmd0O2J1cyB8fCAhcnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKQotCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJcmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSwgY3B1LCB0YWcpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpOwogCi0JcnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC0mZ3Q7YnVzLSZndDticmlkZ2UpOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlCiYjNDM7ICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKQomIzQzOyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seQomIzQzOyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkCiYjNDM7ICogQHRhZzogb3V0cHV0IHN0ZWVyaW5nIHRhZyBwb2ludGVyCiYjNDM7ICoKJiM0MzsgKiBVbmxpa2UgYXV0byBwY2llX3RwaF9nZXRfY3B1X3N0KCksIGNhbGxlciBtYW51YWxseSBwaWNrcyByZXF1ZXN0ZXIgdHlwZS4KJiM0MzsgKiBSZWplY3RzIEVYVCByZXF1ZXN0IGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJCSBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKJiM0Mzt7CiYjNDM7CXU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7CiAKLQlpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsICZhbXA7aW5mbykgIT0gQUVfT0spIHsKLQkJKnRhZyA9IDA7CiYjNDM7CWlmIChleHRlbmRlZCAmYW1wOyZhbXA7ICFwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCSp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSwgJmFtcDtpbmZvKTsKLQotCXBjaV9kYmcocGRldiwgJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAotCQkobWVtX3R5cGUgPT0gVFBIX01FTV9UWVBFX1ZNKSA/ICYjMzQ7dm9sYXRpbGUmIzM0OyA6ICYjMzQ7cGVyc2lzdGVudCYjMzQ7LAotCQljcHUsICp0YWcpOwogCi0JcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiAtRU5PREVWOwotI2VuZGlmCiYjNDM7CXJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpOwogfQotRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTsKJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpOwogCiAvKioKICAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnkKQEAgLTMxNiw4ICYjNDM7Mzk0LDYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQogCXNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7CiAKIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCS8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7CiAKIAlzd2l0Y2ggKGxvYykgewogCWNhc2UgUENJX1RQSF9MT0NfTVNJWDoKQEAgLTM2NiwyNyAmIzQzOzQ0MiwxMCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpOwogCi0vKioKLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZQotICogQHBkZXY6IFBDSSBkZXZpY2UKLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKLSAqCi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlCi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlCi0gKgotICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsCi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXIKLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQotICovCi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKJiM0MztzdGF0aWMgaW50IGVuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCB1OCByZXFfdHlwZSkKIHsKIAl1MzIgcmVnOwogCXU4IGRldl9tb2RlczsKLQl1OCBycF9yZXFfdHlwZTsKIAogCS8qIEhvbm9yICYjMzQ7bm90cGgmIzM0OyBrZXJuZWwgcGFyYW1ldGVyICovCiAJaWYgKHBjaV90cGhfZGlzYWJsZWQpCkBAIC00MDQsMjYgJiM0Mzs0NjMsMTIgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAJaWYgKCEoKDEgJmx0OyZsdDsgbW9kZSkgJmFtcDsgZGV2X21vZGVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwZGV2LSZndDt0cGhfbW9kZSA9IG1vZGU7Ci0KLQkvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7Ci0JaWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKQotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIOwotCWVsc2UKLQkJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7Ci0KLQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqLwotCWlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHsKLQkJcnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7Ci0KLQkJLyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqLwotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi0mZ3Q7dHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7Ci0JfQotCi0JaWYgKHBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKQomIzQzOwlpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCAmYW1wOyZhbXA7ICFwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXBkZXYtJmd0O3RwaF9tb2RlID0gbW9kZTsKJiM0MzsJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gcmVxX3R5cGU7CiYjNDM7CiAJLyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtJmd0O3RwaF9jYXAgJiM0MzsgUENJX1RQSF9DVFJMLCAmYW1wO3JlZyk7CiAKQEAgLTQzMSw3ICYjNDM7NDc2LDcgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAJcmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIHBkZXYtJmd0O3RwaF9tb2RlKTsKIAogCXJlZyAmYW1wOz0gflBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSzsKLQlyZWcgfD0gRklFTERfUFJFUChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSk7CiYjNDM7CXJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcmVxX3R5cGUpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ1RSTCwgcmVnKTsKIApAQCAtNDM5LDggJiM0Mzs0ODQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKJiM0MzsgKgomIzQzOyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKJiM0MzsgKiBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIG5vdC4gQWRkaXRpb25hbGx5IGRldGVybWluZSB3aGF0IHR5cGVzIG9mIHJlcXVlc3RzLAomIzQzOyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlcgomIzQzOyAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiYjNDM7ICovCiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IHBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOgomIzQzOwkJCQkJICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7CiYjNDM7CXJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaCk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvbgomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGUKJiM0MzsgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKQomIzQzOyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHkKJiM0MzsgKgomIzQzOyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGUKJiM0MzsgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdAomIzQzOyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKQomIzQzO3sKJiM0MzsJdTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlCiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC4KJiM0MzsgKi8KJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBkZXYtJmd0O3RwaF9yZXFfdHlwZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTsKJiM0MzsKIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOwpAQCAtNTEyLDE0ICYjNDM7NjEyLDEzMSBAQCB2b2lkIHBjaV9ub190cGgodm9pZCkKIAogdm9pZCBwY2lfdHBoX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiYjNDM7CXU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7CiAJaW50IG51bV9lbnRyaWVzOwogCXUzMiBzYXZlX3NpemU7CiYjNDM7CXUzMiByZWcgPSAwOwogCiAJcGRldi0mZ3Q7dHBoX2NhcCA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCk7CiAJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQogCQlyZXR1cm47CiAKJiM0MzsJLyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi8KJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtJmd0O3RwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsICZhbXA7cmVnKTsKJiM0MzsJaWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKQomIzQzOwkJdHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDsKJiM0MzsJZWxzZQomIzQzOwkJdHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7CiYjNDM7CiYjNDM7CS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovCiYjNDM7CWlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHsKJiM0MzsJCXJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpOwomIzQzOwkJLyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqLwomIzQzOwkJdHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkgewomIzQzOwkJcGRldi0mZ3Q7dHBoX2NhcCA9IDA7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGRldi0mZ3Q7dHBoX2V4dF9zdXBwb3J0ID0gISEodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpOwomIzQzOwogCW51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7CiAJc2F2ZV9zaXplID0gc2l6ZW9mKHUzMikgJiM0MzsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTsKIAlwY2lfYWRkX2V4dF9jYXBfc2F2ZV9idWZmZXIocGRldiwgUENJX0VYVF9DQVBfSURfVFBILCBzYXZlX3NpemUpOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICogQHdhbnRfZXh0OiBmYWxzZSAtIGNoZWNrIFRQSCBjYXAgZXhpc3RzOyB0cnVlIC0gY2hlY2sgRVhUX1RQSCBzdXBwb3J0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgb24gbWF0Y2hlZCBjb25kaXRpb24sIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KQomIzQzO3sKJiM0MzsJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXdhbnRfZXh0KQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCB0cGhfY3B1X3N0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZiwKJiM0MzsJCQkgICAgICAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTsKJiM0MzsJY29uc3Qgc2l6ZV90IGVudHJ5X3N6ID0gUENJX1RQSF9DUFVfU1RfRU5UUllfU1o7CiYjNDM7CWNvbnN0IHNpemVfdCB0b3RhbF9zaXplID0gbnJfY3B1X2lkcyAqIGVudHJ5X3N6OwomIzQzOwlzaXplX3QgY29waWVkID0gMDsKJiM0MzsJbG9mZl90IHBvcyA9IG9mZjsKJiM0MzsKJiM0MzsJaWYgKHBvcyAmZ3Q7PSB0b3RhbF9zaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgdG90YWxfc2l6ZSAtIHBvcyk7CiYjNDM7CiYjNDM7CXdoaWxlIChjb3BpZWQgJmx0OyBjb3VudCkgewomIzQzOwkJdW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejsKJiM0MzsJCXNpemVfdCBlbnRyeV9vZmYgPSBwb3MgJSBlbnRyeV9zejsKJiM0MzsJCXNpemVfdCByZW1haW4gPSBlbnRyeV9zeiAtIGVudHJ5X29mZjsKJiM0MzsJCXNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7CiYjNDM7CQlzdHJ1Y3QgcGNpX3RwaF9jcHVfc3Qgc3QgPSB7MH07CiYjNDM7CiYjNDM7CQlpZiAoY3B1X3Bvc3NpYmxlKGNwdV9pZHgpKQomIzQzOwkJCWdldF9jcHVfYWxsX3N0KHBkZXYsIGNwdV9pZHgsICZhbXA7c3QpOwomIzQzOwomIzQzOwkJbWVtY3B5KGJ1ZiAmIzQzOyBjb3BpZWQsIChjaGFyICopJmFtcDtzdCAmIzQzOyBlbnRyeV9vZmYsIGNodW5rKTsKJiM0MzsKJiM0MzsJCWNvcGllZCAmIzQzOz0gY2h1bms7CiYjNDM7CQlwb3MgJiM0Mzs9IGNodW5rOwomIzQzOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvcGllZDsKJiM0Mzt9CiYjNDM7c3RhdGljIEJJTl9BVFRSKHRwaF9jcHVfc3QsIDA0MDAsIHRwaF9jcHVfc3RfcmVhZCwgTlVMTCwgMCk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCB0cGhfY3B1X3N0X2Jpbl9hdHRyc1tdID0gewomIzQzOwkmYW1wO2Jpbl9hdHRyX3RwaF9jcHVfc3QsCiYjNDM7CU5VTEwsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsIGludCBuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5yX2NwdV9pZHMgKiBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVtb2RlX3QgdHBoX2NwdV9zdF9hdHRyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphLCBpbnQgbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihrb2JqX3RvX2Rldihrb2JqKSk7CiYjNDM7CWJvb2wgaXNfcm9vdF9wb3J0ID0gcGNpX2lzX3BjaWUocGRldikgJmFtcDsmYW1wOwomIzQzOwkJCQlwY2lfcGNpZV90eXBlKHBkZXYpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQ7CiYjNDM7CXUzMiBkZXZjYXAyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFpc19yb290X3BvcnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgJmFtcDtkZXZjYXAyKTsKJiM0MzsJaWYgKCEoZGV2Y2FwMiAmYW1wOyBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCF0cGhfZHNtX3N1cHBvcnRlZChwZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gYS0mZ3Q7YXR0ci5tb2RlOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjaWVfdHBoX2NwdV9zdF9hdHRyX2dyb3VwID0gewomIzQzOwkuYmluX2F0dHJzID0gdHBoX2NwdV9zdF9iaW5fYXR0cnMsCiYjNDM7CS5iaW5fc2l6ZSA9IHRwaF9jcHVfc3RfYmluX3NpemUsCiYjNDM7CS5pc19iaW5fdmlzaWJsZSA9IHRwaF9jcHVfc3RfYXR0cl9pc192aXNpYmxlLAomIzQzO307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKaW5kZXggMGM3NzEwNjRjMGI4NDQuLjZkNzM2Njg0NTljZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jCkBAIC02MCw2ICYjNDM7NjAsMTIgQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDsKIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgJiMzNDtEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuJiMzNDspOwogCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzO3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoOwomIzQzO21vZHVsZV9wYXJhbShlbmFibGVfdW5zYWZlX3RwaCwgYm9vbCwgMDQ0NCk7CiYjNDM7TU9EVUxFX1BBUk1fREVTQyhlbmFibGVfdW5zYWZlX3RwaCwgJiMzNDtFbmFibGUgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQuIEl0IG1heSBicmVhayBwbGF0Zm9ybSBpc29sYXRpb24uIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRoaXMgaXMgZm9yLCBzdGVwIGF3YXkuIChkZWZhdWx0OiBmYWxzZSkmIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3dpdGNoIChwZGV2LSZndDt2ZW5kb3IpIHsKQEAgLTI1NywxMiAmIzQzOzI2MywxNyBAQCBzdGF0aWMgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAlib29sIGlzX2Rpc2FibGVfdmdhID0gdHJ1ZTsKJiM0MzsJYm9vbCBpc19lbmFibGVfdW5zYWZlX3RwaCA9IGZhbHNlOwogCiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQQogCWlzX2Rpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7CiAjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7CWlzX2VuYWJsZV91bnNhZmVfdHBoID0gZW5hYmxlX3Vuc2FmZV90cGg7CiYjNDM7I2VuZGlmCiAKLQl2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMobm9pbnR4bWFzaywgaXNfZGlzYWJsZV92Z2EsIGRpc2FibGVfaWRsZV9kMyk7CiYjNDM7CXZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzLAomIzQzOwkJCQkgaXNfZW5hYmxlX3Vuc2FmZV90cGgpOwogCiAJLyogUmVnaXN0ZXIgYW5kIHNjYW4gZm9yIGRldmljZXMgKi8KIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbXA7dmZpb19wY2lfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCmluZGV4IGExMGVkNzMzZjBlM2FmLi4xMGY0ZTlmYWJlYTdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92ZmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtMTA4NSw2ICYjNDM7MTA4NiwxMTggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQogCXJldHVybiAwOwogfQogCiYjNDM7LyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovCiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpOwomIzQzOwlwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7CiYjNDM7CiYjNDM7CXBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NUUkwsIEFMTF9WSVJULCBBTExfV1JJVEUpOwomIzQzOwomIzQzOwkvKiBQZXIgUENJIHNwZWNpZmljYXRpb246IFRoZXJlIGlzIGFuIHVwcGVyIGxpbWl0IG9mIDY0IGVudHJpZXMKJiM0MzsJICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZAomIzQzOwkgKiBDYXBhYmlsaXR5IHN0cnVjdHVyZS4KJiM0MzsJICogQW5kIHRoZSBwY2lfZXh0X2NhcF9sZW5ndGhbUENJX0VYVF9DQVBfSURfVFBIXSBpcyAweEZGLCBzbyB0aGUKJiM0MzsJICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDY0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXBfc2V0dyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GICYjNDM7IGkgKiBzaXplb2YodTE2KSwKJiM0MzsJCSAgICAgICAodTE2KUFMTF9WSVJULCAodTE2KUFMTF9XUklURSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3RwaF9tYXNrX2V4dF90cGhfYml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICAgaW50IHBvcykKJiM0Mzt7CiYjNDM7CV9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgdmFsOwomIzQzOwomIzQzOwlpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCB0cnVlKSkgewomIzQzOwkJdmFsID0gbGUzMl90b19jcHUoKnZwdHIpOwomIzQzOwkJdmFsICZhbXA7PSB+UENJX1RQSF9DQVBfRVhUX1RQSDsKJiM0MzsJCSp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKTsKJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiYjNDM7CQkJCSBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sCiYjNDM7CQkJCSBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlcV9lbl9ieXRlID0gUENJX1RQSF9DVFJMICYjNDM7IDE7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi0mZ3Q7cGRldjsKJiM0MzsJX19sZTMyIG9yZ192YWwgPSAwOwomIzQzOwlib29sIGV4dGVuZGVkOwomIzQzOwl1OCBtb2RlLCByZXE7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CXUxNiBzdGFydDsKJiM0MzsJdTMyIGRhdGE7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX3Blcm1pdCkKJiM0MzsJCXJldHVybiBjb3VudDsKJiM0MzsKJiM0MzsJZG93bl93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogQmFjayB1cCB0aGUgb3JpZ2luYWwgdmFsdWVzIGluIG9yZGVyIHJvbGxiYWNrIHdoZW4gZmFpbCAqLwomIzQzOwlpZiAob2Zmc2V0ICZsdDs9IHJlcV9lbl9ieXRlICZhbXA7JmFtcDsgb2Zmc2V0ICYjNDM7IGNvdW50ICZndDsgcmVxX2VuX2J5dGUpCiYjNDM7CQl2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LAomIzQzOwkJCQkJICZhbXA7b3JnX3ZhbCk7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCB2YWwpOwomIzQzOwlpZiAocmV0ICE9IGNvdW50KSB7CiYjNDM7CQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2tpcCBpZiB3cml0ZSByYW5nZSBkb2VzIG5vdCBjb3ZlciBSZXF1ZXN0ZXIgRW5hYmxlIGJ5dGUgKi8KJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IHJlcV9lbl9ieXRlIHx8IG9mZnNldCAmIzQzOyBjb3VudCAmbHQ7PSByZXFfZW5fYnl0ZSkgewomIzQzOwkJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LAomIzQzOwkJCQkJICBvcmdfdmFsKTsKJiM0MzsJCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpOwomIzQzOwlkYXRhID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7CiYjNDM7CW1vZGUgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIGRhdGEpOwomIzQzOwlyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBkYXRhKTsKJiM0MzsKJiM0MzsJaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkgewomIzQzOwkJZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7CiYjNDM7CQlyZXQgPSBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQocGRldiwgbW9kZSwgZXh0ZW5kZWQpOwomIzQzOwkJaWYgKCFyZXQgJmFtcDsmYW1wOyB2ZGV2LSZndDt0cGhfc3Rfc2hhZG93KSB7CiYjNDM7CQkJZm9yIChpID0gMDsgaSAmbHQ7IHZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQkJcGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGksCiYjNDM7CQkJCQkJICAgICAgdmRldi0mZ3Q7dHBoX3N0X3NoYWRvd1tpXSk7CiYjNDM7CQl9CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwKJiM0MzsJCQkJCQkgIG9mZnNldCwgb3JnX3ZhbCk7CiYjNDM7CX0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHsKJiM0MzsJCXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwKJiM0MzsJCQkJCSAgb3JnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAvKgogICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzCiAgKi8KQEAgLTExMDAsNiAmIzQzOzEyMTMsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZCkKIAogCWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTsKIAlmcmVlX3Blcm1fYml0cygmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7CiYjNDM7CWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTsKIH0KIAogaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKQpAQCAtMTEyMCw2ICYjNDM7MTIzNCw4IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZCkKIAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KIAlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7CiAJcmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pOwomIzQzOwlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7CiYjNDM7CWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlOwogCWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTsKIAllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlOwogCkBAIC0xNDUwLDYgJiM0MzsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG8KIAkJYnl0ZSAmYW1wOz0gUENJX0RQQV9DQVBfU1VCU1RBVEVfTUFTSzsKIAkJcmV0dXJuIFBDSV9EUEFfQkFTRV9TSVpFT0YgJiM0MzsgYnl0ZSAmIzQzOyAxOwogCWNhc2UgUENJX0VYVF9DQVBfSURfVFBIOgomIzQzOwkJaWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKQomIzQzOwkJCXJldHVybiAwOwogCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtkd29yZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTsKQEAgLTE3MDEsNiAmIzQzOzE4MTksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJcmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEggJmFtcDsmYW1wOyAhaGlkZGVuKQomIzQzOwkJCXZmaW9fdHBoX21hc2tfZXh0X3RwaF9iaXQodmRldiwgZXBvcyk7CiAKIAkJLyoKIAkJICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggYTI4ZjFlOTkzNjJjMWUuLjFlNzA2YTY5MGRiZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwpAQCAtMjksNiAmIzQzOzI5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11ZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2ktcDJwZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpCiAjaW5jbHVkZSAmbHQ7YXNtL2VlaC5oJmd0OwogI2VuZGlmCkBAIC00MSw2ICYjNDM7NDIsNyBAQAogc3RhdGljIGJvb2wgbm9pbnR4bWFzazsKIHN0YXRpYyBib29sIGRpc2FibGVfdmdhOwogc3RhdGljIGJvb2wgZGlzYWJsZV9pZGxlX2QzOwomIzQzO3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoOwogCiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9ldmVudGZkX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQogewpAQCAtNTMxLDYgJiM0Mzs1MzMsNTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHZmaW9fcGNpX2NvcmVfcG1fb3BzID0gewogCQkJICAgTlVMTCkKIH07CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkgewomIzQzOwkJcmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpOwomIzQzOwl9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7CiYjNDM7CQlyZXQgPSBwY2lfbXNpeF92ZWNfY291bnQocGRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzID0gMDsKJiM0MzsJdmRldi0mZ3Q7dHBoX3N0X3NoYWRvdyA9IE5VTEw7CiYjNDM7CXZkZXYtJmd0O3RwaF9wZXJtaXQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFlbmFibGVfdW5zYWZlX3RwaCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2ZGV2LSZndDt0cGhfc3RfZW50cmllcyA9IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZSh2ZGV2KTsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzKSB7CiYjNDM7CQl2ZGV2LSZndDt0cGhfc3Rfc2hhZG93ID0ga2NhbGxvYyh2ZGV2LSZndDt0cGhfc3RfZW50cmllcywgc2l6ZW9mKHUxNiksCiYjNDM7CQkJCQkgICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJaWYgKCF2ZGV2LSZndDt0cGhfc3Rfc2hhZG93KQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3BjaV90cGhfZGVpbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CWtmcmVlKHZkZXYtJmd0O3RwaF9zdF9zaGFkb3cpOwomIzQzOwl2ZGV2LSZndDt0cGhfc3Rfc2hhZG93ID0gTlVMTDsKJiM0MzsJdmRldi0mZ3Q7dHBoX3N0X2VudHJpZXMgPSAwOwomIzQzOwl2ZGV2LSZndDt0cGhfcGVybWl0ID0gZmFsc2U7CiYjNDM7fQomIzQzOwogaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtJmd0O3BkZXY7CkBAIC01NTcsNiAmIzQzOzYwNSwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKIAogCXZkZXYtJmd0O3Jlc2V0X3dvcmtzID0gIXJldDsKJiM0MzsKJiM0MzsJLyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovCiYjNDM7CXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CXJldCA9IHZmaW9fcGNpX3RwaF9pbml0KHZkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CiYjNDM7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpOwogCWlmICghdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKQpAQCAtNjE0LDYgJiM0Mzs2NjksNyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogb3V0X2ZyZWVfc3RhdGU6CiAJa2ZyZWUodmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKTsKIAl2ZGV2LSZndDtwY2lfc2F2ZWRfc3RhdGUgPSBOVUxMOwomIzQzOwl2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpOwogb3V0X2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIG91dF9wb3dlcjoKQEAgLTY4Miw2ICYjNDM7NzM4LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWtmcmVlKHZkZXYtJmd0O3JlZ2lvbik7CiAJdmRldi0mZ3Q7cmVnaW9uID0gTlVMTDsgLyogZG9uJiMzOTt0IGtyZWFsbG9jIGEgZnJlZWQgcG9pbnRlciAqLwogCiYjNDM7CS8qIFJlc2V0IFRQSCBzdGF0dXMgb24gc2Vzc2lvbiBleGl0ICovCiYjNDM7CXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CXZmaW9fcGNpX3RwaF9kZWluaXQodmRldik7CiAJdmZpb19jb25maWdfZnJlZSh2ZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBQQ0lfU1REX05VTV9CQVJTOyBpJiM0MzsmIzQzOykgewpAQCAtMTU1NCw2ICYjNDM7MTYxMyw5NSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJCSAgICB1MzIgZmxhZ3MsIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZW5hYmxlX3Vuc2FmZV90cGgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfcGVybWl0KQomIzQzOwkJdmRldi0mZ3Q7dHBoX3Blcm1pdCA9IDE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnKAomIzQzOwkJCXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBfX3VzZXIgKmFyZywKJiM0MzsJCQlzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIGNvbmZpZzsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl2b2lkIF9fdXNlciAqdXB0cjsKJiM0MzsJaW50IGksIGlkeCwgcmV0OwomIzQzOwlzaXplX3Qgc3o7CiYjNDM7CXUxNiAqc3RzOwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZV91bnNhZmVfdHBoKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZihjb25maWcpKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfcGVybWl0IHx8ICF2ZGV2LSZndDt0cGhfc3Rfc2hhZG93KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2NvbmZpZywgYXJnLCBzaXplb2YoY29uZmlnKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJaWYgKGNvbmZpZy5jb3VudCA9PSAwIHx8IGNvbmZpZy5yZXNlcnZlZCAhPSAwIHx8CiYjNDM7CQljb25maWcuaW5kZXggJmd0Oz0gdmRldi0mZ3Q7dHBoX3N0X2VudHJpZXMgfHwKJiM0MzsJCWNvbmZpZy5jb3VudCAmZ3Q7IHZkZXYtJmd0O3RwaF9zdF9lbnRyaWVzIC0gY29uZmlnLmluZGV4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXVwdHIgPSB1NjRfdG9fdXNlcl9wdHIoY29uZmlnLmRhdGFfdXB0cik7CiYjNDM7CXN0cyA9IG1lbWR1cF9hcnJheV91c2VyKHVwdHIsIGNvbmZpZy5jb3VudCwgc2l6ZW9mKHUxNikpOwomIzQzOwlzeiA9IGNvbmZpZy5jb3VudCAqIHNpemVvZih1MTYpOwomIzQzOwlpZiAoSVNfRVJSKHN0cykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihzdHMpOwomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3VubG9ja19tZW1vcnk7CiYjNDM7CiYjNDM7CWlmIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHBkZXYpID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpCiYjNDM7CQlnb3RvIHVwZGF0ZV9zaGFkb3c7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb25maWcuY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZHggPSBjb25maWcuaW5kZXggJiM0MzsgaTsKJiM0MzsJCXJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHN0c1tpXSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcm9sbGJhY2s7CiYjNDM7CX0KJiM0MzsKJiM0Mzt1cGRhdGVfc2hhZG93OgomIzQzOwltZW1jcHkoJmFtcDt2ZGV2LSZndDt0cGhfc3Rfc2hhZG93W2NvbmZpZy5pbmRleF0sIHN0cywgc3opOwomIzQzOwlyZXQgPSAwOwomIzQzOwlnb3RvIG91dF91bmxvY2tfbWVtb3J5OwomIzQzOwomIzQzO3JvbGxiYWNrOgomIzQzOwl3aGlsZSAoaS0tICZndDsgMCkgewomIzQzOwkJaWR4ID0gY29uZmlnLmluZGV4ICYjNDM7IGk7CiYjNDM7CQlwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgaWR4LCB2ZGV2LSZndDt0cGhfc3Rfc2hhZG93W2lkeF0pOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9ja19tZW1vcnk6CiYjNDM7CXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwomIzQzOwlrZnJlZShzdHMpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJCQl2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opCiB7CkBAIC0xNTcyLDYgJiM0MzsxNzIwLDExIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiAJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6CiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFOgomIzQzOwkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlKHZkZXYsIGZsYWdzLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHOgomIzQzOwkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnKHZkZXYsIGZsYWdzLAomIzQzOwkJCQkJCQkgICBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CkBAIC0yNjE1LDExICYjNDM7Mjc2OCwxMyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0KQogfQogCiB2b2lkIHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhib29sIGlzX25vaW50eG1hc2ssIGJvb2wgaXNfZGlzYWJsZV92Z2EsCi0JCQkgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMykKJiM0MzsJCQkgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMywKJiM0MzsJCQkgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKQogewogCW5vaW50eG1hc2sgPSBpc19ub2ludHhtYXNrOwogCWRpc2FibGVfdmdhID0gaXNfZGlzYWJsZV92Z2E7CiAJZGlzYWJsZV9pZGxlX2QzID0gaXNfZGlzYWJsZV9pZGxlX2QzOwomIzQzOwllbmFibGVfdW5zYWZlX3RwaCA9IGlzX2VuYWJsZV91bnNhZmVfdHBoOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAppbmRleCBiZTY4Y2QxN2YyZjgzMy4uNTkxN2EwNjk0YzFkNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKICAqLwogI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0gKICNkZWZpbmUgTElOVVhfUENJX1RQSF9ICiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwogCiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudApAQCAtMjYsMTAgJiM0MzsyNywxNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCWVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpOwomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJCSBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7CiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpOwomIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKTsKJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQpAQCAtMzgsOSAmIzQzOzQ1LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKIHsgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MzsJCQkJYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsCiYjNDM7CQkJCQkgICBib29sIGV4dGVuZGVkKQomIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dCkKJiM0Mzt7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDJjNDQ1NDU4M2MxMTViLi4yODVjMGYwMDg4MmUwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC00NzEsNyAmIzQzOzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHsKIAl1bnNpZ25lZCBpbnQJYXRzX2VuYWJsZWQ6MTsJCS8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovCiAJdW5zaWduZWQgaW50CXBhc2lkX2VuYWJsZWQ6MTsJLyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovCiAJdW5zaWduZWQgaW50CXByaV9lbmFibGVkOjE7CQkvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovCi0JdW5zaWduZWQgaW50CXRwaF9lbmFibGVkOjE7CQkvKiBUTFAgUHJvY2Vzc2luZyBIaW50cyAqLwogCXVuc2lnbmVkIGludAlmbV9lbmFibGVkOjE7CQkvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovCiAJdW5zaWduZWQgaW50CWlzX21hbmFnZWQ6MTsJCS8qIE1hbmFnZWQgdmlhIGRldnJlcyAqLwogCXVuc2lnbmVkIGludAlpc19tc2lfbWFuYWdlZDoxOwkvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqLwpAQCAtNTg5LDcgJiM0Mzs1ODgsMTAgQEAgc3RydWN0IHBjaV9kZXYgewogCXU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi8KIAogI2lmZGVmIENPTkZJR19QQ0lFX1RQSAotCXUxNgkJdHBoX2NhcDsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX2NhcDoxNDsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX2V4dF9zdXBwb3J0OjE7IC8qIEluZGljYXRlIHdoZXRoZXIgRXh0ZW5kZWQgVFBICiYjNDM7CQkJCQkgICAgKiByZXF1ZXN0ZXIgaXMgc3VwcG9ydGVkICovCiYjNDM7CXUxNgkJdHBoX2VuYWJsZWQ6MTsJLyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqLwogCXU4CQl0cGhfbW9kZTsJLyogVFBIIG1vZGUgKi8KIAl1OAkJdHBoX3JlcV90eXBlOwkvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaAppbmRleCA1ZmM2Y2U0ZGQ3ODYxNi4uNTI3Yzg0ZjA0MmFhNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJYm9vbAkJCXBtX2ludHhfbWFza2VkOjE7CiAJYm9vbAkJCXBtX3J1bnRpbWVfZW5nYWdlZDoxOwogCWJvb2wJCQlzcmlvdl9hY3RpdmU7CiYjNDM7CWJvb2wJCQl0cGhfcGVybWl0OwogCXN0cnVjdCBwY2lfc2F2ZWRfc3RhdGUJKnBjaV9zYXZlZF9zdGF0ZTsKIAlzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlCSpwbV9zYXZlOwogCWludAkJCWlvZXZlbnRmZHNfbnI7CkBAIC0xNDMsNiAmIzQzOzE0NCw4IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCW5iOwogCXN0cnVjdCByd19zZW1hcGhvcmUJbWVtb3J5X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAlkbWFidWZzOwomIzQzOwl1MTYJCQkqdHBoX3N0X3NoYWRvdzsKJiM0MzsJdTE2CQkJdHBoX3N0X2VudHJpZXM7CiB9OwogCiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHsKQEAgLTE1OCw3ICYjNDM7MTYxLDggQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHZmaW9fcGNpX3JlZ29wcyAqb3BzLAogCQkJCSAgICAgIHNpemVfdCBzaXplLCB1MzIgZmxhZ3MsIHZvaWQgKmRhdGEpOwogdm9pZCB2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMoYm9vbCBub2ludHhtYXNrLCBib29sIGlzX2Rpc2FibGVfdmdhLAotCQkJICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMpOwomIzQzOwkJCSAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLAomIzQzOwkJCSAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpOwogdm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7CiBpbnQgdmZpb19wY2lfY29yZV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7CiB2b2lkIHZmaW9fcGNpX2NvcmVfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oCmluZGV4IDRmMTUwMDI4OTY1ZDhiLi41YzRlYTQ0ZDY2ZDIwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaApAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNkZWZpbmUgX1VBUElMSU5VWF9QQ0lfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsJLyogVGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKIC8qCiAgKiBUaGUgUENJIGludGVyZmFjZSB0cmVhdHMgbXVsdGktZnVuY3Rpb24gZGV2aWNlcyBhcyBpbmRlcGVuZGVudApAQCAtNDYsNCAmIzQzOzQ3LDE5IEBAIGVudW0gcGNpX2hvdHBsdWdfZXZlbnQgewogCVBDSV9IT1RQTFVHX0NBUkRfTk9UX1BSRVNFTlQsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBQQ0llIFRQSCBzeXNmcyBiaW5hcnkgZW50cnkgZm9yIENQVS10by1TVCBtYXBwaW5nCiYjNDM7ICogU3lzZnMgZmlsZTogL3N5cy9idXMvcGNpL2RldmljZXMvJmx0O0JERiZndDsvdHBoX2NwdV9zdAomIzQzOyAqIEVhY2ggZW50cnkgaXMgOCBieXRlcyBhbGlnbmVkLCBzZWVrIG9mZnNldCA9IGNwdV9pZCAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaCiYjNDM7ICovCiYjNDM7c3RydWN0IHBjaV90cGhfY3B1X3N0IHsKJiM0MzsJX191OCAgdm1fc3Q7ICAgICAgICAvKiBWb2xhdGlsZSBNZW1vcnkgU3RlZXJpbmcgVGFnICgxIGJ5dGUpICovCiYjNDM7CV9fdTggIHBtX3N0OyAgICAgICAgLyogUGVyc2lzdGVudCBNZW1vcnkgU3RlZXJpbmcgVGFnICgxIGJ5dGUpICovCiYjNDM7CV9fdTE2IHZtX3hzdDsgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IEV4dGVuZGVkIFN0ZWVyaW5nIFRhZyAoMiBieXRlcykgKi8KJiM0MzsJX191MTYgcG1feHN0OyAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovCiYjNDM7CV9fdTE2IHJlc2VydmVkOyAgICAgLyogUGFkZGluZyB0byA4IGJ5dGVzIGZvciBhbGlnbmVkIG9mZnNldCBsb29rdXAgKi8KJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOyNkZWZpbmUgUENJX1RQSF9DUFVfU1RfRU5UUllfU1ogc2l6ZW9mKHN0cnVjdCBwY2lfdHBoX2NwdV9zdCkKJiM0MzsKICNlbmRpZiAvKiBfVUFQSUxJTlVYX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAppbmRleCA1ZGU2MThhM2E1ZWVlZS4uNjEwNzk1OTRhOTFmNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaApAQCAtMTUzNCw2ICYjNDM7MTUzNCwzNSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHsKICAqLwogI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTIKIAomIzQzOy8qCiYjNDM7ICogRGV2aWNlLWxldmVsIG9wdC1pbiBmb3IgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0LgomIzQzOyAqIFdoZW4gc2V0LCBhbGxvd3MgYWNjZXNzIHRvIFRQSF9DUFVfU1QgYW5kIFRQSF9TVF9DT05GSUcgZmVhdHVyZXMuCiYjNDM7ICogUmVxdWlyZXMgZ2xvYmFsIGVuYWJsZV91bnNhZmVfdHBoIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgZW5hYmxlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRQkxMwomIzQzOwomIzQzOy8qKgomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJRyAtIENvbmZpZ3VyZSBQQ0llIFRQSCBTdGVlcmluZyBUYWcgZW50cmllcwomIzQzOyAqCiYjNDM7ICogUHJvdmlkZXMgdXNlcnNwYWNlIGludGVyZmFjZSB0byBjb25maWd1cmUgUENJZSBUUEggU1QgdGFibGUgZW50cmllcy4KJiM0MzsgKgomIzQzOyAqIEBpbmRleDogU3RhcnQgZW50cnkgb2Zmc2V0IHdpdGhpbiBTVCB0YWJsZQomIzQzOyAqIEBjb3VudDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGVudHJpZXMgdG8gY29uZmlndXJlCiYjNDM7ICogQGRhdGFfdXB0cjogVXNlcnNwYWNlIGRhdGEgYnVmZmVyIGZvciAxNi1iaXQgcmF3IFNUIHZhbHVlcwomIzQzOyAqCiYjNDM7ICogVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHR3byBwcmVjb25kaXRpb25zOgomIzQzOyAqIDEuIEdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQ7CiYjNDM7ICogMi4gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFIGhhcyBiZWVuIFNFVCBvbiB0aGUgZGV2aWNlIGJlZm9yZWhhbmQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUcJMTQKJiM0MzsKJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIHsKJiM0MzsJX191MTYgaW5kZXg7CiYjNDM7CV9fdTE2IGNvdW50OwomIzQzOwlfX3UzMiByZXNlcnZlZDsgLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVybyAqLwomIzQzOwlfX2FsaWduZWRfdTY0IGRhdGFfdXB0cjsKJiM0Mzt9OwomIzQzOwogLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovCiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBQQ0llIFRQSCBWRklPIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBpbnRyb2R1Y2VzIFBDSWUgVFBIIHN1cHBvcnQgd2l0aGluIFZGSU8uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYCB3aGljaCBub3cgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBmb3IgcmV0cmlldmluZyBDUFUgU1QgaW5mb3JtYXRpb24sIGV4cGxpY2l0bHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIFRQSCwgYW5kIGV4cG9zZXMgdGhpcyBpbmZvcm1hdGlvbiB2aWEgdGhlIGB0cGhfY3B1X3N0YCBzeXNmcyBhdHRyaWJ1dGUuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KClRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgYXBwZWFycyBpbiB0aGUgVkZJTyBQQ0kgY29kZTogYHZmaW9fcGNpLmNgLCBgdmZpb19wY2lfY29uZmlnLmNgLCBhbmQgYHZmaW9fcGNpX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIFRQSCBzdXBwb3J0IGlzIGJlaW5nIGludGVncmF0ZWQsIGFuZCBpdCYjMzk7cyBjb250cm9sbGVkIGJ5IGEgbW9kdWxlIHBhcmFtZXRlciwgYGVuYWJsZV91bnNhZmVfdHBoYC4gVGhpcyBwYXJhbWV0ZXIgZmxhZ3MgYSBwb3RlbnRpYWwgcmlzayB3aXRoIGVuYWJsaW5nIHRoaXMgYmVoYXZpb3IsIHNvIGl0IGlzIG5lY2Vzc2FyeSB0byBjb25zaWRlciB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdXBwb3J0LiBOb3csIHRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhlc2UgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzOiBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFYCBhbmQgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJR2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHVzZXIgc3BhY2UuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhpcyBhbGwgcGxheSBvdXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IE9idmlvdXNseSwgVkZJTyBQQ0kgaXMgb25seSByZWFjaGFibGUgaWYgeW91IGhhdmUgYSBQQ0kgZGV2aWNlIHBhc3NlZCB0aHJvdWdoIGRpcmVjdGx5LiBBbHRlcm5hdGl2ZWx5LCBpZiBhIHVzZXIgbWFrZXMgdXNlIG9mIGB2ZmlvLXBjaWAgd2l0aCBhIGR1bW15IGRldmljZSwgb3IgYSB2aXJ0dWFsIGRldmljZSwgeW91IGNvdWxkIHRlc3QgdGhlIGNoYW5nZXMuCgpIb2xkIG9uLCB0aGlzIGBlbmFibGVfdW5zYWZlX3RwaGAgcGFyYW1ldGVyIGlzIHNwZWNpZmljIHRvIGB2ZmlvX3BjaWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKT2theSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBxdWlja2x5LiBBcmUgd2UgZXZlbiBidWlsZGluZyB0aGlzIHN0dWZmIGludG8gb3VyIGZ1enppbmcga2VybmVscz8gRmlyc3QsIGlzIGBDT05GSUdfUENJRV9UUEhgIGV2ZW4gZW5hYmxlZD8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0LiBXYWl0LCB0aGF0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vdCBhIG1vZHVsZSwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGRpcmVjdGx5LiBOZXh0LCBJIHNob3VsZCBjaGVjayB0aGF0IGBDT05GSUdfVkZJT19QQ0lgIGlzIGRlZmluaXRlbHkgZW5hYmxlZCwgYXMgdGhhdCYjMzk7cyB0aGUgY29yZSBkZXBlbmRlbmN5LiBUaW1lIHRvIGJyZWFrIG91dCB0aGUgdG9vbHMgYW5kIHJ1biBzb21lIHF1aWNrIGNvbmZpZyBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSUVfVFBIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1RMUCBQcm9jZXNzaW5nIEhpbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX1BDSUVfVFBIYCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgbGVnaXRpbWF0ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbiYjMzk7dCBpdD8gR29vZC4gSSBqdXN0IHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGNvbnRleHQgYmVmb3JlIG1vdmluZyBvbi4gTm93LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBDT05GSUdfVkZJT19QQ0lgLiBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgdGhlIGRlcGVuZGVuY3kgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSB0d28uIFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBoZXJlPyBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmU/IERvZXMgb25lIGltcGxpY2l0bHkgcmVxdWlyZSB0aGUgb3RoZXI/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGh5cG90aGVzZXMgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgSU9NTVUgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlIHBhc3N0aHJvdWdoIHNjZW5hcmlvcy4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDczCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIE5ldyBWRklPIElPQ1RMcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRWAgYW5kIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUdgIGlvY3Rscy4gVGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYCBmdW5jdGlvbiwgYW5kIGNydWNpYWxseSwgdGhleSBkZXBlbmQgb24gdGhlIGBlbmFibGVfdW5zYWZlX3RwaGAgbW9kdWxlIHBhcmFtZXRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiBzeXprYWxsZXIgZWFzaWx5IHJlYWNoIHRoaXMgbmV3IGNvZGU/JiMzNDsgVHlwaWNhbGx5LCBtb2R1bGUgcGFyYW1ldGVycyBpbiBzeXprYWxsZXIgcmVxdWlyZSBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCB3aGljaCBhZGRzIG92ZXJoZWFkLiBXZSBjb3VsZCB0cnkgc3lzZnMgYnV0IGl0IGlzIG5vdCBleHBvc2VkIHRoaXMgd2F5LCBzbyBpdCBpcyB1bmxpa2VseS4KCkJ1dCwgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcHJvbXB0IHJlbWluZHMgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb25jZXJucyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBIb3dldmVyLCBWRklPIFBDSSBfaXNfIHJlYWNoYWJsZSBpbiBRRU1VLCByaWdodD8gU3l6a2FsbGVyIGhhcyB0aGUgcHJpbWl0aXZlcyB0byBkbyB0aGF0IHdpdGggYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgc28gb24sIGFuZCBJIGtub3cgaXQgaGFzIGZ1enppbmcgY2FwYWJpbGl0aWVzIGZvciBgdmZpb2AuIEluIGZhY3QsIGl0IGhhcyAqZGVzY3JpcHRpb25zKiBmb3IgYHZmaW9gLgoKVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGB2ZmlvX3BjaWAgaXRzZWxmIGlzIGJlaW5nIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIuIElmIGl0IGlzLCBhbmQgdGhlc2UgbmV3IGlvY3RscyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBleGlzdGluZyBWRklPIGZ1enppbmcgc3RyYXRlZ3ksIHRoYXQgYWRkcyBzaWduaWZpY2FudCB2YWx1ZS4gSWYgaXQgaXNuJiMzOTt0LCB0aGUgZWZmb3J0IHdvdWxkIGJlIHdvcnRoIG1vcmUgZGlzY3Vzc2lvbiwgYXMgdGhlIGxpa2VsaWhvb2Qgb2YgaGl0dGluZyB0aGlzIGNvZGUgcGF0aCBkZWNyZWFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTU4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9taWdybl9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTg4LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaGlzaV9hY2NfdmZpb19pb2N0bF9nZXRfcmVnaW9uLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYzoxNTg5Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTkwLVx0LnJlYWQgPSBoaXNpX2FjY192ZmlvX3BjaV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTYwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjA5LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYzoxNjEwOlx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjExLVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQyLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaXNtX3ZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYzozNDM6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQ0LVx0LnJlYWQgPSBpc21fdmZpb19wY2lfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTEzODY9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbWx4NXZmX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzkzLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYzoxMzk0Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzk1LVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNzEtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBudmdyYWNlX2dwdV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMDcyOlx0LmRldmljZV9mZWF0dXJlXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNzMtXHQucmVhZFx0XHQ9IG52Z3JhY2VfZ3B1X3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfY29yZV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA5Ni1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwOTc6XHQuZGV2aWNlX2ZlYXR1cmVcdD0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA5OC1cdC5yZWFkXHRcdD0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM9MTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHBkc192ZmlvX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE5OC1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM6MTk5Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYy0yMDAtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTQxLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjE0MjpcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNDMtXHQucmVhZFx0XHQ9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNjM0PXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcoXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3MDU6aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNi1cdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzMxLX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3MzI6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3MzMtXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZpcnRpb3ZmX3ZmaW9fcGNpX2xtX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTEtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6OTI6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTMtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9MTA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZpcnRpb3ZmX3ZmaW9fcGNpX3RyYW5fbG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTMtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2aXJ0aW92Zl9wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjExNDpcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTUtXHQucmVhZCA9IHZpcnRpb3ZmX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNS1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxMzY6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTM3LVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM9NTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHhlX3ZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MjktXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYzo1MzA6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MzEtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD0xNzQ9bG9uZyB2ZmlvX3BjaV9jb3JlX2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc1LVx0XHR1bnNpZ25lZCBsb25nIGFyZyk7XG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaDoxNzY6aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc3LVx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZywgc2l6ZV90IGFyZ3N6KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIzMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUENJZSBUUEggQ29kZSBQYXRoIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHJlYWNoYWJsZS4gQnV0IHRoZXJlJiMzOTtzIHRoaXMgYGVuYWJsZV91bnNhZmVfdHBoYCBtb2R1bGUgcGFyYW1ldGVyIHRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuIEJ5IGRlZmF1bHQsIGl0JiMzOTtzIGBmYWxzZWAsIHdoaWNoIGlzIGEgcHJvYmxlbS4gU3l6a2FsbGVyIGNhbiYjMzk7dCBlYXNpbHkgZW5hYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIHVubGVzcyB0aGV5JiMzOTtyZSBpbiB0aGUgY29uZmlnIG9yIHdyaXRhYmxlIHZpYSBzeXNmcywgYW5kIHRoaXMgb25lIGlzIHJlYWQtb25seS4gV2UmIzM5O3JlIGV2YWx1YXRpbmcgaWYgdGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgKnNob3VsZCogYmUgZnV6emVkLCBhbmQgdGhpcyBsb29rcyB0cmlja3kuIElmIGl0IHJlcXVpcmVzIGEgbW9kdWxlIHBhcmFtZXRlciwgd2Ugc2hvdWxkIHByb2JhYmx5IG1lbnRpb24gaXQgaW4gdGhlIHJlYXNvbmluZy4KClRoZSBwcm9tcHQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciBkaXNhYmxlZCwgdGhlIGNvZGUgaXMgaW5kZWVkIHVucmVhY2hhYmxlLiBCdXQgaWYgd2UgKndhbnRlZCogdG8gZnV6eiBpdCwgd2UmIzM5O2QgbmVlZCB0byBlbmFibGUgdGhhdCBwYXJhbWV0ZXIgc29tZWhvdy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBkaXJlY3Qgd2F5IHRvIGRvIHRoYXQgaW4gdGhlIGBFbmFibGVDb25maWdzYC4KCk5vdywgdGhlcmUmIzM5O3MgYSBzeXNmcyBhdHRyaWJ1dGUsIGB0cGhfY3B1X3N0YCwgYWRkZWQgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYC4gSXQmIzM5O3MgZXhwb3NlZCBvbiBQQ0llIFJvb3QgUG9ydHMgd2l0aCBUUEggQ29tcGxldGVyIGNhcGFiaWxpdHkgYW5kIEFDUEkgRFNNIHN1cHBvcnQuIEluIFFFTVUsIGRvZXMgdGhlIFBDSWUgUm9vdCBQb3J0IHN1cHBvcnQgdGhpcz8gSXQgbWlnaHQgbm90LiBFdmVuIGlmIGl0IGRpZCwgdGhlIGB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZWAgZnVuY3Rpb24gY2hlY2tzIGZvciB0aGUgVFBIIENvbXBsZXRlciBjYXBhYmlsaXR5IGFuZCBBQ1BJIERTTSBzdXBwb3J0LiBJZiBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgdGhhdCwgdGhlIHN5c2ZzIGZpbGUgd29uJiMzOTt0IGJlIHZpc2libGUuCgpMb29raW5nIGF0IHRoZSBWRklPIFBDSSBwYXJ0LCBpZiBgZW5hYmxlX3Vuc2FmZV90cGhgIGlzIGZhbHNlLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGVgIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyB0aGUgaW9jdGwgd2lsbCBqdXN0IHJldHVybiBhbiBlcnJvci4gSW4gYHZmaW9fcGNpX2NvbmZpZy5jYCwgYHZkZXYtJmd0O3RwaF9wZXJtaXRgIGlzIG9ubHkgc2V0IGluIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZWAsIHdoaWNoIHJlcXVpcmVzIHRoZSBtb2R1bGUgcGFyYW1ldGVyLiBTbywgYWxsIHRoZSBWRklPIFRQSCBjb2RlIHBhdGhzIGFyZSBnYXRlZC4KClNpbmNlIGBlbmFibGVfdW5zYWZlX3RwaGAgaXMgcmVhZC1vbmx5IGFuZCBkZWZhdWx0cyB0byBmYWxzZSwgaXQgY2FuJiMzOTt0IGJlIGVuYWJsZWQgYXQgcnVudGltZS4gU3l6a2FsbGVyIGNhbiBwYXNzIGJvb3QgcGFyYW1ldGVycywgYnV0IG5vdCBpbiB0aGlzIGBzZXQtcmVzdWx0c2Agc2l0dWF0aW9uLiBJIGNhbiYjMzk7dCBldmVuIHRlbGwgU3l6a2FsbGVyIHRvIHBhc3MgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgLgoKSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBhIGRpc2FibGVkLWJ5LWRlZmF1bHQgbW9kdWxlIHBhcmFtZXRlciwgaXMgaXQgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDs/IFllcywgcHJldHR5IG11Y2gsIHVubGVzcyB0aGF0IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuIEJ1dCB3YWl0LCBgQ09ORklHX1BDSUVfVFBIYCBpcyBhIGNvbmZpZyBvcHRpb24sIHdlIGNhbiBlbmFibGUgaXQuLi4gaXMgaXQgc3RpbGwgd29ydGggZnV6emluZyB0aGVuPyBZZXMsIGJ1dCBvbmx5IGlmIHdlIGNhbiBmaW5kIGEgd2F5IHRvIHNwZWNpZnkgdGhlIHBhcmFtLgoKV2hhdCBpZiBgdmZpb19wY2lgIGlzIGJ1aWx0LWluPyBUaGVuIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAgY2FuIGJlIHBhc3NlZC4uLiBJZiBpdCYjMzk7cyBhIG1vZHVsZSwgaXQmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyLiBTaW5jZSB3ZSBjYW4mIzM5O3Qgc3BlY2lmeSBhIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIGhlcmUsIGl0JiMzOTtzIGEgYml0IG9mIGEgZGlsZW1tYS4KClN5emthbGxlciBkb2VzIGhhdmUgYGtlcm5lbF9jbWRsaW5lYCBpbiBpdHMgY29uZmlnLCBidXQgd2UgY2FuJiMzOTt0IHNldCB0aGF0IGhlcmUuIFRoZSBwcm9tcHQgaXMgc3RpbGwgcmVsZXZhbnQgdGhvdWdoOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7LiBXaXRob3V0IHRoYXQgcGFyYW1ldGVyLCBpdCAqaXMqIHVucmVhY2hhYmxlLCBidXQgd2UgY291bGQgdHJ5IG90aGVyIG1ldGhvZHMuCgpNYXliZSB3ZSBzaG91bGQgc2F5IGl0JiMzOTtzIGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGxldCB0aGUgc3l6a2FsbGVyIG1haW50YWluZXJzIGZpZ3VyZSBpdCBvdXQ/CgpXYWl0LCB3aGF0IGFib3V0IHRoZSBleHBvcnRlZCBzeW1ib2xzOiBgcGNpZV90cGhfZ2V0X2NwdV9zdGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cnlgLCBgcGNpZV9kaXNhYmxlX3RwaGAsIGBwY2llX2VuYWJsZV90cGhgLiBBcmUgdGhleSB1c2VkIGJ5IGFueSBvdGhlciBkcml2ZXJzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2llX2VuYWJsZV90cGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdD00OD1UbyBlbmFibGUgVFBIIGZvciBhIGRldmljZSwgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246OlxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC00OS1cbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q6NTA6ICBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0LTUxLVxuLS1cbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NTM9Q3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcbi0tXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0LTU4LVxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdDo1OTpgcGNpZV9lbmFibGVfdHBoKClgIGNoZWNrcyB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcyBhY3R1YWxseVxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC02MC1zdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcuIFRoZSBkZXZpY2UgZHJpdmVyIGNhbiBmaWd1cmUgb3V0XG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0PTYxPXdoaWNoIFRQSCBtb2RlIGlzIHN1cHBvcnRlZCBhbmQgY2FuIGJlIHByb3Blcmx5IGVuYWJsZWQgYmFzZWQgb24gdGhlXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0OjYyOnJldHVybiB2YWx1ZSBvZiBgcGNpZV9lbmFibGVfdHBoKClgLlxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC02My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xMTg0Mj1zdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTExODU4LVx0LyogRW5hYmxlIFRQSCBzdXBwb3J0IGFzIHBhcnQgb2YgSVJRIHJlcXVlc3QgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjExODU5Olx0cmMgPSBwY2llX2VuYWJsZV90cGgoYnAtXHUwMDNlcGRldiwgUENJX1RQSF9TVF9JVl9NT0RFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTExODYwLVx0aWYgKCFyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmM9MjU9c3RydWN0IG1seDVfc3QgKm1seDVfc3RfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU3LVx0LyogVGhlIE9TIGRvZXNuJiMzOTt0IHN1cHBvcnQgU1QgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYzo1ODpcdHJldCA9IHBjaWVfZW5hYmxlX3RwaChwZGV2LCBQQ0lfVFBIX1NUX0RTX01PREUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3BjaS90cGguYz00NDU9c3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNDg4LS8qKlxuZHJpdmVycy9wY2kvdHBoLmM6NDg5OiAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuZHJpdmVycy9wY2kvdHBoLmMtNDkwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNTAzLSAqL1xuZHJpdmVycy9wY2kvdHBoLmM6NTA0OmludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuZHJpdmVycy9wY2kvdHBoLmMtNTA1LXtcbi0tXG5kcml2ZXJzL3BjaS90cGguYy01MDktfVxuZHJpdmVycy9wY2kvdHBoLmM6NTEwOkVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcbmRyaXZlcnMvcGNpL3RwaC5jLTUxMS1cbmRyaXZlcnMvcGNpL3RwaC5jLTUxMi0vKipcbmRyaXZlcnMvcGNpL3RwaC5jOjUxMzogKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvblxuZHJpdmVycy9wY2kvdHBoLmMtNTE0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcbi0tXG5kcml2ZXJzL3BjaS90cGguYy01MTctICpcbmRyaXZlcnMvcGNpL3RwaC5jOjUxODogKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXG5kcml2ZXJzL3BjaS90cGguYy01MTktICogbWFudWFsbHkgaW5zdGVhZCBvZiBoYXJkd2FyZSBhdXRvLXNlbGVjdGlvbi4gUmVqZWN0cyBFWFRfVFBIIHJlcXVlc3Rcbi0tXG5kcml2ZXJzL3BjaS90cGguYy01MjMtICovXG5kcml2ZXJzL3BjaS90cGguYzo1MjQ6aW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpXG5kcml2ZXJzL3BjaS90cGguYy01MjUte1xuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTUyOS19XG5kcml2ZXJzL3BjaS90cGguYzo1MzA6RVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGhfZXhwbGljaXQpO1xuZHJpdmVycy9wY2kvdHBoLmMtNTMxLVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTEzMD1zdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMTc5LVx0XHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTE4MDpcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTE4MS1cdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdykge1xuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTMzPXZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDozNDppbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDozNTppbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC0zNi11OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD01ND1zdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo1NTpzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTYteyByZXR1cm4gLUVJTlZBTDsgfVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NTc6c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTU4LVx0XHRcdFx0XHQgICBib29sIGV4dGVuZGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM0NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgVFBIIFBhdGNoIGFuZCBSZWFjaGFiaWxpdHkgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGFjdHVhbGx5IHJlYWNoYWJsZSBieSBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBpbml0aWFsIGNvZGUgbW9kaWZpY2F0aW9ucyBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCDigJMgY2hhbmdlcyB0byBgdHBoLmNgLCBgdmZpb19wY2lfY29uZmlnLmNgLCBhbmQgYHZmaW9fcGNpX2NvcmUuY2AsIHBsdXMgdGhlIGFkZGl0aW9uIG9mIHNvbWUgbmV3IGZ1bmN0aW9ucyAoYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAsIGV0Yy4pIGFuZCBhIHN5c2ZzIGF0dHJpYnV0ZSAoYHRwaF9jcHVfc3RgKS4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBhY3R1YWxseSAqcnVuKj8mIzM0OyBUaGUgcGF0Y2ggbWVudGlvbnMgYGJueHRgIGFuZCBgbWx4NWAsIGJ1dCB0aG9zZSBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgc28gcHJvYmFibHkgbm90IHN5emthbGxlciYjMzk7cyB1c3VhbCBwbGF5Z3JvdW5kLgoKVGhlIFZGSU8gY29kZSBpcyBhIGJpZyBxdWVzdGlvbiBtYXJrLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzICptb3N0bHkqIHVucmVhY2hhYmxlIHVubGVzcyBgZW5hYmxlX3Vuc2FmZV90cGhgIGlzIHNldC4gVGhlIGAtRU9QTk9UU1VQUGAgcmV0dXJucywgdGhlIGB2ZGV2LSZndDt0cGhfcGVybWl0YCBjaGVjay4uLiBpdCBhbGwgcG9pbnRzIHRvIHRoYXQgYmVpbmcgdGhlIGdhdGVrZWVwZXIuIEFuZCB0aGUgc3lzZnMgYXR0cmlidXRlPyBUaGF0IGhhcyBtdWx0aXBsZSBjaGVja3M6IHdoZXRoZXIgdGhlIGRldmljZSBpcyBhIFJvb3QgUG9ydCwgaWYgaXQgc3VwcG9ydHMgVFBIIENvbXBsZXRlciwgYW5kIHdoZXRoZXIgdGhlIEFDUEkgRFNNIGlzIHByZXNlbnQuIFFFTVUgYW5kIEdDRSBvZnRlbiBoYXZlIGxpbWl0ZWQgY2FwYWJpbGl0aWVzIGluIHRoZXNlIGFyZWFzLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duOgoKKiAgICoqVkZJTzoqKiBWaXJ0dWFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBhIG1vZHVsZSBwYXJhbWV0ZXIuCiogICAqKlN5c2ZzIGF0dHJpYnV0ZToqKiBQcm9iYWJseSB1bnJlYWNoYWJsZSBiZWNhdXNlIHN5emthbGxlciBjYW4mIzM5O3QgaW5qZWN0IEFDUEkgRFNNcy4KKiAgICoqT3RoZXIgZnVuY3Rpb25zOioqIFRoZSBgcGNpX3RwaF9pbml0YCBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGluamVjdCB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGlzIGNvZGUgcmVhZHMgc29tZSBjb25maWcgc3BhY2UgYW5kIHNldHMgYSBmZXcgYml0cywgYnV0IG5vIHJlYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlIGlzIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCwgYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAgdGhhdCBjYW4gYmUgcmVhY2hlZCBpZiBgdmZpb19wY2lgIGlzIHVzZWQuCiogICAqKk1vZGlmaWVkIGBwY2llX2VuYWJsZV90cGhgOioqIFJlYWNoZWQgaWYgdGhlIGBibnh0YCBvciBgbWx4NWAgZHJpdmVycyBhcmUgbG9hZGVkLCBidXQgdW5saWtlbHkgaW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcyAqbmV3KiBWRklPIGZ1bmN0aW9uYWxpdHkuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIGdhdGVkIGJ5IGBlbmFibGVfdW5zYWZlX3RwaGAsIHRoaXMgaXMgYSB2YWxpZCBmZWF0dXJlLgoKVGhlcmVmb3JlLCBkZXNwaXRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGFuZCB0aGUgZGlmZmljdWx0eSBpbiByZWFjaGluZyBpdCAqZGlyZWN0bHkqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbmFsaXR5IGFuZCBtYXJrIGl0IGFzIGZ1enplci13b3J0aHkuIFRoZSByZWFzb25pbmcgd291bGQgYmUgdGhhdCB0aGlzIHBhdGNoIGFkZHMgVFBIIHN1cHBvcnQgdG8gVkZJTyBQQ0kuIEl0IGlzIGdhdGVkIGJ5IHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGhgIG1vZHVsZSBwYXJhbWV0ZXIsIHdoaWNoIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lFX1RQSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTYtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtUTFAgUHJvY2Vzc2luZyBIaW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk2MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUENJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZSBQQ0kgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgd2l0aCBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTk3LiBUaGlzIGxpa2VseSBjZW50ZXJzIG9uIGEgZ3JvdXAgb2YgcmVsYXRlZCBvcHRpb25zLCBwcm9iYWJseSB3aXRoaW4gYSBkZWZpbmVkICYjMzQ7bWVudSYjMzQ7IG9yIGJsb2NrLCBnaXZlbiB0aGUgYEtjb25maWdgIGZpbGUgc3RydWN0dXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSBudW1iZXIgaXMgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mIGZlYXR1cmVzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgY2VydGFpbiBQQ0ktcmVsYXRlZCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgcG9zc2libHkgZGVwZW5kZW50IG9uIGhhcmR3YXJlLCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG9yIHNwZWNpZmljIHVzZS1jYXNlcy4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgcGljdHVyZSBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBtYXliZSBzb21lIGhlbHAgdGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgdG8gYWNjZXNzIG1vcmUgdGhhbiBvbmUgSU8gYWRkcmVzcyBzcGFjZSBhdCB0aGUgc2FtZSB0aW1lLiBUbyBtYWtlXG4gMTkxOlx0XHQgIHVzZSBvZiB0aGlzIGZlYXR1cmUgYW4gSU9NTVUgaXMgcmVxdWlyZWQgd2hpY2ggYWxzbyBzdXBwb3J0cyBQQVNJRHMuXG4gMTkyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBzdWNoIGFuIElPTU1VIGFuZCB3YW50IHRvIGNvbXBpbGUgdGhlXG4gMTkzOlx0XHQgIGRyaXZlciBmb3IgaXQgaW50byB5b3VyIGtlcm5lbC5cbiAxOTQ6XHRcbiAxOTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxOTY6XHRcbiAxOTc6XHRjb25maWcgUENJRV9UUEhcbiAxOTg6XHRcdGJvb2wgXCYjMzQ7VExQIFByb2Nlc3NpbmcgSGludHNcJiMzNDtcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLlxuIDIwMTpcdFx0ICBUUEggYWxsb3dzIGVuZHBvaW50IGRldmljZXMgdG8gcHJvdmlkZSBvcHRpbWl6YXRpb24gaGludHMsIHN1Y2ggYXNcbiAyMDI6XHRcdCAgZGVzaXJlZCBjYWNoaW5nIGJlaGF2aW9yLCBmb3IgcmVxdWVzdHMgdGhhdCB0YXJnZXQgbWVtb3J5IHNwYWNlLlxuIDIwMzpcdFx0ICBUaGVzZSBoaW50cywgY2FsbGVkIFN0ZWVyaW5nIFRhZ3MsIGNhbiBlbXBvd2VyIHRoZSBzeXN0ZW0gaGFyZHdhcmVcbiAyMDQ6XHRcdCAgdG8gb3B0aW1pemUgdGhlIHV0aWxpemF0aW9uIG9mIHBsYXRmb3JtIHJlc291cmNlcy5cbiAyMDU6XHRcbiAyMDY6XHRjb25maWcgUENJX1AyUERNQVxuIDIwNzpcdFx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiAyMDg6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbiAyMDk6XHRcdCNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTAKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogMjE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0llIFRQSCBhbmQgVkZJTyBQQ0kgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBQQ0lFX1RQSGAgbWlnaHQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc28gd2UgZGVmaW5pdGVseSB3YW50IHRvIGFkZCBpdCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBzaG91bGQgYWxzbyBlbnN1cmUgYFZGSU9fUENJYCBpcyBlbmFibGVkLCBhbHRob3VnaCB0aGF0JiMzOTtzIGxpa2VseSBhbHJlYWR5IHRoZSBjYXNlIGluIHN5emthbGxlciBjb25maWdzLiBJdCBhcHBlYXJzIHRoZSBwcm9tcHQgd2FudHMgdXMgdG8gZm9jdXMgb24gdGhlIHNwZWNpZmljIGNoYW5nZXMsIHNvIGBQQ0lFX1RQSGAgaXMgdGhlIGtleS4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgdGhlIG9uZXMgd2Ugd2FudCBzeXprYWxsZXIgdG8gdGFyZ2V0PyBMZXQmIzM5O3Mgem9vbSBpbiBvbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgIGFuZCBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY2AsIGFuZCBgZHJpdmVycy9wY2kvdHBoLmNgIHNpbmNlIHRoZXNlIGFyZSB0aGUgbWFpbiBjaGFuZ2VzLiBXZSBzaG91bGQgcHJpb3JpdGl6ZSBmdW5jdGlvbnMgaW4gdGhlIFZGSU8gc3BhY2UgYXMgdGhlc2UgYXJlIHdoYXQgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoLCBzbyB0aG9zZSBhcmUga2V5LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nOgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlYAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnYAoqICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAKKiAgIGB2ZmlvX3BjaV90cGhfaW5pdGAKKiAgIGBwY2lfdHBoX2luaXRgCiogICBgdHBoX2NwdV9zdF9yZWFkYAoqICAgYGVuYWJsZV90cGhgCgpXZSB3YW50IGB0cGhfY3B1X3N0X3JlYWRgIHRvIGJlIHZpc2libGUsIHNvIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBlZGdlIGNhc2UuIEV2ZW4gaWYgaXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGB0cGhfZHNtX3N1cHBvcnRlZGAgYmVpbmcgZmFsc2UsIGl0IG1pZ2h0IHN0aWxsIGJlIHdvcnRoIGxpc3RpbmcgaXQuIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGJlY2F1c2Ugc3l6a2FsbGVyIGZ1enplcyB3cml0ZXMgdG8gdGhlIFZGSU8gUENJIGNvbmZpZyBzcGFjZS4gYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlYCBpcyByZWFjaGFibGUgdmlhIGBWRklPX0RFVklDRV9GRUFUVVJFYCBpb2N0bC4KCkEga2V5IHBvaW50IGlzIHRoZSBtb2R1bGUgcGFyYW1ldGVyIGBlbmFibGVfdW5zYWZlX3RwaGAgd2hpY2gsIGlmICpub3QqIHNldCwgd2lsbCBtYWtlIHRoZSBjb2RlIGp1c3QgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgc2FpZCwgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHksIGFuZCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHNpbmNlIGl0IG1heSByZXZlYWwgbmV3IGZsYXdzIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIFN5emthbGxlciYjMzk7cyBtYWludGFpbmVycyBzaG91bGQgYmUgYXdhcmUgdGhhdCBzZXR0aW5nIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgd2lsbCBiZSAqZXNzZW50aWFsKiB0byBhY3R1YWxseSByZWFjaCB0aGUgdGFyZ2V0IGxvZ2ljLgoKU28sIGZvciBgRm9jdXNTeW1ib2xzYCwgSSB3aWxsIGFkZCB0aGUgVkZJTyBmdW5jdGlvbnMgZmlyc3QuIFRoZW4gSSBhbSBhZGRpbmcgdGhlIFBDSSBpbml0aWFsaXphdGlvbiBjb2RlIGFzIGl0JiMzOTtzIHJlYWNoYWJsZSBkdXJpbmcgZGV2aWNlIHByb2JlLgpJJiMzOTttIGluY2x1ZGluZyBgdHBoX2NwdV9zdF9yZWFkYCBhbmQgYGVuYWJsZV90cGhgLgoKTXkgUmVhc29uaW5nIGlzLCAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS4gV2UgaW5jbHVkZSBgZW5hYmxlX3RwaGAgYXMgaXQmIzM5O3MgcGFydCBvZiB0aGUgd3JpdGUgcGF0aC4gYHRwaF9jcHVfc3RfcmVhZGAgaXMgaW5jbHVkZWQuJiMzNDsKClRoZSBjcml0aWNhbCBjb25maWcgd2UgbmVlZCBpcyBgUENJRV9UUEhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfdHBoX2luaXQmIzM0OywKICAgICYjMzQ7cGNpX3RwaF9pbml0JiMzNDssCiAgICAmIzM0O2VuYWJsZV90cGgmIzM0OywKICAgICYjMzQ7dHBoX2NwdV9zdF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFBDSWUgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0IHRvIFZGSU8gUENJIGFuZCBhZGRzIGEgc3lzZnMgYXR0cmlidXRlIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gVGhlIFZGSU8gaW9jdGxzIGFuZCBjb25maWcgc3BhY2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCwgYnV0IHRoZXkgcmVxdWlyZSB0aGUgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgY29yZSBQQ0kgVFBIIGluaXRpYWxpemF0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIHByb2JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0lFX1RQSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnJiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV90cGhfaW5pdCYjMzQ7LAogICAgJiMzNDtwY2lfdHBoX2luaXQmIzM0OywKICAgICYjMzQ7ZW5hYmxlX3RwaCYjMzQ7LAogICAgJiMzNDt0cGhfY3B1X3N0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQgdG8gVkZJTyBQQ0kgYW5kIGFkZHMgYSBzeXNmcyBhdHRyaWJ1dGUgZm9yIENQVS10by1TVCBtYXBwaW5nLiBUaGUgVkZJTyBpb2N0bHMgYW5kIGNvbmZpZyBzcGFjZSBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLCBidXQgdGhleSByZXF1aXJlIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAgbW9kdWxlIHBhcmFtZXRlciB0byBiZSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoZSBjb3JlIFBDSSBUUEggaW5pdGlhbGl6YXRpb24gaXMgcmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsIFBDSSBkZXZpY2UgcHJvYmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNDo0My40ODU4MzUyMTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA4MjgxNzc1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWdcIixcbiAgICBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiLFxuICAgIFwidmZpb19wY2lfdHBoX2luaXRcIixcbiAgICBcInBjaV90cGhfaW5pdFwiLFxuICAgIFwiZW5hYmxlX3RwaFwiLFxuICAgIFwidHBoX2NwdV9zdF9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQgdG8gVkZJTyBQQ0kgYW5kIGFkZHMgYSBzeXNmcyBhdHRyaWJ1dGUgZm9yIENQVS10by1TVCBtYXBwaW5nLiBUaGUgVkZJTyBpb2N0bHMgYW5kIGNvbmZpZyBzcGFjZSBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLCBidXQgdGhleSByZXF1aXJlIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAgbW9kdWxlIHBhcmFtZXRlciB0byBiZSBzZXQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoZSBjb3JlIFBDSSBUUEggaW5pdGlhbGl6YXRpb24gaXMgcmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsIFBDSSBkZXZpY2UgcHJvYmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE0OjQzLjQ4NTg0MTY0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MzcyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTgyNTQzYTFlZDA5YTI2ZDY0NjY1ODIwMjQzN2Q2MTQ3MzViNzM4N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAwODoxNDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2lcXG5pbmRleCBiNzY3ZGIyYzUyY2I3MC4uZWRjNjRlNGU1NjQwNGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXFxuQEAgLTcwMiwzICs3MDIsMjcgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdFdoZW4gcHJlc2VudCBhbmQgdGhlIHRzbS8gYXR0cmlidXRlIGRpcmVjdG9yeSBpcyBwcmVzZW50LCB0aGVcXG4gXFx0XFx0YXV0aGVudGljYXRlZCBhdHRyaWJ1dGUgaXMgYW4gYWxpYXMgZm9yIHRoZSBkZXZpY2UgJ2Nvbm5lY3QnXFxuIFxcdFxcdHN0YXRlLiBTZWUgdGhlICd0c20vY29ubmVjdCcgYXR0cmlidXRlIGZvciBtb3JlIGRldGFpbHMuXFxuK1xcbitXaGF0OlxcdFxcdC9zeXMvYnVzL3BjaS9kZXZpY2VzL1xcdTAwM2Nyb290LXBvcnQtYmRmXFx1MDAzZS90cGhfY3B1X3N0XFxuK0NvbnRhY3Q6XFx0bGludXgtcGNpQHZnZXIua2VybmVsLm9yZ1xcbitEZXNjcmlwdGlvbjpcXG4rXFx0XFx0UmVhZC1vbmx5IGJpbmFyeSBhdHRyaWJ1dGUgb25seSBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB0aGF0XFxuK1xcdFxcdHN1cHBvcnQgVFBIIENvbXBsZXRlciBjYXBhYmlsaXR5IGFuZCBpbXBsZW1lbnQgdGhlIEFDUEkgRFNNXFxuK1xcdFxcdG1ldGhvZCBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIEZpbGUgcGVybWlzc2lvbiBpcyByb290LW9ubHlcXG4rXFx0XFx0KDA0MDApLlxcbitcXG4rXFx0XFx0VGhlIGJsb2IgaXMgYSBzZXF1ZW5jZSBvZiBmaXhlZC1zaXplIDgtYnl0ZSBlbnRyaWVzIGRlZmluZWQgYnlcXG4rXFx0XFx0c3RydWN0IHBjaV90cGhfY3B1X3N0IGluIHVhcGkvbGludXgvcGNpLmg6XFxuK1xcdFxcdCAgX191OCB2bV9zdDtcXG4rXFx0XFx0ICBfX3U4IHBtX3N0O1xcbitcXHRcXHQgIF9fdTE2IHZtX3hzdDtcXG4rXFx0XFx0ICBfX3UxNiBwbV94c3Q7XFxuK1xcdFxcdCAgX191MTYgcmVzZXJ2ZWQ7XFxuK1xcbitcXHRcXHRFYWNoIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGEgbG9naWNhbCBDUFUgaW5kZXguIFNlZWsgb2Zmc2V0ID1cXG4rXFx0XFx0Y3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1ouIEFyYml0cmFyeSB1bmFsaWduZWQgcGFydGlhbFxcbitcXHRcXHRyZWFkcyBhcmUgc3VwcG9ydGVkOyBubyBhbGlnbm1lbnQgcmVzdHJpY3Rpb24gZW5mb3JjZWQuXFxuK1xcbitcXHRcXHRGb3IgQ1BVcyBvdXRzaWRlIGNwdV9wb3NzaWJsZV9tYXNrIG9yIG9mZmxpbmUgQ1BVcywgdGhlIGVudHJ5XFxuK1xcdFxcdGlzIGZpbGxlZCB3aXRoIGFsbCB6ZXJvcyB0byBhdm9pZCBicmVha2luZyBzZXF1ZW50aWFsIGR1bXAgdG9vbHNcXG4rXFx0XFx0bGlrZSBjYXQvaGV4ZHVtcCBvbiBzcGFyc2UgQ1BVIHRvcG9sb2dpZXMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcXG5pbmRleCBkMzc4NjA4NDEyNjBjZS4uYWQ5ZTRlOGQzMjBiMDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcXG4rKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuY1xcbkBAIC0xODMyLDYgKzE4MzIsOSBAQCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwY2lfZGV2X2F0dHJfZ3JvdXBzW10gPSB7XFxuICNpZmRlZiBDT05GSUdfUENJX1RTTVxcbiBcXHRcXHUwMDI2cGNpX3RzbV9hdXRoX2F0dHJfZ3JvdXAsXFxuIFxcdFxcdTAwMjZwY2lfdHNtX2F0dHJfZ3JvdXAsXFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuK1xcdFxcdTAwMjZwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCxcXG4gI2VuZGlmXFxuIFxcdE5VTEwsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcXG5pbmRleCBlOGFkMjdhYmIxY2ZlNC4uMWFiZTdmYTFmY2M3ZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmhcXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxcbkBAIC0xMzc1LDYgKzEzNzUsMTAgQEAgc3RhdGljIGlubGluZSBwY2lfcG93ZXJfdCBhY3BpX3BjaV9jaG9vc2Vfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzcG1fY3RybF9hdHRyX2dyb3VwO1xcbiAjZW5kaWZcXG4gXFxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXA7XFxuKyNlbmRpZlxcbitcXG4gI2lmZGVmIENPTkZJR19YODZfSU5URUxfTUlEXFxuIGJvb2wgcGNpX3VzZV9taWRfcG0odm9pZCk7XFxuIGludCBtaWRfcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuaW5kZXggOTExNDVlOGQ5ZDk1MTIuLjQ3NDAyZDRiODg5OThmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3RwaC5jXFxuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLXRwaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJwY2kuaFxcXCJcXG4gXFxuQEAgLTEzMCw4ICsxMzEsNDcgQEAgc3RhdGljIGFjcGlfc3RhdHVzIHRwaF9pbnZva2VfZHNtKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGNwdV91aWQsXFxuIFxcbiBcXHRyZXR1cm4gQUVfT0s7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgdHBoX2dldF9jcHVfc3RfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcXG4rXFx0XFx0XFx0ICAgICAgIHVuaW9uIHN0X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpycDtcXG4rXFx0dTMyIGNwdV91aWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgXFx1MDAyNmNwdV91aWQpO1xcbitcXHRpZiAocmV0ICE9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XFxuK1xcdGlmICghcnAgfHwgIXJwLVxcdTAwM2VidXMgfHwgIXJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSk7XFxuK1xcdGlmICh0cGhfaW52b2tlX2RzbShycF9hY3BpX2hhbmRsZSwgY3B1X3VpZCwgaW5mbykgIT0gQUVfT0spXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFxuIFxcbitzdGF0aWMgYm9vbCB0cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbisjaWZkZWYgQ09ORklHX0FDUElcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcXG4rXFx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XFxuK1xcbitcXHRpZiAoIXJwIHx8ICFycC1cXHUwMDNlYnVzIHx8ICFycC1cXHUwMDNlYnVzLVxcdTAwM2VicmlkZ2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJwX2FjcGlfaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXFx1MDAzZWJ1cy1cXHUwMDNlYnJpZGdlKTtcXG4rXFx0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKHJwX2FjcGlfaGFuZGxlLCBcXHUwMDI2cGNpX2FjcGlfZHNtX2d1aWQsIDcsXFxuK1xcdFxcdFxcdCAgICAgIEJJVChUUEhfU1RfRFNNX0ZVTkNfSU5ERVgpKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyogVXBkYXRlIHRoZSBUUEggUmVxdWVzdGVyIEVuYWJsZSBmaWVsZCBvZiBUUEggQ29udHJvbCBSZWdpc3RlciAqL1xcbiBzdGF0aWMgdm9pZCBzZXRfY3RybF9yZWdfcmVxX2VuKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCByZXFfdHlwZSlcXG4ge1xcbkBAIC0xNjYsMTEgKzIwNiwxNCBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiAgKi9cXG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4tXFx0dTMyIHJlZztcXG4rXFx0dTMyIHJlZyA9IDA7XFxuK1xcbitcXHRpZiAoIXBkZXYtXFx1MDAzZXRwaF9jYXApXFxuK1xcdFxcdHJldHVybiBQQ0lfVFBIX0xPQ19OT05FO1xcbiBcXG4gXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXFx1MDAyNnJlZyk7XFxuIFxcbi1cXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xcbitcXHRyZXR1cm4gcmVnIFxcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcXG4gXFxuQEAgLTE4NSw5ICsyMjgsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xcbiBcXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbi1cXG4tXFx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xcbi1cXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xcbiBcXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0yMzEsNiArMjcxLDQ5IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIFxcdHJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGdldF9jcHVfYWxsX3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgY3B1LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgKnN0KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfQUNQSVxcbitcXHR1bmlvbiBzdF9pbmZvIGluZm87XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB0cGhfZ2V0X2NwdV9zdF9pbmZvKHBkZXYsIGNwdSwgXFx1MDAyNmluZm8pO1xcbitcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0c3QtXFx1MDAzZXZtX3N0ID0gaW5mby52bV9zdF92YWxpZCA/IGluZm8udm1fc3QgOiAwO1xcbitcXHRcXHRzdC1cXHUwMDNlcG1fc3QgPSBpbmZvLnBtX3N0X3ZhbGlkID8gaW5mby5wbV9zdCA6IDA7XFxuK1xcdFxcdHN0LVxcdTAwM2V2bV94c3QgPSBpbmZvLnZtX3hzdF92YWxpZCA/IGluZm8udm1feHN0IDogMDtcXG4rXFx0XFx0c3QtXFx1MDAzZXBtX3hzdCA9IGluZm8ucG1feHN0X3ZhbGlkID8gaW5mby5wbV94c3QgOiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4re1xcbisjaWZkZWYgQ09ORklHX0FDUElcXG4rXFx0dW5pb24gc3RfaW5mbyBpbmZvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFxcdTAwMjZpbmZvKTtcXG4rXFx0aWYgKHJldCAhPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4rXFxuK1xcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXFxcblxcXCIsXFxuK1xcdFxcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXFxcInZvbGF0aWxlXFxcIiA6IFxcXCJwZXJzaXN0ZW50XFxcIixcXG4rXFx0XFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiAvKipcXG4gICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxcbiAgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXFxuQEAgLTI0Nyw0MCArMzMwLDM1IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuIHtcXG4tI2lmZGVmIENPTkZJR19BQ1BJXFxuLVxcdHN0cnVjdCBwY2lfZGV2ICpycDtcXG4tXFx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XFxuLVxcdHVuaW9uIHN0X2luZm8gaW5mbztcXG4tXFx0dTMyIGNwdV91aWQ7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgXFx1MDAyNmNwdV91aWQpO1xcbi1cXHRpZiAocmV0ICE9IDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XFxuLVxcdGlmICghcnAgfHwgIXJwLVxcdTAwM2VidXMgfHwgIXJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIGNwdSwgdGFnKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xcbiBcXG4tXFx0cnBfYWNwaV9oYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cXHUwMDNlYnVzLVxcdTAwM2VicmlkZ2UpO1xcbisvKipcXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCAtIEdldCBTVCB3aXRoIGV4cGxpY2l0IHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuKyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcXG4rICogQGV4dGVuZGVkOiB0cnVlPUVYVF9UUEgsIGZhbHNlPXN0YW5kYXJkIFRQSCBvbmx5XFxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXFxuKyAqIEB0YWc6IG91dHB1dCBzdGVlcmluZyB0YWcgcG9pbnRlclxcbisgKlxcbisgKiBVbmxpa2UgYXV0byBwY2llX3RwaF9nZXRfY3B1X3N0KCksIGNhbGxlciBtYW51YWxseSBwaWNrcyByZXF1ZXN0ZXIgdHlwZS5cXG4rICogUmVqZWN0cyBFWFQgcmVxdWVzdCBpZiBkZXZpY2UgbGFja3MgZXh0ZW5kZWQgcmVxdWVzdGVyIGNhcGFiaWxpdHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4rXFx0XFx0XFx0XFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbit7XFxuK1xcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuIFxcbi1cXHRpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsIFxcdTAwMjZpbmZvKSAhPSBBRV9PSykge1xcbi1cXHRcXHQqdGFnID0gMDtcXG4rXFx0aWYgKGV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFwZGV2LVxcdTAwM2V0cGhfZXh0X3N1cHBvcnQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuLVxcbi1cXHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4tXFxuLVxcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcXFxuXFxcIixcXG4tXFx0XFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcXFwidm9sYXRpbGVcXFwiIDogXFxcInBlcnNpc3RlbnRcXFwiLFxcbi1cXHRcXHRjcHUsICp0YWcpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuLSNlbHNlXFxuLVxcdHJldHVybiAtRU5PREVWO1xcbi0jZW5kaWZcXG4rXFx0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHJlcV90eXBlLCBjcHUsIHRhZyk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KTtcXG4gXFxuIC8qKlxcbiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XFxuQEAgLTMxNiw4ICszOTQsNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIFxcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7XFxuIFxcbiBcXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbi1cXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogKi9cXG4tXFx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcXG4gXFxuIFxcdHN3aXRjaCAobG9jKSB7XFxuIFxcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcXG5AQCAtMzY2LDI3ICs0NDIsMTAgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XFxuIFxcbi0vKipcXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXFxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcXG4tICpcXG4tICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxcbi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGVcXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcXG4tICpcXG4tICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmdcXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXFxuLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQncyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cXG4tICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxcbi0gKi9cXG4taW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuK3N0YXRpYyBpbnQgZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIHU4IHJlcV90eXBlKVxcbiB7XFxuIFxcdHUzMiByZWc7XFxuIFxcdHU4IGRldl9tb2RlcztcXG4tXFx0dTggcnBfcmVxX3R5cGU7XFxuIFxcbiBcXHQvKiBIb25vciBcXFwibm90cGhcXFwiIGtlcm5lbCBwYXJhbWV0ZXIgKi9cXG4gXFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXFxuQEAgLTQwNCwyNiArNDYzLDEyIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiBcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBtb2RlKSBcXHUwMDI2IGRldl9tb2RlcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0cGRldi1cXHUwMDNldHBoX21vZGUgPSBtb2RlO1xcbi1cXG4tXFx0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cXG4tXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXFx1MDAyNnJlZyk7XFxuLVxcdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcXG4tXFx0XFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4tXFxuLVxcdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXFxuLVxcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcXG4tXFx0XFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XFxuLVxcbi1cXHRcXHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXFxuLVxcdFxcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IG1pbihwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxcbitcXHRpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcXHUwMDI2XFx1MDAyNiAhcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9tb2RlID0gbW9kZTtcXG4rXFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XFxuK1xcbiBcXHQvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi9cXG4gXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NUUkwsIFxcdTAwMjZyZWcpO1xcbiBcXG5AQCAtNDMxLDcgKzQ3Niw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiBcXHRyZWcgfD0gRklFTERfUFJFUChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgcGRldi1cXHUwMDNldHBoX21vZGUpO1xcbiBcXG4gXFx0cmVnIFxcdTAwMjY9IH5QQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0s7XFxuLVxcdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlKTtcXG4rXFx0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCByZXFfdHlwZSk7XFxuIFxcbiBcXHRwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXFx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NUUkwsIHJlZyk7XFxuIFxcbkBAIC00MzksOCArNDg0LDYzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcXG4rICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxcbisgKlxcbisgKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXFxuKyAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxcbisgKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZVxcbisgKlxcbisgKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xcbisgKiBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIG5vdC4gQWRkaXRpb25hbGx5IGRldGVybWluZSB3aGF0IHR5cGVzIG9mIHJlcXVlc3RzLFxcbisgKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcXG4rICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCdzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuKyAqL1xcbitpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4re1xcbitcXHR1OCByZXFfdHlwZSA9IHBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4rXFx0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcXG4gXFxuKy8qKlxcbisgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvblxcbisgKiBAcGRldjogUENJIGRldmljZSB0byBvcGVyYXRlXFxuKyAqIEBtb2RlOiBTVCB0YWJsZSBvcGVyYXRpbmcgbW9kZSAoTlMvSVYvRFMpXFxuKyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHlcXG4rICpcXG4rICogVW5saWtlIGF1dG8tZGV0ZWN0aW5nIHBjaWVfZW5hYmxlX3RwaCgpLCBjYWxsZXIgc2VsZWN0cyByZXF1ZXN0ZXIgdHlwZVxcbisgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdFxcbisgKiBpZiBkZXZpY2UgbGFja3MgZXh0ZW5kZWQgcmVxdWVzdGVyIGNhcGFiaWxpdHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpXFxuK3tcXG4rXFx0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4rXFxuK1xcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7XFxuK1xcbisvKipcXG4rICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJ3MgZW5hYmxlZCBUUEggcmVxdWVzdGVyIHR5cGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmV0dXJuOiBQQ0lfVFBIX1JFUV9ESVNBQkxFLCBQQ0lfVFBIX1JFUV9UUEhfT05MWSBvciBQQ0lfVFBIX1JFUV9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRyZXR1cm4gcGRldi1cXHUwMDNldHBoX3JlcV90eXBlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XFxuK1xcbiB2b2lkIHBjaV9yZXN0b3JlX3RwaF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTtcXG5AQCAtNTEyLDE0ICs2MTIsMTMxIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxcbiBcXG4gdm9pZCBwY2lfdHBoX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4rXFx0dTggdHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZTtcXG4gXFx0aW50IG51bV9lbnRyaWVzO1xcbiBcXHR1MzIgc2F2ZV9zaXplO1xcbitcXHR1MzIgcmVnID0gMDtcXG4gXFxuIFxcdHBkZXYtXFx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xcbiBcXHRpZiAoIXBkZXYtXFx1MDAzZXRwaF9jYXApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFxcdTAwMjZyZWcpO1xcbitcXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuK1xcbitcXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xcbitcXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XFxuK1xcdFxcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xcbitcXHRcXHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XFxuK1xcdFxcdHBkZXYtXFx1MDAzZXRwaF9jYXAgPSAwO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydCA9ICEhKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcXG4rXFxuIFxcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XFxuIFxcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcXG4gXFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZVxcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxcbisgKiBAd2FudF9leHQ6IGZhbHNlIC0gY2hlY2sgVFBIIGNhcCBleGlzdHM7IHRydWUgLSBjaGVjayBFWFRfVFBIIHN1cHBvcnRcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIG9uIG1hdGNoZWQgY29uZGl0aW9uLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxcbit7XFxuK1xcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCF3YW50X2V4dClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTtcXG4rXFxuK3N0YXRpYyBzc2l6ZV90IHRwaF9jcHVfc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG4rXFx0XFx0XFx0ICAgICAgIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoa29ial90b19kZXYoa29iaikpO1xcbitcXHRjb25zdCBzaXplX3QgZW50cnlfc3ogPSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWjtcXG4rXFx0Y29uc3Qgc2l6ZV90IHRvdGFsX3NpemUgPSBucl9jcHVfaWRzICogZW50cnlfc3o7XFxuK1xcdHNpemVfdCBjb3BpZWQgPSAwO1xcbitcXHRsb2ZmX3QgcG9zID0gb2ZmO1xcbitcXG4rXFx0aWYgKHBvcyBcXHUwMDNlPSB0b3RhbF9zaXplKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgdG90YWxfc2l6ZSAtIHBvcyk7XFxuK1xcbitcXHR3aGlsZSAoY29waWVkIFxcdTAwM2MgY291bnQpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejtcXG4rXFx0XFx0c2l6ZV90IGVudHJ5X29mZiA9IHBvcyAlIGVudHJ5X3N6O1xcbitcXHRcXHRzaXplX3QgcmVtYWluID0gZW50cnlfc3ogLSBlbnRyeV9vZmY7XFxuK1xcdFxcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7XFxuK1xcdFxcdHN0cnVjdCBwY2lfdHBoX2NwdV9zdCBzdCA9IHswfTtcXG4rXFxuK1xcdFxcdGlmIChjcHVfcG9zc2libGUoY3B1X2lkeCkpXFxuK1xcdFxcdFxcdGdldF9jcHVfYWxsX3N0KHBkZXYsIGNwdV9pZHgsIFxcdTAwMjZzdCk7XFxuK1xcbitcXHRcXHRtZW1jcHkoYnVmICsgY29waWVkLCAoY2hhciAqKVxcdTAwMjZzdCArIGVudHJ5X29mZiwgY2h1bmspO1xcbitcXG4rXFx0XFx0Y29waWVkICs9IGNodW5rO1xcbitcXHRcXHRwb3MgKz0gY2h1bms7XFxuK1xcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNvcGllZDtcXG4rfVxcbitzdGF0aWMgQklOX0FUVFIodHBoX2NwdV9zdCwgMDQwMCwgdHBoX2NwdV9zdF9yZWFkLCBOVUxMLCAwKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgdHBoX2NwdV9zdF9iaW5fYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmJpbl9hdHRyX3RwaF9jcHVfc3QsXFxuK1xcdE5VTEwsXFxuK307XFxuK1xcbitzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsIGludCBuKVxcbit7XFxuK1xcdHJldHVybiBucl9jcHVfaWRzICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1o7XFxuK31cXG4rXFxuK3N0YXRpYyB1bW9kZV90IHRwaF9jcHVfc3RfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbitcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphLCBpbnQgbilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoa29ial90b19kZXYoa29iaikpO1xcbitcXHRib29sIGlzX3Jvb3RfcG9ydCA9IHBjaV9pc19wY2llKHBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdHBjaV9wY2llX3R5cGUocGRldikgPT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVDtcXG4rXFx0dTMyIGRldmNhcDIgPSAwO1xcbitcXG4rXFx0aWYgKCFpc19yb290X3BvcnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXFx1MDAyNmRldmNhcDIpO1xcbitcXHRpZiAoIShkZXZjYXAyIFxcdTAwMjYgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0spKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghdHBoX2RzbV9zdXBwb3J0ZWQocGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGEtXFx1MDAzZWF0dHIubW9kZTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCA9IHtcXG4rXFx0LmJpbl9hdHRycyA9IHRwaF9jcHVfc3RfYmluX2F0dHJzLFxcbitcXHQuYmluX3NpemUgPSB0cGhfY3B1X3N0X2Jpbl9zaXplLFxcbitcXHQuaXNfYmluX3Zpc2libGUgPSB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXFxuaW5kZXggMGM3NzEwNjRjMGI4NDQuLjZkNzM2Njg0NTljZjU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xcbkBAIC02MCw2ICs2MCwxMiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xcbiBtb2R1bGVfcGFyYW0oZGlzYWJsZV9kZW55bGlzdCwgYm9vbCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgXFxcIkRpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cXFwiKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4rc3RhdGljIGJvb2wgZW5hYmxlX3Vuc2FmZV90cGg7XFxuK21vZHVsZV9wYXJhbShlbmFibGVfdW5zYWZlX3RwaCwgYm9vbCwgMDQ0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3Vuc2FmZV90cGgsIFxcXCJFbmFibGUgUENJZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMpIHN1cHBvcnQuIEl0IG1heSBicmVhayBwbGF0Zm9ybSBpc29sYXRpb24uIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRoaXMgaXMgZm9yLCBzdGVwIGF3YXkuIChkZWZhdWx0OiBmYWxzZSlcXFwiKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3dpdGNoIChwZGV2LVxcdTAwM2V2ZW5kb3IpIHtcXG5AQCAtMjU3LDEyICsyNjMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgdmZpb19wY2lfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcdGJvb2wgaXNfZGlzYWJsZV92Z2EgPSB0cnVlO1xcbitcXHRib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoID0gZmFsc2U7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxcbiBcXHRpc19kaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbitcXHRpc19lbmFibGVfdW5zYWZlX3RwaCA9IGVuYWJsZV91bnNhZmVfdHBoO1xcbisjZW5kaWZcXG4gXFxuLVxcdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzKTtcXG4rXFx0dmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKG5vaW50eG1hc2ssIGlzX2Rpc2FibGVfdmdhLCBkaXNhYmxlX2lkbGVfZDMsXFxuK1xcdFxcdFxcdFxcdCBpc19lbmFibGVfdW5zYWZlX3RwaCk7XFxuIFxcbiBcXHQvKiBSZWdpc3RlciBhbmQgc2NhbiBmb3IgZGV2aWNlcyAqL1xcbiBcXHRyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZ2ZmlvX3BjaV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbmluZGV4IGExMGVkNzMzZjBlM2FmLi4xMGY0ZTlmYWJlYTdjYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbkBAIC0yMiw2ICsyMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLXRwaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdmZpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbkBAIC0xMDg1LDYgKzEwODYsMTE4IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIFBlcm1pc3Npb25zIGZvciBUUEggZXh0ZW5kZWQgY2FwYWJpbGl0eSAqL1xcbitzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpO1xcbitcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsIEFMTF9XUklURSk7XFxuK1xcbitcXHQvKiBQZXIgUENJIHNwZWNpZmljYXRpb246IFRoZXJlIGlzIGFuIHVwcGVyIGxpbWl0IG9mIDY0IGVudHJpZXNcXG4rXFx0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxcbitcXHQgKiBDYXBhYmlsaXR5IHN0cnVjdHVyZS5cXG4rXFx0ICogQW5kIHRoZSBwY2lfZXh0X2NhcF9sZW5ndGhbUENJX0VYVF9DQVBfSURfVFBIXSBpcyAweEZGLCBzbyB0aGVcXG4rXFx0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY0OyBpKyspXFxuK1xcdFxcdHBfc2V0dyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GICsgaSAqIHNpemVvZih1MTYpLFxcbitcXHRcXHQgICAgICAgKHUxNilBTExfVklSVCwgKHUxNilBTExfV1JJVEUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZmaW9fdHBoX21hc2tfZXh0X3RwaF9iaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9zKVxcbit7XFxuK1xcdF9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKilcXHUwMDI2dmRldi1cXHUwMDNldmNvbmZpZ1twb3MgKyBQQ0lfVFBIX0NBUF07XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XFxuK1xcdFxcdHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xcbitcXHRcXHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XFxuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4rXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4rXFx0XFx0XFx0XFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXFxuK3tcXG4rXFx0aW50IHJlcV9lbl9ieXRlID0gUENJX1RQSF9DVFJMICsgMTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRfX2xlMzIgb3JnX3ZhbCA9IDA7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdHU4IG1vZGUsIHJlcTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFx0dTE2IHN0YXJ0O1xcbitcXHR1MzIgZGF0YTtcXG4rXFxuK1xcdGlmICghdmRldi1cXHUwMDNldHBoX3Blcm1pdClcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0LyogQmFjayB1cCB0aGUgb3JpZ2luYWwgdmFsdWVzIGluIG9yZGVyIHJvbGxiYWNrIHdoZW4gZmFpbCAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2M9IHJlcV9lbl9ieXRlIFxcdTAwMjZcXHUwMDI2IG9mZnNldCArIGNvdW50IFxcdTAwM2UgcmVxX2VuX2J5dGUpXFxuK1xcdFxcdHZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3JnX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rXFx0aWYgKHJldCAhPSBjb3VudCkge1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIGlmIHdyaXRlIHJhbmdlIGRvZXMgbm90IGNvdmVyIFJlcXVlc3RlciBFbmFibGUgYnl0ZSAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2UgcmVxX2VuX2J5dGUgfHwgb2Zmc2V0ICsgY291bnQgXFx1MDAzYz0gcmVxX2VuX2J5dGUpIHtcXG4rXFx0XFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBvcmdfdmFsKTtcXG4rXFx0XFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTtcXG4rXFx0ZGF0YSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcXG4rXFx0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgZGF0YSk7XFxuK1xcdHJlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIGRhdGEpO1xcbitcXG4rXFx0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xcbitcXHRcXHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcXG4rXFx0XFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcXG4rXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdykge1xcbitcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXM7IGkrKylcXG4rXFx0XFx0XFx0XFx0cGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3dbaV0pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXQsIG9yZ192YWwpO1xcbitcXHR9IGVsc2UgaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XFxuK1xcdFxcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cXHUwMDNlcGRldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIG9yZ192YWwpO1xcbitcXHR9XFxuK1xcbitcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgcGVybWlzc2lvbiB0YWJsZXNcXG4gICovXFxuQEAgLTExMDAsNiArMTIxMyw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKVxcbiBcXG4gXFx0ZnJlZV9wZXJtX2JpdHMoXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XFxuIFxcdGZyZWVfcGVybV9iaXRzKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xcbitcXHRmcmVlX3Blcm1fYml0cyhcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTtcXG4gfVxcbiBcXG4gaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxcbkBAIC0xMTIwLDYgKzEyMzQsOCBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuIFxcdC8qIEV4dGVuZGVkIGNhcGFiaWxpdGllcyAqL1xcbiBcXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcXG4gXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XFxuK1xcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xcbitcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcXG4gXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXG5AQCAtMTQ1MCw2ICsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cXG4gXFx0XFx0Ynl0ZSBcXHUwMDI2PSBQQ0lfRFBBX0NBUF9TVUJTVEFURV9NQVNLO1xcbiBcXHRcXHRyZXR1cm4gUENJX0RQQV9CQVNFX1NJWkVPRiArIGJ5dGUgKyAxO1xcbiBcXHRjYXNlIFBDSV9FWFRfQ0FQX0lEX1RQSDpcXG4rXFx0XFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGVwb3MgKyBQQ0lfVFBIX0NBUCwgXFx1MDAyNmR3b3JkKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHBjaWJpb3NfZXJyX3RvX2Vycm5vKHJldCk7XFxuQEAgLTE3MDEsNiArMTgxOSw4IEBAIHN0YXRpYyBpbnQgdmZpb19lY2FwX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHRcXHRyZXQgPSB2ZmlvX2ZpbGxfdmNvbmZpZ19ieXRlcyh2ZGV2LCBlcG9zLCBsZW4pO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEggXFx1MDAyNlxcdTAwMjYgIWhpZGRlbilcXG4rXFx0XFx0XFx0dmZpb190cGhfbWFza19leHRfdHBoX2JpdCh2ZGV2LCBlcG9zKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IGEyOGYxZTk5MzYyYzFlLi4xZTcwNmE2OTBkYmQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTI5LDYgKzI5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZWVoLmhcXHUwMDNlXFxuICNlbmRpZlxcbkBAIC00MSw2ICs0Miw3IEBAXFxuIHN0YXRpYyBib29sIG5vaW50eG1hc2s7XFxuIHN0YXRpYyBib29sIGRpc2FibGVfdmdhO1xcbiBzdGF0aWMgYm9vbCBkaXNhYmxlX2lkbGVfZDM7XFxuK3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoO1xcbiBcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZXZlbnRmZF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4ge1xcbkBAIC01MzEsNiArNTMzLDUyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2ZmlvX3BjaV9jb3JlX3BtX29wcyA9IHtcXG4gXFx0XFx0XFx0ICAgTlVMTClcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfdHBoX3N0X3NoYWRvd19zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHtcXG4rXFx0XFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbitcXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cgPSBOVUxMO1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIWVuYWJsZV91bnNhZmVfdHBoKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9zdF9lbnRyaWVzID0gdmZpb19wY2lfdHBoX3N0X3NoYWRvd19zaXplKHZkZXYpO1xcbitcXHRpZiAodmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMpIHtcXG4rXFx0XFx0dmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdyA9IGtjYWxsb2ModmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMsIHNpemVvZih1MTYpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmZpb19wY2lfdHBoX2RlaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuK3tcXG4rXFx0a2ZyZWUodmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdyk7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cgPSBOVUxMO1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgPSBmYWxzZTtcXG4rfVxcbitcXG4gaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuQEAgLTU1Nyw2ICs2MDUsMTMgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XFxuIFxcbiBcXHR2ZGV2LVxcdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XFxuK1xcbitcXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cXG4rXFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0cmV0ID0gdmZpb19wY2lfdHBoX2luaXQodmRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xcbitcXG4gXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcdHZkZXYtXFx1MDAzZXBjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTtcXG4gXFx0aWYgKCF2ZGV2LVxcdTAwM2VwY2lfc2F2ZWRfc3RhdGUpXFxuQEAgLTYxNCw2ICs2NjksNyBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBvdXRfZnJlZV9zdGF0ZTpcXG4gXFx0a2ZyZWUodmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlKTtcXG4gXFx0dmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gTlVMTDtcXG4rXFx0dmZpb19wY2lfdHBoX2RlaW5pdCh2ZGV2KTtcXG4gb3V0X2Rpc2FibGVfZGV2aWNlOlxcbiBcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIG91dF9wb3dlcjpcXG5AQCAtNjgyLDYgKzczOCw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0a2ZyZWUodmRldi1cXHUwMDNlcmVnaW9uKTtcXG4gXFx0dmRldi1cXHUwMDNlcmVnaW9uID0gTlVMTDsgLyogZG9uJ3Qga3JlYWxsb2MgYSBmcmVlZCBwb2ludGVyICovXFxuIFxcbitcXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIHNlc3Npb24gZXhpdCAqL1xcbitcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xcbiBcXHR2ZmlvX2NvbmZpZ19mcmVlKHZkZXYpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xcbkBAIC0xNTU0LDYgKzE2MTMsOTUgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1MzIgZmxhZ3MsIHNpemVfdCBhcmdzeilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFlbmFibGVfdW5zYWZlX3RwaClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQpXFxuK1xcdFxcdHZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgPSAxO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcoXFxuK1xcdFxcdFxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0dTMyIGZsYWdzLFxcbitcXHRcXHRcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBjb25maWc7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0dm9pZCBfX3VzZXIgKnVwdHI7XFxuK1xcdGludCBpLCBpZHgsIHJldDtcXG4rXFx0c2l6ZV90IHN6O1xcbitcXHR1MTYgKnN0cztcXG4rXFxuK1xcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKGNvbmZpZykpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgfHwgIXZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3cpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjb25maWcsIGFyZywgc2l6ZW9mKGNvbmZpZykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChjb25maWcuY291bnQgPT0gMCB8fCBjb25maWcucmVzZXJ2ZWQgIT0gMCB8fFxcbitcXHRcXHRjb25maWcuaW5kZXggXFx1MDAzZT0gdmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMgfHxcXG4rXFx0XFx0Y29uZmlnLmNvdW50IFxcdTAwM2UgdmRldi1cXHUwMDNldHBoX3N0X2VudHJpZXMgLSBjb25maWcuaW5kZXgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0dXB0ciA9IHU2NF90b191c2VyX3B0cihjb25maWcuZGF0YV91cHRyKTtcXG4rXFx0c3RzID0gbWVtZHVwX2FycmF5X3VzZXIodXB0ciwgY29uZmlnLmNvdW50LCBzaXplb2YodTE2KSk7XFxuK1xcdHN6ID0gY29uZmlnLmNvdW50ICogc2l6ZW9mKHUxNik7XFxuK1xcdGlmIChJU19FUlIoc3RzKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoc3RzKTtcXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9ja19tZW1vcnk7XFxuK1xcbitcXHRpZiAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShwZGV2KSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxcbitcXHRcXHRnb3RvIHVwZGF0ZV9zaGFkb3c7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLmNvdW50OyBpKyspIHtcXG4rXFx0XFx0aWR4ID0gY29uZmlnLmluZGV4ICsgaTtcXG4rXFx0XFx0cmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGlkeCwgc3RzW2ldKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByb2xsYmFjaztcXG4rXFx0fVxcbitcXG4rdXBkYXRlX3NoYWRvdzpcXG4rXFx0bWVtY3B5KFxcdTAwMjZ2ZGV2LVxcdTAwM2V0cGhfc3Rfc2hhZG93W2NvbmZpZy5pbmRleF0sIHN0cywgc3opO1xcbitcXHRyZXQgPSAwO1xcbitcXHRnb3RvIG91dF91bmxvY2tfbWVtb3J5O1xcbitcXG4rcm9sbGJhY2s6XFxuK1xcdHdoaWxlIChpLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlkeCA9IGNvbmZpZy5pbmRleCArIGk7XFxuK1xcdFxcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHZkZXYtXFx1MDAzZXRwaF9zdF9zaGFkb3dbaWR4XSk7XFxuK1xcdH1cXG4rXFxuK291dF91bmxvY2tfbWVtb3J5OlxcbitcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0a2ZyZWUoc3RzKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXFxuIHtcXG5AQCAtMTU3Miw2ICsxNzIwLDExIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRTpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlKHZkZXYsIGZsYWdzLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcodmRldiwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGFyZywgYXJnc3opO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gXFx0fVxcbkBAIC0yNjE1LDExICsyNzY4LDEzIEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXFxuIH1cXG4gXFxuIHZvaWQgdmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKGJvb2wgaXNfbm9pbnR4bWFzaywgYm9vbCBpc19kaXNhYmxlX3ZnYSxcXG4tXFx0XFx0XFx0ICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMpXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxcbitcXHRcXHRcXHQgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKVxcbiB7XFxuIFxcdG5vaW50eG1hc2sgPSBpc19ub2ludHhtYXNrO1xcbiBcXHRkaXNhYmxlX3ZnYSA9IGlzX2Rpc2FibGVfdmdhO1xcbiBcXHRkaXNhYmxlX2lkbGVfZDMgPSBpc19kaXNhYmxlX2lkbGVfZDM7XFxuK1xcdGVuYWJsZV91bnNhZmVfdHBoID0gaXNfZW5hYmxlX3Vuc2FmZV90cGg7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uNTkxN2EwNjk0YzFkNjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbkBAIC04LDYgKzgsNyBAQFxcbiAgKi9cXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxcbkBAIC0yNiwxMCArMjcsMTYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0XFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4rXFx0XFx0XFx0XFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcXG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpO1xcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuQEAgLTM4LDkgKzQ1LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbiB7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHRcXHRib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4reyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbiB7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGJvb2wgZXh0ZW5kZWQpXFxuK3sgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIDA7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxcbit7IHJldHVybiBmYWxzZTsgfVxcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcXG5pbmRleCAyYzQ0NTQ1ODNjMTE1Yi4uMjg1YzBmMDA4ODJlMGUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcXG5AQCAtNDcxLDcgKzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcXG4gXFx0dW5zaWduZWQgaW50XFx0YXRzX2VuYWJsZWQ6MTtcXHRcXHQvKiBBZGRyZXNzIFRyYW5zbGF0aW9uIFN2YyAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRwYXNpZF9lbmFibGVkOjE7XFx0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXFxuIFxcdHVuc2lnbmVkIGludFxcdHByaV9lbmFibGVkOjE7XFx0XFx0LyogUGFnZSBSZXF1ZXN0IEludGVyZmFjZSAqL1xcbi1cXHR1bnNpZ25lZCBpbnRcXHR0cGhfZW5hYmxlZDoxO1xcdFxcdC8qIFRMUCBQcm9jZXNzaW5nIEhpbnRzICovXFxuIFxcdHVuc2lnbmVkIGludFxcdGZtX2VuYWJsZWQ6MTtcXHRcXHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXFxuIFxcdHVuc2lnbmVkIGludFxcdGlzX21hbmFnZWQ6MTtcXHRcXHQvKiBNYW5hZ2VkIHZpYSBkZXZyZXMgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0aXNfbXNpX21hbmFnZWQ6MTtcXHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xcbkBAIC01ODksNyArNTg4LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcXG4gXFx0dTggcmVzZXRfbWV0aG9kc1tQQ0lfTlVNX1JFU0VUX01FVEhPRFNdOyAvKiBJbiBwcmlvcml0eSBvcmRlciAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbi1cXHR1MTZcXHRcXHR0cGhfY2FwO1xcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfY2FwOjE0O1xcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfZXh0X3N1cHBvcnQ6MTsgLyogSW5kaWNhdGUgd2hldGhlciBFeHRlbmRlZCBUUEhcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfZW5hYmxlZDoxO1xcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cXG4gXFx0dThcXHRcXHR0cGhfbW9kZTtcXHQvKiBUUEggbW9kZSAqL1xcbiBcXHR1OFxcdFxcdHRwaF9yZXFfdHlwZTtcXHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA1ZmM2Y2U0ZGQ3ODYxNi4uNTI3Yzg0ZjA0MmFhNmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbkBAIC0xMjgsNiArMTI4LDcgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcXG4gXFx0Ym9vbFxcdFxcdFxcdHBtX2ludHhfbWFza2VkOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRwbV9ydW50aW1lX2VuZ2FnZWQ6MTtcXG4gXFx0Ym9vbFxcdFxcdFxcdHNyaW92X2FjdGl2ZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdHRwaF9wZXJtaXQ7XFxuIFxcdHN0cnVjdCBwY2lfc2F2ZWRfc3RhdGVcXHQqcGNpX3NhdmVkX3N0YXRlO1xcbiBcXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXFx0KnBtX3NhdmU7XFxuIFxcdGludFxcdFxcdFxcdGlvZXZlbnRmZHNfbnI7XFxuQEAgLTE0Myw2ICsxNDQsOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcXHRuYjtcXG4gXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdG1lbW9yeV9sb2NrO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZG1hYnVmcztcXG4rXFx0dTE2XFx0XFx0XFx0KnRwaF9zdF9zaGFkb3c7XFxuK1xcdHUxNlxcdFxcdFxcdHRwaF9zdF9lbnRyaWVzO1xcbiB9O1xcbiBcXG4gZW51bSB2ZmlvX3BjaV9pb193aWR0aCB7XFxuQEAgLTE1OCw3ICsxNjEsOCBAQCBpbnQgdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZfcmVnaW9uKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHZmaW9fcGNpX3JlZ29wcyAqb3BzLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSwgdTMyIGZsYWdzLCB2b2lkICpkYXRhKTtcXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMoYm9vbCBub2ludHhtYXNrLCBib29sIGlzX2Rpc2FibGVfdmdhLFxcbi1cXHRcXHRcXHQgICAgICBib29sIGlzX2Rpc2FibGVfaWRsZV9kMyk7XFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxcbitcXHRcXHRcXHQgICAgICBib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoKTtcXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XFxuIGludCB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3JlbGVhc2VfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oXFxuaW5kZXggNGYxNTAwMjg5NjVkOGIuLjVjNGVhNDRkNjZkMjA2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNkZWZpbmUgX1VBUElMSU5VWF9QQ0lfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFx0LyogVGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogVGhlIFBDSSBpbnRlcmZhY2UgdHJlYXRzIG11bHRpLWZ1bmN0aW9uIGRldmljZXMgYXMgaW5kZXBlbmRlbnRcXG5AQCAtNDYsNCArNDcsMTkgQEAgZW51bSBwY2lfaG90cGx1Z19ldmVudCB7XFxuIFxcdFBDSV9IT1RQTFVHX0NBUkRfTk9UX1BSRVNFTlQsXFxuIH07XFxuIFxcbisvKlxcbisgKiBQQ0llIFRQSCBzeXNmcyBiaW5hcnkgZW50cnkgZm9yIENQVS10by1TVCBtYXBwaW5nXFxuKyAqIFN5c2ZzIGZpbGU6IC9zeXMvYnVzL3BjaS9kZXZpY2VzL1xcdTAwM2NCREZcXHUwMDNlL3RwaF9jcHVfc3RcXG4rICogRWFjaCBlbnRyeSBpcyA4IGJ5dGVzIGFsaWduZWQsIHNlZWsgb2Zmc2V0ID0gY3B1X2lkICogUENJX1RQSF9DUFVfU1RfRU5UUllfU1pcXG4rICovXFxuK3N0cnVjdCBwY2lfdHBoX2NwdV9zdCB7XFxuK1xcdF9fdTggIHZtX3N0OyAgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IFN0ZWVyaW5nIFRhZyAoMSBieXRlKSAqL1xcbitcXHRfX3U4ICBwbV9zdDsgICAgICAgIC8qIFBlcnNpc3RlbnQgTWVtb3J5IFN0ZWVyaW5nIFRhZyAoMSBieXRlKSAqL1xcbitcXHRfX3UxNiB2bV94c3Q7ICAgICAgIC8qIFZvbGF0aWxlIE1lbW9yeSBFeHRlbmRlZCBTdGVlcmluZyBUYWcgKDIgYnl0ZXMpICovXFxuK1xcdF9fdTE2IHBtX3hzdDsgICAgICAgLyogUGVyc2lzdGVudCBNZW1vcnkgRXh0ZW5kZWQgU3RlZXJpbmcgVGFnICgyIGJ5dGVzKSAqL1xcbitcXHRfX3UxNiByZXNlcnZlZDsgICAgIC8qIFBhZGRpbmcgdG8gOCBieXRlcyBmb3IgYWxpZ25lZCBvZmZzZXQgbG9va3VwICovXFxuK30gX19wYWNrZWQ7XFxuK1xcbisjZGVmaW5lIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaIHNpemVvZihzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QpXFxuK1xcbiAjZW5kaWYgLyogX1VBUElMSU5VWF9QQ0lfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi42MTA3OTU5NGE5MWY1YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsMzUgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLypcXG4rICogRGV2aWNlLWxldmVsIG9wdC1pbiBmb3IgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0LlxcbisgKiBXaGVuIHNldCwgYWxsb3dzIGFjY2VzcyB0byBUUEhfQ1BVX1NUIGFuZCBUUEhfU1RfQ09ORklHIGZlYXR1cmVzLlxcbisgKiBSZXF1aXJlcyBnbG9iYWwgZW5hYmxlX3Vuc2FmZV90cGggbW9kdWxlIHBhcmFtZXRlciB0byBiZSBlbmFibGVkLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEVcXHQxM1xcbitcXG4rLyoqXFxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJRyAtIENvbmZpZ3VyZSBQQ0llIFRQSCBTdGVlcmluZyBUYWcgZW50cmllc1xcbisgKlxcbisgKiBQcm92aWRlcyB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBQQ0llIFRQSCBTVCB0YWJsZSBlbnRyaWVzLlxcbisgKlxcbisgKiBAaW5kZXg6IFN0YXJ0IGVudHJ5IG9mZnNldCB3aXRoaW4gU1QgdGFibGVcXG4rICogQGNvdW50OiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZW50cmllcyB0byBjb25maWd1cmVcXG4rICogQGRhdGFfdXB0cjogVXNlcnNwYWNlIGRhdGEgYnVmZmVyIGZvciAxNi1iaXQgcmF3IFNUIHZhbHVlc1xcbisgKlxcbisgKiBUaGlzIGZlYXR1cmUgcmVxdWlyZXMgdHdvIHByZWNvbmRpdGlvbnM6XFxuKyAqIDEuIEdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQ7XFxuKyAqIDIuIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRSBoYXMgYmVlbiBTRVQgb24gdGhlIGRldmljZSBiZWZvcmVoYW5kLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUdcXHQxNFxcbitcXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyB7XFxuK1xcdF9fdTE2IGluZGV4O1xcbitcXHRfX3UxNiBjb3VudDtcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7IC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8gKi9cXG4rXFx0X19hbGlnbmVkX3U2NCBkYXRhX3VwdHI7XFxuK307XFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNDo0NC4wNDU5MDU3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwMjY4MDk3OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnXCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIixcbiAgICBcInZmaW9fcGNpX3RwaF9pbml0XCIsXG4gICAgXCJwY2lfdHBoX2luaXRcIixcbiAgICBcImVuYWJsZV90cGhcIixcbiAgICBcInRwaF9jcHVfc3RfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFBDSWUgVFBIIChUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzKSBzdXBwb3J0IHRvIFZGSU8gUENJIGFuZCBhZGRzIGEgc3lzZnMgYXR0cmlidXRlIGZvciBDUFUtdG8tU1QgbWFwcGluZy4gVGhlIFZGSU8gaW9jdGxzIGFuZCBjb25maWcgc3BhY2UgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCwgYnV0IHRoZXkgcmVxdWlyZSB0aGUgYHZmaW9fcGNpLmVuYWJsZV91bnNhZmVfdHBoPTFgIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYmUgc2V0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgY29yZSBQQ0kgVFBIIGluaXRpYWxpemF0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbCBQQ0kgZGV2aWNlIHByb2JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MjU0M2ExZWQwOWEyNmQ2NDY2NTgyMDI0MzdkNjE0NzM1YjczODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwODoxNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaVxuaW5kZXggYjc2N2RiMmM1MmNiNzAuLmVkYzY0ZTRlNTY0MDRlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2lcbkBAIC03MDIsMyArNzAyLDI3IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRXaGVuIHByZXNlbnQgYW5kIHRoZSB0c20vIGF0dHJpYnV0ZSBkaXJlY3RvcnkgaXMgcHJlc2VudCwgdGhlXG4gXHRcdGF1dGhlbnRpY2F0ZWQgYXR0cmlidXRlIGlzIGFuIGFsaWFzIGZvciB0aGUgZGV2aWNlICdjb25uZWN0J1xuIFx0XHRzdGF0ZS4gU2VlIHRoZSAndHNtL2Nvbm5lY3QnIGF0dHJpYnV0ZSBmb3IgbW9yZSBkZXRhaWxzLlxuK1xuK1doYXQ6XHRcdC9zeXMvYnVzL3BjaS9kZXZpY2VzL1x1MDAzY3Jvb3QtcG9ydC1iZGZcdTAwM2UvdHBoX2NwdV9zdFxuK0NvbnRhY3Q6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdFJlYWQtb25seSBiaW5hcnkgYXR0cmlidXRlIG9ubHkgZXhwb3NlZCBvbiBQQ0llIFJvb3QgUG9ydHMgdGhhdFxuK1x0XHRzdXBwb3J0IFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgaW1wbGVtZW50IHRoZSBBQ1BJIERTTVxuK1x0XHRtZXRob2QgZm9yIENQVS10by1TVCBtYXBwaW5nLiBGaWxlIHBlcm1pc3Npb24gaXMgcm9vdC1vbmx5XG4rXHRcdCgwNDAwKS5cbitcbitcdFx0VGhlIGJsb2IgaXMgYSBzZXF1ZW5jZSBvZiBmaXhlZC1zaXplIDgtYnl0ZSBlbnRyaWVzIGRlZmluZWQgYnlcbitcdFx0c3RydWN0IHBjaV90cGhfY3B1X3N0IGluIHVhcGkvbGludXgvcGNpLmg6XG4rXHRcdCAgX191OCB2bV9zdDtcbitcdFx0ICBfX3U4IHBtX3N0O1xuK1x0XHQgIF9fdTE2IHZtX3hzdDtcbitcdFx0ICBfX3UxNiBwbV94c3Q7XG4rXHRcdCAgX191MTYgcmVzZXJ2ZWQ7XG4rXG4rXHRcdEVhY2ggZW50cnkgY29ycmVzcG9uZHMgdG8gYSBsb2dpY2FsIENQVSBpbmRleC4gU2VlayBvZmZzZXQgPVxuK1x0XHRjcHVfaWQgKiBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWi4gQXJiaXRyYXJ5IHVuYWxpZ25lZCBwYXJ0aWFsXG4rXHRcdHJlYWRzIGFyZSBzdXBwb3J0ZWQ7IG5vIGFsaWdubWVudCByZXN0cmljdGlvbiBlbmZvcmNlZC5cbitcbitcdFx0Rm9yIENQVXMgb3V0c2lkZSBjcHVfcG9zc2libGVfbWFzayBvciBvZmZsaW5lIENQVXMsIHRoZSBlbnRyeVxuK1x0XHRpcyBmaWxsZWQgd2l0aCBhbGwgemVyb3MgdG8gYXZvaWQgYnJlYWtpbmcgc2VxdWVudGlhbCBkdW1wIHRvb2xzXG4rXHRcdGxpa2UgY2F0L2hleGR1bXAgb24gc3BhcnNlIENQVSB0b3BvbG9naWVzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmNcbmluZGV4IGQzNzg2MDg0MTI2MGNlLi5hZDllNGU4ZDMyMGIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jXG4rKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuY1xuQEAgLTE4MzIsNiArMTgzMiw5IEBAIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBjaV9kZXZfYXR0cl9ncm91cHNbXSA9IHtcbiAjaWZkZWYgQ09ORklHX1BDSV9UU01cbiBcdFx1MDAyNnBjaV90c21fYXV0aF9hdHRyX2dyb3VwLFxuIFx0XHUwMDI2cGNpX3RzbV9hdHRyX2dyb3VwLFxuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitcdFx1MDAyNnBjaWVfdHBoX2NwdV9zdF9hdHRyX2dyb3VwLFxuICNlbmRpZlxuIFx0TlVMTCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IGU4YWQyN2FiYjFjZmU0Li4xYWJlN2ZhMWZjYzdlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTEzNzUsNiArMTM3NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBjaV9wb3dlcl90IGFjcGlfcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhc3BtX2N0cmxfYXR0cl9ncm91cDtcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV90cGhfY3B1X3N0X2F0dHJfZ3JvdXA7XG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19YODZfSU5URUxfTUlEXG4gYm9vbCBwY2lfdXNlX21pZF9wbSh2b2lkKTtcbiBpbnQgbWlkX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA5MTE0NWU4ZDlkOTUxMi4uNDc0MDJkNGI4ODk5OGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicGNpLmhcIlxuIFxuQEAgLTEzMCw4ICsxMzEsNDcgQEAgc3RhdGljIGFjcGlfc3RhdHVzIHRwaF9pbnZva2VfZHNtKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGNwdV91aWQsXG4gXG4gXHRyZXR1cm4gQUVfT0s7XG4gfVxuK1xuK3N0YXRpYyBpbnQgdHBoX2dldF9jcHVfc3RfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcbitcdFx0XHQgICAgICAgdW5pb24gc3RfaW5mbyAqaW5mbylcbit7XG4rXHRhY3BpX2hhbmRsZSBycF9hY3BpX2hhbmRsZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpycDtcbitcdHUzMiBjcHVfdWlkO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbitcdGlmIChyZXQgIT0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcbitcdGlmICghcnAgfHwgIXJwLVx1MDAzZWJ1cyB8fCAhcnAtXHUwMDNlYnVzLVx1MDAzZWJyaWRnZSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuK1x0aWYgKHRwaF9pbnZva2VfZHNtKHJwX2FjcGlfaGFuZGxlLCBjcHVfdWlkLCBpbmZvKSAhPSBBRV9PSylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gI2VuZGlmXG4gXG4rc3RhdGljIGJvb2wgdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuKyNpZmRlZiBDT05GSUdfQUNQSVxuK1x0c3RydWN0IHBjaV9kZXYgKnJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcbitcdGFjcGlfaGFuZGxlIHJwX2FjcGlfaGFuZGxlO1xuK1xuK1x0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuK1x0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKHJwX2FjcGlfaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbitcdFx0XHQgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qIFVwZGF0ZSB0aGUgVFBIIFJlcXVlc3RlciBFbmFibGUgZmllbGQgb2YgVFBIIENvbnRyb2wgUmVnaXN0ZXIgKi9cbiBzdGF0aWMgdm9pZCBzZXRfY3RybF9yZWdfcmVxX2VuKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCByZXFfdHlwZSlcbiB7XG5AQCAtMTY2LDExICsyMDYsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuK1x0dTMyIHJlZyA9IDA7XG4rXG4rXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbitcdFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XG4gXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4gXG4tXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xuK1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg1LDkgKzIyOCw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVxuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMzEsNiArMjcxLDQ5IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIG9mZnNldCwgdGFnKTtcbiB9XG4gXG4rc3RhdGljIGludCBnZXRfY3B1X2FsbF9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGNwdSxcbitcdFx0XHQgICBzdHJ1Y3QgcGNpX3RwaF9jcHVfc3QgKnN0KVxuK3tcbisjaWZkZWYgQ09ORklHX0FDUElcbitcdHVuaW9uIHN0X2luZm8gaW5mbztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB0cGhfZ2V0X2NwdV9zdF9pbmZvKHBkZXYsIGNwdSwgXHUwMDI2aW5mbyk7XG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0c3QtXHUwMDNldm1fc3QgPSBpbmZvLnZtX3N0X3ZhbGlkID8gaW5mby52bV9zdCA6IDA7XG4rXHRcdHN0LVx1MDAzZXBtX3N0ID0gaW5mby5wbV9zdF92YWxpZCA/IGluZm8ucG1fc3QgOiAwO1xuK1x0XHRzdC1cdTAwM2V2bV94c3QgPSBpbmZvLnZtX3hzdF92YWxpZCA/IGluZm8udm1feHN0IDogMDtcbitcdFx0c3QtXHUwMDNlcG1feHN0ID0gaW5mby5wbV94c3RfdmFsaWQgPyBpbmZvLnBtX3hzdCA6IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuKyNlbmRpZlxuK1x0cmV0dXJuIC1FTk9ERVY7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbit7XG4rI2lmZGVmIENPTkZJR19BQ1BJXG4rXHR1bmlvbiBzdF9pbmZvIGluZm87XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gdHBoX2dldF9jcHVfc3RfaW5mbyhwZGV2LCBjcHUsIFx1MDAyNmluZm8pO1xuK1x0aWYgKHJldCAhPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuK1xuK1x0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXG5cIixcbitcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcInZvbGF0aWxlXCIgOiBcInBlcnNpc3RlbnRcIixcbitcdFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XG4rXG4rXHRyZXR1cm4gMDtcbisjZWxzZVxuK1x0cmV0dXJuIC1FTk9ERVY7XG4rI2VuZGlmXG4rfVxuK1xuIC8qKlxuICAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbiAgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG5AQCAtMjQ3LDQwICszMzAsMzUgQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcbiBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4ge1xuLSNpZmRlZiBDT05GSUdfQUNQSVxuLVx0c3RydWN0IHBjaV9kZXYgKnJwO1xuLVx0YWNwaV9oYW5kbGUgcnBfYWNwaV9oYW5kbGU7XG4tXHR1bmlvbiBzdF9pbmZvIGluZm87XG4tXHR1MzIgY3B1X3VpZDtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBhY3BpX2dldF9jcHVfdWlkKGNwdSwgXHUwMDI2Y3B1X3VpZCk7XG4tXHRpZiAocmV0ICE9IDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4tXHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4tXHRcdHJldHVybiAtRU5PREVWO1xuK1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBjcHUsIHRhZyk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4gXG4tXHRycF9hY3BpX2hhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuKy8qKlxuKyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4rICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuKyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seVxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXG4rICogQHRhZzogb3V0cHV0IHN0ZWVyaW5nIHRhZyBwb2ludGVyXG4rICpcbisgKiBVbmxpa2UgYXV0byBwY2llX3RwaF9nZXRfY3B1X3N0KCksIGNhbGxlciBtYW51YWxseSBwaWNrcyByZXF1ZXN0ZXIgdHlwZS5cbisgKiBSZWplY3RzIEVYVCByZXF1ZXN0IGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuK3tcbitcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4gXG4tXHRpZiAodHBoX2ludm9rZV9kc20ocnBfYWNwaV9oYW5kbGUsIGNwdV91aWQsIFx1MDAyNmluZm8pICE9IEFFX09LKSB7XG4tXHRcdCp0YWcgPSAwO1xuK1x0aWYgKGV4dGVuZGVkIFx1MDAyNlx1MDAyNiAhcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuLVxuLVx0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwiLFxuLVx0XHQobWVtX3R5cGUgPT0gVFBIX01FTV9UWVBFX1ZNKSA/IFwidm9sYXRpbGVcIiA6IFwicGVyc2lzdGVudFwiLFxuLVx0XHRjcHUsICp0YWcpO1xuIFxuLVx0cmV0dXJuIDA7XG4tI2Vsc2Vcbi1cdHJldHVybiAtRU5PREVWO1xuLSNlbmRpZlxuK1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHJlcV90eXBlLCBjcHUsIHRhZyk7XG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KTtcbiBcbiAvKipcbiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XG5AQCAtMzE2LDggKzM5NCw2IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7XG4gXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovXG4tXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xuIFxuIFx0c3dpdGNoIChsb2MpIHtcbiBcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcbkBAIC0zNjYsMjcgKzQ0MiwxMCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XG4gXG4tLyoqXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4tICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4tICpcbi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbi0gKlxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4tICovXG4taW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4rc3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXG4ge1xuIFx0dTMyIHJlZztcbiBcdHU4IGRldl9tb2Rlcztcbi1cdHU4IHJwX3JlcV90eXBlO1xuIFxuIFx0LyogSG9ub3IgXCJub3RwaFwiIGtlcm5lbCBwYXJhbWV0ZXIgKi9cbiBcdGlmIChwY2lfdHBoX2Rpc2FibGVkKVxuQEAgLTQwNCwyNiArNDYzLDEyIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIG1vZGUpIFx1MDAyNiBkZXZfbW9kZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHBkZXYtXHUwMDNldHBoX21vZGUgPSBtb2RlO1xuLVxuLVx0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cbi1cdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbi1cdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuLVx0ZWxzZVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuLVxuLVx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbi1cdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbi1cdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4tXG4tXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbi1cdH1cbi1cbi1cdGlmIChwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKVxuK1x0aWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEggXHUwMDI2XHUwMDI2ICFwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbitcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XG4rXG4gXHQvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NUUkwsIFx1MDAyNnJlZyk7XG4gXG5AQCAtNDMxLDcgKzQ3Niw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIHBkZXYtXHUwMDNldHBoX21vZGUpO1xuIFxuIFx0cmVnIFx1MDAyNj0gflBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSztcbi1cdHJlZyB8PSBGSUVMRF9QUkVQKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUpO1xuK1x0cmVnIHw9IEZJRUxEX1BSRVAoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCByZXFfdHlwZSk7XG4gXG4gXHRwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ1RSTCwgcmVnKTtcbiBcbkBAIC00MzksOCArNDg0LDYzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK1xuKy8qKlxuKyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4rICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxuKyAqXG4rICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuKyAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxuKyAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4rICpcbisgKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuKyAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4rICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4rICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCdzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuKyAqL1xuK2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuK3tcbitcdHU4IHJlcV90eXBlID0gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDpcbitcdFx0XHRcdFx0ICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7XG4rXHRyZXR1cm4gZW5hYmxlX3RwaChwZGV2LCBtb2RlLCByZXFfdHlwZSk7XG4rfVxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcbiBcbisvKipcbisgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvblxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcbisgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKVxuKyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHlcbisgKlxuKyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGVcbisgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdFxuKyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKVxuK3tcbitcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4rXG4rXHRyZXR1cm4gZW5hYmxlX3RwaChwZGV2LCBtb2RlLCByZXFfdHlwZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KTtcbitcbisvKipcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4rXG4gdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgKnNhdmVfc3RhdGU7XG5AQCAtNTEyLDE0ICs2MTIsMTMxIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxuIFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbitcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XG4gXHRpbnQgbnVtX2VudHJpZXM7XG4gXHR1MzIgc2F2ZV9zaXplO1xuK1x0dTMyIHJlZyA9IDA7XG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4rXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4rXHRlbHNlXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuK1xuK1x0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbitcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbitcdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4rXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbitcdFx0dHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuK1x0fVxuK1xuK1x0aWYgKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XG4rXHRcdHBkZXYtXHUwMDNldHBoX2NhcCA9IDA7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0ID0gISEodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpO1xuK1xuIFx0bnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTtcbiBcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcbiBcdHBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7XG4gfVxuK1xuKy8qKlxuKyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICogQHdhbnRfZXh0OiBmYWxzZSAtIGNoZWNrIFRQSCBjYXAgZXhpc3RzOyB0cnVlIC0gY2hlY2sgRVhUX1RQSCBzdXBwb3J0XG4rICpcbisgKiBSZXR1cm46IHRydWUgb24gbWF0Y2hlZCBjb25kaXRpb24sIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuK3tcbitcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIXdhbnRfZXh0KVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydDtcbit9XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9zdXBwb3J0ZWQpO1xuK1xuK3N0YXRpYyBzc2l6ZV90IHRwaF9jcHVfc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuK1x0XHRcdCAgICAgICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbitcdGNvbnN0IHNpemVfdCBlbnRyeV9zeiA9IFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaO1xuK1x0Y29uc3Qgc2l6ZV90IHRvdGFsX3NpemUgPSBucl9jcHVfaWRzICogZW50cnlfc3o7XG4rXHRzaXplX3QgY29waWVkID0gMDtcbitcdGxvZmZfdCBwb3MgPSBvZmY7XG4rXG4rXHRpZiAocG9zIFx1MDAzZT0gdG90YWxfc2l6ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHRvdGFsX3NpemUgLSBwb3MpO1xuK1xuK1x0d2hpbGUgKGNvcGllZCBcdTAwM2MgY291bnQpIHtcbitcdFx0dW5zaWduZWQgaW50IGNwdV9pZHggPSBwb3MgLyBlbnRyeV9zejtcbitcdFx0c2l6ZV90IGVudHJ5X29mZiA9IHBvcyAlIGVudHJ5X3N6O1xuK1x0XHRzaXplX3QgcmVtYWluID0gZW50cnlfc3ogLSBlbnRyeV9vZmY7XG4rXHRcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluLCBjb3VudCAtIGNvcGllZCk7XG4rXHRcdHN0cnVjdCBwY2lfdHBoX2NwdV9zdCBzdCA9IHswfTtcbitcbitcdFx0aWYgKGNwdV9wb3NzaWJsZShjcHVfaWR4KSlcbitcdFx0XHRnZXRfY3B1X2FsbF9zdChwZGV2LCBjcHVfaWR4LCBcdTAwMjZzdCk7XG4rXG4rXHRcdG1lbWNweShidWYgKyBjb3BpZWQsIChjaGFyICopXHUwMDI2c3QgKyBlbnRyeV9vZmYsIGNodW5rKTtcbitcbitcdFx0Y29waWVkICs9IGNodW5rO1xuK1x0XHRwb3MgKz0gY2h1bms7XG4rXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNvcGllZDtcbit9XG4rc3RhdGljIEJJTl9BVFRSKHRwaF9jcHVfc3QsIDA0MDAsIHRwaF9jcHVfc3RfcmVhZCwgTlVMTCwgMCk7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCB0cGhfY3B1X3N0X2Jpbl9hdHRyc1tdID0ge1xuK1x0XHUwMDI2YmluX2F0dHJfdHBoX2NwdV9zdCxcbitcdE5VTEwsXG4rfTtcbitcbitzdGF0aWMgc2l6ZV90IHRwaF9jcHVfc3RfYmluX3NpemUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphLCBpbnQgbilcbit7XG4rXHRyZXR1cm4gbnJfY3B1X2lkcyAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaO1xuK31cbitcbitzdGF0aWMgdW1vZGVfdCB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYSwgaW50IG4pXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGtvYmpfdG9fZGV2KGtvYmopKTtcbitcdGJvb2wgaXNfcm9vdF9wb3J0ID0gcGNpX2lzX3BjaWUocGRldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRwY2lfcGNpZV90eXBlKHBkZXYpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQ7XG4rXHR1MzIgZGV2Y2FwMiA9IDA7XG4rXG4rXHRpZiAoIWlzX3Jvb3RfcG9ydClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0VYUF9ERVZDQVAyLCBcdTAwMjZkZXZjYXAyKTtcbitcdGlmICghKGRldmNhcDIgXHUwMDI2IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXRwaF9kc21fc3VwcG9ydGVkKHBkZXYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBhLVx1MDAzZWF0dHIubW9kZTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3RwaF9jcHVfc3RfYXR0cl9ncm91cCA9IHtcbitcdC5iaW5fYXR0cnMgPSB0cGhfY3B1X3N0X2Jpbl9hdHRycyxcbitcdC5iaW5fc2l6ZSA9IHRwaF9jcHVfc3RfYmluX3NpemUsXG4rXHQuaXNfYmluX3Zpc2libGUgPSB0cGhfY3B1X3N0X2F0dHJfaXNfdmlzaWJsZSxcbit9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuaW5kZXggMGM3NzEwNjRjMGI4NDQuLjZkNzM2Njg0NTljZjU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbkBAIC02MCw2ICs2MCwxMiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFwiRGlzYWJsZSB1c2Ugb2YgZGV2aWNlIGRlbnlsaXN0LiBEaXNhYmxpbmcgdGhlIGRlbnlsaXN0IGFsbG93cyBiaW5kaW5nIHRvIGRldmljZXMgd2l0aCBrbm93biBlcnJhdGEgdGhhdCBtYXkgbGVhZCB0byBleHBsb2l0YWJsZSBzdGFiaWxpdHkgb3Igc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnkgdW50cnVzdGVkIHVzZXJzLlwiKTtcbiBcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4rc3RhdGljIGJvb2wgZW5hYmxlX3Vuc2FmZV90cGg7XG4rbW9kdWxlX3BhcmFtKGVuYWJsZV91bnNhZmVfdHBoLCBib29sLCAwNDQ0KTtcbitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV91bnNhZmVfdHBoLCBcIkVuYWJsZSBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydC4gSXQgbWF5IGJyZWFrIHBsYXRmb3JtIGlzb2xhdGlvbi4gSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIHN0ZXAgYXdheS4gKGRlZmF1bHQ6IGZhbHNlKVwiKTtcbisjZW5kaWZcbitcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3dpdGNoIChwZGV2LVx1MDAzZXZlbmRvcikge1xuQEAgLTI1NywxMiArMjYzLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHZmaW9fcGNpX2luaXQodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuIFx0Ym9vbCBpc19kaXNhYmxlX3ZnYSA9IHRydWU7XG4rXHRib29sIGlzX2VuYWJsZV91bnNhZmVfdHBoID0gZmFsc2U7XG4gXG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9WR0FcbiBcdGlzX2Rpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuK1x0aXNfZW5hYmxlX3Vuc2FmZV90cGggPSBlbmFibGVfdW5zYWZlX3RwaDtcbisjZW5kaWZcbiBcbi1cdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzKTtcbitcdHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhub2ludHhtYXNrLCBpc19kaXNhYmxlX3ZnYSwgZGlzYWJsZV9pZGxlX2QzLFxuK1x0XHRcdFx0IGlzX2VuYWJsZV91bnNhZmVfdHBoKTtcbiBcbiBcdC8qIFJlZ2lzdGVyIGFuZCBzY2FuIGZvciBkZXZpY2VzICovXG4gXHRyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnZmaW9fcGNpX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbmluZGV4IGExMGVkNzMzZjBlM2FmLi4xMGY0ZTlmYWJlYTdjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICsxMDg2LDExOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3B3cl9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXG4rc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuK3tcbitcdGludCBpO1xuK1xuK1x0aWYgKGFsbG9jX3Blcm1fYml0cyhwZXJtLCBwY2lfZXh0X2NhcF9sZW5ndGhbUENJX0VYVF9DQVBfSURfVFBIXSkpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cF9zZXRkKHBlcm0sIDAsIEFMTF9WSVJULCBOT19XUklURSk7XG4rXHRwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7XG4rXG4rXHRwX3NldGQocGVybSwgUENJX1RQSF9DVFJMLCBBTExfVklSVCwgQUxMX1dSSVRFKTtcbitcbitcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xuK1x0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuK1x0ICogQ2FwYWJpbGl0eSBzdHJ1Y3R1cmUuXG4rXHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxuK1x0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSsrKVxuK1x0XHRwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiArIGkgKiBzaXplb2YodTE2KSxcbitcdFx0ICAgICAgICh1MTYpQUxMX1ZJUlQsICh1MTYpQUxMX1dSSVRFKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZmlvX3RwaF9tYXNrX2V4dF90cGhfYml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdCAgICAgIGludCBwb3MpXG4re1xuK1x0X19sZTMyICp2cHRyID0gKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1twb3MgKyBQQ0lfVFBIX0NBUF07XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHUzMiB2YWw7XG4rXG4rXHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCB0cnVlKSkge1xuK1x0XHR2YWwgPSBsZTMyX3RvX2NwdSgqdnB0cik7XG4rXHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuK1x0XHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmZpb19maW5kX2NhcF9zdGFydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MpO1xuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbitcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4rXHRcdFx0XHQgaW50IG9mZnNldCwgX19sZTMyIHZhbClcbit7XG4rXHRpbnQgcmVxX2VuX2J5dGUgPSBQQ0lfVFBIX0NUUkwgKyAxO1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4rXHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0dTggbW9kZSwgcmVxO1xuK1x0aW50IGksIHJldDtcbitcdHUxNiBzdGFydDtcbitcdHUzMiBkYXRhO1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9wZXJtaXQpXG4rXHRcdHJldHVybiBjb3VudDtcbitcbitcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXG4rXHQvKiBCYWNrIHVwIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gb3JkZXIgcm9sbGJhY2sgd2hlbiBmYWlsICovXG4rXHRpZiAob2Zmc2V0IFx1MDAzYz0gcmVxX2VuX2J5dGUgXHUwMDI2XHUwMDI2IG9mZnNldCArIGNvdW50IFx1MDAzZSByZXFfZW5fYnl0ZSlcbitcdFx0dmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbitcdFx0XHRcdFx0IFx1MDAyNm9yZ192YWwpO1xuK1xuK1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4rXHRpZiAocmV0ICE9IGNvdW50KSB7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogU2tpcCBpZiB3cml0ZSByYW5nZSBkb2VzIG5vdCBjb3ZlciBSZXF1ZXN0ZXIgRW5hYmxlIGJ5dGUgKi9cbitcdGlmIChvZmZzZXQgXHUwMDNlIHJlcV9lbl9ieXRlIHx8IG9mZnNldCArIGNvdW50IFx1MDAzYz0gcmVxX2VuX2J5dGUpIHtcbitcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbitcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuK1x0aWYgKHJldCkge1xuK1x0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbitcdFx0XHRcdFx0ICBvcmdfdmFsKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbitcdHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpO1xuK1x0ZGF0YSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3N0YXJ0ICsgUENJX1RQSF9DVFJMXSk7XG4rXHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBkYXRhKTtcbitcdHJlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIGRhdGEpO1xuK1xuK1x0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xuK1x0XHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbitcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcbitcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdykge1xuK1x0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZkZXYtXHUwMDNldHBoX3N0X2VudHJpZXM7IGkrKylcbitcdFx0XHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpLFxuK1x0XHRcdFx0XHRcdCAgICAgIHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tpXSk7XG4rXHRcdH1cbitcdFx0aWYgKHJldClcbitcdFx0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sXG4rXHRcdFx0XHRcdFx0ICBvZmZzZXQsIG9yZ192YWwpO1xuK1x0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuK1x0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHR9IGVsc2Uge1xuK1x0XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCxcbitcdFx0XHRcdFx0ICBvcmdfdmFsKTtcbitcdH1cbitcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiArMTIxMyw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKVxuIFxuIFx0ZnJlZV9wZXJtX2JpdHMoXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XG4rXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuIH1cbiBcbiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG5AQCAtMTEyMCw2ICsxMjM0LDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbitcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4rXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XG4gXG5AQCAtMTQ1MCw2ICsxNTY2LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICsgYnl0ZSArIDE7XG4gXHRjYXNlIFBDSV9FWFRfQ0FQX0lEX1RQSDpcbitcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0XHRyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyArIFBDSV9UUEhfQ0FQLCBcdTAwMjZkd29yZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHBjaWJpb3NfZXJyX3RvX2Vycm5vKHJldCk7XG5AQCAtMTcwMSw2ICsxODE5LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIIFx1MDAyNlx1MDAyNiAhaGlkZGVuKVxuK1x0XHRcdHZmaW9fdHBoX21hc2tfZXh0X3RwaF9iaXQodmRldiwgZXBvcyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMjhmMWU5OTM2MmMxZS4uMWU3MDZhNjkwZGJkNzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0yOSw2ICsyOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2VlaC5oXHUwMDNlXG4gI2VuZGlmXG5AQCAtNDEsNiArNDIsNyBAQFxuIHN0YXRpYyBib29sIG5vaW50eG1hc2s7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV92Z2E7XG4gc3RhdGljIGJvb2wgZGlzYWJsZV9pZGxlX2QzO1xuK3N0YXRpYyBib29sIGVuYWJsZV91bnNhZmVfdHBoO1xuIFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2V2ZW50ZmRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4ge1xuQEAgLTUzMSw2ICs1MzMsNTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHZmaW9fcGNpX2NvcmVfcG1fb3BzID0ge1xuIFx0XHRcdCAgIE5VTEwpXG4gfTtcbiBcbitzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuK1x0XHRyZXR1cm4gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4rXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XG4rXHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHZmaW9fcGNpX3RwaF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHR2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzID0gMDtcbitcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IE5VTEw7XG4rXHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSBmYWxzZTtcbitcbitcdGlmICghZW5hYmxlX3Vuc2FmZV90cGgpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IHZmaW9fcGNpX3RwaF9zdF9zaGFkb3dfc2l6ZSh2ZGV2KTtcbitcdGlmICh2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzKSB7XG4rXHRcdHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyA9IGtjYWxsb2ModmRldi1cdTAwM2V0cGhfc3RfZW50cmllcywgc2l6ZW9mKHUxNiksXG4rXHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRcdGlmICghdmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93KVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZmaW9fcGNpX3RwaF9kZWluaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuK3tcbitcdGtmcmVlKHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvdyk7XG4rXHR2ZGV2LVx1MDAzZXRwaF9zdF9zaGFkb3cgPSBOVUxMO1xuK1x0dmRldi1cdTAwM2V0cGhfc3RfZW50cmllcyA9IDA7XG4rXHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSBmYWxzZTtcbit9XG4rXG4gaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbkBAIC01NTcsNiArNjA1LDEzIEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuIFx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4rXG4rXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cbitcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cdTAwM2VwZGV2KTtcbitcdHJldCA9IHZmaW9fcGNpX3RwaF9pbml0KHZkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4rXG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC02MTQsNiArNjY5LDcgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBvdXRfZnJlZV9zdGF0ZTpcbiBcdGtmcmVlKHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gTlVMTDtcbitcdHZmaW9fcGNpX3RwaF9kZWluaXQodmRldik7XG4gb3V0X2Rpc2FibGVfZGV2aWNlOlxuIFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIG91dF9wb3dlcjpcbkBAIC02ODIsNiArNzM4LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0a2ZyZWUodmRldi1cdTAwM2VyZWdpb24pO1xuIFx0dmRldi1cdTAwM2VyZWdpb24gPSBOVUxMOyAvKiBkb24ndCBrcmVhbGxvYyBhIGZyZWVkIHBvaW50ZXIgKi9cbiBcbitcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gc2Vzc2lvbiBleGl0ICovXG4rXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHR2ZmlvX3BjaV90cGhfZGVpbml0KHZkZXYpO1xuIFx0dmZpb19jb25maWdfZnJlZSh2ZGV2KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xuQEAgLTE1NTQsNiArMTYxMyw5NSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZmxhZ3MsIHNpemVfdCBhcmdzeilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFlbmFibGVfdW5zYWZlX3RwaClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbitcdFx0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gMTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RfY29uZmlnKFxuK1x0XHRcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHR1MzIgZmxhZ3MsXG4rXHRcdFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBfX3VzZXIgKmFyZyxcbitcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyBjb25maWc7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHZvaWQgX191c2VyICp1cHRyO1xuK1x0aW50IGksIGlkeCwgcmV0O1xuK1x0c2l6ZV90IHN6O1xuK1x0dTE2ICpzdHM7XG4rXG4rXHRpZiAoIWVuYWJsZV91bnNhZmVfdHBoKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRcdCBzaXplb2YoY29uZmlnKSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0IHx8ICF2ZGV2LVx1MDAzZXRwaF9zdF9zaGFkb3cpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNvbmZpZywgYXJnLCBzaXplb2YoY29uZmlnKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0aWYgKGNvbmZpZy5jb3VudCA9PSAwIHx8IGNvbmZpZy5yZXNlcnZlZCAhPSAwIHx8XG4rXHRcdGNvbmZpZy5pbmRleCBcdTAwM2U9IHZkZXYtXHUwMDNldHBoX3N0X2VudHJpZXMgfHxcbitcdFx0Y29uZmlnLmNvdW50IFx1MDAzZSB2ZGV2LVx1MDAzZXRwaF9zdF9lbnRyaWVzIC0gY29uZmlnLmluZGV4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHVwdHIgPSB1NjRfdG9fdXNlcl9wdHIoY29uZmlnLmRhdGFfdXB0cik7XG4rXHRzdHMgPSBtZW1kdXBfYXJyYXlfdXNlcih1cHRyLCBjb25maWcuY291bnQsIHNpemVvZih1MTYpKTtcbitcdHN6ID0gY29uZmlnLmNvdW50ICogc2l6ZW9mKHUxNik7XG4rXHRpZiAoSVNfRVJSKHN0cykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHN0cyk7XG4rXG4rXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF91bmxvY2tfbWVtb3J5O1xuK1xuK1x0aWYgKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUocGRldikgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbitcdFx0Z290byB1cGRhdGVfc2hhZG93O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZmlnLmNvdW50OyBpKyspIHtcbitcdFx0aWR4ID0gY29uZmlnLmluZGV4ICsgaTtcbitcdFx0cmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJ5KHBkZXYsIGlkeCwgc3RzW2ldKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJvbGxiYWNrO1xuK1x0fVxuK1xuK3VwZGF0ZV9zaGFkb3c6XG4rXHRtZW1jcHkoXHUwMDI2dmRldi1cdTAwM2V0cGhfc3Rfc2hhZG93W2NvbmZpZy5pbmRleF0sIHN0cywgc3opO1xuK1x0cmV0ID0gMDtcbitcdGdvdG8gb3V0X3VubG9ja19tZW1vcnk7XG4rXG4rcm9sbGJhY2s6XG4rXHR3aGlsZSAoaS0tIFx1MDAzZSAwKSB7XG4rXHRcdGlkeCA9IGNvbmZpZy5pbmRleCArIGk7XG4rXHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCBpZHgsIHZkZXYtXHUwMDNldHBoX3N0X3NoYWRvd1tpZHhdKTtcbitcdH1cbitcbitvdXRfdW5sb2NrX21lbW9yeTpcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1xuK1x0a2ZyZWUoc3RzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTU3Miw2ICsxNzIwLDExIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGUodmRldiwgZmxhZ3MsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWcodmRldiwgZmxhZ3MsXG4rXHRcdFx0XHRcdFx0XHQgICBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuQEAgLTI2MTUsMTEgKzI3NjgsMTMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldClcbiB9XG4gXG4gdm9pZCB2ZmlvX3BjaV9jb3JlX3NldF9wYXJhbXMoYm9vbCBpc19ub2ludHhtYXNrLCBib29sIGlzX2Rpc2FibGVfdmdhLFxuLVx0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzKVxuK1x0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxuK1x0XHRcdCAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpXG4ge1xuIFx0bm9pbnR4bWFzayA9IGlzX25vaW50eG1hc2s7XG4gXHRkaXNhYmxlX3ZnYSA9IGlzX2Rpc2FibGVfdmdhO1xuIFx0ZGlzYWJsZV9pZGxlX2QzID0gaXNfZGlzYWJsZV9pZGxlX2QzO1xuK1x0ZW5hYmxlX3Vuc2FmZV90cGggPSBpc19lbmFibGVfdW5zYWZlX3RwaDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9zZXRfcGFyYW1zKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uNTkxN2EwNjk0YzFkNjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC04LDYgKzgsNyBAQFxuICAqL1xuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuIFxuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuQEAgLTI2LDEwICsyNywxNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4rYm9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG5AQCAtMzgsOSArNDUsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbitcdFx0XHRcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0Ym9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXG4rXHRcdFx0XHRcdCAgIGJvb2wgZXh0ZW5kZWQpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIDA7IH1cbitzdGF0aWMgaW5saW5lIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuK3sgcmV0dXJuIGZhbHNlOyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCAyYzQ0NTQ1ODNjMTE1Yi4uMjg1YzBmMDA4ODJlMGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtNDcxLDcgKzQ3MSw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OSw3ICs1ODgsMTAgQEAgc3RydWN0IHBjaV9kZXYge1xuIFx0dTggcmVzZXRfbWV0aG9kc1tQQ0lfTlVNX1JFU0VUX01FVEhPRFNdOyAvKiBJbiBwcmlvcml0eSBvcmRlciAqL1xuIFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcbi1cdHUxNlx0XHR0cGhfY2FwO1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4rXHR1MTZcdFx0dHBoX2NhcDoxNDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuK1x0dTE2XHRcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxuK1x0XHRcdFx0XHQgICAgKiByZXF1ZXN0ZXIgaXMgc3VwcG9ydGVkICovXG4rXHR1MTZcdFx0dHBoX2VuYWJsZWQ6MTtcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDVmYzZjZTRkZDc4NjE2Li41MjdjODRmMDQyYWE2ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuQEAgLTEyOCw2ICsxMjgsNyBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4gXHRib29sXHRcdFx0c3Jpb3ZfYWN0aXZlO1xuK1x0Ym9vbFx0XHRcdHRwaF9wZXJtaXQ7XG4gXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXHQqcGNpX3NhdmVkX3N0YXRlO1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBtX3NhdmU7XG4gXHRpbnRcdFx0XHRpb2V2ZW50ZmRzX25yO1xuQEAgLTE0Myw2ICsxNDQsOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRuYjtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdG1lbW9yeV9sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZG1hYnVmcztcbitcdHUxNlx0XHRcdCp0cGhfc3Rfc2hhZG93O1xuK1x0dTE2XHRcdFx0dHBoX3N0X2VudHJpZXM7XG4gfTtcbiBcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcbkBAIC0xNTgsNyArMTYxLDggQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdmZpb19wY2lfcmVnb3BzICpvcHMsXG4gXHRcdFx0XHQgICAgICBzaXplX3Qgc2l6ZSwgdTMyIGZsYWdzLCB2b2lkICpkYXRhKTtcbiB2b2lkIHZmaW9fcGNpX2NvcmVfc2V0X3BhcmFtcyhib29sIG5vaW50eG1hc2ssIGJvb2wgaXNfZGlzYWJsZV92Z2EsXG4tXHRcdFx0ICAgICAgYm9vbCBpc19kaXNhYmxlX2lkbGVfZDMpO1xuK1x0XHRcdCAgICAgIGJvb2wgaXNfZGlzYWJsZV9pZGxlX2QzLFxuK1x0XHRcdCAgICAgIGJvb2wgaXNfZW5hYmxlX3Vuc2FmZV90cGgpO1xuIHZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuIGludCB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2NvcmVfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2kuaFxuaW5kZXggNGYxNTAwMjg5NjVkOGIuLjVjNGVhNDRkNjZkMjA2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcGNpLmhcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2RlZmluZSBfVUFQSUxJTlVYX1BDSV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVx0LyogVGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhlIFBDSSBpbnRlcmZhY2UgdHJlYXRzIG11bHRpLWZ1bmN0aW9uIGRldmljZXMgYXMgaW5kZXBlbmRlbnRcbkBAIC00Niw0ICs0NywxOSBAQCBlbnVtIHBjaV9ob3RwbHVnX2V2ZW50IHtcbiBcdFBDSV9IT1RQTFVHX0NBUkRfTk9UX1BSRVNFTlQsXG4gfTtcbiBcbisvKlxuKyAqIFBDSWUgVFBIIHN5c2ZzIGJpbmFyeSBlbnRyeSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmdcbisgKiBTeXNmcyBmaWxlOiAvc3lzL2J1cy9wY2kvZGV2aWNlcy9cdTAwM2NCREZcdTAwM2UvdHBoX2NwdV9zdFxuKyAqIEVhY2ggZW50cnkgaXMgOCBieXRlcyBhbGlnbmVkLCBzZWVrIG9mZnNldCA9IGNwdV9pZCAqIFBDSV9UUEhfQ1BVX1NUX0VOVFJZX1NaXG4rICovXG4rc3RydWN0IHBjaV90cGhfY3B1X3N0IHtcbitcdF9fdTggIHZtX3N0OyAgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IFN0ZWVyaW5nIFRhZyAoMSBieXRlKSAqL1xuK1x0X191OCAgcG1fc3Q7ICAgICAgICAvKiBQZXJzaXN0ZW50IE1lbW9yeSBTdGVlcmluZyBUYWcgKDEgYnl0ZSkgKi9cbitcdF9fdTE2IHZtX3hzdDsgICAgICAgLyogVm9sYXRpbGUgTWVtb3J5IEV4dGVuZGVkIFN0ZWVyaW5nIFRhZyAoMiBieXRlcykgKi9cbitcdF9fdTE2IHBtX3hzdDsgICAgICAgLyogUGVyc2lzdGVudCBNZW1vcnkgRXh0ZW5kZWQgU3RlZXJpbmcgVGFnICgyIGJ5dGVzKSAqL1xuK1x0X191MTYgcmVzZXJ2ZWQ7ICAgICAvKiBQYWRkaW5nIHRvIDggYnl0ZXMgZm9yIGFsaWduZWQgb2Zmc2V0IGxvb2t1cCAqL1xuK30gX19wYWNrZWQ7XG4rXG4rI2RlZmluZSBQQ0lfVFBIX0NQVV9TVF9FTlRSWV9TWiBzaXplb2Yoc3RydWN0IHBjaV90cGhfY3B1X3N0KVxuK1xuICNlbmRpZiAvKiBfVUFQSUxJTlVYX1BDSV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi42MTA3OTU5NGE5MWY1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbkBAIC0xNTM0LDYgKzE1MzQsMzUgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbisvKlxuKyAqIERldmljZS1sZXZlbCBvcHQtaW4gZm9yIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydC5cbisgKiBXaGVuIHNldCwgYWxsb3dzIGFjY2VzcyB0byBUUEhfQ1BVX1NUIGFuZCBUUEhfU1RfQ09ORklHIGZlYXR1cmVzLlxuKyAqIFJlcXVpcmVzIGdsb2JhbCBlbmFibGVfdW5zYWZlX3RwaCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIGVuYWJsZWQuXG4rICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEVcdDEzXG4rXG4rLyoqXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RfQ09ORklHIC0gQ29uZmlndXJlIFBDSWUgVFBIIFN0ZWVyaW5nIFRhZyBlbnRyaWVzXG4rICpcbisgKiBQcm92aWRlcyB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBQQ0llIFRQSCBTVCB0YWJsZSBlbnRyaWVzLlxuKyAqXG4rICogQGluZGV4OiBTdGFydCBlbnRyeSBvZmZzZXQgd2l0aGluIFNUIHRhYmxlXG4rICogQGNvdW50OiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZW50cmllcyB0byBjb25maWd1cmVcbisgKiBAZGF0YV91cHRyOiBVc2Vyc3BhY2UgZGF0YSBidWZmZXIgZm9yIDE2LWJpdCByYXcgU1QgdmFsdWVzXG4rICpcbisgKiBUaGlzIGZlYXR1cmUgcmVxdWlyZXMgdHdvIHByZWNvbmRpdGlvbnM6XG4rICogMS4gR2xvYmFsIGVuYWJsZV91bnNhZmVfdHBoIG1vZHVsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZDtcbisgKiAyLiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9FTkFCTEUgaGFzIGJlZW4gU0VUIG9uIHRoZSBkZXZpY2UgYmVmb3JlaGFuZC5cbisgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJR1x0MTRcbitcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3RfY29uZmlnIHtcbitcdF9fdTE2IGluZGV4O1xuK1x0X191MTYgY291bnQ7XG4rXHRfX3UzMiByZXNlcnZlZDsgLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVybyAqL1xuK1x0X19hbGlnbmVkX3U2NCBkYXRhX3VwdHI7XG4rfTtcbitcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE0OjQ0LjA0NTkwNzYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMzOTExMTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQQ0llIFRQSCBWRklPIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBQQ0llIFRQSCBzdXBwb3J0IHdpdGhpbiBWRklPLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGBkcml2ZXJzL3BjaS90cGguY2Agd2hpY2ggbm93IGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgZm9yIHJldHJpZXZpbmcgQ1BVIFNUIGluZm9ybWF0aW9uLCBleHBsaWNpdGx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBUUEgsIGFuZCBleHBvc2VzIHRoaXMgaW5mb3JtYXRpb24gdmlhIHRoZSBgdHBoX2NwdV9zdGAgc3lzZnMgYXR0cmlidXRlLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIGluIHRoZSBWRklPIFBDSSBjb2RlOiBgdmZpb19wY2kuY2AsIGB2ZmlvX3BjaV9jb25maWcuY2AsIGFuZCBgdmZpb19wY2lfY29yZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgVFBIIHN1cHBvcnQgaXMgYmVpbmcgaW50ZWdyYXRlZCwgYW5kIGl0J3MgY29udHJvbGxlZCBieSBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBlbmFibGVfdW5zYWZlX3RwaGAuIFRoaXMgcGFyYW1ldGVyIGZsYWdzIGEgcG90ZW50aWFsIHJpc2sgd2l0aCBlbmFibGluZyB0aGlzIGJlaGF2aW9yLCBzbyBpdCBpcyBuZWNlc3NhcnkgdG8gY29uc2lkZXIgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoaXMgc3VwcG9ydC4gTm93LCB0aGV5J3ZlIGFsc28gYWRkZWQgdGhlc2UgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzOiBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfRU5BQkxFYCBhbmQgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUX0NPTkZJR2AuIFRoYXQncyBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gZXhwb3NlIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB0aGUgdXNlciBzcGFjZS5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgYWxsIHBsYXkgb3V0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VPyBPYnZpb3VzbHksIFZGSU8gUENJIGlzIG9ubHkgcmVhY2hhYmxlIGlmIHlvdSBoYXZlIGEgUENJIGRldmljZSBwYXNzZWQgdGhyb3VnaCBkaXJlY3RseS4gQWx0ZXJuYXRpdmVseSwgaWYgYSB1c2VyIG1ha2VzIHVzZSBvZiBgdmZpby1wY2lgIHdpdGggYSBkdW1teSBkZXZpY2UsIG9yIGEgdmlydHVhbCBkZXZpY2UsIHlvdSBjb3VsZCB0ZXN0IHRoZSBjaGFuZ2VzLlxuXG5Ib2xkIG9uLCB0aGlzIGBlbmFibGVfdW5zYWZlX3RwaGAgcGFyYW1ldGVyIGlzIHNwZWNpZmljIHRvIGB2ZmlvX3BjaWAuIFRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbk9rYXksIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseS4gQXJlIHdlIGV2ZW4gYnVpbGRpbmcgdGhpcyBzdHVmZiBpbnRvIG91ciBmdXp6aW5nIGtlcm5lbHM/IEZpcnN0LCBpcyBgQ09ORklHX1BDSUVfVFBIYCBldmVuIGVuYWJsZWQ/IExldCdzIHZlcmlmeSB0aGF0LiBXYWl0LCB0aGF0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbm90IGEgbW9kdWxlLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgZGlyZWN0bHkuIE5leHQsIEkgc2hvdWxkIGNoZWNrIHRoYXQgYENPTkZJR19WRklPX1BDSWAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBhcyB0aGF0J3MgdGhlIGNvcmUgZGVwZW5kZW5jeS4gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzIGFuZCBydW4gc29tZSBxdWljayBjb25maWcgY2hlY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE0OjUxLjM4NTAyMTI5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY2MDIxMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lFX1RQSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJUTFAgUHJvY2Vzc2luZyBIaW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTQ6NTMuODUxMDQ4NzczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0NDk4NDYxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gYENPTkZJR19QQ0lFX1RQSGAsIHRoYXQncyBkZWZpbml0ZWx5IGEgbGVnaXRpbWF0ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbid0IGl0PyBHb29kLiBJIGp1c3Qgd2FudCB0byBxdWlja2x5IHZlcmlmeSBpdHMgY29udGV4dCBiZWZvcmUgbW92aW5nIG9uLiBOb3csIGxldCBtZSBzZWUuLi4gSSdtIHJlYWxseSBjdXJpb3VzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgQ09ORklHX1ZGSU9fUENJYC4gSSB3YW50IHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmN5IG9yIHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiB0aGUgdHdvLiBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBoZXJlPyBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmU/IERvZXMgb25lIGltcGxpY2l0bHkgcmVxdWlyZSB0aGUgb3RoZXI/IEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBJT01NVSBjb25maWd1cmF0aW9uIGFuZCBkZXZpY2UgcGFzc3Rocm91Z2ggc2NlbmFyaW9zLiBMZXQncyBkaWcgaW4gYSBiaXQgZnVydGhlciB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3QsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMxNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjIyLjMwMDg5NjU4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMzOTM0NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNToyNC41MzQ4NDIzNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAwMzc3NDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBOZXcgVkZJTyBJT0NUTHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX0VOQUJMRWAgYW5kIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVF9DT05GSUdgIGlvY3Rscy4gVGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYCBmdW5jdGlvbiwgYW5kIGNydWNpYWxseSwgdGhleSBkZXBlbmQgb24gdGhlIGBlbmFibGVfdW5zYWZlX3RwaGAgbW9kdWxlIHBhcmFtZXRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiBzeXprYWxsZXIgZWFzaWx5IHJlYWNoIHRoaXMgbmV3IGNvZGU/XCIgVHlwaWNhbGx5LCBtb2R1bGUgcGFyYW1ldGVycyBpbiBzeXprYWxsZXIgcmVxdWlyZSBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCB3aGljaCBhZGRzIG92ZXJoZWFkLiBXZSBjb3VsZCB0cnkgc3lzZnMgYnV0IGl0IGlzIG5vdCBleHBvc2VkIHRoaXMgd2F5LCBzbyBpdCBpcyB1bmxpa2VseS5cblxuQnV0LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwcm9tcHQgcmVtaW5kcyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGNvbmNlcm5zIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEhvd2V2ZXIsIFZGSU8gUENJIF9pc18gcmVhY2hhYmxlIGluIFFFTVUsIHJpZ2h0PyBTeXprYWxsZXIgaGFzIHRoZSBwcmltaXRpdmVzIHRvIGRvIHRoYXQgd2l0aCBgc3l6X2t2bV9zZXR1cF9jcHVgIGFuZCBzbyBvbiwgYW5kIEkga25vdyBpdCBoYXMgZnV6emluZyBjYXBhYmlsaXRpZXMgZm9yIGB2ZmlvYC4gSW4gZmFjdCwgaXQgaGFzICpkZXNjcmlwdGlvbnMqIGZvciBgdmZpb2AuXG5cblRoZXJlZm9yZSwgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBgdmZpb19wY2lgIGl0c2VsZiBpcyBiZWluZyBhY3RpdmVseSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBJZiBpdCBpcywgYW5kIHRoZXNlIG5ldyBpb2N0bHMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgZXhpc3RpbmcgVkZJTyBmdXp6aW5nIHN0cmF0ZWd5LCB0aGF0IGFkZHMgc2lnbmlmaWNhbnQgdmFsdWUuIElmIGl0IGlzbid0LCB0aGUgZWZmb3J0IHdvdWxkIGJlIHdvcnRoIG1vcmUgZGlzY3Vzc2lvbiwgYXMgdGhlIGxpa2VsaWhvb2Qgb2YgaGl0dGluZyB0aGlzIGNvZGUgcGF0aCBkZWNyZWFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDczLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjM2LjUzODYxOTQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzA0NDc5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTU4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9taWdybl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1ODgtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaGlzaV9hY2NfdmZpb19pb2N0bF9nZXRfcmVnaW9uLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTU4OTpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTkwLVxcdC5yZWFkID0gaGlzaV9hY2NfdmZpb19wY2lfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTYwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBoaXNpX2FjY192ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MDktXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTYxMDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjExLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDItXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gaXNtX3ZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM6MzQzOlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQ0LVxcdC5yZWFkID0gaXNtX3ZmaW9fcGNpX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTEzODY9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbWx4NXZmX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzOTMtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6MTM5NDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzk1LVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA2ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3MS1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBudmdyYWNlX2dwdV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA3MjpcXHQuZGV2aWNlX2ZlYXR1cmVcXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDczLVxcdC5yZWFkXFx0XFx0PSBudmdyYWNlX2dwdV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTA4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfY29yZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk2LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMDk3OlxcdC5kZXZpY2VfZmVhdHVyZVxcdD0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwOTgtXFx0LnJlYWRcXHRcXHQ9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM9MTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHBkc192ZmlvX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTk4LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jOjE5OTpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYy0yMDAtXFx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNDEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYzoxNDI6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNDMtXFx0LnJlYWRcXHRcXHQ9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MzQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZyhcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3MDQtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTcwNTppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNi1cXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzMxLX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNzMyOkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTczMy1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9sbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo5MjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkzLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV90cmFuX2xtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTMtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmlydGlvdmZfcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTE0OlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTE1LVxcdC5yZWFkID0gdmlydGlvdmZfcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNS1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjEzNjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNy1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTUyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB4ZV92ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MjktXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjUzMDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTMxLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTc0PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzUtXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjE3NjppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc3LVxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjM4LjQ2OTA3MzE3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MzE0MjA2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBDSWUgVFBIIENvZGUgUGF0aCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgcmVhY2hhYmxlLiBCdXQgdGhlcmUncyB0aGlzIGBlbmFibGVfdW5zYWZlX3RwaGAgbW9kdWxlIHBhcmFtZXRlciB0aGF0J3MgdGhlIGdhdGVrZWVwZXIuIEJ5IGRlZmF1bHQsIGl0J3MgYGZhbHNlYCwgd2hpY2ggaXMgYSBwcm9ibGVtLiBTeXprYWxsZXIgY2FuJ3QgZWFzaWx5IGVuYWJsZSBtb2R1bGUgcGFyYW1ldGVycyB1bmxlc3MgdGhleSdyZSBpbiB0aGUgY29uZmlnIG9yIHdyaXRhYmxlIHZpYSBzeXNmcywgYW5kIHRoaXMgb25lIGlzIHJlYWQtb25seS4gV2UncmUgZXZhbHVhdGluZyBpZiB0aGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCAqc2hvdWxkKiBiZSBmdXp6ZWQsIGFuZCB0aGlzIGxvb2tzIHRyaWNreS4gSWYgaXQgcmVxdWlyZXMgYSBtb2R1bGUgcGFyYW1ldGVyLCB3ZSBzaG91bGQgcHJvYmFibHkgbWVudGlvbiBpdCBpbiB0aGUgcmVhc29uaW5nLlxuXG5UaGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgZGlzYWJsZWQsIHRoZSBjb2RlIGlzIGluZGVlZCB1bnJlYWNoYWJsZS4gQnV0IGlmIHdlICp3YW50ZWQqIHRvIGZ1enogaXQsIHdlJ2QgbmVlZCB0byBlbmFibGUgdGhhdCBwYXJhbWV0ZXIgc29tZWhvdy4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGRpcmVjdCB3YXkgdG8gZG8gdGhhdCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIHRoZXJlJ3MgYSBzeXNmcyBhdHRyaWJ1dGUsIGB0cGhfY3B1X3N0YCwgYWRkZWQgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYC4gSXQncyBleHBvc2VkIG9uIFBDSWUgUm9vdCBQb3J0cyB3aXRoIFRQSCBDb21wbGV0ZXIgY2FwYWJpbGl0eSBhbmQgQUNQSSBEU00gc3VwcG9ydC4gSW4gUUVNVSwgZG9lcyB0aGUgUENJZSBSb290IFBvcnQgc3VwcG9ydCB0aGlzPyBJdCBtaWdodCBub3QuIEV2ZW4gaWYgaXQgZGlkLCB0aGUgYHRwaF9jcHVfc3RfYXR0cl9pc192aXNpYmxlYCBmdW5jdGlvbiBjaGVja3MgZm9yIHRoZSBUUEggQ29tcGxldGVyIGNhcGFiaWxpdHkgYW5kIEFDUEkgRFNNIHN1cHBvcnQuIElmIFFFTVUgZG9lc24ndCBoYXZlIHRoYXQsIHRoZSBzeXNmcyBmaWxlIHdvbid0IGJlIHZpc2libGUuXG5cbkxvb2tpbmcgYXQgdGhlIFZGSU8gUENJIHBhcnQsIGlmIGBlbmFibGVfdW5zYWZlX3RwaGAgaXMgZmFsc2UsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZWAgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0IG1lYW5zIHRoZSBpb2N0bCB3aWxsIGp1c3QgcmV0dXJuIGFuIGVycm9yLiBJbiBgdmZpb19wY2lfY29uZmlnLmNgLCBgdmRldi1cdTAwM2V0cGhfcGVybWl0YCBpcyBvbmx5IHNldCBpbiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9lbmFibGVgLCB3aGljaCByZXF1aXJlcyB0aGUgbW9kdWxlIHBhcmFtZXRlci4gU28sIGFsbCB0aGUgVkZJTyBUUEggY29kZSBwYXRocyBhcmUgZ2F0ZWQuXG5cblNpbmNlIGBlbmFibGVfdW5zYWZlX3RwaGAgaXMgcmVhZC1vbmx5IGFuZCBkZWZhdWx0cyB0byBmYWxzZSwgaXQgY2FuJ3QgYmUgZW5hYmxlZCBhdCBydW50aW1lLiBTeXprYWxsZXIgY2FuIHBhc3MgYm9vdCBwYXJhbWV0ZXJzLCBidXQgbm90IGluIHRoaXMgYHNldC1yZXN1bHRzYCBzaXR1YXRpb24uIEkgY2FuJ3QgZXZlbiB0ZWxsIFN5emthbGxlciB0byBwYXNzIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYC5cblxuSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBhIGRpc2FibGVkLWJ5LWRlZmF1bHQgbW9kdWxlIHBhcmFtZXRlciwgaXMgaXQgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCI/IFllcywgcHJldHR5IG11Y2gsIHVubGVzcyB0aGF0IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuIEJ1dCB3YWl0LCBgQ09ORklHX1BDSUVfVFBIYCBpcyBhIGNvbmZpZyBvcHRpb24sIHdlIGNhbiBlbmFibGUgaXQuLi4gaXMgaXQgc3RpbGwgd29ydGggZnV6emluZyB0aGVuPyBZZXMsIGJ1dCBvbmx5IGlmIHdlIGNhbiBmaW5kIGEgd2F5IHRvIHNwZWNpZnkgdGhlIHBhcmFtLlxuXG5XaGF0IGlmIGB2ZmlvX3BjaWAgaXMgYnVpbHQtaW4/IFRoZW4gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBjYW4gYmUgcGFzc2VkLi4uIElmIGl0J3MgYSBtb2R1bGUsIGl0J3MgYSBtb2R1bGUgcGFyYW1ldGVyLiBTaW5jZSB3ZSBjYW4ndCBzcGVjaWZ5IGEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgaGVyZSwgaXQncyBhIGJpdCBvZiBhIGRpbGVtbWEuXG5cblN5emthbGxlciBkb2VzIGhhdmUgYGtlcm5lbF9jbWRsaW5lYCBpbiBpdHMgY29uZmlnLCBidXQgd2UgY2FuJ3Qgc2V0IHRoYXQgaGVyZS4gVGhlIHByb21wdCBpcyBzdGlsbCByZWxldmFudCB0aG91Z2g6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoXCIuIFdpdGhvdXQgdGhhdCBwYXJhbWV0ZXIsIGl0ICppcyogdW5yZWFjaGFibGUsIGJ1dCB3ZSBjb3VsZCB0cnkgb3RoZXIgbWV0aG9kcy5cblxuTWF5YmUgd2Ugc2hvdWxkIHNheSBpdCdzIGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGxldCB0aGUgc3l6a2FsbGVyIG1haW50YWluZXJzIGZpZ3VyZSBpdCBvdXQ/XG5cbldhaXQsIHdoYXQgYWJvdXQgdGhlIGV4cG9ydGVkIHN5bWJvbHM6IGBwY2llX3RwaF9nZXRfY3B1X3N0YCwgYHBjaWVfdHBoX3NldF9zdF9lbnRyeWAsIGBwY2llX2Rpc2FibGVfdHBoYCwgYHBjaWVfZW5hYmxlX3RwaGAuIEFyZSB0aGV5IHVzZWQgYnkgYW55IG90aGVyIGRyaXZlcnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjMyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNTo1Ny43ODMyODI3NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjM4MjI5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpZV9lbmFibGVfdHBoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NDg9VG8gZW5hYmxlIFRQSCBmb3IgYSBkZXZpY2UsIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOjpcXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0LTQ5LVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q6NTA6ICBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdC01MS1cXG4tLVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NTM9Q3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3QtNTgtXFxuRG9jdW1lbnRhdGlvbi9QQ0kvdHBoLnJzdDo1OTpgcGNpZV9lbmFibGVfdHBoKClgIGNoZWNrcyB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcyBhY3R1YWxseVxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3QtNjAtc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nLiBUaGUgZGV2aWNlIGRyaXZlciBjYW4gZmlndXJlIG91dFxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3Q9NjE9d2hpY2ggVFBIIG1vZGUgaXMgc3VwcG9ydGVkIGFuZCBjYW4gYmUgcHJvcGVybHkgZW5hYmxlZCBiYXNlZCBvbiB0aGVcXG5Eb2N1bWVudGF0aW9uL1BDSS90cGgucnN0OjYyOnJldHVybiB2YWx1ZSBvZiBgcGNpZV9lbmFibGVfdHBoKClgLlxcbkRvY3VtZW50YXRpb24vUENJL3RwaC5yc3QtNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xMTg0Mj1zdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTE4NTgtXFx0LyogRW5hYmxlIFRQSCBzdXBwb3J0IGFzIHBhcnQgb2YgSVJRIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxMTg1OTpcXHRyYyA9IHBjaWVfZW5hYmxlX3RwaChicC1cXHUwMDNlcGRldiwgUENJX1RQSF9TVF9JVl9NT0RFKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xMTg2MC1cXHRpZiAoIXJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jPTI1PXN0cnVjdCBtbHg1X3N0ICptbHg1X3N0X2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU3LVxcdC8qIFRoZSBPUyBkb2Vzbid0IHN1cHBvcnQgU1QgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmM6NTg6XFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoKHBkZXYsIFBDSV9UUEhfU1RfRFNfTU9ERSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jLTU5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYz00NDU9c3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy00ODgtLyoqXFxuZHJpdmVycy9wY2kvdHBoLmM6NDg5OiAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxcbmRyaXZlcnMvcGNpL3RwaC5jLTQ5MC0gKiBAcGRldjogUENJIGRldmljZVxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNTAzLSAqL1xcbmRyaXZlcnMvcGNpL3RwaC5jOjUwNDppbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG5kcml2ZXJzL3BjaS90cGguYy01MDUte1xcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNTA5LX1cXG5kcml2ZXJzL3BjaS90cGguYzo1MTA6RVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xcbmRyaXZlcnMvcGNpL3RwaC5jLTUxMS1cXG5kcml2ZXJzL3BjaS90cGguYy01MTItLyoqXFxuZHJpdmVycy9wY2kvdHBoLmM6NTEzOiAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTUxNy0gKlxcbmRyaXZlcnMvcGNpL3RwaC5jOjUxODogKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE5LSAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy01MjMtICovXFxuZHJpdmVycy9wY2kvdHBoLmM6NTI0OmludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKVxcbmRyaXZlcnMvcGNpL3RwaC5jLTUyNS17XFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy01MjktfVxcbmRyaXZlcnMvcGNpL3RwaC5jOjUzMDpFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7XFxuZHJpdmVycy9wY2kvdHBoLmMtNTMxLVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYz0xMTMwPXN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTE3OS1cXHRcXHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjExODA6XFx0XFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHBkZXYsIG1vZGUsIGV4dGVuZGVkKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExODEtXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdmRldi1cXHUwMDNldHBoX3N0X3NoYWRvdykge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9MzM9dm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDozNDppbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6MzU6aW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpO1xcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTM2LXU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9NTQ9c3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjU1OnN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTYteyByZXR1cm4gLUVJTlZBTDsgfVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjU3OnN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTgtXFx0XFx0XFx0XFx0XFx0ICAgYm9vbCBleHRlbmRlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTU6NTkuODQ3MTEyNDI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzc2NjAzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFRQSCBQYXRjaCBhbmQgUmVhY2hhYmlsaXR5IGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQncyBhY3R1YWxseSByZWFjaGFibGUgYnkgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCBjb2RlIG1vZGlmaWNhdGlvbnMgc2VlbSBzdHJhaWdodGZvcndhcmQg4oCTIGNoYW5nZXMgdG8gYHRwaC5jYCwgYHZmaW9fcGNpX2NvbmZpZy5jYCwgYW5kIGB2ZmlvX3BjaV9jb3JlLmNgLCBwbHVzIHRoZSBhZGRpdGlvbiBvZiBzb21lIG5ldyBmdW5jdGlvbnMgKGBwY2llX2VuYWJsZV90cGhfZXhwbGljaXRgLCBldGMuKSBhbmQgYSBzeXNmcyBhdHRyaWJ1dGUgKGB0cGhfY3B1X3N0YCkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCBcIldoZXJlIGRvZXMgdGhpcyBhY3R1YWxseSAqcnVuKj9cIiBUaGUgcGF0Y2ggbWVudGlvbnMgYGJueHRgIGFuZCBgbWx4NWAsIGJ1dCB0aG9zZSBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgc28gcHJvYmFibHkgbm90IHN5emthbGxlcidzIHVzdWFsIHBsYXlncm91bmQuXG5cblRoZSBWRklPIGNvZGUgaXMgYSBiaWcgcXVlc3Rpb24gbWFyay4gSXQgbG9va3MgbGlrZSBpdCdzICptb3N0bHkqIHVucmVhY2hhYmxlIHVubGVzcyBgZW5hYmxlX3Vuc2FmZV90cGhgIGlzIHNldC4gVGhlIGAtRU9QTk9UU1VQUGAgcmV0dXJucywgdGhlIGB2ZGV2LVx1MDAzZXRwaF9wZXJtaXRgIGNoZWNrLi4uIGl0IGFsbCBwb2ludHMgdG8gdGhhdCBiZWluZyB0aGUgZ2F0ZWtlZXBlci4gQW5kIHRoZSBzeXNmcyBhdHRyaWJ1dGU/IFRoYXQgaGFzIG11bHRpcGxlIGNoZWNrczogd2hldGhlciB0aGUgZGV2aWNlIGlzIGEgUm9vdCBQb3J0LCBpZiBpdCBzdXBwb3J0cyBUUEggQ29tcGxldGVyLCBhbmQgd2hldGhlciB0aGUgQUNQSSBEU00gaXMgcHJlc2VudC4gUUVNVSBhbmQgR0NFIG9mdGVuIGhhdmUgbGltaXRlZCBjYXBhYmlsaXRpZXMgaW4gdGhlc2UgYXJlYXMuXG5cbk5vdywgbGV0J3MgYnJlYWsgdGhpcyBkb3duOlxuXG4qICAgKipWRklPOioqIFZpcnR1YWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IGEgbW9kdWxlIHBhcmFtZXRlci5cbiogICAqKlN5c2ZzIGF0dHJpYnV0ZToqKiBQcm9iYWJseSB1bnJlYWNoYWJsZSBiZWNhdXNlIHN5emthbGxlciBjYW4ndCBpbmplY3QgQUNQSSBEU01zLlxuKiAgICoqT3RoZXIgZnVuY3Rpb25zOioqIFRoZSBgcGNpX3RwaF9pbml0YCBmdW5jdGlvbiAqaXMqIHJlYWNoYWJsZSwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGluamVjdCB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGlzIGNvZGUgcmVhZHMgc29tZSBjb25maWcgc3BhY2UgYW5kIHNldHMgYSBmZXcgYml0cywgYnV0IG5vIHJlYWwgc2lkZSBlZmZlY3RzLiBUaGVuIHRoZXJlIGlzIGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCwgYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAgdGhhdCBjYW4gYmUgcmVhY2hlZCBpZiBgdmZpb19wY2lgIGlzIHVzZWQuXG4qICAgKipNb2RpZmllZCBgcGNpZV9lbmFibGVfdHBoYDoqKiBSZWFjaGVkIGlmIHRoZSBgYm54dGAgb3IgYG1seDVgIGRyaXZlcnMgYXJlIGxvYWRlZCwgYnV0IHVubGlrZWx5IGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcyAqbmV3KiBWRklPIGZ1bmN0aW9uYWxpdHkuIEV2ZW4gdGhvdWdoIGl0J3MgZ2F0ZWQgYnkgYGVuYWJsZV91bnNhZmVfdHBoYCwgdGhpcyBpcyBhIHZhbGlkIGZlYXR1cmUuXG5cblRoZXJlZm9yZSwgZGVzcGl0ZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgdGhlIGRpZmZpY3VsdHkgaW4gcmVhY2hpbmcgaXQgKmRpcmVjdGx5KiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBJIHNob3VsZCBjb25zaWRlciB0aGUgcGF0Y2gncyBmdW5jdGlvbmFsaXR5IGFuZCBtYXJrIGl0IGFzIGZ1enplci13b3J0aHkuIFRoZSByZWFzb25pbmcgd291bGQgYmUgdGhhdCB0aGlzIHBhdGNoIGFkZHMgVFBIIHN1cHBvcnQgdG8gVkZJTyBQQ0kuIEl0IGlzIGdhdGVkIGJ5IHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGhgIG1vZHVsZSBwYXJhbWV0ZXIsIHdoaWNoIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzQ1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjozMC42MjM3MTgzMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTc5MTQwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSUVfVFBIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk2LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjozMi43MjE2Mzc5MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg0OTk5MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gc29tZSBQQ0kgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgd2l0aCBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTk3LiBUaGlzIGxpa2VseSBjZW50ZXJzIG9uIGEgZ3JvdXAgb2YgcmVsYXRlZCBvcHRpb25zLCBwcm9iYWJseSB3aXRoaW4gYSBkZWZpbmVkIFwibWVudVwiIG9yIGJsb2NrLCBnaXZlbiB0aGUgYEtjb25maWdgIGZpbGUgc3RydWN0dXJlLiBJJ20gZ3Vlc3NpbmcgdGhhdCBsaW5lIG51bWJlciBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgZm9yIGEgcGFydGljdWxhciBzZXQgb2YgZmVhdHVyZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBjZXJ0YWluIFBDSS1yZWxhdGVkIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBwb3NzaWJseSBkZXBlbmRlbnQgb24gaGFyZHdhcmUsIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucywgb3Igc3BlY2lmaWMgdXNlLWNhc2VzLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCBwaWN0dXJlIG9mIHRob3NlIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgc29tZSBoZWxwIHRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6NDAuNTcxNjM0MjM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcGNpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdCAgdG8gYWNjZXNzIG1vcmUgdGhhbiBvbmUgSU8gYWRkcmVzcyBzcGFjZSBhdCB0aGUgc2FtZSB0aW1lLiBUbyBtYWtlXFxuIDE5MTpcXHRcXHQgIHVzZSBvZiB0aGlzIGZlYXR1cmUgYW4gSU9NTVUgaXMgcmVxdWlyZWQgd2hpY2ggYWxzbyBzdXBwb3J0cyBQQVNJRHMuXFxuIDE5MjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBzdWNoIGFuIElPTU1VIGFuZCB3YW50IHRvIGNvbXBpbGUgdGhlXFxuIDE5MzpcXHRcXHQgIGRyaXZlciBmb3IgaXQgaW50byB5b3VyIGtlcm5lbC5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxOTY6XFx0XFxuIDE5NzpcXHRjb25maWcgUENJRV9UUEhcXG4gMTk4OlxcdFxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcbiAxOTk6XFx0XFx0aGVscFxcbiAyMDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuXFxuIDIwMTpcXHRcXHQgIFRQSCBhbGxvd3MgZW5kcG9pbnQgZGV2aWNlcyB0byBwcm92aWRlIG9wdGltaXphdGlvbiBoaW50cywgc3VjaCBhc1xcbiAyMDI6XFx0XFx0ICBkZXNpcmVkIGNhY2hpbmcgYmVoYXZpb3IsIGZvciByZXF1ZXN0cyB0aGF0IHRhcmdldCBtZW1vcnkgc3BhY2UuXFxuIDIwMzpcXHRcXHQgIFRoZXNlIGhpbnRzLCBjYWxsZWQgU3RlZXJpbmcgVGFncywgY2FuIGVtcG93ZXIgdGhlIHN5c3RlbSBoYXJkd2FyZVxcbiAyMDQ6XFx0XFx0ICB0byBvcHRpbWl6ZSB0aGUgdXRpbGl6YXRpb24gb2YgcGxhdGZvcm0gcmVzb3VyY2VzLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgUENJX1AyUERNQVxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbiAyMDk6XFx0XFx0I1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjo0MC41NzE3MDc5MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM2NjMxNzc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJZSBUUEggYW5kIFZGSU8gUENJIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYFBDSUVfVFBIYCBtaWdodCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LCBzbyB3ZSBkZWZpbml0ZWx5IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIHNob3VsZCBhbHNvIGVuc3VyZSBgVkZJT19QQ0lgIGlzIGVuYWJsZWQsIGFsdGhvdWdoIHRoYXQncyBsaWtlbHkgYWxyZWFkeSB0aGUgY2FzZSBpbiBzeXprYWxsZXIgY29uZmlncy4gSXQgYXBwZWFycyB0aGUgcHJvbXB0IHdhbnRzIHVzIHRvIGZvY3VzIG9uIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLCBzbyBgUENJRV9UUEhgIGlzIHRoZSBrZXkuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgdGhlIG9uZXMgd2Ugd2FudCBzeXprYWxsZXIgdG8gdGFyZ2V0PyBMZXQncyB6b29tIGluIG9uIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jYCwgYW5kIGBkcml2ZXJzL3BjaS90cGguY2Agc2luY2UgdGhlc2UgYXJlIHRoZSBtYWluIGNoYW5nZXMuIFdlIHNob3VsZCBwcmlvcml0aXplIGZ1bmN0aW9ucyBpbiB0aGUgVkZJTyBzcGFjZSBhcyB0aGVzZSBhcmUgd2hhdCB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGgsIHNvIHRob3NlIGFyZSBrZXkuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nOlxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX2VuYWJsZWBcbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdF9jb25maWdgXG4qICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWBcbiogICBgdmZpb19wY2lfdHBoX2luaXRgXG4qICAgYHBjaV90cGhfaW5pdGBcbiogICBgdHBoX2NwdV9zdF9yZWFkYFxuKiAgIGBlbmFibGVfdHBoYFxuXG5XZSB3YW50IGB0cGhfY3B1X3N0X3JlYWRgIHRvIGJlIHZpc2libGUsIHNvIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBlZGdlIGNhc2UuIEV2ZW4gaWYgaXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGB0cGhfZHNtX3N1cHBvcnRlZGAgYmVpbmcgZmFsc2UsIGl0IG1pZ2h0IHN0aWxsIGJlIHdvcnRoIGxpc3RpbmcgaXQuIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGJlY2F1c2Ugc3l6a2FsbGVyIGZ1enplcyB3cml0ZXMgdG8gdGhlIFZGSU8gUENJIGNvbmZpZyBzcGFjZS4gYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlYCBpcyByZWFjaGFibGUgdmlhIGBWRklPX0RFVklDRV9GRUFUVVJFYCBpb2N0bC5cblxuQSBrZXkgcG9pbnQgaXMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGVuYWJsZV91bnNhZmVfdHBoYCB3aGljaCwgaWYgKm5vdCogc2V0LCB3aWxsIG1ha2UgdGhlIGNvZGUganVzdCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBzYWlkLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIGl0J3Mgd29ydGggZnV6emluZyBzaW5jZSBpdCBtYXkgcmV2ZWFsIG5ldyBmbGF3cyBvciBhcmVhcyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBTeXprYWxsZXIncyBtYWludGFpbmVycyBzaG91bGQgYmUgYXdhcmUgdGhhdCBzZXR0aW5nIHRoZSBgdmZpb19wY2kuZW5hYmxlX3Vuc2FmZV90cGg9MWAga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgd2lsbCBiZSAqZXNzZW50aWFsKiB0byBhY3R1YWxseSByZWFjaCB0aGUgdGFyZ2V0IGxvZ2ljLlxuXG5TbywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJIHdpbGwgYWRkIHRoZSBWRklPIGZ1bmN0aW9ucyBmaXJzdC4gVGhlbiBJIGFtIGFkZGluZyB0aGUgUENJIGluaXRpYWxpemF0aW9uIGNvZGUgYXMgaXQncyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBwcm9iZS5cbkknbSBpbmNsdWRpbmcgYHRwaF9jcHVfc3RfcmVhZGAgYW5kIGBlbmFibGVfdHBoYC5cblxuTXkgUmVhc29uaW5nIGlzLCBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS4gV2UgaW5jbHVkZSBgZW5hYmxlX3RwaGAgYXMgaXQncyBwYXJ0IG9mIHRoZSB3cml0ZSBwYXRoLiBgdHBoX2NwdV9zdF9yZWFkYCBpcyBpbmNsdWRlZC5cIlxuXG5UaGUgY3JpdGljYWwgY29uZmlnIHdlIG5lZWQgaXMgYFBDSUVfVFBIYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MTAsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE3OjA0LjIzNDg4ODAzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTEwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZ1wiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3BjaV90cGhfaW5pdFwiLFxuICAgIFwicGNpX3RwaF9pbml0XCIsXG4gICAgXCJlbmFibGVfdHBoXCIsXG4gICAgXCJ0cGhfY3B1X3N0X3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfZW5hYmxlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0X2NvbmZpZ1wiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3BjaV90cGhfaW5pdFwiLFxuICAgIFwicGNpX3RwaF9pbml0XCIsXG4gICAgXCJlbmFibGVfdHBoXCIsXG4gICAgXCJ0cGhfY3B1X3N0X3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBQQ0llIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50cykgc3VwcG9ydCB0byBWRklPIFBDSSBhbmQgYWRkcyBhIHN5c2ZzIGF0dHJpYnV0ZSBmb3IgQ1BVLXRvLVNUIG1hcHBpbmcuIFRoZSBWRklPIGlvY3RscyBhbmQgY29uZmlnIHNwYWNlIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIGB2ZmlvX3BjaS5lbmFibGVfdW5zYWZlX3RwaD0xYCBtb2R1bGUgcGFyYW1ldGVyIHRvIGJlIHNldCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gVGhlIGNvcmUgUENJIFRQSCBpbml0aWFsaXphdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIHZpcnR1YWwgUENJIGRldmljZSBwcm9iZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[1] Phase: Succeeded StartedAt: 2026-06-22 08:17:32 +0000 UTC FinishedAt: 2026-06-22 08:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 08:17:32 +0000 UTC FinishedAt: 2026-06-22 08:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2] Phase: Succeeded StartedAt: 2026-06-22 08:17:32 +0000 UTC FinishedAt: 2026-06-22 09:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-22 08:17:32 +0000 UTC FinishedAt: 2026-06-22 09:16:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 08:17:32 +0000 UTC FinishedAt: 2026-06-22 08:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 08:17:32 +0000 UTC FinishedAt: 2026-06-22 08:17:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-convert-artifact-3778391058/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 08:17:42 +0000 UTC FinishedAt: 2026-06-22 08:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 08:17:42 +0000 UTC FinishedAt: 2026-06-22 08:54:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16171547-e47d-4401-a33c-bfa47459470a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-convert-artifact-3778391058/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f8fc7ce0-038c-4243-9f37-15e27622f5e8", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-build-action-1901079952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 08:17:42 +0000 UTC FinishedAt: 2026-06-22 08:54:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16171547-e47d-4401-a33c-bfa47459470a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-convert-artifact-3778391058/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f8fc7ce0-038c-4243-9f37-15e27622f5e8", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-build-action-1901079952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 08:54:54 +0000 UTC FinishedAt: 2026-06-22 08:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 08:54:54 +0000 UTC FinishedAt: 2026-06-22 08:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 08:54:54 +0000 UTC FinishedAt: 2026-06-22 08:55:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 08:54:54 +0000 UTC FinishedAt: 2026-06-22 08:55:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-convert-artifact-552947757/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 08:55:47 +0000 UTC FinishedAt: 2026-06-22 08:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 08:55:47 +0000 UTC FinishedAt: 2026-06-22 08:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f8fc7ce0-038c-4243-9f37-15e27622f5e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-build-action-1901079952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 08:57:25 +0000 UTC FinishedAt: 2026-06-22 08:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 08:57:25 +0000 UTC FinishedAt: 2026-06-22 08:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 08:57:25 +0000 UTC FinishedAt: 2026-06-22 09:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 08:57:25 +0000 UTC FinishedAt: 2026-06-22 09:16:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16171547-e47d-4401-a33c-bfa47459470a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-convert-artifact-552947757/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "98884372-3620-4a5c-b061-f66d9f711af9", "success": false },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-build-action-305763465/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 08:57:25 +0000 UTC FinishedAt: 2026-06-22 09:15:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16171547-e47d-4401-a33c-bfa47459470a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-convert-artifact-552947757/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "98884372-3620-4a5c-b061-f66d9f711af9", "success": false },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfg5hv/series-workflowfg5hv-build-action-305763465/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-06-22 09:16:20 +0000 UTC FinishedAt: 2026-06-22 09:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg5hv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph_enable","vfio_pci_core_feature_tph_st_config","vfio_tph_config_write","vfio_pci_tph_init","pci_tph_init","enable_tph","tph_cpu_st_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH"],"series_id":"a66c1909-0e1c-439d-92c4-146c8e09daea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-06-22 09:16:20 +0000 UTC FinishedAt: 2026-06-22 09:16:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}