Name: series-workflowplzcs Phase: Succeeded StartedAt: 2026-07-06 14:34:08 +0000 UTC FinishedAt: 2026-07-06 16:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[0] Phase: Succeeded StartedAt: 2026-07-06 14:34:08 +0000 UTC FinishedAt: 2026-07-06 14:57:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 14:34:08 +0000 UTC FinishedAt: 2026-07-06 14:57:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1ee27dacbe5dc4def481794d899d67b0d4570094", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1ee27dacbe5dc4def481794d899d67b0d4570094", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "7e72db22-d50a-48d3-af61-a4a0a6fe14c2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arm_pmu_v3_set_pmu_fixed_counters_only", "kvm_vcpu_load_pmu", "kvm_supports_guest_pmuv3", "kvm_pmu_create_perf_event", "kvm_arm_pmu_v3_set_attr" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDVmZjg4OWM5ZWQ1MGQxYjlhYjhjMWU1MWVjZWVjZmNiMDc5MDRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTQ6NTY6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMTRkMTFmOTE3OWQxZjUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuQEAgLTc0LDcgJiM0Mzs3NCw4IEBAIGlycWNoaXAuXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XG4gXHQgXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxuLVx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuJiM0MztcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4mIzQzO1x0XHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZVxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuQEAgLTExNiwxNCAmIzQzOzExNywxNCBAQCB1c2luZyBldmVudCAweDExIChDUFVfQ1lDTEVTKS5cbiBcbiA6UmV0dXJuczpcbiBcbi1cdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxuJiM0MzsgICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgb3IgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcbiBcdCAtRU5YSU8gICBQTVUgbm90IGZvdW5kXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBSZXF1ZXN0IHRoYXQgdGhlIFZDUFUgdXNlcyB0aGUgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSB3aGVuIGNyZWF0aW5nIGd1ZXN0IGV2ZW50c1xuIGZvciB0aGUgcHVycG9zZSBvZiBQTVUgZW11bGF0aW9uLiBUaGUgUE1VIGlkZW50aWZpZXIgY2FuIGJlIHJlYWQgZnJvbSB0aGUgXCYjMzQ7dHlwZVwmIzM0O1xuQEAgLTE2NSw2ICYjNDM7MTY2LDI5IEBAIGV4cGxpY2l0bHkgc2VsZWN0ZWQsIG9yIHRoZSBudW1iZXIgb2YgY291bnRlcnMgaXMgb3V0IG9mIHJhbmdlIGZvciB0aGVcbiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpc1xuIGF0dHJpYnV0ZS5cbiBcbiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyXG4mIzQzO1xuJiM0Mzs6UmV0dXJuczpcbiYjNDM7XG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4sXG4mIzQzO1x0XHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxuJiM0MztcdFx0ICBhIGhhcmR3YXJlIFBNVSBoYXMgYWxyZWFkeSBiZWVuIHNwZWNpZmllZFxuJiM0MztcdCAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nXG4mIzQzO1x0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIE9ubHkgZml4ZWRcbiYjNDM7Y291bnRlcnMgYXJlIGV4cG9zZWQgdG8gdGhlIGd1ZXN0OiB0aGUgY3ljbGUgY291bnRlciB0b2RheSwgYW5kIHRoZSBpbnN0cnVjdGlvblxuJiM0Mztjb3VudGVyIGlmIHN1cHBvcnQgZm9yIEZFQVRfUE1VdjNfSUNOVFIgaXMgYWRkZWQuXG4mIzQzO1xuJiM0MztXaXRoIHByb2dyYW1tYWJsZSBjb3VudGVycyBkaXNhYmxlZCwgdGhlIFZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVLlxuJiM0MztUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgb24gaGV0ZXJvZ2VuZW91cyBzeXN0ZW1zIHdoZXJlIGRpZmZlcmVudCBoYXJkd2FyZVxuJiM0MztQTVVzIGNvdmVyIGRpZmZlcmVudCBwaHlzaWNhbCBDUFVzLiBBbGwgVkNQVXMgaW4gYSBWTSBzaGFyZSB0aGlzIGF0dHJpYnV0ZS5cbiYjNDM7XG4gMi4gR1JPVVA6IEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyZmFhNjBkZjg0N2QyMC4uZjY2NDU5ZjgxY2Q2YzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTM2Nyw2ICYjNDM7MzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXHRcdDEwXG4gXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXHRcdFx0XHQxMVxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXG4mIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcdFx0XHQxMlxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ2FtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cbiYjNDM7I2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQxM1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiAmIzQzOzQzNyw3IEBAIGVudW0ge1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUlx0XHQyXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVVx0XHQzXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTXHQ0XG4mIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDVcbiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXHRcdDFcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVJcdFx0MFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUlx0XHQxXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggMzczMmVlOWViMGQ0ZTcuLjFjMGJjZTI3YzcxYmY1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtNjk4LDYgJiM0Mzs2OTgsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRpZiAoaGFzX3ZoZSgpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9sb2FkX3BtdSh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuIFx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG5AQCAtMTU1NCwxNCAmIzQzOzE1NTUsMTkgQEAgaW50IGt2bV92bV9pb2N0bF9pcnFfbGluZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX2xldmVsICppcnFfbGV2ZWwsXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKHZvaWQpXG4mIzQzO3N0YXRpYyBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBLVk1fVkNQVV9WQUxJRF9GRUFUVVJFUztcbiYjNDM7XHRpbnQgcjtcbiBcbiBcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfMzJCSVRfRUwxKSlcbiBcdFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9FTDFfMzJCSVQsIFx1MDAyNmZlYXR1cmVzKTtcbiBcbi1cdGlmICgha3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkpXG4mIzQzO1x0ciA9IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpO1xuJiM0MztcdGlmIChyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHI7XG4mIzQzO1xuJiM0MztcdGlmICghcilcbiBcdFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9QTVVfVjMsIFx1MDAyNmZlYXR1cmVzKTtcbiBcbiBcdGlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKVxuQEAgLTE1ODIsNiAmIzQzOzE1ODgsNyBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2luaXRfY2hlY2tfZmVhdHVyZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCAqaW5pdClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cdTAwM2VmZWF0dXJlc1swXTtcbiYjNDM7XHRsb25nIHI7XG4gXHRpbnQgaTtcbiBcbiBcdGlmIChmZWF0dXJlcyBcdTAwMjYgfktWTV9WQ1BVX1ZBTElEX0ZFQVRVUkVTKVxuQEAgLTE1OTIsNyAmIzQzOzE1OTksMTEgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pbml0X2NoZWNrX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdH1cbiBcbi1cdGlmIChmZWF0dXJlcyBcdTAwMjYgfnN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpKVxuJiM0MztcdHIgPSBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXMoKTtcbiYjNDM7XHRpZiAociBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByO1xuJiM0MztcbiYjNDM7XHRpZiAoZmVhdHVyZXMgXHUwMDI2IH5yKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbmluZGV4IGVkYjIxMjM5NDc4YTk1Li41MjgxMjYwN2I3NmQ5OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbkBAIC03LDkgJiM0Mzs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wbXUuaFx1MDAzZVxuQEAgLTI0LDEwICYjNDM7MjQsMjYgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcbiBzdGF0aWMgdm9pZCBrdm1fcG11X3JlbGVhc2VfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcbiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcbiBcbi1ib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKVxuJiM0MztpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbiYjNDM7XHRjcHVtYXNrX3Zhcl90IGNwdXMgX19mcmVlKGZyZWVfY3B1bWFza192YXIpID0gQ1BVTUFTS19WQVJfTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4mIzQzO1xuJiM0MztcdGlmICghYWxsb2NfY3B1bWFza192YXIoXHUwMDI2Y3B1cywgR0ZQX0tFUk5FTCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y3B1bWFza19jb3B5KGNwdXMsIGNwdV9wb3NzaWJsZV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWNwdW1hc2tfYW5kbm90KGNwdXMsIGNwdXMsIFx1MDAyNnBtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9wbWNfdG9fdmNwdShjb25zdCBzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuQEAgLTgwLDYgJiM0Mzs5NiwxMSBAQCB1NjQga3ZtX3BtdV9ldnR5cGVyX21hc2soc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIG1hc2s7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBrdm1fcG1jX2lzXzY0Yml0IC0gZGV0ZXJtaW5lIGlmIGNvdW50ZXIgaXMgNjRiaXRcbiAgKiBAcG1jOiBjb3VudGVyIGNvbnRleHRcbkBAIC0zMjcsNyAmIzQzOzM0OCwxMSBAQCB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiB7XG4tXHRpZiAoIXBtYy1cdTAwM2VwZXJmX2V2ZW50KSB7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG4mIzQzO1xuJiM0MztcdGlmICghcG1jLVx1MDAzZXBlcmZfZXZlbnQgfHxcbiYjNDM7XHQgICAgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAhY3B1bWFza190ZXN0X2NwdSh2Y3B1LVx1MDAzZWNwdSwgXHUwMDI2dG9fYXJtX3BtdShwbWMtXHUwMDNlcGVyZl9ldmVudC1cdTAwM2VwbXUpLVx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcbiBcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtNjQ5LDEwICYjNDM7Njc0LDggQEAgc3RhdGljIGJvb2wga3ZtX3BtY19jb3VudHNfYXRfZWwyKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHRyZXR1cm4ga3ZtX3BtY19yZWFkX2V2dHJlZyhwbWMpIFx1MDAyNiBBUk1WOF9QTVVfSU5DTFVERV9FTDI7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4mIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxuIHtcbi1cdHN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuLVxuIFx0LypcbiBcdCAqIFRoZSBDUFUgUE1VIGxpa2VseSBpc24mIzM5O3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELlxuQEAgLTY2Myw2ICYjNDM7Njg2LDIzIEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4gXHRyZXR1cm4gZXZlbnRzZWw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4mIzQzO1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4mIzQzO1x0XHRwbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXHUwMDI2cG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHBtdTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcbiAgKiBAcG1jOiBDb3VudGVyIGNvbnRleHRcbkBAIC02NzYsNiAmIzQzOzcxNiwxMiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHRpbnQgZXZlbnRzZWw7XG4gXHR1NjQgZXZ0cmVnO1xuIFxuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS1cdTAwM2VjcHUpO1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRSghYXJtX3BtdSkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXZ0cmVnID0ga3ZtX3BtY19yZWFkX2V2dHJlZyhwbWMpO1xuIFxuIFx0a3ZtX3BtdV9zdG9wX2NvdW50ZXIocG1jKTtcbkBAIC03MDQsNyAmIzQzOzc1MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdCAqIERvbiYjMzk7dCBjcmVhdGUgYW4gZXZlbnQgaWYgd2UmIzM5O3JlIHJ1bm5pbmcgb24gaGFyZHdhcmUgdGhhdCByZXF1aXJlc1xuIFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbiYjMzk7dCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cbiBcdCAqL1xuLVx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudCh2Y3B1LVx1MDAzZWt2bSwgZXZlbnRzZWwpO1xuJiM0MztcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpO1xuIFx0aWYgKGV2ZW50c2VsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNzg5LDQzICYjNDM7ODM1LDcgQEAgdm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRlbnRyeS1cdTAwM2Vhcm1fcG11ID0gcG11O1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2YXJtX3BtdXMpO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KHZvaWQpXG4te1xuLVx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuLVx0c3RydWN0IGFybV9wbXUgKnBtdTtcbi1cdGludCBjcHU7XG4tXG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcbi1cdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4tXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuLVx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxuLVx0ICpcbi1cdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuLVx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXG4tXHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuLVx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2Vcbi1cdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxuLVx0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuLVx0ICpcbi1cdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxuLVx0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHkuIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZ1xuLVx0ICogY2FycmllZCBoZXJlLlxuLVx0ICovXG4tXHRjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4tXHRcdHBtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4tXG4tXHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXHUwMDI2cG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbi1cdFx0XHRyZXR1cm4gcG11O1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcbkBAIC04NzAsNiAmIzQzOzg4MCw5IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHR1NjQgdmFsLCBtYXNrID0gMDtcbiBcdGludCBiYXNlLCBpLCBucl9ldmVudHM7XG4gXG4mIzQzO1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRpZiAoIXBtY2VpZDEpIHtcbiBcdFx0dmFsID0gY29tcHV0ZV9wbWNlaWQwKGNwdV9wbXUpO1xuIFx0XHRiYXNlID0gMDtcbkBAIC04OTcsNiAmIzQzOzkxMCwyNCBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0cmV0dXJuIHZhbCBcdTAwMjYgbWFzaztcbiB9XG4gXG4mIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlXG4mIzQzO1x0ICogRkVBVF9QTVV2M19JQ05UUiBpcyBzdXBwb3J0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4mIzQzO1x0c3RydWN0IGFybV9wbXUgKmNwdV9wbXU7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fFxuJiM0MztcdCAgICAha3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQocG1jKSB8fCAhcG1jLVx1MDAzZXBlcmZfZXZlbnQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNwdV9wbXUgPSB0b19hcm1fcG11KHBtYy1cdTAwM2VwZXJmX2V2ZW50LVx1MDAzZXBtdSk7XG4mIzQzO1x0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHZjcHUtXHUwMDNlY3B1LCBcdTAwMjZjcHVfcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG5AQCAtMTAwOCw2ICYjNDM7MTAzOSw5IEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcbiYjNDM7XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUE1VdjMgcmVxdWlyZXMgdGhhdCBhbGwgZXZlbnQgY291bnRlcnMgYXJlIGNhcGFibGUgb2YgY291bnRpbmcgYW55XG4gXHQgKiBldmVudCwgdGhvdWdoIHRoZSBzYW1lIG1heSBub3QgYmUgdHJ1ZSBvZiBub24tUE1VdjMgaGFyZHdhcmUuXG5AQCAtMTA2Miw3ICYjNDM7MTA5NiwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiAgKi9cbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzXG4mIzQzO1x0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbiYjNDM7XHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuJiM0MztcdCAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuJiM0MztcdCAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVVxuJiM0MztcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4mIzQzO1x0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcbiYjNDM7XHQgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXRcbiYjNDM7XHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUElcbiYjNDM7XHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4mIzQzO1x0ICogY2FycmllZCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XG4gXG4gXHRpZiAoIWFybV9wbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuQEAgLTEwNzksMTcgJiM0MzsxMTMwLDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiBcdFx0YXJtX3BtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4gXHRcdGlmIChhcm1fcG11LVx1MDAzZXBtdS50eXBlID09IHBtdV9pZCkge1xuIFx0XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHxcbiYjNDM7XHRcdFx0ICAgIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pIHx8XG4gXHRcdFx0ICAgIChrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7XG4gXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcdFx0XHRrdm1fYXJtX3NldF9wbXUoa3ZtLCBhcm1fcG11KTtcbiBcdFx0XHRjcHVtYXNrX2NvcHkoa3ZtLVx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFx1MDAyNmFybV9wbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpO1xuIFx0XHRcdHJldCA9IDA7XG5AQCAtMTA5NywxMCAmIzQzOzExNTAsMjUgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiYjNDM7XHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKVxuIHtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuQEAgLTExNzUsNyAmIzQzOzEyNDMsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbiYjNDM7XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyKSB7XG5AQCAtMTIyMCw2ICYjNDM7MTI4OCw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnModmNwdSwgbik7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4mIzQzO1x0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xuIFx0fVxuQEAgLTEyNDYsNiAmIzQzOzEzMTYsOSBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHRpcnEgPSB2Y3B1LVx1MDAzZWFyY2gucG11LmlycV9udW07XG4gXHRcdHJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTtcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbiYjNDM7XHRcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdHJldHVybiAtRU5YSU87XG5AQCAtMTI1OSw2ICYjNDM7MTMzMiw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVU6XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxuJiM0MztcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuIFx0XHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbmluZGV4IGI1ZTU5NDIyMDRmYzY5Li4wMmQ3MzM4NmE2ZDBlNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5AQCAtMzksNyAmIzQzOzM5LDcgQEAgc3RydWN0IGFybV9wbXVfZW50cnkge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXU7XG4gfTtcbiBcbi1ib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKTtcbiYjNDM7aW50IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKTtcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVx0KCh2KS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtICE9IDApXG4gdTY0IGt2bV9wbXVfZ2V0X2NvdW50ZXJfdmFsdWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2VsZWN0X2lkeCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNlbGVjdF9pZHgsIHU2NCB2YWwpO1xuQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLFxuIFx0XHRcdFx0ICAgIHU2NCBzZWxlY3RfaWR4KTtcbiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuQEAgLTk4LDkgJiM0Mzs5OSw5IEBAIHZvaWQga3ZtX3BtdV9uZXN0ZWRfdHJhbnNpdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHN0cnVjdCBrdm1fcG11IHtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVx0KGZhbHNlKVxuQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuaW5kZXggMjIyMjMzOTU5NjllMGYuLmViODM1MmE2ZTJmNjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuQEAgLTQwMywxMiAmIzQzOzQwMyw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcdHU4IHBtdXZlciwgZWM7XG4tXHR1NjQgZGZyMCwgaXJxID0gMjM7XG4tXHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0ge1xuLVx0XHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4tXHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsXG4tXHRcdC5hZGRyID0gKHU2NClcdTAwMjZpcnEsXG4tXHR9O1xuJiM0MztcdHU2NCBkZnIwO1xuIFxuIFx0LyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi9cbiBcdG1lbXNldChcdTAwMjZ2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpO1xuQEAgLTQzNCw4ICYjNDM7NDI5LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiBcdFRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwbXV2ZXIgXHUwMDNlPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCxcbiBcdFx0ICAgIFwmIzM0O1VuZXhwZWN0ZWQgUE1VVkVSICgweCV4KSBvbiB0aGUgdkNQVSB3aXRoIFBNVXYzXCYjMzQ7LCBwbXV2ZXIpO1xuLVxuLVx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmlycV9hdHRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXG5AQCAtNDYxLDE1ICYjNDM7NDU0LDMwIEBAIHN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZV9kb25lKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHksXG4mIzQzO1x0XHRcdFx0XHRcdCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4gXG4gXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4mIzQzO1x0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpXG4mIzQzO1x0XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4mIzQzO1xuIFx0cHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTtcbiBcbiBcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuQEAgLTQ4OSwxNSAmIzQzOzQ5NywxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1XFxuXCYjMzQ7LCBwbWNyX24pO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG5AQCAtNTMxLDE0ICYjNDM7NTM5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0ge1xuICAqIENyZWF0ZSBhIFZNLCBhbmQgY2hlY2sgaWYgS1ZNIGhhbmRsZXMgdGhlIHVzZXJzcGFjZSBhY2Nlc3NlcyBvZlxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbiYjNDM7XHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XG4gXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuIFxuIFx0dmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7XG5AQCAtNTg4LDExICYjNDM7NTk2LDExIEBAIHN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuICAqIHRoZSB2Q1BVIHRvIEBwbWNyX24sIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0IHZhbHVlLlxuICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHRwcl9kZWJ1ZyhcJiMzNDtFcnJvciB0ZXN0IHdpdGggcG1jcl9uICVsdSAobGFyZ2VyIHRoYW4gdGhlIGhvc3QpXFxuXCYjMzQ7LCBwbWNyX24pO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7XG4mIzQzO1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG5AQCAtNjIyLDIyICYjNDM7NjMwLDExNCBAQCBzdGF0aWMgYm9vbCBrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cih2b2lkKVxuIFx0cmV0dXJuIHN1cHBvcnRlZDtcbiB9XG4gXG4taW50IG1haW4odm9pZClcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbi1cdHU2NCBpLCBwbWNyX247XG4tXG4tXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIoKSk7XG4mIzQzO1x0dTY0IGk7XG4gXG4tXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gcG1jcl9uOyBpJiM0MzsmIzQzOykge1xuLVx0XHRydW5fYWNjZXNzX3Rlc3QoaSk7XG4tXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTtcbiYjNDM7XHRcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7XHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpIFx1MDAzYyBBUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOylcbi1cdFx0cnVuX2Vycm9yX3Rlc3QoaSk7XG4mIzQzO1x0XHRydW5fZXJyb3JfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3BtdV9ldmVudF9maWx0ZXIgZmlsdGVyID0geyAubmV2ZW50cyA9IDAgfTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnN0b3BwZWRfdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHRyZXQgPSBfX3ZjcHVfaGFzX2RldmljZV9hdHRyKHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPLFxuJiM0MztcdFx0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9IQVNfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHVuc2V0IGF0IGluaXRpYWxpemF0aW9uLiAqL1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovXG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovXG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR0aW5nIGFuIGV2ZW50IGZpbHRlciB3aGVuIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiYjNDM7XHQgKiByZXN1bHRzIGluIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1xuJiM0MztcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGFuIGV2ZW50IGZpbHRlciBoYXNcbiYjNDM7XHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXG4mIzQzO1x0ICovXG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXG4mIzQzO1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZSgyKTtcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcdTAwMjZpbml0KTtcbiYjNDM7XHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbiYjNDM7XHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuJiM0MztcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1x0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7XG4mIzQzO1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5JiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2xvYWRfcG11JiMzNDssCiAgICAmIzM0O2t2bV9zdXBwb3J0c19ndWVzdF9wbXV2MyYjMzQ7LAogICAgJiMzNDtrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgZm9yIEFSTTY0IFBNVXYzIGVtdWxhdGlvbiwgd2hpY2ggYWxsb3dzIGVtdWxhdGluZyBhIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLiBUaGlzIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMgYW5kIGFkZHMgbmV3IGlvY3RsIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1ZmY4ODljOWVkNTBkMWI5YWI4YzFlNTFlY2VlY2ZjYjA3OTA0ZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE0OjU2OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xNGQxMWY5MTc5ZDFmNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdApAQCAtNzQsNyAmIzQzOzc0LDggQEAgaXJxY2hpcC4KIAkgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkCiAJIC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdAogCSAJICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGUKLQkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yCiYjNDM7CQkgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2UKIAkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTExNiwxNCAmIzQzOzExNywxNCBAQCB1c2luZyBldmVudCAweDExIChDUFVfQ1lDTEVTKS4KIAogOlJldHVybnM6CiAKLQkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvcgotICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllcgogCSAtRU5YSU8gICBQTVUgbm90IGZvdW5kCiAJIC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZAogCSAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Ci0JID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzCiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlICYjMzQ7dHlwZSYjMzQ7CkBAIC0xNjUsNiAmIzQzOzE2NiwyOSBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlCiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpcwogYXR0cmlidXRlLgogCiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyCiYjNDM7CiYjNDM7OlJldHVybnM6CiYjNDM7CiYjNDM7CSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biwKJiM0MzsJCSAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yCiYjNDM7CQkgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkCiYjNDM7CSAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nCiYjNDM7CSAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWQKJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIE9ubHkgZml4ZWQKJiM0Mztjb3VudGVycyBhcmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3Q6IHRoZSBjeWNsZSBjb3VudGVyIHRvZGF5LCBhbmQgdGhlIGluc3RydWN0aW9uCiYjNDM7Y291bnRlciBpZiBzdXBwb3J0IGZvciBGRUFUX1BNVXYzX0lDTlRSIGlzIGFkZGVkLgomIzQzOwomIzQzO1dpdGggcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIGRpc2FibGVkLCB0aGUgVkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUuCiYjNDM7VGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIGhldGVyb2dlbmVvdXMgc3lzdGVtcyB3aGVyZSBkaWZmZXJlbnQgaGFyZHdhcmUKJiM0MztQTVVzIGNvdmVyIGRpZmZlcmVudCBwaHlzaWNhbCBDUFVzLiBBbGwgVkNQVXMgaW4gYSBWTSBzaGFyZSB0aGlzIGF0dHJpYnV0ZS4KJiM0MzsKIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyZmFhNjBkZjg0N2QyMC4uZjY2NDU5ZjgxY2Q2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTM2Nyw2ICYjNDM7MzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfV1JJVEFCTEVfSU1QX0lEX1JFR1MJCTEwCiAJLyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqLwogI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBCQkJCTExCiYjNDM7CS8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovCiYjNDM7I2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVAkJCTEyCiYjNDM7CS8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ2FtbWFibGUgZXZlbnQgY291bnRlcnMgKi8KJiM0MzsjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJMTMKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzcsNiAmIzQzOzQzNyw3IEBAIGVudW0gewogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCQkyCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VCQkzCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMJNAomIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJNQogI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAkJMQogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSCQkwCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVIJCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKaW5kZXggMzczMmVlOWViMGQ0ZTcuLjFjMGJjZTI3YzcxYmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwpAQCAtNjk4LDYgJiM0Mzs2OTgsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJaWYgKGhhc192aGUoKSkKIAkJa3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7CiAJa3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9sb2FkX3BtdSh2Y3B1KTsKIAlrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTsKIAlpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZCgmYW1wO3ZjcHUtJmd0O2FyY2gpKQogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTsKQEAgLTE1NTQsMTQgJiM0MzsxNTU1LDE5IEBAIGludCBrdm1fdm1faW9jdGxfaXJxX2xpbmUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCAqaXJxX2xldmVsLAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXModm9pZCkKJiM0MztzdGF0aWMgbG9uZyBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gS1ZNX1ZDUFVfVkFMSURfRkVBVFVSRVM7CiYjNDM7CWludCByOwogCiAJaWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpKQogCQljbGVhcl9iaXQoS1ZNX0FSTV9WQ1BVX0VMMV8zMkJJVCwgJmFtcDtmZWF0dXJlcyk7CiAKLQlpZiAoIWt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpKQomIzQzOwlyID0ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCk7CiYjNDM7CWlmIChyICZsdDsgMCkKJiM0MzsJCXJldHVybiByOwomIzQzOwomIzQzOwlpZiAoIXIpCiAJCWNsZWFyX2JpdChLVk1fQVJNX1ZDUFVfUE1VX1YzLCAmYW1wO2ZlYXR1cmVzKTsKIAogCWlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKQpAQCAtMTU4Miw2ICYjNDM7MTU4OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW5pdF9jaGVja19mZWF0dXJlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCWNvbnN0IHN0cnVjdCBrdm1fdmNwdV9pbml0ICppbml0KQogewogCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBpbml0LSZndDtmZWF0dXJlc1swXTsKJiM0MzsJbG9uZyByOwogCWludCBpOwogCiAJaWYgKGZlYXR1cmVzICZhbXA7IH5LVk1fVkNQVV9WQUxJRF9GRUFUVVJFUykKQEAgLTE1OTIsNyAmIzQzOzE1OTksMTEgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pbml0X2NoZWNrX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmIChmZWF0dXJlcyAmYW1wOyB+c3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKCkpCiYjNDM7CXIgPSBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXMoKTsKJiM0MzsJaWYgKHIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHI7CiYjNDM7CiYjNDM7CWlmIChmZWF0dXJlcyAmYW1wOyB+cikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKaW5kZXggZWRiMjEyMzk0NzhhOTUuLjUyODEyNjA3Yjc2ZDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKQEAgLTcsOSAmIzQzOzcsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bV9ob3N0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmL2FybV9wbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1bGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2VtdWxhdGUuaCZndDsKICNpbmNsdWRlICZsdDtrdm0vYXJtX3BtdS5oJmd0OwpAQCAtMjQsMTAgJiM0MzsyNCwyNiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpOwogc3RhdGljIHZvaWQga3ZtX3BtdV9yZWxlYXNlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7CiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTsKIAotYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCkKJiM0MztpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpCiB7Ci0JZ3VhcmQobXV0ZXgpKCZhbXA7YXJtX3BtdXNfbG9jayk7Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZhbXA7YXJtX3BtdXMpOwomIzQzOwljcHVtYXNrX3Zhcl90IGNwdXMgX19mcmVlKGZyZWVfY3B1bWFza192YXIpID0gQ1BVTUFTS19WQVJfTlVMTDsKJiM0MzsJc3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5OwomIzQzOwomIzQzOwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZhbXA7Y3B1cywgR0ZQX0tFUk5FTCkpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJY3B1bWFza19jb3B5KGNwdXMsIGNwdV9wb3NzaWJsZV9tYXNrKTsKJiM0MzsKJiM0MzsJZ3VhcmQocmN1KSgpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKJiM0MzsJCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKJiM0MzsKJiM0MzsJCWlmICghY3B1bWFza19hbmRub3QoY3B1cywgY3B1cywgJmFtcDtwbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSkKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX3BtY190b192Y3B1KGNvbnN0IHN0cnVjdCBrdm1fcG1jICpwbWMpCkBAIC04MCw2ICYjNDM7OTYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSkKIAlyZXR1cm4gbWFzazsKIH0KIAomIzQzO3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0CiAgKiBAcG1jOiBjb3VudGVyIGNvbnRleHQKQEAgLTMyNyw3ICYjNDM7MzQ4LDExIEBAIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKLQlpZiAoIXBtYy0mZ3Q7cGVyZl9ldmVudCkgewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKJiM0MzsKJiM0MzsJaWYgKCFwbWMtJmd0O3BlcmZfZXZlbnQgfHwKJiM0MzsJICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIWNwdW1hc2tfdGVzdF9jcHUodmNwdS0mZ3Q7Y3B1LCAmYW1wO3RvX2FybV9wbXUocG1jLSZndDtwZXJmX2V2ZW50LSZndDtwbXUpLSZndDtzdXBwb3J0ZWRfY3B1cykpKSB7CiAJCWt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQocG1jKTsKIAkJcmV0dXJuOwogCX0KQEAgLTY0OSwxMCAmIzQzOzY3NCw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgJmFtcDsgQVJNVjhfUE1VX0lOQ0xVREVfRUwyOwogfQogCi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQomIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQogewotCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKLQogCS8qCiAJICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmcKIAkgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELgpAQCAtNjYzLDYgJiM0Mzs2ODYsMjMgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbCkKIAlyZXR1cm4gZXZlbnRzZWw7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7CiYjNDM7CXN0cnVjdCBhcm1fcG11ICpwbXU7CiYjNDM7CiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiYjNDM7CQlwbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKJiM0MzsKJiM0MzsJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmFtcDtwbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSkKJiM0MzsJCQlyZXR1cm4gcG11OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlcgogICogQHBtYzogQ291bnRlciBjb250ZXh0CkBAIC02NzYsNiAmIzQzOzcxNiwxMiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpCiAJaW50IGV2ZW50c2VsOwogCXU2NCBldnRyZWc7CiAKJiM0MzsJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS0mZ3Q7Y3B1KTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWFybV9wbXUpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWV2dHJlZyA9IGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKTsKIAogCWt2bV9wbXVfc3RvcF9jb3VudGVyKHBtYyk7CkBAIC03MDQsNyAmIzQzOzc1MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIAkgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMKIAkgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLgogCSAqLwotCWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS0mZ3Q7a3ZtLCBldmVudHNlbCk7CiYjNDM7CWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpOwogCWlmIChldmVudHNlbCAmbHQ7IDApCiAJCXJldHVybjsKIApAQCAtNzg5LDQzICYjNDM7ODM1LDcgQEAgdm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KQogCQlyZXR1cm47CiAKIAllbnRyeS0mZ3Q7YXJtX3BtdSA9IHBtdTsKLQlsaXN0X2FkZF90YWlsKCZhbXA7ZW50cnktJmd0O2VudHJ5LCAmYW1wO2FybV9wbXVzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKQotewotCXN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgYXJtX3BtdSAqcG11OwotCWludCBjcHU7Ci0KLQlndWFyZChtdXRleCkoJmFtcDthcm1fcG11c19sb2NrKTsKLQotCS8qCi0JICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXMKLQkgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZAotCSAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkCi0JICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLgotCSAqCi0JICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlCi0JICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VCi0JICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGUKLQkgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZQotCSAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdAotCSAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy4KLQkgKgotCSAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSQotCSAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcKLQkgKiBjYXJyaWVkIGhlcmUuCi0JICovCi0JY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewotCQlwbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKLQotCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZhbXA7cG11LSZndDtzdXBwb3J0ZWRfY3B1cykpCi0JCQlyZXR1cm4gcG11OwotCX0KLQotCXJldHVybiBOVUxMOwomIzQzOwlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO2VudHJ5LSZndDtlbnRyeSwgJmFtcDthcm1fcG11cyk7CiB9CiAKIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpCkBAIC04NzAsNiAmIzQzOzg4MCw5IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpCiAJdTY0IHZhbCwgbWFzayA9IDA7CiAJaW50IGJhc2UsIGksIG5yX2V2ZW50czsKIAomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoIXBtY2VpZDEpIHsKIAkJdmFsID0gY29tcHV0ZV9wbWNlaWQwKGNwdV9wbXUpOwogCQliYXNlID0gMDsKQEAgLTg5Nyw2ICYjNDM7OTEwLDI0IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpCiAJcmV0dXJuIHZhbCAmYW1wOyBtYXNrOwogfQogCiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlCiYjNDM7CSAqIEZFQVRfUE1VdjNfSUNOVFIgaXMgc3VwcG9ydGVkLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiYjNDM7CXN0cnVjdCBhcm1fcG11ICpjcHVfcG11OwomIzQzOwomIzQzOwlpZiAoIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pIHx8CiYjNDM7CSAgICAha3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQocG1jKSB8fCAhcG1jLSZndDtwZXJmX2V2ZW50KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljcHVfcG11ID0gdG9fYXJtX3BtdShwbWMtJmd0O3BlcmZfZXZlbnQtJmd0O3BtdSk7CiYjNDM7CWlmICghY3B1bWFza190ZXN0X2NwdSh2Y3B1LSZndDtjcHUsICZhbXA7Y3B1X3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTsKQEAgLTEwMDgsNiAmIzQzOzEwMzksOSBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bS0mZ3Q7YXJjaC5hcm1fcG11OwogCiYjNDM7CWlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCS8qCiAJICogUE1VdjMgcmVxdWlyZXMgdGhhdCBhbGwgZXZlbnQgY291bnRlcnMgYXJlIGNhcGFibGUgb2YgY291bnRpbmcgYW55CiAJICogZXZlbnQsIHRob3VnaCB0aGUgc2FtZSBtYXkgbm90IGJlIHRydWUgb2Ygbm9uLVBNVXYzIGhhcmR3YXJlLgpAQCAtMTA2Miw3ICYjNDM7MTA5NiwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSkKICAqLwogaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7CiYjNDM7CS8qCiYjNDM7CSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCiYjNDM7CSAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kCiYjNDM7CSAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkCiYjNDM7CSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KJiM0MzsJICoKJiM0MzsJICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlCiYjNDM7CSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQomIzQzOwkgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZQomIzQzOwkgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZQomIzQzOwkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKJiM0MzsJICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLgomIzQzOwkgKgomIzQzOwkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKJiM0MzsJICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHkuIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZwomIzQzOwkgKiBjYXJyaWVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJaWYgKCFhcm1fcG11KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEwNzksMTcgJiM0MzsxMTMwLDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpCiAJaW50IHJldCA9IC1FTlhJTzsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwotCW11dGV4X2xvY2soJmFtcDthcm1fcG11c19sb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiAJCWFybV9wbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKIAkJaWYgKGFybV9wbXUtJmd0O3BtdS50eXBlID09IHBtdV9pZCkgewogCQkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fAomIzQzOwkJCSAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fAogCQkJICAgIChrdm0tJmd0O2FyY2gucG11X2ZpbHRlciAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7CiAJCQkJcmV0ID0gLUVCVVNZOwogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCQkJa3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7CiAJCQljcHVtYXNrX2NvcHkoa3ZtLSZndDthcmNoLnN1cHBvcnRlZF9jcHVzLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKTsKIAkJCXJldCA9IDA7CkBAIC0xMDk3LDEwICYjNDM7MTE1MCwyNSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKQogCQl9CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7YXJtX3BtdXNfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLSZndDthcmNoLnBtdV9maWx0ZXIgfHwKJiM0MzsJICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncykpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKJiM0MzsJa3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbikKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CkBAIC0xMTc1LDcgJiM0MzsxMjQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAkJICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJaWYgKCFrdm0tJmd0O2FyY2gucG11X2ZpbHRlcikgewpAQCAtMTIyMCw2ICYjNDM7MTI4OCw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTsKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDoKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7CiAJfQpAQCAtMTI0Niw2ICYjNDM7MTMxNiw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAJCWlycSA9IHZjcHUtJmd0O2FyY2gucG11LmlycV9udW07CiAJCXJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU5YSU87CkBAIC0xMjU5LDYgJiM0MzsxMzMyLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgogCQlpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSkKIAkJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaAppbmRleCBiNWU1OTQyMjA0ZmM2OS4uMDJkNzMzODZhNmQwZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKQEAgLTM5LDcgJiM0MzszOSw3IEBAIHN0cnVjdCBhcm1fcG11X2VudHJ5IHsKIAlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdTsKIH07CiAKLWJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpOwomIzQzO2ludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCk7CiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KQkoKHYpLSZndDthcmNoLnBtdS5pcnFfbnVtICE9IDApCiB1NjQga3ZtX3BtdV9nZXRfY291bnRlcl92YWx1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzZWxlY3RfaWR4KTsKIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl92YWx1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzZWxlY3RfaWR4LCB1NjQgdmFsKTsKQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTsKIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpOwogdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSwKIAkJCQkgICAgdTY0IHNlbGVjdF9pZHgpOwomIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTsKQEAgLTk4LDkgJiM0Mzs5OSw5IEBAIHZvaWQga3ZtX3BtdV9uZXN0ZWRfdHJhbnNpdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogc3RydWN0IGt2bV9wbXUgewogfTsKIAotc3RhdGljIGlubGluZSBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQogewotCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKICNkZWZpbmUga3ZtX2FybV9wbXVfaXJxX2luaXRpYWxpemVkKHYpCShmYWxzZSkKQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMKaW5kZXggMjIyMjMzOTU5NjllMGYuLmViODM1MmE2ZTJmNjI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMKQEAgLTQwMywxMiAmIzQzOzQwMyw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAl1OCBwbXV2ZXIsIGVjOwotCXU2NCBkZnIwLCBpcnEgPSAyMzsKLQlzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0gewotCQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCi0JCS5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsCi0JCS5hZGRyID0gKHU2NCkmYW1wO2lycSwKLQl9OwomIzQzOwl1NjQgZGZyMDsKIAogCS8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovCiAJbWVtc2V0KCZhbXA7dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTsKQEAgLTQzNCw4ICYjNDM7NDI5LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSkKIAlURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGICZhbXA7JmFtcDsKIAkJICAgIHBtdXZlciAmZ3Q7PSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCwKIAkJICAgICYjMzQ7VW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjMmIzM0OywgcG11dmVyKTsKLQotCXZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCAmYW1wO2lycV9hdHRyKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpCkBAIC00NjEsMTUgJiM0Mzs0NTQsMzAgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKQogCX0KIH0KIAotc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbCkKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZCkKJiM0Mzt7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywKJiM0MzsJCQkJCQkgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LAomIzQzOwkJCQkJCSBib29sIGV4cGVjdF9mYWlsKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAl1bnNpZ25lZCBpbnQgcHJldjsKIAlpbnQgcmV0OwomIzQzOwl1NjQgaXJxID0gMjM7CiAKIAljcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTsKIAl2Y3B1ID0gdnBtdV92bS52Y3B1OwogCiYjNDM7CWlmIChmaXhlZF9jb3VudGVyc19vbmx5KQomIzQzOwkJdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCAmYW1wO2lycSk7CiYjNDM7CiAJcHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTsKIAogCXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLApAQCAtNDg5LDE1ICYjNDM7NDk3LDE1IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wKICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbiwKICAqIGFuZCBydW4gdGhlIHRlc3QuCiAgKi8KLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKQomIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiB7CiAJdTY0IHNwOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwogCi0JcHJfZGVidWcoJiMzNDtUZXN0IHdpdGggcG1jcl9uICVsdVxuJiMzNDssIHBtY3Jfbik7CiYjNDM7CXByX2RlYnVnKCYjMzQ7VGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcbiYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpOwogCi0JdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpOwomIzQzOwl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7CiAJdmNwdSA9IHZwbXVfdm0udmNwdTsKIAogCS8qIFNhdmUgdGhlIGluaXRpYWwgc3AgdG8gcmVzdG9yZSB0aGVtIGxhdGVyIHRvIHJ1biB0aGUgZ3Vlc3QgYWdhaW4gKi8KQEAgLTUzMSwxNCAmIzQzOzUzOSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHsKICAqIENyZWF0ZSBhIFZNLCBhbmQgY2hlY2sgaWYgS1ZNIGhhbmRsZXMgdGhlIHVzZXJzcGFjZSBhY2Nlc3NlcyBvZgogICogdGhlIFBNVSByZWdpc3RlciBzZXRzIGluIEB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdIGNvcnJlY3RseS4KICAqLwotc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pCiYjNDM7c3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAJdTY0IHNldF9yZWdfaWQsIGNscl9yZWdfaWQsIHJlZ192YWw7CiAJdTY0IHZhbGlkX2NvdW50ZXJzX21hc2ssIG1heF9jb3VudGVyc19tYXNrOwogCi0JdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpOwomIzQzOwl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7CiAJdmNwdSA9IHZwbXVfdm0udmNwdTsKIAogCXZhbGlkX2NvdW50ZXJzX21hc2sgPSBnZXRfY291bnRlcnNfbWFzayhwbWNyX24pOwpAQCAtNTg4LDExICYjNDM7NTk2LDExIEBAIHN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKQogICogdGhlIHZDUFUgdG8gQHBtY3Jfbiwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QgdmFsdWUuCiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS4KICAqLwotc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiB7CiAJcHJfZGVidWcoJiMzNDtFcnJvciB0ZXN0IHdpdGggcG1jcl9uICVsdSAobGFyZ2VyIHRoYW4gdGhlIGhvc3QpXG4mIzM0OywgcG1jcl9uKTsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpOwomIzQzOwl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCB0cnVlKTsKIAlkZXN0cm95X3ZwbXVfdm0oKTsKIH0KIApAQCAtNjIyLDIyICYjNDM7NjMwLDExNCBAQCBzdGF0aWMgYm9vbCBrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cih2b2lkKQogCXJldHVybiBzdXBwb3J0ZWQ7CiB9CiAKLWludCBtYWluKHZvaWQpCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewotCXU2NCBpLCBwbWNyX247Ci0KLQlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7Ci0JVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpOwotCVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MzsJdTY0IGk7CiAKLQlwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7PSBwbWNyX247IGkmIzQzOyYjNDM7KSB7Ci0JCXJ1bl9hY2Nlc3NfdGVzdChpKTsKLQkJcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGkpOwomIzQzOwkJcnVuX2FjY2Vzc190ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwomIzQzOwkJcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwogCX0KIAogCWZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpICZsdDsgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSYjNDM7JiM0MzspCi0JCXJ1bl9lcnJvcl90ZXN0KGkpOwomIzQzOwkJcnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CXJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsJCWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovCiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCAmYW1wO2ZpbHRlcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsICZhbXA7ZmlsdGVyKTsKJiM0MzsKJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSAoMSAmbHQ7Jmx0OyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRUJVU1ksCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXRlc3RfY29uZmlnKDAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MzsKJiM0MzsJdGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7CiYjNDM7CXRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgS1ZNIEFSTTY0IFBNVXYzIEF0dHJpYnV0ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG8gcmV2aWV3LCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIExvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCwgZm9yIEFSTTY0JiMzOTtzIFBNVXYzIGVtdWxhdGlvbi4gSW50ZXJlc3RpbmcuLi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIGFsbG93IFBNVXYzIGVtdWxhdGlvbiBldmVuIHdpdGhvdXQgdGhlIHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycywgc3RpY2tpbmcgc29sZWx5IHRvIHRoZSBmaXhlZCBjb3VudGVycy4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljLiBUaGlzIGNoYW5nZXMgaG93IHdlIG1vZGVsIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGluIHRoZSBoeXBlcnZpc29yIGFuZCB0aGF0LCBieSBkZWZpbml0aW9uLCBtdXN0IGJlIGxvb2tlZCBhdCB3aXRoIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIGBhcmNoL2FybTY0L2t2bS9hcm0uY2AsIGFuZCwgaW1wb3J0YW50bHksIGFkZHMgYSBuZXcgaW9jdGwgYXR0cmlidXRlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXcgYXR0cmlidXRlIHdvcmtzLiBUaGUga2V5IGZpbGUgc2VlbXMgdG8gYmUgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgdGhlIFBNVSBlbXVsYXRpb24uCgpTaW5jZSB0aGlzIGlzIEtWTSBvbiBBUk02NCwgdGhpcyBjb2RlIHdpbGwgYmUgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZCBhbmQgd2UgYXJlIG9uIGFuIEFSTTY0IGFyY2hpdGVjdHVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IHRvIHRlc3QgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGNvcnJlY3QsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0PTE2Nz1hdHRyaWJ1dGUuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QtMTY4LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0OjE2OToxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdC0xNzAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTM4OT1lbnVtIHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM5LSNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjQ0MDojZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG5hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDQxLSNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcdFx0MVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9MTE4Nj1pbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTI5MC1cdH1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTI5MTpcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMjkyLVx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9MTMwMD1pbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTMxOC1cdH1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTMxOTpcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzIwLVx0XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTEzMjc9aW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMzQtXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMzM1Olx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMzYtXHRcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM9NDYyPXN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy00NzUtXHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6NDc2Olx0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy00NzctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYz02NDY9c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy02NTctXHRyZXQgPSBfX3ZjcHVfaGFzX2RldmljZV9hdHRyKHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2NTg6XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY1OS1cdGlmIChyZXQpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY2Ny1cdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jOjY2ODpcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjY5LVx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY3My1cdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2NzQ6XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy02NzUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy02NzctXHR2Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6Njc4Olx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjc5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzAwLVx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6NzAxOlx0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy03MDItXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzIzLVx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6NzI0Olx0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy03MjUtXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEFSTTY0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgdG8gS1ZNIGZvciBBUk02NC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2FybS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgS1ZNIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cywgcG90ZW50aWFsbHkgZm9jdXNpbmcgb24gZml4ZWQgY291bnRlcnMuIFRoaXMgdHlwZSBvZiBtb2RpZmljYXRpb24gc2NyZWFtcyAmIzM0O2Z1enogbWUmIzM0OyEgRGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGludHJvZHVjZWQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBzYWZlIHRvIGFzc3VtZSBgS1ZNYCBpcyByZXF1aXJlZCwgYmVpbmcgdGhlIGJhc2UgS1ZNIGNvbmZpZy4gTm93LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IFBNVXYzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBwYXRjaCBtYXkgaW50ZXJhY3Qgd2l0aCBvciBkZXBlbmQgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGFjdCB0byBkZXNpZ24gYXBwcm9wcmlhdGUgZnV6emluZyBpbnB1dHMgYW5kIHRhcmdldHMuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgS1ZNIGFuZCBBUk02NCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSFdfUEVSRl9FVkVOVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jPTQ1MT1zdGF0aWMgdm9pZCBleHlub3M1NDIwX3ByZXBhcmVfcG1fcmVzdW1lKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jLTQ2MC1cbmFyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYzo0NjE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpIFx1MDAyNlx1MDAyNiBjbHVzdGVyICE9IDApIHtcbmFyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYy00NjItXHRcdC8qXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmg9MTQ9Y3B1Y2FwX2lzX3Bvc3NpYmxlKGNvbnN0IHVuc2lnbmVkIGludCBjYXApXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmgtNzQtXHRjYXNlIEFSTTY0X0hBU19QTVVWMzpcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oOjc1Olx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmgtNzYtXHRjYXNlIEFSTTY0X0hBU19MU1VJOlxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xOTIzPXN0YXRpYyBib29sIGhhc19scGEyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTI4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5Mjk6I2lmZGVmIENPTkZJR19IV19QRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MzAtc3RhdGljIGJvb2wgaGFzX3BtdXYzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0yNTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0ge1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zMTMxLSNlbmRpZlxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjMxMzI6I2lmZGVmIENPTkZJR19IV19QRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMxMzMtXHR7XG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjgtXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyOTprdm0tJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpICAmIzQzOz0gcG11LWVtdWwubyBwbXUub1xuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMzAta3ZtLSQoQ09ORklHX0FSTTY0X1BUUl9BVVRIKSAgJiM0Mzs9IHBhdXRoLm9cbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYz0xMjk9c3RhdGljIHZvaWQgX19oeXBfdmdpY19yZXN0b3JlX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0xNDUtICovXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYzoxNDY6I2lmZGVmIENPTkZJR19IV19QRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ3LXN0YXRpYyBib29sIF9fcG11X3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKVx0JiM0Mzs9IHBlcmZfZXZlbnQubyBwZXJmX3JlZ3Mub1xuYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKVx0JiM0Mzs9IHBlcmZfZXZlbnRfbWlwc3h4Lm9cbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUtMTA0LVxuLS1cbmluY2x1ZGUva3ZtL2FybV9wbXUuaC0xNy1cbmluY2x1ZGUva3ZtL2FybV9wbXUuaDoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19LVk0pXG5pbmNsdWRlL2t2bS9hcm1fcG11LmgtMTktc3RydWN0IGt2bV9wbWMge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTg5CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDEyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUE1VIHYzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgUE1VIGZlYXR1cmVzIGFyZSBpbnRlZ3JhdGVkLiBGaXJzdCwgSSBzZWUgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYHBtdS1lbXVsLmNgIOKAkyB0aGF0JiMzOTtzIGEga2V5IGRlcGVuZGVuY3kuIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGlzIGFub3RoZXIgcmVxdWlyZW1lbnQsIHRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgY29yZSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2U6CgoqICAgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAKKiAgIGBrdm1fdmNwdV9sb2FkX3BtdWAKKiAgIGBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djNgCiogICBga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudGAKKiAgIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAKCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhpcyBuZXcgZnVuY3Rpb24gYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZToKCmBgYGMKJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS0mZ3Q7YXJjaC5wbXVfZmlsdGVyIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncyk7CiYjNDM7CWt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KYGBgCgpJdCBzZWVtcyB0byBiZSBzZXR0aW5nIGEgZmxhZyBhbmQgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjb3VudGVycyB3aGVuIHRoZSBWTSBoYXNuJiMzOTt0IHJ1biB5ZXQgYW5kIHdoZW4gbm90IGFscmVhZHkgY29uZmlndXJlZCBpbiBhbm90aGVyIHdheS4KCkkgYW0gYWxzbyBleGFtaW5pbmcgYGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2M2A6CgpgYGBjCi1ib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQomIzQzO2ludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCkKIHsKLQlndWFyZChtdXRleCkoJmFtcDthcm1fcG11c19sb2NrKTsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJmFtcDthcm1fcG11cyk7CiYjNDM7CWNwdW1hc2tfdmFyX3QgY3B1cyBfX2ZyZWUoZnJlZV9jcHVtYXNrX3ZhcikgPSBDUFVNQVNLX1ZBUl9OVUxMOwomIzQzOwlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7CiYjNDM7CiYjNDM7CWlmICghYWxsb2NfY3B1bWFza192YXIoJmFtcDtjcHVzLCBHRlBfS0VSTkVMKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljcHVtYXNrX2NvcHkoY3B1cywgY3B1X3Bvc3NpYmxlX21hc2spOwomIzQzOwomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewomIzQzOwkJc3RydWN0IGFybV9wbXUgKnBtdSA9IGVudHJ5LSZndDthcm1fcG11OwomIzQzOwomIzQzOwkJaWYgKCFjcHVtYXNrX2FuZG5vdChjcHVzLCBjcHVzLCAmYW1wO3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQomIzQzOwkJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQpgYGAKClRoaXMgbm93IHJldHVybnMgYW4gaW50ZWdlciB3aGljaCBjYW4gcmVwcmVzZW50IGEgZmFpbHVyZS4KClRoZSBvdGhlciBmdW5jdGlvbnMgbGlzdGVkIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBQTVUgc2V0dXAgYW5kIGV2ZW50IGhhbmRsaW5nLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBIV19QRVJGX0VWRU5UU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUuIEFuZCBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBpcyBhIG1hY3JvLCBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYC4KCk15IGNvbmNsdXNpb24gaXMgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaC4gSSBzaG91bGQgYmUgYWJsZSB0byBpbmNvcnBvcmF0ZSB0aGlzIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSSYjMzk7bGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UUzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7SFdfUEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gZGV2aWNlIGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBmb3IgQVJNNjQgUE1VdjMgZW11bGF0aW9uLCB3aGljaCBhbGxvd3MgZW11bGF0aW5nIGEgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIFRoaXMgbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBsb2dpYyBhbmQgYWRkcyBuZXcgaW9jdGwgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgYEhXX1BFUkZfRVZFTlRTYCoqCgpIbW0sIGl0IHNlZW1zIGxpa2UgYEhXX1BFUkZfRVZFTlRTYCBpc24mIzM5O3QgZGVmaW5lZC4gVGhhdCYjMzk7cyB1bnVzdWFsLCBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCB0aGF0LiBSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiAqc2hvdWxkKiBiZSBkZWZpbmVkLiBHaXZlbiBpdHMgbmF0dXJlLCBpdCYjMzk7cyBtb3N0IGxpa2VseSByZWxhdGVkIHRvIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBzbyBpdCBzaG91bGQgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGVzIG9yIHRoZSBnZW5lcmFsIGluaXRpYWxpemF0aW9uIEtjb25maWcuIExldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyBgYXJjaC9hcm02NC9LY29uZmlnYCBhbmQgdGhlbiBtYXliZSBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBtb3N0IGxpa2VseSBmaW5kIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIG1pc3Npbmcgb3Igd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXX1BFUkZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTI1MT1jb25maWcgQ1BVX1RUQlIwX1BBTlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTI1Ny1cbmFyY2gvYXJtL0tjb25maWc6MTI1ODpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtL0tjb25maWctMTI1OS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTU0OT1jb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE1NTItXG5hcmNoL2FybTY0L0tjb25maWc6MTU1Mzpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTU0LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI2OTA9Y29uZmlnIE5PREVTX1NISUZUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjY5NC1cbmFyY2gvbWlwcy9LY29uZmlnOjI2OTU6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXG5hcmNoL21pcHMvS2NvbmZpZy0yNjk2LVx0Ym9vbCBcJiMzNDtFbmFibGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBwZXJmIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gvc2gvS2NvbmZpZz02MjY9Y29uZmlnIEdVU0FfUkJcbi0tXG5hcmNoL3NoL0tjb25maWctNjM1LVxuYXJjaC9zaC9LY29uZmlnOjYzNjpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvc2gvS2NvbmZpZy02MzctXHRib29sIFwmIzM0O0VuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSFdfUEVSRl9FVkVOVFMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgSFdfUEVSRl9FVkVOVFNgIGFuZCwgb24gYXJtNjQsIGl0JiMzOTtzIGRlZmluZWQgYXMgYSBib29sZWFuIGB5YCwgbWVhbmluZyBpdCYjMzk7cyBhbHdheXMgZW5hYmxlZCBpZiBgUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgc2F3IHRoaXMgZXJyb3IgbWVzc2FnZTogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFMuJiMzNDsgVGhhdCYjMzk7cyB0aHJvd2luZyBtZSBvZmYuCgpXYWl0IGEgc2Vjb25kLi4uIFBlcmhhcHMgdGhlIGlzc3VlIGlzbiYjMzk7dCB0aGF0IGl0ICpsaXRlcmFsbHkqIGRvZXNuJiMzOTt0IGV4aXN0LCBidXQgdGhhdCBpdCYjMzk7cyBub3QgYSB1c2VyLWNvbmZpZ3VyYWJsZSBvcHRpb24gZGlyZWN0bHkgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgbWFrZSBtZW51Y29uZmlnYC4gSXQmIzM5O3MgYSBkZXBlbmRlbmN5LCBhbmQgdGhlIHN5c3RlbSBpcyBnZXR0aW5nIHRyaXBwZWQgdXAgb24gdGhhdCBkaXN0aW5jdGlvbi4gSXQgZG9lc24mIzM5O3Qgc2hvdyB1cCBpbiB0aG9zZSBtZW51cywgc28gaXQmIzM5O3Mgbm90ICYjMzQ7ZXhpc3RpbmcmIzM0OyBpbiB0aGF0IHNlbnNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBQRVJGX0VWRU5UU2AgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFwmIzM0O1BlcmZvcm1hbmNlIG1vbml0b3JpbmdcJiMzNDtcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7QU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4tLVxuaW5pdC9LY29uZmlnPTIxMjE9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxMjItXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTI0LVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg0NQoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKlRoZSBSaWdodCBUb29scyBmb3IgdGhlIEpvYioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzIHBhcnRpY3VsYXIgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBpdCYjMzk7cyBiZWNvbWUgY2xlYXIgdGhhdCBgUEVSRl9FVkVOVFNgIGlzIHRoZSBjb3JyZWN0IGF2ZW51ZSB0byBleHBsb3JlLiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBhIGxvdCBvZiBkaWZmZXJlbnQgcHJvZmlsaW5nIHRvb2xzIG92ZXIgdGhlIHllYXJzLCBhbmQgYFBFUkZfRVZFTlRTYCBzZWVtcyBsaWtlIHRoZSBtb3N0IHZlcnNhdGlsZSBhbmQgcG93ZXJmdWwgb3B0aW9uIGZvciB3aGF0IEkgbmVlZCB0byBhY2hpZXZlIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QsIHRoYXQgbGV2ZXJhZ2luZyBgS1ZNYCBhbG9uZ3NpZGUgYFBFUkZfRVZFTlRTYCB3aWxsIGdpdmUgbWUgdGhlIGdyYW51bGFyaXR5IGFuZCBhY2Nlc3MgdG8gbG93LWxldmVsIGRhdGEgSSByZXF1aXJlLiBUaGlzIGNvbWJpbmF0aW9uIHNob3VsZCBhbGxvdyBtZSB0byBwaW5wb2ludCB0aGUgcHJlY2lzZSBib3R0bGVuZWNrcyBhbmQgYmVoYXZpb3IgSSYjMzk7bSBhZnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gZGV2aWNlIGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBmb3IgQVJNNjQgUE1VdjMgZW11bGF0aW9uLCB3aGljaCBhbGxvd3MgZW11bGF0aW5nIGEgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIFRoaXMgbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBsb2dpYyBhbmQgYWRkcyBuZXcgaW9jdGwgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE0OjU2OjA2LjAwNzI1OTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNjMwMzgxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9wbXVcIixcbiAgICBcImt2bV9zdXBwb3J0c19ndWVzdF9wbXV2M1wiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudFwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NjowNi4wMDcyNzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzQxODU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ1ZmY4ODljOWVkNTBkMWI5YWI4YzFlNTFlY2VlY2ZjYjA3OTA0ZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAxNDo1NjowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMTRkMTFmOTE3OWQxZjUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuQEAgLTc0LDcgKzc0LDggQEAgaXJxY2hpcC5cXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XFxuIFxcdCBcXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxcbi1cXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXFxuK1xcdFxcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbiBcXHQgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2VcXG4gXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5AQCAtMTE2LDE0ICsxMTcsMTQgQEAgdXNpbmcgZXZlbnQgMHgxMSAoQ1BVX0NZQ0xFUykuXFxuIFxcbiA6UmV0dXJuczpcXG4gXFxuLVxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4rICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4gXFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcXG4gXFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxcbi1cXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXFxuIGZvciB0aGUgcHVycG9zZSBvZiBQTVUgZW11bGF0aW9uLiBUaGUgUE1VIGlkZW50aWZpZXIgY2FuIGJlIHJlYWQgZnJvbSB0aGUgXFxcInR5cGVcXFwiXFxuQEAgLTE2NSw2ICsxNjYsMjkgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxcbiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpc1xcbiBhdHRyaWJ1dGUuXFxuIFxcbisxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6UGFyYW1ldGVyczogbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4ga3ZtX2RldmljZV9hdHRyLmFkZHJcXG4rXFxuKzpSZXR1cm5zOlxcbitcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxcbitcXHRcXHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxcbitcXHRcXHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXFxuK1xcdCAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nXFxuK1xcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitJZiBzZXQsIEtWTSBlbXVsYXRlcyBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gT25seSBmaXhlZFxcbitjb3VudGVycyBhcmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3Q6IHRoZSBjeWNsZSBjb3VudGVyIHRvZGF5LCBhbmQgdGhlIGluc3RydWN0aW9uXFxuK2NvdW50ZXIgaWYgc3VwcG9ydCBmb3IgRkVBVF9QTVV2M19JQ05UUiBpcyBhZGRlZC5cXG4rXFxuK1dpdGggcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIGRpc2FibGVkLCB0aGUgVkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUuXFxuK1RoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBvbiBoZXRlcm9nZW5lb3VzIHN5c3RlbXMgd2hlcmUgZGlmZmVyZW50IGhhcmR3YXJlXFxuK1BNVXMgY292ZXIgZGlmZmVyZW50IHBoeXNpY2FsIENQVXMuIEFsbCBWQ1BVcyBpbiBhIFZNIHNoYXJlIHRoaXMgYXR0cmlidXRlLlxcbitcXG4gMi4gR1JPVVA6IEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMmZhYTYwZGY4NDdkMjAuLmY2NjQ1OWY4MWNkNmM0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0zNjcsNiArMzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19XUklUQUJMRV9JTVBfSURfUkVHU1xcdFxcdDEwXFxuIFxcdC8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi9cXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXFx0XFx0XFx0XFx0MTFcXG4rXFx0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aCBhbiBleHBsaWNpdGx5IHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgKi9cXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVFxcdFxcdFxcdDEyXFxuK1xcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ2FtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXFx0MTNcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5pbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuQEAgLTQzNyw2ICs0MzcsNyBAQCBlbnVtIHtcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXFx0XFx0MlxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXFx0XFx0M1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcXHQ0XFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQ1XFxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlxcdFxcdDBcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXFx0XFx0MVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuaW5kZXggMzczMmVlOWViMGQ0ZTcuLjFjMGJjZTI3YzcxYmY1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5AQCAtNjk4LDYgKzY5OCw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFx0aWYgKGhhc192aGUoKSlcXG4gXFx0XFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XFxuIFxcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSk7XFxuIFxcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xcbiBcXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuIFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbkBAIC0xNTU0LDE0ICsxNTU1LDE5IEBAIGludCBrdm1fdm1faW9jdGxfaXJxX2xpbmUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCAqaXJxX2xldmVsLFxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKHZvaWQpXFxuK3N0YXRpYyBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBLVk1fVkNQVV9WQUxJRF9GRUFUVVJFUztcXG4rXFx0aW50IHI7XFxuIFxcbiBcXHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTXzMyQklUX0VMMSkpXFxuIFxcdFxcdGNsZWFyX2JpdChLVk1fQVJNX1ZDUFVfRUwxXzMyQklULCBcXHUwMDI2ZmVhdHVyZXMpO1xcbiBcXG4tXFx0aWYgKCFrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMoKSlcXG4rXFx0ciA9IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpO1xcbitcXHRpZiAociBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByO1xcbitcXG4rXFx0aWYgKCFyKVxcbiBcXHRcXHRjbGVhcl9iaXQoS1ZNX0FSTV9WQ1BVX1BNVV9WMywgXFx1MDAyNmZlYXR1cmVzKTtcXG4gXFxuIFxcdGlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKVxcbkBAIC0xNTgyLDYgKzE1ODgsNyBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2luaXRfY2hlY2tfZmVhdHVyZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCAqaW5pdClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cXHUwMDNlZmVhdHVyZXNbMF07XFxuK1xcdGxvbmcgcjtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiB+S1ZNX1ZDUFVfVkFMSURfRkVBVFVSRVMpXFxuQEAgLTE1OTIsNyArMTU5OSwxMSBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2luaXRfY2hlY2tfZmVhdHVyZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGZlYXR1cmVzIFxcdTAwMjYgfnN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpKVxcbitcXHRyID0gc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKCk7XFxuK1xcdGlmIChyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHI7XFxuK1xcbitcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiB+cilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xcbmluZGV4IGVkYjIxMjM5NDc4YTk1Li41MjgxMjYwN2I3NmQ5OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xcbkBAIC03LDkgKzcsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmL2FybV9wbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5AQCAtMjQsMTAgKzI0LDI2IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XFxuIHN0YXRpYyB2b2lkIGt2bV9wbXVfcmVsZWFzZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpO1xcbiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcXG4gXFxuLWJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXFxuK2ludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcXG4ge1xcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbi1cXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNmFybV9wbXVzKTtcXG4rXFx0Y3B1bWFza192YXJfdCBjcHVzIF9fZnJlZShmcmVlX2NwdW1hc2tfdmFyKSA9IENQVU1BU0tfVkFSX05VTEw7XFxuK1xcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcXG4rXFxuK1xcdGlmICghYWxsb2NfY3B1bWFza192YXIoXFx1MDAyNmNwdXMsIEdGUF9LRVJORUwpKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGNwdW1hc2tfY29weShjcHVzLCBjcHVfcG9zc2libGVfbWFzayk7XFxuK1xcbitcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRcXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuK1xcbitcXHRcXHRpZiAoIWNwdW1hc2tfYW5kbm90KGNwdXMsIGNwdXMsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICprdm1fcG1jX3RvX3ZjcHUoY29uc3Qgc3RydWN0IGt2bV9wbWMgKnBtYylcXG5AQCAtODAsNiArOTYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0cmV0dXJuIG1hc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxcbkBAIC0zMjcsNyArMzQ4LDExIEBAIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcG1jX2VuYWJsZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIHtcXG4tXFx0aWYgKCFwbWMtXFx1MDAzZXBlcmZfZXZlbnQpIHtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuK1xcbitcXHRpZiAoIXBtYy1cXHUwMDNlcGVyZl9ldmVudCB8fFxcbitcXHQgICAgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIWNwdW1hc2tfdGVzdF9jcHUodmNwdS1cXHUwMDNlY3B1LCBcXHUwMDI2dG9fYXJtX3BtdShwbWMtXFx1MDAzZXBlcmZfZXZlbnQtXFx1MDAzZXBtdSktXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcXG4gXFx0XFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtNjQ5LDEwICs2NzQsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0cmV0dXJuIGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKSBcXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcXG4rc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3QgYXJtX3BtdSAqcG11LCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuIHtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdSA9IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbid0IFBNVXYzOyBsZXQgdGhlIGRyaXZlciBwcm92aWRlIGEgbWFwcGluZ1xcbiBcXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXFxuQEAgLTY2Myw2ICs2ODYsMjMgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcXG4gXFx0cmV0dXJuIGV2ZW50c2VsO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xcbitcXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xcbitcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFxcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcXG4rXFx0XFx0cG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuK1xcbitcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBtdTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50IC0gY3JlYXRlIGEgcGVyZiBldmVudCBmb3IgYSBjb3VudGVyXFxuICAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxcbkBAIC02NzYsNiArNzE2LDEyIEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0aW50IGV2ZW50c2VsO1xcbiBcXHR1NjQgZXZ0cmVnO1xcbiBcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSh2Y3B1LVxcdTAwM2VjcHUpO1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFhcm1fcG11KSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRldnRyZWcgPSBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYyk7XFxuIFxcbiBcXHRrdm1fcG11X3N0b3BfY291bnRlcihwbWMpO1xcbkBAIC03MDQsNyArNzUwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbiBcXHQgKiBEb24ndCBjcmVhdGUgYW4gZXZlbnQgaWYgd2UncmUgcnVubmluZyBvbiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzXFxuIFxcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cXG4gXFx0ICovXFxuLVxcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS1cXHUwMDNla3ZtLCBldmVudHNlbCk7XFxuK1xcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpO1xcbiBcXHRpZiAoZXZlbnRzZWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC03ODksNDMgKzgzNSw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZW50cnktXFx1MDAzZWFybV9wbXUgPSBwbXU7XFxuLVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdTtcXG4tXFx0aW50IGNwdTtcXG4tXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YXJtX3BtdXNfbG9jayk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xcbi1cXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxcbi1cXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxcbi1cXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXFxuLVxcdCAqXFxuLVxcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxcbi1cXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcXG4tXFx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcXG4tXFx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcXG4tXFx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XFxuLVxcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cXG4tXFx0ICpcXG4tXFx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXFxuLVxcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcXG4tXFx0ICogY2FycmllZCBoZXJlLlxcbi1cXHQgKi9cXG4tXFx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbi1cXHRcXHRwbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4tXFxuLVxcdFxcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXFx1MDAyNnBtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbi1cXHRcXHRcXHRyZXR1cm4gcG11O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4rXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcXG5AQCAtODcwLDYgKzg4MCw5IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIFxcdHU2NCB2YWwsIG1hc2sgPSAwO1xcbiBcXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xcbiBcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGlmICghcG1jZWlkMSkge1xcbiBcXHRcXHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XFxuIFxcdFxcdGJhc2UgPSAwO1xcbkBAIC04OTcsNiArOTEwLDI0IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAyNiBtYXNrO1xcbiB9XFxuIFxcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlXFxuK1xcdCAqIEZFQVRfUE1VdjNfSUNOVFIgaXMgc3VwcG9ydGVkLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuK1xcdHN0cnVjdCBhcm1fcG11ICpjcHVfcG11O1xcbitcXG4rXFx0aWYgKCFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cXHUwMDNla3ZtKSB8fFxcbitcXHQgICAgIWt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHBtYykgfHwgIXBtYy1cXHUwMDNlcGVyZl9ldmVudClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3B1X3BtdSA9IHRvX2FybV9wbXUocG1jLVxcdTAwM2VwZXJmX2V2ZW50LVxcdTAwM2VwbXUpO1xcbitcXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUodmNwdS1cXHUwMDNlY3B1LCBcXHUwMDI2Y3B1X3BtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbitcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK31cXG4rXFxuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTtcXG5AQCAtMTAwOCw2ICsxMDM5LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdTtcXG4gXFxuK1xcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcXG4gXFx0ICogZXZlbnQsIHRob3VnaCB0aGUgc2FtZSBtYXkgbm90IGJlIHRydWUgb2Ygbm9uLVBNVXYzIGhhcmR3YXJlLlxcbkBAIC0xMDYyLDcgKzEwOTYsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXFxuICAqL1xcbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcXG4rXFx0LypcXG4rXFx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcXG4rXFx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcXG4rXFx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcXG4rXFx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxcbitcXHQgKlxcbitcXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcXG4rXFx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXFxuK1xcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXFxuK1xcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXFxuK1xcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxcbitcXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxcbitcXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXFxuK1xcdCAqIGNhcnJpZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIFxcbiBcXHRpZiAoIWFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbkBAIC0xMDc5LDE3ICsxMTMwLDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXFxuIFxcdGludCByZXQgPSAtRU5YSU87XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcm1fcG11c19sb2NrKTtcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbiBcXHRcXHRhcm1fcG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuIFxcdFxcdGlmIChhcm1fcG11LVxcdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcXG4gXFx0XFx0XFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fFxcbitcXHRcXHRcXHQgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHxcXG4gXFx0XFx0XFx0ICAgIChrdm0tXFx1MDAzZWFyY2gucG11X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKTtcXG4gXFx0XFx0XFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XFxuIFxcdFxcdFxcdGNwdW1hc2tfY29weShrdm0tXFx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFxcdTAwMjZhcm1fcG11LVxcdTAwM2VzdXBwb3J0ZWRfY3B1cyk7XFxuIFxcdFxcdFxcdHJldCA9IDA7XFxuQEAgLTEwOTcsMTAgKzExNTAsMjUgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVxcdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK1xcdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuQEAgLTExNzUsNyArMTI0Myw3IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcdFxcdCAgICAgZmlsdGVyLmFjdGlvbiAhPSBLVk1fUE1VX0VWRU5UX0RFTlkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdFxcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkpXFxuK1xcdFxcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbiBcXHRcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5wbXVfZmlsdGVyKSB7XFxuQEAgLTEyMjAsNiArMTI4OCw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcbiBcXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHZjcHUsIG4pO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbitcXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDpcXG4gXFx0XFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7XFxuIFxcdH1cXG5AQCAtMTI0Niw2ICsxMzE2LDkgQEAgaW50IGt2bV9hcm1fcG11X3YzX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4gXFx0XFx0aXJxID0gdmNwdS1cXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcXG4gXFx0XFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbitcXHRcXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gLUVOWElPO1xcbkBAIC0xMjU5LDYgKzEzMzIsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOlxcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVTpcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcXG4rXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuIFxcdFxcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG5pbmRleCBiNWU1OTQyMjA0ZmM2OS4uMDJkNzMzODZhNmQwZTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXFxuKysrIGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXFxuQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IGFybV9wbXVfZW50cnkge1xcbiBcXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdTtcXG4gfTtcXG4gXFxuLWJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpO1xcbitpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpO1xcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVxcdCgodiktXFx1MDAzZWFyY2gucG11LmlycV9udW0gIT0gMClcXG4gdTY0IGt2bV9wbXVfZ2V0X2NvdW50ZXJfdmFsdWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2VsZWN0X2lkeCk7XFxuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl92YWx1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzZWxlY3RfaWR4LCB1NjQgdmFsKTtcXG5AQCAtNTgsNiArNTgsNyBAQCB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7XFxuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xcbiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgdTY0IHNlbGVjdF9pZHgpO1xcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7XFxuQEAgLTk4LDkgKzk5LDkgQEAgdm9pZCBrdm1fcG11X25lc3RlZF90cmFuc2l0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHN0cnVjdCBrdm1fcG11IHtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXFxuIHtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gI2RlZmluZSBrdm1fYXJtX3BtdV9pcnFfaW5pdGlhbGl6ZWQodilcXHQoZmFsc2UpXFxuQEAgLTE2Myw2ICsxNjQsNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbiBzdGF0aWMgaW5saW5lIHU4IGt2bV9hcm1fcG11X2dldF9wbXV2ZXJfbGltaXQodm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xcbmluZGV4IDIyMjIzMzk1OTY5ZTBmLi5lYjgzNTJhNmUyZjYyNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xcbkBAIC00MDMsMTIgKzQwMyw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4gXFx0dTggcG11dmVyLCBlYztcXG4tXFx0dTY0IGRmcjAsIGlycSA9IDIzO1xcbi1cXHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0ge1xcbi1cXHRcXHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuLVxcdFxcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsXFxuLVxcdFxcdC5hZGRyID0gKHU2NClcXHUwMDI2aXJxLFxcbi1cXHR9O1xcbitcXHR1NjQgZGZyMDtcXG4gXFxuIFxcdC8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovXFxuIFxcdG1lbXNldChcXHUwMDI2dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTtcXG5AQCAtNDM0LDggKzQyOSw2IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXFxuIFxcdFRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBtdXZlciBcXHUwMDNlPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCxcXG4gXFx0XFx0ICAgIFxcXCJVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1xcXCIsIHBtdXZlcik7XFxuLVxcbi1cXHR2Y3B1X2lvY3RsKHZwbXVfdm0udmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXFx1MDAyNmlycV9hdHRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXFxuQEAgLTQ2MSwxNSArNDU0LDMwIEBAIHN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZClcXG4re1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBib29sIGV4cGVjdF9mYWlsKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0dW5zaWduZWQgaW50IHByZXY7XFxuIFxcdGludCByZXQ7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4gXFxuIFxcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbiBcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbiBcXG4rXFx0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFxuIFxcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XFxuIFxcbiBcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG5AQCAtNDg5LDE1ICs0OTcsMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxcbiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yIHRoZSB2Q1BVIHRvIEBwbWNyX24sXFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbiBcXHR1NjQgc3A7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJUZXN0IHdpdGggcG1jcl9uICVsdVxcXFxuXFxcIiwgcG1jcl9uKTtcXG4rXFx0cHJfZGVidWcoXFxcIlRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxcXG5cXFwiLCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xcbitcXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XFxuIFxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuIFxcbiBcXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXFxuQEAgLTUzMSwxNCArNTM5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0ge1xcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcXG4gICogdGhlIFBNVSByZWdpc3RlciBzZXRzIGluIEB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdIGNvcnJlY3RseS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHU2NCBzZXRfcmVnX2lkLCBjbHJfcmVnX2lkLCByZWdfdmFsO1xcbiBcXHR1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XFxuK1xcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcXG4gXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4gXFxuIFxcdHZhbGlkX2NvdW50ZXJzX21hc2sgPSBnZXRfY291bnRlcnNfbWFzayhwbWNyX24pO1xcbkBAIC01ODgsMTEgKzU5NiwxMSBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcXG4gICogdGhlIHZDUFUgdG8gQHBtY3Jfbiwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QgdmFsdWUuXFxuICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxcbiB7XFxuIFxcdHByX2RlYnVnKFxcXCJFcnJvciB0ZXN0IHdpdGggcG1jcl9uICVsdSAobGFyZ2VyIHRoYW4gdGhlIGhvc3QpXFxcXG5cXFwiLCBwbWNyX24pO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7XFxuK1xcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIHRydWUpO1xcbiBcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4gfVxcbiBcXG5AQCAtNjIyLDIyICs2MzAsMTE0IEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXFxuIFxcdHJldHVybiBzdXBwb3J0ZWQ7XFxuIH1cXG4gXFxuLWludCBtYWluKHZvaWQpXFxuK3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbi1cXHR1NjQgaSwgcG1jcl9uO1xcbi1cXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XFxuLVxcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcXG4rXFx0dTY0IGk7XFxuIFxcbi1cXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcXG4tXFx0XFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xcbi1cXHRcXHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFx0XFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSBwbWNyX24gKyAxOyBpIFxcdTAwM2MgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxcbi1cXHRcXHRydW5fZXJyb3JfdGVzdChpKTtcXG4rXFx0XFx0cnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1NjQgaXJxID0gMjM7XFxuK1xcbitcXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4rXFx0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTyxcXG4rXFx0XFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFx0XFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHNldC4gKi9cXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbitcXHQgKiByZXN1bHRzIGluIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXFx1MDAyNmZpbHRlcik7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4rXFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFxuK1xcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXG4rXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXFxuK1xcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cXG4rXFx0ICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcXHUwMDI2ZmlsdGVyKTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHR2bSA9IHZtX2NyZWF0ZSgyKTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXFx1MDAyNmluaXQpO1xcbitcXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFxcdTAwM2NcXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFxcdTAwMjZpcnEpO1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbitcXHR2Y3B1X3J1bihydW5uaW5nX3ZjcHUpO1xcbitcXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1ksXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcbitcXHR0ZXN0X2NvbmZpZygwLCB0cnVlKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitcXG4rXFx0dGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7XFxuK1xcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MDYuOTM1ODQ2Nzk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjMzNDQzNTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzXCIsXG4gICAgXCJrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgZm9yIEFSTTY0IFBNVXYzIGVtdWxhdGlvbiwgd2hpY2ggYWxsb3dzIGVtdWxhdGluZyBhIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLiBUaGlzIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMgYW5kIGFkZHMgbmV3IGlvY3RsIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVmZjg4OWM5ZWQ1MGQxYjlhYjhjMWU1MWVjZWVjZmNiMDc5MDRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTQ6NTY6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xNGQxMWY5MTc5ZDFmNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5AQCAtNzQsNyArNzQsOCBAQCBpcnFjaGlwLlxuIFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxuIFx0IC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdFxuIFx0IFx0ICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGVcbi1cdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkIG9yIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbitcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4rXHRcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FSU5WQUwgIEludmFsaWQgZmlsdGVyIHJhbmdlXG4gXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMTE2LDE0ICsxMTcsMTQgQEAgdXNpbmcgZXZlbnQgMHgxMSAoQ1BVX0NZQ0xFUykuXG4gXG4gOlJldHVybnM6XG4gXG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxuKyAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBvciBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxuIFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcbiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlIFwidHlwZVwiXG5AQCAtMTY1LDYgKzE2NiwyOSBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXG4gc2VsZWN0ZWQgUE1VLiBTZWxlY3RpbmcgYSBuZXcgUE1VIGNhbmNlbHMgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIHRoaXNcbiBhdHRyaWJ1dGUuXG4gXG4rMS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rOlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyXG4rXG4rOlJldHVybnM6XG4rXG4rXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxuK1x0XHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxuK1x0XHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXG4rXHQgLUVOWElPICAgQXR0ZW1wdGVkIHRvIGdldCBiZWZvcmUgc2V0dGluZ1xuK1x0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIE9ubHkgZml4ZWRcbitjb3VudGVycyBhcmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3Q6IHRoZSBjeWNsZSBjb3VudGVyIHRvZGF5LCBhbmQgdGhlIGluc3RydWN0aW9uXG4rY291bnRlciBpZiBzdXBwb3J0IGZvciBGRUFUX1BNVXYzX0lDTlRSIGlzIGFkZGVkLlxuK1xuK1dpdGggcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIGRpc2FibGVkLCB0aGUgVkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUuXG4rVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIGhldGVyb2dlbmVvdXMgc3lzdGVtcyB3aGVyZSBkaWZmZXJlbnQgaGFyZHdhcmVcbitQTVVzIGNvdmVyIGRpZmZlcmVudCBwaHlzaWNhbCBDUFVzLiBBbGwgVkNQVXMgaW4gYSBWTSBzaGFyZSB0aGlzIGF0dHJpYnV0ZS5cbitcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDJmYWE2MGRmODQ3ZDIwLi5mNjY0NTlmODFjZDZjNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMzY3LDYgKzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19XUklUQUJMRV9JTVBfSURfUkVHU1x0XHQxMFxuIFx0LyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqL1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQVx0XHRcdFx0MTFcbitcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVFx0XHRcdDEyXG4rXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dhbW1hYmxlIGV2ZW50IGNvdW50ZXJzICovXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQxM1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDM3MzJlZTllYjBkNGU3Li4xYzBiY2UyN2M3MWJmNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuQEAgLTY5OCw2ICs2OTgsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRpZiAoaGFzX3ZoZSgpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbitcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUpO1xuIFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTtcbkBAIC0xNTU0LDE0ICsxNTU1LDE5IEBAIGludCBrdm1fdm1faW9jdGxfaXJxX2xpbmUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCAqaXJxX2xldmVsLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxuK3N0YXRpYyBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBLVk1fVkNQVV9WQUxJRF9GRUFUVVJFUztcbitcdGludCByO1xuIFxuIFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpKVxuIFx0XHRjbGVhcl9iaXQoS1ZNX0FSTV9WQ1BVX0VMMV8zMkJJVCwgXHUwMDI2ZmVhdHVyZXMpO1xuIFxuLVx0aWYgKCFrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMoKSlcbitcdHIgPSBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMoKTtcbitcdGlmIChyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcjtcbitcbitcdGlmICghcilcbiBcdFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9QTVVfVjMsIFx1MDAyNmZlYXR1cmVzKTtcbiBcbiBcdGlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKVxuQEAgLTE1ODIsNiArMTU4OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW5pdF9jaGVja19mZWF0dXJlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9pbml0ICppbml0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBpbml0LVx1MDAzZWZlYXR1cmVzWzBdO1xuK1x0bG9uZyByO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoZmVhdHVyZXMgXHUwMDI2IH5LVk1fVkNQVV9WQUxJRF9GRUFUVVJFUylcbkBAIC0xNTkyLDcgKzE1OTksMTEgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pbml0X2NoZWNrX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdH1cbiBcbi1cdGlmIChmZWF0dXJlcyBcdTAwMjYgfnN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpKVxuK1x0ciA9IHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpO1xuK1x0aWYgKHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiByO1xuK1xuK1x0aWYgKGZlYXR1cmVzIFx1MDAyNiB+cilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5pbmRleCBlZGIyMTIzOTQ3OGE5NS4uNTI4MTI2MDdiNzZkOTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5AQCAtNyw5ICs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMjQsMTAgKzI0LDI2IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gc3RhdGljIHZvaWQga3ZtX3BtdV9yZWxlYXNlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gXG4tYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbitpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbitcdGNwdW1hc2tfdmFyX3QgY3B1cyBfX2ZyZWUoZnJlZV9jcHVtYXNrX3ZhcikgPSBDUFVNQVNLX1ZBUl9OVUxMO1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1xuK1x0aWYgKCFhbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZjcHVzLCBHRlBfS0VSTkVMKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjcHVtYXNrX2NvcHkoY3B1cywgY3B1X3Bvc3NpYmxlX21hc2spO1xuK1xuK1x0Z3VhcmQocmN1KSgpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuK1x0XHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKCFjcHVtYXNrX2FuZG5vdChjcHVzLCBjcHVzLCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9wbWNfdG9fdmNwdShjb25zdCBzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuQEAgLTgwLDYgKzk2LDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4rc3RhdGljIGJvb2wga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuK31cbitcbiAvKipcbiAgKiBrdm1fcG1jX2lzXzY0Yml0IC0gZGV0ZXJtaW5lIGlmIGNvdW50ZXIgaXMgNjRiaXRcbiAgKiBAcG1jOiBjb3VudGVyIGNvbnRleHRcbkBAIC0zMjcsNyArMzQ4LDExIEBAIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3BtY19lbmFibGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIHtcbi1cdGlmICghcG1jLVx1MDAzZXBlcmZfZXZlbnQpIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuK1xuK1x0aWYgKCFwbWMtXHUwMDNlcGVyZl9ldmVudCB8fFxuK1x0ICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhY3B1bWFza190ZXN0X2NwdSh2Y3B1LVx1MDAzZWNwdSwgXHUwMDI2dG9fYXJtX3BtdShwbWMtXHUwMDNlcGVyZl9ldmVudC1cdTAwM2VwbXUpLVx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcbiBcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtNjQ5LDEwICs2NzQsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbitzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJ3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDYgKzY4NiwyMyBAQCBzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxuIFx0cmV0dXJuIGV2ZW50c2VsO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4re1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbitcbitcdGd1YXJkKHJjdSkoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiBwbXU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gLyoqXG4gICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuICAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuQEAgLTY3Niw2ICs3MTYsMTIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0aW50IGV2ZW50c2VsO1xuIFx0dTY0IGV2dHJlZztcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSh2Y3B1LVx1MDAzZWNwdSk7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIWFybV9wbXUpKVxuK1x0XHRcdHJldHVybjtcbitcdH1cbitcbiBcdGV2dHJlZyA9IGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKTtcbiBcbiBcdGt2bV9wbXVfc3RvcF9jb3VudGVyKHBtYyk7XG5AQCAtNzA0LDcgKzc1MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdCAqIERvbid0IGNyZWF0ZSBhbiBldmVudCBpZiB3ZSdyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXNcbiBcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cbiBcdCAqL1xuLVx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudCh2Y3B1LVx1MDAzZWt2bSwgZXZlbnRzZWwpO1xuK1x0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudChhcm1fcG11LCBldmVudHNlbCk7XG4gXHRpZiAoZXZlbnRzZWwgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbkBAIC03ODksNDMgKzgzNSw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0ZW50cnktXHUwMDNlYXJtX3BtdSA9IHBtdTtcbi1cdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKVxuLXtcbi1cdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcbi1cdHN0cnVjdCBhcm1fcG11ICpwbXU7XG4tXHRpbnQgY3B1O1xuLVxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzXG4tXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxuLVx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbi1cdCAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi5cbi1cdCAqXG4tXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbi1cdCAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVVxuLVx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcbi1cdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4tXHQgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXRcbi1cdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cbi1cdCAqXG4tXHQgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUElcbi1cdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcbi1cdCAqIGNhcnJpZWQgaGVyZS5cbi1cdCAqL1xuLVx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuLVx0XHRwbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuLVxuLVx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFx1MDAyNnBtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4tXHRcdFx0cmV0dXJuIHBtdTtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuK1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcbkBAIC04NzAsNiArODgwLDkgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBcdHU2NCB2YWwsIG1hc2sgPSAwO1xuIFx0aW50IGJhc2UsIGksIG5yX2V2ZW50cztcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghcG1jZWlkMSkge1xuIFx0XHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XG4gXHRcdGJhc2UgPSAwO1xuQEAgLTg5Nyw2ICs5MTAsMjQgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBcdHJldHVybiB2YWwgXHUwMDI2IG1hc2s7XG4gfVxuIFxuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdC8qXG4rXHQgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlXG4rXHQgKiBGRUFUX1BNVXYzX0lDTlRSIGlzIHN1cHBvcnRlZC5cbitcdCAqL1xuK1x0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4rXHRzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdTtcbitcbitcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fFxuK1x0ICAgICFrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChwbWMpIHx8ICFwbWMtXHUwMDNlcGVyZl9ldmVudClcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3B1X3BtdSA9IHRvX2FybV9wbXUocG1jLVx1MDAzZXBlcmZfZXZlbnQtXHUwMDNlcG11KTtcbitcdGlmICghY3B1bWFza190ZXN0X2NwdSh2Y3B1LVx1MDAzZWNwdSwgXHUwMDI2Y3B1X3BtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbit9XG4rXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xuQEAgLTEwMDgsNiArMTAzOSw5IEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHQvKlxuIFx0ICogUE1VdjMgcmVxdWlyZXMgdGhhdCBhbGwgZXZlbnQgY291bnRlcnMgYXJlIGNhcGFibGUgb2YgY291bnRpbmcgYW55XG4gXHQgKiBldmVudCwgdGhvdWdoIHRoZSBzYW1lIG1heSBub3QgYmUgdHJ1ZSBvZiBub24tUE1VdjMgaGFyZHdhcmUuXG5AQCAtMTA2Miw3ICsxMDk2LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxuICAqL1xuIGludCBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSgpO1xuK1x0LypcbitcdCAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzXG4rXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxuK1x0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbitcdCAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi5cbitcdCAqXG4rXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbitcdCAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVVxuK1x0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcbitcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4rXHQgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXRcbitcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cbitcdCAqXG4rXHQgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUElcbitcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcbitcdCAqIGNhcnJpZWQgaGVyZS5cbitcdCAqL1xuK1x0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiBcbiBcdGlmICghYXJtX3BtdSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG5AQCAtMTA3OSwxNyArMTEzMCwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0aW50IHJldCA9IC1FTlhJTztcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbitcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuIFx0XHRhcm1fcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbiBcdFx0aWYgKGFybV9wbXUtXHUwMDNlcG11LnR5cGUgPT0gcG11X2lkKSB7XG4gXHRcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fFxuK1x0XHRcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxuIFx0XHRcdCAgICAoa3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xuIFx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcdFx0XHRrdm1fYXJtX3NldF9wbXUoa3ZtLCBhcm1fcG11KTtcbiBcdFx0XHRjcHVtYXNrX2NvcHkoa3ZtLVx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFx1MDAyNmFybV9wbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpO1xuIFx0XHRcdHJldCA9IDA7XG5AQCAtMTA5NywxMCArMTE1MCwyNSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciB8fFxuK1x0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbitcdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbkBAIC0xMTc1LDcgKzEyNDMsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbitcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIpIHtcbkBAIC0xMjIwLDYgKzEyODgsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFxuIFx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHZjcHUsIG4pO1xuIFx0fVxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4rXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDpcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7XG4gXHR9XG5AQCAtMTI0Niw2ICsxMzE2LDkgQEAgaW50IGt2bV9hcm1fcG11X3YzX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdFx0aXJxID0gdmNwdS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtO1xuIFx0XHRyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7XG4gXHR9XG4rXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbitcdFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRyZXR1cm4gLUVOWElPO1xuQEAgLTEyNTksNiArMTMzMiw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVU6XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4gXHRcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuaW5kZXggYjVlNTk0MjIwNGZjNjkuLjAyZDczMzg2YTZkMGU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBhcm1fcG11X2VudHJ5IHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11O1xuIH07XG4gXG4tYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCk7XG4raW50IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKTtcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVx0KCh2KS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtICE9IDApXG4gdTY0IGt2bV9wbXVfZ2V0X2NvdW50ZXJfdmFsdWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2VsZWN0X2lkeCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNlbGVjdF9pZHgsIHU2NCB2YWwpO1xuQEAgLTU4LDYgKzU4LDcgQEAgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXG4gXHRcdFx0XHQgICAgdTY0IHNlbGVjdF9pZHgpO1xuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcbkBAIC05OCw5ICs5OSw5IEBAIHZvaWQga3ZtX3BtdV9uZXN0ZWRfdHJhbnNpdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHN0cnVjdCBrdm1fcG11IHtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbitzdGF0aWMgaW5saW5lIGludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiB7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gI2RlZmluZSBrdm1fYXJtX3BtdV9pcnFfaW5pdGlhbGl6ZWQodilcdChmYWxzZSlcbkBAIC0xNjMsNiArMTY0LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5pbmRleCAyMjIyMzM5NTk2OWUwZi4uZWI4MzUyYTZlMmY2MjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5AQCAtNDAzLDEyICs0MDMsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4gXHR1OCBwbXV2ZXIsIGVjO1xuLVx0dTY0IGRmcjAsIGlycSA9IDIzO1xuLVx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcbi1cdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuLVx0XHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxuLVx0XHQuYWRkciA9ICh1NjQpXHUwMDI2aXJxLFxuLVx0fTtcbitcdHU2NCBkZnIwO1xuIFxuIFx0LyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi9cbiBcdG1lbXNldChcdTAwMjZ2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpO1xuQEAgLTQzNCw4ICs0MjksNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIFx0VEVTVF9BU1NFUlQocG11dmVyICE9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBtdXZlciBcdTAwM2U9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLFxuIFx0XHQgICAgXCJVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1wiLCBwbXV2ZXIpO1xuLVxuLVx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmlycV9hdHRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXG5AQCAtNDYxLDE1ICs0NTQsMzAgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxuK3tcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcbitcdFx0XHRcdFx0XHQgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LFxuK1x0XHRcdFx0XHRcdCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbitcdHU2NCBpcnEgPSAyMztcbiBcbiBcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuIFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbiBcbitcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KVxuK1x0XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcbiBcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XG4gXG4gXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbkBAIC00ODksMTUgKzQ5NywxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4rc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHR1NjQgc3A7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuIFxuLVx0cHJfZGVidWcoXCJUZXN0IHdpdGggcG1jcl9uICVsdVxcblwiLCBwbWNyX24pO1xuK1x0cHJfZGVidWcoXCJUZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcblwiLCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuK1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpO1xuIFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbiBcbiBcdC8qIFNhdmUgdGhlIGluaXRpYWwgc3AgdG8gcmVzdG9yZSB0aGVtIGxhdGVyIHRvIHJ1biB0aGUgZ3Vlc3QgYWdhaW4gKi9cbkBAIC01MzEsMTQgKzUzOSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcbiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcbkBAIC01ODgsMTEgKzU5NiwxMSBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cbiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHRwcl9kZWJ1ZyhcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXG5cIiwgcG1jcl9uKTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpO1xuK1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG5AQCAtNjIyLDIyICs2MzAsMTE0IEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbi1pbnQgbWFpbih2b2lkKVxuK3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4tXHR1NjQgaSwgcG1jcl9uO1xuLVxuLVx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuK1x0dTY0IGk7XG4gXG4tXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcbi1cdFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xuLVx0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XG4rXHRcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbitcdFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcdTAwM2MgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxuLVx0XHRydW5fZXJyb3JfdGVzdChpKTtcbitcdFx0cnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdGludCByZXQ7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4rXHRcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcbitcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSBzdWNjZWVkcy4gKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgc2V0LiAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0LypcbitcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuK1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcbitcdC8qXG4rXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXG4rXHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK1xuK1x0LypcbitcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbitcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZtID0gdm1fY3JlYXRlKDIpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbitcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdHZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcbitcdHRlc3RfY29uZmlnKDAsIHRydWUpO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbitcbitcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xuK1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NjowNi45MzU4NDk0OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODkyODg1NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgS1ZNIEFSTTY0IFBNVXYzIEF0dHJpYnV0ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRvIHJldmlldywgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAsIGZvciBBUk02NCdzIFBNVXYzIGVtdWxhdGlvbi4gSW50ZXJlc3RpbmcuLi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIGFsbG93IFBNVXYzIGVtdWxhdGlvbiBldmVuIHdpdGhvdXQgdGhlIHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycywgc3RpY2tpbmcgc29sZWx5IHRvIHRoZSBmaXhlZCBjb3VudGVycy4gVGhhdCdzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMuIFRoaXMgY2hhbmdlcyBob3cgd2UgbW9kZWwgcGVyZm9ybWFuY2UgY291bnRlcnMgaW4gdGhlIGh5cGVydmlzb3IgYW5kIHRoYXQsIGJ5IGRlZmluaXRpb24sIG11c3QgYmUgbG9va2VkIGF0IHdpdGggc2NydXRpbnkuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIGBhcmNoL2FybTY0L2t2bS9hcm0uY2AsIGFuZCwgaW1wb3J0YW50bHksIGFkZHMgYSBuZXcgaW9jdGwgYXR0cmlidXRlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBhdHRyaWJ1dGUgd29ya3MuIFRoZSBrZXkgZmlsZSBzZWVtcyB0byBiZSBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiB0aGUgUE1VIGVtdWxhdGlvbi5cblxuU2luY2UgdGhpcyBpcyBLVk0gb24gQVJNNjQsIHRoaXMgY29kZSB3aWxsIGJlIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQgYW5kIHdlIGFyZSBvbiBhbiBBUk02NCBhcmNoaXRlY3R1cmUsIHNvIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IHRvIHRlc3QgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBjb3JyZWN0LCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MTIuODI4NzM4ODAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODAxMTAyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdD0xNjc9YXR0cmlidXRlLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdC0xNjgtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0OjE2OToxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QtMTcwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTM4OT1lbnVtIHtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzktI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTXFx0NFxcbmFyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo0NDA6I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxcdDVcXG5hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDQxLSNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTExODY9aW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTI5MC1cXHR9XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMjkxOlxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTI5Mi1cXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMzAwPWludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMTgtXFx0fVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTMxOTpcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMjAtXFx0XFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMzI3PWludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMzQtXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjEzMzU6XFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzM2LVxcdFxcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYz00NjI9c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNDc1LVxcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jOjQ3NjpcXHRcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy00NzctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jPTY0Nj1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjU3LVxcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2NTg6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjY3LVxcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2Njg6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjY5LVxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjczLVxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6Njc0OlxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY3NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjc3LVxcdHZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6Njc4OlxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY3OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzAwLVxcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo3MDE6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzAyLVxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzIzLVxcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo3MjQ6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzI1LVxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MjEuNTA4ODU3NjMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MTk0MDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBBUk02NCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgdG8gS1ZNIGZvciBBUk02NC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2FybS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgS1ZNIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cywgcG90ZW50aWFsbHkgZm9jdXNpbmcgb24gZml4ZWQgY291bnRlcnMuIFRoaXMgdHlwZSBvZiBtb2RpZmljYXRpb24gc2NyZWFtcyBcImZ1enogbWVcIiEgRGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGludHJvZHVjZWQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBzYWZlIHRvIGFzc3VtZSBgS1ZNYCBpcyByZXF1aXJlZCwgYmVpbmcgdGhlIGJhc2UgS1ZNIGNvbmZpZy4gTm93LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IFBNVXYzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBwYXRjaCBtYXkgaW50ZXJhY3Qgd2l0aCBvciBkZXBlbmQgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGFjdCB0byBkZXNpZ24gYXBwcm9wcmlhdGUgZnV6emluZyBpbnB1dHMgYW5kIHRhcmdldHMuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgS1ZNIGFuZCBBUk02NCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MjYuNTgwODAxMjI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTM2MTAwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0hXX1BFUkZfRVZFTlRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYz00NTE9c3RhdGljIHZvaWQgZXh5bm9zNTQyMF9wcmVwYXJlX3BtX3Jlc3VtZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jLTQ2MC1cXG5hcmNoL2FybS9tYWNoLWV4eW5vcy9zdXNwZW5kLmM6NDYxOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19IV19QRVJGX0VWRU5UUykgXFx1MDAyNlxcdTAwMjYgY2x1c3RlciAhPSAwKSB7XFxuYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jLTQ2Mi1cXHRcXHQvKlxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmg9MTQ9Y3B1Y2FwX2lzX3Bvc3NpYmxlKGNvbnN0IHVuc2lnbmVkIGludCBjYXApXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaC03NC1cXHRjYXNlIEFSTTY0X0hBU19QTVVWMzpcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaDo3NTpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oLTc2LVxcdGNhc2UgQVJNNjRfSEFTX0xTVUk6XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTkyMz1zdGF0aWMgYm9vbCBoYXNfbHBhMihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTI4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTI5OiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkzMC1zdGF0aWMgYm9vbCBoYXNfcG11djMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjUzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zMTMxLSNlbmRpZlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMTMyOiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzEzMy1cXHR7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZT0xNj1rdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxcXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yOC1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyOTprdm0tJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpICArPSBwbXUtZW11bC5vIHBtdS5vXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMzAta3ZtLSQoQ09ORklHX0FSTTY0X1BUUl9BVVRIKSAgKz0gcGF1dGgub1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM9MTI5PXN0YXRpYyB2b2lkIF9faHlwX3ZnaWNfcmVzdG9yZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0xNDUtICovXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MTQ2OiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0xNDctc3RhdGljIGJvb2wgX19wbXVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19QRVJGX0VWRU5UUylcXHQrPSBwZXJmX2V2ZW50Lm8gcGVyZl9yZWdzLm9cXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpXFx0Kz0gcGVyZl9ldmVudF9taXBzeHgub1xcbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUtMTA0LVxcbi0tXFxuaW5jbHVkZS9rdm0vYXJtX3BtdS5oLTE3LVxcbmluY2x1ZGUva3ZtL2FybV9wbXUuaDoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0tWTSlcXG5pbmNsdWRlL2t2bS9hcm1fcG11LmgtMTktc3RydWN0IGt2bV9wbWMge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NjozMC43OTQ0MjM5MTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE1MDM0OTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQTVUgdjMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgUE1VIGZlYXR1cmVzIGFyZSBpbnRlZ3JhdGVkLiBGaXJzdCwgSSBzZWUgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYHBtdS1lbXVsLmNgIOKAkyB0aGF0J3MgYSBrZXkgZGVwZW5kZW5jeS4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgYW5vdGhlciByZXF1aXJlbWVudCwgdGhhdCdzIGEgZ2l2ZW4uIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgb3IgbW9kaWZ5aW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlc2U6XG5cbiogICBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YFxuKiAgIGBrdm1fdmNwdV9sb2FkX3BtdWBcbiogICBga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzYFxuKiAgIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50YFxuKiAgIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmBcblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoaXMgbmV3IGZ1bmN0aW9uIGBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZTpcblxuYGBgY1xuK3N0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1xuK1x0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIHx8XG4rXHQgICAgdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuK1x0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbmBgYFxuXG5JdCBzZWVtcyB0byBiZSBzZXR0aW5nIGEgZmxhZyBhbmQgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjb3VudGVycyB3aGVuIHRoZSBWTSBoYXNuJ3QgcnVuIHlldCBhbmQgd2hlbiBub3QgYWxyZWFkeSBjb25maWd1cmVkIGluIGFub3RoZXIgd2F5LlxuXG5JIGFtIGFsc28gZXhhbWluaW5nIGBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djNgOlxuXG5gYGBjXG4tYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbitpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbitcdGNwdW1hc2tfdmFyX3QgY3B1cyBfX2ZyZWUoZnJlZV9jcHVtYXNrX3ZhcikgPSBDUFVNQVNLX1ZBUl9OVUxMO1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1xuK1x0aWYgKCFhbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZjcHVzLCBHRlBfS0VSTkVMKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjcHVtYXNrX2NvcHkoY3B1cywgY3B1X3Bvc3NpYmxlX21hc2spO1xuK1xuK1x0Z3VhcmQocmN1KSgpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuK1x0XHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKCFjcHVtYXNrX2FuZG5vdChjcHVzLCBjcHVzLCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuYGBgXG5cblRoaXMgbm93IHJldHVybnMgYW4gaW50ZWdlciB3aGljaCBjYW4gcmVwcmVzZW50IGEgZmFpbHVyZS5cblxuVGhlIG90aGVyIGZ1bmN0aW9ucyBsaXN0ZWQgYXJlIGxpa2VseSByZWxhdGVkIHRvIFBNVSBzZXR1cCBhbmQgZXZlbnQgaGFuZGxpbmcuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgSFdfUEVSRl9FVkVOVFNgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyBuYW1lLiBBbmQgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgaXMgYSBtYWNybywgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaC4gSSBzaG91bGQgYmUgYWJsZSB0byBpbmNvcnBvcmF0ZSB0aGlzIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODksIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1Njo0NS45NDQ3NzcyMjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTYyMDgxNSwiRXJyb3IiOiJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFMiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJIV19QRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9wbXVcIixcbiAgICBcImt2bV9zdXBwb3J0c19ndWVzdF9wbXV2M1wiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudFwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UU1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1Njo0Ni4yNjQ0MjMyNzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI1NDc5NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIGBIV19QRVJGX0VWRU5UU2AqKlxuXG5IbW0sIGl0IHNlZW1zIGxpa2UgYEhXX1BFUkZfRVZFTlRTYCBpc24ndCBkZWZpbmVkLiBUaGF0J3MgdW51c3VhbCwgSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgdGhhdC4gUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gKnNob3VsZCogYmUgZGVmaW5lZC4gR2l2ZW4gaXRzIG5hdHVyZSwgaXQncyBtb3N0IGxpa2VseSByZWxhdGVkIHRvIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBzbyBpdCBzaG91bGQgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGVzIG9yIHRoZSBnZW5lcmFsIGluaXRpYWxpemF0aW9uIEtjb25maWcuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBhcmNoL2FybTY0L0tjb25maWdgIGFuZCB0aGVuIG1heWJlIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBtb3N0IGxpa2VseSBmaW5kIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0J3MgbWlzc2luZyBvciB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGNvbmZpZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE0OjU2OjUxLjI4OTkwNjgyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM3Mzc1MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIV19QRVJGX0VWRU5UU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEyNTE9Y29uZmlnIENQVV9UVEJSMF9QQU5cXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTI1Ny1cXG5hcmNoL2FybS9LY29uZmlnOjEyNTg6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXFxuYXJjaC9hcm0vS2NvbmZpZy0xMjU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNTQ5PWNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTUyLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTUzOmNvbmZpZyBIV19QRVJGX0VWRU5UU1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTU0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI2OTA9Y29uZmlnIE5PREVTX1NISUZUXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0yNjk0LVxcbmFyY2gvbWlwcy9LY29uZmlnOjI2OTU6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXFxuYXJjaC9taXBzL0tjb25maWctMjY5Ni1cXHRib29sIFxcXCJFbmFibGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBwZXJmIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz02MjY9Y29uZmlnIEdVU0FfUkJcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy02MzUtXFxuYXJjaC9zaC9LY29uZmlnOjYzNjpjb25maWcgSFdfUEVSRl9FVkVOVFNcXG5hcmNoL3NoL0tjb25maWctNjM3LVxcdGJvb2wgXFxcIkVuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1Njo1Ni42MjczMzYxNjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNzMwNDcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEhXX1BFUkZfRVZFTlRTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGBIV19QRVJGX0VWRU5UU2AgYW5kLCBvbiBhcm02NCwgaXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBgeWAsIG1lYW5pbmcgaXQncyBhbHdheXMgZW5hYmxlZCBpZiBgUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgc2F3IHRoaXMgZXJyb3IgbWVzc2FnZTogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFMuXCIgVGhhdCdzIHRocm93aW5nIG1lIG9mZi5cblxuV2FpdCBhIHNlY29uZC4uLiBQZXJoYXBzIHRoZSBpc3N1ZSBpc24ndCB0aGF0IGl0ICpsaXRlcmFsbHkqIGRvZXNuJ3QgZXhpc3QsIGJ1dCB0aGF0IGl0J3Mgbm90IGEgdXNlci1jb25maWd1cmFibGUgb3B0aW9uIGRpcmVjdGx5IHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYG1ha2UgbWVudWNvbmZpZ2AuIEl0J3MgYSBkZXBlbmRlbmN5LCBhbmQgdGhlIHN5c3RlbSBpcyBnZXR0aW5nIHRyaXBwZWQgdXAgb24gdGhhdCBkaXN0aW5jdGlvbi4gSXQgZG9lc24ndCBzaG93IHVwIGluIHRob3NlIG1lbnVzLCBzbyBpdCdzIG5vdCBcImV4aXN0aW5nXCIgaW4gdGhhdCBzZW5zZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgUEVSRl9FVkVOVFNgIGlzIHRoZSByaWdodCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTc6MDMuMzM0NjQ2MTI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI2NzYyNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJGX0VWRU5UU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZz0yPW1lbnUgXFxcIlBlcmZvcm1hbmNlIG1vbml0b3JpbmdcXFwiXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMy1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MTI6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTktXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MjA6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX0NTVEFURVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBjc3RhdGUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjctXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI5LVxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjM3OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIkFNRCBVbmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDctXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9CUlNcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuLS1cXG5pbml0L0tjb25maWc9MjEyMT1tZW51IFxcXCJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1xcXCJcXG5pbml0L0tjb25maWctMjEyMi1cXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcXG5pbml0L0tjb25maWctMjEyNC1cXHRib29sIFxcXCJLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTc6MDcuNzYxNDE0MzY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTAzMTAxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqVGhlIFJpZ2h0IFRvb2xzIGZvciB0aGUgSm9iKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzIHBhcnRpY3VsYXIgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBpdCdzIGJlY29tZSBjbGVhciB0aGF0IGBQRVJGX0VWRU5UU2AgaXMgdGhlIGNvcnJlY3QgYXZlbnVlIHRvIGV4cGxvcmUuIEkndmUgd29ya2VkIHdpdGggYSBsb3Qgb2YgZGlmZmVyZW50IHByb2ZpbGluZyB0b29scyBvdmVyIHRoZSB5ZWFycywgYW5kIGBQRVJGX0VWRU5UU2Agc2VlbXMgbGlrZSB0aGUgbW9zdCB2ZXJzYXRpbGUgYW5kIHBvd2VyZnVsIG9wdGlvbiBmb3Igd2hhdCBJIG5lZWQgdG8gYWNoaWV2ZSBoZXJlLiBJJ20gdGhpbmtpbmcsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QsIHRoYXQgbGV2ZXJhZ2luZyBgS1ZNYCBhbG9uZ3NpZGUgYFBFUkZfRVZFTlRTYCB3aWxsIGdpdmUgbWUgdGhlIGdyYW51bGFyaXR5IGFuZCBhY2Nlc3MgdG8gbG93LWxldmVsIGRhdGEgSSByZXF1aXJlLiBUaGlzIGNvbWJpbmF0aW9uIHNob3VsZCBhbGxvdyBtZSB0byBwaW5wb2ludCB0aGUgcHJlY2lzZSBib3R0bGVuZWNrcyBhbmQgYmVoYXZpb3IgSSdtIGFmdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0NSwiT3V0cHV0VG9rZW5zIjoyMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NzoxMy4wNzE3Mjg3NjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg1NDUyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlcIixcbiAgICBcImt2bV92Y3B1X2xvYWRfcG11XCIsXG4gICAgXCJrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djNcIixcbiAgICBcImt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRcIixcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gZGV2aWNlIGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBmb3IgQVJNNjQgUE1VdjMgZW11bGF0aW9uLCB3aGljaCBhbGxvd3MgZW11bGF0aW5nIGEgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIFRoaXMgbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBsb2dpYyBhbmQgYWRkcyBuZXcgaW9jdGwgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzXCIsXG4gICAgXCJrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgZm9yIEFSTTY0IFBNVXYzIGVtdWxhdGlvbiwgd2hpY2ggYWxsb3dzIGVtdWxhdGluZyBhIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLiBUaGlzIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMgYW5kIGFkZHMgbmV3IGlvY3RsIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowplzcs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 14:34:08 +0000 UTC FinishedAt: 2026-07-06 14:57:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1ee27dacbe5dc4def481794d899d67b0d4570094", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1ee27dacbe5dc4def481794d899d67b0d4570094", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "7e72db22-d50a-48d3-af61-a4a0a6fe14c2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arm_pmu_v3_set_pmu_fixed_counters_only", "kvm_vcpu_load_pmu", "kvm_supports_guest_pmuv3", "kvm_pmu_create_perf_event", "kvm_arm_pmu_v3_set_attr" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDVmZjg4OWM5ZWQ1MGQxYjlhYjhjMWU1MWVjZWVjZmNiMDc5MDRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTQ6NTY6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMTRkMTFmOTE3OWQxZjUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuQEAgLTc0LDcgJiM0Mzs3NCw4IEBAIGlycWNoaXAuXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XG4gXHQgXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxuLVx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuJiM0MztcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4mIzQzO1x0XHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZVxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuQEAgLTExNiwxNCAmIzQzOzExNywxNCBAQCB1c2luZyBldmVudCAweDExIChDUFVfQ1lDTEVTKS5cbiBcbiA6UmV0dXJuczpcbiBcbi1cdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxuJiM0MzsgICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgb3IgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcbiBcdCAtRU5YSU8gICBQTVUgbm90IGZvdW5kXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBSZXF1ZXN0IHRoYXQgdGhlIFZDUFUgdXNlcyB0aGUgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSB3aGVuIGNyZWF0aW5nIGd1ZXN0IGV2ZW50c1xuIGZvciB0aGUgcHVycG9zZSBvZiBQTVUgZW11bGF0aW9uLiBUaGUgUE1VIGlkZW50aWZpZXIgY2FuIGJlIHJlYWQgZnJvbSB0aGUgXCYjMzQ7dHlwZVwmIzM0O1xuQEAgLTE2NSw2ICYjNDM7MTY2LDI5IEBAIGV4cGxpY2l0bHkgc2VsZWN0ZWQsIG9yIHRoZSBudW1iZXIgb2YgY291bnRlcnMgaXMgb3V0IG9mIHJhbmdlIGZvciB0aGVcbiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpc1xuIGF0dHJpYnV0ZS5cbiBcbiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyXG4mIzQzO1xuJiM0Mzs6UmV0dXJuczpcbiYjNDM7XG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4sXG4mIzQzO1x0XHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxuJiM0MztcdFx0ICBhIGhhcmR3YXJlIFBNVSBoYXMgYWxyZWFkeSBiZWVuIHNwZWNpZmllZFxuJiM0MztcdCAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nXG4mIzQzO1x0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIE9ubHkgZml4ZWRcbiYjNDM7Y291bnRlcnMgYXJlIGV4cG9zZWQgdG8gdGhlIGd1ZXN0OiB0aGUgY3ljbGUgY291bnRlciB0b2RheSwgYW5kIHRoZSBpbnN0cnVjdGlvblxuJiM0Mztjb3VudGVyIGlmIHN1cHBvcnQgZm9yIEZFQVRfUE1VdjNfSUNOVFIgaXMgYWRkZWQuXG4mIzQzO1xuJiM0MztXaXRoIHByb2dyYW1tYWJsZSBjb3VudGVycyBkaXNhYmxlZCwgdGhlIFZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVLlxuJiM0MztUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgb24gaGV0ZXJvZ2VuZW91cyBzeXN0ZW1zIHdoZXJlIGRpZmZlcmVudCBoYXJkd2FyZVxuJiM0MztQTVVzIGNvdmVyIGRpZmZlcmVudCBwaHlzaWNhbCBDUFVzLiBBbGwgVkNQVXMgaW4gYSBWTSBzaGFyZSB0aGlzIGF0dHJpYnV0ZS5cbiYjNDM7XG4gMi4gR1JPVVA6IEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyZmFhNjBkZjg0N2QyMC4uZjY2NDU5ZjgxY2Q2YzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTM2Nyw2ICYjNDM7MzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXHRcdDEwXG4gXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXHRcdFx0XHQxMVxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXG4mIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcdFx0XHQxMlxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ2FtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cbiYjNDM7I2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQxM1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiAmIzQzOzQzNyw3IEBAIGVudW0ge1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUlx0XHQyXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVVx0XHQzXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTXHQ0XG4mIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDVcbiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXHRcdDFcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVJcdFx0MFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUlx0XHQxXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggMzczMmVlOWViMGQ0ZTcuLjFjMGJjZTI3YzcxYmY1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtNjk4LDYgJiM0Mzs2OTgsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRpZiAoaGFzX3ZoZSgpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9sb2FkX3BtdSh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuIFx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG5AQCAtMTU1NCwxNCAmIzQzOzE1NTUsMTkgQEAgaW50IGt2bV92bV9pb2N0bF9pcnFfbGluZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX2xldmVsICppcnFfbGV2ZWwsXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKHZvaWQpXG4mIzQzO3N0YXRpYyBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBLVk1fVkNQVV9WQUxJRF9GRUFUVVJFUztcbiYjNDM7XHRpbnQgcjtcbiBcbiBcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfMzJCSVRfRUwxKSlcbiBcdFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9FTDFfMzJCSVQsIFx1MDAyNmZlYXR1cmVzKTtcbiBcbi1cdGlmICgha3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkpXG4mIzQzO1x0ciA9IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpO1xuJiM0MztcdGlmIChyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHI7XG4mIzQzO1xuJiM0MztcdGlmICghcilcbiBcdFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9QTVVfVjMsIFx1MDAyNmZlYXR1cmVzKTtcbiBcbiBcdGlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKVxuQEAgLTE1ODIsNiAmIzQzOzE1ODgsNyBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2luaXRfY2hlY2tfZmVhdHVyZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCAqaW5pdClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cdTAwM2VmZWF0dXJlc1swXTtcbiYjNDM7XHRsb25nIHI7XG4gXHRpbnQgaTtcbiBcbiBcdGlmIChmZWF0dXJlcyBcdTAwMjYgfktWTV9WQ1BVX1ZBTElEX0ZFQVRVUkVTKVxuQEAgLTE1OTIsNyAmIzQzOzE1OTksMTEgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pbml0X2NoZWNrX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdH1cbiBcbi1cdGlmIChmZWF0dXJlcyBcdTAwMjYgfnN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpKVxuJiM0MztcdHIgPSBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXMoKTtcbiYjNDM7XHRpZiAociBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByO1xuJiM0MztcbiYjNDM7XHRpZiAoZmVhdHVyZXMgXHUwMDI2IH5yKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbmluZGV4IGVkYjIxMjM5NDc4YTk1Li41MjgxMjYwN2I3NmQ5OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbkBAIC03LDkgJiM0Mzs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wbXUuaFx1MDAzZVxuQEAgLTI0LDEwICYjNDM7MjQsMjYgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcbiBzdGF0aWMgdm9pZCBrdm1fcG11X3JlbGVhc2VfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcbiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcbiBcbi1ib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKVxuJiM0MztpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbiYjNDM7XHRjcHVtYXNrX3Zhcl90IGNwdXMgX19mcmVlKGZyZWVfY3B1bWFza192YXIpID0gQ1BVTUFTS19WQVJfTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4mIzQzO1xuJiM0MztcdGlmICghYWxsb2NfY3B1bWFza192YXIoXHUwMDI2Y3B1cywgR0ZQX0tFUk5FTCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y3B1bWFza19jb3B5KGNwdXMsIGNwdV9wb3NzaWJsZV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWNwdW1hc2tfYW5kbm90KGNwdXMsIGNwdXMsIFx1MDAyNnBtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9wbWNfdG9fdmNwdShjb25zdCBzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuQEAgLTgwLDYgJiM0Mzs5NiwxMSBAQCB1NjQga3ZtX3BtdV9ldnR5cGVyX21hc2soc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIG1hc2s7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBrdm1fcG1jX2lzXzY0Yml0IC0gZGV0ZXJtaW5lIGlmIGNvdW50ZXIgaXMgNjRiaXRcbiAgKiBAcG1jOiBjb3VudGVyIGNvbnRleHRcbkBAIC0zMjcsNyAmIzQzOzM0OCwxMSBAQCB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiB7XG4tXHRpZiAoIXBtYy1cdTAwM2VwZXJmX2V2ZW50KSB7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG4mIzQzO1xuJiM0MztcdGlmICghcG1jLVx1MDAzZXBlcmZfZXZlbnQgfHxcbiYjNDM7XHQgICAgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAhY3B1bWFza190ZXN0X2NwdSh2Y3B1LVx1MDAzZWNwdSwgXHUwMDI2dG9fYXJtX3BtdShwbWMtXHUwMDNlcGVyZl9ldmVudC1cdTAwM2VwbXUpLVx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcbiBcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtNjQ5LDEwICYjNDM7Njc0LDggQEAgc3RhdGljIGJvb2wga3ZtX3BtY19jb3VudHNfYXRfZWwyKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHRyZXR1cm4ga3ZtX3BtY19yZWFkX2V2dHJlZyhwbWMpIFx1MDAyNiBBUk1WOF9QTVVfSU5DTFVERV9FTDI7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4mIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxuIHtcbi1cdHN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuLVxuIFx0LypcbiBcdCAqIFRoZSBDUFUgUE1VIGxpa2VseSBpc24mIzM5O3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELlxuQEAgLTY2Myw2ICYjNDM7Njg2LDIzIEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4gXHRyZXR1cm4gZXZlbnRzZWw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4mIzQzO1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4mIzQzO1x0XHRwbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXHUwMDI2cG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHBtdTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcbiAgKiBAcG1jOiBDb3VudGVyIGNvbnRleHRcbkBAIC02NzYsNiAmIzQzOzcxNiwxMiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHRpbnQgZXZlbnRzZWw7XG4gXHR1NjQgZXZ0cmVnO1xuIFxuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS1cdTAwM2VjcHUpO1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRSghYXJtX3BtdSkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXZ0cmVnID0ga3ZtX3BtY19yZWFkX2V2dHJlZyhwbWMpO1xuIFxuIFx0a3ZtX3BtdV9zdG9wX2NvdW50ZXIocG1jKTtcbkBAIC03MDQsNyAmIzQzOzc1MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdCAqIERvbiYjMzk7dCBjcmVhdGUgYW4gZXZlbnQgaWYgd2UmIzM5O3JlIHJ1bm5pbmcgb24gaGFyZHdhcmUgdGhhdCByZXF1aXJlc1xuIFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbiYjMzk7dCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cbiBcdCAqL1xuLVx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudCh2Y3B1LVx1MDAzZWt2bSwgZXZlbnRzZWwpO1xuJiM0MztcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpO1xuIFx0aWYgKGV2ZW50c2VsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNzg5LDQzICYjNDM7ODM1LDcgQEAgdm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRlbnRyeS1cdTAwM2Vhcm1fcG11ID0gcG11O1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2YXJtX3BtdXMpO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KHZvaWQpXG4te1xuLVx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuLVx0c3RydWN0IGFybV9wbXUgKnBtdTtcbi1cdGludCBjcHU7XG4tXG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcbi1cdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4tXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuLVx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxuLVx0ICpcbi1cdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuLVx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXG4tXHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuLVx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2Vcbi1cdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxuLVx0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuLVx0ICpcbi1cdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxuLVx0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHkuIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZ1xuLVx0ICogY2FycmllZCBoZXJlLlxuLVx0ICovXG4tXHRjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4tXHRcdHBtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4tXG4tXHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXHUwMDI2cG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbi1cdFx0XHRyZXR1cm4gcG11O1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcbkBAIC04NzAsNiAmIzQzOzg4MCw5IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHR1NjQgdmFsLCBtYXNrID0gMDtcbiBcdGludCBiYXNlLCBpLCBucl9ldmVudHM7XG4gXG4mIzQzO1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRpZiAoIXBtY2VpZDEpIHtcbiBcdFx0dmFsID0gY29tcHV0ZV9wbWNlaWQwKGNwdV9wbXUpO1xuIFx0XHRiYXNlID0gMDtcbkBAIC04OTcsNiAmIzQzOzkxMCwyNCBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0cmV0dXJuIHZhbCBcdTAwMjYgbWFzaztcbiB9XG4gXG4mIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlXG4mIzQzO1x0ICogRkVBVF9QTVV2M19JQ05UUiBpcyBzdXBwb3J0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4mIzQzO1x0c3RydWN0IGFybV9wbXUgKmNwdV9wbXU7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fFxuJiM0MztcdCAgICAha3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQocG1jKSB8fCAhcG1jLVx1MDAzZXBlcmZfZXZlbnQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNwdV9wbXUgPSB0b19hcm1fcG11KHBtYy1cdTAwM2VwZXJmX2V2ZW50LVx1MDAzZXBtdSk7XG4mIzQzO1x0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHZjcHUtXHUwMDNlY3B1LCBcdTAwMjZjcHVfcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG5AQCAtMTAwOCw2ICYjNDM7MTAzOSw5IEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcbiYjNDM7XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUE1VdjMgcmVxdWlyZXMgdGhhdCBhbGwgZXZlbnQgY291bnRlcnMgYXJlIGNhcGFibGUgb2YgY291bnRpbmcgYW55XG4gXHQgKiBldmVudCwgdGhvdWdoIHRoZSBzYW1lIG1heSBub3QgYmUgdHJ1ZSBvZiBub24tUE1VdjMgaGFyZHdhcmUuXG5AQCAtMTA2Miw3ICYjNDM7MTA5NiwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiAgKi9cbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzXG4mIzQzO1x0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbiYjNDM7XHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuJiM0MztcdCAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuJiM0MztcdCAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVVxuJiM0MztcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4mIzQzO1x0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcbiYjNDM7XHQgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXRcbiYjNDM7XHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUElcbiYjNDM7XHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4mIzQzO1x0ICogY2FycmllZCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XG4gXG4gXHRpZiAoIWFybV9wbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuQEAgLTEwNzksMTcgJiM0MzsxMTMwLDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiBcdFx0YXJtX3BtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4gXHRcdGlmIChhcm1fcG11LVx1MDAzZXBtdS50eXBlID09IHBtdV9pZCkge1xuIFx0XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHxcbiYjNDM7XHRcdFx0ICAgIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pIHx8XG4gXHRcdFx0ICAgIChrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7XG4gXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcdFx0XHRrdm1fYXJtX3NldF9wbXUoa3ZtLCBhcm1fcG11KTtcbiBcdFx0XHRjcHVtYXNrX2NvcHkoa3ZtLVx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFx1MDAyNmFybV9wbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpO1xuIFx0XHRcdHJldCA9IDA7XG5AQCAtMTA5NywxMCAmIzQzOzExNTAsMjUgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiYjNDM7XHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKVxuIHtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuQEAgLTExNzUsNyAmIzQzOzEyNDMsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbiYjNDM7XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyKSB7XG5AQCAtMTIyMCw2ICYjNDM7MTI4OCw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnModmNwdSwgbik7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4mIzQzO1x0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xuIFx0fVxuQEAgLTEyNDYsNiAmIzQzOzEzMTYsOSBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHRpcnEgPSB2Y3B1LVx1MDAzZWFyY2gucG11LmlycV9udW07XG4gXHRcdHJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTtcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbiYjNDM7XHRcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdHJldHVybiAtRU5YSU87XG5AQCAtMTI1OSw2ICYjNDM7MTMzMiw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVU6XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxuJiM0MztcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuIFx0XHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbmluZGV4IGI1ZTU5NDIyMDRmYzY5Li4wMmQ3MzM4NmE2ZDBlNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5AQCAtMzksNyAmIzQzOzM5LDcgQEAgc3RydWN0IGFybV9wbXVfZW50cnkge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXU7XG4gfTtcbiBcbi1ib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKTtcbiYjNDM7aW50IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKTtcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVx0KCh2KS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtICE9IDApXG4gdTY0IGt2bV9wbXVfZ2V0X2NvdW50ZXJfdmFsdWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2VsZWN0X2lkeCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNlbGVjdF9pZHgsIHU2NCB2YWwpO1xuQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLFxuIFx0XHRcdFx0ICAgIHU2NCBzZWxlY3RfaWR4KTtcbiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuQEAgLTk4LDkgJiM0Mzs5OSw5IEBAIHZvaWQga3ZtX3BtdV9uZXN0ZWRfdHJhbnNpdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHN0cnVjdCBrdm1fcG11IHtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVx0KGZhbHNlKVxuQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuaW5kZXggMjIyMjMzOTU5NjllMGYuLmViODM1MmE2ZTJmNjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuQEAgLTQwMywxMiAmIzQzOzQwMyw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcdHU4IHBtdXZlciwgZWM7XG4tXHR1NjQgZGZyMCwgaXJxID0gMjM7XG4tXHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0ge1xuLVx0XHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4tXHRcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsXG4tXHRcdC5hZGRyID0gKHU2NClcdTAwMjZpcnEsXG4tXHR9O1xuJiM0MztcdHU2NCBkZnIwO1xuIFxuIFx0LyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi9cbiBcdG1lbXNldChcdTAwMjZ2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpO1xuQEAgLTQzNCw4ICYjNDM7NDI5LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiBcdFRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwbXV2ZXIgXHUwMDNlPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCxcbiBcdFx0ICAgIFwmIzM0O1VuZXhwZWN0ZWQgUE1VVkVSICgweCV4KSBvbiB0aGUgdkNQVSB3aXRoIFBNVXYzXCYjMzQ7LCBwbXV2ZXIpO1xuLVxuLVx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmlycV9hdHRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXG5AQCAtNDYxLDE1ICYjNDM7NDU0LDMwIEBAIHN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZV9kb25lKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHksXG4mIzQzO1x0XHRcdFx0XHRcdCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4gXG4gXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4mIzQzO1x0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpXG4mIzQzO1x0XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4mIzQzO1xuIFx0cHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTtcbiBcbiBcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuQEAgLTQ4OSwxNSAmIzQzOzQ5NywxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1XFxuXCYjMzQ7LCBwbWNyX24pO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG5AQCAtNTMxLDE0ICYjNDM7NTM5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0ge1xuICAqIENyZWF0ZSBhIFZNLCBhbmQgY2hlY2sgaWYgS1ZNIGhhbmRsZXMgdGhlIHVzZXJzcGFjZSBhY2Nlc3NlcyBvZlxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbiYjNDM7XHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XG4gXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuIFxuIFx0dmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7XG5AQCAtNTg4LDExICYjNDM7NTk2LDExIEBAIHN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuICAqIHRoZSB2Q1BVIHRvIEBwbWNyX24sIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0IHZhbHVlLlxuICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHRwcl9kZWJ1ZyhcJiMzNDtFcnJvciB0ZXN0IHdpdGggcG1jcl9uICVsdSAobGFyZ2VyIHRoYW4gdGhlIGhvc3QpXFxuXCYjMzQ7LCBwbWNyX24pO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7XG4mIzQzO1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG5AQCAtNjIyLDIyICYjNDM7NjMwLDExNCBAQCBzdGF0aWMgYm9vbCBrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cih2b2lkKVxuIFx0cmV0dXJuIHN1cHBvcnRlZDtcbiB9XG4gXG4taW50IG1haW4odm9pZClcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbi1cdHU2NCBpLCBwbWNyX247XG4tXG4tXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIoKSk7XG4mIzQzO1x0dTY0IGk7XG4gXG4tXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gcG1jcl9uOyBpJiM0MzsmIzQzOykge1xuLVx0XHRydW5fYWNjZXNzX3Rlc3QoaSk7XG4tXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTtcbiYjNDM7XHRcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7XHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpIFx1MDAzYyBBUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOylcbi1cdFx0cnVuX2Vycm9yX3Rlc3QoaSk7XG4mIzQzO1x0XHRydW5fZXJyb3JfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3BtdV9ldmVudF9maWx0ZXIgZmlsdGVyID0geyAubmV2ZW50cyA9IDAgfTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnN0b3BwZWRfdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHRyZXQgPSBfX3ZjcHVfaGFzX2RldmljZV9hdHRyKHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPLFxuJiM0MztcdFx0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9IQVNfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHVuc2V0IGF0IGluaXRpYWxpemF0aW9uLiAqL1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovXG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovXG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR0aW5nIGFuIGV2ZW50IGZpbHRlciB3aGVuIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiYjNDM7XHQgKiByZXN1bHRzIGluIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1xuJiM0MztcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGFuIGV2ZW50IGZpbHRlciBoYXNcbiYjNDM7XHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXG4mIzQzO1x0ICovXG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXG4mIzQzO1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZSgyKTtcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcdTAwMjZpbml0KTtcbiYjNDM7XHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbiYjNDM7XHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuJiM0MztcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1x0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7XG4mIzQzO1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5JiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2xvYWRfcG11JiMzNDssCiAgICAmIzM0O2t2bV9zdXBwb3J0c19ndWVzdF9wbXV2MyYjMzQ7LAogICAgJiMzNDtrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgZm9yIEFSTTY0IFBNVXYzIGVtdWxhdGlvbiwgd2hpY2ggYWxsb3dzIGVtdWxhdGluZyBhIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLiBUaGlzIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMgYW5kIGFkZHMgbmV3IGlvY3RsIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1ZmY4ODljOWVkNTBkMWI5YWI4YzFlNTFlY2VlY2ZjYjA3OTA0ZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE0OjU2OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xNGQxMWY5MTc5ZDFmNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdApAQCAtNzQsNyAmIzQzOzc0LDggQEAgaXJxY2hpcC4KIAkgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkCiAJIC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdAogCSAJICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGUKLQkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yCiYjNDM7CQkgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2UKIAkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTExNiwxNCAmIzQzOzExNywxNCBAQCB1c2luZyBldmVudCAweDExIChDUFVfQ1lDTEVTKS4KIAogOlJldHVybnM6CiAKLQkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvcgotICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllcgogCSAtRU5YSU8gICBQTVUgbm90IGZvdW5kCiAJIC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZAogCSAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Ci0JID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzCiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlICYjMzQ7dHlwZSYjMzQ7CkBAIC0xNjUsNiAmIzQzOzE2NiwyOSBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlCiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpcwogYXR0cmlidXRlLgogCiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyCiYjNDM7CiYjNDM7OlJldHVybnM6CiYjNDM7CiYjNDM7CSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biwKJiM0MzsJCSAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yCiYjNDM7CQkgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkCiYjNDM7CSAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nCiYjNDM7CSAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWQKJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIE9ubHkgZml4ZWQKJiM0Mztjb3VudGVycyBhcmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3Q6IHRoZSBjeWNsZSBjb3VudGVyIHRvZGF5LCBhbmQgdGhlIGluc3RydWN0aW9uCiYjNDM7Y291bnRlciBpZiBzdXBwb3J0IGZvciBGRUFUX1BNVXYzX0lDTlRSIGlzIGFkZGVkLgomIzQzOwomIzQzO1dpdGggcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIGRpc2FibGVkLCB0aGUgVkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUuCiYjNDM7VGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIGhldGVyb2dlbmVvdXMgc3lzdGVtcyB3aGVyZSBkaWZmZXJlbnQgaGFyZHdhcmUKJiM0MztQTVVzIGNvdmVyIGRpZmZlcmVudCBwaHlzaWNhbCBDUFVzLiBBbGwgVkNQVXMgaW4gYSBWTSBzaGFyZSB0aGlzIGF0dHJpYnV0ZS4KJiM0MzsKIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyZmFhNjBkZjg0N2QyMC4uZjY2NDU5ZjgxY2Q2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTM2Nyw2ICYjNDM7MzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfV1JJVEFCTEVfSU1QX0lEX1JFR1MJCTEwCiAJLyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqLwogI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBCQkJCTExCiYjNDM7CS8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovCiYjNDM7I2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVAkJCTEyCiYjNDM7CS8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ2FtbWFibGUgZXZlbnQgY291bnRlcnMgKi8KJiM0MzsjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJMTMKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzcsNiAmIzQzOzQzNyw3IEBAIGVudW0gewogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCQkyCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VCQkzCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMJNAomIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJNQogI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAkJMQogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSCQkwCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVIJCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKaW5kZXggMzczMmVlOWViMGQ0ZTcuLjFjMGJjZTI3YzcxYmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwpAQCAtNjk4LDYgJiM0Mzs2OTgsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJaWYgKGhhc192aGUoKSkKIAkJa3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7CiAJa3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9sb2FkX3BtdSh2Y3B1KTsKIAlrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTsKIAlpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZCgmYW1wO3ZjcHUtJmd0O2FyY2gpKQogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTsKQEAgLTE1NTQsMTQgJiM0MzsxNTU1LDE5IEBAIGludCBrdm1fdm1faW9jdGxfaXJxX2xpbmUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCAqaXJxX2xldmVsLAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXModm9pZCkKJiM0MztzdGF0aWMgbG9uZyBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gS1ZNX1ZDUFVfVkFMSURfRkVBVFVSRVM7CiYjNDM7CWludCByOwogCiAJaWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpKQogCQljbGVhcl9iaXQoS1ZNX0FSTV9WQ1BVX0VMMV8zMkJJVCwgJmFtcDtmZWF0dXJlcyk7CiAKLQlpZiAoIWt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpKQomIzQzOwlyID0ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCk7CiYjNDM7CWlmIChyICZsdDsgMCkKJiM0MzsJCXJldHVybiByOwomIzQzOwomIzQzOwlpZiAoIXIpCiAJCWNsZWFyX2JpdChLVk1fQVJNX1ZDUFVfUE1VX1YzLCAmYW1wO2ZlYXR1cmVzKTsKIAogCWlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKQpAQCAtMTU4Miw2ICYjNDM7MTU4OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW5pdF9jaGVja19mZWF0dXJlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCWNvbnN0IHN0cnVjdCBrdm1fdmNwdV9pbml0ICppbml0KQogewogCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBpbml0LSZndDtmZWF0dXJlc1swXTsKJiM0MzsJbG9uZyByOwogCWludCBpOwogCiAJaWYgKGZlYXR1cmVzICZhbXA7IH5LVk1fVkNQVV9WQUxJRF9GRUFUVVJFUykKQEAgLTE1OTIsNyAmIzQzOzE1OTksMTEgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pbml0X2NoZWNrX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmIChmZWF0dXJlcyAmYW1wOyB+c3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKCkpCiYjNDM7CXIgPSBzeXN0ZW1fc3VwcG9ydGVkX3ZjcHVfZmVhdHVyZXMoKTsKJiM0MzsJaWYgKHIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHI7CiYjNDM7CiYjNDM7CWlmIChmZWF0dXJlcyAmYW1wOyB+cikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKaW5kZXggZWRiMjEyMzk0NzhhOTUuLjUyODEyNjA3Yjc2ZDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKQEAgLTcsOSAmIzQzOzcsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bV9ob3N0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmL2FybV9wbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1bGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2VtdWxhdGUuaCZndDsKICNpbmNsdWRlICZsdDtrdm0vYXJtX3BtdS5oJmd0OwpAQCAtMjQsMTAgJiM0MzsyNCwyNiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpOwogc3RhdGljIHZvaWQga3ZtX3BtdV9yZWxlYXNlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7CiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTsKIAotYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCkKJiM0MztpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpCiB7Ci0JZ3VhcmQobXV0ZXgpKCZhbXA7YXJtX3BtdXNfbG9jayk7Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZhbXA7YXJtX3BtdXMpOwomIzQzOwljcHVtYXNrX3Zhcl90IGNwdXMgX19mcmVlKGZyZWVfY3B1bWFza192YXIpID0gQ1BVTUFTS19WQVJfTlVMTDsKJiM0MzsJc3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5OwomIzQzOwomIzQzOwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZhbXA7Y3B1cywgR0ZQX0tFUk5FTCkpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJY3B1bWFza19jb3B5KGNwdXMsIGNwdV9wb3NzaWJsZV9tYXNrKTsKJiM0MzsKJiM0MzsJZ3VhcmQocmN1KSgpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKJiM0MzsJCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKJiM0MzsKJiM0MzsJCWlmICghY3B1bWFza19hbmRub3QoY3B1cywgY3B1cywgJmFtcDtwbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSkKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX3BtY190b192Y3B1KGNvbnN0IHN0cnVjdCBrdm1fcG1jICpwbWMpCkBAIC04MCw2ICYjNDM7OTYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSkKIAlyZXR1cm4gbWFzazsKIH0KIAomIzQzO3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0CiAgKiBAcG1jOiBjb3VudGVyIGNvbnRleHQKQEAgLTMyNyw3ICYjNDM7MzQ4LDExIEBAIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKLQlpZiAoIXBtYy0mZ3Q7cGVyZl9ldmVudCkgewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKJiM0MzsKJiM0MzsJaWYgKCFwbWMtJmd0O3BlcmZfZXZlbnQgfHwKJiM0MzsJICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIWNwdW1hc2tfdGVzdF9jcHUodmNwdS0mZ3Q7Y3B1LCAmYW1wO3RvX2FybV9wbXUocG1jLSZndDtwZXJmX2V2ZW50LSZndDtwbXUpLSZndDtzdXBwb3J0ZWRfY3B1cykpKSB7CiAJCWt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQocG1jKTsKIAkJcmV0dXJuOwogCX0KQEAgLTY0OSwxMCAmIzQzOzY3NCw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgJmFtcDsgQVJNVjhfUE1VX0lOQ0xVREVfRUwyOwogfQogCi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQomIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQogewotCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKLQogCS8qCiAJICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmcKIAkgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELgpAQCAtNjYzLDYgJiM0Mzs2ODYsMjMgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbCkKIAlyZXR1cm4gZXZlbnRzZWw7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7CiYjNDM7CXN0cnVjdCBhcm1fcG11ICpwbXU7CiYjNDM7CiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiYjNDM7CQlwbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKJiM0MzsKJiM0MzsJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmFtcDtwbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSkKJiM0MzsJCQlyZXR1cm4gcG11OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlcgogICogQHBtYzogQ291bnRlciBjb250ZXh0CkBAIC02NzYsNiAmIzQzOzcxNiwxMiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpCiAJaW50IGV2ZW50c2VsOwogCXU2NCBldnRyZWc7CiAKJiM0MzsJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS0mZ3Q7Y3B1KTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWFybV9wbXUpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWV2dHJlZyA9IGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKTsKIAogCWt2bV9wbXVfc3RvcF9jb3VudGVyKHBtYyk7CkBAIC03MDQsNyAmIzQzOzc1MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIAkgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMKIAkgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLgogCSAqLwotCWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS0mZ3Q7a3ZtLCBldmVudHNlbCk7CiYjNDM7CWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpOwogCWlmIChldmVudHNlbCAmbHQ7IDApCiAJCXJldHVybjsKIApAQCAtNzg5LDQzICYjNDM7ODM1LDcgQEAgdm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KQogCQlyZXR1cm47CiAKIAllbnRyeS0mZ3Q7YXJtX3BtdSA9IHBtdTsKLQlsaXN0X2FkZF90YWlsKCZhbXA7ZW50cnktJmd0O2VudHJ5LCAmYW1wO2FybV9wbXVzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKQotewotCXN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgYXJtX3BtdSAqcG11OwotCWludCBjcHU7Ci0KLQlndWFyZChtdXRleCkoJmFtcDthcm1fcG11c19sb2NrKTsKLQotCS8qCi0JICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXMKLQkgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZAotCSAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkCi0JICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLgotCSAqCi0JICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlCi0JICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VCi0JICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGUKLQkgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZQotCSAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdAotCSAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy4KLQkgKgotCSAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSQotCSAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcKLQkgKiBjYXJyaWVkIGhlcmUuCi0JICovCi0JY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewotCQlwbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKLQotCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZhbXA7cG11LSZndDtzdXBwb3J0ZWRfY3B1cykpCi0JCQlyZXR1cm4gcG11OwotCX0KLQotCXJldHVybiBOVUxMOwomIzQzOwlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO2VudHJ5LSZndDtlbnRyeSwgJmFtcDthcm1fcG11cyk7CiB9CiAKIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpCkBAIC04NzAsNiAmIzQzOzg4MCw5IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpCiAJdTY0IHZhbCwgbWFzayA9IDA7CiAJaW50IGJhc2UsIGksIG5yX2V2ZW50czsKIAomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoIXBtY2VpZDEpIHsKIAkJdmFsID0gY29tcHV0ZV9wbWNlaWQwKGNwdV9wbXUpOwogCQliYXNlID0gMDsKQEAgLTg5Nyw2ICYjNDM7OTEwLDI0IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpCiAJcmV0dXJuIHZhbCAmYW1wOyBtYXNrOwogfQogCiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlCiYjNDM7CSAqIEZFQVRfUE1VdjNfSUNOVFIgaXMgc3VwcG9ydGVkLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiYjNDM7CXN0cnVjdCBhcm1fcG11ICpjcHVfcG11OwomIzQzOwomIzQzOwlpZiAoIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pIHx8CiYjNDM7CSAgICAha3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQocG1jKSB8fCAhcG1jLSZndDtwZXJmX2V2ZW50KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljcHVfcG11ID0gdG9fYXJtX3BtdShwbWMtJmd0O3BlcmZfZXZlbnQtJmd0O3BtdSk7CiYjNDM7CWlmICghY3B1bWFza190ZXN0X2NwdSh2Y3B1LSZndDtjcHUsICZhbXA7Y3B1X3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTsKQEAgLTEwMDgsNiAmIzQzOzEwMzksOSBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bS0mZ3Q7YXJjaC5hcm1fcG11OwogCiYjNDM7CWlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCS8qCiAJICogUE1VdjMgcmVxdWlyZXMgdGhhdCBhbGwgZXZlbnQgY291bnRlcnMgYXJlIGNhcGFibGUgb2YgY291bnRpbmcgYW55CiAJICogZXZlbnQsIHRob3VnaCB0aGUgc2FtZSBtYXkgbm90IGJlIHRydWUgb2Ygbm9uLVBNVXYzIGhhcmR3YXJlLgpAQCAtMTA2Miw3ICYjNDM7MTA5NiwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSkKICAqLwogaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7CiYjNDM7CS8qCiYjNDM7CSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCiYjNDM7CSAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kCiYjNDM7CSAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkCiYjNDM7CSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KJiM0MzsJICoKJiM0MzsJICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlCiYjNDM7CSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQomIzQzOwkgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZQomIzQzOwkgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZQomIzQzOwkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKJiM0MzsJICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLgomIzQzOwkgKgomIzQzOwkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKJiM0MzsJICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHkuIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZwomIzQzOwkgKiBjYXJyaWVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJaWYgKCFhcm1fcG11KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEwNzksMTcgJiM0MzsxMTMwLDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpCiAJaW50IHJldCA9IC1FTlhJTzsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwotCW11dGV4X2xvY2soJmFtcDthcm1fcG11c19sb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiAJCWFybV9wbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKIAkJaWYgKGFybV9wbXUtJmd0O3BtdS50eXBlID09IHBtdV9pZCkgewogCQkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fAomIzQzOwkJCSAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fAogCQkJICAgIChrdm0tJmd0O2FyY2gucG11X2ZpbHRlciAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7CiAJCQkJcmV0ID0gLUVCVVNZOwogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCQkJa3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7CiAJCQljcHVtYXNrX2NvcHkoa3ZtLSZndDthcmNoLnN1cHBvcnRlZF9jcHVzLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKTsKIAkJCXJldCA9IDA7CkBAIC0xMDk3LDEwICYjNDM7MTE1MCwyNSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKQogCQl9CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7YXJtX3BtdXNfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLSZndDthcmNoLnBtdV9maWx0ZXIgfHwKJiM0MzsJICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncykpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKJiM0MzsJa3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbikKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CkBAIC0xMTc1LDcgJiM0MzsxMjQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAkJICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJaWYgKCFrdm0tJmd0O2FyY2gucG11X2ZpbHRlcikgewpAQCAtMTIyMCw2ICYjNDM7MTI4OCw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTsKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDoKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7CiAJfQpAQCAtMTI0Niw2ICYjNDM7MTMxNiw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAJCWlycSA9IHZjcHUtJmd0O2FyY2gucG11LmlycV9udW07CiAJCXJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU5YSU87CkBAIC0xMjU5LDYgJiM0MzsxMzMyLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgogCQlpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSkKIAkJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaAppbmRleCBiNWU1OTQyMjA0ZmM2OS4uMDJkNzMzODZhNmQwZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKQEAgLTM5LDcgJiM0MzszOSw3IEBAIHN0cnVjdCBhcm1fcG11X2VudHJ5IHsKIAlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdTsKIH07CiAKLWJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpOwomIzQzO2ludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCk7CiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KQkoKHYpLSZndDthcmNoLnBtdS5pcnFfbnVtICE9IDApCiB1NjQga3ZtX3BtdV9nZXRfY291bnRlcl92YWx1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzZWxlY3RfaWR4KTsKIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl92YWx1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzZWxlY3RfaWR4LCB1NjQgdmFsKTsKQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTsKIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpOwogdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSwKIAkJCQkgICAgdTY0IHNlbGVjdF9pZHgpOwomIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTsKQEAgLTk4LDkgJiM0Mzs5OSw5IEBAIHZvaWQga3ZtX3BtdV9uZXN0ZWRfdHJhbnNpdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogc3RydWN0IGt2bV9wbXUgewogfTsKIAotc3RhdGljIGlubGluZSBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQogewotCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKICNkZWZpbmUga3ZtX2FybV9wbXVfaXJxX2luaXRpYWxpemVkKHYpCShmYWxzZSkKQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMKaW5kZXggMjIyMjMzOTU5NjllMGYuLmViODM1MmE2ZTJmNjI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMKQEAgLTQwMywxMiAmIzQzOzQwMyw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAl1OCBwbXV2ZXIsIGVjOwotCXU2NCBkZnIwLCBpcnEgPSAyMzsKLQlzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0gewotCQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCi0JCS5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsCi0JCS5hZGRyID0gKHU2NCkmYW1wO2lycSwKLQl9OwomIzQzOwl1NjQgZGZyMDsKIAogCS8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovCiAJbWVtc2V0KCZhbXA7dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTsKQEAgLTQzNCw4ICYjNDM7NDI5LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSkKIAlURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGICZhbXA7JmFtcDsKIAkJICAgIHBtdXZlciAmZ3Q7PSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCwKIAkJICAgICYjMzQ7VW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjMmIzM0OywgcG11dmVyKTsKLQotCXZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCAmYW1wO2lycV9hdHRyKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpCkBAIC00NjEsMTUgJiM0Mzs0NTQsMzAgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKQogCX0KIH0KIAotc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbCkKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZCkKJiM0Mzt7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywKJiM0MzsJCQkJCQkgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LAomIzQzOwkJCQkJCSBib29sIGV4cGVjdF9mYWlsKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAl1bnNpZ25lZCBpbnQgcHJldjsKIAlpbnQgcmV0OwomIzQzOwl1NjQgaXJxID0gMjM7CiAKIAljcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTsKIAl2Y3B1ID0gdnBtdV92bS52Y3B1OwogCiYjNDM7CWlmIChmaXhlZF9jb3VudGVyc19vbmx5KQomIzQzOwkJdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCAmYW1wO2lycSk7CiYjNDM7CiAJcHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTsKIAogCXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLApAQCAtNDg5LDE1ICYjNDM7NDk3LDE1IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wKICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbiwKICAqIGFuZCBydW4gdGhlIHRlc3QuCiAgKi8KLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKQomIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiB7CiAJdTY0IHNwOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwogCi0JcHJfZGVidWcoJiMzNDtUZXN0IHdpdGggcG1jcl9uICVsdVxuJiMzNDssIHBtY3Jfbik7CiYjNDM7CXByX2RlYnVnKCYjMzQ7VGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcbiYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpOwogCi0JdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpOwomIzQzOwl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7CiAJdmNwdSA9IHZwbXVfdm0udmNwdTsKIAogCS8qIFNhdmUgdGhlIGluaXRpYWwgc3AgdG8gcmVzdG9yZSB0aGVtIGxhdGVyIHRvIHJ1biB0aGUgZ3Vlc3QgYWdhaW4gKi8KQEAgLTUzMSwxNCAmIzQzOzUzOSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHsKICAqIENyZWF0ZSBhIFZNLCBhbmQgY2hlY2sgaWYgS1ZNIGhhbmRsZXMgdGhlIHVzZXJzcGFjZSBhY2Nlc3NlcyBvZgogICogdGhlIFBNVSByZWdpc3RlciBzZXRzIGluIEB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdIGNvcnJlY3RseS4KICAqLwotc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pCiYjNDM7c3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAJdTY0IHNldF9yZWdfaWQsIGNscl9yZWdfaWQsIHJlZ192YWw7CiAJdTY0IHZhbGlkX2NvdW50ZXJzX21hc2ssIG1heF9jb3VudGVyc19tYXNrOwogCi0JdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpOwomIzQzOwl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7CiAJdmNwdSA9IHZwbXVfdm0udmNwdTsKIAogCXZhbGlkX2NvdW50ZXJzX21hc2sgPSBnZXRfY291bnRlcnNfbWFzayhwbWNyX24pOwpAQCAtNTg4LDExICYjNDM7NTk2LDExIEBAIHN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKQogICogdGhlIHZDUFUgdG8gQHBtY3Jfbiwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QgdmFsdWUuCiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS4KICAqLwotc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiB7CiAJcHJfZGVidWcoJiMzNDtFcnJvciB0ZXN0IHdpdGggcG1jcl9uICVsdSAobGFyZ2VyIHRoYW4gdGhlIGhvc3QpXG4mIzM0OywgcG1jcl9uKTsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpOwomIzQzOwl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCB0cnVlKTsKIAlkZXN0cm95X3ZwbXVfdm0oKTsKIH0KIApAQCAtNjIyLDIyICYjNDM7NjMwLDExNCBAQCBzdGF0aWMgYm9vbCBrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cih2b2lkKQogCXJldHVybiBzdXBwb3J0ZWQ7CiB9CiAKLWludCBtYWluKHZvaWQpCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewotCXU2NCBpLCBwbWNyX247Ci0KLQlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7Ci0JVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpOwotCVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MzsJdTY0IGk7CiAKLQlwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7PSBwbWNyX247IGkmIzQzOyYjNDM7KSB7Ci0JCXJ1bl9hY2Nlc3NfdGVzdChpKTsKLQkJcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGkpOwomIzQzOwkJcnVuX2FjY2Vzc190ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwomIzQzOwkJcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwogCX0KIAogCWZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpICZsdDsgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSYjNDM7JiM0MzspCi0JCXJ1bl9lcnJvcl90ZXN0KGkpOwomIzQzOwkJcnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CXJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsJCWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovCiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCAmYW1wO2ZpbHRlcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsICZhbXA7ZmlsdGVyKTsKJiM0MzsKJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSAoMSAmbHQ7Jmx0OyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRUJVU1ksCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXRlc3RfY29uZmlnKDAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MzsKJiM0MzsJdGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7CiYjNDM7CXRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgS1ZNIEFSTTY0IFBNVXYzIEF0dHJpYnV0ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG8gcmV2aWV3LCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIExvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCwgZm9yIEFSTTY0JiMzOTtzIFBNVXYzIGVtdWxhdGlvbi4gSW50ZXJlc3RpbmcuLi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIGFsbG93IFBNVXYzIGVtdWxhdGlvbiBldmVuIHdpdGhvdXQgdGhlIHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycywgc3RpY2tpbmcgc29sZWx5IHRvIHRoZSBmaXhlZCBjb3VudGVycy4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljLiBUaGlzIGNoYW5nZXMgaG93IHdlIG1vZGVsIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGluIHRoZSBoeXBlcnZpc29yIGFuZCB0aGF0LCBieSBkZWZpbml0aW9uLCBtdXN0IGJlIGxvb2tlZCBhdCB3aXRoIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIGBhcmNoL2FybTY0L2t2bS9hcm0uY2AsIGFuZCwgaW1wb3J0YW50bHksIGFkZHMgYSBuZXcgaW9jdGwgYXR0cmlidXRlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXcgYXR0cmlidXRlIHdvcmtzLiBUaGUga2V5IGZpbGUgc2VlbXMgdG8gYmUgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgdGhlIFBNVSBlbXVsYXRpb24uCgpTaW5jZSB0aGlzIGlzIEtWTSBvbiBBUk02NCwgdGhpcyBjb2RlIHdpbGwgYmUgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZCBhbmQgd2UgYXJlIG9uIGFuIEFSTTY0IGFyY2hpdGVjdHVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IHRvIHRlc3QgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGNvcnJlY3QsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0PTE2Nz1hdHRyaWJ1dGUuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QtMTY4LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0OjE2OToxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdC0xNzAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTM4OT1lbnVtIHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDM5LSNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjQ0MDojZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG5hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDQxLSNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcdFx0MVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9MTE4Nj1pbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTI5MC1cdH1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTI5MTpcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMjkyLVx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9MTMwMD1pbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTMxOC1cdH1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTMxOTpcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzIwLVx0XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTEzMjc9aW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMzQtXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMzM1Olx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMzYtXHRcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM9NDYyPXN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy00NzUtXHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6NDc2Olx0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy00NzctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYz02NDY9c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy02NTctXHRyZXQgPSBfX3ZjcHVfaGFzX2RldmljZV9hdHRyKHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2NTg6XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY1OS1cdGlmIChyZXQpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY2Ny1cdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jOjY2ODpcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjY5LVx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY3My1cdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2NzQ6XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy02NzUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy02NzctXHR2Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6Njc4Olx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjc5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzAwLVx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6NzAxOlx0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy03MDItXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzIzLVx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6NzI0Olx0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy03MjUtXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEFSTTY0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgdG8gS1ZNIGZvciBBUk02NC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2FybS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgS1ZNIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cywgcG90ZW50aWFsbHkgZm9jdXNpbmcgb24gZml4ZWQgY291bnRlcnMuIFRoaXMgdHlwZSBvZiBtb2RpZmljYXRpb24gc2NyZWFtcyAmIzM0O2Z1enogbWUmIzM0OyEgRGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGludHJvZHVjZWQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBzYWZlIHRvIGFzc3VtZSBgS1ZNYCBpcyByZXF1aXJlZCwgYmVpbmcgdGhlIGJhc2UgS1ZNIGNvbmZpZy4gTm93LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IFBNVXYzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBwYXRjaCBtYXkgaW50ZXJhY3Qgd2l0aCBvciBkZXBlbmQgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGFjdCB0byBkZXNpZ24gYXBwcm9wcmlhdGUgZnV6emluZyBpbnB1dHMgYW5kIHRhcmdldHMuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgS1ZNIGFuZCBBUk02NCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSFdfUEVSRl9FVkVOVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jPTQ1MT1zdGF0aWMgdm9pZCBleHlub3M1NDIwX3ByZXBhcmVfcG1fcmVzdW1lKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jLTQ2MC1cbmFyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYzo0NjE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpIFx1MDAyNlx1MDAyNiBjbHVzdGVyICE9IDApIHtcbmFyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYy00NjItXHRcdC8qXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmg9MTQ9Y3B1Y2FwX2lzX3Bvc3NpYmxlKGNvbnN0IHVuc2lnbmVkIGludCBjYXApXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmgtNzQtXHRjYXNlIEFSTTY0X0hBU19QTVVWMzpcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oOjc1Olx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmgtNzYtXHRjYXNlIEFSTTY0X0hBU19MU1VJOlxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xOTIzPXN0YXRpYyBib29sIGhhc19scGEyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTI4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5Mjk6I2lmZGVmIENPTkZJR19IV19QRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MzAtc3RhdGljIGJvb2wgaGFzX3BtdXYzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0yNTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0ge1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zMTMxLSNlbmRpZlxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjMxMzI6I2lmZGVmIENPTkZJR19IV19QRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMxMzMtXHR7XG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjgtXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyOTprdm0tJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpICAmIzQzOz0gcG11LWVtdWwubyBwbXUub1xuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMzAta3ZtLSQoQ09ORklHX0FSTTY0X1BUUl9BVVRIKSAgJiM0Mzs9IHBhdXRoLm9cbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYz0xMjk9c3RhdGljIHZvaWQgX19oeXBfdmdpY19yZXN0b3JlX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0xNDUtICovXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYzoxNDY6I2lmZGVmIENPTkZJR19IV19QRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ3LXN0YXRpYyBib29sIF9fcG11X3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKVx0JiM0Mzs9IHBlcmZfZXZlbnQubyBwZXJmX3JlZ3Mub1xuYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKVx0JiM0Mzs9IHBlcmZfZXZlbnRfbWlwc3h4Lm9cbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUtMTA0LVxuLS1cbmluY2x1ZGUva3ZtL2FybV9wbXUuaC0xNy1cbmluY2x1ZGUva3ZtL2FybV9wbXUuaDoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19LVk0pXG5pbmNsdWRlL2t2bS9hcm1fcG11LmgtMTktc3RydWN0IGt2bV9wbWMge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTg5CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDEyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUE1VIHYzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgUE1VIGZlYXR1cmVzIGFyZSBpbnRlZ3JhdGVkLiBGaXJzdCwgSSBzZWUgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYHBtdS1lbXVsLmNgIOKAkyB0aGF0JiMzOTtzIGEga2V5IGRlcGVuZGVuY3kuIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGlzIGFub3RoZXIgcmVxdWlyZW1lbnQsIHRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgY29yZSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2U6CgoqICAgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAKKiAgIGBrdm1fdmNwdV9sb2FkX3BtdWAKKiAgIGBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djNgCiogICBga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudGAKKiAgIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAKCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhpcyBuZXcgZnVuY3Rpb24gYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZToKCmBgYGMKJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS0mZ3Q7YXJjaC5wbXVfZmlsdGVyIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncyk7CiYjNDM7CWt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KYGBgCgpJdCBzZWVtcyB0byBiZSBzZXR0aW5nIGEgZmxhZyBhbmQgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjb3VudGVycyB3aGVuIHRoZSBWTSBoYXNuJiMzOTt0IHJ1biB5ZXQgYW5kIHdoZW4gbm90IGFscmVhZHkgY29uZmlndXJlZCBpbiBhbm90aGVyIHdheS4KCkkgYW0gYWxzbyBleGFtaW5pbmcgYGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2M2A6CgpgYGBjCi1ib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQomIzQzO2ludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCkKIHsKLQlndWFyZChtdXRleCkoJmFtcDthcm1fcG11c19sb2NrKTsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJmFtcDthcm1fcG11cyk7CiYjNDM7CWNwdW1hc2tfdmFyX3QgY3B1cyBfX2ZyZWUoZnJlZV9jcHVtYXNrX3ZhcikgPSBDUFVNQVNLX1ZBUl9OVUxMOwomIzQzOwlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7CiYjNDM7CiYjNDM7CWlmICghYWxsb2NfY3B1bWFza192YXIoJmFtcDtjcHVzLCBHRlBfS0VSTkVMKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljcHVtYXNrX2NvcHkoY3B1cywgY3B1X3Bvc3NpYmxlX21hc2spOwomIzQzOwomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewomIzQzOwkJc3RydWN0IGFybV9wbXUgKnBtdSA9IGVudHJ5LSZndDthcm1fcG11OwomIzQzOwomIzQzOwkJaWYgKCFjcHVtYXNrX2FuZG5vdChjcHVzLCBjcHVzLCAmYW1wO3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQomIzQzOwkJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQpgYGAKClRoaXMgbm93IHJldHVybnMgYW4gaW50ZWdlciB3aGljaCBjYW4gcmVwcmVzZW50IGEgZmFpbHVyZS4KClRoZSBvdGhlciBmdW5jdGlvbnMgbGlzdGVkIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBQTVUgc2V0dXAgYW5kIGV2ZW50IGhhbmRsaW5nLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBIV19QRVJGX0VWRU5UU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUuIEFuZCBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBpcyBhIG1hY3JvLCBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYC4KCk15IGNvbmNsdXNpb24gaXMgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaC4gSSBzaG91bGQgYmUgYWJsZSB0byBpbmNvcnBvcmF0ZSB0aGlzIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSSYjMzk7bGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UUzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7SFdfUEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gZGV2aWNlIGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBmb3IgQVJNNjQgUE1VdjMgZW11bGF0aW9uLCB3aGljaCBhbGxvd3MgZW11bGF0aW5nIGEgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIFRoaXMgbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBsb2dpYyBhbmQgYWRkcyBuZXcgaW9jdGwgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgYEhXX1BFUkZfRVZFTlRTYCoqCgpIbW0sIGl0IHNlZW1zIGxpa2UgYEhXX1BFUkZfRVZFTlRTYCBpc24mIzM5O3QgZGVmaW5lZC4gVGhhdCYjMzk7cyB1bnVzdWFsLCBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCB0aGF0LiBSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiAqc2hvdWxkKiBiZSBkZWZpbmVkLiBHaXZlbiBpdHMgbmF0dXJlLCBpdCYjMzk7cyBtb3N0IGxpa2VseSByZWxhdGVkIHRvIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBzbyBpdCBzaG91bGQgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGVzIG9yIHRoZSBnZW5lcmFsIGluaXRpYWxpemF0aW9uIEtjb25maWcuIExldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyBgYXJjaC9hcm02NC9LY29uZmlnYCBhbmQgdGhlbiBtYXliZSBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBtb3N0IGxpa2VseSBmaW5kIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIG1pc3Npbmcgb3Igd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXX1BFUkZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTI1MT1jb25maWcgQ1BVX1RUQlIwX1BBTlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTI1Ny1cbmFyY2gvYXJtL0tjb25maWc6MTI1ODpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtL0tjb25maWctMTI1OS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTU0OT1jb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE1NTItXG5hcmNoL2FybTY0L0tjb25maWc6MTU1Mzpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTU0LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI2OTA9Y29uZmlnIE5PREVTX1NISUZUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjY5NC1cbmFyY2gvbWlwcy9LY29uZmlnOjI2OTU6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXG5hcmNoL21pcHMvS2NvbmZpZy0yNjk2LVx0Ym9vbCBcJiMzNDtFbmFibGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBwZXJmIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gvc2gvS2NvbmZpZz02MjY9Y29uZmlnIEdVU0FfUkJcbi0tXG5hcmNoL3NoL0tjb25maWctNjM1LVxuYXJjaC9zaC9LY29uZmlnOjYzNjpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvc2gvS2NvbmZpZy02MzctXHRib29sIFwmIzM0O0VuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSFdfUEVSRl9FVkVOVFMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgSFdfUEVSRl9FVkVOVFNgIGFuZCwgb24gYXJtNjQsIGl0JiMzOTtzIGRlZmluZWQgYXMgYSBib29sZWFuIGB5YCwgbWVhbmluZyBpdCYjMzk7cyBhbHdheXMgZW5hYmxlZCBpZiBgUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgc2F3IHRoaXMgZXJyb3IgbWVzc2FnZTogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFMuJiMzNDsgVGhhdCYjMzk7cyB0aHJvd2luZyBtZSBvZmYuCgpXYWl0IGEgc2Vjb25kLi4uIFBlcmhhcHMgdGhlIGlzc3VlIGlzbiYjMzk7dCB0aGF0IGl0ICpsaXRlcmFsbHkqIGRvZXNuJiMzOTt0IGV4aXN0LCBidXQgdGhhdCBpdCYjMzk7cyBub3QgYSB1c2VyLWNvbmZpZ3VyYWJsZSBvcHRpb24gZGlyZWN0bHkgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgbWFrZSBtZW51Y29uZmlnYC4gSXQmIzM5O3MgYSBkZXBlbmRlbmN5LCBhbmQgdGhlIHN5c3RlbSBpcyBnZXR0aW5nIHRyaXBwZWQgdXAgb24gdGhhdCBkaXN0aW5jdGlvbi4gSXQgZG9lc24mIzM5O3Qgc2hvdyB1cCBpbiB0aG9zZSBtZW51cywgc28gaXQmIzM5O3Mgbm90ICYjMzQ7ZXhpc3RpbmcmIzM0OyBpbiB0aGF0IHNlbnNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBQRVJGX0VWRU5UU2AgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFwmIzM0O1BlcmZvcm1hbmNlIG1vbml0b3JpbmdcJiMzNDtcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7QU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4tLVxuaW5pdC9LY29uZmlnPTIxMjE9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxMjItXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTI0LVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg0NQoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKlRoZSBSaWdodCBUb29scyBmb3IgdGhlIEpvYioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzIHBhcnRpY3VsYXIgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBpdCYjMzk7cyBiZWNvbWUgY2xlYXIgdGhhdCBgUEVSRl9FVkVOVFNgIGlzIHRoZSBjb3JyZWN0IGF2ZW51ZSB0byBleHBsb3JlLiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBhIGxvdCBvZiBkaWZmZXJlbnQgcHJvZmlsaW5nIHRvb2xzIG92ZXIgdGhlIHllYXJzLCBhbmQgYFBFUkZfRVZFTlRTYCBzZWVtcyBsaWtlIHRoZSBtb3N0IHZlcnNhdGlsZSBhbmQgcG93ZXJmdWwgb3B0aW9uIGZvciB3aGF0IEkgbmVlZCB0byBhY2hpZXZlIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QsIHRoYXQgbGV2ZXJhZ2luZyBgS1ZNYCBhbG9uZ3NpZGUgYFBFUkZfRVZFTlRTYCB3aWxsIGdpdmUgbWUgdGhlIGdyYW51bGFyaXR5IGFuZCBhY2Nlc3MgdG8gbG93LWxldmVsIGRhdGEgSSByZXF1aXJlLiBUaGlzIGNvbWJpbmF0aW9uIHNob3VsZCBhbGxvdyBtZSB0byBwaW5wb2ludCB0aGUgcHJlY2lzZSBib3R0bGVuZWNrcyBhbmQgYmVoYXZpb3IgSSYjMzk7bSBhZnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTQ6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gZGV2aWNlIGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBmb3IgQVJNNjQgUE1VdjMgZW11bGF0aW9uLCB3aGljaCBhbGxvd3MgZW11bGF0aW5nIGEgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIFRoaXMgbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBsb2dpYyBhbmQgYWRkcyBuZXcgaW9jdGwgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE0OjU2OjA2LjAwNzI1OTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNjMwMzgxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9wbXVcIixcbiAgICBcImt2bV9zdXBwb3J0c19ndWVzdF9wbXV2M1wiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudFwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NjowNi4wMDcyNzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzQxODU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ1ZmY4ODljOWVkNTBkMWI5YWI4YzFlNTFlY2VlY2ZjYjA3OTA0ZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAxNDo1NjowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMTRkMTFmOTE3OWQxZjUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuQEAgLTc0LDcgKzc0LDggQEAgaXJxY2hpcC5cXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XFxuIFxcdCBcXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxcbi1cXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXFxuK1xcdFxcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbiBcXHQgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2VcXG4gXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5AQCAtMTE2LDE0ICsxMTcsMTQgQEAgdXNpbmcgZXZlbnQgMHgxMSAoQ1BVX0NZQ0xFUykuXFxuIFxcbiA6UmV0dXJuczpcXG4gXFxuLVxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4rICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4gXFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcXG4gXFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxcbi1cXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXFxuIGZvciB0aGUgcHVycG9zZSBvZiBQTVUgZW11bGF0aW9uLiBUaGUgUE1VIGlkZW50aWZpZXIgY2FuIGJlIHJlYWQgZnJvbSB0aGUgXFxcInR5cGVcXFwiXFxuQEAgLTE2NSw2ICsxNjYsMjkgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxcbiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpc1xcbiBhdHRyaWJ1dGUuXFxuIFxcbisxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6UGFyYW1ldGVyczogbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4ga3ZtX2RldmljZV9hdHRyLmFkZHJcXG4rXFxuKzpSZXR1cm5zOlxcbitcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxcbitcXHRcXHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxcbitcXHRcXHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXFxuK1xcdCAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nXFxuK1xcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitJZiBzZXQsIEtWTSBlbXVsYXRlcyBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gT25seSBmaXhlZFxcbitjb3VudGVycyBhcmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3Q6IHRoZSBjeWNsZSBjb3VudGVyIHRvZGF5LCBhbmQgdGhlIGluc3RydWN0aW9uXFxuK2NvdW50ZXIgaWYgc3VwcG9ydCBmb3IgRkVBVF9QTVV2M19JQ05UUiBpcyBhZGRlZC5cXG4rXFxuK1dpdGggcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIGRpc2FibGVkLCB0aGUgVkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUuXFxuK1RoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBvbiBoZXRlcm9nZW5lb3VzIHN5c3RlbXMgd2hlcmUgZGlmZmVyZW50IGhhcmR3YXJlXFxuK1BNVXMgY292ZXIgZGlmZmVyZW50IHBoeXNpY2FsIENQVXMuIEFsbCBWQ1BVcyBpbiBhIFZNIHNoYXJlIHRoaXMgYXR0cmlidXRlLlxcbitcXG4gMi4gR1JPVVA6IEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMmZhYTYwZGY4NDdkMjAuLmY2NjQ1OWY4MWNkNmM0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0zNjcsNiArMzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19XUklUQUJMRV9JTVBfSURfUkVHU1xcdFxcdDEwXFxuIFxcdC8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi9cXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXFx0XFx0XFx0XFx0MTFcXG4rXFx0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aCBhbiBleHBsaWNpdGx5IHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgKi9cXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVFxcdFxcdFxcdDEyXFxuK1xcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ2FtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXFx0MTNcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5pbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuQEAgLTQzNyw2ICs0MzcsNyBAQCBlbnVtIHtcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXFx0XFx0MlxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXFx0XFx0M1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcXHQ0XFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQ1XFxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlxcdFxcdDBcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXFx0XFx0MVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuaW5kZXggMzczMmVlOWViMGQ0ZTcuLjFjMGJjZTI3YzcxYmY1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5AQCAtNjk4LDYgKzY5OCw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFx0aWYgKGhhc192aGUoKSlcXG4gXFx0XFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XFxuIFxcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSk7XFxuIFxcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xcbiBcXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuIFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbkBAIC0xNTU0LDE0ICsxNTU1LDE5IEBAIGludCBrdm1fdm1faW9jdGxfaXJxX2xpbmUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCAqaXJxX2xldmVsLFxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKHZvaWQpXFxuK3N0YXRpYyBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBLVk1fVkNQVV9WQUxJRF9GRUFUVVJFUztcXG4rXFx0aW50IHI7XFxuIFxcbiBcXHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTXzMyQklUX0VMMSkpXFxuIFxcdFxcdGNsZWFyX2JpdChLVk1fQVJNX1ZDUFVfRUwxXzMyQklULCBcXHUwMDI2ZmVhdHVyZXMpO1xcbiBcXG4tXFx0aWYgKCFrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMoKSlcXG4rXFx0ciA9IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpO1xcbitcXHRpZiAociBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByO1xcbitcXG4rXFx0aWYgKCFyKVxcbiBcXHRcXHRjbGVhcl9iaXQoS1ZNX0FSTV9WQ1BVX1BNVV9WMywgXFx1MDAyNmZlYXR1cmVzKTtcXG4gXFxuIFxcdGlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKVxcbkBAIC0xNTgyLDYgKzE1ODgsNyBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2luaXRfY2hlY2tfZmVhdHVyZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCAqaW5pdClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cXHUwMDNlZmVhdHVyZXNbMF07XFxuK1xcdGxvbmcgcjtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiB+S1ZNX1ZDUFVfVkFMSURfRkVBVFVSRVMpXFxuQEAgLTE1OTIsNyArMTU5OSwxMSBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2luaXRfY2hlY2tfZmVhdHVyZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGZlYXR1cmVzIFxcdTAwMjYgfnN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpKVxcbitcXHRyID0gc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKCk7XFxuK1xcdGlmIChyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHI7XFxuK1xcbitcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiB+cilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xcbmluZGV4IGVkYjIxMjM5NDc4YTk1Li41MjgxMjYwN2I3NmQ5OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xcbkBAIC03LDkgKzcsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmL2FybV9wbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5AQCAtMjQsMTAgKzI0LDI2IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XFxuIHN0YXRpYyB2b2lkIGt2bV9wbXVfcmVsZWFzZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpO1xcbiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKTtcXG4gXFxuLWJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXFxuK2ludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcXG4ge1xcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbi1cXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNmFybV9wbXVzKTtcXG4rXFx0Y3B1bWFza192YXJfdCBjcHVzIF9fZnJlZShmcmVlX2NwdW1hc2tfdmFyKSA9IENQVU1BU0tfVkFSX05VTEw7XFxuK1xcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcXG4rXFxuK1xcdGlmICghYWxsb2NfY3B1bWFza192YXIoXFx1MDAyNmNwdXMsIEdGUF9LRVJORUwpKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGNwdW1hc2tfY29weShjcHVzLCBjcHVfcG9zc2libGVfbWFzayk7XFxuK1xcbitcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRcXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuK1xcbitcXHRcXHRpZiAoIWNwdW1hc2tfYW5kbm90KGNwdXMsIGNwdXMsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICprdm1fcG1jX3RvX3ZjcHUoY29uc3Qgc3RydWN0IGt2bV9wbWMgKnBtYylcXG5AQCAtODAsNiArOTYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0cmV0dXJuIG1hc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxcbkBAIC0zMjcsNyArMzQ4LDExIEBAIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcG1jX2VuYWJsZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIHtcXG4tXFx0aWYgKCFwbWMtXFx1MDAzZXBlcmZfZXZlbnQpIHtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuK1xcbitcXHRpZiAoIXBtYy1cXHUwMDNlcGVyZl9ldmVudCB8fFxcbitcXHQgICAgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIWNwdW1hc2tfdGVzdF9jcHUodmNwdS1cXHUwMDNlY3B1LCBcXHUwMDI2dG9fYXJtX3BtdShwbWMtXFx1MDAzZXBlcmZfZXZlbnQtXFx1MDAzZXBtdSktXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcXG4gXFx0XFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtNjQ5LDEwICs2NzQsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0cmV0dXJuIGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKSBcXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcXG4rc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3QgYXJtX3BtdSAqcG11LCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuIHtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdSA9IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbid0IFBNVXYzOyBsZXQgdGhlIGRyaXZlciBwcm92aWRlIGEgbWFwcGluZ1xcbiBcXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXFxuQEAgLTY2Myw2ICs2ODYsMjMgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcXG4gXFx0cmV0dXJuIGV2ZW50c2VsO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xcbitcXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xcbitcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFxcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcXG4rXFx0XFx0cG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuK1xcbitcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBtdTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50IC0gY3JlYXRlIGEgcGVyZiBldmVudCBmb3IgYSBjb3VudGVyXFxuICAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxcbkBAIC02NzYsNiArNzE2LDEyIEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0aW50IGV2ZW50c2VsO1xcbiBcXHR1NjQgZXZ0cmVnO1xcbiBcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSh2Y3B1LVxcdTAwM2VjcHUpO1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFhcm1fcG11KSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRldnRyZWcgPSBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYyk7XFxuIFxcbiBcXHRrdm1fcG11X3N0b3BfY291bnRlcihwbWMpO1xcbkBAIC03MDQsNyArNzUwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbiBcXHQgKiBEb24ndCBjcmVhdGUgYW4gZXZlbnQgaWYgd2UncmUgcnVubmluZyBvbiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzXFxuIFxcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cXG4gXFx0ICovXFxuLVxcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS1cXHUwMDNla3ZtLCBldmVudHNlbCk7XFxuK1xcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpO1xcbiBcXHRpZiAoZXZlbnRzZWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC03ODksNDMgKzgzNSw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZW50cnktXFx1MDAzZWFybV9wbXUgPSBwbXU7XFxuLVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdTtcXG4tXFx0aW50IGNwdTtcXG4tXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YXJtX3BtdXNfbG9jayk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xcbi1cXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxcbi1cXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxcbi1cXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXFxuLVxcdCAqXFxuLVxcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxcbi1cXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcXG4tXFx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcXG4tXFx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcXG4tXFx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XFxuLVxcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cXG4tXFx0ICpcXG4tXFx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXFxuLVxcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcXG4tXFx0ICogY2FycmllZCBoZXJlLlxcbi1cXHQgKi9cXG4tXFx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbi1cXHRcXHRwbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4tXFxuLVxcdFxcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXFx1MDAyNnBtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbi1cXHRcXHRcXHRyZXR1cm4gcG11O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4rXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcXG5AQCAtODcwLDYgKzg4MCw5IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIFxcdHU2NCB2YWwsIG1hc2sgPSAwO1xcbiBcXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xcbiBcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGlmICghcG1jZWlkMSkge1xcbiBcXHRcXHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XFxuIFxcdFxcdGJhc2UgPSAwO1xcbkBAIC04OTcsNiArOTEwLDI0IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAyNiBtYXNrO1xcbiB9XFxuIFxcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlXFxuK1xcdCAqIEZFQVRfUE1VdjNfSUNOVFIgaXMgc3VwcG9ydGVkLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuK1xcdHN0cnVjdCBhcm1fcG11ICpjcHVfcG11O1xcbitcXG4rXFx0aWYgKCFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cXHUwMDNla3ZtKSB8fFxcbitcXHQgICAgIWt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHBtYykgfHwgIXBtYy1cXHUwMDNlcGVyZl9ldmVudClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3B1X3BtdSA9IHRvX2FybV9wbXUocG1jLVxcdTAwM2VwZXJmX2V2ZW50LVxcdTAwM2VwbXUpO1xcbitcXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUodmNwdS1cXHUwMDNlY3B1LCBcXHUwMDI2Y3B1X3BtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbitcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK31cXG4rXFxuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTtcXG5AQCAtMTAwOCw2ICsxMDM5LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdTtcXG4gXFxuK1xcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcXG4gXFx0ICogZXZlbnQsIHRob3VnaCB0aGUgc2FtZSBtYXkgbm90IGJlIHRydWUgb2Ygbm9uLVBNVXYzIGhhcmR3YXJlLlxcbkBAIC0xMDYyLDcgKzEwOTYsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXFxuICAqL1xcbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcXG4rXFx0LypcXG4rXFx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcXG4rXFx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcXG4rXFx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcXG4rXFx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxcbitcXHQgKlxcbitcXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcXG4rXFx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXFxuK1xcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXFxuK1xcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXFxuK1xcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxcbitcXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxcbitcXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXFxuK1xcdCAqIGNhcnJpZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIFxcbiBcXHRpZiAoIWFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbkBAIC0xMDc5LDE3ICsxMTMwLDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXFxuIFxcdGludCByZXQgPSAtRU5YSU87XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcm1fcG11c19sb2NrKTtcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbiBcXHRcXHRhcm1fcG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuIFxcdFxcdGlmIChhcm1fcG11LVxcdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcXG4gXFx0XFx0XFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fFxcbitcXHRcXHRcXHQgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHxcXG4gXFx0XFx0XFx0ICAgIChrdm0tXFx1MDAzZWFyY2gucG11X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKTtcXG4gXFx0XFx0XFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XFxuIFxcdFxcdFxcdGNwdW1hc2tfY29weShrdm0tXFx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFxcdTAwMjZhcm1fcG11LVxcdTAwM2VzdXBwb3J0ZWRfY3B1cyk7XFxuIFxcdFxcdFxcdHJldCA9IDA7XFxuQEAgLTEwOTcsMTAgKzExNTAsMjUgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVxcdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK1xcdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuQEAgLTExNzUsNyArMTI0Myw3IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcdFxcdCAgICAgZmlsdGVyLmFjdGlvbiAhPSBLVk1fUE1VX0VWRU5UX0RFTlkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdFxcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkpXFxuK1xcdFxcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbiBcXHRcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5wbXVfZmlsdGVyKSB7XFxuQEAgLTEyMjAsNiArMTI4OCw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcbiBcXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHZjcHUsIG4pO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbitcXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDpcXG4gXFx0XFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7XFxuIFxcdH1cXG5AQCAtMTI0Niw2ICsxMzE2LDkgQEAgaW50IGt2bV9hcm1fcG11X3YzX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4gXFx0XFx0aXJxID0gdmNwdS1cXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcXG4gXFx0XFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbitcXHRcXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gLUVOWElPO1xcbkBAIC0xMjU5LDYgKzEzMzIsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOlxcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVTpcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcXG4rXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuIFxcdFxcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG5pbmRleCBiNWU1OTQyMjA0ZmM2OS4uMDJkNzMzODZhNmQwZTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXFxuKysrIGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXFxuQEAgLTM5LDcgKzM5LDcgQEAgc3RydWN0IGFybV9wbXVfZW50cnkge1xcbiBcXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdTtcXG4gfTtcXG4gXFxuLWJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpO1xcbitpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpO1xcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVxcdCgodiktXFx1MDAzZWFyY2gucG11LmlycV9udW0gIT0gMClcXG4gdTY0IGt2bV9wbXVfZ2V0X2NvdW50ZXJfdmFsdWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2VsZWN0X2lkeCk7XFxuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl92YWx1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzZWxlY3RfaWR4LCB1NjQgdmFsKTtcXG5AQCAtNTgsNiArNTgsNyBAQCB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7XFxuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xcbiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgdTY0IHNlbGVjdF9pZHgpO1xcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7XFxuQEAgLTk4LDkgKzk5LDkgQEAgdm9pZCBrdm1fcG11X25lc3RlZF90cmFuc2l0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHN0cnVjdCBrdm1fcG11IHtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXFxuIHtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gI2RlZmluZSBrdm1fYXJtX3BtdV9pcnFfaW5pdGlhbGl6ZWQodilcXHQoZmFsc2UpXFxuQEAgLTE2Myw2ICsxNjQsNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbiBzdGF0aWMgaW5saW5lIHU4IGt2bV9hcm1fcG11X2dldF9wbXV2ZXJfbGltaXQodm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xcbmluZGV4IDIyMjIzMzk1OTY5ZTBmLi5lYjgzNTJhNmUyZjYyNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xcbkBAIC00MDMsMTIgKzQwMyw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4gXFx0dTggcG11dmVyLCBlYztcXG4tXFx0dTY0IGRmcjAsIGlycSA9IDIzO1xcbi1cXHRzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0ge1xcbi1cXHRcXHQuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuLVxcdFxcdC5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsXFxuLVxcdFxcdC5hZGRyID0gKHU2NClcXHUwMDI2aXJxLFxcbi1cXHR9O1xcbitcXHR1NjQgZGZyMDtcXG4gXFxuIFxcdC8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovXFxuIFxcdG1lbXNldChcXHUwMDI2dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTtcXG5AQCAtNDM0LDggKzQyOSw2IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXFxuIFxcdFRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBtdXZlciBcXHUwMDNlPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCxcXG4gXFx0XFx0ICAgIFxcXCJVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1xcXCIsIHBtdXZlcik7XFxuLVxcbi1cXHR2Y3B1X2lvY3RsKHZwbXVfdm0udmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXFx1MDAyNmlycV9hdHRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXFxuQEAgLTQ2MSwxNSArNDU0LDMwIEBAIHN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZClcXG4re1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBib29sIGV4cGVjdF9mYWlsKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0dW5zaWduZWQgaW50IHByZXY7XFxuIFxcdGludCByZXQ7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4gXFxuIFxcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbiBcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbiBcXG4rXFx0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFxuIFxcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XFxuIFxcbiBcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG5AQCAtNDg5LDE1ICs0OTcsMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxcbiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yIHRoZSB2Q1BVIHRvIEBwbWNyX24sXFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbiBcXHR1NjQgc3A7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJUZXN0IHdpdGggcG1jcl9uICVsdVxcXFxuXFxcIiwgcG1jcl9uKTtcXG4rXFx0cHJfZGVidWcoXFxcIlRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxcXG5cXFwiLCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xcbitcXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XFxuIFxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuIFxcbiBcXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXFxuQEAgLTUzMSwxNCArNTM5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0ge1xcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcXG4gICogdGhlIFBNVSByZWdpc3RlciBzZXRzIGluIEB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdIGNvcnJlY3RseS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHU2NCBzZXRfcmVnX2lkLCBjbHJfcmVnX2lkLCByZWdfdmFsO1xcbiBcXHR1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XFxuK1xcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcXG4gXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4gXFxuIFxcdHZhbGlkX2NvdW50ZXJzX21hc2sgPSBnZXRfY291bnRlcnNfbWFzayhwbWNyX24pO1xcbkBAIC01ODgsMTEgKzU5NiwxMSBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcXG4gICogdGhlIHZDUFUgdG8gQHBtY3Jfbiwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QgdmFsdWUuXFxuICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxcbiB7XFxuIFxcdHByX2RlYnVnKFxcXCJFcnJvciB0ZXN0IHdpdGggcG1jcl9uICVsdSAobGFyZ2VyIHRoYW4gdGhlIGhvc3QpXFxcXG5cXFwiLCBwbWNyX24pO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7XFxuK1xcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIHRydWUpO1xcbiBcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4gfVxcbiBcXG5AQCAtNjIyLDIyICs2MzAsMTE0IEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXFxuIFxcdHJldHVybiBzdXBwb3J0ZWQ7XFxuIH1cXG4gXFxuLWludCBtYWluKHZvaWQpXFxuK3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbi1cXHR1NjQgaSwgcG1jcl9uO1xcbi1cXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XFxuLVxcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcXG4rXFx0dTY0IGk7XFxuIFxcbi1cXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcXG4tXFx0XFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xcbi1cXHRcXHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFx0XFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSBwbWNyX24gKyAxOyBpIFxcdTAwM2MgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxcbi1cXHRcXHRydW5fZXJyb3JfdGVzdChpKTtcXG4rXFx0XFx0cnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1NjQgaXJxID0gMjM7XFxuK1xcbitcXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4rXFx0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTyxcXG4rXFx0XFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFx0XFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHNldC4gKi9cXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbitcXHQgKiByZXN1bHRzIGluIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXFx1MDAyNmZpbHRlcik7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4rXFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFxuK1xcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXG4rXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXFxuK1xcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cXG4rXFx0ICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcXHUwMDI2ZmlsdGVyKTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHR2bSA9IHZtX2NyZWF0ZSgyKTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXFx1MDAyNmluaXQpO1xcbitcXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFxcdTAwM2NcXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFxcdTAwMjZpcnEpO1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbitcXHR2Y3B1X3J1bihydW5uaW5nX3ZjcHUpO1xcbitcXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1ksXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcbitcXHR0ZXN0X2NvbmZpZygwLCB0cnVlKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitcXG4rXFx0dGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7XFxuK1xcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MDYuOTM1ODQ2Nzk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjMzNDQzNTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzXCIsXG4gICAgXCJrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgZm9yIEFSTTY0IFBNVXYzIGVtdWxhdGlvbiwgd2hpY2ggYWxsb3dzIGVtdWxhdGluZyBhIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLiBUaGlzIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMgYW5kIGFkZHMgbmV3IGlvY3RsIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVmZjg4OWM5ZWQ1MGQxYjlhYjhjMWU1MWVjZWVjZmNiMDc5MDRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTQ6NTY6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xNGQxMWY5MTc5ZDFmNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5AQCAtNzQsNyArNzQsOCBAQCBpcnFjaGlwLlxuIFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxuIFx0IC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdFxuIFx0IFx0ICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGVcbi1cdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkIG9yIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbitcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4rXHRcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FSU5WQUwgIEludmFsaWQgZmlsdGVyIHJhbmdlXG4gXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMTE2LDE0ICsxMTcsMTQgQEAgdXNpbmcgZXZlbnQgMHgxMSAoQ1BVX0NZQ0xFUykuXG4gXG4gOlJldHVybnM6XG4gXG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxuKyAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBvciBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxuIFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcbiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlIFwidHlwZVwiXG5AQCAtMTY1LDYgKzE2NiwyOSBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXG4gc2VsZWN0ZWQgUE1VLiBTZWxlY3RpbmcgYSBuZXcgUE1VIGNhbmNlbHMgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIHRoaXNcbiBhdHRyaWJ1dGUuXG4gXG4rMS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rOlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyXG4rXG4rOlJldHVybnM6XG4rXG4rXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxuK1x0XHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxuK1x0XHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXG4rXHQgLUVOWElPICAgQXR0ZW1wdGVkIHRvIGdldCBiZWZvcmUgc2V0dGluZ1xuK1x0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIE9ubHkgZml4ZWRcbitjb3VudGVycyBhcmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3Q6IHRoZSBjeWNsZSBjb3VudGVyIHRvZGF5LCBhbmQgdGhlIGluc3RydWN0aW9uXG4rY291bnRlciBpZiBzdXBwb3J0IGZvciBGRUFUX1BNVXYzX0lDTlRSIGlzIGFkZGVkLlxuK1xuK1dpdGggcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIGRpc2FibGVkLCB0aGUgVkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUuXG4rVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIGhldGVyb2dlbmVvdXMgc3lzdGVtcyB3aGVyZSBkaWZmZXJlbnQgaGFyZHdhcmVcbitQTVVzIGNvdmVyIGRpZmZlcmVudCBwaHlzaWNhbCBDUFVzLiBBbGwgVkNQVXMgaW4gYSBWTSBzaGFyZSB0aGlzIGF0dHJpYnV0ZS5cbitcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDJmYWE2MGRmODQ3ZDIwLi5mNjY0NTlmODFjZDZjNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMzY3LDYgKzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19XUklUQUJMRV9JTVBfSURfUkVHU1x0XHQxMFxuIFx0LyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqL1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQVx0XHRcdFx0MTFcbitcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVFx0XHRcdDEyXG4rXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dhbW1hYmxlIGV2ZW50IGNvdW50ZXJzICovXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQxM1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDM3MzJlZTllYjBkNGU3Li4xYzBiY2UyN2M3MWJmNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuQEAgLTY5OCw2ICs2OTgsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRpZiAoaGFzX3ZoZSgpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbitcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUpO1xuIFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTtcbkBAIC0xNTU0LDE0ICsxNTU1LDE5IEBAIGludCBrdm1fdm1faW9jdGxfaXJxX2xpbmUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCAqaXJxX2xldmVsLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxuK3N0YXRpYyBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBLVk1fVkNQVV9WQUxJRF9GRUFUVVJFUztcbitcdGludCByO1xuIFxuIFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpKVxuIFx0XHRjbGVhcl9iaXQoS1ZNX0FSTV9WQ1BVX0VMMV8zMkJJVCwgXHUwMDI2ZmVhdHVyZXMpO1xuIFxuLVx0aWYgKCFrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMoKSlcbitcdHIgPSBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djMoKTtcbitcdGlmIChyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcjtcbitcbitcdGlmICghcilcbiBcdFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9QTVVfVjMsIFx1MDAyNmZlYXR1cmVzKTtcbiBcbiBcdGlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKVxuQEAgLTE1ODIsNiArMTU4OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW5pdF9jaGVja19mZWF0dXJlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9pbml0ICppbml0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBpbml0LVx1MDAzZWZlYXR1cmVzWzBdO1xuK1x0bG9uZyByO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoZmVhdHVyZXMgXHUwMDI2IH5LVk1fVkNQVV9WQUxJRF9GRUFUVVJFUylcbkBAIC0xNTkyLDcgKzE1OTksMTEgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pbml0X2NoZWNrX2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdH1cbiBcbi1cdGlmIChmZWF0dXJlcyBcdTAwMjYgfnN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpKVxuK1x0ciA9IHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcygpO1xuK1x0aWYgKHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiByO1xuK1xuK1x0aWYgKGZlYXR1cmVzIFx1MDAyNiB+cilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5pbmRleCBlZGIyMTIzOTQ3OGE5NS4uNTI4MTI2MDdiNzZkOTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5AQCAtNyw5ICs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMjQsMTAgKzI0LDI2IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gc3RhdGljIHZvaWQga3ZtX3BtdV9yZWxlYXNlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gXG4tYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbitpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbitcdGNwdW1hc2tfdmFyX3QgY3B1cyBfX2ZyZWUoZnJlZV9jcHVtYXNrX3ZhcikgPSBDUFVNQVNLX1ZBUl9OVUxMO1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1xuK1x0aWYgKCFhbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZjcHVzLCBHRlBfS0VSTkVMKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjcHVtYXNrX2NvcHkoY3B1cywgY3B1X3Bvc3NpYmxlX21hc2spO1xuK1xuK1x0Z3VhcmQocmN1KSgpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuK1x0XHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKCFjcHVtYXNrX2FuZG5vdChjcHVzLCBjcHVzLCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9wbWNfdG9fdmNwdShjb25zdCBzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuQEAgLTgwLDYgKzk2LDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4rc3RhdGljIGJvb2wga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuK31cbitcbiAvKipcbiAgKiBrdm1fcG1jX2lzXzY0Yml0IC0gZGV0ZXJtaW5lIGlmIGNvdW50ZXIgaXMgNjRiaXRcbiAgKiBAcG1jOiBjb3VudGVyIGNvbnRleHRcbkBAIC0zMjcsNyArMzQ4LDExIEBAIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3BtY19lbmFibGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIHtcbi1cdGlmICghcG1jLVx1MDAzZXBlcmZfZXZlbnQpIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuK1xuK1x0aWYgKCFwbWMtXHUwMDNlcGVyZl9ldmVudCB8fFxuK1x0ICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhY3B1bWFza190ZXN0X2NwdSh2Y3B1LVx1MDAzZWNwdSwgXHUwMDI2dG9fYXJtX3BtdShwbWMtXHUwMDNlcGVyZl9ldmVudC1cdTAwM2VwbXUpLVx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcbiBcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtNjQ5LDEwICs2NzQsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbitzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJ3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDYgKzY4NiwyMyBAQCBzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxuIFx0cmV0dXJuIGV2ZW50c2VsO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4re1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbitcbitcdGd1YXJkKHJjdSkoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiBwbXU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gLyoqXG4gICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuICAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuQEAgLTY3Niw2ICs3MTYsMTIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0aW50IGV2ZW50c2VsO1xuIFx0dTY0IGV2dHJlZztcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSh2Y3B1LVx1MDAzZWNwdSk7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIWFybV9wbXUpKVxuK1x0XHRcdHJldHVybjtcbitcdH1cbitcbiBcdGV2dHJlZyA9IGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKTtcbiBcbiBcdGt2bV9wbXVfc3RvcF9jb3VudGVyKHBtYyk7XG5AQCAtNzA0LDcgKzc1MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdCAqIERvbid0IGNyZWF0ZSBhbiBldmVudCBpZiB3ZSdyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXNcbiBcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cbiBcdCAqL1xuLVx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudCh2Y3B1LVx1MDAzZWt2bSwgZXZlbnRzZWwpO1xuK1x0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudChhcm1fcG11LCBldmVudHNlbCk7XG4gXHRpZiAoZXZlbnRzZWwgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbkBAIC03ODksNDMgKzgzNSw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0ZW50cnktXHUwMDNlYXJtX3BtdSA9IHBtdTtcbi1cdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKVxuLXtcbi1cdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcbi1cdHN0cnVjdCBhcm1fcG11ICpwbXU7XG4tXHRpbnQgY3B1O1xuLVxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzXG4tXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxuLVx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbi1cdCAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi5cbi1cdCAqXG4tXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbi1cdCAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVVxuLVx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcbi1cdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4tXHQgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXRcbi1cdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cbi1cdCAqXG4tXHQgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUElcbi1cdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcbi1cdCAqIGNhcnJpZWQgaGVyZS5cbi1cdCAqL1xuLVx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuLVx0XHRwbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuLVxuLVx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFx1MDAyNnBtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4tXHRcdFx0cmV0dXJuIHBtdTtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuK1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcbkBAIC04NzAsNiArODgwLDkgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBcdHU2NCB2YWwsIG1hc2sgPSAwO1xuIFx0aW50IGJhc2UsIGksIG5yX2V2ZW50cztcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghcG1jZWlkMSkge1xuIFx0XHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XG4gXHRcdGJhc2UgPSAwO1xuQEAgLTg5Nyw2ICs5MTAsMjQgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBcdHJldHVybiB2YWwgXHUwMDI2IG1hc2s7XG4gfVxuIFxuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdC8qXG4rXHQgKiBBUk1WOF9QTVVfSU5TVFJfSURYIHdpbGwgbmVlZCB0aGUgc2FtZSBjaGVjayBvbmNlXG4rXHQgKiBGRUFUX1BNVXYzX0lDTlRSIGlzIHN1cHBvcnRlZC5cbitcdCAqL1xuK1x0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4rXHRzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdTtcbitcbitcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fFxuK1x0ICAgICFrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChwbWMpIHx8ICFwbWMtXHUwMDNlcGVyZl9ldmVudClcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3B1X3BtdSA9IHRvX2FybV9wbXUocG1jLVx1MDAzZXBlcmZfZXZlbnQtXHUwMDNlcG11KTtcbitcdGlmICghY3B1bWFza190ZXN0X2NwdSh2Y3B1LVx1MDAzZWNwdSwgXHUwMDI2Y3B1X3BtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbit9XG4rXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xuQEAgLTEwMDgsNiArMTAzOSw5IEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHQvKlxuIFx0ICogUE1VdjMgcmVxdWlyZXMgdGhhdCBhbGwgZXZlbnQgY291bnRlcnMgYXJlIGNhcGFibGUgb2YgY291bnRpbmcgYW55XG4gXHQgKiBldmVudCwgdGhvdWdoIHRoZSBzYW1lIG1heSBub3QgYmUgdHJ1ZSBvZiBub24tUE1VdjMgaGFyZHdhcmUuXG5AQCAtMTA2Miw3ICsxMDk2LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxuICAqL1xuIGludCBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSgpO1xuK1x0LypcbitcdCAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzXG4rXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxuK1x0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbitcdCAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi5cbitcdCAqXG4rXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbitcdCAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVVxuK1x0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcbitcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4rXHQgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXRcbitcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cbitcdCAqXG4rXHQgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUElcbitcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcbitcdCAqIGNhcnJpZWQgaGVyZS5cbitcdCAqL1xuK1x0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiBcbiBcdGlmICghYXJtX3BtdSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG5AQCAtMTA3OSwxNyArMTEzMCwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0aW50IHJldCA9IC1FTlhJTztcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbitcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuIFx0XHRhcm1fcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbiBcdFx0aWYgKGFybV9wbXUtXHUwMDNlcG11LnR5cGUgPT0gcG11X2lkKSB7XG4gXHRcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fFxuK1x0XHRcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxuIFx0XHRcdCAgICAoa3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xuIFx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcdFx0XHRrdm1fYXJtX3NldF9wbXUoa3ZtLCBhcm1fcG11KTtcbiBcdFx0XHRjcHVtYXNrX2NvcHkoa3ZtLVx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFx1MDAyNmFybV9wbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpO1xuIFx0XHRcdHJldCA9IDA7XG5AQCAtMTA5NywxMCArMTE1MCwyNSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciB8fFxuK1x0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbitcdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbkBAIC0xMTc1LDcgKzEyNDMsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbitcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIpIHtcbkBAIC0xMjIwLDYgKzEyODgsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFxuIFx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHZjcHUsIG4pO1xuIFx0fVxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4rXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDpcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7XG4gXHR9XG5AQCAtMTI0Niw2ICsxMzE2LDkgQEAgaW50IGt2bV9hcm1fcG11X3YzX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdFx0aXJxID0gdmNwdS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtO1xuIFx0XHRyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7XG4gXHR9XG4rXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbitcdFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRyZXR1cm4gLUVOWElPO1xuQEAgLTEyNTksNiArMTMzMiw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVU6XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4gXHRcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuaW5kZXggYjVlNTk0MjIwNGZjNjkuLjAyZDczMzg2YTZkMGU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBhcm1fcG11X2VudHJ5IHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11O1xuIH07XG4gXG4tYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZCk7XG4raW50IGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKTtcbiAjZGVmaW5lIGt2bV9hcm1fcG11X2lycV9pbml0aWFsaXplZCh2KVx0KCh2KS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtICE9IDApXG4gdTY0IGt2bV9wbXVfZ2V0X2NvdW50ZXJfdmFsdWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2VsZWN0X2lkeCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNlbGVjdF9pZHgsIHU2NCB2YWwpO1xuQEAgLTU4LDYgKzU4LDcgQEAgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXG4gXHRcdFx0XHQgICAgdTY0IHNlbGVjdF9pZHgpO1xuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcbkBAIC05OCw5ICs5OSw5IEBAIHZvaWQga3ZtX3BtdV9uZXN0ZWRfdHJhbnNpdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHN0cnVjdCBrdm1fcG11IHtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbitzdGF0aWMgaW5saW5lIGludCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiB7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gI2RlZmluZSBrdm1fYXJtX3BtdV9pcnFfaW5pdGlhbGl6ZWQodilcdChmYWxzZSlcbkBAIC0xNjMsNiArMTY0LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5pbmRleCAyMjIyMzM5NTk2OWUwZi4uZWI4MzUyYTZlMmY2MjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5AQCAtNDAzLDEyICs0MDMsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4gXHR1OCBwbXV2ZXIsIGVjO1xuLVx0dTY0IGRmcjAsIGlycSA9IDIzO1xuLVx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcbi1cdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuLVx0XHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxuLVx0XHQuYWRkciA9ICh1NjQpXHUwMDI2aXJxLFxuLVx0fTtcbitcdHU2NCBkZnIwO1xuIFxuIFx0LyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi9cbiBcdG1lbXNldChcdTAwMjZ2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpO1xuQEAgLTQzNCw4ICs0MjksNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIFx0VEVTVF9BU1NFUlQocG11dmVyICE9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBtdXZlciBcdTAwM2U9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLFxuIFx0XHQgICAgXCJVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1wiLCBwbXV2ZXIpO1xuLVxuLVx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmlycV9hdHRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXG5AQCAtNDYxLDE1ICs0NTQsMzAgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxuK3tcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcbitcdFx0XHRcdFx0XHQgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LFxuK1x0XHRcdFx0XHRcdCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbitcdHU2NCBpcnEgPSAyMztcbiBcbiBcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuIFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbiBcbitcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KVxuK1x0XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcbiBcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XG4gXG4gXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbkBAIC00ODksMTUgKzQ5NywxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4rc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHR1NjQgc3A7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuIFxuLVx0cHJfZGVidWcoXCJUZXN0IHdpdGggcG1jcl9uICVsdVxcblwiLCBwbWNyX24pO1xuK1x0cHJfZGVidWcoXCJUZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcblwiLCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuK1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpO1xuIFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbiBcbiBcdC8qIFNhdmUgdGhlIGluaXRpYWwgc3AgdG8gcmVzdG9yZSB0aGVtIGxhdGVyIHRvIHJ1biB0aGUgZ3Vlc3QgYWdhaW4gKi9cbkBAIC01MzEsMTQgKzUzOSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcbiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcbkBAIC01ODgsMTEgKzU5NiwxMSBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cbiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHRwcl9kZWJ1ZyhcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXG5cIiwgcG1jcl9uKTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpO1xuK1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG5AQCAtNjIyLDIyICs2MzAsMTE0IEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbi1pbnQgbWFpbih2b2lkKVxuK3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4tXHR1NjQgaSwgcG1jcl9uO1xuLVxuLVx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuK1x0dTY0IGk7XG4gXG4tXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcbi1cdFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xuLVx0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XG4rXHRcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbitcdFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcdTAwM2MgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxuLVx0XHRydW5fZXJyb3JfdGVzdChpKTtcbitcdFx0cnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdGludCByZXQ7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4rXHRcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcbitcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSBzdWNjZWVkcy4gKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgc2V0LiAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0LypcbitcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuK1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcbitcdC8qXG4rXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXG4rXHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK1xuK1x0LypcbitcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbitcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZtID0gdm1fY3JlYXRlKDIpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbitcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdHZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcbitcdHRlc3RfY29uZmlnKDAsIHRydWUpO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbitcbitcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xuK1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NjowNi45MzU4NDk0OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODkyODg1NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgS1ZNIEFSTTY0IFBNVXYzIEF0dHJpYnV0ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRvIHJldmlldywgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAsIGZvciBBUk02NCdzIFBNVXYzIGVtdWxhdGlvbi4gSW50ZXJlc3RpbmcuLi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIGFsbG93IFBNVXYzIGVtdWxhdGlvbiBldmVuIHdpdGhvdXQgdGhlIHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycywgc3RpY2tpbmcgc29sZWx5IHRvIHRoZSBmaXhlZCBjb3VudGVycy4gVGhhdCdzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMuIFRoaXMgY2hhbmdlcyBob3cgd2UgbW9kZWwgcGVyZm9ybWFuY2UgY291bnRlcnMgaW4gdGhlIGh5cGVydmlzb3IgYW5kIHRoYXQsIGJ5IGRlZmluaXRpb24sIG11c3QgYmUgbG9va2VkIGF0IHdpdGggc2NydXRpbnkuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIGBhcmNoL2FybTY0L2t2bS9hcm0uY2AsIGFuZCwgaW1wb3J0YW50bHksIGFkZHMgYSBuZXcgaW9jdGwgYXR0cmlidXRlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBhdHRyaWJ1dGUgd29ya3MuIFRoZSBrZXkgZmlsZSBzZWVtcyB0byBiZSBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiB0aGUgUE1VIGVtdWxhdGlvbi5cblxuU2luY2UgdGhpcyBpcyBLVk0gb24gQVJNNjQsIHRoaXMgY29kZSB3aWxsIGJlIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQgYW5kIHdlIGFyZSBvbiBhbiBBUk02NCBhcmNoaXRlY3R1cmUsIHNvIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgcHJvcGVybHkgc2V0IHRvIHRlc3QgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBjb3JyZWN0LCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MTIuODI4NzM4ODAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODAxMTAyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdD0xNjc9YXR0cmlidXRlLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdC0xNjgtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0OjE2OToxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QtMTcwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTM4OT1lbnVtIHtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC00MzktI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTXFx0NFxcbmFyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo0NDA6I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxcdDVcXG5hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtNDQxLSNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTExODY9aW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTI5MC1cXHR9XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMjkxOlxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTI5Mi1cXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMzAwPWludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMTgtXFx0fVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTMxOTpcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMjAtXFx0XFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMzI3PWludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMzQtXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjEzMzU6XFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzM2LVxcdFxcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYz00NjI9c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNDc1LVxcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jOjQ3NjpcXHRcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYy00NzctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jPTY0Nj1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjU3LVxcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2NTg6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjY3LVxcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo2Njg6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjY5LVxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjczLVxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6Njc0OlxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY3NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNjc3LVxcdHZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmM6Njc4OlxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jLTY3OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzAwLVxcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo3MDE6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzAyLVxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzIzLVxcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYzo3MjQ6XFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMtNzI1LVxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MjEuNTA4ODU3NjMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MTk0MDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBBUk02NCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgdG8gS1ZNIGZvciBBUk02NC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2FybS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgS1ZNIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cywgcG90ZW50aWFsbHkgZm9jdXNpbmcgb24gZml4ZWQgY291bnRlcnMuIFRoaXMgdHlwZSBvZiBtb2RpZmljYXRpb24gc2NyZWFtcyBcImZ1enogbWVcIiEgRGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGludHJvZHVjZWQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBzYWZlIHRvIGFzc3VtZSBgS1ZNYCBpcyByZXF1aXJlZCwgYmVpbmcgdGhlIGJhc2UgS1ZNIGNvbmZpZy4gTm93LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IFBNVXYzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBwYXRjaCBtYXkgaW50ZXJhY3Qgd2l0aCBvciBkZXBlbmQgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGFjdCB0byBkZXNpZ24gYXBwcm9wcmlhdGUgZnV6emluZyBpbnB1dHMgYW5kIHRhcmdldHMuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgS1ZNIGFuZCBBUk02NCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTY6MjYuNTgwODAxMjI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTM2MTAwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0hXX1BFUkZfRVZFTlRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21hY2gtZXh5bm9zL3N1c3BlbmQuYz00NTE9c3RhdGljIHZvaWQgZXh5bm9zNTQyMF9wcmVwYXJlX3BtX3Jlc3VtZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jLTQ2MC1cXG5hcmNoL2FybS9tYWNoLWV4eW5vcy9zdXNwZW5kLmM6NDYxOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19IV19QRVJGX0VWRU5UUykgXFx1MDAyNlxcdTAwMjYgY2x1c3RlciAhPSAwKSB7XFxuYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jLTQ2Mi1cXHRcXHQvKlxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmg9MTQ9Y3B1Y2FwX2lzX3Bvc3NpYmxlKGNvbnN0IHVuc2lnbmVkIGludCBjYXApXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaC03NC1cXHRjYXNlIEFSTTY0X0hBU19QTVVWMzpcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaDo3NTpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oLTc2LVxcdGNhc2UgQVJNNjRfSEFTX0xTVUk6XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTkyMz1zdGF0aWMgYm9vbCBoYXNfbHBhMihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTI4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTI5OiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkzMC1zdGF0aWMgYm9vbCBoYXNfcG11djMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjUzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zMTMxLSNlbmRpZlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMTMyOiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzEzMy1cXHR7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZT0xNj1rdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxcXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yOC1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyOTprdm0tJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpICArPSBwbXUtZW11bC5vIHBtdS5vXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMzAta3ZtLSQoQ09ORklHX0FSTTY0X1BUUl9BVVRIKSAgKz0gcGF1dGgub1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM9MTI5PXN0YXRpYyB2b2lkIF9faHlwX3ZnaWNfcmVzdG9yZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0xNDUtICovXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MTQ2OiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0xNDctc3RhdGljIGJvb2wgX19wbXVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19QRVJGX0VWRU5UUylcXHQrPSBwZXJmX2V2ZW50Lm8gcGVyZl9yZWdzLm9cXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpXFx0Kz0gcGVyZl9ldmVudF9taXBzeHgub1xcbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUtMTA0LVxcbi0tXFxuaW5jbHVkZS9rdm0vYXJtX3BtdS5oLTE3LVxcbmluY2x1ZGUva3ZtL2FybV9wbXUuaDoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0tWTSlcXG5pbmNsdWRlL2t2bS9hcm1fcG11LmgtMTktc3RydWN0IGt2bV9wbWMge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NjozMC43OTQ0MjM5MTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE1MDM0OTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQTVUgdjMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgUE1VIGZlYXR1cmVzIGFyZSBpbnRlZ3JhdGVkLiBGaXJzdCwgSSBzZWUgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYHBtdS1lbXVsLmNgIOKAkyB0aGF0J3MgYSBrZXkgZGVwZW5kZW5jeS4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgYW5vdGhlciByZXF1aXJlbWVudCwgdGhhdCdzIGEgZ2l2ZW4uIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgb3IgbW9kaWZ5aW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlc2U6XG5cbiogICBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YFxuKiAgIGBrdm1fdmNwdV9sb2FkX3BtdWBcbiogICBga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzYFxuKiAgIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50YFxuKiAgIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmBcblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoaXMgbmV3IGZ1bmN0aW9uIGBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZTpcblxuYGBgY1xuK3N0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1xuK1x0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIHx8XG4rXHQgICAgdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuK1x0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbmBgYFxuXG5JdCBzZWVtcyB0byBiZSBzZXR0aW5nIGEgZmxhZyBhbmQgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjb3VudGVycyB3aGVuIHRoZSBWTSBoYXNuJ3QgcnVuIHlldCBhbmQgd2hlbiBub3QgYWxyZWFkeSBjb25maWd1cmVkIGluIGFub3RoZXIgd2F5LlxuXG5JIGFtIGFsc28gZXhhbWluaW5nIGBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djNgOlxuXG5gYGBjXG4tYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbitpbnQga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuLVx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbitcdGNwdW1hc2tfdmFyX3QgY3B1cyBfX2ZyZWUoZnJlZV9jcHVtYXNrX3ZhcikgPSBDUFVNQVNLX1ZBUl9OVUxMO1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1xuK1x0aWYgKCFhbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZjcHVzLCBHRlBfS0VSTkVMKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjcHVtYXNrX2NvcHkoY3B1cywgY3B1X3Bvc3NpYmxlX21hc2spO1xuK1xuK1x0Z3VhcmQocmN1KSgpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuK1x0XHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKCFjcHVtYXNrX2FuZG5vdChjcHVzLCBjcHVzLCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuYGBgXG5cblRoaXMgbm93IHJldHVybnMgYW4gaW50ZWdlciB3aGljaCBjYW4gcmVwcmVzZW50IGEgZmFpbHVyZS5cblxuVGhlIG90aGVyIGZ1bmN0aW9ucyBsaXN0ZWQgYXJlIGxpa2VseSByZWxhdGVkIHRvIFBNVSBzZXR1cCBhbmQgZXZlbnQgaGFuZGxpbmcuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgSFdfUEVSRl9FVkVOVFNgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyBuYW1lLiBBbmQgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgaXMgYSBtYWNybywgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaC4gSSBzaG91bGQgYmUgYWJsZSB0byBpbmNvcnBvcmF0ZSB0aGlzIGludG8gbXkgZnV6emluZyBzdHJhdGVneS4gSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODksIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1Njo0NS45NDQ3NzcyMjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTYyMDgxNSwiRXJyb3IiOiJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFMiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJIV19QRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9wbXVcIixcbiAgICBcImt2bV9zdXBwb3J0c19ndWVzdF9wbXV2M1wiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudFwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBkZXZpY2UgYXR0cmlidXRlIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgIGZvciBBUk02NCBQTVV2MyBlbXVsYXRpb24sIHdoaWNoIGFsbG93cyBlbXVsYXRpbmcgYSBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy4gVGhpcyBtb2RpZmllcyBjb3JlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGxvZ2ljIGFuZCBhZGRzIG5ldyBpb2N0bCBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UU1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1Njo0Ni4yNjQ0MjMyNzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI1NDc5NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIGBIV19QRVJGX0VWRU5UU2AqKlxuXG5IbW0sIGl0IHNlZW1zIGxpa2UgYEhXX1BFUkZfRVZFTlRTYCBpc24ndCBkZWZpbmVkLiBUaGF0J3MgdW51c3VhbCwgSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgdGhhdC4gUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gKnNob3VsZCogYmUgZGVmaW5lZC4gR2l2ZW4gaXRzIG5hdHVyZSwgaXQncyBtb3N0IGxpa2VseSByZWxhdGVkIHRvIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBzbyBpdCBzaG91bGQgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGVzIG9yIHRoZSBnZW5lcmFsIGluaXRpYWxpemF0aW9uIEtjb25maWcuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBhcmNoL2FybTY0L0tjb25maWdgIGFuZCB0aGVuIG1heWJlIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBtb3N0IGxpa2VseSBmaW5kIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0J3MgbWlzc2luZyBvciB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGNvbmZpZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE0OjU2OjUxLjI4OTkwNjgyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM3Mzc1MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIV19QRVJGX0VWRU5UU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEyNTE9Y29uZmlnIENQVV9UVEJSMF9QQU5cXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTI1Ny1cXG5hcmNoL2FybS9LY29uZmlnOjEyNTg6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXFxuYXJjaC9hcm0vS2NvbmZpZy0xMjU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNTQ5PWNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTUyLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTUzOmNvbmZpZyBIV19QRVJGX0VWRU5UU1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTU0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI2OTA9Y29uZmlnIE5PREVTX1NISUZUXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0yNjk0LVxcbmFyY2gvbWlwcy9LY29uZmlnOjI2OTU6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXFxuYXJjaC9taXBzL0tjb25maWctMjY5Ni1cXHRib29sIFxcXCJFbmFibGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBwZXJmIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz02MjY9Y29uZmlnIEdVU0FfUkJcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy02MzUtXFxuYXJjaC9zaC9LY29uZmlnOjYzNjpjb25maWcgSFdfUEVSRl9FVkVOVFNcXG5hcmNoL3NoL0tjb25maWctNjM3LVxcdGJvb2wgXFxcIkVuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1Njo1Ni42MjczMzYxNjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNzMwNDcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEhXX1BFUkZfRVZFTlRTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGBIV19QRVJGX0VWRU5UU2AgYW5kLCBvbiBhcm02NCwgaXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBgeWAsIG1lYW5pbmcgaXQncyBhbHdheXMgZW5hYmxlZCBpZiBgUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgc2F3IHRoaXMgZXJyb3IgbWVzc2FnZTogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFMuXCIgVGhhdCdzIHRocm93aW5nIG1lIG9mZi5cblxuV2FpdCBhIHNlY29uZC4uLiBQZXJoYXBzIHRoZSBpc3N1ZSBpc24ndCB0aGF0IGl0ICpsaXRlcmFsbHkqIGRvZXNuJ3QgZXhpc3QsIGJ1dCB0aGF0IGl0J3Mgbm90IGEgdXNlci1jb25maWd1cmFibGUgb3B0aW9uIGRpcmVjdGx5IHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYG1ha2UgbWVudWNvbmZpZ2AuIEl0J3MgYSBkZXBlbmRlbmN5LCBhbmQgdGhlIHN5c3RlbSBpcyBnZXR0aW5nIHRyaXBwZWQgdXAgb24gdGhhdCBkaXN0aW5jdGlvbi4gSXQgZG9lc24ndCBzaG93IHVwIGluIHRob3NlIG1lbnVzLCBzbyBpdCdzIG5vdCBcImV4aXN0aW5nXCIgaW4gdGhhdCBzZW5zZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgUEVSRl9FVkVOVFNgIGlzIHRoZSByaWdodCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTc6MDMuMzM0NjQ2MTI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI2NzYyNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJGX0VWRU5UU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZz0yPW1lbnUgXFxcIlBlcmZvcm1hbmNlIG1vbml0b3JpbmdcXFwiXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMy1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MTI6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTktXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MjA6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX0NTVEFURVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBjc3RhdGUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjctXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI5LVxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjM3OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIkFNRCBVbmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDctXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9CUlNcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuLS1cXG5pbml0L0tjb25maWc9MjEyMT1tZW51IFxcXCJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1xcXCJcXG5pbml0L0tjb25maWctMjEyMi1cXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcXG5pbml0L0tjb25maWctMjEyNC1cXHRib29sIFxcXCJLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTQ6NTc6MDcuNzYxNDE0MzY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTAzMTAxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqVGhlIFJpZ2h0IFRvb2xzIGZvciB0aGUgSm9iKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCB0aGlzIHBhcnRpY3VsYXIgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBpdCdzIGJlY29tZSBjbGVhciB0aGF0IGBQRVJGX0VWRU5UU2AgaXMgdGhlIGNvcnJlY3QgYXZlbnVlIHRvIGV4cGxvcmUuIEkndmUgd29ya2VkIHdpdGggYSBsb3Qgb2YgZGlmZmVyZW50IHByb2ZpbGluZyB0b29scyBvdmVyIHRoZSB5ZWFycywgYW5kIGBQRVJGX0VWRU5UU2Agc2VlbXMgbGlrZSB0aGUgbW9zdCB2ZXJzYXRpbGUgYW5kIHBvd2VyZnVsIG9wdGlvbiBmb3Igd2hhdCBJIG5lZWQgdG8gYWNoaWV2ZSBoZXJlLiBJJ20gdGhpbmtpbmcsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QsIHRoYXQgbGV2ZXJhZ2luZyBgS1ZNYCBhbG9uZ3NpZGUgYFBFUkZfRVZFTlRTYCB3aWxsIGdpdmUgbWUgdGhlIGdyYW51bGFyaXR5IGFuZCBhY2Nlc3MgdG8gbG93LWxldmVsIGRhdGEgSSByZXF1aXJlLiBUaGlzIGNvbWJpbmF0aW9uIHNob3VsZCBhbGxvdyBtZSB0byBwaW5wb2ludCB0aGUgcHJlY2lzZSBib3R0bGVuZWNrcyBhbmQgYmVoYXZpb3IgSSdtIGFmdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0NSwiT3V0cHV0VG9rZW5zIjoyMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNDo1NzoxMy4wNzE3Mjg3NjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg1NDUyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlcIixcbiAgICBcImt2bV92Y3B1X2xvYWRfcG11XCIsXG4gICAgXCJrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djNcIixcbiAgICBcImt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRcIixcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gZGV2aWNlIGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCBmb3IgQVJNNjQgUE1VdjMgZW11bGF0aW9uLCB3aGljaCBhbGxvd3MgZW11bGF0aW5nIGEgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuIFRoaXMgbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBsb2dpYyBhbmQgYWRkcyBuZXcgaW9jdGwgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzXCIsXG4gICAgXCJrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGRldmljZSBhdHRyaWJ1dGUgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAgZm9yIEFSTTY0IFBNVXYzIGVtdWxhdGlvbiwgd2hpY2ggYWxsb3dzIGVtdWxhdGluZyBhIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLiBUaGlzIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gbG9naWMgYW5kIGFkZHMgbmV3IGlvY3RsIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowplzcs[1] Phase: Succeeded StartedAt: 2026-07-06 14:57:53 +0000 UTC FinishedAt: 2026-07-06 14:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 14:57:54 +0000 UTC FinishedAt: 2026-07-06 14:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2] Phase: Succeeded StartedAt: 2026-07-06 14:57:54 +0000 UTC FinishedAt: 2026-07-06 16:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 14:57:54 +0000 UTC FinishedAt: 2026-07-06 16:11:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 14:57:54 +0000 UTC FinishedAt: 2026-07-06 14:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 14:57:55 +0000 UTC FinishedAt: 2026-07-06 14:58:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowplzcs/series-workflowplzcs-convert-artifact-3241254156/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 14:59:06 +0000 UTC FinishedAt: 2026-07-06 15:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 14:59:06 +0000 UTC FinishedAt: 2026-07-06 15:38:36 +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:*b2efddba-5516-4d95-87d3-0d4f3477b92f,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-workflowplzcs/series-workflowplzcs-convert-artifact-3241254156/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": "63834d41-6963-4eaf-9eb6-0e2a7dfadca5", "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-workflowplzcs/series-workflowplzcs-build-action-3620758330/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 14:59:06 +0000 UTC FinishedAt: 2026-07-06 15:38:26 +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:*b2efddba-5516-4d95-87d3-0d4f3477b92f,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-workflowplzcs/series-workflowplzcs-convert-artifact-3241254156/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": "63834d41-6963-4eaf-9eb6-0e2a7dfadca5", "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-workflowplzcs/series-workflowplzcs-build-action-3620758330/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 15:38:36 +0000 UTC FinishedAt: 2026-07-06 15:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 15:38:36 +0000 UTC FinishedAt: 2026-07-06 15:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 15:38:36 +0000 UTC FinishedAt: 2026-07-06 15:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 15:38:36 +0000 UTC FinishedAt: 2026-07-06 15:38:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowplzcs/series-workflowplzcs-convert-artifact-578934347/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 15:38:57 +0000 UTC FinishedAt: 2026-07-06 15:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 15:38:57 +0000 UTC FinishedAt: 2026-07-06 15:41:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63834d41-6963-4eaf-9eb6-0e2a7dfadca5,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-workflowplzcs/series-workflowplzcs-build-action-3620758330/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-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 15:41:18 +0000 UTC FinishedAt: 2026-07-06 15:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 15:41:18 +0000 UTC FinishedAt: 2026-07-06 15:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 15:41:18 +0000 UTC FinishedAt: 2026-07-06 16:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 15:41:18 +0000 UTC FinishedAt: 2026-07-06 16:05:43 +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:*b2efddba-5516-4d95-87d3-0d4f3477b92f,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-workflowplzcs/series-workflowplzcs-convert-artifact-578934347/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": "fe842ec0-16ab-4c7f-a78a-a70812b3bd78", "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-workflowplzcs/series-workflowplzcs-build-action-3456105199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 15:41:18 +0000 UTC FinishedAt: 2026-07-06 16:05:33 +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:*b2efddba-5516-4d95-87d3-0d4f3477b92f,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-workflowplzcs/series-workflowplzcs-convert-artifact-578934347/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": "fe842ec0-16ab-4c7f-a78a-a70812b3bd78", "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-workflowplzcs/series-workflowplzcs-build-action-3456105199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 16:05:43 +0000 UTC FinishedAt: 2026-07-06 16:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 16:05:43 +0000 UTC FinishedAt: 2026-07-06 16:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 16:05:43 +0000 UTC FinishedAt: 2026-07-06 16:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 16:05:43 +0000 UTC FinishedAt: 2026-07-06 16:07:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe842ec0-16ab-4c7f-a78a-a70812b3bd78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,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-workflowplzcs/series-workflowplzcs-build-action-3456105199/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-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 16:07:47 +0000 UTC FinishedAt: 2026-07-06 16:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 16:07:47 +0000 UTC FinishedAt: 2026-07-06 16:11:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*63834d41-6963-4eaf-9eb6-0e2a7dfadca5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe842ec0-16ab-4c7f-a78a-a70812b3bd78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,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-workflowplzcs/series-workflowplzcs-build-action-3620758330/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,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-workflowplzcs/series-workflowplzcs-build-action-3456105199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 16:07:47 +0000 UTC FinishedAt: 2026-07-06 16:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 16:07:47 +0000 UTC FinishedAt: 2026-07-06 16:07:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},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-workflowplzcs/series-workflowplzcs-convert-artifact-2758364388/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 16:07:47 +0000 UTC FinishedAt: 2026-07-06 16:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 16:07:47 +0000 UTC FinishedAt: 2026-07-06 16:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 16:07:47 +0000 UTC FinishedAt: 2026-07-06 16:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 16:08:08 +0000 UTC FinishedAt: 2026-07-06 16:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplzcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_vcpu_load_pmu","kvm_supports_guest_pmuv3","kvm_pmu_create_perf_event","kvm_arm_pmu_v3_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1ee27dacbe5dc4def481794d899d67b0d4570094","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"7e72db22-d50a-48d3-af61-a4a0a6fe14c2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 16:08:08 +0000 UTC FinishedAt: 2026-07-06 16:10:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63834d41-6963-4eaf-9eb6-0e2a7dfadca5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe842ec0-16ab-4c7f-a78a-a70812b3bd78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-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-workflowplzcs/series-workflowplzcs-build-action-3620758330/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,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-workflowplzcs/series-workflowplzcs-build-action-3456105199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.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-workflowplzcs/series-workflowplzcs-convert-artifact-2758364388/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}